Added ELF sections check so a potential unknown section will stop, or not stop, the...
[clinton/Virtual-Jaguar-Rx.git] / src / debugger / DWARFManager.cpp
index 9c497f4..fed680a 100644 (file)
@@ -14,6 +14,7 @@
 \r
 // To Do\r
 // To use pointers instead of arrays usage\r
+// To keep sources text file intact wihtout QT/HTML transformation\r
 // \r
 \r
 \r
@@ -27,7 +28,7 @@
 \r
 \r
 // Definitions for debugging\r
-//#define DEBUG_NumCU                  0x9                                     // CU number to debug or undefine it\r
+//#define DEBUG_NumCU                  0x4d                            // CU number to debug or undefine it\r
 //#define DEBUG_VariableName   "sound_death"                           // Variable name to look for or undefine it\r
 //#define DEBUG_TypeName               "Cbuf_Execute"                  // Type name to look for or undefine it\r
 //#define DEBUG_TypeDef                        DW_TAG_typedef          // Type def to look for or undefine it (not supported)\r
@@ -1126,6 +1127,14 @@ void DWARFManager_InitDMI(void)
                                                {\r
                                                        PtrCU[NbCU].PtrLinesSrc[i].PtrLineSrc = PtrCU[NbCU].PtrLinesLoadSrc[PtrCU[NbCU].PtrLinesSrc[i].NumLineSrc - 1];\r
                                                }\r
+\r
+                                               // Setup memory range for the code if CU doesn't have already this information\r
+                                               // It is taken from the used lines structure\r
+                                               if (!PtrCU[NbCU].LowPC && (!PtrCU[NbCU].HighPC || (PtrCU[NbCU].HighPC == ~0)))\r
+                                               {\r
+                                                       PtrCU[NbCU].LowPC = PtrCU[NbCU].PtrLinesSrc[0].StartPC;\r
+                                                       PtrCU[NbCU].HighPC = PtrCU[NbCU].PtrLinesSrc[PtrCU[NbCU].NbLinesSrc - 1].StartPC;\r
+                                               }\r
                                        }\r
                                }\r
 \r
@@ -1179,7 +1188,10 @@ void DWARFManager_InitInfosVariable(VariablesStruct *PtrVariables)
                                        PtrVariables->TypeTag |= TypeTag_structure;\r
                                        if (!(PtrVariables->TypeTag & TypeTag_typedef))\r
                                        {\r
-                                               strcat(PtrVariables->PtrTypeName, PtrCU[NbCU].PtrTypes[j].PtrName);\r
+                                               if (PtrCU[NbCU].PtrTypes[j].PtrName)\r
+                                               {\r
+                                                       strcat(PtrVariables->PtrTypeName, PtrCU[NbCU].PtrTypes[j].PtrName);\r
+                                               }\r
                                        }\r
                                        if ((TypeOffset = PtrCU[NbCU].PtrTypes[j].TypeOffset))\r
                                        {\r
@@ -1789,6 +1801,15 @@ size_t DWARFManager_GetNumLineFromAdr(size_t Adr, size_t Tag)
 #endif\r
                                }\r
                        }\r
+\r
+                       // Check if a used line is found with the address\r
+                       for (size_t j = 0; j < PtrCU[i].NbLinesSrc; j++)\r
+                       {\r
+                               if (PtrCU[i].PtrLinesSrc[j].StartPC == Adr)\r
+                               {\r
+                                       return PtrCU[i].PtrLinesSrc[j].NumLineSrc;\r
+                               }\r
+                       }\r
                }\r
        }\r
 \r