Fixed a crash when DWARF does references to missing source code files
[clinton/Virtual-Jaguar-Rx.git] / src / debugger / DWARFManager.cpp
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