// 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
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
\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
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
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
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
// 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
\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
\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