From: Jean-Paul Mari Date: Thu, 27 May 2021 02:56:01 +0000 (-0400) Subject: Merge branch 'develop' X-Git-Tag: v2.1.3-R5 X-Git-Url: http://git.hcoop.net/clinton/Virtual-Jaguar-Rx.git/commitdiff_plain/0e699c1255f04f5c332632eef475ebcef4200305?hp=f051fda44e50ac282b4d6884d92e8006b5cc0a8a Merge branch 'develop' Specific breakpoints for M68000 exceptions. Fixes for the Linux platform. Stability & improvements for the debugger mode. --- diff --git a/.gitignore b/.gitignore dissimilarity index 87% index a40c016..af3f26c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,37 +1,37 @@ -Assets/ -debug/ -eeproms/ -obj/ -release/ -Screenshots/ -software/ -src/*~ -src/*/*.bak -src/m68000/obj/*.a -src/m68000/obj/*.exe -src/m68000/obj/*.d -src/m68000/obj/*.o -*.bak -makefile-qt -makefile-qt*.* -object_script.virtualjaguar*.* -.qmake.stash -virtualjaguar.WinMerge -Win-VS2017/m68000/m68000.vcxproj.user -Win-VS2017/jaguarcore/jaguarcore.vcxproj.user -Win-VS2017/x64/Archives/ -Win-VS2017/*/x64/ -Win-VS2017/*/ReadMe.txt -Win-VS2017/.vs/ -Win-VS2017/obj/ -Win-VS2017/Win32/ -Win-VS2017/x64/ -Win-VS2017/virtualjaguar.VC.db -Win-VS2017/virtualjaguar.VC.VC.opendb -Win-VS2017/virtualjaguar.sdf -Win-VS2017/virtualjaguar.vcxproj.user -Win-VS2017/GeneratedFiles/ -Win-VS2017/GeneratedFiles/qrc_virtualjaguar.cpp -Win-VS2017/My Inspector Results - virtualjaguar -Win-VS2015/ -Win-VS2019/ +/Assets/ +/debug/ +/eeproms/ +/obj/ +/release/ +/Screenshots/ +/software/ +/src/*~ +/src/*/*.bak +/src/m68000/obj/*.a +/src/m68000/obj/*.exe +/src/m68000/obj/*.d +/src/m68000/obj/*.o +*.bak +makefile-qt +makefile-qt*.* +object_script.virtualjaguar*.* +.qmake.stash +virtualjaguar.WinMerge +/Win-VS2015/ +/Win-VS2017/m68000/m68000.vcxproj.user +/Win-VS2017/jaguarcore/jaguarcore.vcxproj.user +/Win-VS2017/x64/Archives/ +/Win-VS2017/*/x64/ +/Win-VS2017/*/ReadMe.txt +/Win-VS2017/.vs/ +/Win-VS2017/obj/ +/Win-VS2017/Win32/ +/Win-VS2017/x64/ +/Win-VS2017/virtualjaguar.VC.db +/Win-VS2017/virtualjaguar.VC.VC.opendb +/Win-VS2017/virtualjaguar.sdf +/Win-VS2017/virtualjaguar.vcxproj.user +/Win-VS2017/GeneratedFiles/ +/Win-VS2017/GeneratedFiles/qrc_virtualjaguar.cpp +/Win-VS2017/My Inspector Results - virtualjaguar +/Win-VS2019/ diff --git a/Win-VS2017/jaguarcore/jaguarcore.vcxproj b/Win-VS2017/jaguarcore/jaguarcore.vcxproj index 4a10730..c5ba957 100644 --- a/Win-VS2017/jaguarcore/jaguarcore.vcxproj +++ b/Win-VS2017/jaguarcore/jaguarcore.vcxproj @@ -23,7 +23,7 @@ true v141 Unicode - Static + false StaticLibrary @@ -31,7 +31,7 @@ v141 true Unicode - Static + false @@ -59,8 +59,8 @@ Level3 Disabled _DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - C:\Qt\Qt5.9.1\5.9.1\msvc2017_64\include;C:\Qt\Qt5.9.1\5.9.1\msvc2017_64\include\QtGui;C:\Qt\Qt5.9.1\5.9.1\msvc2017_64\include\QtCore;C:\Qt\Qt5.9.1\5.9.1\msvc2017_64\include\QtWidgets;C:\SDK\SDL\SDL-1.2.15\include;C:\SDK\Elf\libelf-0.8.13-VS2015\include;C:\SDK\DWARF\libdwarf-VS2015\include;C:\SDK\zlib\zlib-1.2.8-VS2015\include - MultiThreadedDebug + $(QTDIR)\include;C:\SDK\SDL\SDL-1.2.15\include + MultiThreadedDebugDLL $(IntDir)asm\ $(IntDir)obj\ false @@ -81,12 +81,13 @@ true true NDEBUG;_LIB;_RELEASE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - C:\Qt\Qt5.9.1\5.9.1\msvc2017_64\include;C:\Qt\Qt5.9.1\5.9.1\msvc2017_64\include\QtCore;C:\Qt\Qt5.9.1\5.9.1\msvc2017_64\include\QtGui;C:\Qt\Qt5.9.1\5.9.1\msvc2017_64\include\QtWidgets;C:\SDK\SDL\SDL-1.2.15\include;C:\SDK\zlib\zlib-1.2.8-VS2015\include;C:\SDK\Elf\libelf-0.8.13-VS2015\include;C:\SDK\DWARF\libdwarf-VS2015\include + $(QTDIR)\include;C:\SDK\SDL\SDL-1.2.15\include ProgramDatabase false $(IntDir)asm\ $(IntDir)obj\ Default + MultiThreadedDLL Windows @@ -153,7 +154,10 @@ - + + true + true + diff --git a/Win-VS2017/m68000/m68000.vcxproj b/Win-VS2017/m68000/m68000.vcxproj index ce6fcd2..d4479d4 100644 --- a/Win-VS2017/m68000/m68000.vcxproj +++ b/Win-VS2017/m68000/m68000.vcxproj @@ -23,7 +23,7 @@ true v141 Unicode - Static + false StaticLibrary @@ -31,7 +31,7 @@ v141 true Unicode - Static + false diff --git a/Win-VS2017/virtualjaguar.vcxproj b/Win-VS2017/virtualjaguar.vcxproj index 0e9eb42..a340df7 100644 --- a/Win-VS2017/virtualjaguar.vcxproj +++ b/Win-VS2017/virtualjaguar.vcxproj @@ -25,7 +25,7 @@ Application obj\ virtualjaguar - Static + false true @@ -36,7 +36,7 @@ Application obj\ virtualjaguar - Static + false false @@ -62,7 +62,7 @@ - .;.\..\src;.\..\src\gui;$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtOpenGL;C:\SDK\OpenGL\include;C:\SDK\SDL\SDL-1.2.15\include;C:\SDK\DWARF\libdwarf-VS2015\include;C:\SDK\Elf\libelf-0.8.13\include;C:\SDK\zlib\zlib-1.2.11\include;.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;%(AdditionalIncludeDirectories) + .;.\..\src;.\..\src\gui;$(QTDIR)\include;C:\SDK\OpenGL\include;C:\SDK\SDL\SDL-1.2.15\include;C:\SDK\DWARF\libdwarf-20210305-VS2017\include;C:\SDK\Elf\libelf-0.8.13\include;C:\SDK\zlib\zlib-1.2.11\include;.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;%(AdditionalIncludeDirectories) -Zc:strictStrings -Zc:throwingNew -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions) $(IntDir)asm\ false @@ -74,7 +74,7 @@ _CRT_SECURE_NO_WARNINGS;_WINDOWS;UNICODE;WIN32;WIN64;__GCCWIN32__;QT_NO_DEBUG;QT_OPENGL_LIB;NDEBUG;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;%(PreprocessorDefinitions) false $(IntDir)vc$(PlatformToolsetVersion).pdb - MultiThreaded + MultiThreadedDLL true true true @@ -82,8 +82,8 @@ false - qtmain.lib;Qt5OpenGL.lib;shell32.lib;jaguarcore.lib;zlib-1.2.11_vs2017_x64.lib;m68000.lib;gdi32.lib;user32.lib;SDL-1.2.15_vs2017_x64.lib;libelf-0.8.13_vs2017_x64.lib;legacy_stdio_definitions.lib;OpenGL32.lib;libdwarf_x64.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;opengl32.lib;glu32.lib;Ws2_32.lib;imm32.lib;winmm.lib;Advapi32.lib;dxguid.lib;%(AdditionalDependencies) - $(QTDIR)\lib;$(QTDIR)\plugins\platforms;obj;..\src\m68000\obj;C:\SDK\zlib\zlib-1.2.11\lib;C:\SDK\SDL\SDL-1.2.15\lib\x64\static;C:\SDK\Elf\libelf-0.8.13\lib;m68000\x64\Release;jaguarcore\x64\Release;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64;C:\SDK\DWARF\libdwarf-VS2015\lib;%(AdditionalLibraryDirectories) + Qt5PlatformCompositorSupport.lib;qtmain.lib;Qt5OpenGL.lib;shell32.lib;jaguarcore.lib;zlib-1.2.11_vs2017_x64.lib;m68000.lib;gdi32.lib;user32.lib;SDL-1.2.15_vs2017_x64.lib;libelf-0.8.13_vs2017_x64.lib;legacy_stdio_definitions.lib;OpenGL32.lib;libdwarf_x64.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;opengl32.lib;glu32.lib;Ws2_32.lib;imm32.lib;winmm.lib;Advapi32.lib;dxguid.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\plugins\platforms;obj;..\src\m68000\obj;C:\SDK\zlib\zlib-1.2.11\lib;C:\SDK\SDL\SDL-1.2.15\lib\x64\static;C:\SDK\Elf\libelf-0.8.13\lib;m68000\x64\Release;jaguarcore\x64\Release;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64;C:\SDK\DWARF\libdwarf-20210305-VS2017\lib;%(AdditionalLibraryDirectories) "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions) true false @@ -108,28 +108,29 @@ - .;.\..\src;.\..\src\gui;$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtOpenGL;C:\SDK\SDL\SDL-1.2.15\include;C:\SDK\DWARF\libdwarf-VS2015\include;C:\SDK\Elf\libelf-0.8.13\include;C:\SDK\zlib\zlib-1.2.8\include;.\GeneratedFiles\$(ConfigurationName);C:\SDK\OpenGL\include;.\GeneratedFiles;%(AdditionalIncludeDirectories) + .;.\..\src;.\..\src\gui;$(QTDIR)\include;C:\SDK\SDL\SDL-1.2.15\include;C:\SDK\DWARF\libdwarf-20210305-VS2017\include;C:\SDK\Elf\libelf-0.8.13\include;C:\SDK\zlib\zlib-1.2.11\include;.\GeneratedFiles\$(ConfigurationName);C:\SDK\OpenGL\include;.\GeneratedFiles;%(AdditionalIncludeDirectories) -Zc:strictStrings -Zc:throwingNew -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions) $(IntDir)asm\ false - ProgramDatabase + EditAndContinue 4577;%(DisableSpecificWarnings) Sync $(IntDir)obj\ Disabled _CRT_SECURE_NO_WARNINGS;_WINDOWS;UNICODE;WIN32;WIN64;__GCCWIN32__;QT_OPENGL_LIB;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;%(PreprocessorDefinitions) false - MultiThreadedDebug + MultiThreadedDebugDLL true true true Level3 $(IntDir)vc$(PlatformToolsetVersion).pdb false + true - Qt5PlatformCompositorSupportd.lib;qtmaind.lib;Qt5OpenGLd.lib;shell32.lib;zlib-1.2.8_vs2017_x64d.lib;SDL-1.2.15_vs2017_x64d.lib;OpenGL32.lib;gdi32.lib;user32.lib;legacy_stdio_definitions.lib;libelf-0.8.13_vs2017_x64d.lib;m68000d.lib;jaguarcored.lib;libdwarf_x64d.lib;Ws2_32.lib;imm32.lib;winmm.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;opengl32.lib;glu32.lib;Advapi32.lib;dxguid.lib;%(AdditionalDependencies) - $(QTDIR)\lib;$(QTDIR)\plugins\platforms;obj;..\..\src\m68000\obj;C:\SDK\zlib\zlib-1.2.8\lib;C:\SDK\SDL\SDL-1.2.15\lib\x64\static;C:\SDK\Elf\libelf-0.8.13\lib;m68000\x64\Debug;jaguarcore\x64\Debug;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64;C:\SDK\DWARF\libdwarf-VS2015\lib;%(AdditionalLibraryDirectories) + Qt5PlatformCompositorSupportd.lib;qtmaind.lib;Qt5OpenGLd.lib;shell32.lib;zlib-1.2.11_vs2017_x64d.lib;SDL-1.2.15_vs2017_x64d.lib;OpenGL32.lib;gdi32.lib;user32.lib;legacy_stdio_definitions.lib;libelf-0.8.13_vs2017_x64d.lib;m68000d.lib;jaguarcored.lib;libdwarf_x64d.lib;Ws2_32.lib;imm32.lib;winmm.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;opengl32.lib;glu32.lib;Advapi32.lib;dxguid.lib;%(AdditionalDependencies) + $(QTDIR)\lib;$(QTDIR)\plugins\platforms;obj;..\..\src\m68000\obj;C:\SDK\zlib\zlib-1.2.11\lib;C:\SDK\SDL\SDL-1.2.15\lib\x64\static;C:\SDK\Elf\libelf-0.8.13\lib;m68000\x64\Debug;jaguarcore\x64\Debug;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64;C:\SDK\DWARF\libdwarf-20210305-VS2017\lib;%(AdditionalLibraryDirectories) "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions) true true @@ -163,8 +164,15 @@ + + + + + + + @@ -234,8 +242,16 @@ true + + true + + + true + false + true + false true @@ -273,11 +289,17 @@ true + + true + + + true + true - false + true @@ -351,7 +373,9 @@ true - + + true + true @@ -382,8 +406,15 @@ true + + true + + + true + true + false true @@ -421,28 +452,37 @@ true + + true + + + true + true + + true + Moc%27ing %(Identity)... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing %(Identity)... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing exceptionvectortablebrowser.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing exceptionvectortablebrowser.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -450,10 +490,10 @@ Moc%27ing localbrowser.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing localbrowser.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -461,60 +501,80 @@ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\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_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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%(PreprocessorDefinitions) "-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)" "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\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_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing keybindingstab.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing keybindingstab.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -522,11 +582,35 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\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_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" + + + + + + + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\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_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + $(QTDIR)\bin\moc.exe;%(FullPath) + Moc%27ing %(Identity)... + .\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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" @@ -536,40 +620,40 @@ Moc%27ing debuggertab.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing debuggertab.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing VideoWin.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing VideoWin.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing DasmWin.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing DasmWin.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing m68kDasmWin.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing m68kDasmWin.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -577,10 +661,10 @@ Moc%27ing DSPDasmWin.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing DSPDasmWin.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -589,10 +673,10 @@ Moc%27ing GPUDasmWin.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing GPUDasmWin.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -600,20 +684,20 @@ Moc%27ing heapallocatorbrowser.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing heapallocatorbrowser.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing memory1browser.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing memory1browser.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -621,17 +705,17 @@ Moc%27ing stackbrowser.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing stackbrowser.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing alpinetab.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing alpinetab.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -640,9 +724,9 @@ - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing configdialog.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing configdialog.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -650,9 +734,9 @@ $(QTDIR)\bin\moc.exe;%(FullPath) - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing controllertab.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing controllertab.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -660,9 +744,9 @@ $(QTDIR)\bin\moc.exe;%(FullPath) - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing controllerwidget.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing controllerwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -670,9 +754,9 @@ $(QTDIR)\bin\moc.exe;%(FullPath) - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing cpubrowser.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing cpubrowser.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -682,28 +766,28 @@ Moc%27ing emustatus.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing emustatus.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing allwatchbrowser.h... .\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_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing allwatchbrowser.h... .\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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing filepicker.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing filepicker.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -711,9 +795,9 @@ $(QTDIR)\bin\moc.exe;%(FullPath) - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing filethread.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing filethread.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -722,9 +806,9 @@ - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing generaltab.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing generaltab.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -732,9 +816,9 @@ $(QTDIR)\bin\moc.exe;%(FullPath) - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing glwidget.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing glwidget.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -744,9 +828,9 @@ - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing keygrabber.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing keygrabber.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -754,9 +838,9 @@ $(QTDIR)\bin\moc.exe;%(FullPath) - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing m68kdasmbrowser.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing m68kdasmbrowser.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -764,9 +848,9 @@ $(QTDIR)\bin\moc.exe;%(FullPath) - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing mainwin.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing mainwin.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -774,9 +858,9 @@ $(QTDIR)\bin\moc.exe;%(FullPath) - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing memorybrowser.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing memorybrowser.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -784,9 +868,9 @@ $(QTDIR)\bin\moc.exe;%(FullPath) - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing opbrowser.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing opbrowser.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -795,9 +879,9 @@ - "$(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)\." "-I.\GeneratedFiles" + "$(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%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\OpenGL\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-I.\GeneratedFiles" Moc%27ing riscdasmbrowser.h... - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -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\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.8\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_CRT_SECURE_NO_WARNINGS -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -D__GCCWIN32__ -DQT_OPENGL_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\..\src" "-I.\..\src\gui" "-I$(QTDIR)\include" "-IC:\SDK\SDL\SDL-1.2.15\include" "-IC:\SDK\DWARF\libdwarf-20210305-VS2017\include" "-IC:\SDK\Elf\libelf-0.8.13\include" "-IC:\SDK\zlib\zlib-1.2.11\include" "-I.\GeneratedFiles\$(ConfigurationName)" "-IC:\SDK\OpenGL\include" "-I.\GeneratedFiles" Moc%27ing riscdasmbrowser.h... .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp @@ -1060,6 +1144,14 @@ true true + + true + true + + + true + true + diff --git a/Win-VS2017/virtualjaguar.vcxproj.filters b/Win-VS2017/virtualjaguar.vcxproj.filters index 530696e..33e9318 100644 --- a/Win-VS2017/virtualjaguar.vcxproj.filters +++ b/Win-VS2017/virtualjaguar.vcxproj.filters @@ -205,6 +205,9 @@ Generated Files + + Generated Files + Generated Files @@ -445,6 +448,42 @@ Source Files\debugger + + Source Files\alpine + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Source Files\alpine + + + Generated Files + + + Generated Files + + + Generated Files + + + Generated Files + + + Source Files\debugger + + + Source Files\debugger + @@ -468,9 +507,6 @@ Header Files\gui - - Header Files\debugger - Header Files\debugger @@ -498,6 +534,9 @@ Header Files + + Header Files\debugger + @@ -760,6 +799,18 @@ Header Files\debugger + + Header Files\alpine + + + Header Files\alpine + + + Header Files\debugger + + + Header Files\debugger + @@ -805,5 +856,11 @@ Resource Files + + Resource Files + + + Resource Files + \ No newline at end of file diff --git a/docs/INSTALL b/docs/INSTALL index b95c96b..6eb8760 100644 --- a/docs/INSTALL +++ b/docs/INSTALL @@ -16,9 +16,9 @@ The minimum requirements for compiling Virtual Jaguar from source are: o libcdio v0.90 or higher (optional, for Jaguar CD support) o OpenGL libraries o Qt 5.5.1 or higher - o Visual Studio 2015 or 2017 (if any of interest) + o Visual Studio 2017 (if any of interest) o supported OS (WIN64 through msys2/MinGW64, Windows 64 bits); other - OSs may work to but you may need to change some items in the Makefile or adapt the Visual Studio project. + OSs may work too but you may need to change some items in the Makefile or adapt the Visual Studio project. o cygwin64 support is done but no test has been completed Previously supported OS (BeOS, Linux, FreeBSD and WIN32 through mingw, MacOS); @@ -90,4 +90,4 @@ You may have to adapt such files to handle your own development environement, usualy to put the right include and library paths will be enough assuming you have all the requirements properly set. Assuming all went well, you will have either Debug or Release executables. -You will also need the QT5 & SDL necessary DLLs in the executable directory. +You will also need the necessary DLLs in the executable directory. diff --git a/docs/WHATSNEW b/docs/WHATSNEW index 8b6491e..271bf48 100644 --- a/docs/WHATSNEW +++ b/docs/WHATSNEW @@ -1,3 +1,23 @@ +Virtual Jaguar v2.1.3 R5 GCC/Qt +------------------------------- + +* Specific breakpoints for the M68000 "illegal instruction", "address error", "bus error", "Unimplemented instruction", and "Exception not referenced" exceptions +* Specific breakpoints will occur in case of a rom writes at an unknown location +* Added a HW registers browser window for the Blitter +* Fixes for the Linux platform from @richard42 +* Stability & improvements for the debugger mode +- ELF & DWARF information support improvements +- Modified the call stack layout window +- Added a search feature in the All Watch global variables window +- Added a video output display in a specific window +- Show the SR value as a readable form in the M68000 CPU browser +- Added a tracing, step in and step over, at source code level +- Added a source code file date check when reading DWARF information +- Support the structure's members in the Local variables window +- Improvements for the two Breakpoints windows +- Added two M68000 cycles counters in the status window + + Virtual Jaguar v2.1.3 R4 GCC/Qt ------------------------------- @@ -8,7 +28,7 @@ Virtual Jaguar v2.1.3 R4 GCC/Qt * Breakpoint / alert box may now occur in case of writing at unknown memory location or in case of ROM writing * UI modifications mostly for the debugger mode, key bindings, and icons * Added screenshot & call stack window features, Jaguar model & BIOS configurations, and a source code files list viewer -* Added multiple breakpoints feature but only for M68K functions +* Added multiple breakpoints feature but only for M68000 functions * Added a Save Dump As... feature to save a memory zone to a file * Added a cartdridge view menu to display cartdridge directory system and his files list * Added some log information for the emulator initialisations @@ -32,7 +52,7 @@ Virtual Jaguar v2.1.3 R3 GCC/Qt * Fixed a crash, in Release mode, when the HW labels setting is turn on * Fixed the SP (Stack) window UI potential missing data * Create a directory for EEPROMs (based on the EEPROMs setting) if it doesn't already exist -* Keep the scrollbar position in accordance of the M68K PC pointer +* Keep the scrollbar position in accordance of the M68000 PC pointer * Fixed a crash when DWARF information report a source line number exceeding the number of lines present in a source file * Improved the .heap section detection to avoid a detection error * Fixed a crash when DWARF information does references to missing source code files @@ -68,13 +88,13 @@ Virtual Jaguar v2.1.3 R1 GCC/Qt * BPM (Breapoint) now stop at the designated address and no longer stop after executing the code * Added SP (Stack) memory browser * User can change now the number of lines of disassembly displayed in the tracing window -* User can turn on/off the op-codes associated in the disassembly lines displayed in the M68K tracing window -* Added an emulator status window (GPU status, M68K debugger & tracking status) +* User can turn on/off the op-codes associated in the disassembly lines displayed in the M68000 tracing window +* Added an emulator status window (GPU status, M68000 debugger & tracking status) * Added a GPU disassembly tracing window - Display the current PC pointer * Added a DSP disassembly tracing window - Display the current PC pointer * Added possibility to change refresh rate of browser windows when emulation is launched -* Display partial hardware labels (Internal Memory & Graphics sub-system address space) in the disassembly lines displayed in the M68K tracing window -* User can turn on/off the hardware labels associated in the disassembly lines displayed in the M68K tracing window +* Display partial hardware labels (Internal Memory & Graphics sub-system address space) in the disassembly lines displayed in the M68000 tracing window +* User can turn on/off the hardware labels associated in the disassembly lines displayed in the M68000 tracing window Virtual Jaguar v2.1.3 R0 GCC/Qt @@ -85,7 +105,7 @@ Virtual Jaguar v2.1.3 R0 GCC/Qt * ELF debug symbol support * "Step Into" code function * Menus layout dedicated to the debugger -* Added a dedicated main window for tracing (M68K) +* Added a dedicated main window for tracing (M68000) * Added a Debugger tab in the config tab diff --git a/docs/virtualjaguar.1 b/docs/virtualjaguar.1 index 9c85eb2..35c4795 100644 --- a/docs/virtualjaguar.1 +++ b/docs/virtualjaguar.1 @@ -1,4 +1,4 @@ -.TH virtualjaguar 1 2018-09-19 Virtualjaguar Rx +.TH virtualjaguar 1 2021-05-24 Virtualjaguar Rx .SH NAME virtualjaguar \- An Atari Jaguar emulator @@ -8,12 +8,12 @@ virtualjaguar \- An Atari Jaguar emulator .RI [rom image file] .SH DESCRIPTION -Virtualjaguar is an emulator for the Atari Jaguar videogame system. +Virtual Jaguar Rx is an emulator for the Atari Jaguar videogame system. It includes a debugger. .SH OPTIONS .TP .B [rom image file] -Name of file to load; +Name of file to load .TP .B \-a, \-\-alpine Run in Alpine emulation mode @@ -27,7 +27,7 @@ Do not use Jaguar BIOS .B \-D, \-\-debugger Run in Debugger emulation mode .TP -.B , \-\-dram-max +.B \-\-dram-max Set the main ram to 8MB .TP .B \-g, \-\-gpu @@ -48,16 +48,19 @@ Show command line help .SH SETTINGS .TP .B \-\-es\-all -Erase all settings, +Erase all settings +.TP .B \-\-es\-ui -Erase UI settings only, +Erase UI settings only +.TP .B \-\-es\-alpine -Erase alpine mode settings only, +Erase alpine mode settings only +.TP .B \-\-es\-debugger Erase debugger mode settings only .SH SOUND -DSP emulation is needed for audio output; +DSP emulation is needed for audio output. .TP .B \-d, \-\-dsp Enable DSP emulation @@ -89,38 +92,47 @@ Do not show emulation of tv static. This can be slow on low end CPUs. .TP The default key bindings are: .TP -.B Ctrl-Q -Quit virtualjaguar, +.B Ctrl+Q +Quit virtualjaguar .TP -.B Ctrl-I -Load a new program, +.B Ctrl+I +Pick file to load a new program .TP .B Ctrl+C -Configure tab, +Configure tab .TP .B Ctrl+S -Emulator status, +Emulator status .TP .B Ctrl+Shift+F5 -Restart program, +Restart program .TP .B F11 -Step into code, +Step into code .TP .B F10 -Step over code, +Step over code .TP .B Esc -Pause emulation, +Pause emulation .TP .B F7 -Advance the emulation by a single frame, +Advance the emulation by a single frame .TP .B F9 -Toggle full screen mode, +Toggle full screen mode .TP .B F8 Screenshot +.TP +.B Ctrl+B +Function breakpoint +.TP +.B Ctrl+Alt+B +Breakpoints list +.TP +.B Ctrl+Shift+F9 +Delete all breakpoints .SH CONTROLS .TP @@ -128,31 +140,31 @@ The default key bindings for controller 1 are: (Key bindings can be changed in the configuration dialog.) .TP .B S -Up, +Up .TP .B X -Down, +Down .TP .B A -Left, +Left .TP .B D -Right, +Right .TP .B P -Pause, +Pause .TP .B O -Option, +Option .TP .B J -Button C, +Button C .TP .B K -Button B, +Button B .TP .B L -Button A, +Button A .TP .B 1 through 0 Buttons 1 through 0 on the keypad diff --git a/docs/vj_HistoryNotes.txt b/docs/vj_HistoryNotes.txt index 34743bf..dac67a6 100644 --- a/docs/vj_HistoryNotes.txt +++ b/docs/vj_HistoryNotes.txt @@ -1,3 +1,52 @@ +Release 5 (TBA) +--------------- +0) Added a date creation stamp in the application command line information +- This date already appears in the Release 4 executable but was not referenced in his history note +1) Added a specific breakpoint for the M68K illegal instruction exception +-- Alert box will display a message and then the code will stop +2) Added a specific breakpoint for the M68K address error exception +-- Alert box will display a message and then the code will stop +3) Added a HW registers browser window and set a tab for the Blitter +4) Added detection for the unsigned/signed short type +-- Will allow the return of a short type variable's value +5) Added a specific breakpoint for the M68K Unimplemented instruction, and Exception not referenced exceptions +6) Fix potential emulator freeze after an exception has occured +7) Fix a random crash when reading the source lines information +8) Added ELF & DWARF .debug* types +9) Added ELF section types check and new error messages +10) Modified the call stack layout window and added source filename from the called source line +11) Added a source tab in the main window for step into tracing +12) Added the step over for source level tracing +13) Set text conversion to Qt/HTML format for the M68K tracing window +14) Added a source code file date check when reading DWARF information +-- Will avoid source code mismatching with the ELF executable +15) Remove Visual Studio 2015 support +16) Work around fix for a compilation error on Linux +-- EEPROM directory creation allowed only for Windows at the moment +17) Show the SR value as a readable form in the M68K CPU browser +18) Potential fix to compile on Linux +-- Added the relative directory path for the Qt include files +19) Merge the Linux build fixes from @richard42 +-- Jaguar core's makefile and Qt pro file updates, fix filenames case sensitive & fixes for Linux +20) Updated the M68K exception catch +-- Added a M68K exception catch check in the Alpine tab settings +-- Added a specific breakpoint for the M68K bus error exception +21) Project has switched to libdwarf 20210305 library 64bits for VS 2017 +22) Breakpoint list window is now refreshed after a new breakpoint is set +23) Handle number of M68K cycles used when tracing in debugger mode +-- The cycles are displayed in the emulator status window +24) Improve the DWARF source line number reporting +25) Added a #line in the call stack window +26) Added video output display in a specific window +27) Fixed potential crash with the debugger tabs reset +28) Added a search feature in the All Watch variables window +29) Support the structure's members in the Local variables window +30) Code refactoring for the variables support in debugger mode +31) Support the structure and union members from the DWARF information +32) Added a Virtual Jaguar Rx logo in the About window +33) Fix compilation / link error for MSYS2 / MinGW64 +34) Documentation updates + Release 4a (15th August 2019) ----------------------------- Git commit: f04df4f185ed4f3cfc805d0f61b3c019a108ae2c @@ -88,7 +137,7 @@ Git commit: 9b25d85d1ea4a9476b83476bcec65e05464f68da 45) Fix a crash when emulator, in non-debugger mode, opens the breakpoint UIs at launch 46) Fix crash with potential missing DWARF structure tag's type name 47) Added ELF sections check so a potential unknown section will stop, or not stop, the decoding -48) Project has switched to QT 5.12.0 library 64bits for VS 2017 +48) Project has switched to Qt 5.12.0 library 64bits for VS 2017 49) Added a Save Dump As... feature to save a memory zone to a file 50) The -d command line option, dedicated to the debugger, has been renamed to avoid duplication with the dsp one -- -d has been renamed by -D because another -d was also used for the dsp command line option @@ -126,7 +175,7 @@ Git commit: b1b673a3b0d19e3c2c45b6590b773b11e45bced7 -- Depend vlink version, .heap section may have an Alloc flag 16) Fixed a crash when DWARF information does references to missing source code files 17) Added a local variables window -18) Project has switched to Visual Studio 2017 and QT 5.9.1 library +18) Project has switched to Visual Studio 2017 and Qt 5.9.1 library Release 2 (3rd September 2017) ------------------------------ @@ -189,7 +238,7 @@ Release 0 (5th January 2017) Known issues ============ -1) Video output is not displayed due to my OpenGL / QT5 5.5.1 integration with VS 2015 but solved when using the QT 5.9.1 package for VS 2017 +1) Video output is not displayed due to my OpenGL / Qt5 5.5.1 integration with VS 2015 but solved when using the Qt 5.9.1 package for VS 2017 2) The BPM (Breapoint) remains stuck on his address when user wants to continue the code execution -- Need to trace over the BPM or unset the BPM -- The issue can be prevented if the code doesn't set IRQ, otherwise the IRQ will need to be traced to get back control @@ -217,8 +266,9 @@ Known issues 15) After a new breakpoint set, the breakpoint list window is not refreshed -- User must perform an operation, such code tracing, to see the breakpoints list update 16) Some ASCII characters may be not displayed correctly --- It depend how the text is displayed, this is related to the QT/HTML encoding done when reading DWARF file +-- Probably depend how the text is displayed, this is related to the Qt/HTML encoding done when reading DWARF file 17) Potential legacy crash when leaving emulator in pause mode for a long period of time +-- Need much investigation Cosmetic / UX issues ==================== @@ -236,19 +286,18 @@ Legacy issues/hints Project information =================== 1) Code based on the Shamus Hammons source code available via Gethub by the 12th September 2017 (2.1.3 Final) -2) Visual Studio 2015/2017 project support for 64 bits -3) libelf 0.8.13 library 64bits for VS 2015/2017 -4) libdwarf 1.41 library 64bits for VS 2015, cygwin64 and Msys2/MinGW64 -5) QT 5.5.1 library 64bits for VS 2015 -6) QT 5.12.0 library 64bits for VS 2017 -7) Zlib 1.2.8 library 64bits for VS 2015 -8) Zlib 1.2.11 library 64bits for VS 2017 -9) SDL 1.2.15 library 64bits for VS 2015/2017 -10) The original make files have been modified to follow the requirements and modifications -11) The 'Rx' word has been added to the emulator name to make distinction with the official version -12) The project is set at https://github.com/djipi/Virtual-Jaguar-Rx -13) GPLv3 file document has been renamed as LICENSE, to fit better the GitHub requirements +2) Visual Studio 2017 project support for 64 bits +3) libelf 0.8.13 library 64bits for VS 2017 +4) libdwarf 20210305 library 64bits for VS 2017 +5) Qt 5.12.0 library 64bits for VS 2017 +6) Zlib 1.2.11 library 64bits for VS 2017 +7) SDL 1.2.15 library 64bits for VS 2017 +8) The original make files have been modified to follow the requirements and modifications +9) The 'Rx' word has been added to the emulator name to make distinction with the official version +10) The project is set at https://github.com/djipi/Virtual-Jaguar-Rx +11) GPLv3 file document has been renamed as LICENSE, to fit better the GitHub requirements -- Text / License terms are the same +14) The x86 configuration has been removed in the VS 2017 project Download statistics diff --git a/jaguarcore.mak b/jaguarcore.mak index aa4971e..2e5b8a1 100644 --- a/jaguarcore.mak +++ b/jaguarcore.mak @@ -43,6 +43,7 @@ AR := $(CROSS)ar ARFLAGS := -rs SDL_CFLAGS = `$(CROSS)sdl-config --cflags` +QT_CFLAGS = -fPIC -I/usr/include/qt5 -I/usr/include/qt5/QtOpenGL -I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore DEFINES = -D$(SYSTYPE) GCC_DEPS = -MMD @@ -95,6 +96,6 @@ obj/libjaguarcore.a: $(OBJS) obj/%.o: src/%.cpp @echo -e "\033[01;33m***\033[00;32m Compiling $<...\033[00m" - $(Q)$(CC) $(GCC_DEPS) $(CXXFLAGS) $(SDL_CFLAGS) $(DEFINES) $(INCS) -c $< -o $@ + $(Q)$(CC) $(GCC_DEPS) $(CXXFLAGS) $(SDL_CFLAGS) $(QT_CFLAGS) $(DEFINES) $(INCS) -c $< -o $@ -include obj/*.d diff --git a/res/debug-stepInto.png b/res/debug-stepinto.png similarity index 100% rename from res/debug-stepInto.png rename to res/debug-stepinto.png diff --git a/res/Exit.png b/res/exit.png similarity index 100% rename from res/Exit.png rename to res/exit.png diff --git a/res/help.html b/res/help.html index 47649cf..e070a97 100644 --- a/res/help.html +++ b/res/help.html @@ -82,7 +82,7 @@

