Update the breakpoint feature
[clinton/Virtual-Jaguar-Rx.git] / src / debugger / DBGManager.cpp
index 720fefc..a2f358d 100644 (file)
@@ -4,6 +4,7 @@
 // by Jean-Paul Mari\r
 //\r
 // JPM = Jean-Paul Mari <djipi.mari@gmail.com>\r
+//  RG = Richard Goedeken\r
 //\r
 // WHO  WHEN        WHAT\r
 // ---  ----------  ------------------------------------------------------------\r
 // JPM              Various efforts to set the ELF format support\r
 // JPM              Various efforts to set the DWARF format support\r
 // JPM  09/15/2018  Support the unsigned char\r
-// JPM  Oct./2018  Cosmetic changes, and added source file search paths\r
+// JPM   Oct./2018  Cosmetic changes, added source file search paths, and ELF function name\r
+// JPM   Aug./2019  Added new functions mainly for source text lines\r
+// JPM  Sept./2019  Support the unsigned/signed short type\r
+//  RG   Jan./2021  Linux build fixes\r
 //\r
 \r
 // To Do\r
+// To think about unique format to handle variations from ELF, DWARF, etc.\r
 //\r
 \r
 \r
 #include <stdlib.h>\r
 #include <string.h>\r
 #include <stdint.h>\r
-#include "libelf/libelf.h"\r
-#include "libelf/gelf.h"\r
+#include "libelf.h"\r
+#include "gelf.h"\r
 #include "log.h"\r
 #include "ELFManager.h"\r
-#include "DwarfManager.h"\r
+#include "DWARFManager.h"\r
 #include "DBGManager.h"\r
 #include "HWLABELManager.h"\r
 #include "settings.h"\r
@@ -42,8 +47,10 @@ struct Value
                bool B;\r
                double D;\r
                float F;\r
+               int16_t SS;\r
                int32_t SI;\r
                int64_t SL;\r
+               uint16_t US;\r
                uint32_t UI;\r
                uint64_t UL;\r
        };\r
@@ -209,11 +216,11 @@ size_t DBGManager_GetType(void)
 \r
 // Get source filename based on the memeory address\r
 // return NULL if no source filename\r
-char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error)\r
+char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, DBGstatus *Status)\r
 {\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               return DWARFManager_GetFullSourceFilenameFromAdr(Adr, Error);\r
+               return DWARFManager_GetFullSourceFilenameFromAdr(Adr, (DWARFstatus *)Status);\r
        }\r
        else\r
        {\r
@@ -502,6 +509,10 @@ char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t
                case DBG_ATE_signed:\r
                        switch (TypeByteSize)\r
                        {\r
+                       case 2:\r
+                               sprintf(value, "%i", V.SS);\r
+                               break;\r
+\r
                        case 4:\r
                                sprintf(value, "%i", V.SI);\r
                                break;\r
@@ -521,6 +532,10 @@ char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t
                case DBG_ATE_unsigned:\r
                        switch (TypeByteSize)\r
                        {\r
+                       case 2:\r
+                               sprintf(value, "%u", V.US);\r
+                               break;\r
+\r
                        case 4:\r
                                sprintf(value, "%u", V.UI);\r
                                break;\r
@@ -535,7 +550,7 @@ char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t
                        break;\r
 \r
                case DBG_ATE_unsigned_char:\r
-                       sprintf(value, "%u", (unsigned int(V.C)));\r
+                       sprintf(value, "%u", (unsigned int) V.C);\r
                        break;\r
 \r
                case DBG_ATE_ptr:\r
@@ -627,14 +642,19 @@ char *DBGManager_GetGlobalVariableName(size_t Index)
 // Return NULL if no function name has been found\r
 char *DBGManager_GetFunctionName(size_t Adr)\r
 {\r
+       char *Symbolname = NULL;\r
+\r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               return DWARFManager_GetFunctionName(Adr);\r
+               Symbolname = DWARFManager_GetFunctionName(Adr);\r
        }\r
-       else\r
+\r
+       if ((DBGType & DBG_ELF) && (Symbolname == NULL))\r
        {\r
-               return  NULL;\r
+               Symbolname = ELFManager_GetFunctionName(Adr);\r
        }\r
+\r
+       return  Symbolname;\r
 }\r
 \r
 \r
@@ -740,19 +760,33 @@ char *DBGManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine)
 \r
 \r
 // Get number of source code filenames\r
-size_t DBGManager_GetNbFullSourceFilename(void)\r
+size_t DBGManager_GetNbSources(void)\r
 {\r
        size_t Nbr = 0;\r
 \r
        if ((DBGType & DBG_ELFDWARF))\r
        {\r
-               Nbr = DWARFManager_GetNbFullSourceFilename();\r
+               Nbr = DWARFManager_GetNbSources();\r
        }\r
 \r
        return Nbr;\r
 }\r
 \r
 \r
+// Get source code filename based on index\r
+char *DBGManager_GetNumSourceFilename(size_t Index)\r
+{\r
+       char *SourceFilename = NULL;\r
+\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               SourceFilename = DWARFManager_GetNumSourceFilename(Index);\r
+       }\r
+\r
+       return  SourceFilename;\r
+}\r
+\r
+\r
 // Get source code filename based on index\r
 char *DBGManager_GetNumFullSourceFilename(size_t Index)\r
 {\r
@@ -765,3 +799,60 @@ char *DBGManager_GetNumFullSourceFilename(size_t Index)
 \r
        return  FullSourceFilename;\r
 }\r
+\r
+\r
+// Get number of lines of texts source list from source index\r
+size_t DBGManager_GetSrcNbListPtrFromIndex(size_t Index, bool Used)\r
+{\r
+       size_t NbListPtr = 0;\r
+\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               NbListPtr = DWARFManager_GetSrcNbListPtrFromIndex(Index, Used);\r
+       }\r
+\r
+       return  NbListPtr;\r
+}\r
+\r
+\r
+// Get pointer to the lines number list from source index\r
+size_t *DBGManager_GetSrcNumLinesPtrFromIndex(size_t Index, bool Used)\r
+{\r
+       size_t *PtrNumLines = NULL;\r
+\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               PtrNumLines = DWARFManager_GetSrcNumLinesPtrFromIndex(Index, Used);\r
+       }\r
+\r
+       return  PtrNumLines;\r
+}\r
+\r
+\r
+// Get text source list pointers from source index\r
+char **DBGManager_GetSrcListPtrFromIndex(size_t Index, bool Used)\r
+{\r
+       char **PtrSource = NULL;\r
+\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               PtrSource = DWARFManager_GetSrcListPtrFromIndex(Index, Used);\r
+       }\r
+\r
+       return  PtrSource;\r
+}\r
+\r
+\r
+// Get source language\r
+size_t DBGManager_GetSrcLanguageFromIndex(size_t Index)\r
+{\r
+       size_t Language = 0;\r
+\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               Language = DWARFManager_GetSrcLanguageFromIndex(Index);\r
+       }\r
+\r
+       return  Language;\r
+}\r
+\r