2005-02-11 H.J. Lu <hongjiu.lu@intel.com>
[deliverable/binutils-gdb.git] / gdb / gdbtypes.c
index d34c6f000ee09f305c59eac3f98ace5bc0f8a350..06be9b59f9ba8558221dde86fd94a3ed94fe7971 100644 (file)
@@ -1,6 +1,6 @@
 /* Support routines for manipulating internal types for GDB.
-   Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003
-   Free Software Foundation, Inc.
+   Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003,
+   2004 Free Software Foundation, Inc.
    Contributed by Cygnus Support, using pieces from other GDB modules.
 
    This file is part of GDB.
@@ -97,8 +97,10 @@ struct type *builtin_type_vec64;
 struct type *builtin_type_vec64i;
 struct type *builtin_type_vec128;
 struct type *builtin_type_vec128i;
+struct type *builtin_type_ieee_single[BFD_ENDIAN_UNKNOWN];
 struct type *builtin_type_ieee_single_big;
 struct type *builtin_type_ieee_single_little;
+struct type *builtin_type_ieee_double[BFD_ENDIAN_UNKNOWN];
 struct type *builtin_type_ieee_double_big;
 struct type *builtin_type_ieee_double_little;
 struct type *builtin_type_ieee_double_littlebyte_bigword;
@@ -107,10 +109,13 @@ struct type *builtin_type_m68881_ext;
 struct type *builtin_type_i960_ext;
 struct type *builtin_type_m88110_ext;
 struct type *builtin_type_m88110_harris_ext;
+struct type *builtin_type_arm_ext[BFD_ENDIAN_UNKNOWN];
 struct type *builtin_type_arm_ext_big;
 struct type *builtin_type_arm_ext_littlebyte_bigword;
+struct type *builtin_type_ia64_spill[BFD_ENDIAN_UNKNOWN];
 struct type *builtin_type_ia64_spill_big;
 struct type *builtin_type_ia64_spill_little;
+struct type *builtin_type_ia64_quad[BFD_ENDIAN_UNKNOWN];
 struct type *builtin_type_ia64_quad_big;
 struct type *builtin_type_ia64_quad_little;
 struct type *builtin_type_void_data_ptr;
@@ -127,11 +132,6 @@ struct extra
     int len;
   };                           /* maximum extension is 128! FIXME */
 
-static void add_name (struct extra *, char *);
-static void add_mangled_type (struct extra *, struct type *);
-#if 0 /* OBSOLETE CFront */
-// OBSOLETE static void cfront_mangle_name (struct type *, int, int);
-#endif /* OBSOLETE CFront */
 static void print_bit_vector (B_TYPE *, int);
 static void print_arg_types (struct field *, int, int);
 static void dump_fn_fieldlists (struct type *, int);
@@ -141,7 +141,7 @@ static void virtual_base_list_aux (struct type *dclass);
 
 /* Alloc a new type structure and fill it with some defaults.  If
    OBJFILE is non-NULL, then allocate the space for the type structure
-   in that objfile's type_obstack.  Otherwise allocate the new type structure
+   in that objfile's objfile_obstack.  Otherwise allocate the new type structure
    by xmalloc () (for permanent types).  */
 
 struct type *
@@ -159,10 +159,10 @@ alloc_type (struct objfile *objfile)
     }
   else
     {
-      type = obstack_alloc (&objfile->type_obstack,
+      type = obstack_alloc (&objfile->objfile_obstack,
                            sizeof (struct type));
       memset (type, 0, sizeof (struct type));
-      TYPE_MAIN_TYPE (type) = obstack_alloc (&objfile->type_obstack,
+      TYPE_MAIN_TYPE (type) = obstack_alloc (&objfile->objfile_obstack,
                                             sizeof (struct main_type));
       OBJSTAT (objfile, n_types++);
     }
@@ -196,7 +196,7 @@ alloc_type_instance (struct type *oldtype)
     }
   else
     {
-      type = obstack_alloc (&TYPE_OBJFILE (oldtype)->type_obstack,
+      type = obstack_alloc (&TYPE_OBJFILE (oldtype)->objfile_obstack,
                            sizeof (struct type));
       memset (type, 0, sizeof (struct type));
     }
@@ -411,7 +411,7 @@ address_space_name_to_int (char *space_identifier)
                                                        &type_flags))
     return type_flags;
   else
