- local_variable_t new_var = xbt_new0(s_local_variable_t, 1);
- new_var->subprogram = stack_frame->frame;
- new_var->ip = stack_frame->ip;
- new_var->name = xbt_strdup(current_variable->name);
- new_var->type = current_variable->type;
- new_var->region = region_type;
-
- if (current_variable->address != NULL) {
- new_var->address = current_variable->address;
- } else if (current_variable->locations.size != 0) {
- s_mc_location_t location;
- mc_dwarf_resolve_locations(
- &location, ¤t_variable->locations,
- current_variable->object_info,
- &(stack_frame->unw_cursor),
- (void *) stack_frame->frame_base,
- &mc_model_checker->process(), process_index);
-
- switch(mc_get_location_type(&location)) {
- case MC_LOCATION_TYPE_ADDRESS:
- new_var->address = location.memory_location;
- break;
- case MC_LOCATION_TYPE_REGISTER:
- default:
+ s_local_variable_t new_var;
+ new_var.subprogram = stack_frame->frame;
+ new_var.ip = stack_frame->ip;
+ new_var.name = current_variable.name;
+ new_var.type = current_variable.type;
+ new_var.region = region_type;
+ new_var.address = nullptr;
+
+ if (current_variable.address != nullptr)
+ new_var.address = current_variable.address;
+ else if (not current_variable.location_list.empty()) {
+ simgrid::dwarf::Location location =
+ simgrid::dwarf::resolve(
+ current_variable.location_list,
+ current_variable.object_info,
+ &(stack_frame->unw_cursor),
+ (void *) stack_frame->frame_base,
+ &mc_model_checker->process(), process_index);
+
+ if (not location.in_memory())