core: Fix libdwarf and Qt build failure
[clinton/Virtual-Jaguar-Rx.git] / src / debugger / DBGManager.cpp
CommitLineData
2d0121d4
JPM
1//\r
2// DBGManager.cpp: Debugger information manager\r
3//\r
4// by Jean-Paul Mari\r
5//\r
6// JPM = Jean-Paul Mari <djipi.mari@gmail.com>\r
c4fe5864 7// RG = Richard Goedeken\r
2d0121d4
JPM
8//\r
9// WHO WHEN WHAT\r
10// --- ---------- ------------------------------------------------------------\r
11// JPM 12/21/2016 Created this file\r
12// JPM Various efforts to set the ELF format support\r
13// JPM Various efforts to set the DWARF format support\r
fe3b257d 14// JPM 09/15/2018 Support the unsigned char\r
4f945aea 15// JPM Oct./2018 Cosmetic changes, added source file search paths, and ELF function name\r
aae93d86 16// JPM Aug./2019 Added new functions mainly for source text lines\r
ef0da6de 17// JPM Sept./2019 Support the unsigned/signed short type\r
c4fe5864 18// RG Jan./2021 Linux build fixes\r
c13e5416 19// JPM May/2021 Code refactoring for the variables\r
fe3b257d 20//\r
f8dde18d
JPM
21\r
22// To Do\r
4f945aea 23// To think about unique format to handle variations from ELF, DWARF, etc.\r
f8dde18d
JPM
24//\r
25\r
2d0121d4
JPM
26\r
27#include <stdlib.h>\r
28#include <string.h>\r
29#include <stdint.h>\r
c89f8ff7
RG
30#include "libelf.h"\r
31#include "gelf.h"\r
2d0121d4
JPM
32#include "log.h"\r
33#include "ELFManager.h"\r
c89f8ff7 34#include "DWARFManager.h"\r
2d0121d4
JPM
35#include "DBGManager.h"\r
36#include "HWLABELManager.h"\r
37#include "settings.h"\r
38#include "memory.h"\r
39\r
40\r
2d0121d4
JPM
41//\r
42struct Value\r
43{\r
44 union\r
45 {\r
f8dde18d
JPM
46 char Ct[10];\r
47 char C;\r
48 bool B;\r
2d0121d4
JPM
49 double D;\r
50 float F;\r
ef0da6de 51 int16_t SS;\r
2d0121d4
JPM
52 int32_t SI;\r
53 int64_t SL;\r
ef0da6de 54 uint16_t US;\r
2d0121d4
JPM
55 uint32_t UI;\r
56 uint64_t UL;\r
57 };\r
58}S_Value;\r
59\r
60\r
f0dd2f7b
JPM
61//\r
62void DBGManager_SourceFileSearchPathsInit(void);\r
63void DBGManager_SourceFileSearchPathsReset(void);\r
64void DBGManager_SourceFileSearchPathsClose(void);\r
65\r
66\r
2d0121d4
JPM
67// Common debugger variables\r
68size_t DBGType;\r
69char value[1000];\r
f0dd2f7b
JPM
70size_t NbSFSearchPaths;\r
71char **SourceFileSearchPaths;\r
72\r
73\r
74// Init the source file search paths\r
75void DBGManager_SourceFileSearchPathsInit(void)\r
76{\r
77 NbSFSearchPaths = 0;\r
78 SourceFileSearchPaths = NULL;\r
79}\r
80\r
81\r
82// Set the source file search paths\r
83// Create individual path for each one provided in the list (separate with ';')\r
84void DBGManager_SourceFileSearchPathsSet(char *ListPaths)\r
85{\r
86 // Check presence of a previous list\r
87 if (NbSFSearchPaths)\r
88 {\r
89 // Reset previous list\r
90 DBGManager_SourceFileSearchPathsReset();\r
91 }\r
92\r
93 // Check if there is a paths list\r
94 if (strlen(ListPaths))\r
95 {\r
96 // Get number of paths\r
97 char *Ptr = ListPaths;\r
98 while(*Ptr)\r
99 {\r
100 while (*Ptr && (*Ptr++ != ';'));\r
101 {\r
102 NbSFSearchPaths++;\r
103 }\r
104 }\r
105\r
106 // Isolate each search path\r
107 SourceFileSearchPaths = (char **)calloc(NbSFSearchPaths, sizeof(char *));\r
108 size_t i = 0;\r
109 Ptr = ListPaths;\r
110\r
111 while (*Ptr)\r
112 {\r
113 // Search the path separator (';')\r
114 char *Ptr1 = Ptr;\r
115 while (*Ptr && (*Ptr++ != ';'));\r
116\r
117 // Copy the inidividual search path\r
118 SourceFileSearchPaths[i] = (char *)calloc(1, (Ptr - Ptr1) + 1);\r
119 strncpy(SourceFileSearchPaths[i], Ptr1, (Ptr - Ptr1));\r
120 if (SourceFileSearchPaths[i][strlen(SourceFileSearchPaths[i]) - 1] == ';')\r
121 {\r
122 SourceFileSearchPaths[i][strlen(SourceFileSearchPaths[i]) - 1] = 0;\r
123 }\r
124 i++;\r
125 }\r
126 }\r
127\r
128 DWARFManager_Set(NbSFSearchPaths, SourceFileSearchPaths);\r
129}\r
130\r
131\r
132// Reset the source file search paths\r
133void DBGManager_SourceFileSearchPathsReset(void)\r
134{\r
135 // Free each path\r
136 while (NbSFSearchPaths)\r
137 {\r
138 free(SourceFileSearchPaths[--NbSFSearchPaths]);\r
139 }\r
140\r
141 // Free the pointers list\r
142 free(SourceFileSearchPaths);\r
143 SourceFileSearchPaths = NULL;\r
144}\r
145\r
146\r
147// Close the source file search paths\r
148void DBGManager_SourceFileSearchPathsClose(void)\r
149{\r
150 DBGManager_SourceFileSearchPathsReset();\r
151}\r
2d0121d4
JPM
152\r
153\r
154// Common debugger initialisation\r
155void DBGManager_Init(void)\r
156{\r
f0dd2f7b 157 // DBG initialisations\r
2d0121d4 158 DBGType = DBG_NO_TYPE;\r
f0dd2f7b
JPM
159 DBGManager_SourceFileSearchPathsInit();\r
160\r
161 // ELF initialisation \r
2d0121d4 162 ELFManager_Init();\r
f0dd2f7b 163 // DWARF initialisation\r
2d0121d4
JPM
164 DWARFManager_Init();\r
165}\r
166\r
167\r
168// Common debugger reset\r
169void DBGManager_Reset(void)\r
170{\r
171 if ((DBGType & DBG_DWARF))\r
172 {\r
173 DWARFManager_Reset();\r
174 }\r
175\r
176 if ((DBGType & DBG_ELF))\r
177 {\r
178 ELFManager_Reset();\r
179 }\r
180\r
181 //DBGType = vjs.displayHWlabels ? DBG_HWLABEL : DBG_NO_TYPE;\r
182 DBGType = DBG_NO_TYPE;\r
183}\r
184\r
185\r
2d0121d4
JPM
186// Common debugger close\r
187void DBGManager_Close(void)\r
188{\r
189 if ((DBGType & DBG_DWARF))\r
190 {\r
191 DWARFManager_Close();\r
192 }\r
193\r
194 if ((DBGType & DBG_ELF))\r
195 {\r
196 ELFManager_Close();\r
197 }\r
f0dd2f7b
JPM
198\r
199 DBGManager_SourceFileSearchPathsClose();\r
200 DBGType = DBG_NO_TYPE;\r
201}\r
202\r
203\r
204// Common debugger set\r
205void DBGManager_SetType(size_t DBGTypeSet)\r
206{\r
207 DBGType |= DBGTypeSet;\r
208}\r
209\r
210\r
211// Get debugger type\r
212size_t DBGManager_GetType(void)\r
213{\r
214 return DBGType;\r
2d0121d4
JPM
215}\r
216\r
217\r
218// Get source filename based on the memeory address\r
219// return NULL if no source filename\r
009df4d7 220char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, DBGstatus *Status)\r
2d0121d4
JPM
221{\r
222 if ((DBGType & DBG_ELFDWARF))\r
223 {\r
009df4d7 224 return DWARFManager_GetFullSourceFilenameFromAdr(Adr, (DWARFstatus *)Status);\r
2d0121d4
JPM
225 }\r
226 else\r
227 {\r
228 return NULL;\r
229 }\r
230}\r
231\r
232\r
c13e5416
JPM
233// Get number of variables\r
234// A NULL address will return the numbre of global variables, otherwise it will return the number of local variables\r
235size_t DBGManager_GetNbVariables(size_t Adr)\r
236{\r
237 if ((DBGType & DBG_ELFDWARF))\r
238 {\r
239 return DWARFManager_GetNbVariables(Adr);\r
240 }\r
241 else\r
242 {\r
243 return 0;\r
244 }\r
245}\r
246\r
247\r
248// Get variable's information\r
249// A NULL address will return the pointer to the global variable structure, otherwise it will return the local's one\r
250S_VariablesStruct* DBGManager_GetInfosVariable(size_t Adr, size_t Index)\r
251{\r
252 if ((DBGType & DBG_ELFDWARF))\r
253 {\r
254 return (S_VariablesStruct*)DWARFManager_GetInfosVariable(Adr, Index);\r
255 }\r
256 else\r
257 {\r
258 return NULL;\r
259 }\r
260}\r
261\r
262\r
263// Get global variable's Address based on his Name\r
264// Return found Address\r
265// Return NULL if no Address has been found\r
266size_t DBGManager_GetGlobalVariableAdrFromName(char *VariableName)\r
267{\r
268 if ((DBGType & DBG_ELFDWARF))\r
269 {\r
270 return DWARFManager_GetGlobalVariableAdrFromName(VariableName);\r
271 }\r
272 else\r
273 {\r
274 return 0;\r
275 }\r
276}\r
277\r
278\r
279#if 0\r
0203b5fd
JPM
280// Get number of local variables\r
281// Return 0 if none has been found\r
282size_t DBGManager_GetNbLocalVariables(size_t Adr)\r
283{\r
284 if ((DBGType & DBG_ELFDWARF))\r
285 {\r
286 return DWARFManager_GetNbLocalVariables(Adr);\r
287 }\r
288 else\r
289 {\r
290 return 0;\r
291 }\r
292}\r
293\r
294\r
295// Get number of global variables\r
2d0121d4 296// Return 0 if none has been found\r
0203b5fd 297size_t DBGManager_GetNbGlobalVariables(void)\r
2d0121d4
JPM
298{\r
299 if ((DBGType & DBG_ELFDWARF))\r
300 {\r
0203b5fd 301 return DWARFManager_GetNbGlobalVariables();\r
2d0121d4
JPM
302 }\r
303 else\r
304 {\r
305 return 0;\r
306 }\r
307}\r
c13e5416 308#endif\r
2d0121d4
JPM
309\r
310\r
a4e46c05
JPM
311// Get address from symbol name\r
312// Return found address\r
313// Return NULL if no symbol has been found\r
2d0121d4
JPM
314size_t DBGManager_GetAdrFromSymbolName(char *SymbolName)\r
315{\r
a4e46c05 316 if (SymbolName)\r
2d0121d4 317 {\r
a4e46c05
JPM
318 if ((DBGType & DBG_ELF))\r
319 {\r
320 return ELFManager_GetAdrFromSymbolName(SymbolName);\r
321 }\r
2d0121d4 322 }\r
a4e46c05
JPM
323\r
324 return 0;\r
2d0121d4
JPM
325}\r
326\r
327\r
c13e5416 328#if 0\r
0203b5fd
JPM
329// Get local variable's type encoding based on his address and Index\r
330// Return the type encoding found\r
331// Return 0 if no type encoding has been found\r
332size_t DBGManager_GetLocalVariableTypeEncoding(size_t Adr, size_t Index)\r
333{\r
334 if ((DBGType & DBG_ELFDWARF))\r
335 {\r
336 return DWARFManager_GetLocalVariableTypeEncoding(Adr, Index);\r
337 }\r
338 else\r
339 {\r
340 return 0;\r
341 }\r
342}\r
343\r
344\r
345//\r
346int DBGManager_GetLocalVariableOffset(size_t Adr, size_t Index)\r
347{\r
348 if ((DBGType & DBG_ELFDWARF))\r
349 {\r
350 return DWARFManager_GetLocalVariableOffset(Adr, Index);\r
351 }\r
352 else\r
353 {\r
354 return 0;\r
355 }\r
356}\r
357\r
358\r
359// Get local variable's type byte size based on his address and Index\r
360// Return the type's byte size found\r
361// Return 0 if no type's byte size has been found\r
362size_t DBGManager_GetLocalVariableTypeByteSize(size_t Adr, size_t Index)\r
363{\r
364 if ((DBGType & DBG_ELFDWARF))\r
365 {\r
366 return DWARFManager_GetLocalVariableTypeByteSize(Adr, Index);\r
367 }\r
368 else\r
369 {\r
370 return 0;\r
371 }\r
372}\r
373\r
374\r
375//\r
376size_t DBGManager_GetLocalVariableTypeTag(size_t Adr, size_t Index)\r
377{\r
378 if ((DBGType & DBG_ELFDWARF))\r
379 {\r
380 return DWARFManager_GetLocalVariableTypeTag(Adr, Index);\r
381 }\r
382 else\r
383 {\r
384 return 0;\r
385 }\r
386}\r
387\r
388\r
2d0121d4 389//\r
0203b5fd 390size_t DBGManager_GetGlobalVariableTypeTag(size_t Index)\r
2d0121d4
JPM
391{\r
392 if ((DBGType & DBG_ELFDWARF))\r
393 {\r
0203b5fd 394 return DWARFManager_GetGlobalVariableTypeTag(Index);\r
2d0121d4
JPM
395 }\r
396 else\r
397 {\r
398 return 0;\r
399 }\r
400}\r
401\r
402\r
0203b5fd 403// Get global variable's type name based on his Index\r
2d0121d4
JPM
404// Return type name's text pointer found\r
405// Return NULL if no type name has been found\r
0203b5fd 406char *DBGManager_GetGlobalVariableTypeName(size_t Index)\r
2d0121d4
JPM
407{\r
408 if ((DBGType & DBG_ELFDWARF))\r
409 {\r
0203b5fd 410 return DWARFManager_GetGlobalVariableTypeName(Index);\r
2d0121d4
JPM
411 }\r
412 else\r
413 {\r
414 return NULL;\r
415 }\r
416}\r
417\r
418\r
0203b5fd 419// Get global variable's Address based on his Index\r
2d0121d4
JPM
420// Return the Address found\r
421// Return 0 if no Address has been found\r
0203b5fd 422size_t DBGManager_GetGlobalVariableAdr(size_t Index)\r
2d0121d4
JPM
423{\r
424 if ((DBGType & DBG_ELFDWARF))\r
425 {\r
0203b5fd 426 return DWARFManager_GetGlobalVariableAdr(Index);\r
2d0121d4
JPM
427 }\r
428 else\r
429 {\r
430 return 0;\r
431 }\r
432}\r
433\r
434\r
0203b5fd 435// Get global variable's type byte size based on his Index\r
2d0121d4
JPM
436// Return the type's byte size found\r
437// Return 0 if no type's byte size has been found\r
0203b5fd 438size_t DBGManager_GetGlobalVariableTypeByteSize(size_t Index)\r
2d0121d4
JPM
439{\r
440 if ((DBGType & DBG_ELFDWARF))\r
441 {\r
0203b5fd 442 return DWARFManager_GetGlobalVariableTypeByteSize(Index);\r
2d0121d4
JPM
443 }\r
444 else\r
445 {\r
446 return 0;\r
447 }\r
448}\r
449\r
450\r
0203b5fd 451// Get global variable's type encoding based on his Index\r
2d0121d4
JPM
452// Return the type encoding found\r
453// Return 0 if no type encoding has been found\r
0203b5fd 454size_t DBGManager_GetGlobalVariableTypeEncoding(size_t Index)\r
2d0121d4
JPM
455{\r
456 if ((DBGType & DBG_ELFDWARF))\r
457 {\r
0203b5fd 458 return DWARFManager_GetGlobalVariableTypeEncoding(Index);\r
2d0121d4
JPM
459 }\r
460 else\r
461 {\r
462 return 0;\r
463 }\r
464}\r
465\r
466\r
0203b5fd 467// Get global variable value based on his Index\r
2d0121d4
JPM
468// Return value as a text pointer\r
469// Note: Pointer may point on a 0 lenght text\r
0203b5fd 470char *DBGManager_GetGlobalVariableValue(size_t Index)\r
2d0121d4 471{\r
0203b5fd
JPM
472 size_t Adr = 0;\r
473 size_t TypeEncoding = DBG_NO_TYPEENCODING;\r
474 size_t TypeByteSize = 0;\r
2d0121d4
JPM
475\r
476 if ((DBGType & DBG_ELFDWARF))\r
477 {\r
0203b5fd
JPM
478 Adr = DWARFManager_GetGlobalVariableAdr(Index);\r
479 TypeEncoding = DWARFManager_GetGlobalVariableTypeEncoding(Index);\r
480 TypeByteSize = DWARFManager_GetGlobalVariableTypeByteSize(Index);\r
2d0121d4
JPM
481 }\r
482\r
483 return DBGManager_GetVariableValueFromAdr(Adr, TypeEncoding, TypeByteSize);\r
484}\r
485\r
486\r
c13e5416
JPM
487// Get local variable's type name based on his Index\r
488// Return type name's text pointer found\r
489// Return NULL if no type name has been found\r
490char *DBGManager_GetLocalVariableTypeName(size_t Adr, size_t Index)\r
491{\r
492 if ((DBGType & DBG_ELFDWARF))\r
493 {\r
494 return DWARFManager_GetLocalVariableTypeName(Adr, Index);\r
495 }\r
496 else\r
497 {\r
498 return NULL;\r
499 }\r
500}\r
501\r
502\r
503// Get local variable Op based on his Index\r
504// Return variable Op's found\r
505// Return 0 if no variable Op has been found\r
506size_t DBGManager_GetLocalVariableOp(size_t Adr, size_t Index)\r
507{\r
508 if ((DBGType & DBG_ELFDWARF))\r
509 {\r
510 return DWARFManager_GetLocalVariableOp(Adr, Index);\r
511 }\r
512 else\r
513 {\r
514 return 0;\r
515 }\r
516}\r
517\r
518\r
519// Get local variable name based on his Index\r
520// Return variable name's text pointer found\r
521// Return NULL if no variable name has been found\r
522char *DBGManager_GetLocalVariableName(size_t Adr, size_t Index)\r
523{\r
524 if ((DBGType & DBG_ELFDWARF))\r
525 {\r
526 return DWARFManager_GetLocalVariableName(Adr, Index);\r
527 }\r
528 else\r
529 {\r
530 return NULL;\r
531 }\r
532}\r
533\r
534\r
535// Get global variable name based on his Index\r
536// Return variable name's text pointer found\r
537// Return NULL if no variable name has been found\r
538char *DBGManager_GetGlobalVariableName(size_t Index)\r
539{\r
540 if ((DBGType & DBG_ELFDWARF))\r
541 {\r
542 return DWARFManager_GetGlobalVariableName(Index);\r
543 }\r
544 else\r
545 {\r
546 return NULL;\r
547 }\r
548}\r
549#endif\r
550\r
551\r
2d0121d4
JPM
552// Get variable value based on his Adresse, Encoding Type and Size\r
553// Return value as a text pointer\r
f8dde18d 554// Note: Pointer may point on a 0 length text\r
0203b5fd 555char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t TypeByteSize)\r
2d0121d4
JPM
556{\r
557 Value V;\r
558 char *Ptrvalue = value;\r
559\r
560 value[0] = 0;\r
561\r
f8dde18d 562#if 0\r
2d0121d4 563 if (Adr)\r
f8dde18d 564#endif\r
2d0121d4
JPM
565 {\r
566 memset(&V, 0, sizeof(Value));\r
567#if 0\r
568 for (uint32_t i = 0; i < TypeByteSize; i++)\r
569 jaguarMainRAM[Adr + i] = 0;\r
570 //jaguarMainRAM[Adr + i] = rand();\r
571 jaguarMainRAM[Adr + TypeByteSize - 1] = 0x10;\r
f8dde18d 572#else\r
0203b5fd 573 for (size_t i = 0, j = TypeByteSize; i < TypeByteSize; i++, j--)\r
2d0121d4 574 {\r
f8dde18d 575 V.Ct[i] = jaguarMainRAM[Adr + j - 1];\r
2d0121d4
JPM
576 }\r
577#endif\r
2d0121d4
JPM
578 switch (TypeEncoding)\r
579 {\r
580 case DBG_ATE_address:\r
581 break;\r
582\r
583 case DBG_ATE_boolean:\r
f8dde18d 584 sprintf(value, "%s", V.B ? "true" : "false");\r
2d0121d4
JPM
585 break;\r
586\r
587 case DBG_ATE_complex_float:\r
588 break;\r
589\r
590 case DBG_ATE_float:\r
591 switch (TypeByteSize)\r
592 {\r
593 case 4:\r
594 sprintf(value, "%F", V.F);\r
595 break;\r
596\r
597 case 8:\r
598 //V.D = (double)jaguarMainRAM[Adr];\r
599 //sprintf(value, "%10.10F", V.D);\r
600 sprintf(value, "%F", V.D);\r
601 break;\r
602\r
603 default:\r
604 break;\r
605 }\r
606 break;\r
607\r
608 case DBG_ATE_signed:\r
609 switch (TypeByteSize)\r
610 {\r
ef0da6de
JPM
611 case 2:\r
612 sprintf(value, "%i", V.SS);\r
613 break;\r
614\r
2d0121d4
JPM
615 case 4:\r
616 sprintf(value, "%i", V.SI);\r
617 break;\r
618\r
619 case 8:\r
620 sprintf(value, "%i", V.SL);\r
621 break;\r
622\r
623 default:\r
624 break;\r
625 }\r
626 break;\r
627\r
628 case DBG_ATE_signed_char:\r
629 break;\r
630\r
631 case DBG_ATE_unsigned:\r
632 switch (TypeByteSize)\r
633 {\r
ef0da6de
JPM
634 case 2:\r
635 sprintf(value, "%u", V.US);\r
636 break;\r
637\r
2d0121d4
JPM
638 case 4:\r
639 sprintf(value, "%u", V.UI);\r
640 break;\r
641\r
642 case 8:\r
643 sprintf(value, "%u", V.UL);\r
644 break;\r
645\r
646 default:\r
647 break;\r
648 }\r
649 break;\r
650\r
651 case DBG_ATE_unsigned_char:\r
c89f8ff7 652 sprintf(value, "%u", (unsigned int) V.C);\r
2d0121d4
JPM
653 break;\r
654\r
655 case DBG_ATE_ptr:\r
656 switch (TypeByteSize)\r
657 {\r
658 case 4:\r
659 sprintf(value, "0x%06x", V.UI);\r
660 break;\r
661\r
662 default:\r
663 break;\r
664 }\r
665\r
666 default:\r
667 break;\r
668 }\r
669 }\r
670\r
671 return Ptrvalue;\r
672}\r
673\r
674\r
0203b5fd
JPM
675// Get function name from address\r
676// Return function name found\r
677// Return NULL if no function name has been found\r
678char *DBGManager_GetFunctionName(size_t Adr)\r
2d0121d4 679{\r
4f945aea
JPM
680 char *Symbolname = NULL;\r
681\r
2d0121d4
JPM
682 if ((DBGType & DBG_ELFDWARF))\r
683 {\r
4f945aea 684 Symbolname = DWARFManager_GetFunctionName(Adr);\r
2d0121d4 685 }\r
4f945aea
JPM
686\r
687 if ((DBGType & DBG_ELF) && (Symbolname == NULL))\r
2d0121d4 688 {\r
4f945aea 689 Symbolname = ELFManager_GetFunctionName(Adr);\r
2d0121d4 690 }\r
4f945aea
JPM
691\r
692 return Symbolname;\r
2d0121d4
JPM
693}\r
694\r
695\r
696// Get line number from address and his tag\r
697// Return line number on the symbol name found\r
698// Return 0 if no symbol name has been found\r
699size_t DBGManager_GetNumLineFromAdr(size_t Adr, size_t Tag)\r
700{\r
701 if ((DBGType & DBG_ELFDWARF))\r
702 {\r
703 return DWARFManager_GetNumLineFromAdr(Adr, Tag);\r
704 }\r
705 else\r
706 {\r
707 return 0;\r
708 }\r
709}\r
710\r
711\r
712// Get symbol name from address\r
713// Return text pointer on the symbol name found\r
714// Return NULL if no symbol name has been found\r
0203b5fd 715char *DBGManager_GetSymbolNameFromAdr(size_t Adr)\r
2d0121d4
JPM
716{\r
717 char *Symbolname;\r
718\r
719 //if ((DBGType & DBG_HWLABEL) || vjs.displayHWlabels)\r
720 if (vjs.displayHWlabels)\r
721 {\r
722 Symbolname = HWLABELManager_GetSymbolnameFromAdr(Adr);\r
723 }\r
724 else\r
725 {\r
726 Symbolname = NULL;\r
727 }\r
41d6f5f7
JPM
728#ifdef _MSC_VER\r
729#pragma message("Warning: !!! Need to set the DBG_HWLABEL in DBGType instead to use the setting value !!!")\r
730#else\r
731 #warning "!!! Need to set the DBG_HWLABEL in DBGType instead to use the setting value !!!"\r
2d0121d4
JPM
732#endif // _MSC_VER\r
733\r
734 if (Symbolname == NULL)\r
735 {\r
736 if ((DBGType & DBG_ELFDWARF))\r
737 {\r
738 Symbolname = DWARFManager_GetSymbolnameFromAdr(Adr);\r
739 }\r
740\r
741 if ((DBGType & DBG_ELF) && (Symbolname == NULL))\r
742 {\r
743 Symbolname = ELFManager_GetSymbolnameFromAdr(Adr);\r
744 }\r
745 }\r
746\r
747 return Symbolname;\r
748}\r
749\r
750\r
751// Get source line based on the Address and his Tag\r
752// Return text pointer on the source line found\r
753// Return NULL if no source line has been found\r
754char *DBGManager_GetLineSrcFromAdr(size_t Adr, size_t Tag)\r
755{\r
fe3b257d 756 char *TextLine = NULL;\r
2d0121d4
JPM
757\r
758 if ((DBGType & DBG_ELFDWARF))\r
759 {\r
fe3b257d 760 TextLine = DWARFManager_GetLineSrcFromAdr(Adr, Tag);\r
2d0121d4
JPM
761 }\r
762\r
fe3b257d 763 return TextLine;\r
2d0121d4
JPM
764}\r
765\r
766\r
fe3b257d 767// Get text line from source based on address and num line (starting from 1)\r
2d0121d4
JPM
768// Return NULL if no text line has been found\r
769char *DBGManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine)\r
770{\r
fe3b257d 771 char *TextLine = NULL;\r
2d0121d4
JPM
772\r
773 if ((DBGType & DBG_ELFDWARF))\r
774 {\r
fe3b257d 775 TextLine = DWARFManager_GetLineSrcFromAdrNumLine(Adr, NumLine);\r
2d0121d4
JPM
776 }\r
777\r
fe3b257d 778 return TextLine;\r
2d0121d4
JPM
779}\r
780\r
781\r
fe3b257d 782// Get text line from source based on address and num line (starting from 1)\r
2d0121d4
JPM
783// Return NULL if no text line has been found\r
784char *DBGManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine)\r
785{\r
fe3b257d 786 char *TextLine = NULL;\r
2d0121d4
JPM
787\r
788 if ((DBGType & DBG_ELFDWARF))\r
789 {\r
fe3b257d 790 TextLine = DWARFManager_GetLineSrcFromNumLineBaseAdr(Adr, NumLine);\r
2d0121d4
JPM
791 }\r
792\r
fe3b257d 793 return TextLine;\r
2d0121d4
JPM
794}\r
795\r
6564336c
JPM
796\r
797// Get number of source code filenames\r
aae93d86 798size_t DBGManager_GetNbSources(void)\r
6564336c
JPM
799{\r
800 size_t Nbr = 0;\r
801\r
802 if ((DBGType & DBG_ELFDWARF))\r
803 {\r
aae93d86 804 Nbr = DWARFManager_GetNbSources();\r
6564336c
JPM
805 }\r
806\r
807 return Nbr;\r
808}\r
809\r
810\r
aae93d86
JPM
811// Get source code filename based on index\r
812char *DBGManager_GetNumSourceFilename(size_t Index)\r
813{\r
814 char *SourceFilename = NULL;\r
815\r
816 if ((DBGType & DBG_ELFDWARF))\r
817 {\r
818 SourceFilename = DWARFManager_GetNumSourceFilename(Index);\r
819 }\r
820\r
821 return SourceFilename;\r
822}\r
823\r
824\r
6564336c
JPM
825// Get source code filename based on index\r
826char *DBGManager_GetNumFullSourceFilename(size_t Index)\r
827{\r
828 char *FullSourceFilename = NULL;\r
829\r
830 if ((DBGType & DBG_ELFDWARF))\r
831 {\r
832 FullSourceFilename = DWARFManager_GetNumFullSourceFilename(Index);\r
833 }\r
834\r
835 return FullSourceFilename;\r
836}\r
aae93d86
JPM
837\r
838\r
839// Get number of lines of texts source list from source index\r
840size_t DBGManager_GetSrcNbListPtrFromIndex(size_t Index, bool Used)\r
841{\r
842 size_t NbListPtr = 0;\r
843\r
844 if ((DBGType & DBG_ELFDWARF))\r
845 {\r
846 NbListPtr = DWARFManager_GetSrcNbListPtrFromIndex(Index, Used);\r
847 }\r
848\r
849 return NbListPtr;\r
850}\r
851\r
852\r
853// Get pointer to the lines number list from source index\r
854size_t *DBGManager_GetSrcNumLinesPtrFromIndex(size_t Index, bool Used)\r
855{\r
856 size_t *PtrNumLines = NULL;\r
857\r
858 if ((DBGType & DBG_ELFDWARF))\r
859 {\r
860 PtrNumLines = DWARFManager_GetSrcNumLinesPtrFromIndex(Index, Used);\r
861 }\r
862\r
863 return PtrNumLines;\r
864}\r
865\r
866\r
867// Get text source list pointers from source index\r
868char **DBGManager_GetSrcListPtrFromIndex(size_t Index, bool Used)\r
869{\r
870 char **PtrSource = NULL;\r
871\r
872 if ((DBGType & DBG_ELFDWARF))\r
873 {\r
874 PtrSource = DWARFManager_GetSrcListPtrFromIndex(Index, Used);\r
875 }\r
876\r
877 return PtrSource;\r
878}\r
879\r
880\r
881// Get source language\r
882size_t DBGManager_GetSrcLanguageFromIndex(size_t Index)\r
883{\r
884 size_t Language = 0;\r
885\r
886 if ((DBGType & DBG_ELFDWARF))\r
887 {\r
888 Language = DWARFManager_GetSrcLanguageFromIndex(Index);\r
889 }\r
890\r
891 return Language;\r
892}\r
893\r