-    error ("Unknown address space specifier: \"%s\"", space_identifier);
+    error (_("Unknown address space specifier: \"%s\""), space_identifier);
 }
 
 /* Identify address space identifier by integer flag as defined in 
@@ -433,7 +433,9 @@ address_space_int_to_name (int space_flag)
 }
 
 /* Create a new type with instance flags NEW_FLAGS, based on TYPE.
-   If STORAGE is non-NULL, create the new type instance there.  */
+
+   If STORAGE is non-NULL, create the new type instance there.
+   STORAGE must be in the same obstack as TYPE.  */
 
 static struct type *
 make_qualified_type (struct type *type, int new_flags,
@@ -453,6 +455,12 @@ make_qualified_type (struct type *type, int new_flags,
     ntype = alloc_type_instance (type);
   else
     {
+      /* If STORAGE was provided, it had better be in the same objfile as
+        TYPE.  Otherwise, we can't link it into TYPE's cv chain: if one
+        objfile is freed and the other kept, we'd have dangling
+        pointers.  */
+      gdb_assert (TYPE_OBJFILE (type) == TYPE_OBJFILE (storage));
+
       ntype = storage;
       TYPE_MAIN_TYPE (ntype) = TYPE_MAIN_TYPE (type);
       TYPE_CHAIN (ntype) = ntype;
@@ -501,11 +509,12 @@ make_type_with_address_space (struct type *type, int space_flag)
    CNST is a flag for setting the const attribute
    VOLTL is a flag for setting the volatile attribute
    TYPE is the base type whose variant we are creating.
-   TYPEPTR, if nonzero, points
-   to a pointer to memory where the reference type should be stored.
-   If *TYPEPTR is zero, update it to point to the reference type we return.
-   We allocate new memory if needed.  */
 
+   If TYPEPTR and *TYPEPTR are non-zero, then *TYPEPTR points to
+   storage to hold the new qualified type; *TYPEPTR and TYPE must be
+   in the same objfile.  Otherwise, allocate fresh memory for the new
+   type whereever TYPE lives.  If TYPEPTR is non-zero, set it to the
+   new type we construct.  */
 struct type *
 make_cv_type (int cnst, int voltl, struct type *type, struct type **typeptr)
 {
@@ -524,20 +533,19 @@ make_cv_type (int cnst, int voltl, struct type *type, struct type **typeptr)
 
   if (typeptr && *typeptr != NULL)
     {
-      /* Objfile is per-core-type.  This const-qualified type had best
-        belong to the same objfile as the type it is qualifying, unless
-        we are overwriting a stub type, in which case the safest thing
-        to do is to copy the core type into the new objfile.  */
+      /* TYPE and *TYPEPTR must be in the same objfile.  We can't have
+        a C-V variant chain that threads across objfiles: if one
+        objfile gets freed, then the other has a broken C-V chain.
 
-      gdb_assert (TYPE_OBJFILE (*typeptr) == TYPE_OBJFILE (type)
-                 || TYPE_STUB (*typeptr));
-      if (TYPE_OBJFILE (*typeptr) != TYPE_OBJFILE (type))
-       {
-         TYPE_MAIN_TYPE (*typeptr)
-           = TYPE_ALLOC (*typeptr, sizeof (struct main_type));
-         *TYPE_MAIN_TYPE (*typeptr)
-           = *TYPE_MAIN_TYPE (type);
-       }
+        This code used to try to copy over the main type from TYPE to
+        *TYPEPTR if they were in different objfiles, but that's
+        wrong, too: TYPE may have a field list or member function
+        lists, which refer to types of their own, etc. etc.  The
+        whole shebang would need to be copied over recursively; you
+        can't have inter-objfile pointers.  The only thing to do is
+        to leave stub types as stub types, and look them up afresh by
+        name each time you encounter them.  */
+      gdb_assert (TYPE_OBJFILE (*typeptr) == TYPE_OBJFILE (type));
     }
   
   ntype = make_qualified_type (type, new_flags, typeptr ? *typeptr : NULL);
@@ -562,6 +570,12 @@ replace_type (struct type *ntype, struct type *type)
 {
   struct type *chain;
 
+  /* These two types had better be in the same objfile.  Otherwise,
+     the assignment of one type's main type structure to the other
+     will produce a type with references to objects (names; field
+     lists; etc.) allocated on an objfile other than its own.  */
+  gdb_assert (TYPE_OBJFILE (ntype) == TYPE_OBJFILE (ntype));
+
   *TYPE_MAIN_TYPE (ntype) = *TYPE_MAIN_TYPE (type);
 
   /* The type length is not a part of the main type.  Update it for each
@@ -779,8 +793,12 @@ create_array_type (struct type *result_type, struct type *element_type,
 struct type *
 create_string_type (struct type *result_type, struct type *range_type)
 {
+  struct type *string_char_type;
+      
+  string_char_type = language_string_char_type (current_language,
+                                               current_gdbarch);
   result_type = create_array_type (result_type,
-                                  *current_language->string_char_type,
+                                  string_char_type,
                                   range_type);
   TYPE_CODE (result_type) = TYPE_CODE_STRING;
   return (result_type);
@@ -1031,24 +1049,6 @@ type_name_no_tag (const struct type *type)
   return TYPE_NAME (type);
 }
 
-/* Lookup a primitive type named NAME. 
-   Return zero if NAME is not a primitive type. */
-
-struct type *
-lookup_primitive_typename (char *name)
-{
-  struct type **const *p;
-
-  for (p = current_language->la_builtin_type_vector; *p != NULL; p++)
-    {
-      if (strcmp (TYPE_NAME (**p), name) == 0)
-       {
-         return (**p);
-       }
-    }
-  return (NULL);
-}
-
 /* Lookup a typedef or primitive type named NAME,
    visible in lexical block BLOCK.
    If NOERR is nonzero, return zero if NAME is not suitably defined.  */
@@ -1062,7 +1062,9 @@ lookup_typename (char *name, struct block *block, int noerr)
   sym = lookup_symbol (name, block, VAR_DOMAIN, 0, (struct symtab **) NULL);
   if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
     {
-      tmp = lookup_primitive_typename (name);
+      tmp = language_lookup_primitive_type_by_name (current_language,
+                                                   current_gdbarch,
+                                                   name);
       if (tmp)
        {
          return (tmp);
@@ -1073,7 +1075,7 @@ lookup_typename (char *name, struct block *block, int noerr)
        }
       else
        {
-         error ("No type named %s.", name);
+         error (_("No type named %s."), name);
        }
     }
   return (SYMBOL_TYPE (sym));
@@ -1117,11 +1119,11 @@ lookup_struct (char *name, struct block *block)
 
   if (sym == NULL)
     {
-      error ("No struct type named %s.", name);
+      error (_("No struct type named %s."), name);
     }
   if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT)
     {
-      error ("This context has class, union or enum %s, not a struct.", name);
+      error (_("This context has class, union or enum %s, not a struct."), name);
     }
   return (SYMBOL_TYPE (sym));
 }
@@ -1139,7 +1141,7 @@ lookup_union (char *name, struct block *block)
                       (struct symtab **) NULL);
 
   if (sym == NULL)
-    error ("No union type named %s.", name);
+    error (_("No union type named %s."), name);
 
   t = SYMBOL_TYPE (sym);
 
@@ -1154,7 +1156,7 @@ lookup_union (char *name, struct block *block)
       return (t);
 
   /* If we get here, it's not a union */
-  error ("This context has class, struct or enum %s, not a union.", name);
+  error (_("This context has class, struct or enum %s, not a union."), name);
 }
 
 
@@ -1170,11 +1172,11 @@ lookup_enum (char *name, struct block *block)
                       (struct symtab **) NULL);
   if (sym == NULL)
     {
-      error ("No enum type named %s.", name);
+      error (_("No enum type named %s."), name);
     }
   if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_ENUM)
     {
-      error ("This context has class, struct or union %s, not an enum.", name);
+      error (_("This context has class, struct or union %s, not an enum."), name);
     }
   return (SYMBOL_TYPE (sym));
 }
