Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Deduplicate address location resolution in MC_dwarf_resolve_location()
[simgrid.git] / src / mc / mc_private.h
index 9d68c04..10287ca 100644 (file)
@@ -12,6 +12,8 @@
 #ifndef WIN32
 #include <sys/mman.h>
 #endif
+#include <elfutils/libdw.h>
+
 #include "mc/mc.h"
 #include "mc/datatypes.h"
 #include "xbt/fifo.h"
@@ -330,11 +332,14 @@ typedef struct s_mc_object_info {
   xbt_dict_t types; // xbt_dict_t<origin as hexadecimal string, dw_type_t>
 } s_mc_object_info_t, *mc_object_info_t;
 
-mc_object_info_t MC_new_object_info();
+mc_object_info_t MC_new_object_info(void);
 mc_object_info_t MC_find_object_info(memory_map_t maps, char* name);
 void MC_free_object_info(mc_object_info_t* p);
 
 void MC_dwarf_get_variables(mc_object_info_t info);
+void MC_dwarf_get_variables_libdw(mc_object_info_t info);
+const char* MC_dwarf_attrname(int attr);
+const char* MC_dwarf_tagname(int tag);
 
 extern mc_object_info_t mc_libsimgrid_info;
 extern mc_object_info_t mc_binary_info;
@@ -402,6 +407,7 @@ typedef struct s_dw_location_entry{
 }s_dw_location_entry_t, *dw_location_entry_t;
 
 typedef struct s_dw_variable{
+  Dwarf_Off dwarf_offset; /* Global offset of the field. */
   int global;
   char *name;
   char *type_origin;
@@ -421,6 +427,12 @@ typedef struct s_dw_frame{
   unsigned long int end;   /* Dwarf offset of the next sibling */
 }s_dw_frame_t, *dw_frame_t;
 
+void dw_type_free(dw_type_t t);
+
+/********************************** DWARF **********************************/
+
+Dwarf_Off MC_dwarf_resolve_location(unw_cursor_t* c, dw_location_t location, void* frame_pointer_address);
+
 /********************************** Miscellaneous **********************************/
 
 typedef struct s_local_variable{
@@ -432,5 +444,7 @@ typedef struct s_local_variable{
   int region;
 }s_local_variable_t, *local_variable_t;
 
+#define MC_USE_LIBDW_TYPES 1
+
 #endif