+// Get number of variables referenced by the function range address\r
+size_t DWARFManager_GetNbLocalVariables(size_t Adr)\r
+{\r
+ for (size_t i = 0; i < NbCU; i++)\r
+ {\r
+ if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+ {\r
+ for (size_t j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+ {\r
+ if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+ {\r
+ return PtrCU[i].PtrSubProgs[j].NbVariables;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r
+\r
+// Get local variable name based on his index (starting from 1)\r
+// Return name's pointer text found\r
+// Return NULL if not found\r
+char *DWARFManager_GetLocalVariableName(size_t Adr, size_t Index)\r
+{\r
+ for (size_t i = 0; i < NbCU; i++)\r
+ {\r
+ if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+ {\r
+ for (size_t j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+ {\r
+ if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+ {\r
+ return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].PtrName;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return NULL;\r
+}\r
+\r
+\r
+// Get local variable's type tag based on his index (starting from 1)\r
+// Return 0 if not found\r
+size_t DWARFManager_GetLocalVariableTypeTag(size_t Adr, size_t Index)\r
+{\r
+ for (size_t i = 0; i < NbCU; i++)\r
+ {\r
+ if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+ {\r
+ for (size_t j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+ {\r
+ if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+ {\r
+ return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].TypeTag;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r
+\r
+// Get the local variable's offset based on a index (starting from 1)\r
+// Return 0 if no offset has been found\r
+int DWARFManager_GetLocalVariableOffset(size_t Adr, size_t Index)\r
+{\r
+ for (size_t i = 0; i < NbCU; i++)\r
+ {\r
+ if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+ {\r
+ for (size_t j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+ {\r
+ if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+ {\r
+ return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].Offset;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r
+\r
+// Get local variable Type Byte Size based on his address and index (starting from 1)\r
+// Return 0 if not found\r
+// May return 0 if there is no Type Byte Size linked to the variable's address and index\r
+size_t DWARFManager_GetLocalVariableTypeByteSize(size_t Adr, size_t Index)\r
+{\r
+ for (size_t i = 0; i < NbCU; i++)\r
+ {\r
+ if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+ {\r
+ for (size_t j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+ {\r
+ if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+ {\r
+ return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].TypeByteSize;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r
+\r
+// Get local variable Type Encoding based on his address and index (starting from 1)\r
+// Return 0 if not found\r
+// May return 0 if there is no Type Encoding linked to the variable's address and index\r
+size_t DWARFManager_GetLocalVariableTypeEncoding(size_t Adr, size_t Index)\r
+{\r
+ for (size_t i = 0; i < NbCU; i++)\r
+ {\r
+ if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+ {\r
+ for (size_t j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+ {\r
+ if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+ {\r
+ return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].TypeEncoding;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r
+\r
+// Get local variable Op based on his address and index (starting from 1)\r
+// Return 0 if not found, may return 0 if there isn't Op linked to the variable's index\r
+size_t DWARFManager_GetLocalVariableOp(size_t Adr, size_t Index)\r
+{\r
+ for (size_t i = 0; i < NbCU; i++)\r
+ {\r
+ if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+ {\r
+ for (size_t j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+ {\r
+ if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+ {\r
+ return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].Op;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r
+\r
+// Get local variable type name based on his index (starting from 1) and an address\r
+// Return NULL if not found, may also return NULL if there is no type linked to the variable's index\r
+char *DWARFManager_GetLocalVariableTypeName(size_t Adr, size_t Index)\r
+{\r
+ for (size_t i = 0; i < NbCU; i++)\r
+ {\r
+ if ((Adr >= PtrCU[i].LowPC) && (Adr < PtrCU[i].HighPC))\r
+ {\r
+ for (size_t j = 0; j < PtrCU[i].NbSubProgs; j++)\r
+ {\r
+ if ((Adr >= PtrCU[i].PtrSubProgs[j].LowPC) && (Adr < PtrCU[i].PtrSubProgs[j].HighPC))\r
+ {\r
+ return PtrCU[i].PtrSubProgs[j].PtrVariables[Index - 1].PtrTypeName;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ return NULL;\r
+}\r
+\r
+\r
+// Get Compilation Unit / global variables numbers\r
+// Return number of variables\r
+size_t DWARFManager_GetNbGlobalVariables(void)\r