From: Jean-Paul Mari Date: Sun, 29 Oct 2017 21:33:45 +0000 (-0400) Subject: Fixed a crash when DWARF does references to missing source code files X-Git-Tag: v2.1.3-R3~6 X-Git-Url: http://git.hcoop.net/clinton/Virtual-Jaguar-Rx.git/commitdiff_plain/95fe01d7ba34562dbd7d3c9cbd363f4de9c2288b?ds=sidebyside Fixed a crash when DWARF does references to missing source code files --- diff --git a/docs/vj_ReleaseNotes.txt b/docs/vj_ReleaseNotes.txt index 3f1f325..dde40ff 100644 --- a/docs/vj_ReleaseNotes.txt +++ b/docs/vj_ReleaseNotes.txt @@ -18,10 +18,11 @@ Release 3 (WiP) 12) Create a directory for EEPROMs (based on the EEPROMs setting) if it doesn't already exist 13) Keep the scrollbar position in accordance of the M68K PC pointer -- UI displays the source without the need to move down/up the scrollbar -14) Fixed a crash when DWARF report a source line number exceeding the number of lines present in the source file +14) Fixed a crash when DWARF information report a source line number exceeding the number of lines present in a source file -- This may come from the linker vlink 15) Improved the .heap section detection to avoid a detection error -- Depend vlink version, .heap section may have an Alloc flag +16) Fixed a crash when DWARF information does references to missing source code files Release 2 (3rd September 2017) ------------------------------ diff --git a/src/debugger/DWARFManager.cpp b/src/debugger/DWARFManager.cpp index dfc2ffc..573292c 100644 --- a/src/debugger/DWARFManager.cpp +++ b/src/debugger/DWARFManager.cpp @@ -20,7 +20,7 @@ // -//#define DEBUG_NumCU 0x42 // CU number to debug or undefine it +//#define DEBUG_NumCU 0x6 // CU number to debug or undefine it // Source line internal structure @@ -663,6 +663,24 @@ void DWARFManager_InitDMI(void) PtrCU[NbCU].PtrLinesLoadSrc[j] = (char *)realloc(PtrCU[NbCU].PtrLinesLoadSrc[j], i + 1); } } + + // Init lines source information based on each source code line numbers + for (j = 0; j < PtrCU[NbCU].NbSubProgs; j++) + { + // Check if the subprog / function's line exists in the source code + if (PtrCU[NbCU].PtrSubProgs[j].NumLineSrc <= PtrCU[NbCU].NbLinesLoadSrc) + { + PtrCU[NbCU].PtrSubProgs[j].PtrLineSrc = PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].PtrSubProgs[j].NumLineSrc - 1]; + } + + for (k = 0; k < PtrCU[NbCU].PtrSubProgs[j].NbLinesSrc; k++) + { + if (PtrCU[NbCU].PtrSubProgs[j].PtrLinesSrc[k].NumLineSrc <= PtrCU[NbCU].NbLinesLoadSrc) + { + PtrCU[NbCU].PtrSubProgs[j].PtrLinesSrc[k].PtrLineSrc = PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].PtrSubProgs[j].PtrLinesSrc[k].NumLineSrc - 1]; + } + } + } } } else @@ -670,32 +688,21 @@ void DWARFManager_InitDMI(void) // Set each source lines pointer to NULL if (PtrCU[NbCU].NbSubProgs) { - i = PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs - 1].PtrLinesSrc[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs - 1].NbLinesSrc - 1].NumLineSrc; - if (PtrCU[NbCU].PtrLinesLoadSrc = (char **)calloc(i, sizeof(char *))) + // Check the presence of source lines dedicated to the sub progs + if (PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs - 1].NbLinesSrc) { - for (j = 0; j < i; j++) + i = PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs - 1].PtrLinesSrc[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs - 1].NbLinesSrc - 1].NumLineSrc; + if (PtrCU[NbCU].PtrLinesLoadSrc = (char **)calloc(i, sizeof(char *))) { - PtrCU[NbCU].PtrLinesLoadSrc[j] = NULL; + for (j = 0; j < i; j++) + { + PtrCU[NbCU].PtrLinesLoadSrc[j] = NULL; + } } } } } - // Init lines source information based on each source code line numbers - for (j = 0; j < PtrCU[NbCU].NbSubProgs; j++) - { - // Check if the subprog / function's line exists in the source code - if (PtrCU[NbCU].PtrSubProgs[j].NumLineSrc <= PtrCU[NbCU].NbLinesLoadSrc) - { - PtrCU[NbCU].PtrSubProgs[j].PtrLineSrc = PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].PtrSubProgs[j].NumLineSrc - 1]; - } - - for (k = 0; k < PtrCU[NbCU].PtrSubProgs[j].NbLinesSrc; k++) - { - PtrCU[NbCU].PtrSubProgs[j].PtrLinesSrc[k].PtrLineSrc = PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].PtrSubProgs[j].PtrLinesSrc[k].NumLineSrc - 1]; - } - } - // Init variables information based on types information for (i = 0; i < PtrCU[NbCU].NbVariables; i++) {