@@ -1196,11 +1198,11 @@ lookup_template_type (char *name, struct type *type, struct block *block)
 
   if (sym == NULL)
     {
-      error ("No template type named %s.", name);
+      error (_("No template type named %s."), name);
     }
   if (TYPE_CODE (SYMBOL_TYPE (sym)) != TYPE_CODE_STRUCT)
     {
-      error ("This context has class, union or enum %s, not a struct.", name);
+      error (_("This context has class, union or enum %s, not a struct."), name);
     }
   return (SYMBOL_TYPE (sym));
 }
@@ -1236,7 +1238,7 @@ lookup_struct_elt_type (struct type *type, char *name, int noerr)
       gdb_flush (gdb_stdout);
       fprintf_unfiltered (gdb_stderr, "Type ");
       type_print (type, "", gdb_stderr, -1);
-      error (" is not a structure or union type.");
+      error (_(" is not a structure or union type."));
     }
 
 #if 0
@@ -1286,7 +1288,7 @@ lookup_struct_elt_type (struct type *type, char *name, int noerr)
   type_print (type, "", gdb_stderr, -1);
   fprintf_unfiltered (gdb_stderr, " has no component named ");
   fputs_filtered (name, gdb_stderr);
-  error (".");
+  error (("."));
   return (struct type *) -1;   /* For lint */
 }
 
@@ -1348,6 +1350,12 @@ get_destructor_fn_field (struct type *t, int *method_indexp, int *field_indexp)
   return 0;
 }
 
+static void
+stub_noname_complaint (void)
+{
+  complaint (&symfile_complaints, "stub type has NULL name");
+}
+
 /* Added by Bryan Boreham, Kewill, Sun Sep 17 18:07:17 1989.
 
    If this is a stubbed struct (i.e. declared as struct foo *), see if
@@ -1361,11 +1369,10 @@ get_destructor_fn_field (struct type *t, int *method_indexp, int *field_indexp)
    This used to be coded as a macro, but I don't think it is called 
    often enough to merit such treatment.  */
 
-static void
-stub_noname_complaint (void)
-{
-  complaint (&symfile_complaints, "stub type has NULL name");
-}
+/* Find the real type of TYPE.  This function returns the real type, after
+   removing all layers of typedefs and completing opaque or stub types.
+   Completion changes the TYPE argument, but stripping of typedefs does
+   not.  */
 
 struct type *
 check_typedef (struct type *type)
@@ -1423,8 +1430,24 @@ check_typedef (struct type *type)
          return type;
        }
       newtype = lookup_transparent_type (name);
+
       if (newtype)
-       make_cv_type (is_const, is_volatile, newtype, &type);
+       {
+         /* If the resolved type and the stub are in the same objfile,
+            then replace the stub type with the real deal.  But if
+            they're in separate objfiles, leave the stub alone; we'll
+            just look up the transparent type every time we call
+            check_typedef.  We can't create pointers between types
+            allocated to different objfiles, since they may have
+            different lifetimes.  Trying to copy NEWTYPE over to TYPE's
+            objfile is pointless, too, since you'll have to move over any
+            other types NEWTYPE refers to, which could be an unbounded
+            amount of stuff.  */
+         if (TYPE_OBJFILE (newtype) == TYPE_OBJFILE (type))
+           make_cv_type (is_const, is_volatile, newtype, &type);
+         else
+           type = newtype;
+       }
     }
   /* Otherwise, rely on the stub flag being set for opaque/stubbed types */
   else if (TYPE_STUB (type) && !currently_reading_symtab)
@@ -1478,194 +1501,6 @@ check_typedef (struct type *type)
   return type;
 }
 
