From: Jean-Paul Mari Date: Sun, 16 Sep 2018 05:41:16 +0000 (-0400) Subject: Added LEB128 decoding functions X-Git-Tag: v2.1.3-R4~33 X-Git-Url: http://git.hcoop.net/clinton/Virtual-Jaguar-Rx.git/commitdiff_plain/68ca35f35bfa4122b75f65c51fff8de3d8de40e4?ds=sidebyside Added LEB128 decoding functions --- diff --git a/Win-VS2017/virtualjaguar.vcxproj b/Win-VS2017/virtualjaguar.vcxproj index 3561824..4f8b2c8 100644 --- a/Win-VS2017/virtualjaguar.vcxproj +++ b/Win-VS2017/virtualjaguar.vcxproj @@ -286,6 +286,7 @@ + @@ -696,6 +697,7 @@ .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_NO_DEBUG -DQT_OPENGL_LIB -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D_UNICODE "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtOpenGL" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-VS2015\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)\." + diff --git a/Win-VS2017/virtualjaguar.vcxproj.filters b/Win-VS2017/virtualjaguar.vcxproj.filters index 720a840..bf19ace 100644 --- a/Win-VS2017/virtualjaguar.vcxproj.filters +++ b/Win-VS2017/virtualjaguar.vcxproj.filters @@ -400,6 +400,9 @@ Source Files\gui\tab + + Source Files + @@ -450,6 +453,9 @@ Header Files + + Header Files + diff --git a/src/LEB128.cpp b/src/LEB128.cpp new file mode 100644 index 0000000..159b5f3 --- /dev/null +++ b/src/LEB128.cpp @@ -0,0 +1,46 @@ + + +// Decode an unsigned LEB128 +// Algorithm from Appendix C of the DWARF 2, and 3, spec section "7.6" +unsigned long ReadULEB128(char *addr) +{ + unsigned long result = 0; + size_t shift = 0; + unsigned char byte; + + do + { + byte = *addr++; + result |= (byte & 0x7f) << shift; + shift += 7; + } + while ((byte & 0x80)); + + return result; +} + + +// Decode a signed LEB128 +// Algorithm from Appendix C of the DWARF 2, and 3, spec section "7.6" +long ReadLEB128(char *addr) +{ + long result = 0; + size_t shift = 0; + unsigned char byte; + + do + { + byte = *addr++; + result |= (byte & 0x7f) << shift; + shift += 7; + } + while ((byte & 0x80)); + + if ((shift < (8 * sizeof(result))) && (byte & 0x40)) + { + result |= (~0 << shift); + } + + return result; +} + diff --git a/src/LEB128.h b/src/LEB128.h new file mode 100644 index 0000000..7f2c527 --- /dev/null +++ b/src/LEB128.h @@ -0,0 +1,6 @@ + +// LEB128 handler + +// +extern unsigned long ReadULEB128(char *addr); +extern long ReadLEB128(char *addr); diff --git a/virtualjaguar.pro b/virtualjaguar.pro index 60043d3..c3ca4c0 100644 --- a/virtualjaguar.pro +++ b/virtualjaguar.pro @@ -127,7 +127,8 @@ HEADERS = \ src/crc32.h \ src/settings.h \ src/modelsBIOS.h \ - src/file.h + src/file.h \ + src/LEB128.h SOURCES = \ src/gui/about.cpp \ @@ -178,5 +179,6 @@ SOURCES = \ src/crc32.cpp \ src/settings.cpp \ src/modelsBIOS.cpp \ - src/file.cpp + src/file.cpp \ + src/LEB128.cpp \ No newline at end of file