X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbtypes.c;h=b9850cf3d835536757b78d6a49ea1bd611596e76;hb=e49d43ff73a309548dd2b576bb7b602f62be66d6;hp=103b4e22eaad73596530862b5598ceb773367c11;hpb=8cd00c5973529c6f7ed42bc361ca05eb3672ab99;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 103b4e22ea..b9850cf3d8 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -187,7 +187,7 @@ alloc_type (struct objfile *objfile) /* Allocate a new GDBARCH-associated type structure and fill it with some defaults. Space for the type structure is allocated - on the heap. */ + on the obstack associated with GDBARCH. */ struct type * alloc_type_arch (struct gdbarch *gdbarch) @@ -198,8 +198,8 @@ alloc_type_arch (struct gdbarch *gdbarch) /* Alloc the structure and start off with all fields zeroed. */ - type = XCNEW (struct type); - TYPE_MAIN_TYPE (type) = XCNEW (struct main_type); + type = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct type); + TYPE_MAIN_TYPE (type) = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct main_type); TYPE_OBJFILE_OWNED (type) = 0; TYPE_OWNER (type).gdbarch = gdbarch; @@ -252,6 +252,17 @@ get_target_type (struct type *type) return type; } +/* See gdbtypes.h. */ + +unsigned int +type_length_units (struct type *type) +{ + struct gdbarch *arch = get_type_arch (type); + int unit_size = gdbarch_addressable_memory_unit_size (arch); + + return TYPE_LENGTH (type) / unit_size; +} + /* Alloc a new type instance structure, fill it with some defaults, and point it at OLDTYPE. Allocate the new type instance from the same place as OLDTYPE. */ @@ -514,7 +525,8 @@ lookup_function_type_with_arguments (struct type *type, } TYPE_NFIELDS (fn) = nparams; - TYPE_FIELDS (fn) = TYPE_ZALLOC (fn, nparams * sizeof (struct field)); + TYPE_FIELDS (fn) + = (struct field *) TYPE_ZALLOC (fn, nparams * sizeof (struct field)); for (i = 0; i < nparams; ++i) TYPE_FIELD_TYPE (fn, i) = param_types[i]; @@ -898,7 +910,7 @@ has_static_range (const struct range_bounds *bounds) int get_discrete_bounds (struct type *type, LONGEST *lowp, LONGEST *highp) { - CHECK_TYPEDEF (type); + type = check_typedef (type); switch (TYPE_CODE (type)) { case TYPE_CODE_RANGE: @@ -1004,6 +1016,45 @@ get_array_bounds (struct type *type, LONGEST *low_bound, LONGEST *high_bound) return 1; } +/* Assuming that TYPE is a discrete type and VAL is a valid integer + representation of a value of this type, save the corresponding + position number in POS. + + Its differs from VAL only in the case of enumeration types. In + this case, the position number of the value of the first listed + enumeration literal is zero; the position number of the value of + each subsequent enumeration literal is one more than that of its + predecessor in the list. + + Return 1 if the operation was successful. Return zero otherwise, + in which case the value of POS is unmodified. +*/ + +int +discrete_position (struct type *type, LONGEST val, LONGEST *pos) +{ + if (TYPE_CODE (type) == TYPE_CODE_ENUM) + { + int i; + + for (i = 0; i < TYPE_NFIELDS (type); i += 1) + { + if (val == TYPE_FIELD_ENUMVAL (type, i)) + { + *pos = i; + return 1; + } + } + /* Invalid enumeration value. */ + return 0; + } + else + { + *pos = val; + return 1; + } +} + /* Create an array type using either a blank type supplied in RESULT_TYPE, or creating a new type, inheriting the objfile from RANGE_TYPE. @@ -1029,13 +1080,15 @@ create_array_type_with_stride (struct type *result_type, TYPE_CODE (result_type) = TYPE_CODE_ARRAY; TYPE_TARGET_TYPE (result_type) = element_type; - if (has_static_range (TYPE_RANGE_DATA (range_type))) + if (has_static_range (TYPE_RANGE_DATA (range_type)) + && (!type_not_associated (result_type) + && !type_not_allocated (result_type))) { LONGEST low_bound, high_bound; if (get_discrete_bounds (range_type, &low_bound, &high_bound) < 0) low_bound = high_bound = 0; - CHECK_TYPEDEF (element_type); + element_type = check_typedef (element_type); /* Be careful when setting the array length. Ada arrays can be empty arrays with the high_bound being smaller than the low_bound. In such cases, the array length should be zero. */ @@ -1141,7 +1194,8 @@ create_set_type (struct type *result_type, struct type *domain_type) TYPE_CODE (result_type) = TYPE_CODE_SET; TYPE_NFIELDS (result_type) = 1; - TYPE_FIELDS (result_type) = TYPE_ZALLOC (result_type, sizeof (struct field)); + TYPE_FIELDS (result_type) + = (struct field *) TYPE_ZALLOC (result_type, sizeof (struct field)); if (!TYPE_STUB (domain_type)) { @@ -1344,7 +1398,7 @@ type_name_no_tag_or_error (struct type *type) const char *name; struct objfile *objfile; - CHECK_TYPEDEF (type); + type = check_typedef (type); name = type_name_no_tag (type); if (name != NULL) @@ -1370,7 +1424,7 @@ lookup_typename (const struct language_defn *language, struct type *type; sym = lookup_symbol_in_language (name, block, VAR_DOMAIN, - language->la_language, NULL); + language->la_language, NULL).symbol; if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF) return SYMBOL_TYPE (sym); @@ -1383,7 +1437,7 @@ struct type * lookup_unsigned_typename (const struct language_defn *language, struct gdbarch *gdbarch, const char *name) { - char *uns = alloca (strlen (name) + 10); + char *uns = (char *) alloca (strlen (name) + 10); strcpy (uns, "unsigned "); strcpy (uns + 9, name); @@ -1395,7 +1449,7 @@ lookup_signed_typename (const struct language_defn *language, struct gdbarch *gdbarch, const char *name) { struct type *t; - char *uns = alloca (strlen (name) + 8); + char *uns = (char *) alloca (strlen (name) + 8); strcpy (uns, "signed "); strcpy (uns + 7, name); @@ -1414,7 +1468,7 @@ lookup_struct (const char *name, const struct block *block) { struct symbol *sym; - sym = lookup_symbol (name, block, STRUCT_DOMAIN, 0); + sym = lookup_symbol (name, block, STRUCT_DOMAIN, 0).symbol; if (sym == NULL) { @@ -1437,7 +1491,7 @@ lookup_union (const char *name, const struct block *block) struct symbol *sym; struct type *t; - sym = lookup_symbol (name, block, STRUCT_DOMAIN, 0); + sym = lookup_symbol (name, block, STRUCT_DOMAIN, 0).symbol; if (sym == NULL) error (_("No union type named %s."), name); @@ -1460,7 +1514,7 @@ lookup_enum (const char *name, const struct block *block) { struct symbol *sym; - sym = lookup_symbol (name, block, STRUCT_DOMAIN, 0); + sym = lookup_symbol (name, block, STRUCT_DOMAIN, 0).symbol; if (sym == NULL) { error (_("No enum type named %s."), name); @@ -1489,7 +1543,7 @@ lookup_template_type (char *name, struct type *type, strcat (nam, TYPE_NAME (type)); strcat (nam, " >"); /* FIXME, extra space still introduced in gcc? */ - sym = lookup_symbol (nam, block, VAR_DOMAIN, 0); + sym = lookup_symbol (nam, block, VAR_DOMAIN, 0).symbol; if (sym == NULL) { @@ -1523,7 +1577,7 @@ lookup_struct_elt_type (struct type *type, const char *name, int noerr) for (;;) { - CHECK_TYPEDEF (type); + type = check_typedef (type); if (TYPE_CODE (type) != TYPE_CODE_PTR && TYPE_CODE (type) != TYPE_CODE_REF) break; @@ -1600,7 +1654,7 @@ get_unsigned_type_max (struct type *type, ULONGEST *max) { unsigned int n; - CHECK_TYPEDEF (type); + type = check_typedef (type); gdb_assert (TYPE_CODE (type) == TYPE_CODE_INT && TYPE_UNSIGNED (type)); gdb_assert (TYPE_LENGTH (type) <= sizeof (ULONGEST)); @@ -1617,7 +1671,7 @@ get_signed_type_minmax (struct type *type, LONGEST *min, LONGEST *max) { unsigned int n; - CHECK_TYPEDEF (type); + type = check_typedef (type); gdb_assert (TYPE_CODE (type) == TYPE_CODE_INT && !TYPE_UNSIGNED (type)); gdb_assert (TYPE_LENGTH (type) <= sizeof (LONGEST)); @@ -1636,7 +1690,7 @@ get_signed_type_minmax (struct type *type, LONGEST *min, LONGEST *max) int internal_type_vptr_fieldno (struct type *type) { - CHECK_TYPEDEF (type); + type = check_typedef (type); gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT || TYPE_CODE (type) == TYPE_CODE_UNION); if (!HAVE_CPLUS_STRUCT (type)) @@ -1649,7 +1703,7 @@ internal_type_vptr_fieldno (struct type *type) void set_type_vptr_fieldno (struct type *type, int fieldno) { - CHECK_TYPEDEF (type); + type = check_typedef (type); gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT || TYPE_CODE (type) == TYPE_CODE_UNION); if (!HAVE_CPLUS_STRUCT (type)) @@ -1663,7 +1717,7 @@ set_type_vptr_fieldno (struct type *type, int fieldno) struct type * internal_type_vptr_basetype (struct type *type) { - CHECK_TYPEDEF (type); + type = check_typedef (type); gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT || TYPE_CODE (type) == TYPE_CODE_UNION); gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_CPLUS_STUFF); @@ -1675,7 +1729,7 @@ internal_type_vptr_basetype (struct type *type) void set_type_vptr_basetype (struct type *type, struct type *basetype) { - CHECK_TYPEDEF (type); + type = check_typedef (type); gdb_assert (TYPE_CODE (type) == TYPE_CODE_STRUCT || TYPE_CODE (type) == TYPE_CODE_UNION); if (!HAVE_CPLUS_STRUCT (type)) @@ -1698,7 +1752,7 @@ set_type_vptr_basetype (struct type *type, struct type *basetype) int get_vptr_fieldno (struct type *type, struct type **basetypep) { - CHECK_TYPEDEF (type); + type = check_typedef (type); if (TYPE_VPTR_FIELDNO (type) < 0) { @@ -1767,6 +1821,12 @@ is_dynamic_type_internal (struct type *type, int top_level) || TYPE_DATA_LOCATION_KIND (type) == PROP_LOCLIST)) return 1; + if (TYPE_ASSOCIATED_PROP (type)) + return 1; + + if (TYPE_ALLOCATED_PROP (type)) + return 1; + switch (TYPE_CODE (type)) { case TYPE_CODE_RANGE: @@ -1835,7 +1895,7 @@ resolve_dynamic_range (struct type *dyn_range_type, gdb_assert (TYPE_CODE (dyn_range_type) == TYPE_CODE_RANGE); prop = &TYPE_RANGE_DATA (dyn_range_type)->low; - if (dwarf2_evaluate_property (prop, addr_stack, &value)) + if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) { low_bound.kind = PROP_CONST; low_bound.data.const_val = value; @@ -1847,7 +1907,7 @@ resolve_dynamic_range (struct type *dyn_range_type, } prop = &TYPE_RANGE_DATA (dyn_range_type)->high; - if (dwarf2_evaluate_property (prop, addr_stack, &value)) + if (dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) { high_bound.kind = PROP_CONST; high_bound.data.const_val = value; @@ -1884,23 +1944,40 @@ resolve_dynamic_array (struct type *type, struct type *elt_type; struct type *range_type; struct type *ary_dim; + struct dynamic_prop *prop; gdb_assert (TYPE_CODE (type) == TYPE_CODE_ARRAY); + type = copy_type (type); + elt_type = type; range_type = check_typedef (TYPE_INDEX_TYPE (elt_type)); range_type = resolve_dynamic_range (range_type, addr_stack); + /* Resolve allocated/associated here before creating a new array type, which + will update the length of the array accordingly. */ + prop = TYPE_ALLOCATED_PROP (type); + if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) + { + TYPE_DYN_PROP_ADDR (prop) = value; + TYPE_DYN_PROP_KIND (prop) = PROP_CONST; + } + prop = TYPE_ASSOCIATED_PROP (type); + if (prop != NULL && dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) + { + TYPE_DYN_PROP_ADDR (prop) = value; + TYPE_DYN_PROP_KIND (prop) = PROP_CONST; + } + ary_dim = check_typedef (TYPE_TARGET_TYPE (elt_type)); if (ary_dim != NULL && TYPE_CODE (ary_dim) == TYPE_CODE_ARRAY) - elt_type = resolve_dynamic_array (TYPE_TARGET_TYPE (type), addr_stack); + elt_type = resolve_dynamic_array (ary_dim, addr_stack); else elt_type = TYPE_TARGET_TYPE (type); - return create_array_type (copy_type (type), - elt_type, - range_type); + return create_array_type_with_stride (type, elt_type, range_type, + TYPE_FIELD_BITSIZE (type, 0)); } /* Resolve dynamic bounds of members of the union TYPE to static @@ -1919,8 +1996,9 @@ resolve_dynamic_union (struct type *type, resolved_type = copy_type (type); TYPE_FIELDS (resolved_type) - = TYPE_ALLOC (resolved_type, - TYPE_NFIELDS (resolved_type) * sizeof (struct field)); + = (struct field *) TYPE_ALLOC (resolved_type, + TYPE_NFIELDS (resolved_type) + * sizeof (struct field)); memcpy (TYPE_FIELDS (resolved_type), TYPE_FIELDS (type), TYPE_NFIELDS (resolved_type) * sizeof (struct field)); @@ -1959,8 +2037,9 @@ resolve_dynamic_struct (struct type *type, resolved_type = copy_type (type); TYPE_FIELDS (resolved_type) - = TYPE_ALLOC (resolved_type, - TYPE_NFIELDS (resolved_type) * sizeof (struct field)); + = (struct field *) TYPE_ALLOC (resolved_type, + TYPE_NFIELDS (resolved_type) + * sizeof (struct field)); memcpy (TYPE_FIELDS (resolved_type), TYPE_FIELDS (type), TYPE_NFIELDS (resolved_type) * sizeof (struct field)); @@ -1984,6 +2063,7 @@ resolve_dynamic_struct (struct type *type, " (invalid location kind)")); pinfo.type = check_typedef (TYPE_FIELD_TYPE (type, i)); + pinfo.valaddr = addr_stack->valaddr; pinfo.addr = addr_stack->addr; pinfo.next = addr_stack; @@ -2013,6 +2093,10 @@ resolve_dynamic_struct (struct type *type, TYPE_LENGTH (resolved_type) = (resolved_type_bit_length + TARGET_CHAR_BIT - 1) / TARGET_CHAR_BIT; + /* The Ada language uses this field as a cache for static fixed types: reset + it as RESOLVED_TYPE must have its own static fixed type. */ + TYPE_TARGET_TYPE (resolved_type) = NULL; + return resolved_type; } @@ -2050,7 +2134,11 @@ resolve_dynamic_type_internal (struct type *type, struct property_addr_info pinfo; pinfo.type = check_typedef (TYPE_TARGET_TYPE (type)); - pinfo.addr = read_memory_typed_address (addr_stack->addr, type); + pinfo.valaddr = NULL; + if (addr_stack->valaddr != NULL) + pinfo.addr = extract_typed_address (addr_stack->valaddr, type); + else + pinfo.addr = read_memory_typed_address (addr_stack->addr, type); pinfo.next = addr_stack; resolved_type = copy_type (type); @@ -2080,7 +2168,8 @@ resolve_dynamic_type_internal (struct type *type, /* Resolve data_location attribute. */ prop = TYPE_DATA_LOCATION (resolved_type); - if (prop != NULL && dwarf2_evaluate_property (prop, addr_stack, &value)) + if (prop != NULL + && dwarf2_evaluate_property (prop, NULL, addr_stack, &value)) { TYPE_DYN_PROP_ADDR (prop) = value; TYPE_DYN_PROP_KIND (prop) = PROP_CONST; @@ -2092,9 +2181,11 @@ resolve_dynamic_type_internal (struct type *type, /* See gdbtypes.h */ struct type * -resolve_dynamic_type (struct type *type, CORE_ADDR addr) +resolve_dynamic_type (struct type *type, const gdb_byte *valaddr, + CORE_ADDR addr) { - struct property_addr_info pinfo = {check_typedef (type), addr, NULL}; + struct property_addr_info pinfo + = {check_typedef (type), valaddr, addr, NULL}; return resolve_dynamic_type_internal (type, &pinfo, 1); } @@ -2125,8 +2216,7 @@ add_dyn_prop (enum dynamic_prop_node_kind prop_kind, struct dynamic_prop prop, gdb_assert (TYPE_OBJFILE_OWNED (type)); - temp = obstack_alloc (&objfile->objfile_obstack, - sizeof (struct dynamic_prop_list)); + temp = XOBNEW (&objfile->objfile_obstack, struct dynamic_prop_list); temp->prop_kind = prop_kind; temp->prop = prop; temp->next = TYPE_DYN_PROP_LIST (type); @@ -2195,7 +2285,7 @@ check_typedef (struct type *type) stub_noname_complaint (); return make_qualified_type (type, instance_flags, NULL); } - sym = lookup_symbol (name, 0, STRUCT_DOMAIN, 0); + sym = lookup_symbol (name, 0, STRUCT_DOMAIN, 0).symbol; if (sym) TYPE_TARGET_TYPE (type) = SYMBOL_TYPE (sym); else /* TYPE_CODE_UNDEF */ @@ -2286,7 +2376,7 @@ check_typedef (struct type *type) stub_noname_complaint (); return make_qualified_type (type, instance_flags, NULL); } - sym = lookup_symbol (name, 0, STRUCT_DOMAIN, 0); + sym = lookup_symbol (name, 0, STRUCT_DOMAIN, 0).symbol; if (sym) { /* Same as above for opaque types, we can replace the stub @@ -2629,7 +2719,7 @@ can_dereference (struct type *t) { /* FIXME: Should we return true for references as well as pointers? */ - CHECK_TYPEDEF (t); + t = check_typedef (t); return (t != NULL && TYPE_CODE (t) == TYPE_CODE_PTR @@ -2639,7 +2729,7 @@ can_dereference (struct type *t) int is_integral_type (struct type *t) { - CHECK_TYPEDEF (t); + t = check_typedef (t); return ((t != NULL) && ((TYPE_CODE (t) == TYPE_CODE_INT) @@ -2652,10 +2742,10 @@ is_integral_type (struct type *t) /* Return true if TYPE is scalar. */ -static int +int is_scalar_type (struct type *type) { - CHECK_TYPEDEF (type); + type = check_typedef (type); switch (TYPE_CODE (type)) { @@ -2677,7 +2767,7 @@ is_scalar_type (struct type *type) int is_scalar_type_recursive (struct type *t) { - CHECK_TYPEDEF (t); + t = check_typedef (t); if (is_scalar_type (t)) return 1; @@ -2759,8 +2849,8 @@ distance_to_ancestor (struct type *base, struct type *dclass, int is_public) int i; int d; - CHECK_TYPEDEF (base); - CHECK_TYPEDEF (dclass); + base = check_typedef (base); + dclass = check_typedef (dclass); if (class_types_same_p (base, dclass)) return 0; @@ -2809,8 +2899,8 @@ is_unique_ancestor_worker (struct type *base, struct type *dclass, { int i, count = 0; - CHECK_TYPEDEF (base); - CHECK_TYPEDEF (dclass); + base = check_typedef (base); + dclass = check_typedef (dclass); for (i = 0; i < TYPE_N_BASECLASSES (dclass) && count < 2; ++i) { @@ -2960,10 +3050,9 @@ rank_function (struct type **parms, int nparms, struct value **args, int nargs) { int i; - struct badness_vector *bv; + struct badness_vector *bv = XNEW (struct badness_vector); int min_len = nparms < nargs ? nparms : nargs; - bv = xmalloc (sizeof (struct badness_vector)); bv->length = nargs + 1; /* add 1 for the length-match rank. */ bv->rank = XNEWVEC (struct rank, nargs + 1); @@ -3129,8 +3218,8 @@ static int check_types_equal (struct type *type1, struct type *type2, VEC (type_equality_entry_d) **worklist) { - CHECK_TYPEDEF (type1); - CHECK_TYPEDEF (type2); + type1 = check_typedef (type1); + type2 = check_typedef (type2); if (type1 == type2) return 1; @@ -3311,6 +3400,30 @@ types_deeply_equal (struct type *type1, struct type *type2) return result; } + +/* Allocated status of type TYPE. Return zero if type TYPE is allocated. + Otherwise return one. */ + +int +type_not_allocated (const struct type *type) +{ + struct dynamic_prop *prop = TYPE_ALLOCATED_PROP (type); + + return (prop && TYPE_DYN_PROP_KIND (prop) == PROP_CONST + && !TYPE_DYN_PROP_ADDR (prop)); +} + +/* Associated status of type TYPE. Return zero if type TYPE is associated. + Otherwise return one. */ + +int +type_not_associated (const struct type *type) +{ + struct dynamic_prop *prop = TYPE_ASSOCIATED_PROP (type); + + return (prop && TYPE_DYN_PROP_KIND (prop) == PROP_CONST + && !TYPE_DYN_PROP_ADDR (prop)); +} /* Compare one type (PARM) for compatibility with another (ARG). * PARM is intended to be the parameter type of a function; and @@ -4244,7 +4357,7 @@ struct type_pair static hashval_t type_pair_hash (const void *item) { - const struct type_pair *pair = item; + const struct type_pair *pair = (const struct type_pair *) item; return htab_hash_pointer (pair->old); } @@ -4252,7 +4365,8 @@ type_pair_hash (const void *item) static int type_pair_eq (const void *item_lhs, const void *item_rhs) { - const struct type_pair *lhs = item_lhs, *rhs = item_rhs; + const struct type_pair *lhs = (const struct type_pair *) item_lhs; + const struct type_pair *rhs = (const struct type_pair *) item_rhs; return lhs->old == rhs->old; } @@ -4283,8 +4397,9 @@ copy_dynamic_prop_list (struct obstack *objfile_obstack, { struct dynamic_prop_list *node_copy; - node_copy = obstack_copy (objfile_obstack, *node_ptr, - sizeof (struct dynamic_prop_list)); + node_copy = ((struct dynamic_prop_list *) + obstack_copy (objfile_obstack, *node_ptr, + sizeof (struct dynamic_prop_list))); node_copy->prop = (*node_ptr)->prop; *node_ptr = node_copy; @@ -4295,9 +4410,9 @@ copy_dynamic_prop_list (struct obstack *objfile_obstack, } /* Recursively copy (deep copy) TYPE, if it is associated with - OBJFILE. Return a new type allocated using malloc, a saved type if - we have already visited TYPE (using COPIED_TYPES), or TYPE if it is - not associated with OBJFILE. */ + OBJFILE. Return a new type owned by the gdbarch associated with the type, a + saved type if we have already visited TYPE (using COPIED_TYPES), or TYPE if + it is not associated with OBJFILE. */ struct type * copy_type_recursive (struct objfile *objfile, @@ -4324,8 +4439,7 @@ copy_type_recursive (struct objfile *objfile, /* We must add the new type to the hash table immediately, in case we encounter this type again during a recursive call below. */ - stored - = obstack_alloc (&objfile->objfile_obstack, sizeof (struct type_pair)); + stored = XOBNEW (&objfile->objfile_obstack, struct type_pair); stored->old = type; stored->newobj = new_type; *slot = stored; @@ -4393,7 +4507,7 @@ copy_type_recursive (struct objfile *objfile, /* For range types, copy the bounds information. */ if (TYPE_CODE (type) == TYPE_CODE_RANGE) { - TYPE_RANGE_DATA (new_type) = xmalloc (sizeof (struct range_bounds)); + TYPE_RANGE_DATA (new_type) = XNEW (struct range_bounds); *TYPE_RANGE_DATA (new_type) = *TYPE_RANGE_DATA (type); } @@ -4489,7 +4603,7 @@ arch_type (struct gdbarch *gdbarch, TYPE_LENGTH (type) = length; if (name) - TYPE_NAME (type) = xstrdup (name); + TYPE_NAME (type) = gdbarch_obstack_strdup (gdbarch, name); return type; } @@ -4598,7 +4712,8 @@ arch_flags_type (struct gdbarch *gdbarch, char *name, int length) type = arch_type (gdbarch, TYPE_CODE_FLAGS, length, name); TYPE_UNSIGNED (type) = 1; TYPE_NFIELDS (type) = nfields; - TYPE_FIELDS (type) = TYPE_ZALLOC (type, nfields * sizeof (struct field)); + TYPE_FIELDS (type) + = (struct field *) TYPE_ZALLOC (type, nfields * sizeof (struct field)); return type; } @@ -4651,8 +4766,8 @@ append_composite_type_field_raw (struct type *t, char *name, struct field *f; TYPE_NFIELDS (t) = TYPE_NFIELDS (t) + 1; - TYPE_FIELDS (t) = xrealloc (TYPE_FIELDS (t), - sizeof (struct field) * TYPE_NFIELDS (t)); + TYPE_FIELDS (t) = XRESIZEVEC (struct field, TYPE_FIELDS (t), + TYPE_NFIELDS (t)); f = &(TYPE_FIELDS (t)[TYPE_NFIELDS (t) - 1]); memset (f, 0, sizeof f[0]); FIELD_TYPE (f[0]) = field; @@ -4715,7 +4830,7 @@ static struct gdbarch_data *gdbtypes_data; const struct builtin_type * builtin_type (struct gdbarch *gdbarch) { - return gdbarch_data (gdbarch, gdbtypes_data); + return (const struct builtin_type *) gdbarch_data (gdbarch, gdbtypes_data); } static void * @@ -4860,7 +4975,7 @@ objfile_type (struct objfile *objfile) { struct gdbarch *gdbarch; struct objfile_type *objfile_type - = objfile_data (objfile, objfile_type_data); + = (struct objfile_type *) objfile_data (objfile, objfile_type_data); if (objfile_type) return objfile_type;