-#if 0 /* OBSOLETE CFront */
-// OBSOLETE  /* New code added to support parsing of Cfront stabs strings */
-// OBSOLETE  #define INIT_EXTRA { pextras->len=0; pextras->str[0]='\0'; }
-// OBSOLETE  #define ADD_EXTRA(c) { pextras->str[pextras->len++]=c; }
-
-// OBSOLETE  static void
-// OBSOLETE  add_name (struct extra *pextras, char *n)
-// OBSOLETE  {
-// OBSOLETE    int nlen;
-
-// OBSOLETE    if ((nlen = (n ? strlen (n) : 0)) == 0)
-// OBSOLETE      return;
-// OBSOLETE    sprintf (pextras->str + pextras->len, "%d%s", nlen, n);
-// OBSOLETE    pextras->len = strlen (pextras->str);
-// OBSOLETE  }
-
-// OBSOLETE  static void
-// OBSOLETE  add_mangled_type (struct extra *pextras, struct type *t)
-// OBSOLETE  {
-// OBSOLETE    enum type_code tcode;
-// OBSOLETE    int tlen, tflags;
-// OBSOLETE    char *tname;
-
-// OBSOLETE    tcode = TYPE_CODE (t);
-// OBSOLETE    tlen = TYPE_LENGTH (t);
-// OBSOLETE    tflags = TYPE_FLAGS (t);
-// OBSOLETE    tname = TYPE_NAME (t);
-// OBSOLETE    /* args of "..." seem to get mangled as "e" */
-
-// OBSOLETE    switch (tcode)
-// OBSOLETE      {
-// OBSOLETE      case TYPE_CODE_INT:
-// OBSOLETE        if (tflags == 1)
-// OBSOLETE    ADD_EXTRA ('U');
-// OBSOLETE        switch (tlen)
-// OBSOLETE    {
-// OBSOLETE    case 1:
-// OBSOLETE      ADD_EXTRA ('c');
-// OBSOLETE      break;
-// OBSOLETE    case 2:
-// OBSOLETE      ADD_EXTRA ('s');
-// OBSOLETE      break;
-// OBSOLETE    case 4:
-// OBSOLETE      {
-// OBSOLETE        char *pname;
-// OBSOLETE        if ((pname = strrchr (tname, 'l'), pname) && !strcmp (pname, "long"))
-// OBSOLETE          {
-// OBSOLETE            ADD_EXTRA ('l');
-// OBSOLETE          }
-// OBSOLETE        else
-// OBSOLETE          {
-// OBSOLETE            ADD_EXTRA ('i');
-// OBSOLETE          }
-// OBSOLETE      }
-// OBSOLETE      break;
-// OBSOLETE    default:
-// OBSOLETE      {
-// OBSOLETE        complaint (&symfile_complaints, "Bad int type code length x%x",
-// OBSOLETE                   tlen);
-// OBSOLETE      }
-// OBSOLETE    }
-// OBSOLETE        break;
-// OBSOLETE      case TYPE_CODE_FLT:
-// OBSOLETE        switch (tlen)
-// OBSOLETE    {
-// OBSOLETE    case 4:
-// OBSOLETE      ADD_EXTRA ('f');
-// OBSOLETE      break;
-// OBSOLETE    case 8:
-// OBSOLETE      ADD_EXTRA ('d');
-// OBSOLETE      break;
-// OBSOLETE    case 16:
-// OBSOLETE      ADD_EXTRA ('r');
-// OBSOLETE      break;
-// OBSOLETE    default:
-// OBSOLETE      {
-// OBSOLETE        complaint (&symfile_complaints, "Bad float type code length x%x",
-// OBSOLETE                   tlen);
-// OBSOLETE      }
-// OBSOLETE    }
-// OBSOLETE        break;
-// OBSOLETE      case TYPE_CODE_REF:
-// OBSOLETE        ADD_EXTRA ('R');
-// OBSOLETE        /* followed by what it's a ref to */
-// OBSOLETE        break;
-// OBSOLETE      case TYPE_CODE_PTR:
-// OBSOLETE        ADD_EXTRA ('P');
-// OBSOLETE        /* followed by what it's a ptr to */
-// OBSOLETE        break;
-// OBSOLETE      case TYPE_CODE_TYPEDEF:
-// OBSOLETE        {
-// OBSOLETE    complaint (&symfile_complaints,
-// OBSOLETE               "Typedefs in overloaded functions not yet supported");
-// OBSOLETE        }
-// OBSOLETE        /* followed by type bytes & name */
-// OBSOLETE        break;
-// OBSOLETE      case TYPE_CODE_FUNC:
-// OBSOLETE        ADD_EXTRA ('F');
-// OBSOLETE        /* followed by func's arg '_' & ret types */
-// OBSOLETE        break;
-// OBSOLETE      case TYPE_CODE_VOID:
-// OBSOLETE        ADD_EXTRA ('v');
-// OBSOLETE        break;
-// OBSOLETE      case TYPE_CODE_METHOD:
-// OBSOLETE        ADD_EXTRA ('M');
-// OBSOLETE        /* followed by name of class and func's arg '_' & ret types */
-// OBSOLETE        add_name (pextras, tname);
-// OBSOLETE        ADD_EXTRA ('F');            /* then mangle function */
-// OBSOLETE        break;
-// OBSOLETE      case TYPE_CODE_STRUCT:        /* C struct */
-// OBSOLETE      case TYPE_CODE_UNION: /* C union */
-// OBSOLETE      case TYPE_CODE_ENUM:  /* Enumeration type */
-// OBSOLETE        /* followed by name of type */
-// OBSOLETE        add_name (pextras, tname);
-// OBSOLETE        break;
-
-// OBSOLETE        /* errors possible types/not supported */
-// OBSOLETE      case TYPE_CODE_CHAR:
-// OBSOLETE      case TYPE_CODE_ARRAY: /* Array type */
-// OBSOLETE      case TYPE_CODE_MEMBER:        /* Member type */
-// OBSOLETE      case TYPE_CODE_BOOL:
-// OBSOLETE      case TYPE_CODE_COMPLEX:       /* Complex float */
-// OBSOLETE      case TYPE_CODE_UNDEF:
-// OBSOLETE      case TYPE_CODE_SET:   /* Pascal sets */
-// OBSOLETE      case TYPE_CODE_RANGE:
-// OBSOLETE      case TYPE_CODE_STRING:
-// OBSOLETE      case TYPE_CODE_BITSTRING:
-// OBSOLETE      case TYPE_CODE_ERROR:
-// OBSOLETE      default:
-// OBSOLETE        {
-// OBSOLETE    complaint (&symfile_complaints, "Unknown type code x%x", tcode);
-// OBSOLETE        }
-// OBSOLETE      }
-// OBSOLETE    if (TYPE_TARGET_TYPE (t))
-// OBSOLETE      add_mangled_type (pextras, TYPE_TARGET_TYPE (t));
-// OBSOLETE  }
-
-// OBSOLETE  void
-// OBSOLETE  cfront_mangle_name (struct type *type, int i, int j)
-// OBSOLETE  {
-// OBSOLETE    struct fn_field *f;
-// OBSOLETE    char *mangled_name = gdb_mangle_name (type, i, j);
-
-// OBSOLETE    f = TYPE_FN_FIELDLIST1 (type, i);       /* moved from below */
-
-// OBSOLETE    /* kludge to support cfront methods - gdb expects to find "F" for 
-// OBSOLETE       ARM_mangled names, so when we mangle, we have to add it here */
-// OBSOLETE    if (ARM_DEMANGLING)
-// OBSOLETE      {
-// OBSOLETE        int k;
-// OBSOLETE        char *arm_mangled_name;
-// OBSOLETE        struct fn_field *method = &f[j];
-// OBSOLETE        char *field_name = TYPE_FN_FIELDLIST_NAME (type, i);
-// OBSOLETE        char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
-// OBSOLETE        char *newname = type_name_no_tag (type);
-
-// OBSOLETE        struct type *ftype = TYPE_FN_FIELD_TYPE (f, j);
-// OBSOLETE        int nargs = TYPE_NFIELDS (ftype);           /* number of args */
-// OBSOLETE        struct extra extras, *pextras = &extras;
-// OBSOLETE        INIT_EXTRA
-
-// OBSOLETE    if (TYPE_FN_FIELD_STATIC_P (f, j))      /* j for sublist within this list */
-// OBSOLETE    ADD_EXTRA ('S')
-// OBSOLETE      ADD_EXTRA ('F')
-// OBSOLETE    /* add args here! */
-// OBSOLETE      if (nargs <= 1)       /* no args besides this */
-// OBSOLETE      ADD_EXTRA ('v')
-// OBSOLETE        else
-// OBSOLETE      {
-// OBSOLETE        for (k = 1; k < nargs; k++)
-// OBSOLETE          {
-// OBSOLETE            struct type *t;
-// OBSOLETE            t = TYPE_FIELD_TYPE (ftype, k);
-// OBSOLETE            add_mangled_type (pextras, t);
-// OBSOLETE          }
-// OBSOLETE      }
-// OBSOLETE        ADD_EXTRA ('\0')
-// OBSOLETE    printf ("add_mangled_type: %s\n", extras.str);  /* FIXME */
-// OBSOLETE        xasprintf (&arm_mangled_name, "%s%s", mangled_name, extras.str);
-// OBSOLETE        xfree (mangled_name);
-// OBSOLETE        mangled_name = arm_mangled_name;
-// OBSOLETE      }
-// OBSOLETE  }
-
-// OBSOLETE  #undef ADD_EXTRA
-// OBSOLETE  /* End of new code added to support parsing of Cfront stabs strings */
-#endif /* OBSOLETE CFront */
-
 /* Parse a type expression in the string [P..P+LENGTH).  If an error occurs,
    silently return builtin_type_void. */
 