Insert Cartridge... does the same as the toolbar button; see the “Insert Cartridge” toolbar button description for details.

Use CD Unit does the same as the toolbar button; see the “Use CD Unit” toolbar button description for details.

Configure launches the Configure dialogue. A full description is given in the “Configure Dialog” section below.

-

Status launches a window with emulator internal information.

+

Status launches a window with emulator internal information. It includes M68000 cycles counters.

Exit quits Virtual Jaguar immediately. You can also quit Virtual Jaguar by pressing Ctrl + Q on your keyboard.

Help Menu

This menu has the following options:

@@ -175,12 +175,14 @@

When started in Debugger mode, a specific tab is made available in the configuration dialogue which gives you the following options:

  • Disassembly lines
  • +
  • Source file search paths
  • Display M68000 opcodes
  • Display HW labels
  • Display source filename
  • ELF sections check

Disassembly lines represent the number of disassembly lines to display in the M68000 tracing window. This doesn't include the number of source lines displayed.

+

Source file search paths may be used in case of the debugger cannot find files path in the DWARF information.

Display M68000 opcode allows or not the opcode display. Can be useful in case of user prefers to see the disassembly only.

Display HW labels allows or not the name of the Jaguar hardware registers as reported in the official documentation.

Display source filename allows or not the source code filename display depend the disassembly in the M68000 tracing window.

