Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Remove reference to DW_TAG_mutable_type:
[simgrid.git] / src / mc / mc_dwarf.c
index c1fd447..eabe5af 100644 (file)
@@ -159,7 +159,6 @@ static mc_tag_class MC_dwarf_tag_classify(int tag)
   case DW_TAG_restrict_type:
   case DW_TAG_interface_type:
   case DW_TAG_unspecified_type:
-  case DW_TAG_mutable_type:
   case DW_TAG_shared_type:
     return mc_tag_type;
 
@@ -1259,6 +1258,51 @@ static void MC_post_process_functions(mc_object_info_t info)
   }
 }
 
+
+/** \brief Fill/lookup the "subtype" field.
+ */
+static void MC_resolve_subtype(mc_object_info_t info, dw_type_t type)
+{
+
+  if (type->dw_type_id == NULL)
+    return;
+  type->subtype = xbt_dict_get_or_null(info->types, type->dw_type_id);
+  if (type->subtype == NULL)
+    return;
+  if (type->subtype->byte_size != 0)
+    return;
+  if (type->subtype->name == NULL)
+    return;
+  // Try to find a more complete description of the type:
+  // We need to fix in order to support C++.
+
+  dw_type_t subtype =
+      xbt_dict_get_or_null(info->full_types_by_name, type->subtype->name);
+  if (subtype != NULL) {
+    type->subtype = subtype;
+  }
+
+}
+
+static void MC_post_process_types(mc_object_info_t info)
+{
+  xbt_dict_cursor_t cursor = NULL;
+  char *origin;
+  dw_type_t type;
+
+  // Lookup "subtype" field:
+  xbt_dict_foreach(info->types, cursor, origin, type) {
+    MC_resolve_subtype(info, type);
+
+    dw_type_t member;
+    unsigned int i = 0;
+    if (type->members != NULL)
+      xbt_dynar_foreach(type->members, i, member) {
+      MC_resolve_subtype(info, member);
+      }
+  }
+}
+
 /** \brief Finds informations about a given shared object/executable */
 mc_object_info_t MC_find_object_info(memory_map_t maps, char *name,
                                      int executable)