@@ -1719,7 +1554,7 @@ check_stub_method (struct type *type, int method_id, int signature_id)
     p = NULL;
 
   if (demangled_name == NULL || p == NULL)
-    error ("Internal: Cannot demangle mangled name `%s'.", mangled_name);
+    error (_("Internal: Cannot demangle mangled name `%s'."), mangled_name);
 
   /* Now, read in the parameters that define this type.  */
   p += 1;
@@ -1868,7 +1703,7 @@ allocate_cplus_struct_type (struct type *type)
 /* Helper function to initialize the standard scalar types.
 
    If NAME is non-NULL and OBJFILE is non-NULL, then we make a copy
-   of the string pointed to by name in the type_obstack for that objfile,
+   of the string pointed to by name in the objfile_obstack for that objfile,
    and initialize the type name to that copy.  There are places (mipsread.c
    in particular, where init_type is called with a NULL value for NAME). */
 
@@ -1885,7 +1720,7 @@ init_type (enum type_code code, int length, int flags, char *name,
   if ((name != NULL) && (objfile != NULL))
     {
       TYPE_NAME (type) =
-       obsavestring (name, strlen (name), &objfile->type_obstack);
+       obsavestring (name, strlen (name), &objfile->objfile_obstack);
     }
   else
     {
@@ -1976,7 +1811,7 @@ lookup_fundamental_type (struct objfile *objfile, int typeid)
 
   if (typeid < 0 || typeid >= FT_NUM_MEMBERS)
     {
-      error ("internal error - invalid fundamental type id %d", typeid);
+      error (_("internal error - invalid fundamental type id %d"), typeid);
     }
 
   /* If this is the first time we need a fundamental type for this objfile
@@ -1986,7 +1821,7 @@ lookup_fundamental_type (struct objfile *objfile, int typeid)
     {
       nbytes = FT_NUM_MEMBERS * sizeof (struct type *);
       objfile->fundamental_types = (struct type **)
-       obstack_alloc (&objfile->type_obstack, nbytes);
+       obstack_alloc (&objfile->objfile_obstack, nbytes);
       memset ((char *) objfile->fundamental_types, 0, nbytes);
       OBJSTAT (objfile, n_types += FT_NUM_MEMBERS);
     }
@@ -3415,57 +3250,13 @@ build_gdbtypes (void)
     init_type (TYPE_CODE_STRING, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
               0,
               "string", (struct objfile *) NULL);
-  builtin_type_int0 =
-    init_type (TYPE_CODE_INT, 0 / 8,
-              0,
-              "int0_t", (struct objfile *) NULL);
-  builtin_type_int8 =
-    init_type (TYPE_CODE_INT, 8 / 8,
-              0,
-              "int8_t", (struct objfile *) NULL);
-  builtin_type_uint8 =
-    init_type (TYPE_CODE_INT, 8 / 8,
-              TYPE_FLAG_UNSIGNED,
-              "uint8_t", (struct objfile *) NULL);
-  builtin_type_int16 =
-    init_type (TYPE_CODE_INT, 16 / 8,
-              0,
-              "int16_t", (struct objfile *) NULL);
-  builtin_type_uint16 =
-    init_type (TYPE_CODE_INT, 16 / 8,
-              TYPE_FLAG_UNSIGNED,
-              "uint16_t", (struct objfile *) NULL);
-  builtin_type_int32 =
-    init_type (TYPE_CODE_INT, 32 / 8,
-              0,
-              "int32_t", (struct objfile *) NULL);
-  builtin_type_uint32 =
-    init_type (TYPE_CODE_INT, 32 / 8,
-              TYPE_FLAG_UNSIGNED,
-              "uint32_t", (struct objfile *) NULL);
-  builtin_type_int64 =
-    init_type (TYPE_CODE_INT, 64 / 8,
-              0,
-              "int64_t", (struct objfile *) NULL);
-  builtin_type_uint64 =
-    init_type (TYPE_CODE_INT, 64 / 8,
-              TYPE_FLAG_UNSIGNED,
-              "uint64_t", (struct objfile *) NULL);
-  builtin_type_int128 =
-    init_type (TYPE_CODE_INT, 128 / 8,
-              0,
-              "int128_t", (struct objfile *) NULL);
-  builtin_type_uint128 =
-    init_type (TYPE_CODE_INT, 128 / 8,
-              TYPE_FLAG_UNSIGNED,
-              "uint128_t", (struct objfile *) NULL);
   builtin_type_bool =
     init_type (TYPE_CODE_BOOL, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
               0,
               "bool", (struct objfile *) NULL);
 
   /* Add user knob for controlling resolution of opaque types */
-  add_show_from_set
+  deprecated_add_show_from_set
     (add_set_cmd ("opaque-type-resolution", class_support, var_boolean, (char *) &opaque_type_resolution,
                  "Set resolution of opaque struct/class/union types (if set before loading symbols).",
                  &setlist),
@@ -3548,68 +3339,268 @@ build_gdbtypes (void)
               "__bfd_vma", (struct objfile *) NULL);
 }
 
+static struct gdbarch_data *gdbtypes_data;
+
+const struct builtin_type *
+builtin_type (struct gdbarch *gdbarch)
+{
+  return gdbarch_data (gdbarch, gdbtypes_data);
+}
+
+
+static struct type *
+build_flt (int bit, char *name, const struct floatformat *floatformat)
+{
+  struct type *t;
+  if (bit <= 0 || floatformat == NULL)
+    {
+      gdb_assert (builtin_type_error != NULL);
+      return builtin_type_error;
+    }
+  t = init_type (TYPE_CODE_FLT, bit / TARGET_CHAR_BIT,
+                0, name, (struct objfile *) NULL);
+  TYPE_FLOATFORMAT (t) = floatformat;
+  return t;
+}
+
+static struct type *
+build_complex (int bit, char *name, struct type *target_type)
+{
+  struct type *t;
+  if (bit <= 0 || target_type == builtin_type_error)
+    {
+      gdb_assert (builtin_type_error != NULL);
+      return builtin_type_error;
+    }
+  t = init_type (TYPE_CODE_COMPLEX, 2 * bit / TARGET_CHAR_BIT,
+                0, name, (struct objfile *) NULL);
+  TYPE_TARGET_TYPE (t) = target_type;
+  return t;
+}
+
+static void *
+gdbtypes_post_init (struct gdbarch *gdbarch)
+{
+  struct builtin_type *builtin_type
+    = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_type);
+
+  builtin_type->builtin_void =
+    init_type (TYPE_CODE_VOID, 1,
+              0,
+              "void", (struct objfile *) NULL);
+  builtin_type->builtin_char =
+    init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
+              (TYPE_FLAG_NOSIGN
+                | (TARGET_CHAR_SIGNED ? 0 : TYPE_FLAG_UNSIGNED)),
+              "char", (struct objfile *) NULL);
+  builtin_type->builtin_true_char =
+    init_type (TYPE_CODE_CHAR, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
+              0,
+              "true character", (struct objfile *) NULL);
+  builtin_type->builtin_signed_char =
+    init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
+              0,
+              "signed char", (struct objfile *) NULL);
+  builtin_type->builtin_unsigned_char =
+    init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
+              TYPE_FLAG_UNSIGNED,
+              "unsigned char", (struct objfile *) NULL);
+  builtin_type->builtin_short =
+    init_type (TYPE_CODE_INT, TARGET_SHORT_BIT / TARGET_CHAR_BIT,
+              0,
+              "short", (struct objfile *) NULL);
+  builtin_type->builtin_unsigned_short =
+    init_type (TYPE_CODE_INT, TARGET_SHORT_BIT / TARGET_CHAR_BIT,
+              TYPE_FLAG_UNSIGNED,
+              "unsigned short", (struct objfile *) NULL);
+  builtin_type->builtin_int =
+    init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
+              0,
+              "int", (struct objfile *) NULL);
+  builtin_type->builtin_unsigned_int =
+    init_type (TYPE_CODE_INT, TARGET_INT_BIT / TARGET_CHAR_BIT,
+              TYPE_FLAG_UNSIGNED,
+              "unsigned int", (struct objfile *) NULL);
+  builtin_type->builtin_long =
+    init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
+              0,
+              "long", (struct objfile *) NULL);
+  builtin_type->builtin_unsigned_long =
+    init_type (TYPE_CODE_INT, TARGET_LONG_BIT / TARGET_CHAR_BIT,
+              TYPE_FLAG_UNSIGNED,
+              "unsigned long", (struct objfile *) NULL);
+  builtin_type->builtin_long_long =
+    init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
+              0,
+              "long long", (struct objfile *) NULL);
+  builtin_type->builtin_unsigned_long_long =
+    init_type (TYPE_CODE_INT, TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
+              TYPE_FLAG_UNSIGNED,
+              "unsigned long long", (struct objfile *) NULL);
+  builtin_type->builtin_float
+    = build_flt (gdbarch_float_bit (gdbarch), "float",
+                gdbarch_float_format (gdbarch));
+  builtin_type->builtin_double
+    = build_flt (gdbarch_double_bit (gdbarch), "double",
+                gdbarch_double_format (gdbarch));
+  builtin_type->builtin_long_double
+    = build_flt (gdbarch_long_double_bit (gdbarch), "long double",
+                gdbarch_long_double_format (gdbarch));
+  builtin_type->builtin_complex
+    = build_complex (gdbarch_float_bit (gdbarch), "complex",
+                    builtin_type->builtin_float);
+  builtin_type->builtin_double_complex
+    = build_complex (gdbarch_double_bit (gdbarch), "double complex",
+                    builtin_type->builtin_double);
+  builtin_type->builtin_string =
+    init_type (TYPE_CODE_STRING, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
+              0,
+              "string", (struct objfile *) NULL);
+  builtin_type->builtin_bool =
+    init_type (TYPE_CODE_BOOL, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
+              0,
+              "bool", (struct objfile *) NULL);
+
+  /* Pointer/Address types. */
+
+  /* NOTE: on some targets, addresses and pointers are not necessarily
+     the same --- for example, on the D10V, pointers are 16 bits long,
+     but addresses are 32 bits long.  See doc/gdbint.texinfo,
+     ``Pointers Are Not Always Addresses''.
+
+     The upshot is:
+     - gdb's `struct type' always describes the target's
+       representation.
+     - gdb's `struct value' objects should always hold values in
+       target form.
+     - gdb's CORE_ADDR values are addresses in the unified virtual
+       address space that the assembler and linker work with.  Thus,
+       since target_read_memory takes a CORE_ADDR as an argument, it
+       can access any memory on the target, even if the processor has
+       separate code and data address spaces.
+
+     So, for example:
+     - If v is a value holding a D10V code pointer, its contents are
+       in target form: a big-endian address left-shifted two bits.
+     - If p is a D10V pointer type, TYPE_LENGTH (p) == 2, just as
+       sizeof (void *) == 2 on the target.
+
+     In this context, builtin_type->CORE_ADDR is a bit odd: it's a
+     target type for a value the target will never see.  It's only
+     used to hold the values of (typeless) linker symbols, which are
+     indeed in the unified virtual address space.  */
+  builtin_type->builtin_data_ptr
+    = make_pointer_type (builtin_type->builtin_void, NULL);
+  builtin_type->builtin_func_ptr
+    = lookup_pointer_type (lookup_function_type (builtin_type->builtin_void));
+  builtin_type->builtin_core_addr =
+    init_type (TYPE_CODE_INT, TARGET_ADDR_BIT / 8,
+              TYPE_FLAG_UNSIGNED,
+              "__CORE_ADDR", (struct objfile *) NULL);
+
+  return builtin_type;
+}
+
 extern void _initialize_gdbtypes (void);
 void
 _initialize_gdbtypes (void)
 {
   struct cmd_list_element *c;
+
+  builtin_type_int0 =
+    init_type (TYPE_CODE_INT, 0 / 8,
+              0,
+              "int0_t", (struct objfile *) NULL);
+  builtin_type_int8 =
+    init_type (TYPE_CODE_INT, 8 / 8,
+              0,
+              "int8_t", (struct objfile *) NULL);
+  builtin_type_uint8 =
+    init_type (TYPE_CODE_INT, 8 / 8,
+              TYPE_FLAG_UNSIGNED,
+              "uint8_t", (struct objfile *) NULL);
+  builtin_type_int16 =
+    init_type (TYPE_CODE_INT, 16 / 8,
+              0,
+              "int16_t", (struct objfile *) NULL);
+  builtin_type_uint16 =
+    init_type (TYPE_CODE_INT, 16 / 8,
+              TYPE_FLAG_UNSIGNED,
+              "uint16_t", (struct objfile *) NULL);
+  builtin_type_int32 =
+    init_type (TYPE_CODE_INT, 32 / 8,
+              0,
+              "int32_t", (struct objfile *) NULL);
+  builtin_type_uint32 =
+    init_type (TYPE_CODE_INT, 32 / 8,
+              TYPE_FLAG_UNSIGNED,
+              "uint32_t", (struct objfile *) NULL);
+  builtin_type_int64 =
+    init_type (TYPE_CODE_INT, 64 / 8,
+              0,
+              "int64_t", (struct objfile *) NULL);
+  builtin_type_uint64 =
+    init_type (TYPE_CODE_INT, 64 / 8,
+              TYPE_FLAG_UNSIGNED,
+              "uint64_t", (struct objfile *) NULL);
+  builtin_type_int128 =
+    init_type (TYPE_CODE_INT, 128 / 8,
+              0,
+              "int128_t", (struct objfile *) NULL);
+  builtin_type_uint128 =
+    init_type (TYPE_CODE_INT, 128 / 8,
+              TYPE_FLAG_UNSIGNED,
+              "uint128_t", (struct objfile *) NULL);
+
   build_gdbtypes ();
 
+  gdbtypes_data = gdbarch_data_register_post_init (gdbtypes_post_init);
+
   /* FIXME - For the moment, handle types by swapping them in and out.
      Should be using the per-architecture data-pointer and a large
      struct. */
-  register_gdbarch_swap (&builtin_type_void, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_char, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_short, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_int, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_long, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_long_long, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_signed_char, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_unsigned_char, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_unsigned_short, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_unsigned_int, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_unsigned_long, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_unsigned_long_long, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_float, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_double, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_long_double, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_complex, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_double_complex, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_string, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_int8, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_uint8, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_int16, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_uint16, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_int32, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_uint32, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_int64, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_uint64, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_int128, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_uint128, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v4sf, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v4si, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v16qi, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v8qi, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v8hi, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v4hi, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v2si, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v2_double, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v4_float, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v2_int64, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v4_int32, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v8_int16, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v16_int8, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v2_float, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v2_int32, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v8_int8, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_v4_int16, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_vec128, sizeof (struct type *), NULL);
-  register_gdbarch_swap (&builtin_type_vec128i, sizeof (struct type *), NULL);
-  REGISTER_GDBARCH_SWAP (builtin_type_void_data_ptr);
-  REGISTER_GDBARCH_SWAP (builtin_type_void_func_ptr);
-  REGISTER_GDBARCH_SWAP (builtin_type_CORE_ADDR);
-  REGISTER_GDBARCH_SWAP (builtin_type_bfd_vma);
-  register_gdbarch_swap (NULL, 0, build_gdbtypes);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_void);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_char);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_short);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_int);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_long);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_long_long);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_signed_char);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_unsigned_char);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_unsigned_short);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_unsigned_int);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_unsigned_long);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_unsigned_long_long);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_float);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_double);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_long_double);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_complex);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_double_complex);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_string);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v4sf);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v4si);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v16qi);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v8qi);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v8hi);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v4hi);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v2si);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v2_double);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v4_float);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v2_int64);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v4_int32);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v8_int16);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v16_int8);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v2_float);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v2_int32);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v8_int8);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_v4_int16);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_vec128);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_vec128i);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_void_data_ptr);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_void_func_ptr);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_CORE_ADDR);
+  DEPRECATED_REGISTER_GDBARCH_SWAP (builtin_type_bfd_vma);
+  deprecated_register_gdbarch_swap (NULL, 0, build_gdbtypes);
 
   /* Note: These types do not need to be swapped - they are target
      neutral.  */
