7dd3015be4891b086e2f9039f864de673176542f
2 // DBGManager.cpp: Debugger information manager
6 // JPM = Jean-Paul Mari <djipi.mari@gmail.com>
9 // --- ---------- ------------------------------------------------------------
10 // JPM 12/21/2016 Created this file
11 // JPM Various efforts to set the ELF format support
12 // JPM Various efforts to set the DWARF format support
17 #include "libelf\libelf.h"
18 #include "libelf\gelf.h"
20 #include "ELFManager.h"
21 #include "DwarfManager.h"
22 #include "DBGManager.h"
23 #include "HWLABELManager.h"
29 char *DBGManager_GetVariableValueFromAdr(uint32_t Adr
, uint32_t TypeEncoding
, uint32_t TypeByteSize
);
48 // Common debugger variables
53 // Common debugger initialisation
54 void DBGManager_Init(void)
56 DBGType
= DBG_NO_TYPE
;
62 // Common debugger reset
63 void DBGManager_Reset(void)
65 if ((DBGType
& DBG_DWARF
))
70 if ((DBGType
& DBG_ELF
))
75 DBGType
= vjs
.displayHWlabels
? DBG_HWLABEL
: DBG_NO_TYPE
;
79 // Common debugger set
80 void DBGManager_SetType(int DBGTypeSet
)
82 DBGType
|= DBGTypeSet
;
86 // Common debugger close
87 void DBGManager_Close(void)
89 if ((DBGType
& DBG_DWARF
))
94 if ((DBGType
& DBG_ELF
))
101 // Get source filename based on the memeory address
102 // return NULL if no source filename
103 char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr
, bool *Error
)
105 if ((DBGType
& DBG_ELFDWARF
))
107 return DWARFManager_GetFullSourceFilenameFromAdr(Adr
, Error
);
116 // Get number of external variables
117 // Return 0 if none has been found
118 size_t DBGManager_GetNbExternalVariables(void)
120 if ((DBGType
& DBG_ELFDWARF
))
122 return DWARFManager_GetNbExternalVariables();
132 size_t DBGManager_GetAdrFromSymbolName(char *SymbolName
)
134 if ((DBGType
& DBG_ELF
))
136 return ELFManager_GetAdrFromSymbolName(SymbolName
);
145 // Get external variable's Address based on his Name
146 // Return found Address
147 // Return NULL if no Address has been found
148 size_t DBGManager_GetExternalVariableAdrFromName(char *VariableName
)
150 if ((DBGType
& DBG_ELFDWARF
))
152 return DWARFManager_GetExternalVariableAdrFromName(VariableName
);
162 size_t DBGManager_GetExternalVariableTypeTag(size_t Index
)
164 if ((DBGType
& DBG_ELFDWARF
))
166 return DWARFManager_GetExternalVariableTypeTag(Index
);
175 // Get external variable's type name based on his Index
176 // Return type name's text pointer found
177 // Return NULL if no type name has been found
178 char *DBGManager_GetExternalVariableTypeName(size_t Index
)
180 if ((DBGType
& DBG_ELFDWARF
))
182 return DWARFManager_GetExternalVariableTypeName(Index
);
191 // Get external variable's Address based on his Index
192 // Return the Address found
193 // Return 0 if no Address has been found
194 size_t DBGManager_GetExternalVariableAdr(size_t Index
)
196 if ((DBGType
& DBG_ELFDWARF
))
198 return DWARFManager_GetExternalVariableAdr(Index
);
207 // Get external variable's type byte size based on his Index
208 // Return the type's byte size found
209 // Return 0 if no type's byte size has been found
210 size_t DBGManager_GetExternalVariableTypeByteSize(size_t Index
)
212 if ((DBGType
& DBG_ELFDWARF
))
214 return DWARFManager_GetExternalVariableTypeByteSize(Index
);
223 // Get external variable's type encoding based on his Index
224 // Return the type encoding found
225 // Return 0 if no type encoding has been found
226 size_t DBGManager_GetExternalVariableTypeEncoding(size_t Index
)
228 if ((DBGType
& DBG_ELFDWARF
))
230 return DWARFManager_GetExternalVariableTypeEncoding(Index
);
239 // Get external variable value based on his Index
240 // Return value as a text pointer
241 // Note: Pointer may point on a 0 lenght text
242 char *DBGManager_GetExternalVariableValue(size_t Index
)
245 uint32_t TypeEncoding
= DBG_NO_TYPEENCODING
;
246 uint32_t TypeByteSize
= 0;
248 if ((DBGType
& DBG_ELFDWARF
))
250 Adr
= DWARFManager_GetExternalVariableAdr(Index
);
251 TypeEncoding
= DWARFManager_GetExternalVariableTypeEncoding(Index
);
252 TypeByteSize
= DWARFManager_GetExternalVariableTypeByteSize(Index
);
255 return DBGManager_GetVariableValueFromAdr(Adr
, TypeEncoding
, TypeByteSize
);
259 // Get variable value based on his Adresse, Encoding Type and Size
260 // Return value as a text pointer
261 // Note: Pointer may point on a 0 lenght text if Adress is NULL
262 char *DBGManager_GetVariableValueFromAdr(uint32_t Adr
, uint32_t TypeEncoding
, uint32_t TypeByteSize
)
265 char *Ptrvalue
= value
;
271 memset(&V
, 0, sizeof(Value
));
273 for (uint32_t i
= 0; i
< TypeByteSize
; i
++)
274 jaguarMainRAM
[Adr
+ i
] = 0;
275 //jaguarMainRAM[Adr + i] = rand();
276 jaguarMainRAM
[Adr
+ TypeByteSize
- 1] = 0x10;
279 for (uint32_t i
= 0, j
= TypeByteSize
; i
< TypeByteSize
; i
++, j
--)
281 V
.C
[i
] = jaguarMainRAM
[Adr
+ j
- 1];
285 switch (TypeEncoding
)
287 case DBG_ATE_address
:
290 case DBG_ATE_boolean
:
293 case DBG_ATE_complex_float
:
297 switch (TypeByteSize
)
300 sprintf(value
, "%F", V
.F
);
304 //V.D = (double)jaguarMainRAM[Adr];
305 //sprintf(value, "%10.10F", V.D);
306 sprintf(value
, "%F", V
.D
);
315 switch (TypeByteSize
)
318 sprintf(value
, "%i", V
.SI
);
322 sprintf(value
, "%i", V
.SL
);
330 case DBG_ATE_signed_char
:
333 case DBG_ATE_unsigned
:
334 switch (TypeByteSize
)
337 sprintf(value
, "%u", V
.UI
);
341 sprintf(value
, "%u", V
.UL
);
349 case DBG_ATE_unsigned_char
:
353 switch (TypeByteSize
)
356 sprintf(value
, "0x%06x", V
.UI
);
372 // Get external variable name based on his Index
373 // Return variable name's text pointer found
374 // Return NULL if no variable name has been found
375 char *DBGManager_GetExternalVariableName(size_t Index
)
377 if ((DBGType
& DBG_ELFDWARF
))
379 return DWARFManager_GetExternalVariableName(Index
);
388 // Get line number from address and his tag
389 // Return line number on the symbol name found
390 // Return 0 if no symbol name has been found
391 size_t DBGManager_GetNumLineFromAdr(size_t Adr
, size_t Tag
)
393 if ((DBGType
& DBG_ELFDWARF
))
395 return DWARFManager_GetNumLineFromAdr(Adr
, Tag
);
404 // Get symbol name from address
405 // Return text pointer on the symbol name found
406 // Return NULL if no symbol name has been found
407 char *DBGManager_GetSymbolnameFromAdr(size_t Adr
)
409 char *Symbolname
= NULL
;
411 if ((DBGType
& DBG_HWLABEL
) || vjs
.displayHWlabels
)
413 Symbolname
= HWLABELManager_GetSymbolnameFromAdr(Adr
);
416 if (Symbolname
== NULL
)
418 if ((DBGType
& DBG_ELFDWARF
))
420 Symbolname
= DWARFManager_GetSymbolnameFromAdr(Adr
);
423 if ((DBGType
& DBG_ELF
) && (Symbolname
== NULL
))
425 Symbolname
= ELFManager_GetSymbolnameFromAdr(Adr
);
433 // Get source line based on the Address and his Tag
434 // Return text pointer on the source line found
435 // Return NULL if no source line has been found
436 char *DBGManager_GetLineSrcFromAdr(size_t Adr
, size_t Tag
)
438 char *Symbolname
= NULL
;
440 if ((DBGType
& DBG_ELFDWARF
))
442 Symbolname
= DWARFManager_GetLineSrcFromAdr(Adr
, Tag
);
449 // Get text line from source based on address and num line (starting by 1)
450 // Return NULL if no text line has been found
451 char *DBGManager_GetLineSrcFromAdrNumLine(size_t Adr
, size_t NumLine
)
453 char *Symbolname
= NULL
;
455 if ((DBGType
& DBG_ELFDWARF
))
457 Symbolname
= DWARFManager_GetLineSrcFromAdrNumLine(Adr
, NumLine
);
464 // Get text line from source based on address and num line (starting by 1)
465 // Return NULL if no text line has been found
466 char *DBGManager_GetLineSrcFromNumLineBaseAdr(size_t Adr
, size_t NumLine
)
468 char *Symbolname
= NULL
;
470 if ((DBGType
& DBG_ELFDWARF
))
472 Symbolname
= DWARFManager_GetLineSrcFromNumLineBaseAdr(Adr
, NumLine
);