X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/220a6109b767302515959ba7b80a36cfd9fd94ca..43c98702056fac491ffe054cdba3f36e4c8dbf3a:/src/mc/mc_private.h diff --git a/src/mc/mc_private.h b/src/mc/mc_private.h index 1147044e5b..8911c1458b 100644 --- a/src/mc/mc_private.h +++ b/src/mc/mc_private.h @@ -518,8 +518,49 @@ typedef struct s_mc_location_list { mc_expression_t locations; } s_mc_location_list_t, *mc_location_list_t; -uintptr_t mc_dwarf_resolve_location(mc_expression_t expression, mc_object_info_t object_info, unw_cursor_t* c, void* frame_pointer_address, mc_snapshot_t snapshot, int process_index); -uintptr_t mc_dwarf_resolve_locations(mc_location_list_t locations, mc_object_info_t object_info, unw_cursor_t* c, void* frame_pointer_address, mc_snapshot_t snapshot, int process_index); +/** A location is either a location in memory of a register location + * + * Usage: + * + * * mc_dwarf_resolve_locations or mc_dwarf_resolve_location is used + * to find the location of a given location expression or location list; + * + * * mc_get_location_type MUST be used to find the location type; + * + * * for MC_LOCATION_TYPE_ADDRESS, memory_address is the resulting address + * + * * for MC_LOCATION_TYPE_REGISTER, unw_get_reg(l.cursor, l.register_id, value) + * and unw_get_reg(l.cursor, l.register_id, value) can be used to read/write + * the value. + * + */ +typedef struct s_mc_location { + void* memory_location; + unw_cursor_t* cursor; + int register_id; +} s_mc_location_t, *mc_location_t; + +/** Type of a given location + * + * Use `mc_get_location_type(location)` to find the type. + * */ +typedef enum mc_location_type { + MC_LOCATION_TYPE_ADDRESS, + MC_LOCATION_TYPE_REGISTER +} mc_location_type; + +/** Find the type of a location */ +static inline __attribute__ ((always_inline)) +enum mc_location_type mc_get_location_type(mc_location_t location) { + if (location->cursor) { + return MC_LOCATION_TYPE_REGISTER; + } else { + return MC_LOCATION_TYPE_ADDRESS; + } +} + +void mc_dwarf_resolve_location(mc_location_t location, mc_expression_t expression, mc_object_info_t object_info, unw_cursor_t* c, void* frame_pointer_address, mc_snapshot_t snapshot, int process_index); +void mc_dwarf_resolve_locations(mc_location_t location, mc_location_list_t locations, mc_object_info_t object_info, unw_cursor_t* c, void* frame_pointer_address, mc_snapshot_t snapshot, int process_index); void mc_dwarf_expression_clear(mc_expression_t expression); void mc_dwarf_expression_init(mc_expression_t expression, size_t len, Dwarf_Op* ops); @@ -813,6 +854,13 @@ void* mc_snapshot_read_pointer_region(void* addr, mc_mem_region_t region) return *(void**) mc_snapshot_read_region(addr, region, &res, sizeof(void*)); } +#define MC_LOG_REQUEST(log, req, value) \ + if (XBT_LOG_ISENABLED(log, xbt_log_priority_debug)) { \ + char* req_str = MC_request_to_string(req, value); \ + XBT_DEBUG("Execute: %s", req_str); \ + xbt_free(req_str); \ + } + SG_END_DECL() #endif