@@ -3621,6 +3612,14 @@ _initialize_gdbtypes (void)
     init_type (TYPE_CODE_FLT, floatformat_ieee_single_little.totalsize / 8,
               0, "builtin_type_ieee_single_little", NULL);
   TYPE_FLOATFORMAT (builtin_type_ieee_single_little) = &floatformat_ieee_single_little;
+  builtin_type_ieee_single[BFD_ENDIAN_BIG]
+    = build_flt (floatformat_ieee_single_big.totalsize,
+                "builtin_type_ieee_single_big",
+                &floatformat_ieee_single_big);
+  builtin_type_ieee_single[BFD_ENDIAN_LITTLE]
+    = build_flt (floatformat_ieee_single_little.totalsize,
+                "builtin_type_ieee_single_little",
+                &floatformat_ieee_single_little);
   builtin_type_ieee_double_big =
     init_type (TYPE_CODE_FLT, floatformat_ieee_double_big.totalsize / 8,
               0, "builtin_type_ieee_double_big", NULL);
@@ -3629,6 +3628,14 @@ _initialize_gdbtypes (void)
     init_type (TYPE_CODE_FLT, floatformat_ieee_double_little.totalsize / 8,
               0, "builtin_type_ieee_double_little", NULL);
   TYPE_FLOATFORMAT (builtin_type_ieee_double_little) = &floatformat_ieee_double_little;
