-enum mc_object_info_flags {
- MC_OBJECT_INFO_NONE = 0,
- MC_OBJECT_INFO_EXECUTABLE = 1
-};
-
-struct s_mc_object_info {
- enum mc_object_info_flags flags;
- 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 subprograms; // xbt_dict_t<origin as hexadecimal string, 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>
- xbt_dict_t full_types_by_name; // xbt_dict_t<name, dw_type_t> (full defined type only)
-
- // Here we sort the minimal information for an efficient (and cache-efficient)
- // lookup of a function given an instruction pointer.
- // The entries are sorted by low_pc and a binary search can be used to look them up.
- xbt_dynar_t functions_index;
-};
-
-/** Find the DWARF offset for this ELF object
- *
- * An offset is applied to address found in DWARF:
- *
- * <ul>
- * <li>for an executable obejct, addresses are virtual address
- * (there is no offset) i.e. \f$\text{virtual address} = \{dwarf address}\f$;</li>
- * <li>for a shared object, the addreses are offset from the begining
- * of the shared object (the base address of the mapped shared
- * object must be used as offset
- * i.e. \f$\text{virtual address} = \text{shared object base address}
- * + \text{dwarf address}\f$.</li>
- *
- */
-void* MC_object_base_address(mc_object_info_t info);
-
-mc_object_info_t MC_new_object_info(void);
-mc_object_info_t MC_find_object_info(memory_map_t maps, char* name, int executable);
-void MC_free_object_info(mc_object_info_t* p);
-
-void MC_post_process_object_info(mc_object_info_t info);
-
-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);