-void MC_post_process_types(mc_object_info_t info);
-
-// ***** Expressions
-
-/** \brief a DWARF expression with optional validity contraints */
-typedef struct s_mc_expression {
- size_t size;
- Dwarf_Op* ops;
- // Optional validity:
- void* lowpc, *highpc;
-} s_mc_expression_t, *mc_expression_t;
-
-/** A location list (list of location expressions) */
-typedef struct s_mc_location_list {
- size_t size;
- mc_expression_t locations;
-} s_mc_location_list_t, *mc_location_list_t;
-
-Dwarf_Off mc_dwarf_resolve_location(mc_expression_t expression, unw_cursor_t* c, void* frame_pointer_address);
-Dwarf_Off mc_dwarf_resolve_locations(mc_location_list_t locations, unw_cursor_t* c, void* frame_pointer_address);
-
-void mc_dwarf_location_list_clear(mc_location_list_t list);
-
-void mc_dwarf_location_list_init_from_expression(mc_location_list_t target, size_t len, Dwarf_Op* ops);
-void mc_dwarf_location_list_init(mc_location_list_t target, mc_object_info_t info, Dwarf_Die* die, Dwarf_Attribute* attr);
-
-// ***** Deprecated locations:
-
-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{
- void* lowpc;
- void* highpc;
- dw_location_t location;
-}s_dw_location_entry_t, *dw_location_entry_t;
-
-// ***** Variables and functions
-
-typedef struct s_dw_variable{
- Dwarf_Off dwarf_offset; /* Global offset of the field. */
- int global;
- char *name;
- char *type_origin;
- dw_type_t type;
-
- // Use either of:
- s_mc_location_list_t locations;
- void* address;
-
- size_t start_scope;
-
-}s_dw_variable_t, *dw_variable_t;
-
-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 */
-};
-
-struct s_mc_function_index_item {
- void* low_pc, *high_pc;
- dw_frame_t function;
-};
-
-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);
-void* MC_object_base_address(mc_object_info_t info);
-
-/********************************** DWARF **********************************/
-
-Dwarf_Off MC_dwarf_resolve_location(unw_cursor_t* c, dw_location_t location, void* frame_pointer_address);
-void* mc_find_frame_base(void* ip, dw_frame_t frame, unw_cursor_t* unw_cursor);
-
-#define MC_EXPRESSION_STACK_SIZE 64
-
-#define MC_EXPRESSION_OK 0
-#define MC_EXPRESSION_E_UNSUPPORTED_OPERATION 1
-#define MC_EXPRESSION_E_STACK_OVERFLOW 2
-#define MC_EXPRESSION_E_STACK_UNDERFLOW 3
-#define MC_EXPRESSION_E_MISSING_STACK_CONTEXT 4
-#define MC_EXPRESSION_E_MISSING_FRAME_BASE 5
-
-typedef struct s_mc_expression_state {
- uintptr_t stack[MC_EXPRESSION_STACK_SIZE];
- size_t stack_size;
-
- unw_cursor_t* cursor;
- void* frame_base;
-} s_mc_expression_state_t, *mc_expression_state_t;
-
-int mc_dwarf_execute_expression(size_t n, const Dwarf_Op* ops, mc_expression_state_t state);