Fixed a crash when DWARF does references to missing source code files
authorJean-Paul Mari <djipi.mari@gmail.com>
Sun, 29 Oct 2017 21:33:45 +0000 (17:33 -0400)
committerJean-Paul Mari <djipi.mari@gmail.com>
Sun, 29 Oct 2017 21:33:45 +0000 (17:33 -0400)
docs/vj_ReleaseNotes.txt
src/debugger/DWARFManager.cpp

index 3f1f325..dde40ff 100644 (file)
@@ -18,10 +18,11 @@ Release 3 (WiP)
 12) Create a directory for EEPROMs (based on the EEPROMs setting) if it doesn't already exist\r
 13) Keep the scrollbar position in accordance of the M68K PC pointer\r
 -- UI displays the source without the need to move down/up the scrollbar\r
-14) Fixed a crash when DWARF report a source line number exceeding the number of lines present in the source file\r
+14) Fixed a crash when DWARF information report a source line number exceeding the number of lines present in a source file\r
 -- This may come from the linker vlink\r
 15) Improved the .heap section detection to avoid a detection error\r
 -- Depend vlink version, .heap section may have an Alloc flag\r
+16) Fixed a crash when DWARF information does references to missing source code files\r
 \r
 Release 2 (3rd September 2017)\r
 ------------------------------\r
index dfc2ffc..573292c 100644 (file)
@@ -20,7 +20,7 @@
 \r
 \r
 //\r
-//#define DEBUG_NumCU 0x42                                             // CU number to debug or undefine it\r
+//#define DEBUG_NumCU 0x                                             // CU number to debug or undefine it\r
 \r
 \r
 // Source line internal structure\r
@@ -663,6 +663,24 @@ void DWARFManager_InitDMI(void)
                                                                PtrCU[NbCU].PtrLinesLoadSrc[j] = (char *)realloc(PtrCU[NbCU].PtrLinesLoadSrc[j], i + 1);\r
                                                        }\r
                                                }\r
+\r
+                                               // Init lines source information based on each source code line numbers\r
+                                               for (j = 0; j < PtrCU[NbCU].NbSubProgs; j++)\r
+                                               {\r
+                                                       // Check if the subprog / function's line exists in the source code\r
+                                                       if (PtrCU[NbCU].PtrSubProgs[j].NumLineSrc <= PtrCU[NbCU].NbLinesLoadSrc)\r
+                                                       {\r
+                                                               PtrCU[NbCU].PtrSubProgs[j].PtrLineSrc = PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].PtrSubProgs[j].NumLineSrc - 1];\r
+                                                       }\r
+\r
+                                                       for (k = 0; k < PtrCU[NbCU].PtrSubProgs[j].NbLinesSrc; k++)\r
+                                                       {\r
+                                                               if (PtrCU[NbCU].PtrSubProgs[j].PtrLinesSrc[k].NumLineSrc <= PtrCU[NbCU].NbLinesLoadSrc)\r
+                                                               {\r
+                                                                       PtrCU[NbCU].PtrSubProgs[j].PtrLinesSrc[k].PtrLineSrc = PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].PtrSubProgs[j].PtrLinesSrc[k].NumLineSrc - 1];\r
+                                                               }\r
+                                                       }\r
+                                               }\r
                                        }\r
                                }\r
                                else\r
@@ -670,32 +688,21 @@ void DWARFManager_InitDMI(void)
                                        // Set each source lines pointer to NULL\r
                                        if (PtrCU[NbCU].NbSubProgs)\r
                                        {\r
-                                               i = PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs - 1].PtrLinesSrc[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs - 1].NbLinesSrc - 1].NumLineSrc;\r
-                                               if (PtrCU[NbCU].PtrLinesLoadSrc = (char **)calloc(i, sizeof(char *)))\r
+                                               // Check the presence of source lines dedicated to the sub progs\r
+                                               if (PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs - 1].NbLinesSrc)\r
                                                {\r
-                                                       for (j = 0; j < i; j++)\r
+                                                       i = PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs - 1].PtrLinesSrc[PtrCU[NbCU].PtrSubProgs[PtrCU[NbCU].NbSubProgs - 1].NbLinesSrc - 1].NumLineSrc;\r
+                                                       if (PtrCU[NbCU].PtrLinesLoadSrc = (char **)calloc(i, sizeof(char *)))\r
                                                        {\r
-                                                               PtrCU[NbCU].PtrLinesLoadSrc[j] = NULL;\r
+                                                               for (j = 0; j < i; j++)\r
+                                                               {\r
+                                                                       PtrCU[NbCU].PtrLinesLoadSrc[j] = NULL;\r
+                                                               }\r
                                                        }\r
                                                }\r
                                        }\r
                                }\r
 \r
-                               // Init lines source information based on each source code line numbers\r
-                               for (j = 0; j < PtrCU[NbCU].NbSubProgs; j++)\r
-                               {\r
-                                       // Check if the subprog / function's line exists in the source code\r
-                                       if (PtrCU[NbCU].PtrSubProgs[j].NumLineSrc <= PtrCU[NbCU].NbLinesLoadSrc)\r
-                                       {\r
-                                               PtrCU[NbCU].PtrSubProgs[j].PtrLineSrc = PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].PtrSubProgs[j].NumLineSrc - 1];\r
-                                       }\r
-\r
-                                       for (k = 0; k < PtrCU[NbCU].PtrSubProgs[j].NbLinesSrc; k++)\r
-                                       {\r
-                                               PtrCU[NbCU].PtrSubProgs[j].PtrLinesSrc[k].PtrLineSrc = PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].PtrSubProgs[j].PtrLinesSrc[k].NumLineSrc - 1];\r
-                                       }\r
-                               }\r
-\r
                                // Init variables information based on types information\r
                                for (i = 0; i < PtrCU[NbCU].NbVariables; i++)\r
                                {\r