@@ -191,11 +193,13 @@
  • ABS to load
  • Windows refresh
  • Allow writes to cartdridge ROM
  • +
  • Allow M68000 exception catch
  • ROM to load is the path to a Jaguar executable file that will be loaded into the Jaguar’s cartridge memory space at $800000 (Alpine ROM images will load at $802000). As a convenience to coders, this file can be of any length, as long as it fits into the cartridge memory space (a file of this type is treated as an Alpine ROM and is loaded at $802000). The file thus loaded into memory will not be executed.

    ABS to load is the path to a Jaguar executable file that will be loaded in the Jaguar’s main RAM. This file must have valid headers, otherwise Virtual Jaguar won’t be able to load it. Assuming the file exists and has the correct headers in it, it will be loaded and run when Virtual Jaguar is first run.

    Windows refresh is the refresh rate for open windows. The smaller the rate, the faster the refresh window will occur. A 0 value will disable the refresh operations.

    Allow writes to cartdridge ROM is the option allowing or not the cartdridge ROM writing. If allowed, emulator won't interfere but when turned off the emulator will display a dialog box with proper information, at this point user can allow to continue or stop the code.

    +

    Allow M68000 exception catch is the option allowing or not the exception catch from the M68000. If allowed, the emulator will display a dialog box with proper information and user will have the choice to continue or to stop the code.

    Also, when in Debugger mode, extra toolbar buttons are defined (also found under the extra “Debug” menu) and also include the Alpine mode features:

    • Restart
    • @@ -206,6 +210,7 @@
    • Delete All Breakpoints
    • Disable All Breakpoints
    • Exception Vector Table
    • +
    • Output Video
    • All Watch
    • Locals
    • Call Stack
    • @@ -230,8 +235,10 @@

      Disable all breakpoints, and also disable BPM.

      Exception Vector Table

      Display a partial table of the M68000 exception vectors as reported by Motorola.

      +

      Output Video

      +

      Display the video output window.

      All Watch

      -

      Display all global variables used by the Jaguar code. It uses the available DWARF debug information.

      +

      Display all global variables used by the Jaguar code. It uses the available DWARF debug information. It has a search feature to look for a specific global variable.

      Locals

      Display the local variables of the traced M68000 function. It uses the available DWARF debug information, and the A6 register to point on the stack.

      Call Stack

      @@ -248,6 +255,8 @@

      In the debugger mode, the main window doesn't display anymore the video output; it is replaced by a source code files viewer and a disassembly window made of tabs to allow tracing / display of code.

      Source code files

      It is available for convenience reason; it display all the filenames found in the DWARF information. It is turned off by default but user can turn it on.

      +

      Sources tab

      +

      This tab is populated by C, or asm, source files following the M68000 program counter (PC). User can trace source code within the tab.

      Disassembly tabs

      There are 3 tabs, each of them is dedicated to a specific processor (M68000, GPU, and DSP). Currently, only the M68000 is tracable, others 2 display only the code pointed by their respective program counter (PC).

      Also, when in Alpine mode, extra toolbar buttons are defined (also found under the extra “Debug” menu):

      @@ -258,6 +267,7 @@
    • OP Browser
    • M68K Disassembly Browser
    • RISC Disassembly Browser
    • +
    • HW Registers Browser

    Memory Browser

    This window lets you inspect Virtual Jaguar’s emulated memory space. The PgDn key will advance the top of the window’s memory location by 480 bytes, and PgUp will go back by the same amount. The Plus (+) key will advance the top of the window’s memory location by 16 bytes, and Minus (-) will go back by the same amount. Entering a memory location, in hexadecimal, in the edit field and pressing the Go button will display memory from that location. It can be dismissed by clicking on the “X” in the upper corner of the dialog, or by pressing the Esc key on your keyboard.

    @@ -271,6 +281,8 @@

    This window provides a disassembly of 68000 opcodes. It can be dismissed by clicking on the “X” in the upper corner of the dialog, or by pressing the Esc key on your keyboard.

    RISC Disassembly Browser

    This window provides a disassembly of RISC opcodes. It can be dismissed by clicking on the “X” in the upper corner of the dialog, or by pressing the Esc key on your keyboard.

    +

    HW Registers Browser

    +

    This window provides a list of the hardware registers content; for the moment, only the blitter is displayed. It can be dismissed by clicking on the “X” in the upper corner of the dialog, or by pressing the Esc key on your keyboard.

    The aforementioned options will only work when Virtual Jaguar is run in Alpine or Debugger mode, that is, when the --alpine or --debugger flag is passed in. If you do not pass such flag, Virtual Jaguar will run as it normally does, i.e., as a stock Jaguar, and nothing will be loaded by default.

    For The Curious

    If you’re wondering why some cartridges have labels in the “Insert Cartridge...” dialogue and some don’t, read on...

    diff --git a/res/tool-hw-regs.png b/res/tool-hw-regs.png new file mode 100644 index 0000000..76d2b80 Binary files /dev/null and b/res/tool-hw-regs.png differ diff --git a/res/vj_rx_title_small.png b/res/vj_rx_title_small.png new file mode 100644 index 0000000..8b9c1ba Binary files /dev/null and b/res/vj_rx_title_small.png differ diff --git a/src/LEB128.cpp b/src/LEB128.cpp index 159b5f3..d749a8d 100644 --- a/src/LEB128.cpp +++ b/src/LEB128.cpp @@ -1,4 +1,4 @@ - +#include // Decode an unsigned LEB128 // Algorithm from Appendix C of the DWARF 2, and 3, spec section "7.6" diff --git a/src/debugger/BreakpointsWin.h b/src/debugger/BreakpointsWin.h index b7d23e8..5f087f4 100644 --- a/src/debugger/BreakpointsWin.h +++ b/src/debugger/BreakpointsWin.h @@ -11,7 +11,7 @@ //#define BRK_REFRESHBUTTON // Refresh button #define BRK_HITCOUNTS // Support the hit count -#include +#include #include diff --git a/src/debugger/CartFilesListWin.h b/src/debugger/CartFilesListWin.h index bc601bf..7120afa 100644 --- a/src/debugger/CartFilesListWin.h +++ b/src/debugger/CartFilesListWin.h @@ -7,7 +7,7 @@ #ifndef __CARTFILESLISTWIN_H__ #define __CARTFILESLISTWIN_H__ -#include +#include #include // diff --git a/src/debugger/DBGManager.cpp b/src/debugger/DBGManager.cpp index 3dcb138..edbc766 100644 --- a/src/debugger/DBGManager.cpp +++ b/src/debugger/DBGManager.cpp @@ -4,6 +4,7 @@ // by Jean-Paul Mari // // JPM = Jean-Paul Mari +// RG = Richard Goedeken // // WHO WHEN WHAT // --- ---------- ------------------------------------------------------------ @@ -12,6 +13,10 @@ // JPM Various efforts to set the DWARF format support // JPM 09/15/2018 Support the unsigned char // JPM Oct./2018 Cosmetic changes, added source file search paths, and ELF function name +// JPM Aug./2019 Added new functions mainly for source text lines +// JPM Sept./2019 Support the unsigned/signed short type +// RG Jan./2021 Linux build fixes +// JPM May/2021 Code refactoring for the variables // // To Do @@ -22,11 +27,11 @@ #include #include #include -#include "libelf/libelf.h" -#include "libelf/gelf.h" +#include "libelf.h" +#include "gelf.h" #include "log.h" #include "ELFManager.h" -#include "DwarfManager.h" +#include "DWARFManager.h" #include "DBGManager.h" #include "HWLABELManager.h" #include "settings.h" @@ -43,8 +48,10 @@ struct Value bool B; double D; float F; + int16_t SS; int32_t SI; int64_t SL; + uint16_t US; uint32_t UI; uint64_t UL; }; @@ -210,11 +217,11 @@ size_t DBGManager_GetType(void) // Get source filename based on the memeory address // return NULL if no source filename -char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error) +char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, DBGstatus *Status) { if ((DBGType & DBG_ELFDWARF)) { - return DWARFManager_GetFullSourceFilenameFromAdr(Adr, Error); + return DWARFManager_GetFullSourceFilenameFromAdr(Adr, (DWARFstatus *)Status); } else { @@ -223,6 +230,53 @@ char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error) } +// Get number of variables +// A NULL address will return the numbre of global variables, otherwise it will return the number of local variables +size_t DBGManager_GetNbVariables(size_t Adr) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetNbVariables(Adr); + } + else + { + return 0; + } +} + + +// Get variable's information +// A NULL address will return the pointer to the global variable structure, otherwise it will return the local's one +S_VariablesStruct* DBGManager_GetInfosVariable(size_t Adr, size_t Index) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return (S_VariablesStruct*)DWARFManager_GetInfosVariable(Adr, Index); + } + else + { + return NULL; + } +} + + +// Get global variable's Address based on his Name +// Return found Address +// Return NULL if no Address has been found +size_t DBGManager_GetGlobalVariableAdrFromName(char *VariableName) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetGlobalVariableAdrFromName(VariableName); + } + else + { + return 0; + } +} + + +#if 0 // Get number of local variables // Return 0 if none has been found size_t DBGManager_GetNbLocalVariables(size_t Adr) @@ -251,6 +305,7 @@ size_t DBGManager_GetNbGlobalVariables(void) return 0; } } +#endif // Get address from symbol name @@ -270,22 +325,7 @@ size_t DBGManager_GetAdrFromSymbolName(char *SymbolName) } -// Get global variable's Address based on his Name -// Return found Address -// Return NULL if no Address has been found -size_t DBGManager_GetGlobalVariableAdrFromName(char *VariableName) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetGlobalVariableAdrFromName(VariableName); - } - else - { - return 0; - } -} - - +#if 0 // Get local variable's type encoding based on his address and Index // Return the type encoding found // Return 0 if no type encoding has been found @@ -444,6 +484,71 @@ char *DBGManager_GetGlobalVariableValue(size_t Index) } +// Get local variable's type name based on his Index +// Return type name's text pointer found +// Return NULL if no type name has been found +char *DBGManager_GetLocalVariableTypeName(size_t Adr, size_t Index) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetLocalVariableTypeName(Adr, Index); + } + else + { + return NULL; + } +} + + +// Get local variable Op based on his Index +// Return variable Op's found +// Return 0 if no variable Op has been found +size_t DBGManager_GetLocalVariableOp(size_t Adr, size_t Index) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetLocalVariableOp(Adr, Index); + } + else + { + return 0; + } +} + + +// Get local variable name based on his Index +// Return variable name's text pointer found +// Return NULL if no variable name has been found +char *DBGManager_GetLocalVariableName(size_t Adr, size_t Index) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetLocalVariableName(Adr, Index); + } + else + { + return NULL; + } +} + + +// Get global variable name based on his Index +// Return variable name's text pointer found +// Return NULL if no variable name has been found +char *DBGManager_GetGlobalVariableName(size_t Index) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetGlobalVariableName(Index); + } + else + { + return NULL; + } +} +#endif + + // Get variable value based on his Adresse, Encoding Type and Size // Return value as a text pointer // Note: Pointer may point on a 0 length text @@ -503,6 +608,10 @@ char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t case DBG_ATE_signed: switch (TypeByteSize) { + case 2: + sprintf(value, "%i", V.SS); + break; + case 4: sprintf(value, "%i", V.SI); break; @@ -522,6 +631,10 @@ char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t case DBG_ATE_unsigned: switch (TypeByteSize) { + case 2: + sprintf(value, "%u", V.US); + break; + case 4: sprintf(value, "%u", V.UI); break; @@ -536,7 +649,7 @@ char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t break; case DBG_ATE_unsigned_char: - sprintf(value, "%u", (unsigned int(V.C))); + sprintf(value, "%u", (unsigned int) V.C); break; case DBG_ATE_ptr: @@ -559,70 +672,6 @@ char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t } -// Get local variable's type name based on his Index -// Return type name's text pointer found -// Return NULL if no type name has been found -char *DBGManager_GetLocalVariableTypeName(size_t Adr, size_t Index) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetLocalVariableTypeName(Adr, Index); - } - else - { - return NULL; - } -} - - -// Get local variable Op based on his Index -// Return variable Op's found -// Return 0 if no variable Op has been found -size_t DBGManager_GetLocalVariableOp(size_t Adr, size_t Index) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetLocalVariableOp(Adr, Index); - } - else - { - return 0; - } -} - - -// Get local variable name based on his Index -// Return variable name's text pointer found -// Return NULL if no variable name has been found -char *DBGManager_GetLocalVariableName(size_t Adr, size_t Index) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetLocalVariableName(Adr, Index); - } - else - { - return NULL; - } -} - - -// Get global variable name based on his Index -// Return variable name's text pointer found -// Return NULL if no variable name has been found -char *DBGManager_GetGlobalVariableName(size_t Index) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetGlobalVariableName(Index); - } - else - { - return NULL; - } -} - - // Get function name from address // Return function name found // Return NULL if no function name has been found @@ -746,19 +795,33 @@ char *DBGManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine) // Get number of source code filenames -size_t DBGManager_GetNbFullSourceFilename(void) +size_t DBGManager_GetNbSources(void) { size_t Nbr = 0; if ((DBGType & DBG_ELFDWARF)) { - Nbr = DWARFManager_GetNbFullSourceFilename(); + Nbr = DWARFManager_GetNbSources(); } return Nbr; } +// Get source code filename based on index +char *DBGManager_GetNumSourceFilename(size_t Index) +{ + char *SourceFilename = NULL; + + if ((DBGType & DBG_ELFDWARF)) + { + SourceFilename = DWARFManager_GetNumSourceFilename(Index); + } + + return SourceFilename; +} + + // Get source code filename based on index char *DBGManager_GetNumFullSourceFilename(size_t Index) { @@ -771,3 +834,60 @@ char *DBGManager_GetNumFullSourceFilename(size_t Index) return FullSourceFilename; } + + +// Get number of lines of texts source list from source index +size_t DBGManager_GetSrcNbListPtrFromIndex(size_t Index, bool Used) +{ + size_t NbListPtr = 0; + + if ((DBGType & DBG_ELFDWARF)) + { + NbListPtr = DWARFManager_GetSrcNbListPtrFromIndex(Index, Used); + } + + return NbListPtr; +} + + +// Get pointer to the lines number list from source index +size_t *DBGManager_GetSrcNumLinesPtrFromIndex(size_t Index, bool Used) +{ + size_t *PtrNumLines = NULL; + + if ((DBGType & DBG_ELFDWARF)) + { + PtrNumLines = DWARFManager_GetSrcNumLinesPtrFromIndex(Index, Used); + } + + return PtrNumLines; +} + + +// Get text source list pointers from source index +char **DBGManager_GetSrcListPtrFromIndex(size_t Index, bool Used) +{ + char **PtrSource = NULL; + + if ((DBGType & DBG_ELFDWARF)) + { + PtrSource = DWARFManager_GetSrcListPtrFromIndex(Index, Used); + } + + return PtrSource; +} + + +// Get source language +size_t DBGManager_GetSrcLanguageFromIndex(size_t Index) +{ + size_t Language = 0; + + if ((DBGType & DBG_ELFDWARF)) + { + Language = DWARFManager_GetSrcLanguageFromIndex(Index); + } + + return Language; +} + diff --git a/src/debugger/DBGManager.h b/src/debugger/DBGManager.h index f034621..8cd45b0 100644 --- a/src/debugger/DBGManager.h +++ b/src/debugger/DBGManager.h @@ -4,6 +4,26 @@ #define __DBGMANAGER_H__ +// Definition for the DWARF status of each source file +typedef enum +{ + DBGSTATUS_OK = 0x0, + DBGSTATUS_OUTDATEDFILE = 0x1, + DBGSTATUS_NOFILE = 0x2, + DBGSTATUS_NOFILEINFO = 0x4, + DBGSTATUS_UNKNOWN = 0xff +}DBGstatus; + +// Language tag based in the DW_TAG_... list from the dwarf.h +typedef enum { + DBG_NO_LANG = 0x0, + DBG_LANG_C89 = 0x1, + DBG_LANG_C99 = 0xc, + DBG_LANG_VASM_Assembler = 0x8001, // source from vasm assembler is marked as "DW_LANG_Mips_Assembler" with same value + DBG_END_LANG +}DBGLANGTAG; + +// Debug types typedef enum { DBG_NO_TYPE = 0x0, DBG_ELF = 0x1, @@ -220,6 +240,26 @@ typedef enum { DBGOP; +// Variables internal structure +typedef struct VariablesStruct +{ + size_t Op; // Variable's DW_OP + union + { + size_t Addr; // Variable memory address + int Offset; // Variable stack offset (signed) + }; + char *PtrName; // Variable's name + size_t TypeOffset; // Offset pointing on the Variable's Type + size_t TypeByteSize; // Variable's Type byte size + size_t TypeTag; // Variable's Type Tag + size_t TypeEncoding; // Variable's Type encoding + char *PtrTypeName; // Variable's Type name + size_t NbTabVariables; // Number of Variable's members + VariablesStruct **TabVariables; // Variable's Members (used for structures at the moment) +}S_VariablesStruct; + + // Internal manager extern void DBGManager_Init(void); extern void DBGManager_SetType(size_t DBGTypeSet); @@ -227,15 +267,19 @@ extern size_t DBGManager_GetType(void); extern void DBGManager_Reset(void); extern void DBGManager_Close(void); extern void DBGManager_SourceFileSearchPathsSet(char *ListPaths); +extern size_t DBGManager_GetNbSources(void); // Source text lines manager extern size_t DBGManager_GetNumLineFromAdr(size_t Adr, size_t Tag); extern char *DBGManager_GetLineSrcFromAdr(size_t Adr, size_t Tag); extern char *DBGManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine); extern char *DBGManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine); +extern char **DBGManager_GetSrcListPtrFromIndex(size_t Index, bool Used); +extern size_t DBGManager_GetSrcNbListPtrFromIndex(size_t Index, bool Used); +extern size_t *DBGManager_GetSrcNumLinesPtrFromIndex(size_t Index, bool Used); // General manager -extern char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t TypeByteSize); +extern size_t DBGManager_GetSrcLanguageFromIndex(size_t Index); // Functions manager extern char *DBGManager_GetFunctionName(size_t Adr); @@ -245,10 +289,19 @@ extern char *DBGManager_GetSymbolNameFromAdr(size_t Adr); extern size_t DBGManager_GetAdrFromSymbolName(char *SymbolName); // Source text files manager -extern char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error); -extern size_t DBGManager_GetNbFullSourceFilename(void); +extern char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, DBGstatus *Status); extern char *DBGManager_GetNumFullSourceFilename(size_t Index); +extern char *DBGManager_GetNumSourceFilename(size_t Index); +// Variables manager +extern size_t DBGManager_GetNbVariables(size_t Adr); +extern S_VariablesStruct* DBGManager_GetInfosVariable(size_t Adr, size_t Index); +extern char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t TypeByteSize); + +// Global variables manager +extern size_t DBGManager_GetGlobalVariableAdrFromName(char *VariableName); + +#if 0 // Global variables manager extern size_t DBGManager_GetNbGlobalVariables(void); extern char *DBGManager_GetGlobalVariableName(size_t Index); @@ -256,7 +309,6 @@ extern size_t DBGManager_GetGlobalVariableTypeEncoding(size_t Index); extern char *DBGManager_GetGlobalVariableTypeName(size_t Index); extern size_t DBGManager_GetGlobalVariableTypeByteSize(size_t Index); extern size_t DBGManager_GetGlobalVariableAdr(size_t Index); -extern size_t DBGManager_GetGlobalVariableAdrFromName(char *VariableName); extern char *DBGManager_GetGlobalVariableValue(size_t Index); extern size_t DBGManager_GetGlobalVariableTypeTag(size_t Index); @@ -269,6 +321,7 @@ extern size_t DBGManager_GetLocalVariableTypeByteSize(size_t Adr, size_t Index); extern size_t DBGManager_GetLocalVariableTypeTag(size_t Adr, size_t Index); extern size_t DBGManager_GetLocalVariableOp(size_t Adr, size_t Index); extern int DBGManager_GetLocalVariableOffset(size_t Adr, size_t Index); +#endif #endif // __DBGMANAGER_H__ diff --git a/src/debugger/DSPDasmWin.h b/src/debugger/DSPDasmWin.h index bdb3bd0..f944c11 100644 --- a/src/debugger/DSPDasmWin.h +++ b/src/debugger/DSPDasmWin.h @@ -11,7 +11,7 @@ #ifndef __DSPDASMBROWSER_H__ #define __DSPDASMBROWSER_H__ -#include +#include #include class DSPDasmWindow: public QWidget diff --git a/src/debugger/DWARFManager.cpp b/src/debugger/DWARFManager.cpp index fed680a..f01eacc 100644 --- a/src/debugger/DWARFManager.cpp +++ b/src/debugger/DWARFManager.cpp @@ -4,17 +4,22 @@ // by Jean-Paul Mari // // JPM = Jean-Paul Mari +// RG = Richard Goedeken // // WHO WHEN WHAT // --- ---------- ------------------------------------------------------------ // JPM Dec./2016 Created this file, and added the DWARF format support // JPM Sept./2018 Added LEB128 decoding features, and improve the DWARF parsing information // JPM Oct./2018 Improve the DWARF parsing information, and the source file text reading; support the used source lines from DWARF structure, and the search paths for the files +// JPM Aug./2019 Added new functions to handle DWARF information, full filename fix +// JPM Mar./2020 Fix a random crash when reading the source lines information +// JPM Aug./2020 Added a source code file date check +// RG Jan./2021 Linux build fixes +// JPM Apr./2021 Support the structure and union members // // To Do -// To use pointers instead of arrays usage -// To keep sources text file intact wihtout QT/HTML transformation +// To use pointers instead of arrays usage (originally done to check if values are set at the right places) // @@ -22,17 +27,23 @@ #include #include #include -#include -#include +#include +#include +#include +#include "libdwarf.h" +#include "dwarf.h" #include "LEB128.h" - +#include "DWARFManager.h" // Definitions for debugging -//#define DEBUG_NumCU 0x4d // CU number to debug or undefine it -//#define DEBUG_VariableName "sound_death" // Variable name to look for or undefine it -//#define DEBUG_TypeName "Cbuf_Execute" // Type name to look for or undefine it -//#define DEBUG_TypeDef DW_TAG_typedef // Type def to look for or undefine it (not supported) -//#define DEBUG_Filename "net_jag.c" // Filename to look for or undefine it +//#define DEBUG_NumCU 0x2 // CU number to debug or undefine it +//#define DEBUG_VariableName "cvar_vars" // Variable name to look for or undefine it +//#define DEBUG_TypeName "edict_t" // Type name to look for or undefine it +//#define DEBUG_TypeDef DW_TAG_typedef // Type def to look for or undefine it (not used / not supported) +//#define DEBUG_Filename "crt0" // Filename to look for or undefine it + +// Definitions for handling data +//#define CONVERT_QT_HML // Text will be converted as HTML // Definitions for the variables's typetag #define TypeTag_structure 0x01 // structure @@ -43,6 +54,7 @@ #define TypeTag_typedef 0x20 // typedef #define TypeTag_enumeration_type 0x40 // enumeration #define TypeTag_subroutine_type 0x80 // subroutine +#define TypeTag_union 0x100 // union // Source line CU structure @@ -65,14 +77,17 @@ typedef struct DMIStruct_LineSrc // Enumeration structure typedef struct EnumerationStruct { - char *PtrName; // Enumeration's name - size_t value; // Enumeration's value + char *PtrName; // Enumeration's name + size_t value; // Enumeration's value }S_EnumerationStruct; // Structure members structure -//typedef struct StructureMembersStruct -//{ -//}S_StructureMembersStruct; +typedef struct StructureMembersStruct +{ + char *PtrName; // Structure member's name + size_t TypeOffset; // Structure member's offset on another type + size_t DataMemberLocation; // Structure member's data member +}S_StructureMembersStruct; // Base type internal structure typedef struct BaseTypeStruct @@ -83,26 +98,29 @@ typedef struct BaseTypeStruct size_t ByteSize; // Type's Byte Size size_t Encoding; // Type's encoding char *PtrName; // Type's name - size_t NbEnumeration; // Type's enumeration numbers - EnumerationStruct *PtrEnumeration; // Type's enumeration -// StructureMembersStruct *PtrStructureMembers; // Type's structure members + size_t NbEnumerations; // Type's enumeration numbers + EnumerationStruct *PtrEnumerations; // Type's enumeration + size_t NbStructureMembers; // Type's numbers of structure members + StructureMembersStruct *PtrStructureMembers; // Type's structure members }S_BaseTypeStruct; // Variables internal structure typedef struct VariablesStruct { - size_t Op; // Variable's DW_OP + size_t Op; // Variable's DW_OP union { - size_t Addr; // Variable memory address - int Offset; // Variable stack offset (signed) + size_t Addr; // Variable memory address + int Offset; // Variable stack offset (signed) }; - char *PtrName; // Variable's name - size_t TypeOffset; // Offset pointing on the Variable's Type - size_t TypeByteSize; // Variable's Type byte size - size_t TypeTag; // Variable's Type Tag - size_t TypeEncoding; // Variable's Type encoding - char *PtrTypeName; // Variable's Type name + char *PtrName; // Variable's name + size_t TypeOffset; // Offset pointing on the Variable's Type + size_t TypeByteSize; // Variable's Type byte size + size_t TypeTag; // Variable's Type Tag + size_t TypeEncoding; // Variable's Type encoding + char *PtrTypeName; // Variable's Type name + size_t NbTabVariables; // Number of Variable's members + VariablesStruct **TabVariables; // Variable's Members (used for structures at the moment) }S_VariablesStruct; // Sub program internal structure @@ -125,8 +143,9 @@ typedef struct SubProgStruct typedef struct CUStruct { size_t Tag; + size_t Language; // Language (C, etc.) used by the source code size_t LowPC, HighPC; // Memory range for the code - char *PtrProducer; // Pointer to the "Producer" text information (mostly compiler and compilation options used) + char *PtrProducer; // "Producer" text information (mostly compiler and compilation options used) char *PtrSourceFilename; // Source file name char *PtrSourceFileDirectory; // Directory of the source file char *PtrFullFilename; // Pointer to full namefile (directory & filename) @@ -141,8 +160,13 @@ typedef struct CUStruct size_t NbVariables; // Variables number VariablesStruct *PtrVariables; // Pointer to the global variables list structure size_t NbFrames; // Frames number - size_t NbLinesSrc; // Number of used source lines - CUStruct_LineSrc *PtrLinesSrc; // Pointer to the used source lines list structure + size_t NbUsedLinesSrc; // Number of used source lines + size_t LastNumUsedLinesSrc; // Last number line used + CUStruct_LineSrc *PtrUsedLinesSrc; // Pointer to the used source lines list structure + char **PtrUsedLinesLoadSrc; // Pointer lists to each used source line referenced by the CUStruct_LineSrc structure + size_t *PtrUsedNumLines; // List of the number lines used + struct stat _statbuf; // File information + DWARFstatus Status; // File status }S_CUStruct; @@ -155,9 +179,10 @@ Dwarf_Debug dbg; CUStruct *PtrCU; char **ListSearchPaths; size_t NbSearchPaths; +struct stat FileElfExeInfo; -// +// Function declarations Dwarf_Handler DWARFManager_ErrorHandler(Dwarf_Ptr perrarg); void DWARFManager_InitDMI(void); void DWARFManager_CloseDMI(void); @@ -167,10 +192,15 @@ void DWARFManager_InitInfosVariable(VariablesStruct *PtrVariables); void DWARFManager_SourceFileSearchPathsInit(void); void DWARFManager_SourceFileSearchPathsReset(void); void DWARFManager_SourceFileSearchPathsClose(void); +void DWARFManager_ConformSlachesBackslashes(char *Ptr); +#if 0 +size_t DWARFManager_GetNbGlobalVariables(void); +size_t DWARFManager_GetNbLocalVariables(size_t Adr); +#endif // -Dwarf_Handler DWARFManager_ErrorHandler(Dwarf_Ptr perrarg) +Dwarf_Handler DWARFManager_ErrorHandler(Dwarf_Ptr /* perrarg */) { return 0; } @@ -233,10 +263,11 @@ bool DWARFManager_Close(void) // Dwarf manager Elf init -int DWARFManager_ElfInit(Elf *ElfPtr) +int DWARFManager_ElfInit(Elf *ElfPtr, struct stat FileElfInfo) { if ((LibDwarf = dwarf_elf_init(ElfPtr, DW_DLC_READ, (Dwarf_Handler)DWARFManager_ErrorHandler, errarg, &dbg, &error)) == DW_DLV_OK) { + FileElfExeInfo = FileElfInfo; DWARFManager_InitDMI(); } @@ -271,21 +302,27 @@ bool DWARFManager_ElfClose(void) // Dwarf manager Compilation Units close void DWARFManager_CloseDMI(void) { + // loop on all CU while (NbCU--) { + // free pointers free(PtrCU[NbCU].PtrFullFilename); free(PtrCU[NbCU].PtrLoadSrc); free(PtrCU[NbCU].PtrProducer); free(PtrCU[NbCU].PtrSourceFilename); free(PtrCU[NbCU].PtrSourceFileDirectory); - free(PtrCU[NbCU].PtrLinesSrc); + free(PtrCU[NbCU].PtrUsedLinesSrc); + free(PtrCU[NbCU].PtrUsedLinesLoadSrc); + free(PtrCU[NbCU].PtrUsedNumLines); + // free lines from the source code while (PtrCU[NbCU].NbLinesLoadSrc--) { free(PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].NbLinesLoadSrc]); } free(PtrCU[NbCU].PtrLinesLoadSrc); + // free the functions information while (PtrCU[NbCU].NbSubProgs--) { while (PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbVariables--) @@ -300,20 +337,36 @@ void DWARFManager_CloseDMI(void) } free(PtrCU[NbCU].PtrSubProgs); + // free the types while (PtrCU[NbCU].NbTypes--) { free(PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrName); + + // free the structure's members + while (PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].NbStructureMembers--) + { + free(PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrStructureMembers[PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].NbStructureMembers].PtrName); + } + free(PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrStructureMembers); } free(PtrCU[NbCU].PtrTypes); + // free variables while (PtrCU[NbCU].NbVariables--) { free(PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].PtrName); free(PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].PtrTypeName); + + // free the variable's members + while (PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].NbTabVariables--) + { + free(PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].TabVariables[PtrCU[NbCU].PtrVariables[PtrCU[NbCU].NbVariables].NbTabVariables]); + } } free(PtrCU[NbCU].PtrVariables); } + // free the CU free(PtrCU); } @@ -326,12 +379,14 @@ void DWARFManager_InitDMI(void) Dwarf_Attribute *atlist; Dwarf_Attribute return_attr1; Dwarf_Half return_tagval, return_attr; + Dwarf_Half version, offset_size; Dwarf_Addr return_lowpc, return_highpc, return_lineaddr; Dwarf_Block *return_block; - Dwarf_Signed atcnt, cnt; + Dwarf_Signed atcnt, cnt, return_value; Dwarf_Die return_sib, return_die, return_sub, return_subdie; Dwarf_Off return_offset; Dwarf_Line *linebuf; + Dwarf_Half form; FILE *SrcFile; char *return_string; char *Ptr, *Ptr1; @@ -341,7 +396,7 @@ void DWARFManager_InitDMI(void) PtrCU = NULL; // loop on the available Compilation Unit - while (dwarf_next_cu_header(dbg, NULL, NULL, NULL, NULL, &next_cu_header, &error) == DW_DLV_OK) + while (dwarf_next_cu_header_b(dbg, NULL, &version, NULL, NULL, &offset_size, NULL, &next_cu_header, &error) == DW_DLV_OK) { // Allocation of an additional Compilation Unit structure in the table if (Ptr = (char *)realloc(PtrCU, ((NbCU + 1) * sizeof(CUStruct)))) @@ -426,6 +481,14 @@ void DWARFManager_InitDMI(void) } break; + // Language + case DW_AT_language: + if (dwarf_formudata(atlist[i], &return_uvalue, &error) == DW_DLV_OK) + { + PtrCU[NbCU].Language = return_uvalue; + } + break; + default: break; } @@ -450,10 +513,12 @@ void DWARFManager_InitDMI(void) PtrCU[NbCU].PtrFullFilename = (char *)realloc(PtrCU[NbCU].PtrFullFilename, strlen(PtrCU[NbCU].PtrSourceFilename) + strlen((const char *)ListSearchPaths[i]) + 2); #if defined(_WIN32) sprintf(PtrCU[NbCU].PtrFullFilename, "%s\\%s", ListSearchPaths[i], PtrCU[NbCU].PtrSourceFilename); + if (!fopen_s(&SrcFile, PtrCU[NbCU].PtrFullFilename, "rb")) #else sprintf(PtrCU[NbCU].PtrFullFilename, "%s/%s", ListSearchPaths[i], PtrCU[NbCU].PtrSourceFilename); + SrcFile = fopen(PtrCU[NbCU].PtrFullFilename, "rb"); + if (SrcFile == NULL) #endif - if (!fopen_s(&SrcFile, PtrCU[NbCU].PtrFullFilename, "rb")) { PtrCU[NbCU].PtrSourceFileDirectory = (char *)realloc(PtrCU[NbCU].PtrSourceFileDirectory, strlen(ListSearchPaths[i]) + 1); strcpy(PtrCU[NbCU].PtrSourceFileDirectory, ListSearchPaths[i]); @@ -468,30 +533,29 @@ void DWARFManager_InitDMI(void) } } - // Create full filename - Ptr = PtrCU[NbCU].PtrFullFilename = (char *)realloc(PtrCU[NbCU].PtrFullFilename, strlen(PtrCU[NbCU].PtrSourceFilename) + strlen(PtrCU[NbCU].PtrSourceFileDirectory) + 2); -#if defined(_WIN32) - sprintf(PtrCU[NbCU].PtrFullFilename, "%s\\%s", PtrCU[NbCU].PtrSourceFileDirectory, PtrCU[NbCU].PtrSourceFilename); -#else - sprintf(PtrCU[NbCU].PtrFullFilename, "%s/%s", PtrCU[NbCU].PtrSourceFileDirectory, PtrCU[NbCU].PtrSourceFilename); -#endif - // Conform slashes and backslashes - while (*Ptr) + // Conform slashes / backslashes for the filename + DWARFManager_ConformSlachesBackslashes(PtrCU[NbCU].PtrSourceFilename); + + // Check if filename contains already the complete directory + if (PtrCU[NbCU].PtrSourceFilename[1] == ':') + { + // Copy the filename as the full filename + PtrCU[NbCU].PtrFullFilename = (char *)realloc(PtrCU[NbCU].PtrFullFilename, strlen(PtrCU[NbCU].PtrSourceFilename) + 1); + strcpy(PtrCU[NbCU].PtrFullFilename, PtrCU[NbCU].PtrSourceFilename); + } + else { + // Create full filename and Conform slashes / backslashes + PtrCU[NbCU].PtrFullFilename = (char *)realloc(PtrCU[NbCU].PtrFullFilename, strlen(PtrCU[NbCU].PtrSourceFilename) + strlen(PtrCU[NbCU].PtrSourceFileDirectory) + 2); #if defined(_WIN32) - if (*Ptr == '/') - { - *Ptr = '\\'; - } + sprintf(PtrCU[NbCU].PtrFullFilename, "%s\\%s", PtrCU[NbCU].PtrSourceFileDirectory, PtrCU[NbCU].PtrSourceFilename); #else - if (*Ptr == '\\') - { - *Ptr = '/'; - } + sprintf(PtrCU[NbCU].PtrFullFilename, "%s/%s", PtrCU[NbCU].PtrSourceFileDirectory, PtrCU[NbCU].PtrSourceFilename); #endif - Ptr++; } + DWARFManager_ConformSlachesBackslashes(PtrCU[NbCU].PtrFullFilename); + // Directory path clean-up #if defined(_WIN32) while ((Ptr1 = Ptr = strstr(PtrCU[NbCU].PtrFullFilename, "\\..\\"))) @@ -507,65 +571,97 @@ void DWARFManager_InitDMI(void) strcpy((Ptr1 + 1), (Ptr + 4)); } - // Open the source file as a binary file - if (!fopen_s(&SrcFile, PtrCU[NbCU].PtrFullFilename, "rb")) + // Get the source file information + if (!stat(PtrCU[NbCU].PtrFullFilename, &PtrCU[NbCU]._statbuf)) { - if (!fseek(SrcFile, 0, SEEK_END)) + // check the time stamp with the executable + if (PtrCU[NbCU]._statbuf.st_mtime <= FileElfExeInfo.st_mtime) { - if ((PtrCU[NbCU].SizeLoadSrc = ftell(SrcFile)) > 0) + // Open the source file as a binary file +#if defined(_WIN32) + if (!fopen_s(&SrcFile, PtrCU[NbCU].PtrFullFilename, "rb")) +#else + SrcFile = fopen(PtrCU[NbCU].PtrFullFilename, "rb"); + if (SrcFile == NULL) +#endif { - if (!fseek(SrcFile, 0, SEEK_SET)) + if (!fseek(SrcFile, 0, SEEK_END)) { - if (PtrCU[NbCU].PtrLoadSrc = Ptr = Ptr1 = (char *)calloc(1, (PtrCU[NbCU].SizeLoadSrc + 2))) + if ((PtrCU[NbCU].SizeLoadSrc = ftell(SrcFile)) > 0) { - // Read whole file - if (fread_s(PtrCU[NbCU].PtrLoadSrc, PtrCU[NbCU].SizeLoadSrc, PtrCU[NbCU].SizeLoadSrc, 1, SrcFile) != 1) - { - free(PtrCU[NbCU].PtrLoadSrc); - PtrCU[NbCU].PtrLoadSrc = NULL; - PtrCU[NbCU].SizeLoadSrc = 0; - } - else + if (!fseek(SrcFile, 0, SEEK_SET)) { - // Eliminate all carriage return code '\r' (oxd) - do + if (PtrCU[NbCU].PtrLoadSrc = Ptr = Ptr1 = (char *)calloc(1, (PtrCU[NbCU].SizeLoadSrc + 2))) { - if ((*Ptr = *Ptr1) != '\r') + // Read whole file +#if defined(_WIN32) && defined(_MSC_VER) + if (fread_s(PtrCU[NbCU].PtrLoadSrc, PtrCU[NbCU].SizeLoadSrc, PtrCU[NbCU].SizeLoadSrc, 1, SrcFile) != 1) +#else + if (fread(PtrCU[NbCU].PtrLoadSrc, PtrCU[NbCU].SizeLoadSrc, 1, SrcFile) != 1) +#endif { - Ptr++; + free(PtrCU[NbCU].PtrLoadSrc); + PtrCU[NbCU].PtrLoadSrc = NULL; + PtrCU[NbCU].SizeLoadSrc = 0; } - } - while (*Ptr1++); + else + { + // Eliminate all carriage return code '\r' (oxd) + do + { + if ((*Ptr = *Ptr1) != '\r') + { + Ptr++; + } + } while (*Ptr1++); - // Get back the new text file size - PtrCU[NbCU].SizeLoadSrc = strlen(Ptr = PtrCU[NbCU].PtrLoadSrc); + // Get back the new text file size + PtrCU[NbCU].SizeLoadSrc = strlen(Ptr = PtrCU[NbCU].PtrLoadSrc); - // Make sure the text file finish with a new line code '\n' (0xa) - if (PtrCU[NbCU].PtrLoadSrc[PtrCU[NbCU].SizeLoadSrc - 1] != '\n') - { - PtrCU[NbCU].PtrLoadSrc[PtrCU[NbCU].SizeLoadSrc++] = '\n'; - PtrCU[NbCU].PtrLoadSrc[PtrCU[NbCU].SizeLoadSrc] = 0; - } + // Make sure the text file finish with a new line code '\n' (0xa) + if (PtrCU[NbCU].PtrLoadSrc[PtrCU[NbCU].SizeLoadSrc - 1] != '\n') + { + PtrCU[NbCU].PtrLoadSrc[PtrCU[NbCU].SizeLoadSrc++] = '\n'; + PtrCU[NbCU].PtrLoadSrc[PtrCU[NbCU].SizeLoadSrc] = 0; + } - // Reallocate text file - if (PtrCU[NbCU].PtrLoadSrc = Ptr = (char *)realloc(PtrCU[NbCU].PtrLoadSrc, (PtrCU[NbCU].SizeLoadSrc + 1))) - { - // Count line numbers, based on the new line code '\n' (0xa), and finish each line with 0 - do - { - if (*Ptr == '\n') + // Reallocate text file + if (PtrCU[NbCU].PtrLoadSrc = Ptr = (char *)realloc(PtrCU[NbCU].PtrLoadSrc, (PtrCU[NbCU].SizeLoadSrc + 1))) { - PtrCU[NbCU].NbLinesLoadSrc++; - *Ptr = 0; + // Count line numbers, based on the new line code '\n' (0xa), and finish each line with 0 + do + { + if (*Ptr == '\n') + { + PtrCU[NbCU].NbLinesLoadSrc++; + *Ptr = 0; + } + } while (*++Ptr); } - } while (*++Ptr); + } } } } } + + fclose(SrcFile); + } + else + { + // Source file doesn't exist + PtrCU[NbCU].Status = DWARFSTATUS_NOFILE; } } - fclose(SrcFile); + else + { + // Source file is outdated + PtrCU[NbCU].Status = DWARFSTATUS_OUTDATEDFILE; + } + } + else + { + // Source file doesn't have information + PtrCU[NbCU].Status = DWARFSTATUS_NOFILEINFO; } break; @@ -575,24 +671,32 @@ void DWARFManager_InitDMI(void) } // Get the source lines table located in the CU - if (dwarf_srclines(return_sib, &linebuf, &cnt, &error) == DW_DLV_OK) + if ((dwarf_srclines(return_sib, &linebuf, &cnt, &error) == DW_DLV_OK) && (PtrCU[NbCU].Status == DWARFSTATUS_OK)) { if (cnt) { - PtrCU[NbCU].NbLinesSrc = cnt; - PtrCU[NbCU].PtrLinesSrc = (CUStruct_LineSrc *)calloc(cnt, sizeof(CUStruct_LineSrc)); + PtrCU[NbCU].NbUsedLinesSrc = cnt; + PtrCU[NbCU].PtrUsedLinesSrc = (CUStruct_LineSrc *)calloc(cnt, sizeof(CUStruct_LineSrc)); + PtrCU[NbCU].PtrUsedLinesLoadSrc = (char **)calloc(cnt, sizeof(char *)); + PtrCU[NbCU].PtrUsedNumLines = (size_t *)calloc(cnt, sizeof(size_t)); + + // Get the addresses and their source line numbers for (Dwarf_Signed i = 0; i < cnt; i++) { if (dwarf_lineaddr(linebuf[i], &return_lineaddr, &error) == DW_DLV_OK) { + // Get the source line number if (dwarf_lineno(linebuf[i], &return_uvalue, &error) == DW_DLV_OK) { - PtrCU[NbCU].PtrLinesSrc[i].StartPC = return_lineaddr; - PtrCU[NbCU].PtrLinesSrc[i].NumLineSrc = return_uvalue; + PtrCU[NbCU].PtrUsedLinesSrc[i].StartPC = return_lineaddr; + PtrCU[NbCU].PtrUsedLinesSrc[i].NumLineSrc = return_uvalue; } } } } + + // Release the memory used by the source lines table located in the CU + dwarf_srclines_dealloc(dbg, linebuf, cnt); } // Check if the CU has child @@ -694,6 +798,7 @@ void DWARFManager_InitDMI(void) case DW_TAG_base_type: case DW_TAG_typedef: + case DW_TAG_union_type: case DW_TAG_structure_type: case DW_TAG_pointer_type: case DW_TAG_const_type: @@ -781,9 +886,123 @@ void DWARFManager_InitDMI(void) dwarf_dealloc(dbg, atlist[i], DW_DLA_ATTR); } - PtrCU[NbCU].NbTypes++; - dwarf_dealloc(dbg, atlist, DW_DLA_LIST); + + switch (return_tagval) + { + case DW_TAG_structure_type: + case DW_TAG_union_type: + if (dwarf_child(return_die, &return_subdie, &error) == DW_DLV_OK) + { + do + { + return_sub = return_subdie; + if ((dwarf_tag(return_subdie, &return_tagval, &error) == DW_DLV_OK)) + { + switch (return_tagval) + { + case DW_TAG_member: + if (dwarf_attrlist(return_subdie, &atlist, &atcnt, &error) == DW_DLV_OK) + { + // Allocate memory for this member + PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrStructureMembers = (StructureMembersStruct *)realloc(PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrStructureMembers, ((PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].NbStructureMembers + 1) * sizeof(StructureMembersStruct))); + memset(PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrStructureMembers + PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].NbStructureMembers, 0, sizeof(StructureMembersStruct)); + + for (Dwarf_Signed i = 0; i < atcnt; ++i) + { + if (dwarf_whatattr(atlist[i], &return_attr, &error) == DW_DLV_OK) + { + if (dwarf_attr(return_subdie, return_attr, &return_attr1, &error) == DW_DLV_OK) + { + switch (return_attr) + { + case DW_AT_data_member_location: + if (dwarf_whatform(return_attr1, &form, &error) == DW_DLV_OK) + { + if ((form == DW_FORM_data1) || (form == DW_FORM_data2) || (form == DW_FORM_data2) || (form == DW_FORM_data4) || (form == DW_FORM_data8) || (form == DW_FORM_udata)) + { + if (dwarf_formudata(return_attr1, &return_uvalue, &error) == DW_DLV_OK) + { + PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrStructureMembers[PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].NbStructureMembers].DataMemberLocation = return_uvalue; + } + } + else + { + if (form == DW_FORM_sdata) + { + if (dwarf_formsdata(return_attr1, &return_value, &error) == DW_DLV_OK) + { + PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrStructureMembers[PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].NbStructureMembers].DataMemberLocation = return_value; + } + } + else + { + if (dwarf_formblock(return_attr1, &return_block, &error) == DW_DLV_OK) + { + switch (return_block->bl_len) + { + case 2: + case 3: + case 4: + PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrStructureMembers[PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].NbStructureMembers].DataMemberLocation = ReadULEB128((char *)return_block->bl_data + 1); + break; + + default: + break; + } + + dwarf_dealloc(dbg, return_block, DW_DLA_BLOCK); + } + } + } + } + break; + + case DW_AT_type: + //dwarf_whatform(return_attr1, &form, &error); + if (dwarf_global_formref(return_attr1, &return_uvalue, &error) == DW_DLV_OK) + { + PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrStructureMembers[PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].NbStructureMembers].TypeOffset = return_uvalue; + } + break; + + case DW_AT_name: + if (dwarf_formstring(return_attr1, &return_string, &error) == DW_DLV_OK) + { + PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrStructureMembers[PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].NbStructureMembers].PtrName = (char *)calloc(strlen(return_string) + 1, 1); + strcpy(PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].PtrStructureMembers[PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].NbStructureMembers].PtrName, return_string); + + dwarf_dealloc(dbg, return_string, DW_DLA_STRING); + } + break; + + // Member's file number + case DW_AT_decl_file: + break; + + // Member's line number + case DW_AT_decl_line: + break; + + default: + break; + } + } + } + } + dwarf_dealloc(dbg, atlist, DW_DLA_LIST); + + PtrCU[NbCU].PtrTypes[PtrCU[NbCU].NbTypes].NbStructureMembers++; + } + break; + } + } + } while (dwarf_siblingof(dbg, return_sub, &return_subdie, &error) == DW_DLV_OK); + } + break; + } + + PtrCU[NbCU].NbTypes++; } break; @@ -877,19 +1096,14 @@ void DWARFManager_InitDMI(void) // Get source line number and associated block of address for (Dwarf_Signed i = 0; i < cnt; ++i) { - if (dwarf_lineaddr(linebuf[i], &return_lineaddr, &error) == DW_DLV_OK) + // Check the presence of the line in the memory frame + if (PtrCU[NbCU].PtrUsedLinesSrc && (PtrCU[NbCU].PtrUsedLinesSrc[i].StartPC >= return_lowpc) && (PtrCU[NbCU].PtrUsedLinesSrc[i].StartPC <= return_highpc)) { - if (dwarf_lineno(linebuf[i], &return_uvalue, &error) == DW_DLV_OK) - { - if ((return_lineaddr >= return_lowpc) && (return_lineaddr <= return_highpc)) - { - PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc = (DMIStruct_LineSrc *)realloc(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc, (PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbLinesSrc + 1) * sizeof(DMIStruct_LineSrc)); - memset((void *)(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc + PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbLinesSrc), 0, sizeof(DMIStruct_LineSrc)); - PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbLinesSrc].StartPC = return_lineaddr; - PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbLinesSrc].NumLineSrc = return_uvalue; - PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbLinesSrc++; - } - } + PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc = (DMIStruct_LineSrc *)realloc(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc, (PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbLinesSrc + 1) * sizeof(DMIStruct_LineSrc)); + memset((void *)(PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc + PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbLinesSrc), 0, sizeof(DMIStruct_LineSrc)); + PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbLinesSrc].StartPC = PtrCU[NbCU].PtrUsedLinesSrc[i].StartPC; + PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].PtrLinesSrc[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbLinesSrc].NumLineSrc = PtrCU[NbCU].PtrUsedLinesSrc[i].NumLineSrc; + PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs].NbLinesSrc++; } } @@ -1015,16 +1229,9 @@ void DWARFManager_InitDMI(void) } while (dwarf_siblingof(dbg, return_sib, &return_die, &error) == DW_DLV_OK); } - - // Release the memory used by the source lines - for (Dwarf_Signed i = 0; i < cnt; ++i) - { - dwarf_dealloc(dbg, linebuf[i], DW_DLA_LINE); - } - dwarf_dealloc(dbg, linebuf, DW_DLA_LIST); } - // Set the source code lines for QT html/text conformity + // Set the source code lines if (PtrCU[NbCU].NbLinesLoadSrc) { if (PtrCU[NbCU].PtrLinesLoadSrc = (char **)calloc(PtrCU[NbCU].NbLinesLoadSrc, sizeof(char *))) @@ -1035,6 +1242,9 @@ void DWARFManager_InitDMI(void) { if (Ptr = DWARFManager_GetLineSrcFromNumLine(PtrCU[NbCU].PtrLoadSrc, (j + 1))) { +#ifndef CONVERT_QT_HML + strcpy(PtrCU[NbCU].PtrLinesLoadSrc[j], Ptr); +#else size_t i = 0; while (*Ptr) @@ -1073,6 +1283,7 @@ void DWARFManager_InitDMI(void) } Ptr++; } +#endif } PtrCU[NbCU].PtrLinesLoadSrc[j] = (char *)realloc(PtrCU[NbCU].PtrLinesLoadSrc[j], strlen(PtrCU[NbCU].PtrLinesLoadSrc[j]) + 1); } @@ -1117,23 +1328,28 @@ void DWARFManager_InitDMI(void) } } - // Set information based on used line numbers - if (PtrCU[NbCU].PtrLinesSrc) + // Check validity between used number lines and number lines in the source file + if (PtrCU[NbCU].LastNumUsedLinesSrc <= PtrCU[NbCU].NbLinesLoadSrc) { - // Set the line source pointer for each used line numbers - if (PtrCU[NbCU].PtrLinesLoadSrc) + // Set information based on used line numbers + if (PtrCU[NbCU].PtrUsedLinesSrc) { - for (size_t i = 0; i < PtrCU[NbCU].NbLinesSrc; i++) + // Set the line source pointers for each used line numbers + if (PtrCU[NbCU].PtrLinesLoadSrc) { - PtrCU[NbCU].PtrLinesSrc[i].PtrLineSrc = PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].PtrLinesSrc[i].NumLineSrc - 1]; - } + for (size_t i = 0; i < PtrCU[NbCU].NbUsedLinesSrc; i++) + { + PtrCU[NbCU].PtrUsedNumLines[i] = PtrCU[NbCU].PtrUsedLinesSrc[i].NumLineSrc - 1; + PtrCU[NbCU].PtrUsedLinesLoadSrc[i] = PtrCU[NbCU].PtrUsedLinesSrc[i].PtrLineSrc = PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].PtrUsedLinesSrc[i].NumLineSrc - 1]; + } - // Setup memory range for the code if CU doesn't have already this information - // It is taken from the used lines structure - if (!PtrCU[NbCU].LowPC && (!PtrCU[NbCU].HighPC || (PtrCU[NbCU].HighPC == ~0))) - { - PtrCU[NbCU].LowPC = PtrCU[NbCU].PtrLinesSrc[0].StartPC; - PtrCU[NbCU].HighPC = PtrCU[NbCU].PtrLinesSrc[PtrCU[NbCU].NbLinesSrc - 1].StartPC; + // Setup memory range for the code if CU doesn't have already this information + // It is taken from the used lines structure + if (!PtrCU[NbCU].LowPC && (!PtrCU[NbCU].HighPC || (PtrCU[NbCU].HighPC == ~0))) + { + PtrCU[NbCU].LowPC = PtrCU[NbCU].PtrUsedLinesSrc[0].StartPC; + PtrCU[NbCU].HighPC = PtrCU[NbCU].PtrUsedLinesSrc[PtrCU[NbCU].NbUsedLinesSrc - 1].StartPC; + } } } } @@ -1160,32 +1376,53 @@ void DWARFManager_InitDMI(void) } +// Conform slashes and backslashes +void DWARFManager_ConformSlachesBackslashes(char *Ptr) +{ + while (*Ptr) + { +#if defined(_WIN32) + if (*Ptr == '/') + { + *Ptr = '\\'; + } +#else + if (*Ptr == '\\') + { + *Ptr = '/'; + } +#endif + Ptr++; + } +} + + // Variables information initialisation void DWARFManager_InitInfosVariable(VariablesStruct *PtrVariables) { - size_t j, TypeOffset; - #ifdef DEBUG_VariableName if (PtrVariables->PtrName && !strcmp(PtrVariables->PtrName, DEBUG_VariableName)) #endif { PtrVariables->PtrTypeName = (char *)calloc(1000, 1); - TypeOffset = PtrVariables->TypeOffset; + size_t TypeOffset = PtrVariables->TypeOffset; - for (j = 0; j < PtrCU[NbCU].NbTypes; j++) + for (size_t j = 0; j < PtrCU[NbCU].NbTypes; j++) { if (TypeOffset == PtrCU[NbCU].PtrTypes[j].Offset) { switch (PtrCU[NbCU].PtrTypes[j].Tag) { + // subroutine / function pointer case DW_TAG_subroutine_type: PtrVariables->TypeTag |= TypeTag_subroutine_type; strcat(PtrVariables->PtrTypeName, " (* ) ()"); break; - // Structure type tag + // structure & union type tag case DW_TAG_structure_type: - PtrVariables->TypeTag |= TypeTag_structure; + case DW_TAG_union_type: + PtrVariables->TypeTag |= (PtrCU[NbCU].PtrTypes[j].Tag == DW_TAG_structure_type) ? TypeTag_structure : TypeTag_union; if (!(PtrVariables->TypeTag & TypeTag_typedef)) { if (PtrCU[NbCU].PtrTypes[j].PtrName) @@ -1201,19 +1438,36 @@ void DWARFManager_InitInfosVariable(VariablesStruct *PtrVariables) { if ((PtrVariables->TypeTag & TypeTag_pointer)) { - strcat(PtrVariables->PtrTypeName, " *"); + strcat(PtrVariables->PtrTypeName, "* "); + } + + if (PtrVariables->Op) + { + // fill the structure members + PtrVariables->TabVariables = (VariablesStruct**)calloc(PtrCU[NbCU].PtrTypes[j].NbStructureMembers, sizeof(VariablesStruct*)); + for (size_t i = 0; i < PtrCU[NbCU].PtrTypes[j].NbStructureMembers; i++) + { + //if (PtrVariables->PtrName != PtrCU[NbCU].PtrTypes[j].PtrStructureMembers[i].PtrName) + { + PtrVariables->TabVariables[PtrVariables->NbTabVariables] = (VariablesStruct*)calloc(1, sizeof(VariablesStruct)); + PtrVariables->TabVariables[PtrVariables->NbTabVariables]->PtrName = PtrCU[NbCU].PtrTypes[j].PtrStructureMembers[i].PtrName; + PtrVariables->TabVariables[PtrVariables->NbTabVariables]->TypeOffset = PtrCU[NbCU].PtrTypes[j].PtrStructureMembers[i].TypeOffset; + PtrVariables->TabVariables[PtrVariables->NbTabVariables]->Offset = (int)PtrCU[NbCU].PtrTypes[j].PtrStructureMembers[i].DataMemberLocation; + DWARFManager_InitInfosVariable(PtrVariables->TabVariables[PtrVariables->NbTabVariables++]); + } + } } } break; - // Pointer type tag + // pointer type tag case DW_TAG_pointer_type: PtrVariables->TypeTag |= TypeTag_pointer; PtrVariables->TypeByteSize = PtrCU[NbCU].PtrTypes[j].ByteSize; PtrVariables->TypeEncoding = 0x10; if (!(TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset)) { - strcat(PtrVariables->PtrTypeName, "void *"); + strcat(PtrVariables->PtrTypeName, "void* "); } else { @@ -1284,7 +1538,7 @@ void DWARFManager_InitInfosVariable(VariablesStruct *PtrVariables) } if ((PtrVariables->TypeTag & TypeTag_pointer)) { - strcat(PtrVariables->PtrTypeName, " *"); + strcat(PtrVariables->PtrTypeName, "* "); } else { @@ -1330,14 +1584,18 @@ char *DWARFManager_GetSymbolnameFromAdr(size_t Adr) // Get complete source filename based from address // Return NULL if no source filename exists -// Return the existence status (true or false) in Error -char *DWARFManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error) +// Return the existence status in Status if pointer not NULL +char *DWARFManager_GetFullSourceFilenameFromAdr(size_t Adr, DWARFstatus *Status) { for (size_t i = 0; i < NbCU; i++) { if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC)) { - *Error = PtrCU[i].PtrLoadSrc ? true : false; + if (Status) + { + *Status = PtrCU[i].Status; + } + return PtrCU[i].PtrFullFilename; } } @@ -1367,6 +1625,114 @@ char *DWARFManager_GetLineSrcFromNumLine(char *PtrSrcFile, size_t NumLine) } +// Get number of variables +// A NULL address will return the numbre of global variables, otherwise it will return the number of local variables +size_t DWARFManager_GetNbVariables(size_t Adr) +{ + // check the address + if (Adr) + { + for (size_t i = 0; i < NbCU; i++) + { + if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC)) + { + for (size_t j = 0; j < PtrCU[i].NbSubProgs; j++) + { + if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC)) + { + return PtrCU[i].PtrSubProgs[j].NbVariables; + } + } + } + } + } + else + { + size_t NbVariables = 0; + + for (size_t i = 0; i < NbCU; i++) + { + NbVariables += PtrCU[i].NbVariables; + } + + return NbVariables; + } + + return 0; +#if 0 + return Adr ? DWARFManager_GetNbLocalVariables(Adr) : DWARFManager_GetNbGlobalVariables(); +#endif +} + + +// Get variable's information +// A NULL address will return the pointer to the global variable structure, otherwise it will return the local's one +void* DWARFManager_GetInfosVariable(size_t Adr, size_t Index) +{ + // check the address + if (Adr) + { + // get the pointer's information from a local variable + for (size_t i = 0; i < NbCU; i++) + { + if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC)) + { + for (size_t j = 0; j < PtrCU[i].NbSubProgs; j++) + { + if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC)) + { + return &PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1]; + } + } + } + } + } + else + { + // get the pointer's information from a global variable + for (size_t i = 0; i < NbCU; i++) + { + if (PtrCU[i].NbVariables) + { + if (Index <= PtrCU[i].NbVariables) + { + return &PtrCU[i].PtrVariables[Index - 1]; + } + else + { + Index -= PtrCU[i].NbVariables; + } + } + } + } + + return NULL; +} + + +// Get global variable memory address based on his name +// Return 0 if not found, or will return the first occurence found +size_t DWARFManager_GetGlobalVariableAdrFromName(char *VariableName) +{ + for (size_t i = 0; i < NbCU; i++) + { + if (PtrCU[i].NbVariables) + { + for (size_t j = 0; j < PtrCU[i].NbVariables; j++) + { + if (!strcmp(PtrCU[i].PtrVariables[j].PtrName, VariableName)) + { + return PtrCU[i].PtrVariables[j].Addr; + } + } + } + } + + return 0; +} + + +#if 0 // Get number of variables referenced by the function range address size_t DWARFManager_GetNbLocalVariables(size_t Adr) { @@ -1388,6 +1754,21 @@ size_t DWARFManager_GetNbLocalVariables(size_t Adr) } +// Get Compilation Unit / global variables numbers +// Return number of variables +size_t DWARFManager_GetNbGlobalVariables(void) +{ + size_t NbVariables = 0; + + for (size_t i = 0; i < NbCU; i++) + { + NbVariables += PtrCU[i].NbVariables; + } + + return NbVariables; +} + + // Get local variable name based on his index (starting from 1) // Return name's pointer text found // Return NULL if not found @@ -1545,21 +1926,6 @@ char *DWARFManager_GetLocalVariableTypeName(size_t Adr, size_t Index) } -// Get Compilation Unit / global variables numbers -// Return number of variables -size_t DWARFManager_GetNbGlobalVariables(void) -{ - size_t NbVariables = 0; - - for (size_t i = 0; i < NbCU; i++) - { - NbVariables += PtrCU[i].NbVariables; - } - - return NbVariables; -} - - // Get global variable type name based on his index (starting from 1) // Return NULL if not found // May return NULL if there is not type linked to the variable's index @@ -1676,28 +2042,6 @@ size_t DWARFManager_GetGlobalVariableAdr(size_t Index) } -// Get global variable memory address based on his name -// Return 0 if not found, or will return the first occurence found -size_t DWARFManager_GetGlobalVariableAdrFromName(char *VariableName) -{ - for (size_t i = 0; i < NbCU; i++) - { - if (PtrCU[i].NbVariables) - { - for (size_t j = 0; j < PtrCU[i].NbVariables; j++) - { - if (!strcmp(PtrCU[i].PtrVariables[j].PtrName,VariableName)) - { - return PtrCU[i].PtrVariables[j].Addr; - } - } - } - } - - return 0; -} - - // Get global variable name based on his index (starting from 1) // Return name's pointer text found, or will return NULL if no variable can be found char *DWARFManager_GetGlobalVariableName(size_t Index) @@ -1719,6 +2063,7 @@ char *DWARFManager_GetGlobalVariableName(size_t Index) return NULL; } +#endif // Get text line from source based on address and his tag @@ -1787,9 +2132,16 @@ size_t DWARFManager_GetNumLineFromAdr(size_t Adr, size_t Tag) { for (size_t k = 0; k < PtrCU[i].PtrSubProgs[j].NbLinesSrc; k++) { - if ((PtrCU[i].PtrSubProgs[j].PtrLinesSrc[k].StartPC == Adr) && (!Tag || (PtrCU[i].PtrSubProgs[j].PtrLinesSrc[k].Tag == Tag))) + if (PtrCU[i].PtrSubProgs[j].PtrLinesSrc[k].StartPC <= Adr) { - return PtrCU[i].PtrSubProgs[j].PtrLinesSrc[k].NumLineSrc; + if ((PtrCU[i].PtrSubProgs[j].PtrLinesSrc[k].StartPC == Adr) && (!Tag || (PtrCU[i].PtrSubProgs[j].PtrLinesSrc[k].Tag == Tag))) + { + return PtrCU[i].PtrSubProgs[j].PtrLinesSrc[k].NumLineSrc; + } + } + else + { + return PtrCU[i].PtrSubProgs[j].PtrLinesSrc[k - 1].NumLineSrc; } } } @@ -1803,11 +2155,11 @@ size_t DWARFManager_GetNumLineFromAdr(size_t Adr, size_t Tag) } // Check if a used line is found with the address - for (size_t j = 0; j < PtrCU[i].NbLinesSrc; j++) + for (size_t j = 0; j < PtrCU[i].NbUsedLinesSrc; j++) { - if (PtrCU[i].PtrLinesSrc[j].StartPC == Adr) + if (PtrCU[i].PtrUsedLinesSrc[j].StartPC == Adr) { - return PtrCU[i].PtrLinesSrc[j].NumLineSrc; + return PtrCU[i].PtrUsedLinesSrc[j].NumLineSrc; } } } @@ -1839,6 +2191,57 @@ char *DWARFManager_GetFunctionName(size_t Adr) } +// Get number of lines of texts source list from source index +size_t DWARFManager_GetSrcNbListPtrFromIndex(size_t Index, bool Used) +{ + if (!Used) + { + return PtrCU[Index].NbLinesLoadSrc; + } + else + { + return PtrCU[Index].NbUsedLinesSrc; + } +} + + +// Get text source line number list pointer from source index +// Return NULL for the text source used list +size_t *DWARFManager_GetSrcNumLinesPtrFromIndex(size_t Index, bool Used) +{ + if (Used) + { + return PtrCU[Index].PtrUsedNumLines; + } + else + { + return NULL; + } +} + + +// Get text source list pointers from source index +// Return NULL for the text source used list +char **DWARFManager_GetSrcListPtrFromIndex(size_t Index, bool Used) +{ + if (!Used) + { + return PtrCU[Index].PtrLinesLoadSrc; + } + else + { + return PtrCU[Index].PtrUsedLinesLoadSrc; + } +} + + +// Get source language +size_t DWARFManager_GetSrcLanguageFromIndex(size_t Index) +{ + return PtrCU[Index].Language; +} + + // Get text line from source based on address and num line (starting from 1) // Return NULL if no text line has been found char *DWARFManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine) @@ -1898,15 +2301,22 @@ char *DWARFManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine) // Get number of source code filenames -size_t DWARFManager_GetNbFullSourceFilename(void) +size_t DWARFManager_GetNbSources(void) { return NbCU; } -// Get source code filename based on index (starting from 0) +// Get source code filename, including his directory, based on index (starting from 0) char *DWARFManager_GetNumFullSourceFilename(size_t Index) { return (PtrCU[Index].PtrFullFilename); } + +// Get source code filename based on index (starting from 0) +char *DWARFManager_GetNumSourceFilename(size_t Index) +{ + return (PtrCU[Index].PtrSourceFilename); +} + diff --git a/src/debugger/DWARFManager.h b/src/debugger/DWARFManager.h index d05e4ee..5766ea9 100644 --- a/src/debugger/DWARFManager.h +++ b/src/debugger/DWARFManager.h @@ -4,20 +4,32 @@ #define __DWARFMANAGER_H__ +// Definition for the DWARF status of each source file +typedef enum +{ + DWARFSTATUS_OK = 0x0, + DWARFSTATUS_OUTDATEDFILE = 0x1, + DWARFSTATUS_NOFILE = 0x2, + DWARFSTATUS_NOFILEINFO = 0x4, + DWARFSTATUS_UNKNOWN = 0xff +}DWARFstatus; + // Internal manager extern bool DWARFManager_Reset(void); extern bool DWARFManager_Close(void); extern void DWARFManager_Init(void); -extern int DWARFManager_ElfInit(Elf *ElfPtr); +extern int DWARFManager_ElfInit(Elf *ElfPtr, struct stat FileElfInfo); extern void DWARFManager_Set(size_t NbPathsInList, char **PtrListPaths); +extern size_t DWARFManager_GetNbSources(void); // General manager extern char *DWARFManager_GetFunctionName(size_t Adr); +extern size_t DWARFManager_GetSrcLanguageFromIndex(size_t Index); // Source text files manager -extern char *DWARFManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error); -extern size_t DWARFManager_GetNbFullSourceFilename(void); +extern char *DWARFManager_GetFullSourceFilenameFromAdr(size_t Adr, DWARFstatus *Status); extern char *DWARFManager_GetNumFullSourceFilename(size_t Index); +extern char *DWARFManager_GetNumSourceFilename(size_t Index); // Symbols manager extern char *DWARFManager_GetSymbolnameFromAdr(size_t Adr); @@ -27,19 +39,27 @@ extern size_t DWARFManager_GetNumLineFromAdr(size_t Adr, size_t Tag); extern char *DWARFManager_GetLineSrcFromAdr(size_t Adr, size_t Tag); extern char *DWARFManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine); extern char *DWARFManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine); +extern char **DWARFManager_GetSrcListPtrFromIndex(size_t Index, bool Used); +extern size_t DWARFManager_GetSrcNbListPtrFromIndex(size_t Index, bool Used); +extern size_t *DWARFManager_GetSrcNumLinesPtrFromIndex(size_t Index, bool Used); + +// Variables manager +extern size_t DWARFManager_GetNbVariables(size_t Adr); +extern void* DWARFManager_GetInfosVariable(size_t Adr, size_t Index); + +// Global variables manager +extern size_t DWARFManager_GetGlobalVariableAdrFromName(char *VariableName); +#if 0 // Global variables manager -extern size_t DWARFManager_GetNbGlobalVariables(void); extern char *DWARFManager_GetGlobalVariableName(size_t Index); extern size_t DWARFManager_GetGlobalVariableTypeEncoding(size_t Index); extern char *DWARFManager_GetGlobalVariableTypeName(size_t Index); extern size_t DWARFManager_GetGlobalVariableTypeByteSize(size_t Index); extern size_t DWARFManager_GetGlobalVariableAdr(size_t Index); -extern size_t DWARFManager_GetGlobalVariableAdrFromName(char *VariableName); extern size_t DWARFManager_GetGlobalVariableTypeTag(size_t Index); // Local variables manager -extern size_t DWARFManager_GetNbLocalVariables(size_t Adr); extern char *DWARFManager_GetLocalVariableName(size_t Adr, size_t Index); extern size_t DWARFManager_GetLocalVariableTypeEncoding(size_t Adr, size_t Index); extern char *DWARFManager_GetLocalVariableTypeName(size_t Adr, size_t Index); @@ -47,6 +67,7 @@ extern size_t DWARFManager_GetLocalVariableTypeByteSize(size_t Adr, size_t Index extern size_t DWARFManager_GetLocalVariableTypeTag(size_t Adr, size_t Index); extern size_t DWARFManager_GetLocalVariableOp(size_t Adr, size_t Index); extern int DWARFManager_GetLocalVariableOffset(size_t Adr, size_t Index); +#endif #endif // __DWARFMANAGER_H__ diff --git a/src/debugger/DasmWin.h b/src/debugger/DasmWin.h index a855d90..02c75e0 100644 --- a/src/debugger/DasmWin.h +++ b/src/debugger/DasmWin.h @@ -11,7 +11,7 @@ #ifndef __DASMWIN_H__ #define __DASMWIN_H__ -#include +#include #include //class DasmWindow: public QMdiSubWindow diff --git a/src/debugger/ELFManager.cpp b/src/debugger/ELFManager.cpp index 3624653..d180138 100644 --- a/src/debugger/ELFManager.cpp +++ b/src/debugger/ELFManager.cpp @@ -4,22 +4,27 @@ // by Jean-Paul Mari // // JPM = Jean-Paul Mari +// RG = Richard Goedeken // // WHO WHEN WHAT // --- ---------- ------------------------------------------------------------ // JPM Jan./2016 Created this file and added ELF format support // JPM 07/13/2017 ELF DWARF format support improvement // JPM 10/20/2018 Added function name support from ELF structure +// JPM 03/13/2020 Added ELF & DWARF .debug* types +// RG Jan./2021 Linux build fixes // #include #include -#include "libelf/libelf.h" -#include "libelf/gelf.h" +#include +#include +#include "libelf.h" +#include "gelf.h" #include "libdwarf.h" #include "log.h" #include "ELFManager.h" -#include "DwarfManager.h" +#include "DWARFManager.h" //#define LOG_SUPPORT // Support log @@ -48,18 +53,23 @@ ELFSectionType ELFTabSectionType[] = { { ".data", ELF_data_TYPE }, { ".bss", ELF_bss_TYPE }, { ".heap", ELF_heap_TYPE }, + { ".debug", ELF_debug_TYPE }, + { ".comment", ELF_comment_TYPE }, + { ".shstrtab", ELF_shstrtab_TYPE }, + { ".symtab", ELF_symtab_TYPE }, + { ".strtab", ELF_strtab_TYPE }, + { ".debug_abbrev", ELF_debug_abbrev_TYPE }, { ".debug_aranges", ELF_debug_aranges_TYPE }, + { ".debug_frame", ELF_debug_frame_TYPE }, { ".debug_info", ELF_debug_info_TYPE }, - { ".debug_abbrev", ELF_debug_abbrev_TYPE }, { ".debug_line", ELF_debug_line_TYPE }, - { ".debug_frame", ELF_debug_frame_TYPE }, - { ".debug_str", ELF_debug_str_TYPE }, { ".debug_loc", ELF_debug_loc_TYPE }, + { ".debug_macinfo", ELF_debug_macinfo_TYPE }, + { ".debug_pubnames", ELF_debug_pubnames_TYPE }, + { ".debug_pubtypes", ELF_debug_pubtypes_TYPE }, { ".debug_ranges", ELF_debug_ranges_TYPE }, - { ".comment", ELF_comment_TYPE }, - { ".shstrtab", ELF_shstrtab_TYPE }, - { ".symtab", ELF_symtab_TYPE }, - { ".strtab", ELF_strtab_TYPE } + { ".debug_str", ELF_debug_str_TYPE }, + { ".debug_types", ELF_debug_types_TYPE } }; @@ -139,9 +149,9 @@ void ELFManager_Init(void) // ELF manager Dwarf Initialisation -bool ELFManager_DwarfInit(Elf *PtrElfMem) +bool ELFManager_DwarfInit(Elf *PtrElfMem, struct stat FileElfInfo) { - return (ElfDwarf = (DWARFManager_ElfInit(PtrElfMem) == DW_DLV_OK) ? true : false); + return (ElfDwarf = (DWARFManager_ElfInit(PtrElfMem, FileElfInfo) == DW_DLV_OK) ? true : false); } diff --git a/src/debugger/ELFManager.h b/src/debugger/ELFManager.h index 7b03bfc..63ed0cb 100644 --- a/src/debugger/ELFManager.h +++ b/src/debugger/ELFManager.h @@ -12,25 +12,30 @@ typedef enum { ELF_data_TYPE, ELF_bss_TYPE, ELF_heap_TYPE, - ELF_debug_aranges_TYPE, - ELF_debug_info_TYPE, - ELF_debug_abbrev_TYPE, - ELF_debug_line_TYPE, - ELF_debug_frame_TYPE, - ELF_debug_str_TYPE, - ELF_debug_loc_TYPE, - ELF_debug_ranges_TYPE, + ELF_debug_TYPE, ELF_comment_TYPE, ELF_shstrtab_TYPE, ELF_symtab_TYPE, ELF_strtab_TYPE, + ELF_debug_abbrev_TYPE, // Abbreviations used in the .debug_info section + ELF_debug_aranges_TYPE, // Lookup table for mapping addresses to compilation units + ELF_debug_frame_TYPE, // Call frame information + ELF_debug_info_TYPE, // Core DWARF information section + ELF_debug_line_TYPE, // Line number information + ELF_debug_loc_TYPE, // Location lists used in the DW_AT_location attributes + ELF_debug_macinfo_TYPE, // Macro information + ELF_debug_pubnames_TYPE, // Lookup table for mapping object and function names to compilation units + ELF_debug_pubtypes_TYPE, // Lookup table for mapping type names to compilation units + ELF_debug_ranges_TYPE, // Address ranges used in the DW_AT_ranges attributes + ELF_debug_str_TYPE, // String table used in .debug_info + ELF_debug_types_TYPE, // Type descriptions ELF_END_TYPE }ELFSECTIONTYPE; // Internal manager extern void ELFManager_Init(void); -extern bool ELFManager_DwarfInit(Elf *PtrElfMem); +extern bool ELFManager_DwarfInit(Elf *PtrElfMem, struct stat FileElfInfo); extern Elf *ELFManager_MemOpen(char *PtrELFExe, size_t Size); extern int ELFManager_MemEnd(void); extern void ELFManager_Reset(void); diff --git a/src/debugger/FilesrcListWin.cpp b/src/debugger/FilesrcListWin.cpp index ab0fb9c..5017db0 100644 --- a/src/debugger/FilesrcListWin.cpp +++ b/src/debugger/FilesrcListWin.cpp @@ -104,7 +104,7 @@ size_t FilesrcListWindow::UpdateInfos(void) { size_t Nbr, i; - Nbr = DBGManager_GetNbFullSourceFilename(); + Nbr = DBGManager_GetNbSources(); for (i = 0; i < Nbr; i++) { diff --git a/src/debugger/FilesrcListWin.h b/src/debugger/FilesrcListWin.h index 7ddc938..7b34818 100644 --- a/src/debugger/FilesrcListWin.h +++ b/src/debugger/FilesrcListWin.h @@ -7,7 +7,7 @@ #ifndef __FILESRCLISTWIN_H__ #define __FILESRCLISTWIN_H__ -#include +#include #include // Error code definitions diff --git a/src/debugger/GPUDasmWin.h b/src/debugger/GPUDasmWin.h index e0d8b01..a698cfd 100644 --- a/src/debugger/GPUDasmWin.h +++ b/src/debugger/GPUDasmWin.h @@ -11,7 +11,7 @@ #ifndef __GPUDASMBROWSER_H__ #define __GPUDASMBROWSER_H__ -#include +#include #include class GPUDasmWindow: public QWidget diff --git a/src/debugger/HWLABELManager.cpp b/src/debugger/HWLABELManager.cpp index ac69f90..1150d88 100644 --- a/src/debugger/HWLABELManager.cpp +++ b/src/debugger/HWLABELManager.cpp @@ -1,20 +1,22 @@ // -// ELFManager.cpp: HW Label manager +// HWLABELManager.cpp: HW Label manager // // by Jean-Paul Mari // // JPM = Jean-Paul Mari +// RG = Richard Goedeken // // WHO WHEN WHAT // --- ---------- ------------------------------------------------------------ // JPM 02/08/2017 Created this file // JPM 02/08/2017 HW Label support +// RG Jan./2021 Linux build fixes // #include #include -#include "libelf/libelf.h" -#include "libelf/gelf.h" +#include "libelf.h" +#include "gelf.h" #include "log.h" #include "ELFManager.h" diff --git a/src/debugger/NewFnctBreakpointWin.cpp b/src/debugger/NewFnctBreakpointWin.cpp index a962ded..5bfc8ba 100644 --- a/src/debugger/NewFnctBreakpointWin.cpp +++ b/src/debugger/NewFnctBreakpointWin.cpp @@ -8,6 +8,7 @@ // Who When What // --- ---------- ----------------------------------------------------------- // JPM 10/19/2018 Created this file +// JPM March/2021 Breakpoint list window refresh // // STILL TO DO: @@ -40,6 +41,7 @@ add(new QPushButton(tr("Add"))) setLayout(layout); connect(add, SIGNAL(clicked()), this, SLOT(AddBreakpointAddress())); + connect(address, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(SelectBreakpointAddress())); } @@ -60,6 +62,19 @@ void NewFnctBreakpointWindow::keyPressEvent(QKeyEvent * e) } +// +void NewFnctBreakpointWindow::SetFnctBreakpointWin(BreakpointsWindow* BpW) +{ + BPWin = BpW; +} + + +void NewFnctBreakpointWindow::SelectBreakpointAddress(void) +{ + address->setStyleSheet("color: black"); +} + + // Add a breakpoint to the address // Address can be an hexa, decimal or a symbol name void NewFnctBreakpointWindow::AddBreakpointAddress(void) @@ -71,7 +86,6 @@ void NewFnctBreakpointWindow::AddBreakpointAddress(void) S_BrkInfo Brk; memset(&Brk, 0, sizeof(Brk)); - QPalette p = address->palette(); newAddress = address->text(); if ((len = newAddress.size())) @@ -97,7 +111,7 @@ void NewFnctBreakpointWindow::AddBreakpointAddress(void) { // Set information based on address Brk.Name = DBGManager_GetSymbolNameFromAdr(adr); - Brk.Filename = DBGManager_GetFullSourceFilenameFromAdr(adr, &ok); + Brk.Filename = DBGManager_GetFullSourceFilenameFromAdr(adr, NULL); Brk.NumLine = DBGManager_GetNumLineFromAdr(adr, DBG_TAG_subprogram); Brk.LineSrc = DBGManager_GetLineSrcFromAdrNumLine(adr, Brk.NumLine); @@ -105,21 +119,28 @@ void NewFnctBreakpointWindow::AddBreakpointAddress(void) Brk.Adr = adr; // Add the breakpoint - if (m68k_brk_add(&Brk)) + if (!m68k_brk_add(&Brk)) { - p.setColor(QPalette::Text, Qt::black); + address->setStyleSheet("color: green"); } else { - p.setColor(QPalette::Text, Qt::darkYellow); + address->setText(""); } } else { // Address is not valid - p.setColor(QPalette::Text, Qt::red); + address->setStyleSheet("color: red"); } - address->setPalette(p); + // update the breakpoint functions window + BPWin->RefreshContents(); } } + + +// +NewFnctBreakpointWindow::~NewFnctBreakpointWindow() +{ +} diff --git a/src/debugger/NewFnctBreakpointWin.h b/src/debugger/NewFnctBreakpointWin.h index eb6d3cc..ab79184 100644 --- a/src/debugger/NewFnctBreakpointWin.h +++ b/src/debugger/NewFnctBreakpointWin.h @@ -7,8 +7,9 @@ #ifndef __NEWFNCTBREAKPOINTWIN_H__ #define __NEWFNCTBREAKPOINTWIN_H__ -#include +#include #include +#include "debugger/BreakpointsWin.h" class NewFnctBreakpointWindow: public QWidget { @@ -16,6 +17,8 @@ class NewFnctBreakpointWindow: public QWidget public: NewFnctBreakpointWindow(QWidget * parent = 0); + void SetFnctBreakpointWin(BreakpointsWindow* BpW); + ~NewFnctBreakpointWindow(); public slots: @@ -24,11 +27,13 @@ class NewFnctBreakpointWindow: public QWidget protected slots: void AddBreakpointAddress(void); + void SelectBreakpointAddress(void); private: QVBoxLayout *layout; QLineEdit *address; QPushButton *add; + BreakpointsWindow* BPWin; }; #endif // __NEWFNCTBREAKPOINTWIN_H__ diff --git a/src/debugger/SaveDumpAsWin.h b/src/debugger/SaveDumpAsWin.h index 3a755ed..2b12c54 100644 --- a/src/debugger/SaveDumpAsWin.h +++ b/src/debugger/SaveDumpAsWin.h @@ -7,7 +7,7 @@ #ifndef __SAVEDUMPASWIN_H__ #define __SAVEDUMPASWIN_H__ -#include +#include #include class SaveDumpAsWindow : public QWidget diff --git a/src/debugger/SourceCWin.cpp b/src/debugger/SourceCWin.cpp new file mode 100644 index 0000000..a69edc2 --- /dev/null +++ b/src/debugger/SourceCWin.cpp @@ -0,0 +1,195 @@ +// +// SourceCWin.cpp - Source C tracing window +// +// by Jean-Paul Mari +// +// JPM = Jean-Paul Mari +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JPM 08/23/2019 Created this file + +// STILL TO DO: +// + +#include +#include "DBGManager.h" +#include "debugger/SourceCWin.h" +#include "debugger/SourcesWin.h" +//#include "m68000/m68kinterface.h" + + +// +SourceCWindow::SourceCWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog), +layout(new QVBoxLayout), +FileIndex(0), +CurrentNumLineSrc(0), +#ifdef SC_LAYOUTTEXTS +text(new QTextBrowser) +#else +TableView(new QTableView), +model(new QStandardItemModel) +#endif +{ + // Set font + QFont fixedFont("Lucida Console", 8, QFont::Normal); + fixedFont.setStyleHint(QFont::Monospace); //TypeWriter + fixedFont.setLetterSpacing(QFont::PercentageSpacing, 100); + + // Set text in layout +#ifdef SC_LAYOUTTEXTS + text->setFont(fixedFont); + layout->addWidget(text); +#else + // Set the new layout with proper identation and readibility + model->setColumnCount(3); + model->setHeaderData(0, Qt::Horizontal, QObject::tr("LineStatus")); + model->setHeaderData(1, Qt::Horizontal, QObject::tr("LineNumber")); + model->setHeaderData(2, Qt::Horizontal, QObject::tr("LineSrc")); + // Information table + TableView->setModel(model); + TableView->setEditTriggers(QAbstractItemView::NoEditTriggers); + TableView->setSelectionMode(QAbstractItemView::NoSelection); + TableView->setShowGrid(false); + TableView->horizontalHeader()->hide(); + TableView->verticalHeader()->hide(); + TableView->setFont(fixedFont); + layout->addWidget(TableView); +#endif + + // Set layout + setLayout(layout); +} + + +// +void SourceCWindow::SetCursorTrace(int NumLineSrc, bool Remove) +{ + // Check valid line number + if (NumLineSrc && (NbLinesText[0] >= NumLineSrc)) + { + // Set the trace cursor + if (!Remove) + { + CurrentNumLineSrc = NumLineSrc; +#ifndef SC_LAYOUTTEXTS + model->item((NumLineSrc - 1), 0)->setText(">"); + model->item((NumLineSrc - 1), 0)->setBackground(QColor(0xff, 0xfa, 0xcd)); + model->item((NumLineSrc - 1), 1)->setBackground(QColor(0xff, 0xfa, 0xcd)); + model->item((NumLineSrc - 1), 2)->setBackground(QColor(0xff, 0xfa, 0xcd)); +#endif + } + else + { + // Remove the trace cursor +#ifndef SC_LAYOUTTEXTS + model->item((NumLineSrc - 1), 0)->setText(" "); + model->item((NumLineSrc - 1), 0)->setBackground(QColor(173, 216, 230)); + model->item((NumLineSrc - 1), 1)->setBackground(QColor(255, 255, 255)); + model->item((NumLineSrc - 1), 2)->setBackground(QColor(255, 255, 255)); +#endif + } + } +} + + +// +void SourceCWindow::RefreshContents(void) +{ + if (isVisible()) + { + // Get the scroll bar information + int MaxSlider = TableView->verticalScrollBar()->maximum(); // Get the slider maximum position + int DeltaSlider = (int)NbLinesText[0] - MaxSlider; // Number of items displayed in the scroll bar slider + //int PosSlider = TableView->verticalScrollBar()->sliderPosition(); // Slider position + + // Check visibility in the scroll bar + //if ((CurrentNumLineSrc > PosSlider) && ((CurrentNumLineSrc + (DeltaSlider / 2)) < MaxSlider)) + { + // Set the scroll bar position + TableView->verticalScrollBar()->setSliderPosition(CurrentNumLineSrc - (DeltaSlider / 2) - 1); + } + } +} + + +// Fill the tab with the source text +void SourceCWindow::FillTab(size_t index, char **TextLines, size_t NbLines[], size_t *NumLinesUsed) +{ + int i, j, k; +#ifdef SC_LAYOUTTEXTS + QString s; + char string[1024]; +#endif + + // Save information + FileIndex = index; + for (i = 0; i < 2; i++) + { + NbLinesText[i] = NbLines[i]; + } + PtrTextLines = TextLines; + PtrNumLinesUsed = NumLinesUsed; + + // Set columns +#ifndef SC_LAYOUTTEXTS + model->insertRow((int)NbLinesText[0]); +#endif + + // Set text lines + for (i = j = 0; i < NbLinesText[0]; i++, j = 0) + { + // prepare space for the line status +#ifndef SC_LAYOUTTEXTS + model->setItem(i, 0, new QStandardItem(QString("%1").arg(" "))); + model->item(i, 0)->setTextAlignment(Qt::AlignCenter); + model->item(i, 0)->setBackground(QColor(173, 216, 230)); +#endif + // display line number +#ifdef SC_LAYOUTTEXTS + sprintf(string, "| %5u | ", (i + 1)); + s += QString(string); +#else + model->setItem(i, 1, new QStandardItem(QString(" %1 ").arg((i + 1)))); + model->item(i, 1)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); + model->item(i, 1)->setForeground(QColor(0, 0x64, 0)); +#endif + // display source code line +#ifndef SC_LAYOUTTEXTS + model->setItem(i, 2, new QStandardItem(QString("%1").arg(PtrTextLines[i]))); + model->item(i, 2)->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); +#endif + // Check line used by code + while ((j < NbLinesText[1]) && !(k = ((PtrNumLinesUsed[j++] != i) - 1))); + if (k) + { + // Line is used by code +#ifdef SC_LAYOUTTEXTS + sprintf(string, "%s", PtrTextLines[i]); +#else + model->item(i, 2)->setForeground(QColor(0, 0, 0)); +#endif + } + else + { + // Line is not used by code (such as comments) +#ifdef SC_LAYOUTTEXTS + sprintf(string, "%s", PtrTextLines[i]); +#else + model->item(i, 2)->setForeground(QColor(0xc8, 0xc8, 0xc8)); +#endif + } +#ifdef SC_LAYOUTTEXTS + s += QString(string); + s += QString("
    "); +#endif + } + + // Display text +#ifdef SC_LAYOUTTEXTS + text->setText(s); +#else + TableView->resizeColumnsToContents(); + TableView->resizeRowsToContents(); +#endif +} diff --git a/src/debugger/SourceCWin.h b/src/debugger/SourceCWin.h new file mode 100644 index 0000000..1b6371e --- /dev/null +++ b/src/debugger/SourceCWin.h @@ -0,0 +1,49 @@ +// +// SourcesWin.h: Source C tracing window +// +// JPM = Jean-Paul Mari +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JPM 08/23/2019 Created this file +// + +#ifndef __SOURCECWIN_H__ +#define __SOURCECWIN_H__ + +//#define SC_LAYOUTTEXTS // Use a layout with just texts + +#include +//#include + + +class SourceCWindow : public QWidget +{ + Q_OBJECT + +public: + SourceCWindow(QWidget * parent = 0); + void FillTab(size_t index, char **TextLines, size_t NbLines[], size_t *NumLinesUsed); + void SetCursorTrace(int NumLineSrc, bool Remove); + +public slots: + void RefreshContents(void); + +protected: + +private: + size_t FileIndex; + int CurrentNumLineSrc; + QVBoxLayout *layout; +#ifdef SC_LAYOUTTEXTS + QTextBrowser *text; +#else + QTableView *TableView; + QStandardItemModel *model; +#endif + char **PtrTextLines; + size_t NbLinesText[2]; + size_t *PtrNumLinesUsed; +}; + +#endif diff --git a/src/debugger/SourcesWin.cpp b/src/debugger/SourcesWin.cpp new file mode 100644 index 0000000..5b29fcf --- /dev/null +++ b/src/debugger/SourcesWin.cpp @@ -0,0 +1,274 @@ +// +// SourcesWin.cpp - Sources tracing window +// +// by Jean-Paul Mari +// +// JPM = Jean-Paul Mari +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JPM 08/23/2019 Created this file +// JPM Apr./2021 Fixed potential crash with the tabs reset + +// STILL TO DO: +// Use the CloseTab signal's value instead to close the current tab +// + +#include +#include +#include "DBGManager.h" +#include "debugger/SourceCWin.h" +#include "debugger/SourcesWin.h" +#include "m68000/m68kinterface.h" + + +// +SourcesWindow::SourcesWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog), +layout(new QVBoxLayout), +sourcestabWidget(new QTabWidget), +sourcesinfostab(0), +NbSourcesInfos(0), +CurrentTab(0), +OldCurrentTab(0), +OldCurrentNumLineSrc(0), +indexErrorTab(-1), +sourceErrorTab(0) +{ + // prepare layout + sourcestabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + sourcestabWidget->setTabsClosable(true); + layout->addWidget(sourcestabWidget); + + // set layout + setLayout(layout); + + // connect the signals + connect(sourcestabWidget, SIGNAL(currentChanged(const int)), this, SLOT(SelectTab(const int))); + connect(sourcestabWidget, SIGNAL(tabCloseRequested(const int)), this, SLOT(CloseTab(const int))); +} + + +// Close #tab +void SourcesWindow::CloseTab(const int) +{ + CloseCurrentTab(); +} + + +// Select tab +void SourcesWindow::SelectTab(const int) +{ +#if 0 + size_t i = 0; + QString t = sourcestabWidget->tabText(index); + while ((i < NbSourcesInfos) && strcmp(sourcesinfostab[i++].Filename, t.toLatin1().data())); + + if ((i != NbSourcesInfos) && (sourcesinfostab[i - 1].IndexTab != -1) && (CurrentTab == (i - 1))) + { + sourcesinfostab[(i - 1)].sourceCtab->RefreshContents(); + } +#endif +} + + +// Sources initialisation +// Prepare tabs for every available source code file +void SourcesWindow::Init(void) +{ + size_t i, j; + char *Ptr, *Ptr1; + + // get number of sources + NbSourcesInfos = DBGManager_GetNbSources(); + if (NbSourcesInfos) + { + // alloc structure for the source informations + sourcesinfostab = (SourcesInfos *)calloc(NbSourcesInfos, sizeof(SourcesInfos)); + + // fill sources information + for (i = 0; i < NbSourcesInfos; i++) + { + // get source filename without misguiding information + Ptr = DBGManager_GetNumSourceFilename(i); + Ptr1 = sourcesinfostab[i].Filename = (char *)malloc(strlen(Ptr) + 1); + while (((*Ptr == '.') || ((*Ptr == '/') || (*Ptr == '\\'))) && Ptr++); + strcpy(Ptr1, Ptr); + // get texts dedicated information + for (j = 0; j < 2; j++) + { + sourcesinfostab[i].NbLinesText[j] = DBGManager_GetSrcNbListPtrFromIndex(i, j); + } + sourcesinfostab[i].NumLinesUsed = DBGManager_GetSrcNumLinesPtrFromIndex(i, true); + sourcesinfostab[i].SourceText = DBGManager_GetSrcListPtrFromIndex(i, false); + // get remaining information + sourcesinfostab[i].Language = DBGManager_GetSrcLanguageFromIndex(i); + sourcesinfostab[i].IndexTab = -1; + } + } + else + { + // no source files exist + sourcesinfostab = NULL; + } +} + + +// Get the tracing status +bool SourcesWindow::GetTraceStatus(void) +{ + if (NbSourcesInfos) + { + switch (sourcesinfostab[CurrentTab].Language) + { + case DBG_LANG_VASM_Assembler: + break; + + default: + return true; + break; + } + } + + return false; +} + + +// Check if the line's number has changed across the tabs +// Return true in case of the line is different, otherwise return false +bool SourcesWindow::CheckChangeLine(void) +{ + size_t NumLine; + + // get the line number based on the current M68K PC address + if (NumLine = DBGManager_GetNumLineFromAdr(m68k_get_reg(NULL, M68K_REG_PC), DBG_NO_TAG)) + { + if (OldCurrentTab == CurrentTab) + { + if (OldCurrentNumLineSrc != NumLine) + { + OldCurrentNumLineSrc = NumLine; + return true; + } + } + else + { + OldCurrentTab = CurrentTab; + OldCurrentNumLineSrc = 0; + } + } + + return false; +} + + +// Refresh tabs +// Open a new tab for a file source code +// Set a unique tab for unavailable source code +void SourcesWindow::RefreshContents(void) +{ + size_t m68kPC = m68k_get_reg(NULL, M68K_REG_PC); + int index = 0; + size_t i; + DBGstatus Status; + char *Filename; + + // check valid M68K PC address + if (m68kPC && NbSourcesInfos) + { + // get source filename pointed by PC address + Filename = DBGManager_GetFullSourceFilenameFromAdr(m68kPC, &Status); + if (!Status && Filename) + { + // look for a new tab + for (i = 0; i < NbSourcesInfos; i++, !index) + { + if (sourcesinfostab[i].Filename) + { + if (strstr(Filename, sourcesinfostab[i].Filename)) + { + // open a new tab for a source code + if (sourcesinfostab[i].IndexTab == -1) + { + sourcesinfostab[i].IndexTab = index = sourcestabWidget->addTab(sourcesinfostab[i].sourceCtab = new(SourceCWindow), tr(sourcesinfostab[i].Filename)); + sourcesinfostab[i].sourceCtab->FillTab(i, sourcesinfostab[i].SourceText, sourcesinfostab[i].NbLinesText, sourcesinfostab[i].NumLinesUsed); + } + + sourcestabWidget->setCurrentIndex(sourcesinfostab[i].IndexTab); + sourcesinfostab[CurrentTab].sourceCtab->SetCursorTrace(sourcesinfostab[CurrentTab].CurrentNumLineSrc, true); + sourcesinfostab[i].sourceCtab->SetCursorTrace(sourcesinfostab[i].CurrentNumLineSrc = (int)DBGManager_GetNumLineFromAdr(m68kPC, DBG_NO_TAG), false); + sourcesinfostab[i].sourceCtab->RefreshContents(); + CurrentTab = i; + } + } + } + } + else + { + // source file doesn't exist + if (indexErrorTab == -1) + { + indexErrorTab = sourcestabWidget->addTab(sourceErrorTab = new(SourceCWindow), tr("Source file not available")); + //sourceErrorTab->hide(); + } + sourcestabWidget->setCurrentIndex(indexErrorTab); + } + } +} + + +// Close / Remove current tab +void SourcesWindow::CloseCurrentTab(void) +{ + size_t i = 0; + int Index; + QString t = sourcestabWidget->tabText((Index = sourcestabWidget->currentIndex())); + + // check error tab presence + if (indexErrorTab == Index) + { + // close the error tab + indexErrorTab = -1; + } + else + { + // close source code text tab + while ((i < NbSourcesInfos) && strcmp(sourcesinfostab[i++].Filename, t.toLatin1().data())); + sourcesinfostab[(i - 1)].IndexTab = -1; + } + + // remove the tab + sourcestabWidget->removeTab(Index); +} + + +// Handle keyboard +void SourcesWindow::keyPressEvent(QKeyEvent * e) +{ + // close/remove the current tab + if (e->key() == Qt::Key_Escape) + { + CloseCurrentTab(); + } +} + + +// Reset all source files tab +void SourcesWindow::Reset(void) +{ + // clear the tabs + sourcestabWidget->clear(); + + // clear tab information + while (NbSourcesInfos) + { + free(sourcesinfostab[--NbSourcesInfos].Filename); + } + free(sourcesinfostab); +} + + +// +void SourcesWindow::Close(void) +{ + Reset(); +} diff --git a/src/debugger/SourcesWin.h b/src/debugger/SourcesWin.h new file mode 100644 index 0000000..235d2c9 --- /dev/null +++ b/src/debugger/SourcesWin.h @@ -0,0 +1,65 @@ +// +// SourcesWin.h: Sources tracing window +// +// JPM = Jean-Paul Mari +// +// Who When What +// --- ---------- ------------------------------------------------------------- +// JPM 08/23/2019 Created this file +// + +#ifndef __SOURCESWIN_H__ +#define __SOURCESWIN_H__ + +#include +//#include + +class SourceCWindow; + +class SourcesWindow : public QWidget +{ + Q_OBJECT + + typedef struct S_SOURCESINFOS + { + int IndexTab; + char *Filename; + char **SourceText; + size_t NbLinesText[2]; + size_t *NumLinesUsed; + size_t Language; + SourceCWindow *sourceCtab; + int CurrentNumLineSrc; + } + SourcesInfos; + +public: + SourcesWindow(QWidget * parent = 0); + void Init(void); + void Close(void); + void Reset(void); + bool GetTraceStatus(void); + bool CheckChangeLine(void); + +public slots: + void RefreshContents(void); + void SelectTab(const int); + void CloseTab(const int); + +protected: + void keyPressEvent(QKeyEvent * e); + void CloseCurrentTab(void); + +private: + QVBoxLayout *layout; + QTabWidget *sourcestabWidget; + SourcesInfos *sourcesinfostab; + size_t NbSourcesInfos; + size_t CurrentTab; + size_t OldCurrentNumLineSrc; + size_t OldCurrentTab; + int indexErrorTab; + SourceCWindow *sourceErrorTab; +}; + +#endif // __SOURCESWIN_H__ diff --git a/src/debugger/VideoWin.cpp b/src/debugger/VideoWin.cpp index b1120f6..e2b4def 100644 --- a/src/debugger/VideoWin.cpp +++ b/src/debugger/VideoWin.cpp @@ -1,5 +1,5 @@ // -// VideoWin.cpp: Windows video display +// VideoWin.cpp: Video output window // // by Jean-Paul Mari // @@ -8,16 +8,25 @@ // WHO WHEN WHAT // --- ---------- ------------------------------------------------------------ // JPM 06/23/2016 Created this file +// JPM April/2021 Added video output display in the window #include "VideoWin.h" +#include "tom.h" +#include "settings.h" //#include "mainwin.h" // -VideoOutputWindow::VideoOutputWindow(QWidget * parent/*= 0*/) : QWidget(parent), -layout(new QHBoxLayout), text(new QLabel) +VideoOutputWindow::VideoOutputWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog), +layout(new QVBoxLayout), +hbox1(new QHBoxLayout) +//gl(new GLWidget) +//layout(0), +//hbox1(0) +//statusbar(new QStatusBar), +//text(new QTextBrowser) { - setWindowTitle(tr("Video windows")); + setWindowTitle(tr("Output Video")); //setCentralWidget(videoWidget); // QFont fixedFont("Lucida Console", 8, QFont::Normal); @@ -25,35 +34,144 @@ layout(new QHBoxLayout), text(new QLabel) // fixedFont.setStyleHint(QFont::TypeWriter); // text->setFont(fixedFont); // setLayout(layout); +#if 0 + QHBoxLayout * hbox1 = new QHBoxLayout; + hbox1->addWidget(gl); + layout->addLayout(hbox1); -// layout->addWidget(text); + gl->setFixedSize(VIRTUAL_SCREEN_WIDTH, (vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL)); +#endif + //layout->addWidget(statusbar); + //statusbar->setStyleSheet("background-color: lightgreen; font: bold"); + //layout->addWidget(text); + //layout->addWidget(gl); - QWidget* myWidget = new QWidget; - myWidget->setStyleSheet("QWidget{ background: red; }"); + //QWidget* myWidget = new QWidget; + //myWidget->setStyleSheet("QWidget{ background: red; }"); - GLWidget *glWidget = new GLWidget; + //GLWidget *glWidget = new GLWidget; //QHBoxLayout *mainLayout = new QHBoxLayout; - layout->addWidget(myWidget); - layout->setContentsMargins(100, 100, 100, 100); - setLayout(layout); + //layout->addWidget(myWidget); + //layout->setContentsMargins(100, 100, 100, 100); + //setLayout(layout); + + //hbox1->addWidget(gl); + //layout->addLayout(hbox1); + //setLayout(layout); +} + + +// +void VideoOutputWindow::SetupVideo(GLWidget *Lt) +{ + if (isVisible()) + { + //layout = new QVBoxLayout; + //hbox1 = new QHBoxLayout; + // QHBoxLayout * hbox1 = new QHBoxLayout; + //Lt->setFixedSize(VIRTUAL_SCREEN_WIDTH, (vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL)); + //QHBoxLayout * hbox1 = new QHBoxLayout; + hbox1->addWidget(Lt); + //hbox1->replaceWidget(gl, Lt); + layout->addLayout(hbox1); + setLayout(layout); + //layout->addLayout(hbox1); + //setLayout(layout); + //layout->addLayout(hbox1); + //setLayout(layout); + //show(); + //resize(100, 100); + //adjustSize(); + glViewport(0, 0, (VIRTUAL_SCREEN_WIDTH * 2), (vjs.hardwareTypeNTSC ? (VIRTUAL_SCREEN_HEIGHT_NTSC * 2) : (VIRTUAL_SCREEN_HEIGHT_PAL * 2))); + //adjustSize(); + //resize(minimumWidth(), minimumHeight()); + } } // Refresh / Display the window contents void VideoOutputWindow::RefreshContents(GLWidget *Lt) { - layout->addWidget(Lt); - setLayout(layout); -// QString memDump; +#if 0 + if (isVisible()) + { + for (uint32_t i = 0; i < (uint32_t)(Lt->textureWidth * Lt->rasterHeight); i++) + { + uint32_t pixel = Lt->buffer[i]; + uint8_t r = (pixel >> 24) & 0xFF, g = (pixel >> 16) & 0xFF, b = (pixel >> 8) & 0xFF; + pixel = ((r + g + b) / 3) & 0x00FF; + gl->buffer[i] = 0x000000FF | (pixel << 16) | (pixel << 8); + } + + gl->updateGL(); + //adjustSize(); + } +#endif +#if 0 + if (isVisible()) + { + + QHBoxLayout * hbox1 = new QHBoxLayout; + hbox1->addWidget(Lt); + layout->addLayout(hbox1); + setLayout(layout); + + //gl->setFixedSize(VIRTUAL_SCREEN_WIDTH, (vjs.hardwareTypeNTSC ? VIRTUAL_SCREEN_HEIGHT_NTSC : VIRTUAL_SCREEN_HEIGHT_PAL)); -// memDump += QString("Test"); +#if 0 + for (uint32_t y = 0; y < Lt->rasterHeight; y++) + { + if (vjs.hardwareTypeNTSC) + { + memcpy(gl->buffer + (y * gl->textureWidth), Lt + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t)); + } + else + { + memcpy(gl->buffer + (y * gl->textureWidth), Lt + (y * VIRTUAL_SCREEN_WIDTH), VIRTUAL_SCREEN_WIDTH * sizeof(uint32_t)); + } + } +#endif +#if 0 + for (uint32_t i = 0; i < (uint32_t)(Lt->textureWidth * Lt->rasterHeight); i++) + { + uint32_t pixel = Lt->buffer[i]; + uint8_t r = (pixel >> 24) & 0xFF, g = (pixel >> 16) & 0xFF, b = (pixel >> 8) & 0xFF; + pixel = ((r + g + b) / 3) & 0x00FF; + gl->buffer[i] = 0x000000FF | (pixel << 16) | (pixel << 8); + } +#else + //gl->updateGL(); -// text->clear(); -// text->setText(memDump); + //layout->addWidget(Lt); + //setLayout(layout); + // QString memDump; + + // memDump += QString("Test"); + + // text->clear(); + // text->setText(memDump); + + //adjustSize(); +#endif + } +#endif +} + + +// +void VideoOutputWindow::keyPressEvent(QKeyEvent * e) +{ + if (e->key() == Qt::Key_Escape) + { + hide(); + } } // VideoOutputWindow::~VideoOutputWindow() { + //delete gl; + delete hbox1; + delete layout; } diff --git a/src/debugger/VideoWin.h b/src/debugger/VideoWin.h index fc406fe..9818eff 100644 --- a/src/debugger/VideoWin.h +++ b/src/debugger/VideoWin.h @@ -1,14 +1,14 @@ // -// VideoWin.h: Credits where credits are due ;-) +// VideoWin.h: Video output +// +// by Jean-Paul Mari // -// based on the work from James Hammons -// (C) 2010 Underground Software // #ifndef __VIDEOWIN_H__ #define __VIDEOWIN_H__ -#include +#include #include class VideoOutputWindow : public QWidget @@ -22,13 +22,17 @@ class VideoOutputWindow : public QWidget public slots: // void DefineAllKeys(void); void RefreshContents(GLWidget *Lt); + void SetupVideo(GLWidget *Lt); protected: - //void keyPressEvent(QKeyEvent *); + void keyPressEvent(QKeyEvent *); private: - QHBoxLayout *layout; - QLabel * text; + QVBoxLayout *layout; + QHBoxLayout *hbox1; + //QTextBrowser * text; + //QStatusBar *statusbar; + GLWidget *gl; }; #endif // __VIDEOWIN_H__ diff --git a/src/debugger/allwatchbrowser.cpp b/src/debugger/allwatchbrowser.cpp index f17b3f4..bd1fd9a 100644 --- a/src/debugger/allwatchbrowser.cpp +++ b/src/debugger/allwatchbrowser.cpp @@ -10,6 +10,7 @@ // JPM 12/07/2017 Created this file // JPM 09/14/2018 Added a status bar, better status report and set information values in a tab // JPM April/2019 Added a sorting filter, tableview unique rows creation +// JPM April/2021 Added a search feature. // // STILL TO DO: @@ -37,6 +38,8 @@ // AllWatchBrowserWindow::AllWatchBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog), layout(new QVBoxLayout), +symbol(new QLineEdit), +search(new QPushButton(tr("Search"))), #ifdef AW_LAYOUTTEXTS text(new QTextBrowser), #else @@ -44,12 +47,13 @@ TableView(new QTableView), model(new QStandardItemModel), #endif NbWatch(0), +CurrentWatch(0), statusbar(new QStatusBar), PtrWatchInfo(NULL) { setWindowTitle(tr("All Watch")); - // Set the font + // set the font QFont fixedFont("Lucida Console", 8, QFont::Normal); fixedFont.setStyleHint(QFont::TypeWriter); @@ -73,9 +77,20 @@ PtrWatchInfo(NULL) layout->addWidget(TableView); #endif - // Status bar + // search bar + QHBoxLayout * hbox1 = new QHBoxLayout; + symbol->setPlaceholderText("symbol name"); + hbox1->addWidget(symbol); + hbox1->addWidget(search); + layout->addLayout(hbox1); + + // status bar layout->addWidget(statusbar); setLayout(layout); + + // connect slot + connect(search, SIGNAL(clicked()), this, SLOT(SearchSymbol())); + connect(symbol, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(SelectSearchSymbol())); } @@ -86,6 +101,67 @@ AllWatchBrowserWindow::~AllWatchBrowserWindow(void) } +// Search the symbol in the watch list +void AllWatchBrowserWindow::SearchSymbol(void) +{ + bool found = false; + size_t i; + + // user cannot enter symbol to allow the search + symbol->setDisabled(true); + + // look for the symbol in the watch list + for (i = AW_STARTNUMVARIABLE; (i < NbWatch) && !found; i++) + { + // check symbol presence + if (!symbol->text().compare(((S_VariablesStruct*)PtrWatchInfo[i])->PtrName, Qt::CaseSensitive)) + { + found = true; + } + } + + if (found) + { + // remove previous highlight + if (CurrentWatch) + { + model->item((int)(CurrentWatch - 1), 0)->setBackground(QColor(255, 255, 255)); + model->item((int)(CurrentWatch - 1), 1)->setBackground(QColor(255, 255, 255)); + model->item((int)(CurrentWatch - 1), 2)->setBackground(QColor(255, 255, 255)); + } + // Get the slider maximum position + int MaxSlider = TableView->verticalScrollBar()->maximum(); + // Number of items displayed in the scroll bar slider + int DeltaSlider = (int)NbWatch - MaxSlider; + // set the scroll bar + TableView->verticalScrollBar()->setSliderPosition((int)i - (DeltaSlider / 2) - 1); + // highlight watch symbol + CurrentWatch = i; + model->item((int)(CurrentWatch - 1), 0)->setBackground(QColor(0xff, 0xfa, 0xcd)); + model->item((int)(CurrentWatch - 1), 1)->setBackground(QColor(0xff, 0xfa, 0xcd)); + model->item((int)(CurrentWatch - 1), 2)->setBackground(QColor(0xff, 0xfa, 0xcd)); + // allow new symbol + symbol->setText(""); + } + else + { + // invalid symbol + symbol->setStyleSheet("color: red"); + } + + // user can enter a symbol + symbol->setEnabled(true); + symbol->setFocus(); +} + + +// +void AllWatchBrowserWindow::SelectSearchSymbol(void) +{ + symbol->setStyleSheet("color: black"); +} + + // void AllWatchBrowserWindow::Reset(void) { @@ -105,15 +181,16 @@ void AllWatchBrowserWindow::RefreshContents(void) QString WatchAll; size_t Error = AW_NOERROR; char *PtrValue; + //S_VariablesStruct* Var; if (isVisible()) { if (!NbWatch) { // Pre-catch the information for each global variables - if (NbWatch = DBGManager_GetNbGlobalVariables()) + if (NbWatch = DBGManager_GetNbVariables(NULL)) { - PtrWatchInfo = (WatchInfo *)calloc(NbWatch, sizeof(WatchInfo)); + PtrWatchInfo = (void**)calloc(NbWatch, sizeof(S_VariablesStruct*)); #ifndef AW_LAYOUTTEXTS #ifdef AW_SORTINGFILTER TableView->setSortingEnabled(false); @@ -122,18 +199,18 @@ void AllWatchBrowserWindow::RefreshContents(void) #endif for (uint32_t i = AW_STARTNUMVARIABLE; i < NbWatch; i++) { - PtrWatchInfo[i].PtrVariableName = DBGManager_GetGlobalVariableName(i + 1); - PtrWatchInfo[i].TypeTag = DBGManager_GetGlobalVariableTypeTag(i + 1); -#ifdef AW_LAYOUTTEXTS - PtrWatchInfo[i].addr = DBGManager_GetGlobalVariableAdr(i + 1); - if (!strlen(PtrWatchInfo[i].PtrVariableBaseTypeName = DBGManager_GetGlobalVariableTypeName(i + 1))) + if ((PtrWatchInfo[i] = (void*)DBGManager_GetInfosVariable(NULL, i + 1))) { - PtrWatchInfo[i].PtrVariableBaseTypeName = (char *)"N/A"; - } +#ifdef AW_LAYOUTTEXTS + PtrWatchInfo[i].addr = DBGManager_GetGlobalVariableAdr(i + 1); + if (!strlen(PtrWatchInfo[i].PtrVariableBaseTypeName = DBGManager_GetGlobalVariableTypeName(i + 1))) + { + PtrWatchInfo[i].PtrVariableBaseTypeName = (char *)"N/A"; + } #else - PtrWatchInfo[i].PtrVariableBaseTypeName = DBGManager_GetGlobalVariableTypeName(i + 1); - model->insertRow(i); + model->insertRow(i); #endif + } } } } @@ -142,7 +219,7 @@ void AllWatchBrowserWindow::RefreshContents(void) { for (uint32_t i = AW_STARTNUMVARIABLE; i < NbWatch; i++) { - if ((PtrWatchInfo[i].TypeTag & (DBG_TAG_TYPE_array | DBG_TAG_TYPE_structure))) + if (((S_VariablesStruct*)PtrWatchInfo[i])->TypeTag & (DBG_TAG_TYPE_array | DBG_TAG_TYPE_structure)) { #if defined(AW_SUPPORTARRAY) || defined(AW_SUPPORTSTRUCTURE) //PtrValue = (char *)memcpy(Value, &jaguarMainRAM[PtrWatchInfo[i].addr], 20); @@ -153,7 +230,7 @@ void AllWatchBrowserWindow::RefreshContents(void) } else { - PtrValue = DBGManager_GetGlobalVariableValue(i + 1); + PtrValue = DBGManager_GetVariableValueFromAdr(((S_VariablesStruct*)PtrWatchInfo[i])->Addr, ((S_VariablesStruct*)PtrWatchInfo[i])->TypeEncoding, ((S_VariablesStruct*)PtrWatchInfo[i])->TypeByteSize); } #ifdef AW_LAYOUTTEXTS if (i) @@ -163,9 +240,9 @@ void AllWatchBrowserWindow::RefreshContents(void) sprintf(string, "%i : %s | %s | 0x%06X | %s", (i + 1), PtrWatchInfo[i].PtrVariableBaseTypeName, PtrWatchInfo[i].PtrVariableName, (unsigned int)PtrWatchInfo[i].addr, PtrValue ? PtrValue : (char *)"N/A"); WatchAll += QString(string); #else - model->setItem(i, 0, new QStandardItem(QString("%1").arg(PtrWatchInfo[i].PtrVariableName))); + model->setItem(i, 0, new QStandardItem(QString("%1").arg(((S_VariablesStruct*)PtrWatchInfo[i])->PtrName))); model->setItem(i, 1, new QStandardItem(QString("%1").arg(PtrValue))); - model->setItem(i, 2, new QStandardItem(QString("%1").arg(PtrWatchInfo[i].PtrVariableBaseTypeName))); + model->setItem(i, 2, new QStandardItem(QString("%1").arg(((S_VariablesStruct*)PtrWatchInfo[i])->PtrTypeName))); #endif } #ifdef AW_LAYOUTTEXTS @@ -205,12 +282,21 @@ void AllWatchBrowserWindow::RefreshContents(void) } -// +// Handle keyboard event void AllWatchBrowserWindow::keyPressEvent(QKeyEvent * e) { + // ESC to close / hide the window if (e->key() == Qt::Key_Escape) { hide(); } + else + { + // search symbol + if (e->key() == Qt::Key_Return) + { + SearchSymbol(); + } + } } diff --git a/src/debugger/allwatchbrowser.h b/src/debugger/allwatchbrowser.h index 63107f4..4f56817 100644 --- a/src/debugger/allwatchbrowser.h +++ b/src/debugger/allwatchbrowser.h @@ -11,7 +11,7 @@ //#define AW_SUPPORTARRAY // Support array //#define AW_SUPPORTSTRUCTURE // Support structure -#include +#include #include // Error code definitions @@ -26,6 +26,7 @@ class AllWatchBrowserWindow: public QWidget { Q_OBJECT +#if 0 // typedef struct WatchInfo { @@ -33,9 +34,11 @@ class AllWatchBrowserWindow: public QWidget size_t addr; #endif size_t TypeTag; + size_t Adr; char *PtrVariableName; char *PtrVariableBaseTypeName; }S_WatchInfo; +#endif public: AllWatchBrowserWindow(QWidget *parent = 0); @@ -48,6 +51,10 @@ class AllWatchBrowserWindow: public QWidget protected: void keyPressEvent(QKeyEvent *); + protected slots: + void SearchSymbol(void); + void SelectSearchSymbol(void); + private: QVBoxLayout *layout; #ifdef AW_LAYOUTTEXTS @@ -57,8 +64,12 @@ class AllWatchBrowserWindow: public QWidget QStandardItemModel *model; #endif QStatusBar *statusbar; - WatchInfo *PtrWatchInfo; + //WatchInfo *PtrWatchInfo; + void **PtrWatchInfo; size_t NbWatch; + QPushButton *search; + QLineEdit* symbol; + size_t CurrentWatch; }; #endif // __ALLWATCHBROWSER_H__ diff --git a/src/debugger/callstackbrowser.cpp b/src/debugger/callstackbrowser.cpp index 0d30213..607c398 100644 --- a/src/debugger/callstackbrowser.cpp +++ b/src/debugger/callstackbrowser.cpp @@ -5,12 +5,14 @@ // // JPM = Jean-Paul Mari // -// Who When What -// --- ---------- ----------------------------------------------------------- -// JPM 08/31/2018 Created this file -// JPM 09/12/2018 Added a status bar and better status report -// JPM 10/20/2018 Added the return address information in the call stack -// JPM 08/09/2019 Prevent crash in case of call stack is out of range +// Who When (M/D/Y) What +// --- ------------ ----------------------------------------------------------- +// JPM 08/31/2018 Created this file +// JPM 09/12/2018 Added a status bar and better status report +// JPM 10/20/2018 Added the return address information in the call stack +// JPM 08/09/2019 Prevent crash in case of call stack is out of range +// JPM 03/16/2020 Modified the layout window and added source filename from the called source line +// JPM April/2021 Added a #line information // STILL TO DO: // To set the information display at the right @@ -48,10 +50,12 @@ layout(new QVBoxLayout) layout->addWidget(text); #else // Set the new layout with proper identation and readibility - model->setColumnCount(3); - model->setHeaderData(0, Qt::Horizontal, QObject::tr("Name")); - model->setHeaderData(1, Qt::Horizontal, QObject::tr("Line")); - model->setHeaderData(2, Qt::Horizontal, QObject::tr("Return address")); + model->setColumnCount(5); + model->setHeaderData(0, Qt::Horizontal, QObject::tr("Function")); + model->setHeaderData(1, Qt::Horizontal, QObject::tr("#Line")); + model->setHeaderData(2, Qt::Horizontal, QObject::tr("Line")); + model->setHeaderData(3, Qt::Horizontal, QObject::tr("Return address")); + model->setHeaderData(4, Qt::Horizontal, QObject::tr("Filename")); // Information table TableView->setModel(model); TableView->setEditTriggers(QAbstractItemView::NoEditTriggers); @@ -79,14 +83,15 @@ void CallStackBrowserWindow::RefreshContents(void) { char msg[1024]; size_t Error = CS_NOERROR; + DBGstatus FilenameStatus; unsigned int a6, Sa6, ret; - char *FuncName; + char *Name; + size_t NumError = 0; #ifdef CS_LAYOUTTEXTS QString CallStack; char string[1024]; #else int NbRaw = 0; - size_t NumError = 0; QString FunctionName; #endif @@ -104,26 +109,36 @@ void CallStackBrowserWindow::RefreshContents(void) a6 = GET32(jaguarMainRAM, Sa6); ret = GET32(jaguarMainRAM, Sa6 + 4); #ifdef CS_LAYOUTTEXTS - sprintf(string, "0x%06X | Ret: 0x%06X | From: %s - 0x%06X | Line: %s", Sa6, ret, (FuncName = DBGManager_GetFunctionName(ret)), (unsigned int)DBGManager_GetAdrFromSymbolName(FuncName), DBGManager_GetLineSrcFromAdr(ret, DBG_NO_TAG)); + sprintf(string, "0x%06X | Ret: 0x%06X | From: %s - 0x%06X | Line: %s", Sa6, ret, (Name = DBGManager_GetFunctionName(ret)), (unsigned int)DBGManager_GetAdrFromSymbolName(Name), DBGManager_GetLineSrcFromAdr(ret, DBG_NO_TAG)); CallStack += QString(string); if (a6) { CallStack += QString("
    "); } #else + // insert line model->insertRow(NbRaw); - model->setItem(NbRaw, 0, new QStandardItem(QString("%1").arg((FuncName = DBGManager_GetFunctionName(ret)) ? FuncName : "(N/A)"))); - FunctionName = QString(FuncName = DBGManager_GetLineSrcFromAdr(ret, DBG_NO_TAG)); - FunctionName.replace(" ", " "); - model->setItem(NbRaw, 1, new QStandardItem(QString("%1").arg(FuncName ? FunctionName : "(N/A)"))); + // display the function name + model->setItem(NbRaw, 0, new QStandardItem(QString("%1").arg((Name = DBGManager_GetFunctionName(ret)) ? Name : "(N/A)"))); + // display the line number + sprintf(msg, "%zi", DBGManager_GetNumLineFromAdr(ret, DBG_NO_TAG)); + model->setItem(NbRaw, 1, new QStandardItem(QString("%1").arg((msg[0] != '0') ? msg : "(N/A)"))); + // display the called line + FunctionName = QString(Name = DBGManager_GetLineSrcFromAdr(ret, DBG_NO_TAG)); + //FunctionName.replace(" ", " "); + FunctionName = FunctionName.trimmed(); + model->setItem(NbRaw, 2, new QStandardItem(QString("%1").arg(Name ? FunctionName : "(N/A)"))); + // display the return address sprintf(msg, "0x%06X", ret); - model->setItem(NbRaw++, 2, new QStandardItem(QString("%1").arg(msg))); + model->setItem(NbRaw, 3, new QStandardItem(QString("%1").arg(msg))); + // display the source filename from called source line + model->setItem(NbRaw++, 4, new QStandardItem(QString("%1").arg(((Name = DBGManager_GetFullSourceFilenameFromAdr(ret, &FilenameStatus)) && !FilenameStatus) ? Name : "(N/A)"))); +#endif } else { NumError = 0x1; } -#endif } #ifdef CS_LAYOUTTEXTS text->clear(); diff --git a/src/debugger/callstackbrowser.h b/src/debugger/callstackbrowser.h index 91223f1..126ebe4 100644 --- a/src/debugger/callstackbrowser.h +++ b/src/debugger/callstackbrowser.h @@ -9,7 +9,7 @@ //#define CS_LAYOUTTEXTS // Use a layout with just texts -#include +#include #include // Error code definitions diff --git a/src/debugger/debuggertab.cpp b/src/debugger/debuggertab.cpp index 0b4bd46..ac0cfe7 100644 --- a/src/debugger/debuggertab.cpp +++ b/src/debugger/debuggertab.cpp @@ -4,12 +4,14 @@ // by Jean-Paul Mari // // JPM = Jean-Paul Mari +// RG = Richard Goedeken // // WHO WHEN WHAT // --- ---------- ------------------------------------------------------------ // JPM Sept./2016 Created this file, and added Soft debugger support // JPM 10/09/2018 Added source file search paths // JPM 04/06/2019 Added ELF sections check +// RG Jan./2021 Linux build fix // #include "debuggertab.h" @@ -92,7 +94,7 @@ void DebuggerTab::SetSettings(void) // Load / Update the tabs dialog from the settings void DebuggerTab::GetSettings(void) { - QVariant v(vjs.nbrdisasmlines); + QVariant v((qulonglong) vjs.nbrdisasmlines); nbrdisasmlines->setText(v.toString()); sourcefilesearchpaths->setText(vjs.sourcefilesearchPaths); displayHWlabels->setChecked(vjs.displayHWlabels); diff --git a/src/debugger/debuggertab.h b/src/debugger/debuggertab.h index 583dd30..56576f8 100644 --- a/src/debugger/debuggertab.h +++ b/src/debugger/debuggertab.h @@ -11,7 +11,7 @@ #ifndef __DEBUGGERTAB_H__ #define __DEBUGGERTAB_H__ -#include +#include class DebuggerTab: public QWidget { diff --git a/src/debugger/exceptionvectortablebrowser.h b/src/debugger/exceptionvectortablebrowser.h index aaccda0..f9fb4cc 100644 --- a/src/debugger/exceptionvectortablebrowser.h +++ b/src/debugger/exceptionvectortablebrowser.h @@ -9,7 +9,7 @@ //#define EV_LAYOUTTEXTS // Use a layout with just texts -#include +#include #include diff --git a/src/debugger/heapallocatorbrowser.h b/src/debugger/heapallocatorbrowser.h index bbc2a4e..440cbe7 100644 --- a/src/debugger/heapallocatorbrowser.h +++ b/src/debugger/heapallocatorbrowser.h @@ -9,7 +9,7 @@ //#define HA_LAYOUTTEXTS // Use a layout with just texts -#include +#include #include // Error code definitions diff --git a/src/debugger/localbrowser.cpp b/src/debugger/localbrowser.cpp dissimilarity index 64% index b00bd70..c59587f 100644 --- a/src/debugger/localbrowser.cpp +++ b/src/debugger/localbrowser.cpp @@ -1,310 +1,320 @@ -// -// localbrowser.cpp - Local variables -// -// by Jean-Paul Mari -// -// JPM = Jean-Paul Mari -// -// Who When What -// --- ---------- ----------------------------------------------------------- -// JPM 11/03/2017 Created this file -// JPM Sept./2018 Added a status bar and better status report, and set information values in a tab -// - -// STILL TO DO: -// Feature to list the pointer(s) in the code using the allocation -// To set the information display at the right -// To support the array -// To support the static variables -// To add a filter -// - - -#include "debugger/localbrowser.h" -#include "memory.h" -#include "debugger/DBGManager.h" -#include "settings.h" -#include "m68000/m68kinterface.h" - - -// -LocalBrowserWindow::LocalBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog), -layout(new QVBoxLayout), -#ifdef LOCAL_LAYOUTTEXTS -text(new QTextBrowser), -#else -TableView(new QTableView), -model(new QStandardItemModel), -#endif -NbLocal(0), -FuncName((char *)calloc(1, 1)), -LocalInfo(NULL), -statusbar(new QStatusBar) -{ - setWindowTitle(tr("Locals")); - - // Set the font - QFont fixedFont("Lucida Console", 8, QFont::Normal); - fixedFont.setStyleHint(QFont::TypeWriter); - -#ifdef LOCAL_LAYOUTTEXTS - // Set original layout - text->setFont(fixedFont); - layout->addWidget(text); -#else - // Set the new layout with proper identation and readibility - model->setColumnCount(3); - model->setHeaderData(0, Qt::Horizontal, QObject::tr("Name")); - model->setHeaderData(1, Qt::Horizontal, QObject::tr("Value")); - model->setHeaderData(2, Qt::Horizontal, QObject::tr("Type")); - // Information table - TableView->setModel(model); - TableView->setEditTriggers(QAbstractItemView::NoEditTriggers); - TableView->setShowGrid(0); - TableView->setFont(fixedFont); - TableView->verticalHeader()->setDefaultSectionSize(TableView->verticalHeader()->minimumSectionSize()); - TableView->verticalHeader()->setDefaultAlignment(Qt::AlignRight); - layout->addWidget(TableView); -#endif - - // Status bar - layout->addWidget(statusbar); - setLayout(layout); -} - - -// -LocalBrowserWindow::~LocalBrowserWindow(void) -{ - free(LocalInfo); - free(FuncName); -} - - -// -bool LocalBrowserWindow::UpdateInfos(void) -{ - size_t Adr; - char *Ptr; - - if (NbLocal = DBGManager_GetNbLocalVariables(Adr = m68k_get_reg(NULL, M68K_REG_PC))) - { - if (Ptr = DBGManager_GetFunctionName(Adr)) - { - if (strcmp(FuncName, Ptr)) - { - if (FuncName = (char *)realloc(FuncName, strlen(Ptr) + 1)) - { - strcpy(FuncName, Ptr); - - if (LocalInfo = (WatchInfo *)realloc(LocalInfo, (sizeof(WatchInfo) * NbLocal))) - { - for (size_t i = 0; i < NbLocal; i++) - { - // Get local variable name and his information - if (LocalInfo[i].PtrVariableName = DBGManager_GetLocalVariableName(Adr, i + 1)) - { - LocalInfo[i].Op = DBGManager_GetLocalVariableOp(Adr, i + 1); - LocalInfo[i].Adr = NULL; - LocalInfo[i].PtrCPURegisterName = NULL; - LocalInfo[i].TypeTag = DBGManager_GetLocalVariableTypeTag(Adr, i + 1); - LocalInfo[i].PtrVariableBaseTypeName = DBGManager_GetLocalVariableTypeName(Adr, i + 1); - LocalInfo[i].TypeEncoding = DBGManager_GetLocalVariableTypeEncoding(Adr, i + 1); - LocalInfo[i].TypeByteSize = DBGManager_GetLocalVariableTypeByteSize(Adr, i + 1); - LocalInfo[i].Offset = DBGManager_GetLocalVariableOffset(Adr, i + 1); - } - } - } - } - } - - return true; - } - } - - *FuncName = 0; - - return false; -} - - -// -void LocalBrowserWindow::RefreshContents(void) -{ -#ifdef LOCAL_LAYOUTTEXTS - char string[1024]; -#endif - size_t Error = LOCAL_NOERROR; - QString Local; - QString MSG; - char Value1[100]; -#ifdef LOCAL_SUPPORTARRAY - char Value[100]; -#endif - char *PtrValue; - - const char *CPURegName[] = { "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7" }; - - if (isVisible()) - { -#ifndef LOCAL_LAYOUTTEXTS - model->setRowCount(0); -#endif - if (UpdateInfos()) - { - for (size_t i = 0; i < NbLocal; i++) - { - if (LocalInfo[i].PtrVariableName) - { - memset(Value1, 0, sizeof(Value1)); -#ifdef LOCAL_LAYOUTTEXTS - if (i) - { - Local += QString("
    "); - } -#else - model->insertRow(i); -#endif - // Local or parameters variables - if (((LocalInfo[i].Op >= DBG_OP_breg0) && (LocalInfo[i].Op <= DBG_OP_breg31)) || (LocalInfo[i].Op == DBG_OP_fbreg)) - { - LocalInfo[i].Adr = m68k_get_reg(NULL, M68K_REG_A6) + LocalInfo[i].Offset; - - if ((LocalInfo[i].Op == DBG_OP_fbreg)) - { - LocalInfo[i].Adr += 8; - } - - if ((LocalInfo[i].Adr >= 0) && (LocalInfo[i].Adr < vjs.DRAM_size)) - { - if ((LocalInfo[i].TypeTag & (DBG_TAG_TYPE_array | DBG_TAG_TYPE_structure))) - { -#if defined(LOCAL_SUPPORTARRAY) || defined(LOCAL_SUPPORTSTRUCTURE) - //memcpy(Value1, &jaguarMainRAM[LocalInfo[i].Adr], 20); -#ifdef LOCAL_LAYOUTTEXTS - //sprintf(Value, "\"%s\"", Value1); -#else - //sprintf(Value, "0x%06X, \"%s\"", LocalInfo[i].Adr, Value1); -#endif - //PtrValue = Value; - PtrValue = NULL; -#else - PtrValue = NULL; -#endif - } - else - { - PtrValue = DBGManager_GetVariableValueFromAdr(LocalInfo[i].Adr, LocalInfo[i].TypeEncoding, LocalInfo[i].TypeByteSize); - } - } - else - { - PtrValue = NULL; - } - } - else - { - // Value from CPU register - if ((LocalInfo[i].Op >= DBG_OP_reg0) && (LocalInfo[i].Op <= DBG_OP_reg31)) - { - LocalInfo[i].PtrCPURegisterName = (char *)CPURegName[(LocalInfo[i].Op - DBG_OP_reg0)]; - PtrValue = itoa(m68k_get_reg(NULL, (m68k_register_t)((size_t)M68K_REG_D0 + (LocalInfo[i].Op - DBG_OP_reg0))), Value1, 10); - } - else - { - PtrValue = NULL; - } - } - -#ifndef LOCAL_LAYOUTTEXTS - model->setItem(i, 0, new QStandardItem(QString("%1").arg(LocalInfo[i].PtrVariableName))); -#endif - // Check if the local variable is use by the code - if (!LocalInfo[i].Op) - { -#ifdef LOCAL_LAYOUTTEXTS - sprintf(string, "%i : %s | %s | [Not used]", (i + 1), (LocalInfo[i].PtrVariableBaseTypeName ? LocalInfo[i].PtrVariableBaseTypeName : (char *)"N/A"), LocalInfo[i].PtrVariableName); -#else -#endif - } - else - { -#ifndef LOCAL_LAYOUTTEXTS - model->setItem(i, 1, new QStandardItem(QString("%1").arg(PtrValue))); -#else - sprintf(string, "%i : %s | %s | ", (i + 1), (LocalInfo[i].PtrVariableBaseTypeName ? LocalInfo[i].PtrVariableBaseTypeName : (char *)"N/A"), LocalInfo[i].PtrVariableName); - Local += QString(string); - - if ((unsigned int)LocalInfo[i].Adr) - { - sprintf(string, "0x%06X", (unsigned int)LocalInfo[i].Adr); - } - else - { - if (LocalInfo[i].PtrCPURegisterName) - { - sprintf(string, "%s", LocalInfo[i].PtrCPURegisterName); - } - else - { - sprintf(string, "%s", (char *)"N/A"); - } - } - - Local += QString(string); - sprintf(string, " | %s", (!PtrValue ? (char *)"N/A" : PtrValue)); -#endif - } -#ifndef LOCAL_LAYOUTTEXTS - model->setItem(i, 2, new QStandardItem(QString("%1").arg((LocalInfo[i].PtrVariableBaseTypeName ? LocalInfo[i].PtrVariableBaseTypeName : (char *)"N/A")))); -#else - Local += QString(string); -#endif - } - } - - MSG += QString("Ready"); -#ifdef LOCAL_LAYOUTTEXTS - text->clear(); - text->setText(Local); -#endif - } - else - { - // No locals - MSG += QString("No locals"); - Error = LOCAL_NOLOCALS; -#ifdef LOCAL_LAYOUTTEXTS - text->clear(); -#endif - } - - // Display status bar - if (Error) - { - if ((Error & LOCAL_WARNING)) - { - statusbar->setStyleSheet("background-color: lightyellow; font: bold"); - } - else - { - statusbar->setStyleSheet("background-color: tomato; font: bold"); - } - } - else - { - statusbar->setStyleSheet("background-color: lightgreen; font: bold"); - } - statusbar->showMessage(MSG); - } -} - - -// -void LocalBrowserWindow::keyPressEvent(QKeyEvent * e) -{ - if (e->key() == Qt::Key_Escape) - { - hide(); - } -} +// +// localbrowser.cpp - Local variables +// +// by Jean-Paul Mari +// +// JPM = Jean-Paul Mari +// RG = Richard Goedeken +// +// Who When What +// --- ---------- ----------------------------------------------------------- +// JPM 11/03/2017 Created this file +// JPM Sept./2018 Added a status bar and better status report, and set information values in a tab +// RG Jan./2021 Linux build fixes +// JPM May/2021 Display the structure's members +// + +// STILL TO DO: +// Feature to list the pointer(s) in the code using the allocation +// To set the information display at the right +// To support the array +// To support the union +// To support the static variables +// To add a filter +// + +#include + +#include "debugger/localbrowser.h" +#include "memory.h" +#include "debugger/DBGManager.h" +#include "settings.h" +#include "m68000/m68kinterface.h" + + +// +LocalBrowserWindow::LocalBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog), +layout(new QVBoxLayout), +TableView(new QTreeView), +model(new QStandardItemModel), +NbLocal(0), +FuncName(NULL), +LocalInfo(NULL), +statusbar(new QStatusBar) +{ + setWindowTitle(tr("Locals")); +#ifdef LOCAL_FONTS + // Set the font + QFont fixedFont("Lucida Console", 8, QFont::Normal); + fixedFont.setStyleHint(QFont::TypeWriter); +#endif + // Set the new layout with proper identation and readibility + model->setColumnCount(3); + model->setHeaderData(0, Qt::Horizontal, QObject::tr("Name")); + model->setHeaderData(1, Qt::Horizontal, QObject::tr("Value")); + model->setHeaderData(2, Qt::Horizontal, QObject::tr("Type")); + // Information table + TableView->setModel(model); + TableView->setEditTriggers(QAbstractItemView::NoEditTriggers); +#ifdef LOCAL_FONTS + TableView->setFont(fixedFont); +#endif + layout->addWidget(TableView); + + // Status bar + layout->addWidget(statusbar); + setLayout(layout); +} + + +// +LocalBrowserWindow::~LocalBrowserWindow(void) +{ + free(LocalInfo); +} + + +// Get the local variables information +// Return true for a new local variables set +bool LocalBrowserWindow::UpdateInfos(void) +{ + size_t Adr; + char *Ptr; + + // get number of local variables located in the M68K PC address + if ((NbLocal = DBGManager_GetNbVariables(Adr = m68k_get_reg(NULL, M68K_REG_PC)))) + { + // get function name from the M68K PC address + if ((Ptr = DBGManager_GetFunctionName(Adr))) + { + // avoid to read the same information in case of the function has not changed + if (!FuncName || strcmp(FuncName, Ptr)) + { + // function is different + FuncName = Ptr; + if (LocalInfo = (S_LocalInfo*)realloc(LocalInfo, (sizeof(S_LocalInfo) * NbLocal))) + { + for (size_t i = 0; i < NbLocal; i++) + { + // get local variable name and his information + if ((LocalInfo[i].PtrVariable = DBGManager_GetInfosVariable(Adr, i + 1))) + { + LocalInfo[i].Adr = 0; + LocalInfo[i].PtrCPURegisterName = NULL; + } + } + } + + return true; + } + else + { + return false; + } + } + } + + FuncName = NULL; + + return false; +} + + +// Prepare a complete row based on the variable information +// The row will append rows if necessary +QList LocalBrowserWindow::prepareRow(void* Info) +{ + // set the list + QList ptrRow = { new QStandardItem(((S_VariablesStruct*)Info)->PtrName), new QStandardItem(""), new QStandardItem(((S_VariablesStruct*)Info)->PtrTypeName) }; + + // check if variable has additional variables (such as structure) + if (size_t nb = ((S_VariablesStruct*)Info)->NbTabVariables) + { + for (size_t i = 0; i < nb; i++) + { + ptrRow.first()->appendRow(prepareRow(((S_VariablesStruct*)Info)->TabVariables[i])); + } + } + + // return the list + return ptrRow; +} + + +// Set the values of each line in accordance of the rows created from prepareRow() function +void LocalBrowserWindow::setValueRow(QStandardItem *Row, size_t Adr, char* Value, void* Info) +{ + QStandardItem *child = Row->child(0, 1); + if (child) + { + // check if variable has additional variables list (such as structure) + if (size_t nb = ((S_VariablesStruct*)Info)->NbTabVariables) + { + // get the pointer's value + Adr = GET32(jagMemSpace, Adr); + + for (size_t i = 0; i < nb; i++) + { + // do not display arrays + if (!((((S_VariablesStruct*)Info)->TabVariables[i]->TypeTag & DBG_TAG_TYPE_array))) + { + // set value in the row + Value = DBGManager_GetVariableValueFromAdr(Adr + ((S_VariablesStruct*)Info)->TabVariables[i]->Offset, ((S_VariablesStruct*)Info)->TabVariables[i]->TypeEncoding, ((S_VariablesStruct*)Info)->TabVariables[i]->TypeByteSize); + child = Row->child((int)i, 1); + child->setText(QString("%1").arg(Value)); + setValueRow(child, Adr + ((S_VariablesStruct*)Info)->TabVariables[i]->Offset, Value, (void*)((S_VariablesStruct*)Info)->TabVariables[i]); + } + } + } + } +} + + +// Refresh the local and/or parameters contents list +void LocalBrowserWindow::RefreshContents(void) +{ + size_t Error = LOCAL_NOERROR; + QString Local; + QString MSG; + char Value1[100]; + char *PtrValue; + + // local variables may come from M68K registers + const char *CPURegName[] = { "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7" }; + + // refresh only if local's window is displayed + if (isVisible()) + { + // get local's information + if (UpdateInfos()) + { + // erase the previous variables list + model->setRowCount(0); + + // loop on the locals found + for (size_t i = 0; i < NbLocal; i++) + { + // check variable's name validity + if (((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->PtrName) + { + // insert the row + model->appendRow(prepareRow(LocalInfo[i].PtrVariable)); + + // check if the local variable is use by the code + if (((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->Op) + { + // local or parameters variables + if (((((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->Op >= DBG_OP_breg0) && (((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->Op <= DBG_OP_breg31)) || (((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->Op == DBG_OP_fbreg)) + { + // get variable's address + LocalInfo[i].Adr = m68k_get_reg(NULL, M68K_REG_A6) + ((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->Offset; + // check variable's parameter op + if ((((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->Op == DBG_OP_fbreg)) + { + LocalInfo[i].Adr += 8; + } + } + else + { + // variable type from CPU register + if ((((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->Op >= DBG_OP_reg0) && (((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->Op <= DBG_OP_reg31)) + { + // set color text for a register type variable + model->item((int)i, 0)->setForeground(QColor(0, 0, 0xfe)); + model->item((int)i, 1)->setForeground(QColor(0, 0, 0xfe)); + model->item((int)i, 2)->setForeground(QColor(0, 0, 0xfe)); + // get the register's name + LocalInfo[i].PtrCPURegisterName = (char *)CPURegName[(((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->Op - DBG_OP_reg0)]; + } + } + } + else + { + // set color text for unused variable (no need to set it for the value's field as no values will be displayed) + model->item((int)i, 0)->setForeground(QColor(0xc8, 0xc8, 0xc8)); + model->item((int)i, 2)->setForeground(QColor(0xc8, 0xc8, 0xc8)); + } + } + } + } + + // set the values in the fields + if (NbLocal) + { + // loop on the locals found + for (size_t i = 0; i < NbLocal; i++) + { + // variable's address must fit in RAM + if ((LocalInfo[i].Adr >= 4) && (LocalInfo[i].Adr < vjs.DRAM_size)) + { + // get the variable's value + PtrValue = DBGManager_GetVariableValueFromAdr(LocalInfo[i].Adr, ((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->TypeEncoding, ((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->TypeByteSize); + } + else + { + // check CPU register's type variable + if (LocalInfo[i].PtrCPURegisterName) + { + // get the value from register + memset(Value1, 0, sizeof(Value1)); + sprintf(Value1, "0x%x", m68k_get_reg(NULL, (m68k_register_t)((size_t)M68K_REG_D0 + (((S_VariablesStruct*)(LocalInfo[i].PtrVariable))->Op - DBG_OP_reg0)))); + PtrValue = Value1; + } + else + { + // no value can be found + PtrValue = NULL; + } + } + + // do not display arrays + if (!(((S_VariablesStruct*)LocalInfo[i].PtrVariable)->TypeTag & DBG_TAG_TYPE_array)) + { + // set the local's variable value + model->item((int)i, 1)->setText(QString("%1").arg(PtrValue)); + setValueRow(model->item((int)i), LocalInfo[i].Adr, PtrValue, (S_VariablesStruct*)(LocalInfo[i].PtrVariable)); + } + } + + MSG += QString("Ready"); + } + else + { + // erase the previous variables list + model->setRowCount(0); + + // No locals + MSG += QString("No locals"); + Error = LOCAL_NOLOCALS; + } + + // display status bar + if (Error) + { + if ((Error & LOCAL_WARNING)) + { + statusbar->setStyleSheet("background-color: lightyellow; font: bold"); + } + else + { + statusbar->setStyleSheet("background-color: tomato; font: bold"); + } + } + else + { + statusbar->setStyleSheet("background-color: lightgreen; font: bold"); + } + statusbar->showMessage(MSG); + } +} + + +// Handle keyboard actions +void LocalBrowserWindow::keyPressEvent(QKeyEvent * e) +{ + // close / hide the window + if (e->key() == Qt::Key_Escape) + { + hide(); + } +} diff --git a/src/debugger/localbrowser.h b/src/debugger/localbrowser.h index 056fd73..249350f 100644 --- a/src/debugger/localbrowser.h +++ b/src/debugger/localbrowser.h @@ -7,39 +7,30 @@ #ifndef __LOCALBROWSER_H__ #define __LOCALBROWSER_H__ -//#define LOCAL_LAYOUTTEXTS // Use a layout with just texts -//#define LOCAL_SUPPORTARRAY // Support array -//#define LOCAL_SUPPORTSTRUCTURE // Support structure +//#define LOCAL_FONTS // Support for fonts modifications -#include +#include #include // Error code definitions #define LOCAL_NOERROR 0x00 -#define LOCAL_ERROR 0x80 #define LOCAL_WARNING 0x40 +#define LOCAL_ERROR 0x80 #define LOCAL_NOLOCALS (0x01 | LOCAL_WARNING) - // class LocalBrowserWindow: public QWidget { Q_OBJECT // - typedef struct WatchInfo + typedef struct LocalInfo { - size_t Op; size_t Adr; - int Offset; - size_t TypeTag; - size_t TypeEncoding; - size_t TypeByteSize; - char *PtrVariableName; - char *PtrVariableBaseTypeName; char *PtrCPURegisterName; + void *PtrVariable; } - S_WatchInfo; + S_LocalInfo; public: LocalBrowserWindow(QWidget *parent = 0); @@ -50,17 +41,15 @@ class LocalBrowserWindow: public QWidget bool UpdateInfos(void); protected: + QList prepareRow(void* Info); + void setValueRow(QStandardItem *Row, size_t Adr, char* Value, void* Info); void keyPressEvent(QKeyEvent *); private: QVBoxLayout *layout; -#ifdef LOCAL_LAYOUTTEXTS - QTextBrowser *text; -#else - QTableView *TableView; + QTreeView *TableView; QStandardItemModel *model; -#endif - WatchInfo *LocalInfo; + S_LocalInfo *LocalInfo; QStatusBar *statusbar; size_t NbLocal; char *FuncName; diff --git a/src/debugger/m68kDasmWin.cpp b/src/debugger/m68kDasmWin.cpp index ec36938..de4fc82 100644 --- a/src/debugger/m68kDasmWin.cpp +++ b/src/debugger/m68kDasmWin.cpp @@ -10,12 +10,13 @@ // JPM 06/27/2016 Created this file // JPM 12/04/2016 Suport ELF debug information // JPM Replacing the ELF support by the debugger information manager calls +// JPM Aug./2020 Display only the code related to the traced function, added different layouts & a status bar, Qt/HTML text format support // // STILL TO DO: // -#include +#include #include "debugger/m68kDasmWin.h" #include "m68000/m68kinterface.h" #include "dsp.h" @@ -26,16 +27,34 @@ // m68KDasmWindow::m68KDasmWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog), - layout(new QVBoxLayout), text(new QTextBrowser), - memBase(0) +layout(new QVBoxLayout), +#if MD_LAYOUTFILE == 1 +statusbar(new QStatusBar), +#endif +#ifdef MD_LAYOUTTEXTS +text(new QTextBrowser), +#endif +memBase(0) { + // Set font QFont fixedFont("Lucida Console", 8, QFont::Normal); fixedFont.setStyleHint(QFont::Monospace); //TypeWriter fixedFont.setLetterSpacing(QFont::PercentageSpacing, 100); + + // Set text in layout +#ifdef MD_LAYOUTTEXTS text->setFont(fixedFont); + layout->addWidget(text); +#endif + + // Status bar +#if MD_LAYOUTFILE == 1 + layout->addWidget(statusbar); setLayout(layout); +#endif - layout->addWidget(text); + // Set layout + setLayout(layout); } @@ -49,157 +68,203 @@ void m68KDasmWindow::RefreshContents(void) size_t m68KPCNbrDisasmLines = 0; char *Symbol = NULL, *LineSrc, *CurrentLineSrc = NULL; bool m68kPCShow = false; - bool constant, adr, equal, Error; + bool constant, adr, equal; + DBGstatus Status; size_t j, i; size_t nbr = vjs.nbrdisasmlines; char *PtrFullSource, *CurrentPtrFullSource = (char *)calloc(1, 1); size_t NumLine; // , CurrentNumLine = 0; size_t CurrentNumLine; char singleCharString[2] = { 0, 0 }; +#if MD_LAYOUTFILE == 1 + bool In = true; +#else +#define In true +#endif - for (i = 0; i < nbr; i++) + for (i = 0; (i < nbr) && In; i++) { oldpc = pc; adr = constant = equal = false; // Display source filename based on the program address - if (vjs.displayFullSourceFilename && (PtrFullSource = DBGManager_GetFullSourceFilenameFromAdr(oldpc, &Error)) && strcmp(CurrentPtrFullSource, PtrFullSource)) + if (vjs.displayFullSourceFilename && (PtrFullSource = DBGManager_GetFullSourceFilenameFromAdr(oldpc, &Status)) && strcmp(CurrentPtrFullSource, PtrFullSource)) { -#if 0 - if (strcmp(OldPtrFullSource, PtrFullSource)) +#if defined(MD_LAYOUTFILE) + if (i) +#if MD_LAYOUTFILE != 1 + { + // add an empty line for the display of the new filename + nbr++; + s += QString("
    "); + } +#else + { + In = false; + } + else +#endif #endif { - if (i) - { - nbr++; - s += QString("
    "); - } - CurrentNumLine = DBGManager_GetNumLineFromAdr(pc, DBG_NO_TAG) - 1; - nbr++; CurrentPtrFullSource = (char *)realloc(CurrentPtrFullSource, strlen(PtrFullSource) + 1); strcpy(CurrentPtrFullSource, PtrFullSource); - if (!Error) +#if defined(MD_LAYOUTFILE) + if (Status) { + // Referenced filename doesn't exist sprintf(string, "%s
    ", PtrFullSource); +#if MD_LAYOUTFILE == 1 + // Display status bar + if ((Status & DBGSTATUS_OUTDATEDFILE)) + { + statusbar->setStyleSheet("background-color: lightyellow; font: bold"); + statusbar->showMessage(QString("Outdated source file")); + } + else + { + statusbar->setStyleSheet("background-color: tomato; font: bold"); + statusbar->showMessage(QString("Unavailable source file")); + } +#endif } else { + // Referenced filename does exist sprintf(string, "%s
    ", PtrFullSource); +#if MD_LAYOUTFILE == 1 + // Display status bar + statusbar->setStyleSheet("background-color: transparent; font: bold"); + statusbar->showMessage(QString("")); +#endif } + nbr++; s += QString(string); +#endif } } - - // Display line number based on the program address - if ((NumLine = DBGManager_GetNumLineFromAdr(oldpc, DBG_NO_TAG)) && ((signed)NumLine > (signed)CurrentNumLine)) + else { - if ((signed)CurrentNumLine < 0) + // Display line number based on the program address + if ((NumLine = DBGManager_GetNumLineFromAdr(oldpc, DBG_NO_TAG)) && ((signed)NumLine > (signed)CurrentNumLine) && !Status) { - CurrentNumLine = NumLine - 1; +#if MD_LAYOUTFILE != 1 + if ((signed)CurrentNumLine < 0) + { + CurrentNumLine = NumLine - 1; + } +#endif + sprintf(string, "| %5u | ", (unsigned int)++CurrentNumLine); // (CurrentNumLine = NumLine)); + } + else + { + sprintf(string, "| | "); } - sprintf(string, "| %5u | ", (unsigned int)++CurrentNumLine); // (CurrentNumLine = NumLine)); - } - else - { - sprintf(string, "| | "); - } - s += QString(string); - - // Display line source based on the program address - if (((signed)CurrentNumLine > 0) && (LineSrc = DBGManager_GetLineSrcFromNumLineBaseAdr(oldpc, CurrentNumLine)) && (LineSrc != CurrentLineSrc)) - { - sprintf(string, "%s
    ", (CurrentLineSrc = LineSrc)); s += QString(string); - nbr++; - } - else - { - // Display symbol, or line source, based on the program address - if (!CurrentLineSrc && !Symbol && (Symbol = DBGManager_GetSymbolNameFromAdr(oldpc))) + + // Display line source based on the program address + if (((signed)CurrentNumLine > 0) && (LineSrc = DBGManager_GetLineSrcFromNumLineBaseAdr(oldpc, CurrentNumLine)) && (LineSrc != CurrentLineSrc)) { - sprintf(string, "%s:
    ", Symbol); +#if 0 + // add a color on the line text + sprintf(string, "%s
    ", (CurrentLineSrc = LineSrc)); s += QString(string); +#else + // add a color on the line text with HTML encoding + s += QString(""); + s += QString(QString((CurrentLineSrc = LineSrc)).toHtmlEscaped()); + s += QString("
    "); +#endif nbr++; } - // Display the assembly line based on the current PC else { - pc += m68k_disassemble(buffer, (unsigned int)pc, 0, vjs.disasmopcodes); - - if (m68kPC == oldpc) + // Display symbol, or line source, based on the program address + if (!CurrentLineSrc && !Symbol && (Symbol = DBGManager_GetSymbolNameFromAdr(oldpc))) { - sprintf(string, "-> %06X: %s
    ", (unsigned int)oldpc, buffer); - m68kPCShow = true; - m68KPCNbrDisasmLines = i; + sprintf(string, "%s:
    ", Symbol); + s += QString(string); + nbr++; } + // Display the assembly line based on the current PC else { - sprintf(string, " %06X: %s
    ", (unsigned int)oldpc, buffer); - } + pc += m68k_disassemble(buffer, (unsigned int)pc, 0, vjs.disasmopcodes); - buffer[0] = 0; // Clear string - - for (j = 0; j < strlen(string); j++) - { - if (string[j] == ' ') + if (m68kPC == oldpc) { - strcat(buffer, " "); - adr = constant = false; + sprintf(string, "-> %06X: %s
    ", (unsigned int)oldpc, buffer); + m68kPCShow = true; + m68KPCNbrDisasmLines = i; } else { - switch (string[j]) - { - case '#': - constant = true; - break; - - case '$': - adr = true; - break; + sprintf(string, " %06X: %s
    ", (unsigned int)oldpc, buffer); + } - case ',': - constant = adr = equal = false; - break; + buffer[0] = 0; // Clear string - case '=': - equal = true; - break; + for (j = 0; j < strlen(string); j++) + { + if (string[j] == ' ') + { + strcat(buffer, " "); + adr = constant = false; } - - if (!constant && adr && !equal) + else { - int l = 0; - char *p; - do + switch (string[j]) { - adresse[l++] = string[++j]; - } while ((string[(j + 1)] >= '0') && (string[(j + 1)] <= '9') || (string[(j + 1)] >= 'A') && (string[(j + 1)] <= 'F')); - adresse[l] = 0; + case '#': + constant = true; + break; + + case '$': + adr = true; + break; - if (Symbol = DBGManager_GetSymbolNameFromAdr(strtoul(adresse, &p, 16))) + case ',': + constant = adr = equal = false; + break; + + case '=': + equal = true; + break; + } + + if (!constant && adr && !equal) { - strcat(buffer, Symbol); + int l = 0; + char *p; + do + { + adresse[l++] = string[++j]; + } while ((string[(j + 1)] >= '0') && (string[(j + 1)] <= '9') || (string[(j + 1)] >= 'A') && (string[(j + 1)] <= 'F')); + adresse[l] = 0; + + if (Symbol = DBGManager_GetSymbolNameFromAdr(strtoul(adresse, &p, 16))) + { + strcat(buffer, Symbol); + } + else + { + strcat(buffer, "$"); + strcat(buffer, adresse); + } + + adr = false; } else { - strcat(buffer, "$"); - strcat(buffer, adresse); + singleCharString[0] = string[j]; + strcat(buffer, singleCharString); } - - adr = false; - } - else - { - singleCharString[0] = string[j]; - strcat(buffer, singleCharString); } } - } - Symbol = NULL; - s += QString(buffer); + Symbol = NULL; + s += QString(buffer); + } } } } @@ -231,7 +296,7 @@ void m68KDasmWindow::RefreshContents(void) // Set mem base PC address using the 68K pc current address -void m68KDasmWindow::Use68KPCAddress(void) +void m68KDasmWindow::Use68KPCAddress(void) { memBase = m68k_get_reg(NULL, M68K_REG_PC); } diff --git a/src/debugger/m68kDasmWin.h b/src/debugger/m68kDasmWin.h index 7ac5da6..a5081a2 100644 --- a/src/debugger/m68kDasmWin.h +++ b/src/debugger/m68kDasmWin.h @@ -6,12 +6,20 @@ // Who When What // --- ---------- ------------------------------------------------------------- // JPM 06/27/2016 Created this file +// JPM Aug./2020 Added different layouts, and a status bar // #ifndef __M68KDASMWIN_H__ #define __M68KDASMWIN_H__ -#include +#define MD_LAYOUTTEXTS // Use a layout with just texts otherwise the new layout is used +#ifdef MD_LAYOUTTEXTS +#define MD_LAYOUTFILE 1 // Display the filenames (1: display only the first filename) +#else +#define MD_LAYOUTFILE 1 // Must display only the first filename +#endif + +#include #include class m68KDasmWindow: public QWidget @@ -30,7 +38,12 @@ class m68KDasmWindow: public QWidget private: QVBoxLayout *layout; +#if MD_LAYOUTFILE == 1 + QStatusBar *statusbar; +#endif +#ifdef MD_LAYOUTTEXTS QTextBrowser *text; +#endif size_t memBase; }; diff --git a/src/debugger/memory1browser.h b/src/debugger/memory1browser.h index 231db04..440b6af 100644 --- a/src/debugger/memory1browser.h +++ b/src/debugger/memory1browser.h @@ -7,7 +7,7 @@ #ifndef __MEMORY1BROWSER_H__ #define __MEMORY1BROWSER_H__ -#include +#include #include class Memory1BrowserWindow: public QWidget diff --git a/src/eeprom.cpp b/src/eeprom.cpp index 9062c2c..7e21166 100644 --- a/src/eeprom.cpp +++ b/src/eeprom.cpp @@ -9,14 +9,19 @@ // JLH = James Hammons // JPM = Jean-Paul Mari // -// Who When What -// --- ---------- ------------------------------------------------------------ -// JLH 01/16/2010 Created this log ;-) -// JPM 10/11/2017 Directory detection and creation if missing +// Who When (MM/DD/YY) What +// --- --------------- ------------------------------------------------------------ +// JLH 01/16/2010 Created this log ;-) +// JPM 10/11/2017 EEPROM directory detection and creation if missing +// JPM 11/18/2020 EEPROM directory creation allowed only for Windows // #include "eeprom.h" +#if _WIN32 || _WIN64 #include +#else +#define _mkdir(dir) 1 +#endif #include #include // For memset #include "jaguar.h" @@ -114,10 +119,14 @@ void EepromInit(void) void EepromReset(void) { if (!haveEEPROM) + { memset(eeprom_ram, 0xFF, 64 * sizeof(uint16_t)); + } if (!haveCDROMEEPROM) + { memset(cdromEEPROM, 0xFF, 64 * sizeof(uint16_t)); + } } @@ -173,8 +182,10 @@ void ReadEEPROMFromFile(FILE * file, uint16_t * ram) uint8_t buffer[128]; size_t ignored = fread(buffer, 1, 128, file); - for(int i=0; i<64; i++) + for (int i = 0; i < 64; i++) + { ram[i] = (buffer[(i * 2) + 0] << 8) | buffer[(i * 2) + 1]; + } } diff --git a/src/file.cpp b/src/file.cpp index a296bd0..9201c1e 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -7,6 +7,7 @@ // // JLH = James Hammons // JPM = Jean-Paul Mari +// RG = Richard Goedeken // // Who When What // --- ---------- ------------------------------------------------------------ @@ -16,6 +17,9 @@ // JPM June/2016 Visual Studio support, ELF format support and Soft debugger support // JPM 07/15/2016 DWARF format support // JPM 04/06/2019 Added ELF sections check +// JPM 03/12/2020 Added ELF section types check and new error messages +// JPM Aug./2020 ELF executable file information +// RG Jan./2021 Linux build fixes // #include "file.h" @@ -24,6 +28,8 @@ #endif // _MSC_VER #include #include +#include +#include #include "crc32.h" #include "filedb.h" #include "eeprom.h" @@ -33,8 +39,8 @@ #include "universalhdr.h" #include "unzip.h" #include "zlib.h" -#include "libelf/libelf.h" -#include "libelf/gelf.h" +#include "libelf.h" +#include "gelf.h" #include "libdwarf.h" #include "debugger/ELFManager.h" #include "debugger/DBGManager.h" @@ -146,6 +152,7 @@ bool JaguarLoadFile(char * path) int DBGType = DBG_NO_TYPE; bool error; int err; + struct stat _statbuf; jaguarROMSize = JaguarLoadROM(buffer, path); @@ -199,9 +206,13 @@ WriteLog("FILE: Cartridge run address is reported as $%X...\n", jaguarRunAddress if (PtrELFExe != NULL) { + // check the ELF version if ((elf_version(EV_CURRENT) != EV_NONE) && (ElfMem = ELFManager_MemOpen(PtrELFExe, jaguarROMSize))) { - if (ELFManager_DwarfInit(ElfMem)) + // get the file information + stat(path, &_statbuf); + + if (ELFManager_DwarfInit(ElfMem, _statbuf)) { DBGType |= DBG_ELFDWARF; } @@ -232,10 +243,10 @@ WriteLog("FILE: Cartridge run address is reported as $%X...\n", jaguarRunAddress { switch (PtrGElfShdr->sh_type) { - case SHT_NULL: + case SHT_NULL: break; - case SHT_PROGBITS: + case SHT_PROGBITS: if ((PtrGElfShdr->sh_flags & (SHF_ALLOC | SHF_WRITE | SHF_EXECINSTR))) { if (PtrGElfShdr->sh_addr >= 0x800000) @@ -252,14 +263,19 @@ WriteLog("FILE: Cartridge run address is reported as $%X...\n", jaguarRunAddress { switch (ElfSectionNameType) { + case ELF_debug_TYPE: + case ELF_debug_abbrev_TYPE: case ELF_debug_aranges_TYPE: + case ELF_debug_frame_TYPE: case ELF_debug_info_TYPE: - case ELF_debug_abbrev_TYPE: case ELF_debug_line_TYPE: - case ELF_debug_frame_TYPE: + case ELF_debug_loc_TYPE: + case ELF_debug_macinfo_TYPE: + case ELF_debug_pubnames_TYPE: + case ELF_debug_pubtypes_TYPE: case ELF_debug_ranges_TYPE: case ELF_debug_str_TYPE: - case ELF_debug_loc_TYPE: + case ELF_debug_types_TYPE: break; case ELF_heap_TYPE: @@ -269,27 +285,30 @@ WriteLog("FILE: Cartridge run address is reported as $%X...\n", jaguarRunAddress break; default: + WriteLog("FILE: ELF section %s is not recognized\n", NameSection); error = true; break; } } break; - case SHT_NOBITS: + case SHT_NOBITS: break; - case SHT_STRTAB: - case SHT_SYMTAB: + case SHT_STRTAB: + case SHT_SYMTAB: while ((error == false) && ((PtrElfData = elf_getdata(PtrElfScn, PtrElfData)) != NULL)) { if (!ELFManager_AddTab(PtrElfData, ElfSectionNameType)) { + WriteLog("FILE: ELF tab cannot be allocated\n"); error = true; } } break; default: + WriteLog("FILE: ELF SHT type %i not recognized\n", PtrGElfShdr->sh_type); error = true; break; } @@ -297,6 +316,7 @@ WriteLog("FILE: Cartridge run address is reported as $%X...\n", jaguarRunAddress } } + // Set the executable address jaguarRunAddress = (uint32_t)PtrGElfEhdr->e_entry; WriteLog("FILE: Setting up ELF 32bits... Run address: %08X\n", jaguarRunAddress); } @@ -307,6 +327,7 @@ WriteLog("FILE: Cartridge run address is reported as $%X...\n", jaguarRunAddress } else { + WriteLog("FILE: Cannot get the number of the ELF sections\n"); error = true; } } diff --git a/src/gui/about.cpp b/src/gui/about.cpp index 3f8cd21..e749ea1 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -35,7 +35,7 @@ AboutWindow::AboutWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog) QString s; s.append(tr( - "" + "" "" "
    Version: " VJ_RELEASE_VERSION " (" VJ_RELEASE_SUBVERSION ") Rx" @@ -48,7 +48,7 @@ AboutWindow::AboutWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog) "

    " "Rx version:" "
    " - "Jean-Paul Mari for the debugger integration, ELF/DWARF format, Win64 & Visual Studio 2015/2017 support" + "Jean-Paul Mari for the debugger integration, ELF/DWARF format, Win64 & Visual Studio 2017 support, among additional improvements" "

    " "The Virtual Jaguar team would like to express their gratitude to:" "

    " @@ -69,6 +69,9 @@ AboutWindow::AboutWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog) void AboutWindow::keyPressEvent(QKeyEvent * e) { - if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Return) + // close the window + if ((e->key() == Qt::Key_Escape) || (e->key() == Qt::Key_Return)) + { hide(); + } } diff --git a/src/gui/about.h b/src/gui/about.h index 90d825f..685aba9 100644 --- a/src/gui/about.h +++ b/src/gui/about.h @@ -8,7 +8,7 @@ #ifndef __ABOUT_H__ #define __ABOUT_H__ -#include +#include class AboutWindow: public QWidget { diff --git a/src/gui/alpinetab.cpp b/src/gui/alpinetab.cpp index 23f8b24..bbd12b6 100644 --- a/src/gui/alpinetab.cpp +++ b/src/gui/alpinetab.cpp @@ -12,6 +12,7 @@ // --- ---------- ------------------------------------------------------------ // JLH 07/15/2011 Created this file // JPM 09/03/2018 Depend the platform transform slashes or backslashes +// JPM Feb./2021 Added a M68K exception catch check // #include "alpinetab.h" @@ -59,7 +60,8 @@ AlpineTab::AlpineTab(QWidget * parent/*= 0*/): QWidget(parent) layout4->addLayout(layout3); // Checkboxes... - writeROM = new QCheckBox(tr("Allow writes to cartridge ROM")); + writeROM = new QCheckBox(tr("Allow writes to cartridge ROM")); + M68KExceptionCatch = new QCheckBox(tr("Allow M68000 exception catch")); // useDSP = new QCheckBox(tr("Enable DSP")); // useHostAudio = new QCheckBox(tr("Enable audio playback")); // useUnknownSoftware = new QCheckBox(tr("Allow unknown software in file chooser")); @@ -67,6 +69,7 @@ AlpineTab::AlpineTab(QWidget * parent/*= 0*/): QWidget(parent) //writeROM->setDisabled(true); layout4->addWidget(writeROM); + layout4->addWidget(M68KExceptionCatch); // layout4->addWidget(useDSP); // layout4->addWidget(useHostAudio); // layout4->addWidget(useUnknownSoftware); @@ -89,6 +92,7 @@ void AlpineTab::GetSettings(void) edit2->setText(vjs.absROMPath); edit3->setText(v.toString()); writeROM->setChecked(vjs.allowWritesToROM); + M68KExceptionCatch->setChecked(vjs.allowM68KExceptionCatch); } @@ -101,6 +105,7 @@ void AlpineTab::SetSettings(void) strcpy(vjs.absROMPath, CheckForSlashes(edit2->text()).toUtf8().data()); vjs.refresh = edit3->text().toUInt(&ok, 10); vjs.allowWritesToROM = writeROM->isChecked(); + vjs.allowM68KExceptionCatch = M68KExceptionCatch->isChecked(); } diff --git a/src/gui/alpinetab.h b/src/gui/alpinetab.h index 81adae8..13312c3 100644 --- a/src/gui/alpinetab.h +++ b/src/gui/alpinetab.h @@ -1,7 +1,7 @@ #ifndef __ALPINETAB_H__ #define __ALPINETAB_H__ -#include +#include class AlpineTab: public QWidget { @@ -23,6 +23,7 @@ class AlpineTab: public QWidget // QLineEdit * edit3; // QLineEdit * edit4; QCheckBox * writeROM; + QCheckBox * M68KExceptionCatch; // QCheckBox * useDSP; // QCheckBox * useHostAudio; // QCheckBox * useUnknownSoftware; diff --git a/src/gui/app.cpp b/src/gui/app.cpp index 9392692..bc56752 100644 --- a/src/gui/app.cpp +++ b/src/gui/app.cpp @@ -24,7 +24,7 @@ #include "app.h" #include -#include +#include #include "gamepad.h" #include "log.h" #include "mainwin.h" @@ -174,7 +174,7 @@ bool ParseCommandLine(int argc, char * argv[]) if ((strcmp(argv[i], "--help") == 0) || (strcmp(argv[i], "-h") == 0) || (strcmp(argv[i], "-?") == 0)) { printf( - "Virtual Jaguar " VJ_RELEASE_VERSION " (" VJ_RELEASE_SUBVERSION ") Rx\n" + "Virtual Jaguar " VJ_RELEASE_VERSION " (" VJ_RELEASE_SUBVERSION ") Rx - " __DATE__ "\n" "Based upon Virtual Jaguar core v1.0.0 by David Raingeard.\n" "Based upon the work by James Hammons (Linux/WIN32), Niels Wagenaar (Linux/WIN32),\n" "Carwin Jones (BeOS), and Adam Green (MacOS)\n" diff --git a/src/gui/app.h b/src/gui/app.h index 090efdf..c18eb34 100644 --- a/src/gui/app.h +++ b/src/gui/app.h @@ -9,7 +9,7 @@ #define __APP_H__ //Hrm. uh??? I thought this wasn't the way to do this stuff...??? -#include +#include // Forward declarations class MainWin; diff --git a/src/gui/configdialog.cpp b/src/gui/configdialog.cpp index 1218bb4..a665730 100644 --- a/src/gui/configdialog.cpp +++ b/src/gui/configdialog.cpp @@ -6,6 +6,7 @@ // // JLH = James Hammons // JPM = Jean-Paul Mari +// RG = Richard Goedeken // // Who When What // --- ---------- ------------------------------------------------------------ @@ -16,6 +17,7 @@ // JPM 06/19/2016 Soft debugger support // JPM 09/ /2017 Added a Keybindings tab // JPM 09/03/2018 Added a Models & Bios tab +// RG Jan./2021 Linux build fix // #include "configdialog.h" @@ -25,7 +27,7 @@ #include "controllerwidget.h" #include "generaltab.h" #include "modelsbiostab.h" -#include "KeyBindingsTab.h" +#include "keybindingstab.h" #include "settings.h" diff --git a/src/gui/configdialog.h b/src/gui/configdialog.h index e200b4e..ff105ea 100644 --- a/src/gui/configdialog.h +++ b/src/gui/configdialog.h @@ -17,7 +17,7 @@ #define NEWMODELSBIOSHANDLER // New Jaguar models and bios usage handler -#include +#include class GeneralTab; #ifdef NEWMODELSBIOSHANDLER diff --git a/src/gui/controllertab.h b/src/gui/controllertab.h index 5862eb3..2052313 100644 --- a/src/gui/controllertab.h +++ b/src/gui/controllertab.h @@ -1,7 +1,7 @@ #ifndef __CONTROLLERTAB_H__ #define __CONTROLLERTAB_H__ -#include +#include #include class ControllerWidget; diff --git a/src/gui/controllerwidget.h b/src/gui/controllerwidget.h index 2613486..1bc497a 100644 --- a/src/gui/controllerwidget.h +++ b/src/gui/controllerwidget.h @@ -1,7 +1,7 @@ #ifndef __CONTROLLERWIDGET_H__ #define __CONTROLLERWIDGET_H__ -#include +#include #include class ControllerWidget: public QWidget diff --git a/src/gui/debug/cpubrowser.cpp b/src/gui/debug/cpubrowser.cpp index a2c9c8e..a394f97 100644 --- a/src/gui/debug/cpubrowser.cpp +++ b/src/gui/debug/cpubrowser.cpp @@ -71,7 +71,7 @@ void CPUBrowserWindow::RefreshContents(void) // 68K uint32_t m68kPC = m68k_get_reg(NULL, M68K_REG_PC); uint32_t m68kSR = m68k_get_reg(NULL, M68K_REG_SR); - sprintf(string, "PC: %06X  SR: %04X

    ", m68kPC, m68kSR); + sprintf(string, "PC: %06X  SR: %04X : %c%c%c%c%c%c%c

    ", m68kPC, m68kSR, ((m68kSR & 0x8000) ? 'T': '-'), ((m68kSR & 0x2000) ? 'S' : '-'), ((m68kSR & 0x10) ? 'X' : '-'), ((m68kSR & 0x8) ? 'N' : '-'), ((m68kSR & 0x4) ? 'Z' : '-'), ((m68kSR & 0x2) ? 'V' : '-'), ((m68kSR & 0x1) ? 'C' : '-')); s += QString(string); /* SR format: diff --git a/src/gui/debug/cpubrowser.h b/src/gui/debug/cpubrowser.h index f8c95da..e146ec2 100644 --- a/src/gui/debug/cpubrowser.h +++ b/src/gui/debug/cpubrowser.h @@ -8,7 +8,7 @@ #ifndef __CPUBROWSER_H__ #define __CPUBROWSER_H__ -#include +#include #include class CPUBrowserWindow: public QWidget diff --git a/src/gui/debug/hwregsblitterbrowser.cpp b/src/gui/debug/hwregsblitterbrowser.cpp new file mode 100644 index 0000000..0b17a32 --- /dev/null +++ b/src/gui/debug/hwregsblitterbrowser.cpp @@ -0,0 +1,139 @@ +// +// hwregsbrowser.h: Hardware registers blitter browser +// +// by Jean-Paul Mari +// +// JPM = Jean-Paul Mari +// +// Who When What +// --- ---------- ----------------------------------------------------------- +// JPM 08/20/2019 Created this file +// + +// STILL TO DO: +// + +#include "hwregsbrowser.h" +#include "blitter.h" + + +// +struct BlitterInfoTable +{ + unsigned int Address; + unsigned int NbBits; + const char *Name; + const char *Type; +} +S_BlitterInfoTable; + +// +BlitterInfoTable TabBlitterInfoTable[] = { + { 0xF02200, sizeof(long), "A1 base address", "32-bit register containing a pointer to the base of the window pointer to by A1.\nThis address must be phrase aligned." }, + { 0xF02204, sizeof(long), "Flags Register", "A set of flags controlling various aspects of the A1 window and how addresses are updated." }, + { 0xF02208, sizeof(long), "A1 Clipping Window Size", "This register contains the size in pixels, and may be used for clipping writes, so that if the pointer leaves the window bounds no write is performed." }, + { 0xF0220C, sizeof(long), "A1 Window Pixel Pointer", "This register contains the X (low word) and Y (high word) pointers onto the window, and are the location where the next pixel will be written.\nThey are sixteen - bit signed values." }, + { 0xF02210, sizeof(long), "A1 Step Value", "The step register contains two signed sixteen bit values, which are the X step (low word) and Y step (high word)." }, + { 0xF02214, sizeof(long), "A1 Step Fraction Value", "The step fraction register may be added to the fractional parts of the A1 pointer in the same manner as the step value." }, + { 0xF02218, sizeof(long), "A1 Window Pixel Pointer Fraction", "" }, + { 0xF0221C, sizeof(long), "A1 Pixel Pointer Increment", "" }, + { 0xF02220, sizeof(long), "A1 Pixel Pointer Increment Fraction", "This is the fractional parts of the increment described above." }, + { 0xF02224, sizeof(long), "A2 Base Register", "32-bit register containing a pointer to the base of the window pointer to by A2.\nThis address must be phrase aligned." }, + { 0xF02228, sizeof(long), "A2 Flags Register", "A set of flags controlling various aspects of the A2 window and how addresses are updated." }, + { 0xF0222C, sizeof(long), "A2 Window Mask", "" }, + { 0xF02230, sizeof(long), "A2 Window Pointer", "" }, + { 0xF02234, sizeof(long), "A2 Step Value", "" }, + { 0xF02238, sizeof(long), "Status Register", "" }, + { 0xF0223C, sizeof(long), "Counters Register", "" }, + { 0xF02240, sizeof(long long), "Source Data Register", "" }, + { 0xF02248, sizeof(long long), "Destination Data Register", "" }, + { 0xF02250, sizeof(long long), "Destination Z Register", "" }, + { 0xF02258, sizeof(long long), "Source Z Register 1", "The source Z register 1 is also used to hold the four integer parts of computed Z." }, + { 0xF02260, sizeof(long long), "Source Z Register 2", "The source Z register 2 is also used to hold the four fraction parts of computed Z." }, + { 0xF02268, sizeof(long long), "Pattern Data Register", "The pattern data register also serves to hold the computed intensity integer parts and their associated colours." }, + { 0xF02270, sizeof(long), "Intensity Increment", "This thirty-two bit register holds the integer and fractional parts of the intensity increment used for Gouraud shading." }, + { 0xF02274, sizeof(long), "Z Increment", "This thirty-two bit register holds the integer and fractional parts of the Z increment used for computed Z polygon drawing." }, + { 0xF02278, sizeof(long), "Collision control", "" }, + { 0xF0227C, sizeof(long), "Intensity 0", "" }, + { 0xF02280, sizeof(long), "Intensity 1", "" }, + { 0xF02284, sizeof(long), "Intensity 2", "" }, + { 0xF02288, sizeof(long), "Intensity 3", "" }, + { 0xF0228C, sizeof(long), "Z 0", "These registers are analogous to the intensity registers, and are for Z buffer operation." }, + { 0xF02290, sizeof(long), "Z 1", "These registers are analogous to the intensity registers, and are for Z buffer operation." }, + { 0xF02294, sizeof(long), "Z 2", "These registers are analogous to the intensity registers, and are for Z buffer operation." }, + { 0xF02298, sizeof(long), "Z 3", "These registers are analogous to the intensity registers, and are for Z buffer operation." }, + }; + + +// +HWRegsBlitterBrowserWindow::HWRegsBlitterBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog), +layout(new QVBoxLayout), +TableView(new QTableView), +model(new QStandardItemModel) +{ + unsigned int i; + + // Set the font + QFont fixedFont("Lucida Console", 8, QFont::Normal); + fixedFont.setStyleHint(QFont::TypeWriter); + + // Set the new layout with proper identation and readibility + model->setColumnCount(4); + model->setHeaderData(0, Qt::Horizontal, QObject::tr("Name")); + model->setHeaderData(1, Qt::Horizontal, QObject::tr("Address")); + model->setHeaderData(2, Qt::Horizontal, QObject::tr("# bits")); + model->setHeaderData(3, Qt::Horizontal, QObject::tr("Value")); + //model->setHeaderData(4, Qt::Horizontal, QObject::tr("Reference")); + // Information table + TableView->setModel(model); + TableView->setEditTriggers(QAbstractItemView::NoEditTriggers); + TableView->setShowGrid(0); + TableView->setFont(fixedFont); + TableView->verticalHeader()->setDefaultSectionSize(TableView->verticalHeader()->minimumSectionSize()); + TableView->verticalHeader()->setDefaultAlignment(Qt::AlignRight); + + // Set basic infos in the layout + for (i = 0; i < (sizeof(TabBlitterInfoTable) / sizeof(struct BlitterInfoTable)); i++) + { + model->insertRow(i); + model->setItem(i, 0, new QStandardItem(QString("%1").arg(TabBlitterInfoTable[i].Name))); + model->setItem(i, 1, new QStandardItem(QString("0x%1").arg(TabBlitterInfoTable[i].Address, 4, 16, QChar('0')))); + model->setItem(i, 2, new QStandardItem(QString("%1").arg(TabBlitterInfoTable[i].NbBits * 8))); + //model->setItem(i, 4, new QStandardItem(QString("%1").arg(TabBlitterInfoTable[i].Type))); + } + + // Set the layout + layout->addWidget(TableView); + setLayout(layout); +} + + +// +HWRegsBlitterBrowserWindow::~HWRegsBlitterBrowserWindow(void) +{ + Reset(); +} + + +// +void HWRegsBlitterBrowserWindow::Reset(void) +{ +} + + +// +void HWRegsBlitterBrowserWindow::RefreshContents(void) +{ + char string[1024]; + unsigned int i; + + if (isVisible()) + { + for (i = 0; i < (sizeof(TabBlitterInfoTable) / sizeof(struct BlitterInfoTable)); i++) + { + // Emulator handles the blitter in a separate array + sprintf(string, "0x%08x", BlitterReadLong(TabBlitterInfoTable[i].Address)); + model->setItem(i, 3, new QStandardItem(QString("%1").arg(string))); + } + } +} diff --git a/src/gui/debug/hwregsblitterbrowser.h b/src/gui/debug/hwregsblitterbrowser.h new file mode 100644 index 0000000..4620a2d --- /dev/null +++ b/src/gui/debug/hwregsblitterbrowser.h @@ -0,0 +1,37 @@ +// +// hwregsblitterbrowser.h: Hardware registers blitter browser +// +// by Jean-Paul Mari +// + +#ifndef __HWREGSBLITTERBROWSER_H__ +#define __HWREGSBLITTERBROWSER_H__ + +#include +#include + + +// +class HWRegsBlitterBrowserWindow : public QWidget +{ + Q_OBJECT + +public: + HWRegsBlitterBrowserWindow(QWidget *parent = 0); + ~HWRegsBlitterBrowserWindow(void); + void Reset(void); + +public slots: + void RefreshContents(void); + +protected: + //void keyPressEvent(QKeyEvent *); + +private: + QVBoxLayout *layout; + QTableView *TableView; + QStandardItemModel *model; +}; + + +#endif diff --git a/src/gui/debug/hwregsbrowser.cpp b/src/gui/debug/hwregsbrowser.cpp new file mode 100644 index 0000000..97e03cf --- /dev/null +++ b/src/gui/debug/hwregsbrowser.cpp @@ -0,0 +1,70 @@ +// +// hwregsbrowser.h: Hardware registers browser +// +// by Jean-Paul Mari +// +// JPM = Jean-Paul Mari +// +// Who When What +// --- ---------- ----------------------------------------------------------- +// JPM 08/20/2019 Created this file +// + +// STILL TO DO: +// + +#include "hwregsbrowser.h" + + +// +HWRegsBrowserWindow::HWRegsBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog), +layout(new QVBoxLayout), +//statusbar(new QStatusBar), +hwregstabWidget(new QTabWidget), +hwregsblitterWin(new HWRegsBlitterBrowserWindow) +{ + setWindowTitle(tr("Hardware Registers Browser")); + + // Set the font + QFont fixedFont("Lucida Console", 8, QFont::Normal); + fixedFont.setStyleHint(QFont::TypeWriter); + + // + hwregstabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + hwregstabWidget->addTab(hwregsblitterWin, tr("Blitter")); + layout->addWidget(hwregstabWidget); + + // Status bar + //layout->addWidget(statusbar); + setLayout(layout); +} + + +// +HWRegsBrowserWindow::~HWRegsBrowserWindow(void) +{ + Reset(); +} + + +// +void HWRegsBrowserWindow::Reset(void) +{ +} + + +// +void HWRegsBrowserWindow::RefreshContents(void) +{ + hwregsblitterWin->RefreshContents(); +} + + +// +void HWRegsBrowserWindow::keyPressEvent(QKeyEvent * e) +{ + if (e->key() == Qt::Key_Escape) + { + hide(); + } +} diff --git a/src/gui/debug/hwregsbrowser.h b/src/gui/debug/hwregsbrowser.h new file mode 100644 index 0000000..db0affc --- /dev/null +++ b/src/gui/debug/hwregsbrowser.h @@ -0,0 +1,39 @@ +// +// hwregsbrowser.h: Hardware registers browser +// +// by Jean-Paul Mari +// + +#ifndef __HWREGSBROWSER_H__ +#define __HWREGSBROWSER_H__ + +#include +#include +#include "hwregsblitterbrowser.h" + + +// +class HWRegsBrowserWindow : public QWidget +{ + Q_OBJECT + +public: + HWRegsBrowserWindow(QWidget *parent = 0); + ~HWRegsBrowserWindow(void); + void Reset(void); + +public slots: + void RefreshContents(void); + +protected: + void keyPressEvent(QKeyEvent *); + +private: + //QStatusBar *statusbar; + QVBoxLayout *layout; + QTabWidget *hwregstabWidget; + HWRegsBlitterBrowserWindow *hwregsblitterWin; +}; + + +#endif diff --git a/src/gui/debug/m68kdasmbrowser.h b/src/gui/debug/m68kdasmbrowser.h index 8d83adf..ec65a61 100644 --- a/src/gui/debug/m68kdasmbrowser.h +++ b/src/gui/debug/m68kdasmbrowser.h @@ -8,7 +8,7 @@ #ifndef __M68KDASMBROWSER_H__ #define __M68KDASMBROWSER_H__ -#include +#include #include class M68KDasmBrowserWindow: public QWidget diff --git a/src/gui/debug/memorybrowser.h b/src/gui/debug/memorybrowser.h index ec368ab..5220760 100644 --- a/src/gui/debug/memorybrowser.h +++ b/src/gui/debug/memorybrowser.h @@ -8,7 +8,7 @@ #ifndef __MEMORYBROWSER_H__ #define __MEMORYBROWSER_H__ -#include +#include #include class MemoryBrowserWindow: public QWidget diff --git a/src/gui/debug/opbrowser.h b/src/gui/debug/opbrowser.h index 8790783..72fd9c3 100644 --- a/src/gui/debug/opbrowser.h +++ b/src/gui/debug/opbrowser.h @@ -8,7 +8,7 @@ #ifndef __OPBROWSER_H__ #define __OPBROWSER_H__ -#include +#include #include class OPBrowserWindow: public QWidget diff --git a/src/gui/debug/riscdasmbrowser.h b/src/gui/debug/riscdasmbrowser.h index 224c8e3..2311a99 100644 --- a/src/gui/debug/riscdasmbrowser.h +++ b/src/gui/debug/riscdasmbrowser.h @@ -8,7 +8,7 @@ #ifndef __RISCDASMBROWSER_H__ #define __RISCDASMBROWSER_H__ -#include +#include #include class RISCDasmBrowserWindow: public QWidget diff --git a/src/gui/debug/stackbrowser.h b/src/gui/debug/stackbrowser.h index 0fc5f66..0348466 100644 --- a/src/gui/debug/stackbrowser.h +++ b/src/gui/debug/stackbrowser.h @@ -8,7 +8,7 @@ #ifndef __STACKBROWSER_H__ #define __STACKBROWSER_H__ -#include +#include #include class StackBrowserWindow: public QWidget diff --git a/src/gui/emustatus.cpp b/src/gui/emustatus.cpp index 73f5b81..3a3cc12 100644 --- a/src/gui/emustatus.cpp +++ b/src/gui/emustatus.cpp @@ -8,6 +8,7 @@ // Who When What // --- ---------- ----------------------------------------------------------- // JPM 02/02/2017 Created this file +// JPM Apr./2021 Display number of M68K cycles used in tracing mode // // STILL TO DO: @@ -22,10 +23,13 @@ // -EmuStatusWindow::EmuStatusWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog), - layout(new QVBoxLayout), - text(new QLabel), - GPURunning(GPUIsRunning()) +EmuStatusWindow::EmuStatusWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog), +layout(new QVBoxLayout), +resetcycles(new QPushButton(tr("Reset cycles"))), +text(new QLabel), +M68K_totalcycles(0), +M68K_opcodecycles(0), +GPURunning(GPUIsRunning()) { setWindowTitle(tr("Emulator status")); @@ -35,6 +39,31 @@ EmuStatusWindow::EmuStatusWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::D setLayout(layout); layout->addWidget(text); + layout->addWidget(resetcycles); + + connect(resetcycles, SIGNAL(clicked()), this, SLOT(ResetCycles())); +} + + +// +void EmuStatusWindow::ResetCycles(void) +{ + ResetM68KCycles(); + RefreshContents(); +} + + +// +void EmuStatusWindow::ResetM68KCycles(void) +{ + M68K_totalcycles = M68K_opcodecycles = 0; +} + + +// +void EmuStatusWindow::UpdateM68KCycles(size_t cycles) +{ + M68K_totalcycles += (M68K_opcodecycles = cycles); } @@ -56,7 +85,11 @@ void EmuStatusWindow::RefreshContents(void) emuStatusDump += QString(string); sprintf(string, " M68K tracing | %s\n", (startM68KTracing ? "On" : "Off")); emuStatusDump += QString(string); - sprintf(string, " DRAM | %i KB", (vjs.DRAM_size / 1024)); + sprintf(string, " DRAM | %zi KB\n", (vjs.DRAM_size / 1024)); + emuStatusDump += QString(string); + sprintf(string, " M68K tracing | %zi cycle%s\n", M68K_opcodecycles, (M68K_opcodecycles ? "s" : "")); + emuStatusDump += QString(string); + sprintf(string, " M68K tracing total | %zi cycle%s", M68K_totalcycles, (M68K_totalcycles ? "s" : "")); emuStatusDump += QString(string); text->setText(emuStatusDump); diff --git a/src/gui/emustatus.h b/src/gui/emustatus.h index 6552e89..22da650 100644 --- a/src/gui/emustatus.h +++ b/src/gui/emustatus.h @@ -7,7 +7,7 @@ #ifndef __EMUSTATUS_H__ #define __EMUSTATUS_H__ -#include +#include #include class EmuStatusWindow : public QWidget @@ -16,18 +16,24 @@ class EmuStatusWindow : public QWidget public: EmuStatusWindow(QWidget * parent = 0); - - public slots: + void UpdateM68KCycles(size_t cycles); void RefreshContents(void); + void ResetM68KCycles(void); + + private slots: + void ResetCycles(void); protected: void keyPressEvent(QKeyEvent *); private: QVBoxLayout * layout; + QPushButton * resetcycles; QLabel * text; - bool GPURunning; - bool M68000DebugHaltStatus; + bool GPURunning; + bool M68000DebugHaltStatus; + size_t M68K_opcodecycles; + size_t M68K_totalcycles; }; #endif // __EMUSTATUS_H__ diff --git a/src/gui/filelistmodel.h b/src/gui/filelistmodel.h index 83666f4..221af27 100644 --- a/src/gui/filelistmodel.h +++ b/src/gui/filelistmodel.h @@ -8,7 +8,7 @@ #ifndef __FILELISTMODEL_H__ #define __FILELISTMODEL_H__ -#include +#include #include #include diff --git a/src/gui/filepicker.h b/src/gui/filepicker.h index f304ab1..fe87fa9 100644 --- a/src/gui/filepicker.h +++ b/src/gui/filepicker.h @@ -2,7 +2,7 @@ // filepicker.h - A ROM chooser // -#include +#include // Forward declarations class QListWidget; diff --git a/src/gui/filethread.h b/src/gui/filethread.h index 757557c..3422ddf 100644 --- a/src/gui/filethread.h +++ b/src/gui/filethread.h @@ -5,8 +5,8 @@ #ifndef __FILETHREAD_H__ #define __FILETHREAD_H__ -#include -#include +#include +#include #include class FileThread: public QThread diff --git a/src/gui/generaltab.h b/src/gui/generaltab.h index 916f99d..e1b14ac 100644 --- a/src/gui/generaltab.h +++ b/src/gui/generaltab.h @@ -1,7 +1,7 @@ #ifndef __GENERALTAB_H__ #define __GENERALTAB_H__ -#include +#include class GeneralTab: public QWidget { diff --git a/src/gui/glwidget.h b/src/gui/glwidget.h index 170afff..ed44336 100644 --- a/src/gui/glwidget.h +++ b/src/gui/glwidget.h @@ -6,7 +6,7 @@ #ifndef __GLWIDGET_H__ #define __GLWIDGET_H__ -#include +#include #include class GLWidget: public QGLWidget diff --git a/src/gui/help.h b/src/gui/help.h index 511a359..40ee574 100644 --- a/src/gui/help.h +++ b/src/gui/help.h @@ -8,7 +8,7 @@ #ifndef __HELP_H__ #define __HELP_H__ -#include +#include class HelpWindow: public QWidget { diff --git a/src/gui/imagedelegate.h b/src/gui/imagedelegate.h index 8f0a950..ca1c5d7 100644 --- a/src/gui/imagedelegate.h +++ b/src/gui/imagedelegate.h @@ -5,7 +5,7 @@ #ifndef __IMAGEDELEGATE_H__ #define __IMAGEDELEGATE_H__ -#include +#include class ImageDelegate: public QAbstractItemDelegate { diff --git a/src/gui/keybindingstab.h b/src/gui/keybindingstab.h index 1578075..db35733 100644 --- a/src/gui/keybindingstab.h +++ b/src/gui/keybindingstab.h @@ -1,7 +1,7 @@ #ifndef __KEYBINDINGSTAB_H__ #define __KEYBINDINGSTAB_H__ -#include +#include // diff --git a/src/gui/keygrabber.h b/src/gui/keygrabber.h index 56494e1..63efcc9 100644 --- a/src/gui/keygrabber.h +++ b/src/gui/keygrabber.h @@ -8,7 +8,7 @@ #ifndef __KEYGRABBER_H__ #define __KEYGRABBER_H__ -#include +#include class KeyGrabber: public QDialog { diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index a25fad1..7fb2f3d 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -5,6 +5,8 @@ // // JLH = James Hammons // JPM = Jean-Paul Mari +// RG = Richard Goedeken + // // Who When What // --- ---------- ------------------------------------------------------------ @@ -23,7 +25,10 @@ // JPM Oct./2018 Added search paths in the settings, breakpoints feature, cartridge view menu // JPM 11/18/2018 Fix crash with non-debugger mode // JPM April/2019 Added ELF sections check, added a save memory dump -// JPM Aug./2019 Update texts descriptions, set cartridge view menu for debugger mode only +// JPM Aug./2019 Update texts descriptions, set cartridge view menu for debugger mode only, added a HW registers browser and source level tracing +// JPM Marc./2020 Added the step over for source level tracing +// RG Jan./2021 Linux build fixes +// JPM Apr./2021 Handle number of M68K cycles used in tracing mode, added video output display in a window // // FIXED: @@ -36,10 +41,10 @@ // // STILL TO BE DONE: // +// - The source file listing do not need to be refresh more than one time // - Fix bug in switching between PAL & NTSC in fullscreen mode. // - Remove SDL dependencies (sound, mainly) from Jaguar core lib -// - Fix inconsistency with trailing slashes in paths (eeproms needs one, -// software doesn't) +// - Fix inconsistency with trailing slashes in paths (eeproms needs one, software doesn't) // // SFDX CODE: S1E9T8H5M23YS @@ -71,6 +76,7 @@ #include "debug/stackbrowser.h" #include "debug/opbrowser.h" #include "debug/riscdasmbrowser.h" +#include "debug/hwregsbrowser.h" #include "dac.h" #include "jaguar.h" @@ -88,9 +94,10 @@ #include "m68000/m68kinterface.h" #include "debugger/DBGManager.h" -//#include "debugger/VideoWin.h" +#include "debugger/VideoWin.h" //#include "debugger/DasmWin.h" -#include "debugger/m68KDasmWin.h" +#include "debugger/SourcesWin.h" +#include "debugger/m68kDasmWin.h" #include "debugger/GPUDasmWin.h" #include "debugger/DSPDasmWin.h" #include "debugger/memory1browser.h" @@ -194,11 +201,13 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), opBrowseWin = new OPBrowserWindow(this); m68kDasmBrowseWin = new M68KDasmBrowserWindow(this); riscDasmBrowseWin = new RISCDasmBrowserWindow(this); + hwRegsBrowseWin = new HWRegsBrowserWindow(this); // Windows debugger mode features if (vjs.softTypeDebugger) { - //VideoOutputWin = new VideoOutputWindow(this); + VideoOutputWin = new VideoOutputWindow(this); + //VideoOutputWin->show(); //VideoOutputWin->setCentralWidget() //DasmWin = new DasmWindow(); //DasmWin = new DasmWindow(this); @@ -242,9 +251,11 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), #endif // Setup disasm tabs dasmtabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - dasmtabWidget->addTab(m68kDasmWin = new m68KDasmWindow(this), tr("M68000")); + dasmtabWidget->addTab(SourcesWin = new SourcesWindow(this), tr("Sources")); + dasmtabWidget->setCurrentIndex(dasmtabWidget->addTab(m68kDasmWin = new m68KDasmWindow(this), tr("M68000"))); dasmtabWidget->addTab(GPUDasmWin = new GPUDasmWindow(this), tr("GPU")); dasmtabWidget->addTab(DSPDasmWin = new DSPDasmWindow(this), tr("DSP")); + connect(dasmtabWidget, SIGNAL(currentChanged(const int)), this, SLOT(SelectdasmtabWidget(const int))); #if 1 setCentralWidget(dasmtabWidget); #endif @@ -432,9 +443,9 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), saveDumpAsAct->setDisabled(false); connect(saveDumpAsAct, SIGNAL(triggered()), this, SLOT(ShowSaveDumpAsWin())); - //VideoOutputAct = new QAction(tr("Output Video"), this); - //VideoOutputAct->setStatusTip(tr("Shows the output video window")); - //connect(VideoOutputAct, SIGNAL(triggered()), this, SLOT(ShowVideoOutputWin())); + VideoOutputAct = new QAction(tr("Output Video"), this); + VideoOutputAct->setStatusTip(tr("Shows the output video window")); + connect(VideoOutputAct, SIGNAL(triggered()), this, SLOT(ShowVideoOutputWin())); //DasmAct = new QAction(tr("Disassembly"), this); //DasmAct->setStatusTip(tr("Shows the disassembly window")); @@ -515,6 +526,11 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), m68kDasmBrowseAct->setStatusTip(tr("Shows the 68K disassembly browser window")); connect(m68kDasmBrowseAct, SIGNAL(triggered()), this, SLOT(ShowM68KDasmBrowserWin())); + // HW registers browser window + hwRegsBrowseAct = new QAction(QIcon(":/res/tool-hw-regs.png"), tr("HW Registers Browser"), this); + hwRegsBrowseAct->setStatusTip(tr("Shows the HW registers browser window")); + connect(hwRegsBrowseAct, SIGNAL(triggered()), this, SLOT(ShowHWRegsBrowserWin())); + // Risc (DSP / GPU) disassembly browser window riscDasmBrowseAct = new QAction(QIcon(":/res/tool-risc-dis.png"), tr("RISC Listing Browser"), this); riscDasmBrowseAct->setStatusTip(tr("Shows the RISC disassembly browser window")); @@ -566,11 +582,9 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugWindowExceptionMenu = debugWindowsMenu->addMenu(tr("&Exception")); debugWindowExceptionMenu->addAction(exceptionVectorTableBrowseAct); debugWindowsMenu->addSeparator(); -#if 0 debugWindowOutputMenu = debugWindowsMenu->addMenu(tr("&Output")); debugWindowOutputMenu->addAction(VideoOutputAct); debugWindowsMenu->addSeparator(); -#endif debugWindowsWatchMenu = debugWindowsMenu->addMenu(tr("&Watch")); debugWindowsWatchMenu->addAction(allWatchBrowseAct); debugWindowsMenu->addAction(LocalBrowseAct); @@ -592,6 +606,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugWindowsBrowsesMenu->addAction(opBrowseAct); debugWindowsBrowsesMenu->addAction(m68kDasmBrowseAct); debugWindowsBrowsesMenu->addAction(riscDasmBrowseAct); + debugWindowsBrowsesMenu->addAction(hwRegsBrowseAct); debugMenu->addSeparator(); debugMenu->addAction(pauseAct); debugMenu->addAction(frameAdvanceAct); @@ -620,6 +635,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugMenu->addAction(opBrowseAct); debugMenu->addAction(m68kDasmBrowseAct); debugMenu->addAction(riscDasmBrowseAct); + debugMenu->addAction(hwRegsBrowseAct); } } @@ -676,6 +692,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), debugbar->addAction(opBrowseAct); debugbar->addAction(m68kDasmBrowseAct); debugbar->addAction(riscDasmBrowseAct); + debugbar->addAction(hwRegsBrowseAct); } // Add actions to the main window, as hiding widgets with them @@ -848,6 +865,17 @@ void MainWin::SyncUI(void) } +// +void MainWin::SelectdasmtabWidget(const int Index) +{ + // check sources tab + if (Index == 0) + { + SourcesWin->RefreshContents(); + } +} + + void MainWin::closeEvent(QCloseEvent * event) { JaguarDone(); @@ -1160,6 +1188,7 @@ static uint32_t refresh = 0; //if (!vjs.softTypeDebugger) videoWidget->updateGL(); + //vjs.softTypeDebugger ? VideoOutputWin->RefreshContents(videoWidget) : NULL; // FPS handling // Approach: We use a ring buffer to store times (in ms) over a given @@ -1303,6 +1332,7 @@ void MainWin::ToggleRunState(void) } videoWidget->updateGL(); + //vjs.softTypeDebugger ? VideoOutputWin->RefreshContents(videoWidget) : NULL; cpuBrowseWin->HoldBPM(); cpuBrowseWin->HandleBPMContinue(); @@ -1325,6 +1355,7 @@ void MainWin::ToggleRunState(void) cpuBrowseWin->UnholdBPM(); } + emuStatusWin->ResetM68KCycles(); // Pause/unpause any running/non-running threads... DACPauseAudioThread(!running); } @@ -1470,6 +1501,7 @@ void MainWin::LoadSoftware(QString file) { m68k_set_reg(M68K_REG_A6, 0); m68kDasmWin->SetAddress(jaguarRunAddress); + SourcesWin->Init(); //pauseAct->setDisabled(false); //pauseAct->setChecked(true); ToggleRunState(); @@ -1534,6 +1566,7 @@ void MainWin::DisableAllBreakpoints(void) // Open, or display, the new breakpoint function window void MainWin::ShowNewFunctionBreakpointWin(void) { + NewFunctionBreakpointWin->SetFnctBreakpointWin(BreakpointsWin); NewFunctionBreakpointWin->show(); ShowBreakpointsWin(); } @@ -1557,7 +1590,18 @@ void MainWin::ShowSaveDumpAsWin(void) // Step Into trace void MainWin::DebuggerTraceStepInto(void) { - JaguarStepInto(); + if (SourcesWin->isVisible() && SourcesWin->GetTraceStatus()) + { + while (!SourcesWin->CheckChangeLine()) + { + emuStatusWin->UpdateM68KCycles(JaguarStepInto()); + } + } + else + { + emuStatusWin->UpdateM68KCycles(JaguarStepInto()); + } + videoWidget->updateGL(); RefreshWindows(); #ifdef _MSC_VER @@ -1577,11 +1621,14 @@ void MainWin::DebuggerRestart(void) m68k_set_reg(M68K_REG_PC, jaguarRunAddress); m68k_set_reg(M68K_REG_SP, vjs.DRAM_size); #endif + dasmtabWidget->setCurrentIndex(1); // set focus on the disasm M68K tab m68k_set_reg(M68K_REG_A6, 0); m68k_brk_hitcounts_reset(); + emuStatusWin->ResetM68KCycles(); bpmHitCounts = 0; DebuggerResetWindows(); CommonResetWindows(); + SourcesWin->Init(); RefreshWindows(); #ifdef _MSC_VER #pragma message("Warning: !!! Need to verify the Restart function !!!") @@ -1594,7 +1641,18 @@ void MainWin::DebuggerRestart(void) // Step Over trace void MainWin::DebuggerTraceStepOver(void) { - JaguarStepOver(0); + if (SourcesWin->isVisible() && SourcesWin->GetTraceStatus()) + { + while (!SourcesWin->CheckChangeLine()) + { + emuStatusWin->UpdateM68KCycles(JaguarStepOver(0)); + } + } + else + { + emuStatusWin->UpdateM68KCycles(JaguarStepOver(0)); + } + videoWidget->updateGL(); RefreshWindows(); #ifdef _MSC_VER @@ -1614,6 +1672,7 @@ void MainWin::FrameAdvance(void) JaguarExecuteNew(); //if (!vjs.softTypeDebugger) videoWidget->updateGL(); + //vjs.softTypeDebugger ? VideoOutputWin->RefreshContents(videoWidget) : NULL; ToggleRunState(); // Need to execute 1 frames' worth of DSP thread as well :-/ @@ -1764,6 +1823,7 @@ void MainWin::ShowCPUBrowserWin(void) } +// Show the OP browser window void MainWin::ShowOPBrowserWin(void) { opBrowseWin->show(); @@ -1771,6 +1831,15 @@ void MainWin::ShowOPBrowserWin(void) } +// Show the HW registers browser window +void MainWin::ShowHWRegsBrowserWin(void) +{ + hwRegsBrowseWin->show(); + hwRegsBrowseWin->RefreshContents(); +} + + +// Show the M68K browser window void MainWin::ShowM68KDasmBrowserWin(void) { m68kDasmBrowseWin->show(); @@ -1796,17 +1865,17 @@ void MainWin::ShowDasmWin(void) // -#if 0 void MainWin::ShowVideoOutputWin(void) { //VideoOutputWindowCentrale = mainWindowCentrale->addSubWindow(videoWidget); //VideoOutputWindowCentrale->setWindowTitle(QString(tr("Video output"))); //VideoOutputWindowCentrale->show(); //memBrowseWin->show(); - //VideoOutputWin->show(); + VideoOutputWin->show(); + VideoOutputWin->SetupVideo(videoWidget); + //VideoOutputWin->adjustSize(); //VideoOutputWin->RefreshContents(videoWidget); } -#endif // Resize video window based on zoom factor @@ -1889,6 +1958,7 @@ void MainWin::ReadSettings(void) strcpy(vjs.absROMPath, settings.value("DefaultABS", "").toString().toUtf8().data()); vjs.refresh = settings.value("refresh", 60).toUInt(); vjs.allowWritesToROM = settings.value("writeROM", false).toBool(); + vjs.allowM68KExceptionCatch = settings.value("M68KExceptionCatch", false).toBool(); settings.endGroup(); // Read settings from the Keybindings @@ -2027,6 +2097,13 @@ void MainWin::ReadUISettings(void) size = settings.value("opBrowseWinSize", QSize(400, 400)).toSize(); opBrowseWin->resize(size); + // HW registers UI information + pos = settings.value("hwRegsBrowseWinPos", QPoint(200, 200)).toPoint(); + hwRegsBrowseWin->move(pos); + settings.value("hwRegsBrowseWinIsVisible", false).toBool() ? ShowHWRegsBrowserWin() : void(); + size = settings.value("hwRegsBrowseWinSize", QSize(400, 400)).toSize(); + hwRegsBrowseWin->resize(size); + // RISC disassembly UI information pos = settings.value("riscDasmBrowseWinPos", QPoint(200, 200)).toPoint(); riscDasmBrowseWin->move(pos); @@ -2104,6 +2181,13 @@ void MainWin::ReadUISettings(void) size = settings.value("SaveDumpAsWinSize", QSize(400, 400)).toSize(); SaveDumpAsWin->resize(size); + // save output video UI information + pos = settings.value("VideoOutputWinPos", QPoint(200, 200)).toPoint(); + VideoOutputWin->move(pos); + settings.value("VideoOutputWinIsVisible", false).toBool() ? ShowVideoOutputWin() : void(); + size = settings.value("VideoOutputWinSize", QSize(400, 400)).toSize(); + VideoOutputWin->resize(size); + // Breakpoints UI information pos = settings.value("BreakpointsWinPos", QPoint(200, 200)).toPoint(); BreakpointsWin->move(pos); @@ -2182,12 +2266,13 @@ void MainWin::WriteSettings(void) settings.setValue("DefaultROM", vjs.alpineROMPath); settings.setValue("DefaultABS", vjs.absROMPath); settings.setValue("writeROM", vjs.allowWritesToROM); + settings.setValue("M68KExceptionCatch", vjs.allowM68KExceptionCatch); settings.endGroup(); // Write settings from the Debugger mode settings.beginGroup("debugger"); settings.setValue("DisplayHWLabels", vjs.displayHWlabels); - settings.setValue("NbrDisasmLines", vjs.nbrdisasmlines); + settings.setValue("NbrDisasmLines", (qulonglong) vjs.nbrdisasmlines); settings.setValue("DisasmOpcodes", vjs.disasmopcodes); settings.setValue("displayFullSourceFilename", vjs.displayFullSourceFilename); settings.setValue("ELFSectionsCheck", vjs.ELFSectionsCheck); @@ -2290,6 +2375,9 @@ void MainWin::WriteUISettings(void) settings.setValue("opBrowseWinPos", opBrowseWin->pos()); settings.setValue("opBrowseWinIsVisible", opBrowseWin->isVisible()); settings.setValue("opBrowseWinSize", opBrowseWin->size()); + settings.setValue("hwRegsBrowseWinPos", hwRegsBrowseWin->pos()); + settings.setValue("hwRegsBrowseWinIsVisible", hwRegsBrowseWin->isVisible()); + settings.setValue("hwRegsBrowseWinSize", hwRegsBrowseWin->size()); settings.setValue("riscDasmBrowseWinPos", riscDasmBrowseWin->pos()); settings.setValue("riscDasmBrowseWinIsVisible", riscDasmBrowseWin->isVisible()); settings.setValue("m68kDasmBrowseWinPos", m68kDasmBrowseWin->pos()); @@ -2332,6 +2420,9 @@ void MainWin::WriteUISettings(void) settings.setValue("SaveDumpAsWinPos", SaveDumpAsWin->pos()); settings.setValue("SaveDumpAsWinIsVisible", SaveDumpAsWin->isVisible()); settings.setValue("SaveDumpAsWinSize", SaveDumpAsWin->size()); + settings.setValue("VideoOutputWinPos", VideoOutputWin->pos()); + settings.setValue("VideoOutputWinIsVisible", VideoOutputWin->isVisible()); + settings.setValue("VideoOutputWinSize", VideoOutputWin->size()); for (i = 0; i < vjs.nbrmemory1browserwindow; i++) { @@ -2357,6 +2448,7 @@ void MainWin::AlpineRefreshWindows(void) opBrowseWin->RefreshContents(); riscDasmBrowseWin->RefreshContents(); m68kDasmBrowseWin->RefreshContents(); + hwRegsBrowseWin->RefreshContents(); } @@ -2392,6 +2484,7 @@ void MainWin::DebuggerResetWindows(void) heapallocatorBrowseWin->Reset(); BreakpointsWin->Reset(); CartFilesListWin->Reset(); + SourcesWin->Reset(); //ResetAlpineWindows(); } } @@ -2424,7 +2517,9 @@ void MainWin::DebuggerRefreshWindows(void) { if (vjs.softTypeDebugger) { + //VideoOutputWin->RefreshContents(videoWidget); FilesrcListWin->RefreshContents(); + SourcesWin->RefreshContents(); m68kDasmWin->RefreshContents(); GPUDasmWin->RefreshContents(); DSPDasmWin->RefreshContents(); diff --git a/src/gui/mainwin.h b/src/gui/mainwin.h index e76f4ff..515f9e0 100644 --- a/src/gui/mainwin.h +++ b/src/gui/mainwin.h @@ -11,7 +11,7 @@ #define __MAINWIN_H__ //Hrm. uh??? I thought this wasn't the way to do this stuff...??? -#include +#include #include "tom.h" #define RING_BUFFER_SIZE 32 @@ -22,7 +22,7 @@ class GLWidget; class AboutWindow; class HelpWindow; class FilePickerWindow; -//class VideoOutputWindow; +class VideoOutputWindow; //class DasmWindow; class EmuStatusWindow; @@ -33,8 +33,10 @@ class CPUBrowserWindow; class OPBrowserWindow; class M68KDasmBrowserWindow; class RISCDasmBrowserWindow; +class HWRegsBrowserWindow; // Debugger +class SourcesWindow; class m68KDasmWindow; class GPUDasmWindow; class DSPDasmWindow; @@ -114,10 +116,9 @@ class MainWin: public QMainWindow void DeleteAllBreakpoints(void); void DisableAllBreakpoints(void); void ShowSaveDumpAsWin(void); -#if 0 + void SelectdasmtabWidget(const int); void ShowVideoOutputWin(void); - void ShowDasmWin(void); -#endif + //void ShowDasmWin(void); void ShowCartFilesListWin(void); // Alpine void ShowMemoryBrowserWin(void); @@ -125,6 +126,7 @@ class MainWin: public QMainWindow void ShowCPUBrowserWin(void); void ShowOPBrowserWin(void); void ShowM68KDasmBrowserWin(void); + void ShowHWRegsBrowserWin(void); void ShowRISCDasmBrowserWin(void); private: @@ -151,7 +153,8 @@ class MainWin: public QMainWindow OPBrowserWindow *opBrowseWin; M68KDasmBrowserWindow *m68kDasmBrowseWin; RISCDasmBrowserWindow *riscDasmBrowseWin; - //VideoOutputWindow *VideoOutputWin; + HWRegsBrowserWindow *hwRegsBrowseWin; + VideoOutputWindow *VideoOutputWin; AllWatchBrowserWindow *allWatchBrowseWin; LocalBrowserWindow *LocalBrowseWin; CallStackBrowserWindow *CallStackBrowseWin; @@ -161,6 +164,7 @@ class MainWin: public QMainWindow //DasmWindow * DasmWin; QTabWidget *dasmtabWidget; //QDockWidget *dasmtabWidget; + SourcesWindow *SourcesWin; m68KDasmWindow *m68kDasmWin; GPUDasmWindow *GPUDasmWin; DSPDasmWindow *DSPDasmWin; @@ -235,13 +239,14 @@ class MainWin: public QMainWindow QAction *cpuBrowseAct; QAction *opBrowseAct; QAction *m68kDasmBrowseAct; + QAction *hwRegsBrowseAct; QAction *riscDasmBrowseAct; // Debugger QAction *traceStepOverAct; QAction *traceStepIntoAct; QAction *restartAct; - //QAction *VideoOutputAct; + QAction *VideoOutputAct; QAction *heapallocatorBrowseAct; QAction *allWatchBrowseAct; QAction *LocalBrowseAct; diff --git a/src/gui/modelsbiostab.h b/src/gui/modelsbiostab.h index 22d701f..7066200 100644 --- a/src/gui/modelsbiostab.h +++ b/src/gui/modelsbiostab.h @@ -1,7 +1,7 @@ #ifndef __MODELSBIOSTAB_H__ #define __MODELSBIOSTAB_H__ -#include +#include class ModelsBiosTab: public QWidget { diff --git a/src/gui/profile.cpp b/src/gui/profile.cpp index a0f8245..f9d6925 100644 --- a/src/gui/profile.cpp +++ b/src/gui/profile.cpp @@ -32,7 +32,7 @@ // #include "profile.h" -#include +#include #include "gamepad.h" #include "log.h" #include "settings.h" diff --git a/src/gui/virtualjaguar.qrc b/src/gui/virtualjaguar.qrc index ddedc8f..860e192 100644 --- a/src/gui/virtualjaguar.qrc +++ b/src/gui/virtualjaguar.qrc @@ -24,10 +24,11 @@ ../../res/tool-op.png ../../res/tool-68k-dis.png ../../res/tool-risc-dis.png + ../../res/tool-hw-regs.png ../../res/generic.png ../../res/cart-blank.png ../../res/label-blank.png - ../../res/vj_title_small.png + ../../res/vj_rx_title_small.png ../../res/controller.png ../../res/insert.png ../../res/software.png diff --git a/src/jaguar.cpp b/src/jaguar.cpp index 638cfe3..4123d4b 100644 --- a/src/jaguar.cpp +++ b/src/jaguar.cpp @@ -15,6 +15,10 @@ // JLH 11/25/2009 Major rewrite of memory subsystem and handlers // JPM 09/04/2018 Added the new Models and BIOS handler // JPM 10/13/2018 Added breakpoints features +// JPM Aug./2019 Fix specific breakpoint for ROM cartridge or unknown memory location writing; added a specific breakpoint for the M68K illegal & unimplemented instruction, unknown exceptions and address error exceptions +// JPM Aug./2019 Fix potential emulator freeze after an exception has occured +// JPM Feb./2021 Added a specific breakpoint for the M68K bus error exception, and a M68K exception catch detection +// JPM Apr./2021 Keep number of M68K cycles used in tracing mode // @@ -22,8 +26,8 @@ #include "jaguar.h" -#include -#include +//#include +#include #include #include #include "SDL_opengl.h" @@ -125,6 +129,7 @@ uint32_t bpmAddress1; S_BrkInfo *brkInfo; size_t brkNbr; +bool frameDone; // // Callback function to detect illegal instructions @@ -1418,6 +1423,26 @@ unsigned int m68k_read_memory_16(unsigned int address) } +// Alert message in case of exception vector request +bool m68k_read_exception_vector(unsigned int address, char *text) +{ + QString msg; + QMessageBox msgBox; + +#if 0 + msg.sprintf("68000 exception\n%s at $%06x", text, pcQueue[pcQPtr ? (pcQPtr - 1) : 0x3FF]); +#else + msg.sprintf("68000 exception\n$%06x: %s", pcQueue[pcQPtr ? (pcQPtr - 1) : 0x3FF], text); +#endif + msgBox.setText(msg); + msgBox.setStandardButtons(QMessageBox::Abort); + msgBox.setDefaultButton(QMessageBox::Abort); + msgBox.exec(); + return M68KDebugHalt(); +} + + +// Read 4 bytes from memory unsigned int m68k_read_memory_32(unsigned int address) { #ifdef ALPINE_FUNCTIONS @@ -1436,23 +1461,54 @@ unsigned int m68k_read_memory_32(unsigned int address) //WriteLog("--> [RM32]\n"); #ifndef USE_NEW_MMU - uint32_t retVal = 0; + //uint32_t retVal = 0; - if ((address >= 0x800000) && (address <= 0xDFFEFE)) + // check exception vectors access + if (vjs.allowM68KExceptionCatch && (address >= 0x8) && (address <= 0x7c)) { - // Memory Track reading... - if (((TOMGetMEMCON1() & 0x0006) == (2 << 1)) && (jaguarMainROMCRC32 == 0xFDF37F47)) + switch (address) { - retVal = MTReadLong(address); + case 0x08: + m68k_read_exception_vector(address, "Bus error"); + break; + + case 0x0c: + m68k_read_exception_vector(address, "Address error"); + break; + + case 0x10: + m68k_read_exception_vector(address, "Illegal instruction"); + break; + + case 0x2c: + m68k_read_exception_vector(address, "Unimplemented instruction"); + break; + + default: + m68k_read_exception_vector(address, "Exception not referenced"); + break; } - else + + frameDone = true; // Hack to avoid the freeze of the emulator + } + else + { + // check ROM or Memory Track access + if ((address >= 0x800000) && (address <= 0xDFFEFE)) { - retVal = GET32(jaguarMainROM, address - 0x800000); + // Memory Track reading... + if (((TOMGetMEMCON1() & 0x0006) == (2 << 1)) && (jaguarMainROMCRC32 == 0xFDF37F47)) + { + return MTReadLong(address); + } + else + { + return GET32(jaguarMainROM, address - 0x800000); + } } - - return retVal; } + // return value from memory return (m68k_read_memory_16(address) << 16) | m68k_read_memory_16(address + 2); #else return MMURead32(address, M68K); @@ -2533,7 +2589,6 @@ uint8_t * GetRamPtr(void) // New Jaguar execution stack // This executes 1 frame's worth of code. // -bool frameDone; void JaguarExecuteNew(void) { frameDone = false; @@ -2555,24 +2610,26 @@ void JaguarExecuteNew(void) // Step over function -void JaguarStepOver(int depth) +int JaguarStepOver(int depth) { - bool exit; + bool exit = !depth; + int cycles = 0; //bool case55 = false; //uint32_t m68kSR; - if (!depth) - { - exit = true; - } - else - { - exit = false; - } +// if (!depth) +// { +// cycles = 0; +// exit = true; +// } +// else +// { +// exit = false; +// } do { - JaguarStepInto(); + cycles += JaguarStepInto(); switch (M68KGetCurrentOpcodeFamily()) { @@ -2609,7 +2666,7 @@ void JaguarStepOver(int depth) // bsr & jsr case 54: case 52: - JaguarStepOver(depth+1); + cycles += JaguarStepOver(depth+1); //if (depth) //{ // exit = false; @@ -2624,22 +2681,24 @@ void JaguarStepOver(int depth) break; } } - while (!exit); + while (!exit && !M68KDebugHaltStatus()); #ifdef _MSC_VER #pragma message("Warning: !!! Need to verify the Jaguar Step Over function !!!") #else - #warning "!!! Need to verify the Jaguar Step Over function !!!" +#warning "!!! Need to verify the Jaguar Step Over function !!!" #endif // _MSC_VER + return cycles; } // Step into function -void JaguarStepInto(void) +int JaguarStepInto(void) { + int cycles; // double timeToNextEvent = GetTimeToNextEvent(); - m68k_execute(USEC_TO_M68K_CYCLES(0)); + cycles = m68k_execute(USEC_TO_M68K_CYCLES(0)); // m68k_execute(USEC_TO_M68K_CYCLES(timeToNextEvent)); if (vjs.GPUEnabled) @@ -2651,6 +2710,7 @@ void JaguarStepInto(void) #else #warning "!!! Need to verify the Jaguar Step Into function !!!" #endif // _MSC_VER + return cycles; } diff --git a/src/jaguar.h b/src/jaguar.h index 76f47db..2b2cc33 100644 --- a/src/jaguar.h +++ b/src/jaguar.h @@ -1,6 +1,7 @@ #ifndef __JAGUAR_H__ #define __JAGUAR_H__ +#include #include #include "memory.h" // For "UNKNOWN" enum @@ -35,8 +36,8 @@ bool JaguarInterruptHandlerIsValid(uint32_t i); void JaguarDasm(uint32_t offset, uint32_t qt); void JaguarExecuteNew(void); -void JaguarStepInto(void); -void JaguarStepOver(int depth); +int JaguarStepInto(void); +int JaguarStepOver(int depth); // Exports from JAGUAR.CPP diff --git a/src/m68000/m68kdasm.c b/src/m68000/m68kdasm.c index 7109163..8627806 100644 --- a/src/m68000/m68kdasm.c +++ b/src/m68000/m68kdasm.c @@ -318,6 +318,8 @@ void HandleMovem(char * output, uint16_t data, int direction) } +// Disassemble the M68K line based on the address +// Append, or not, the line with the ouput pointer and return the number of bytes unsigned int M68KDisassemble(char * output, uint32_t addr, unsigned int OpCodes) { char f[256], str[256]; @@ -335,26 +337,33 @@ unsigned int M68KDisassemble(char * output, uint32_t addr, unsigned int OpCodes) char instrname[20]; const struct mnemolookup * lookup; + // get the opcode uint32_t opcode = get_iword_1(m68kpc_offset); m68kpc_offset += 2; + // replace an illegal opcode by the illegal opcode if (cpuFunctionTable[opcode] == IllegalOpcode) opcode = 0x4AFC; + // point on the opcode information struct instr * dp = table68k + opcode; - for(lookup=lookuptab; lookup->mnemo!=dp->mnemo; lookup++) - ; - + // get the instruction name from the opcode + for(lookup=lookuptab; lookup->mnemo!=dp->mnemo; lookup++); strcpy(instrname, lookup->name); + + // look for a branching instruction char * ccpt = strstr(instrname, "cc"); + // correct branch naming if (ccpt) strncpy(ccpt, ccnames[dp->cc], 2); + // keep the instruction name sprintf(f, "%s", instrname); strcat(str, f); + // set instruction size switch (dp->size) { case sz_byte: strcat(str, ".B\t"); break; @@ -363,16 +372,16 @@ unsigned int M68KDisassemble(char * output, uint32_t addr, unsigned int OpCodes) default: strcat(str, "\t"); break; } - // Get source and destination operands (if any) + // reset the buffers src[0] = dst[0] = f[0] = 0; + // get source operand in src if (dp->suse) - newpc = m68k_getpc() + m68kpc_offset - + ShowEA(dp->mnemo, dp->sreg, dp->smode, dp->size, src); + newpc = m68k_getpc() + m68kpc_offset + ShowEA(dp->mnemo, dp->sreg, dp->smode, dp->size, src); + // get destination operand in dst if (dp->duse) - newpc = m68k_getpc() + m68kpc_offset - + ShowEA(dp->mnemo, dp->dreg, dp->dmode, dp->size, dst); + newpc = m68k_getpc() + m68kpc_offset + ShowEA(dp->mnemo, dp->dreg, dp->dmode, dp->size, dst); // Handle execptions to the standard rules if (dp->mnemo == i_BSR || dp->mnemo == i_Bcc) @@ -405,14 +414,8 @@ unsigned int M68KDisassemble(char * output, uint32_t addr, unsigned int OpCodes) strcat(output, f); } - if (OpCodes) - { - strcat(output, str); - } - else - { - strcpy(output, str); - } + // add the line to the output + OpCodes ? strcat(output, str) : strcpy(output, str); return numberOfBytes; } diff --git a/src/settings.cpp b/src/settings.cpp index 51b13f2..6c3c8bf 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -15,7 +15,7 @@ // #include "settings.h" -#include +#include // Global variables diff --git a/src/settings.h b/src/settings.h index 8b7ca16..e762201 100644 --- a/src/settings.h +++ b/src/settings.h @@ -2,6 +2,7 @@ // settings.h: Header file // // JPM = Jean-Paul Mari +// RG = Richard Goedeken // // Who When What // --- ---------- ------------------------------------------------------------ @@ -9,6 +10,7 @@ // JPM Sept./2018 Added the new Models and BIOS handler, and a screenshot settings // JPM 10/10/2018 Added search paths in settings // JPM 04/06/2019 Added ELF sections check +// RG Jan./2021 Linux build fix // #ifndef __SETTINGS_H__ @@ -25,6 +27,7 @@ #define MAX_PATH _MAX_PATH // Urgh. #endif #endif +#include #include #define MaxMemory1BrowserWindow 4 @@ -76,6 +79,7 @@ struct VJSettings uint32_t frameSkip; uint32_t renderType; uint32_t refresh; + bool allowM68KExceptionCatch; // Allow M68K exception catch bool allowWritesToROM; // Allow writing to ROM cartdridge uint32_t biosType; // Bios type used uint32_t jaguarModel; // Jaguar model diff --git a/virtualjaguar.pro b/virtualjaguar.pro index 19bd96a..3a422ec 100644 --- a/virtualjaguar.pro +++ b/virtualjaguar.pro @@ -1,192 +1,200 @@ -# -# Virtual Jaguar Qt project file -# -# by James Hammons -# Copyright (C) 2011 Underground Software -# -# Modified by Jean-Paul Mari -# -# See the README and GPLv3 files for licensing and warranty information -# -# NOTE: M68000 core is built and linked in as a library, so there should be no -# more problems with using the qmake build system as-is. :-) -# Other than on the Mac, where it stupidly defaults to making XCode -# binaries. >:-( Well, we fixed it in the Makefile, by doing platform -# detection there. :-/ -# - -TARGET = virtualjaguar -CONFIG += qt warn_on release -# debug -RESOURCES += src/gui/virtualjaguar.qrc -LIBS += -Lobj -Lsrc/m68000/obj -ljaguarcore -lz -lm68k -llibelf -llibdwarf -lelf -QT += opengl widgets - -# We stuff all the intermediate crap into obj/ so it won't confuse us mere -# mortals ;-) -OBJECTS_DIR = obj -MOC_DIR = obj -RCC_DIR = obj -UI_DIR = obj - -# Platform specific defines -win32 { DEFINES += __GCCWIN32__ } -else:macx { DEFINES += __GCCUNIX__ __THINK_STUPID__ } -else:unix { DEFINES += __GCCUNIX__ } - -# SDL (to link statically on Mac) -macx { LIBS += `sdl-config --static-libs` } -#else:win32 { LIBS += `$(CROSS)sdl-config --libs` } -#else:win32 { LIBS += `$(CROSS)sdl-config --static-libs` -static-libgcc} -else:win32 { LIBS += `$(CROSS)sdl-config --static-libs` -static -static-libgcc -static-libstdc++ } -else { LIBS += `$(CROSS)sdl-config --libs` } -#else { LIBS += `$(CROSS)sdl-config --static-libs` } - -# Icon on Win32, Mac -#win32 { LIBS += res/vj-ico.o } -#win32 { ICON = res/vj.ico } -#win32 { LIBS += obj/vj.o; $(CROSS)windres -i res/vj.rc -o obj/vj.o --include-dir=./res } -win32 { RC_FILE = res/vj.rc } -macx { ICON = res/vj-icon.icns } - -# C/C++ flags... -# NOTE: May have to put -Wall back in, but only on non-release cycles. It can -# cause problems if you're not careful. (Can do this via command line in -# qmake) -QMAKE_CFLAGS += `$(CROSS)sdl-config --cflags` -QMAKE_CXXFLAGS += `$(CROSS)sdl-config --cflags` - -# Need to add libcdio stuffola (checking/including)... - -# Translations. NB: Nobody has stepped up to do any :-P so these are dummy -# translations -# Removed for now, they interfere with proper running in non-English locales for -# some reason. :-/ -#TRANSLATIONS = \ -# virtualjaguar_fr.ts \ -# virtualjaguar_gr.ts - -INCLUDEPATH += \ - src \ - src/debugger \ - src/gui - -DEPENDPATH = \ - src \ - src/debugger \ - src/gui \ - src/gui/debug \ - src/m68000 - -# The GUI - -HEADERS = \ - src/gui/about.h \ - src/gui/alpinetab.h \ - src/gui/app.h \ - src/gui/configdialog.h \ - src/gui/controllertab.h \ - src/gui/controllerwidget.h \ - src/gui/filelistmodel.h \ - src/gui/filepicker.h \ - src/gui/filethread.h \ - src/gui/gamepad.h \ - src/gui/generaltab.h \ - src/gui/modelsbiostab.h \ - src/gui/keybindingstab.h \ - src/gui/glwidget.h \ - src/gui/help.h \ - src/gui/imagedelegate.h \ - src/gui/keygrabber.h \ - src/gui/mainwin.h \ - src/gui/profile.h \ - src/gui/emustatus.h \ - src/gui/debug/cpubrowser.h \ - src/gui/debug/m68kdasmbrowser.h \ - src/gui/debug/memorybrowser.h \ - src/gui/debug/opbrowser.h \ - src/gui/debug/riscdasmbrowser.h \ - src/gui/debug/stackbrowser.h \ - src/debugger/debuggertab.h \ - src/debugger/DasmWin.h \ - src/debugger/m68kDasmWin.h \ - src/debugger/DBGManager.h \ - src/debugger/DSPDasmWin.h \ - src/debugger/GPUDasmWin.h \ - src/debugger/HWLABELManager.h \ - src/debugger/ELFManager.h \ - src/debugger/allwatchbrowser.h \ - src/debugger/localbrowser.h \ - src/debugger/DWARFManager.h \ - src/debugger/memory1browser.h \ - src/debugger/heapallocatorbrowser.h \ - src/debugger/BreakpointsWin.h \ - src/debugger/VideoWin.h - src/debugger/FilesrcListWin.h \ - src/debugger/callstackbrowser.h \ - src/debugger/exceptionvectortablebrowser.h \ - src/debugger/NewFnctBreakpointWin.h \ - src/debugger/CartFilesListWin.h \ - src/debugger/SaveDumpAsWin.h \ - src/log.h \ - src/unzip.h \ - src/crc32.h \ - src/settings.h \ - src/file.h \ - src/LEB128.h - -SOURCES = \ - src/gui/about.cpp \ - src/gui/alpinetab.cpp \ - src/gui/app.cpp \ - src/gui/configdialog.cpp \ - src/gui/controllertab.cpp \ - src/gui/controllerwidget.cpp \ - src/gui/filelistmodel.cpp \ - src/gui/filepicker.cpp \ - src/gui/filethread.cpp \ - src/gui/gamepad.cpp \ - src/gui/generaltab.cpp \ - src/gui/modelsbiostab.cpp \ - src/gui/keybindingstab.cpp \ - src/gui/glwidget.cpp \ - src/gui/help.cpp \ - src/gui/imagedelegate.cpp \ - src/gui/keygrabber.cpp \ - src/gui/mainwin.cpp \ - src/gui/profile.cpp \ - src/gui/emustatus.cpp \ - src/gui/debug/cpubrowser.cpp \ - src/gui/debug/m68kdasmbrowser.cpp \ - src/gui/debug/memorybrowser.cpp \ - src/gui/debug/opbrowser.cpp \ - src/gui/debug/riscdasmbrowser.cpp \ - src/gui/debug/stackbrowser.cpp \ - src/debugger/debuggertab.cpp \ - src/debugger/DasmWin.cpp \ - src/debugger/m68kDasmWin.cpp \ - src/debugger/DBGManager.cpp \ - src/debugger/DSPDasmWin.cpp \ - src/debugger/GPUDasmWin.cpp \ - src/debugger/HWLABELManager.cpp \ - src/debugger/ELFManager.cpp \ - src/debugger/allwatchbrowser.cpp \ - src/debugger/localbrowser.cpp \ - src/debugger/DWARFManager.cpp \ - src/debugger/memory1browser.cpp \ - src/debugger/heapallocatorbrowser.cpp \ - src/debugger/BreakpointsWin.cpp \ - src/debugger/VideoWin.cpp \ - src/debugger/FilesrcListWin.cpp \ - src/debugger/exceptionvectortablebrowser.cpp \ - src/debugger/callstackbrowser.cpp \ - src/debugger/NewFnctBreakpointWin.cpp \ - src/debugger/CartFilesListWin.cpp \ - src/debugger/SaveDumpAsWin.cpp \ - src/log.cpp \ - src/unzip.cpp \ - src/crc32.cpp \ - src/settings.cpp \ - src/file.cpp \ - src/LEB128.cpp - \ No newline at end of file +# +# Virtual Jaguar Qt project file +# +# by James Hammons +# Copyright (C) 2011 Underground Software +# +# Modified by Jean-Paul Mari +# +# See the README and GPLv3 files for licensing and warranty information +# +# NOTE: M68000 core is built and linked in as a library, so there should be no +# more problems with using the qmake build system as-is. :-) +# Other than on the Mac, where it stupidly defaults to making XCode +# binaries. >:-( Well, we fixed it in the Makefile, by doing platform +# detection there. :-/ +# + +TARGET = virtualjaguar +CONFIG += qt warn_on release +# debug +RESOURCES += src/gui/virtualjaguar.qrc +LIBS += -Lobj -Lsrc/m68000/obj -ljaguarcore -lz -lm68k -lelf -ldwarf +QT += opengl widgets + +# We stuff all the intermediate crap into obj/ so it won't confuse us mere +# mortals ;-) +OBJECTS_DIR = obj +MOC_DIR = obj +RCC_DIR = obj +UI_DIR = obj + +# Platform specific defines +win32 { DEFINES += __GCCWIN32__ } +else:macx { DEFINES += __GCCUNIX__ __THINK_STUPID__ } +else:unix { DEFINES += __GCCUNIX__ } + +# SDL (to link statically on Mac) +macx { LIBS += `sdl-config --static-libs` } +#else:win32 { LIBS += `$(CROSS)sdl-config --libs` } +#else:win32 { LIBS += `$(CROSS)sdl-config --static-libs` -static-libgcc} +else:win32 { LIBS += `$(CROSS)sdl-config --static-libs` -static -static-libgcc -static-libstdc++ } +else { LIBS += `$(CROSS)sdl-config --libs` } +#else { LIBS += `$(CROSS)sdl-config --static-libs` } + +# Icon on Win32, Mac +#win32 { LIBS += res/vj-ico.o } +#win32 { ICON = res/vj.ico } +#win32 { LIBS += obj/vj.o; $(CROSS)windres -i res/vj.rc -o obj/vj.o --include-dir=./res } +win32 { RC_FILE = res/vj.rc } +macx { ICON = res/vj-icon.icns } + +# C/C++ flags... +# NOTE: May have to put -Wall back in, but only on non-release cycles. It can +# cause problems if you're not careful. (Can do this via command line in +# qmake) +QMAKE_CFLAGS += `$(CROSS)sdl-config --cflags` +QMAKE_CXXFLAGS += `$(CROSS)sdl-config --cflags` + +# Need to add libcdio stuffola (checking/including)... + +# Translations. NB: Nobody has stepped up to do any :-P so these are dummy +# translations +# Removed for now, they interfere with proper running in non-English locales for +# some reason. :-/ +#TRANSLATIONS = \ +# virtualjaguar_fr.ts \ +# virtualjaguar_gr.ts + +INCLUDEPATH += \ + src \ + src/debugger \ + src/gui + +DEPENDPATH = \ + src \ + src/debugger \ + src/gui \ + src/gui/debug \ + src/m68000 + +# The GUI + +HEADERS = \ + src/gui/about.h \ + src/gui/alpinetab.h \ + src/gui/app.h \ + src/gui/configdialog.h \ + src/gui/controllertab.h \ + src/gui/controllerwidget.h \ + src/gui/filelistmodel.h \ + src/gui/filepicker.h \ + src/gui/filethread.h \ + src/gui/gamepad.h \ + src/gui/generaltab.h \ + src/gui/modelsbiostab.h \ + src/gui/keybindingstab.h \ + src/gui/glwidget.h \ + src/gui/help.h \ + src/gui/imagedelegate.h \ + src/gui/keygrabber.h \ + src/gui/mainwin.h \ + src/gui/profile.h \ + src/gui/emustatus.h \ + src/gui/debug/cpubrowser.h \ + src/gui/debug/hwregsblitterbrowser.h \ + src/gui/debug/m68kdasmbrowser.h \ + src/gui/debug/memorybrowser.h \ + src/gui/debug/opbrowser.h \ + src/gui/debug/riscdasmbrowser.h \ + src/gui/debug/stackbrowser.h \ + src/gui/debug/hwregsbrowser.h \ + src/debugger/debuggertab.h \ + src/debugger/DasmWin.h \ + src/debugger/m68kDasmWin.h \ + src/debugger/SourcesWin.h \ + src/debugger/SourceCWin.h \ + src/debugger/DBGManager.h \ + src/debugger/DSPDasmWin.h \ + src/debugger/GPUDasmWin.h \ + src/debugger/HWLABELManager.h \ + src/debugger/ELFManager.h \ + src/debugger/allwatchbrowser.h \ + src/debugger/localbrowser.h \ + src/debugger/DWARFManager.h \ + src/debugger/memory1browser.h \ + src/debugger/heapallocatorbrowser.h \ + src/debugger/BreakpointsWin.h \ + src/debugger/VideoWin.h \ + src/debugger/FilesrcListWin.h \ + src/debugger/callstackbrowser.h \ + src/debugger/exceptionvectortablebrowser.h \ + src/debugger/NewFnctBreakpointWin.h \ + src/debugger/CartFilesListWin.h \ + src/debugger/SaveDumpAsWin.h \ + src/log.h \ + src/unzip.h \ + src/crc32.h \ + src/settings.h \ + src/file.h \ + src/LEB128.h + +SOURCES = \ + src/gui/about.cpp \ + src/gui/alpinetab.cpp \ + src/gui/app.cpp \ + src/gui/configdialog.cpp \ + src/gui/controllertab.cpp \ + src/gui/controllerwidget.cpp \ + src/gui/filelistmodel.cpp \ + src/gui/filepicker.cpp \ + src/gui/filethread.cpp \ + src/gui/gamepad.cpp \ + src/gui/generaltab.cpp \ + src/gui/modelsbiostab.cpp \ + src/gui/keybindingstab.cpp \ + src/gui/glwidget.cpp \ + src/gui/help.cpp \ + src/gui/imagedelegate.cpp \ + src/gui/keygrabber.cpp \ + src/gui/mainwin.cpp \ + src/gui/profile.cpp \ + src/gui/emustatus.cpp \ + src/gui/debug/cpubrowser.cpp \ + src/gui/debug/hwregsblitterbrowser.cpp \ + src/gui/debug/m68kdasmbrowser.cpp \ + src/gui/debug/memorybrowser.cpp \ + src/gui/debug/opbrowser.cpp \ + src/gui/debug/riscdasmbrowser.cpp \ + src/gui/debug/stackbrowser.cpp \ + src/gui/debug/hwregsbrowser.cpp \ + src/debugger/debuggertab.cpp \ + src/debugger/DasmWin.cpp \ + src/debugger/m68kDasmWin.cpp \ + src/debugger/SourcesWin.cpp \ + src/debugger/SourceCWin.cpp \ + src/debugger/DBGManager.cpp \ + src/debugger/DSPDasmWin.cpp \ + src/debugger/GPUDasmWin.cpp \ + src/debugger/HWLABELManager.cpp \ + src/debugger/ELFManager.cpp \ + src/debugger/allwatchbrowser.cpp \ + src/debugger/localbrowser.cpp \ + src/debugger/DWARFManager.cpp \ + src/debugger/memory1browser.cpp \ + src/debugger/heapallocatorbrowser.cpp \ + src/debugger/BreakpointsWin.cpp \ + src/debugger/VideoWin.cpp \ + src/debugger/FilesrcListWin.cpp \ + src/debugger/exceptionvectortablebrowser.cpp \ + src/debugger/callstackbrowser.cpp \ + src/debugger/NewFnctBreakpointWin.cpp \ + src/debugger/CartFilesListWin.cpp \ + src/debugger/SaveDumpAsWin.cpp \ + src/log.cpp \ + src/unzip.cpp \ + src/crc32.cpp \ + src/settings.cpp \ + src/file.cpp \ + src/LEB128.cpp +