+  builtin_type_ieee_double[BFD_ENDIAN_BIG]
+    = build_flt (floatformat_ieee_double_big.totalsize,
+                "builtin_type_ieee_double_big",
+                &floatformat_ieee_double_big);
+  builtin_type_ieee_double[BFD_ENDIAN_LITTLE]
+    = build_flt (floatformat_ieee_double_little.totalsize,
+                "builtin_type_ieee_double_little",
+                &floatformat_ieee_double_little);
   builtin_type_ieee_double_littlebyte_bigword =
     init_type (TYPE_CODE_FLT, floatformat_ieee_double_littlebyte_bigword.totalsize / 8,
               0, "builtin_type_ieee_double_littlebyte_bigword", NULL);
@@ -3661,6 +3668,14 @@ _initialize_gdbtypes (void)
     init_type (TYPE_CODE_FLT, floatformat_arm_ext_littlebyte_bigword.totalsize / 8,
               0, "builtin_type_arm_ext_littlebyte_bigword", NULL);
   TYPE_FLOATFORMAT (builtin_type_arm_ext_littlebyte_bigword) = &floatformat_arm_ext_littlebyte_bigword;
+  builtin_type_arm_ext[BFD_ENDIAN_BIG]
+    = build_flt (floatformat_arm_ext_big.totalsize,
+                "builtin_type_arm_ext_big",
+                &floatformat_arm_ext_big);
+  builtin_type_arm_ext[BFD_ENDIAN_LITTLE]
+    = build_flt (floatformat_arm_ext_littlebyte_bigword.totalsize,
+                "builtin_type_arm_ext_littlebyte_bigword",
+                &floatformat_arm_ext_littlebyte_bigword);
   builtin_type_ia64_spill_big =
     init_type (TYPE_CODE_FLT, floatformat_ia64_spill_big.totalsize / 8,
               0, "builtin_type_ia64_spill_big", NULL);
