-typedef struct s_mc_object_info {
- char* file_name;
- char *start_exec, *end_exec; // Executable segment
- char *start_rw, *end_rw; // Read-write segment
- char *start_ro, *end_ro; // read-only segment
- xbt_dict_t local_variables; // xbt_dict_t<frame_name, dw_frame_t>
- xbt_dynar_t global_variables; // xbt_dynar_t<dw_variable_t>
- 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(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;
-
-typedef enum {
- e_dw_loclist,
- e_dw_register,
- e_dw_bregister_op,
- e_dw_lit,
- e_dw_fbregister_op,
- e_dw_piece,
- e_dw_arithmetic,
- e_dw_plus_uconst,
- e_dw_compose,
- e_dw_deref,
- e_dw_uconstant,
- e_dw_sconstant,
- e_dw_unsupported
-} e_dw_location_type;
-
-typedef struct s_dw_location{
- e_dw_location_type type;
- union{
-
- xbt_dynar_t loclist;
-
- int reg;
-
- struct{
- unsigned int reg;
- int offset;
- }breg_op;
-
- unsigned int lit;
-
- int fbreg_op;
-
- int piece;
-
- unsigned short int deref_size;
-
- xbt_dynar_t compose;
-
- char *arithmetic;
-
- struct{
- int bytes;
- long unsigned int value;
- }uconstant;
-
- struct{
- int bytes;
- long signed int value;
- }sconstant;
-
- unsigned int plus_uconst;
-
- }location;
-}s_dw_location_t, *dw_location_t;
-
-typedef struct s_dw_location_entry{
- long lowpc;
- long highpc;
- dw_location_t location;
-}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;
-
- // Use either of:
- dw_location_t location;
- void* address;
-
-}s_dw_variable_t, *dw_variable_t;
-
-typedef struct s_dw_frame{
- char *name;
- void *low_pc;
- void *high_pc;
- dw_location_t frame_base;
- xbt_dynar_t /* <dw_variable_t> */ variables; /* Cannot use dict, there may be several variables with the same name (in different lexical blocks)*/
- unsigned long int start; /* DWARF offset of the subprogram */
- 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);
-void dw_variable_free(dw_variable_t v);
-void dw_variable_free_voidp(void *t);
-
-void MC_dwarf_register_global_variable(mc_object_info_t info, dw_variable_t variable);
-void MC_register_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
-void MC_dwarf_register_non_global_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
-void MC_dwarf_register_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
-
-/********************************** DWARF **********************************/
-
-Dwarf_Off MC_dwarf_resolve_location(unw_cursor_t* c, dw_location_t location, void* frame_pointer_address);