@@ -3669,6 +3684,14 @@ _initialize_gdbtypes (void)
     init_type (TYPE_CODE_FLT, floatformat_ia64_spill_little.totalsize / 8,
               0, "builtin_type_ia64_spill_little", NULL);
   TYPE_FLOATFORMAT (builtin_type_ia64_spill_little) = &floatformat_ia64_spill_little;
+  builtin_type_ia64_spill[BFD_ENDIAN_BIG]
+    = build_flt (floatformat_ia64_spill_big.totalsize,
+                "builtin_type_ia64_spill_big",
+                &floatformat_ia64_spill_big);
+  builtin_type_ia64_spill[BFD_ENDIAN_LITTLE]
+    = build_flt (floatformat_ia64_spill_little.totalsize,
+                "builtin_type_ia64_spill_little",
+                &floatformat_ia64_spill_little);
   builtin_type_ia64_quad_big =
     init_type (TYPE_CODE_FLT, floatformat_ia64_quad_big.totalsize / 8,
               0, "builtin_type_ia64_quad_big", NULL);
@@ -3677,11 +3700,18 @@ _initialize_gdbtypes (void)
     init_type (TYPE_CODE_FLT, floatformat_ia64_quad_little.totalsize / 8,
               0, "builtin_type_ia64_quad_little", NULL);
   TYPE_FLOATFORMAT (builtin_type_ia64_quad_little) = &floatformat_ia64_quad_little;
-
-  add_show_from_set (
-                    add_set_cmd ("overload", no_class, var_zinteger, (char *) &overload_debug,
-                                 "Set debugging of C++ overloading.\n\
-                         When enabled, ranking of the functions\n\
-                         is displayed.", &setdebuglist),
-                    &showdebuglist);
+  builtin_type_ia64_quad[BFD_ENDIAN_BIG]
+    = build_flt (floatformat_ia64_quad_big.totalsize,
+                "builtin_type_ia64_quad_big",
+                &floatformat_ia64_quad_big);
+  builtin_type_ia64_quad[BFD_ENDIAN_LITTLE]
+    = build_flt (floatformat_ia64_quad_little.totalsize,
+                "builtin_type_ia64_quad_little",
+                &floatformat_ia64_quad_little);
+
+  deprecated_add_show_from_set
+    (add_set_cmd ("overload", no_class, var_zinteger, (char *) &overload_debug,
+                 "Set debugging of C++ overloading.\n\
+When enabled, ranking of the functions is displayed.", &setdebuglist),
+     &showdebuglist);
 }
This page took 0.039998 seconds and 4 git commands to generate.