OSDN Git Service

*** empty log message ***
[pf3gnuchains/sourceware.git] / gdb / stabsread.c
index ed67096..c7d8a6c 100644 (file)
@@ -2,7 +2,7 @@
 
    Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
-   2008, 2009 Free Software Foundation, Inc.
+   2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -23,7 +23,7 @@
    the "stabs" format.  This format is used with many systems that use
    the a.out object file format, as well as some systems that use
    COFF or ELF where the stabs data is placed in a special section.
-   Avoid placing any object file format specific code in this file. */
+   Avoid placing any object file format specific code in this file.  */
 
 #include "defs.h"
 #include "gdb_string.h"
@@ -34,7 +34,7 @@
 #include "expression.h"
 #include "symfile.h"
 #include "objfiles.h"
-#include "aout/stab_gnu.h"     /* We always use GNU stabs, not native */
+#include "aout/stab_gnu.h"     /* We always use GNU stabs, not native */
 #include "libaout.h"
 #include "aout/aout64.h"
 #include "gdb-stabs.h"
@@ -61,7 +61,7 @@ extern void _initialize_stabsread (void);
    C++ class pass lists of data member fields and lists of member function
    fields in an instance of a field_info structure, as defined below.
    This is part of some reorganization of low level C++ support and is
-   expected to eventually go away... (FIXME) */
+   expected to eventually go away...  (FIXME) */
 
 struct field_info
   {
@@ -114,7 +114,7 @@ static struct type *read_sun_floating_type (char **, int[2],
 
 static struct type *read_enum_type (char **, struct type *, struct objfile *);
 
-static struct type *rs6000_builtin_type (int);
+static struct type *rs6000_builtin_type (int, struct objfile *);
 
 static int
 read_member_functions (struct field_info *, char **, struct type *,
@@ -190,7 +190,7 @@ static struct symbol *current_symbol = NULL;
 
 /* Make a list of nameless types that are undefined.
    This happens when another type is referenced by its number
-   before this type is actually defined. For instance "t(0,1)=k(0,2)"
+   before this type is actually defined.  For instance "t(0,1)=k(0,2)"
    and type (0,2) is defined only later.  */
 
 struct nat
@@ -218,7 +218,7 @@ static int noname_undefs_length;
    or for associating a new type with the pair.  */
 
 static struct type **
-dbx_lookup_type (int typenums[2])
+dbx_lookup_type (int typenums[2], struct objfile *objfile)
 {
   int filenum = typenums[0];
   int index = typenums[1];
@@ -233,7 +233,8 @@ dbx_lookup_type (int typenums[2])
   if (filenum < 0 || filenum >= n_this_object_header_files)
     {
       complaint (&symfile_complaints,
-                _("Invalid symbol data: type number (%d,%d) out of range at symtab pos %d."),
+                _("Invalid symbol data: type number "
+                  "(%d,%d) out of range at symtab pos %d."),
                 filenum, index, symnum);
       goto error_return;
     }
@@ -249,7 +250,7 @@ dbx_lookup_type (int typenums[2])
             this will do the right thing.  */
          static struct type *temp_type;
 
-         temp_type = rs6000_builtin_type (index);
+         temp_type = rs6000_builtin_type (index, objfile);
          return &temp_type;
        }
 
@@ -280,18 +281,18 @@ dbx_lookup_type (int typenums[2])
     {
       real_filenum = this_object_header_files[filenum];
 
-      if (real_filenum >= N_HEADER_FILES (current_objfile))
+      if (real_filenum >= N_HEADER_FILES (objfile))
        {
-         static struct type **temp_type_p;
+         static struct type *temp_type;
 
          warning (_("GDB internal error: bad real_filenum"));
 
        error_return:
-         temp_type_p = &builtin_type_error;
-         return temp_type_p;
+         temp_type = objfile_type (objfile)->builtin_error;
+         return &temp_type;
        }
 
-      f = HEADER_FILES (current_objfile) + real_filenum;
+      f = HEADER_FILES (objfile) + real_filenum;
 
       f_orig_length = f->length;
       if (index >= f_orig_length)
@@ -313,7 +314,7 @@ dbx_lookup_type (int typenums[2])
    and return the type object.
    This can create an empty (zeroed) type object.
    TYPENUMS may be (-1, -1) to return a new type object that is not
-   put into the type vector, and so may not be referred to by number. */
+   put into the type vector, and so may not be referred to by number.  */
 
 static struct type *
 dbx_alloc_type (int typenums[2], struct objfile *objfile)
@@ -325,7 +326,7 @@ dbx_alloc_type (int typenums[2], struct objfile *objfile)
       return (alloc_type (objfile));
     }
 
-  type_addr = dbx_lookup_type (typenums);
+  type_addr = dbx_lookup_type (typenums, objfile);
 
   /* If we are referring to a type not known at all yet,
      allocate an empty type for it.
@@ -339,7 +340,7 @@ dbx_alloc_type (int typenums[2], struct objfile *objfile)
 }
 
 /* for all the stabs in a given stab vector, build appropriate types 
-   and fix their symbols in given symbol vector. */
+   and fix their symbols in given symbol vector.  */
 
 static void
 patch_block_stabs (struct pending *symbols, struct pending_stabs *stabs,
@@ -352,9 +353,8 @@ patch_block_stabs (struct pending *symbols, struct pending_stabs *stabs,
 
   if (stabs)
     {
-
       /* for all the stab entries, find their corresponding symbols and 
-         patch their types! */
+         patch their types!  */
 
       for (ii = 0; ii < stabs->count; ++ii)
        {
@@ -435,6 +435,7 @@ static int
 read_type_number (char **pp, int *typenums)
 {
   int nbits;
+
   if (**pp == '(')
     {
       (*pp)++;
@@ -462,7 +463,7 @@ read_type_number (char **pp, int *typenums)
 #define VISIBILITY_IGNORE      '9'     /* Optimized out or zero length */
 
 /* Structure for storing pointers to reference definitions for fast lookup 
-   during "process_later". */
+   during "process_later".  */
 
 struct ref_map
 {
@@ -477,15 +478,15 @@ struct ref_map
 
 static struct ref_map *ref_map;
 
-/* Ptr to free cell in chunk's linked list. */
+/* Ptr to free cell in chunk's linked list.  */
 static int ref_count = 0;
 
-/* Number of chunks malloced. */
+/* Number of chunks malloced.  */
 static int ref_chunk = 0;
 
 /* This file maintains a cache of stabs aliases found in the symbol
-   table. If the symbol table changes, this cache must be cleared
-   or we are left holding onto data in invalid obstacks. */
+   table.  If the symbol table changes, this cache must be cleared
+   or we are left holding onto data in invalid obstacks.  */
 void
 stabsread_clear_cache (void)
 {
@@ -495,8 +496,8 @@ stabsread_clear_cache (void)
 
 /* Create array of pointers mapping refids to symbols and stab strings.
    Add pointers to reference definition symbols and/or their values as we 
-   find them, using their reference numbers as our index. 
-   These will be used later when we resolve references. */
+   find them, using their reference numbers as our index.
+   These will be used later when we resolve references.  */
 void
 ref_add (int refnum, struct symbol *sym, char *stabs, CORE_ADDR value)
 {
@@ -508,9 +509,11 @@ ref_add (int refnum, struct symbol *sym, char *stabs, CORE_ADDR value)
     {
       int new_slots = ref_count - ref_chunk * MAX_CHUNK_REFS;
       int new_chunks = new_slots / MAX_CHUNK_REFS + 1;
+
       ref_map = (struct ref_map *)
        xrealloc (ref_map, REF_MAP_SIZE (ref_chunk + new_chunks));
-      memset (ref_map + ref_chunk * MAX_CHUNK_REFS, 0, new_chunks * REF_CHUNK_SIZE);
+      memset (ref_map + ref_chunk * MAX_CHUNK_REFS, 0, 
+             new_chunks * REF_CHUNK_SIZE);
       ref_chunk += new_chunks;
     }
   ref_map[refnum].stabs = stabs;
@@ -542,7 +545,7 @@ process_reference (char **string)
   /* Advance beyond the initial '#'.  */
   p = *string + 1;
 
-  /* Read number as reference id. */
+  /* Read number as reference id.  */
   while (*p && isdigit (*p))
     {
       refnum = refnum * 10 + *p - '0';
@@ -563,16 +566,16 @@ symbol_reference_defined (char **string)
 
   refnum = process_reference (&p);
 
-  /* Defining symbols end in '=' */
+  /* Defining symbols end in '=' */
   if (*p == '=')
     {
-      /* Symbol is being defined here. */
+      /* Symbol is being defined here.  */
       *string = p + 1;
       return refnum;
     }
   else
     {
-      /* Must be a reference.   Either the symbol has already been defined,
+      /* Must be a reference.  Either the symbol has already been defined,
          or this is a forward reference to it.  */
       *string = p;
       return -1;
@@ -592,7 +595,7 @@ stab_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
                             + gdbarch_num_pseudo_regs (gdbarch),
                           SYMBOL_PRINT_NAME (sym));
 
-      regno = gdbarch_sp_regnum (gdbarch); /* Known safe, though useless */
+      regno = gdbarch_sp_regnum (gdbarch); /* Known safe, though useless */
     }
 
   return regno;
@@ -616,8 +619,8 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
 
   /* We would like to eliminate nameless symbols, but keep their types.
      E.g. stab entry ":t10=*2" should produce a type 10, which is a pointer
-     to type 2, but, should not create a symbol to address that type. Since
-     the symbol will be nameless, there is no way any user can refer to it. */
+     to type 2, but, should not create a symbol to address that type.  Since
+     the symbol will be nameless, there is no way any user can refer to it.  */
 
   int nameless;
 
@@ -625,7 +628,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
   if (string[0] == 0)
     return 0;
 
-  /* Ignore old-style symbols from cc -go  */
+  /* Ignore old-style symbols from cc -go.  */
   if (p == 0)
     return 0;
 
@@ -633,6 +636,12 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
     {
       p += 2;
       p = strchr (p, ':');
+      if (p == NULL)
+       {
+         complaint (&symfile_complaints, 
+                    _("Bad stabs string '%s'"), string);
+         return NULL;
+       }
     }
 
   /* If a nameless stab entry, all we need is the type, not the symbol.
@@ -673,18 +682,14 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       switch (string[1])
        {
        case 't':
-         SYMBOL_SET_LINKAGE_NAME
-           (sym, obsavestring ("this", strlen ("this"),
-                               &objfile->objfile_obstack));
+         SYMBOL_SET_LINKAGE_NAME (sym, "this");
          break;
 
        case 'v':               /* $vtbl_ptr_type */
          goto normal;
 
        case 'e':
-         SYMBOL_SET_LINKAGE_NAME
-           (sym, obsavestring ("eh_throw", strlen ("eh_throw"),
-                               &objfile->objfile_obstack));
+         SYMBOL_SET_LINKAGE_NAME (sym, "eh_throw");
          break;
 
        case '_':
@@ -695,33 +700,37 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
          /* SunPRO (3.0 at least) static variable encoding.  */
          if (gdbarch_static_transform_name_p (gdbarch))
            goto normal;
-         /* ... fall through ... */
+         /* ... fall through ...  */
 
        default:
          complaint (&symfile_complaints, _("Unknown C++ symbol name `%s'"),
                     string);
-         goto normal;          /* Do *something* with it */
+         goto normal;          /* Do *something* with it */
        }
     }
   else
     {
     normal:
-      SYMBOL_LANGUAGE (sym) = current_subfile->language;
+      SYMBOL_SET_LANGUAGE (sym, current_subfile->language);
       if (SYMBOL_LANGUAGE (sym) == language_cplus)
        {
          char *name = alloca (p - string + 1);
+
          memcpy (name, string, p - string);
          name[p - string] = '\0';
          new_name = cp_canonicalize_string (name);
-         cp_scan_for_anonymous_namespaces (sym);
        }
       if (new_name != NULL)
        {
-         SYMBOL_SET_NAMES (sym, new_name, strlen (new_name), objfile);
+         SYMBOL_SET_NAMES (sym, new_name, strlen (new_name), 1, objfile);
          xfree (new_name);
        }
       else
-       SYMBOL_SET_NAMES (sym, string, p - string, objfile);
+       SYMBOL_SET_NAMES (sym, string, p - string, 1, objfile);
+
+      if (SYMBOL_LANGUAGE (sym) == language_cplus)
+       cp_scan_for_anonymous_namespaces (sym);
+
     }
   p++;
 
@@ -772,7 +781,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
               target arithmetic to get the value.  real.c in GCC
               probably has the necessary code.  */
 
-           dbl_type = builtin_type (gdbarch)->builtin_double;
+           dbl_type = objfile_type (objfile)->builtin_double;
            dbl_valu =
              obstack_alloc (&objfile->objfile_obstack,
                             TYPE_LENGTH (dbl_type));
@@ -792,11 +801,80 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
               types; other languages probably should have at least
               unsigned as well as signed constants.  */
 
-           SYMBOL_TYPE (sym) = builtin_type (gdbarch)->builtin_long;
+           SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_long;
+           SYMBOL_VALUE (sym) = atoi (p);
+           SYMBOL_CLASS (sym) = LOC_CONST;
+         }
+         break;
+
+       case 'c':
+         {
+           SYMBOL_TYPE (sym) = objfile_type (objfile)->builtin_char;
            SYMBOL_VALUE (sym) = atoi (p);
            SYMBOL_CLASS (sym) = LOC_CONST;
          }
          break;
+
+       case 's':
+         {
+           struct type *range_type;
+           int ind = 0;
+           char quote = *p++;
+           gdb_byte *string_local = (gdb_byte *) alloca (strlen (p));
+           gdb_byte *string_value;
+
+           if (quote != '\'' && quote != '"')
+             {
+               SYMBOL_CLASS (sym) = LOC_CONST;
+               SYMBOL_TYPE (sym) = error_type (&p, objfile);
+               SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+               add_symbol_to_list (sym, &file_symbols);
+               return sym;
+             }
+
+           /* Find matching quote, rejecting escaped quotes.  */
+           while (*p && *p != quote)
+             {
+               if (*p == '\\' && p[1] == quote)
+                 {
+                   string_local[ind] = (gdb_byte) quote;
+                   ind++;
+                   p += 2;
+                 }
+               else if (*p) 
+                 {
+                   string_local[ind] = (gdb_byte) (*p);
+                   ind++;
+                   p++;
+                 }
+             }
+           if (*p != quote)
+             {
+               SYMBOL_CLASS (sym) = LOC_CONST;
+               SYMBOL_TYPE (sym) = error_type (&p, objfile);
+               SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
+               add_symbol_to_list (sym, &file_symbols);
+               return sym;
+             }
+
+           /* NULL terminate the string.  */
+           string_local[ind] = 0;
+           range_type
+             = create_range_type (NULL,
+                                  objfile_type (objfile)->builtin_int,
+                                  0, ind);
+           SYMBOL_TYPE (sym) = create_array_type (NULL,
+                                 objfile_type (objfile)->builtin_char,
+                                 range_type);
+           string_value = obstack_alloc (&objfile->objfile_obstack, ind + 1);
+           memcpy (string_value, string_local, ind + 1);
+           p++;
+
+           SYMBOL_VALUE_BYTES (sym) = string_value;
+           SYMBOL_CLASS (sym) = LOC_CONST_BYTES;
+         }
+         break;
+
        case 'e':
          /* SYMBOL:c=eTYPE,INTVALUE for a constant symbol whose value
             can be represented as integral.
@@ -864,7 +942,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
          primarily for promotion when calling the function from GDB.  */
       TYPE_PROTOTYPED (SYMBOL_TYPE (sym)) = 1;
 
-      /* fall into process_prototype_types */
+      /* fall into process_prototype_types */
 
     process_prototype_types:
       /* Sun acc puts declared types of arguments here.  */
@@ -883,7 +961,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                nsemi++;
            }
 
-         /* Allocate parameter information fields and fill them in. */
+         /* Allocate parameter information fields and fill them in.  */
          TYPE_FIELDS (ftype) = (struct field *)
            TYPE_ALLOC (ftype, nsemi * sizeof (struct field));
          while (*p++ == ';')
@@ -898,12 +976,12 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
 
              /* The Sun compilers mark integer arguments, which should
                 be promoted to the width of the calling conventions, with
-                a type which references itself. This type is turned into
+                a type which references itself.  This type is turned into
                 a TYPE_CODE_VOID type by read_type, and we have to turn
                 it back into builtin_int here.
                 FIXME: Do we need a new builtin_promoted_int_arg ?  */
              if (TYPE_CODE (ptype) == TYPE_CODE_VOID)
-               ptype = builtin_type (gdbarch)->builtin_int;
+               ptype = objfile_type (objfile)->builtin_int;
              TYPE_FIELD_TYPE (ftype, nparams) = ptype;
              TYPE_FIELD_ARTIFICIAL (ftype, nparams++) = 0;
            }
@@ -995,8 +1073,8 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
            {
              SYMBOL_TYPE (sym) =
                TYPE_UNSIGNED (SYMBOL_TYPE (sym))
-               ? builtin_type (gdbarch)->builtin_unsigned_int
-               : builtin_type (gdbarch)->builtin_int;
+               ? objfile_type (objfile)->builtin_unsigned_int
+               : objfile_type (objfile)->builtin_int;
            }
          break;
        }
@@ -1057,6 +1135,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
              && gdbarch_stabs_argument_has_addr (gdbarch, SYMBOL_TYPE (sym)))
            {
              struct symbol *prev_sym;
+
              prev_sym = local_symbols->symbol[local_symbols->nsyms - 1];
              if ((SYMBOL_CLASS (prev_sym) == LOC_REF_ARG
                   || SYMBOL_CLASS (prev_sym) == LOC_ARG)
@@ -1080,7 +1159,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       break;
 
     case 'S':
-      /* Static symbol at top level of file */
+      /* Static symbol at top level of file */
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
       SYMBOL_CLASS (sym) = LOC_STATIC;
       SYMBOL_VALUE_ADDRESS (sym) = valu;
@@ -1090,11 +1169,14 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
             != SYMBOL_LINKAGE_NAME (sym))
        {
          struct minimal_symbol *msym;
-         msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (sym), NULL, objfile);
+
+         msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (sym),
+                                       NULL, objfile);
          if (msym != NULL)
            {
              char *new_name = gdbarch_static_transform_name
                (gdbarch, SYMBOL_LINKAGE_NAME (sym));
+
              SYMBOL_SET_LINKAGE_NAME (sym, new_name);
              SYMBOL_VALUE_ADDRESS (sym) = SYMBOL_VALUE_ADDRESS (msym);
            }
@@ -1106,7 +1188,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
     case 't':
       /* In Ada, there is no distinction between typedef and non-typedef;
          any type declaration implicitly has the equivalent of a typedef,
-         and thus 't' is in fact equivalent to 'Tt'. 
+         and thus 't' is in fact equivalent to 'Tt'.
 
          Therefore, for Ada units, we check the character immediately
          before the 't', and if we do not find a 'T', then make sure to
@@ -1124,7 +1206,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
 
       /* For a nameless type, we don't want a create a symbol, thus we
-         did not use `sym'. Return without further processing. */
+         did not use `sym'.  Return without further processing.  */
       if (nameless)
        return NULL;
 
@@ -1141,6 +1223,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
            && TYPE_N_BASECLASSES (SYMBOL_TYPE (sym)))
          {
            int j;
+
            for (j = TYPE_N_BASECLASSES (SYMBOL_TYPE (sym)) - 1; j >= 0; j--)
              if (TYPE_BASECLASS_NAME (SYMBOL_TYPE (sym), j) == 0)
                TYPE_BASECLASS_NAME (SYMBOL_TYPE (sym), j) =
@@ -1151,7 +1234,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
        {
          /* gcc-2.6 or later (when using -fvtable-thunks)
             emits a unique named type for a vtable entry.
-            Some gdb code depends on that specific name. */
+            Some gdb code depends on that specific name.  */
          extern const char vtbl_ptr_name[];
 
          if ((TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR
@@ -1176,15 +1259,16 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
 
                 Fortunately, this check seems not to be necessary
                 for anything except pointers or functions.  */
-              /* ezannoni: 2000-10-26. This seems to apply for
-                versions of gcc older than 2.8. This was the original
+              /* ezannoni: 2000-10-26.  This seems to apply for
+                versions of gcc older than 2.8.  This was the original
                 problem: with the following code gdb would tell that
-                the type for name1 is caddr_t, and func is char()
+                the type for name1 is caddr_t, and func is char().
+
                 typedef char *caddr_t;
                 char *name2;
                 struct x
                 {
-                char *name1;
+                  char *name1;
                 } xx;
                 char *func()
                 {
@@ -1192,7 +1276,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                 main () {}
                 */
 
-             /* Pascal accepts names for pointer types. */
+             /* Pascal accepts names for pointer types.  */
              if (current_subfile->language == language_pascal)
                {
                  TYPE_NAME (SYMBOL_TYPE (sym)) = SYMBOL_LINKAGE_NAME (sym);
@@ -1216,8 +1300,9 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
           SYMBOL_DOMAIN (struct_sym) = STRUCT_DOMAIN;
           if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
             TYPE_NAME (SYMBOL_TYPE (sym))
-              = obconcat (&objfile->objfile_obstack, "", "",
-                          SYMBOL_LINKAGE_NAME (sym));
+             = obconcat (&objfile->objfile_obstack,
+                         SYMBOL_LINKAGE_NAME (sym),
+                         (char *) NULL);
           add_symbol_to_list (struct_sym, &file_symbols);
         }
       
@@ -1234,7 +1319,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
  
       /* For a nameless type, we don't want a create a symbol, thus we
-         did not use `sym'. Return without further processing. */
+         did not use `sym'.  Return without further processing.  */
       if (nameless)
        return NULL;
 
@@ -1243,29 +1328,32 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
       if (TYPE_TAG_NAME (SYMBOL_TYPE (sym)) == 0)
        TYPE_TAG_NAME (SYMBOL_TYPE (sym))
-         = obconcat (&objfile->objfile_obstack, "", "",
-                     SYMBOL_LINKAGE_NAME (sym));
+         = obconcat (&objfile->objfile_obstack,
+                     SYMBOL_LINKAGE_NAME (sym),
+                     (char *) NULL);
       add_symbol_to_list (sym, &file_symbols);
 
       if (synonym)
        {
-         /* Clone the sym and then modify it. */
+         /* Clone the sym and then modify it.  */
          struct symbol *typedef_sym = (struct symbol *)
-         obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
+           obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
+
          *typedef_sym = *sym;
          SYMBOL_CLASS (typedef_sym) = LOC_TYPEDEF;
          SYMBOL_VALUE (typedef_sym) = valu;
          SYMBOL_DOMAIN (typedef_sym) = VAR_DOMAIN;
          if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
            TYPE_NAME (SYMBOL_TYPE (sym))
-             = obconcat (&objfile->objfile_obstack, "", "",
-                         SYMBOL_LINKAGE_NAME (sym));
+             = obconcat (&objfile->objfile_obstack,
+                         SYMBOL_LINKAGE_NAME (sym),
+                         (char *) NULL);
          add_symbol_to_list (typedef_sym, &file_symbols);
        }
       break;
 
     case 'V':
-      /* Static symbol of local scope */
+      /* Static symbol of local scope */
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
       SYMBOL_CLASS (sym) = LOC_STATIC;
       SYMBOL_VALUE_ADDRESS (sym) = valu;
@@ -1275,11 +1363,14 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
             != SYMBOL_LINKAGE_NAME (sym))
        {
          struct minimal_symbol *msym;
-         msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (sym), NULL, objfile);
+
+         msym = lookup_minimal_symbol (SYMBOL_LINKAGE_NAME (sym), 
+                                       NULL, objfile);
          if (msym != NULL)
            {
              char *new_name = gdbarch_static_transform_name
                (gdbarch, SYMBOL_LINKAGE_NAME (sym));
+
              SYMBOL_SET_LINKAGE_NAME (sym, new_name);
              SYMBOL_VALUE_ADDRESS (sym) = SYMBOL_VALUE_ADDRESS (msym);
            }
@@ -1382,7 +1473,8 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
 static struct type *
 error_type (char **pp, struct objfile *objfile)
 {
-  complaint (&symfile_complaints, _("couldn't parse type; debugger out of date?"));
+  complaint (&symfile_complaints,
+            _("couldn't parse type; debugger out of date?"));
   while (1)
     {
       /* Skip to end of symbol.  */
@@ -1401,7 +1493,7 @@ error_type (char **pp, struct objfile *objfile)
          break;
        }
     }
-  return (builtin_type_error);
+  return objfile_type (objfile)->builtin_error;
 }
 \f
 
@@ -1423,10 +1515,10 @@ read_type (char **pp, struct objfile *objfile)
      there is no size attribute.  */
   int type_size = -1;
 
-  /* Used to distinguish string and bitstring from char-array and set. */
+  /* Used to distinguish string and bitstring from char-array and set.  */
   int is_string = 0;
 
-  /* Used to distinguish vector from array. */
+  /* Used to distinguish vector from array.  */
   int is_vector = 0;
 
   /* Read type number if present.  The type number may be omitted.
@@ -1503,7 +1595,8 @@ again:
                /* Complain and keep going, so compilers can invent new
                   cross-reference types.  */
                complaint (&symfile_complaints,
-                          _("Unrecognized cross-reference type `%c'"), (*pp)[0]);
+                          _("Unrecognized cross-reference type `%c'"),
+                          (*pp)[0]);
                code = TYPE_CODE_STRUCT;
                break;
              }
@@ -1516,6 +1609,7 @@ again:
          if (q1 && p > q1 && p[1] == ':')
            {
              int nesting_level = 0;
+
              for (q2 = q1; *q2; q2++)
                {
                  if (*q2 == '<')
@@ -1533,6 +1627,7 @@ again:
          if (current_subfile->language == language_cplus)
            {
              char *new_name, *name = alloca (p - *pp + 1);
+
              memcpy (name, *pp, p - *pp);
              name[p - *pp] = '\0';
              new_name = cp_canonicalize_string (name);
@@ -1545,8 +1640,8 @@ again:
            }
          if (type_name == NULL)
            {
-             to = type_name =
-               (char *) obstack_alloc (&objfile->objfile_obstack, p - *pp + 1);
+             to = type_name = (char *)
+               obstack_alloc (&objfile->objfile_obstack, p - *pp + 1);
 
              /* Copy the name.  */
              from = *pp + 1;
@@ -1577,7 +1672,7 @@ again:
                  obstack_free (&objfile->objfile_obstack, type_name);
                  type = SYMBOL_TYPE (sym);
                  if (typenums[0] != -1)
-                   *dbx_lookup_type (typenums) = type;
+                   *dbx_lookup_type (typenums, objfile) = type;
                  return type;
                }
            }
@@ -1612,14 +1707,15 @@ again:
       (*pp)--;
 
       /* We deal with something like t(1,2)=(3,4)=... which
-         the Lucid compiler and recent gcc versions (post 2.7.3) use. */
+         the Lucid compiler and recent gcc versions (post 2.7.3) use.  */
 
       /* Allocate and enter the typedef type first.
-         This handles recursive types. */
+         This handles recursive types.  */
       type = dbx_alloc_type (typenums, objfile);
       TYPE_CODE (type) = TYPE_CODE_TYPEDEF;
       {
        struct type *xtype = read_type (pp, objfile);
+
        if (type == xtype)
          {
            /* It's being defined as itself.  That means it is "void".  */
@@ -1672,17 +1768,17 @@ again:
 
     case '*':                  /* Pointer to another type */
       type1 = read_type (pp, objfile);
-      type = make_pointer_type (type1, dbx_lookup_type (typenums));
+      type = make_pointer_type (type1, dbx_lookup_type (typenums, objfile));
       break;
 
     case '&':                  /* Reference to another type */
       type1 = read_type (pp, objfile);
-      type = make_reference_type (type1, dbx_lookup_type (typenums));
+      type = make_reference_type (type1, dbx_lookup_type (typenums, objfile));
       break;
 
     case 'f':                  /* Function returning another type */
       type1 = read_type (pp, objfile);
-      type = make_function_type (type1, dbx_lookup_type (typenums), objfile);
+      type = make_function_type (type1, dbx_lookup_type (typenums, objfile));
       break;
 
     case 'g':                   /* Prototyped function.  (Sun)  */
@@ -1705,8 +1801,8 @@ again:
         const char *type_start = (*pp) - 1;
         struct type *return_type = read_type (pp, objfile);
         struct type *func_type
-          = make_function_type (return_type, dbx_lookup_type (typenums),
-                               objfile);
+          = make_function_type (return_type,
+                               dbx_lookup_type (typenums, objfile));
         struct type_list {
           struct type *type;
           struct type_list *next;
@@ -1727,7 +1823,8 @@ again:
         else
           {
            complaint (&symfile_complaints,
-                      _("Prototyped function type didn't end arguments with `#':\n%s"),
+                      _("Prototyped function type didn't "
+                        "end arguments with `#':\n%s"),
                       type_start);
           }
 
@@ -1762,13 +1859,13 @@ again:
     case 'k':                  /* Const qualifier on some type (Sun) */
       type = read_type (pp, objfile);
       type = make_cv_type (1, TYPE_VOLATILE (type), type,
-                          dbx_lookup_type (typenums));
+                          dbx_lookup_type (typenums, objfile));
       break;
 
     case 'B':                  /* Volatile qual on some type (Sun) */
       type = read_type (pp, objfile);
       type = make_cv_type (TYPE_CONST (type), 1, type,
-                          dbx_lookup_type (typenums));
+                          dbx_lookup_type (typenums, objfile));
       break;
 
     case '@':
@@ -1792,6 +1889,7 @@ again:
        /* type attribute */
        {
          char *attr = *pp;
+
          /* Skip to the semicolon.  */
          while (**pp != ';' && **pp != '\0')
            ++(*pp);
@@ -1809,12 +1907,12 @@ again:
              break;
 
            case 'S':           /* String attribute */
-             /* FIXME: check to see if following type is array? */
+             /* FIXME: check to see if following type is array?  */
              is_string = 1;
              break;
 
            case 'V':           /* Vector attribute */
-             /* FIXME: check to see if following type is array? */
+             /* FIXME: check to see if following type is array?  */
              is_vector = 1;
              break;
 
@@ -1838,11 +1936,12 @@ again:
          return_type = read_type (pp, objfile);
          if (*(*pp)++ != ';')
            complaint (&symfile_complaints,
-                      _("invalid (minimal) member type data format at symtab pos %d."),
+                      _("invalid (minimal) member type "
+                        "data format at symtab pos %d."),
                       symnum);
          type = allocate_stub_method (return_type);
          if (typenums[0] != -1)
-           *dbx_lookup_type (typenums) = type;
+           *dbx_lookup_type (typenums, objfile) = type;
        }
       else
        {
@@ -1870,7 +1969,7 @@ again:
     case 'r':                  /* Range type */
       type = read_range_type (pp, typenums, type_size, objfile);
       if (typenums[0] != -1)
-       *dbx_lookup_type (typenums) = type;
+       *dbx_lookup_type (typenums, objfile) = type;
       break;
 
     case 'b':
@@ -1878,21 +1977,21 @@ again:
          /* Sun ACC builtin int type */
          type = read_sun_builtin_type (pp, typenums, objfile);
          if (typenums[0] != -1)
-           *dbx_lookup_type (typenums) = type;
+           *dbx_lookup_type (typenums, objfile) = type;
        }
       break;
 
     case 'R':                  /* Sun ACC builtin float type */
       type = read_sun_floating_type (pp, typenums, objfile);
       if (typenums[0] != -1)
-       *dbx_lookup_type (typenums) = type;
+       *dbx_lookup_type (typenums, objfile) = type;
       break;
 
     case 'e':                  /* Enumeration type */
       type = dbx_alloc_type (typenums, objfile);
       type = read_enum_type (pp, type, objfile);
       if (typenums[0] != -1)
-       *dbx_lookup_type (typenums) = type;
+       *dbx_lookup_type (typenums, objfile) = type;
       break;
 
     case 's':                  /* Struct type */
@@ -1932,12 +2031,12 @@ again:
       if (is_string)
        TYPE_CODE (type) = TYPE_CODE_BITSTRING;
       if (typenums[0] != -1)
-       *dbx_lookup_type (typenums) = type;
+       *dbx_lookup_type (typenums, objfile) = type;
       break;
 
     default:
-      --*pp;                   /* Go back to the symbol in error */
-      /* Particularly important if it was \0! */
+      --*pp;                   /* Go back to the symbol in error */
+      /* Particularly important if it was \0!  */
       return error_type (pp, objfile);
     }
 
@@ -1955,22 +2054,34 @@ again:
 }
 \f
 /* RS/6000 xlc/dbx combination uses a set of builtin types, starting from -1.
-   Return the proper type node for a given builtin type number. */
+   Return the proper type node for a given builtin type number.  */
+
+static const struct objfile_data *rs6000_builtin_type_data;
 
 static struct type *
-rs6000_builtin_type (int typenum)
+rs6000_builtin_type (int typenum, struct objfile *objfile)
 {
+  struct type **negative_types = objfile_data (objfile,
+                                              rs6000_builtin_type_data);
+
   /* We recognize types numbered from -NUMBER_RECOGNIZED to -1.  */
 #define NUMBER_RECOGNIZED 34
-  /* This includes an empty slot for type number -0.  */
-  static struct type *negative_types[NUMBER_RECOGNIZED + 1];
   struct type *rettype = NULL;
 
   if (typenum >= 0 || typenum < -NUMBER_RECOGNIZED)
     {
       complaint (&symfile_complaints, _("Unknown builtin type %d"), typenum);
-      return builtin_type_error;
+      return objfile_type (objfile)->builtin_error;
+    }
+
+  if (!negative_types)
+    {
+      /* This includes an empty slot for type number -0.  */
+      negative_types = OBSTACK_CALLOC (&objfile->objfile_obstack,
+                                      NUMBER_RECOGNIZED + 1, struct type *);
+      set_objfile_data (objfile, rs6000_builtin_type_data, negative_types);
     }
+
   if (negative_types[-typenum] != NULL)
     return negative_types[-typenum];
 
@@ -1990,129 +2101,130 @@ rs6000_builtin_type (int typenum)
          is other than 32 bits, then it should use a new negative type
          number (or avoid negative type numbers for that case).
          See stabs.texinfo.  */
-      rettype = init_type (TYPE_CODE_INT, 4, 0, "int", NULL);
+      rettype = init_type (TYPE_CODE_INT, 4, 0, "int", objfile);
       break;
     case 2:
-      rettype = init_type (TYPE_CODE_INT, 1, 0, "char", NULL);
+      rettype = init_type (TYPE_CODE_INT, 1, 0, "char", objfile);
       break;
     case 3:
-      rettype = init_type (TYPE_CODE_INT, 2, 0, "short", NULL);
+      rettype = init_type (TYPE_CODE_INT, 2, 0, "short", objfile);
       break;
     case 4:
-      rettype = init_type (TYPE_CODE_INT, 4, 0, "long", NULL);
+      rettype = init_type (TYPE_CODE_INT, 4, 0, "long", objfile);
       break;
     case 5:
       rettype = init_type (TYPE_CODE_INT, 1, TYPE_FLAG_UNSIGNED,
-                          "unsigned char", NULL);
+                          "unsigned char", objfile);
       break;
     case 6:
-      rettype = init_type (TYPE_CODE_INT, 1, 0, "signed char", NULL);
+      rettype = init_type (TYPE_CODE_INT, 1, 0, "signed char", objfile);
       break;
     case 7:
       rettype = init_type (TYPE_CODE_INT, 2, TYPE_FLAG_UNSIGNED,
-                          "unsigned short", NULL);
+                          "unsigned short", objfile);
       break;
     case 8:
       rettype = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED,
-                          "unsigned int", NULL);
+                          "unsigned int", objfile);
       break;
     case 9:
       rettype = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED,
-                          "unsigned", NULL);
+                          "unsigned", objfile);
+      break;
     case 10:
       rettype = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED,
-                          "unsigned long", NULL);
+                          "unsigned long", objfile);
       break;
     case 11:
-      rettype = init_type (TYPE_CODE_VOID, 1, 0, "void", NULL);
+      rettype = init_type (TYPE_CODE_VOID, 1, 0, "void", objfile);
       break;
     case 12:
       /* IEEE single precision (32 bit).  */
-      rettype = init_type (TYPE_CODE_FLT, 4, 0, "float", NULL);
+      rettype = init_type (TYPE_CODE_FLT, 4, 0, "float", objfile);
       break;
     case 13:
       /* IEEE double precision (64 bit).  */
-      rettype = init_type (TYPE_CODE_FLT, 8, 0, "double", NULL);
+      rettype = init_type (TYPE_CODE_FLT, 8, 0, "double", objfile);
       break;
     case 14:
       /* This is an IEEE double on the RS/6000, and different machines with
          different sizes for "long double" should use different negative
          type numbers.  See stabs.texinfo.  */
-      rettype = init_type (TYPE_CODE_FLT, 8, 0, "long double", NULL);
+      rettype = init_type (TYPE_CODE_FLT, 8, 0, "long double", objfile);
       break;
     case 15:
-      rettype = init_type (TYPE_CODE_INT, 4, 0, "integer", NULL);
+      rettype = init_type (TYPE_CODE_INT, 4, 0, "integer", objfile);
       break;
     case 16:
       rettype = init_type (TYPE_CODE_BOOL, 4, TYPE_FLAG_UNSIGNED,
-                          "boolean", NULL);
+                          "boolean", objfile);
       break;
     case 17:
-      rettype = init_type (TYPE_CODE_FLT, 4, 0, "short real", NULL);
+      rettype = init_type (TYPE_CODE_FLT, 4, 0, "short real", objfile);
       break;
     case 18:
-      rettype = init_type (TYPE_CODE_FLT, 8, 0, "real", NULL);
+      rettype = init_type (TYPE_CODE_FLT, 8, 0, "real", objfile);
       break;
     case 19:
-      rettype = init_type (TYPE_CODE_ERROR, 0, 0, "stringptr", NULL);
+      rettype = init_type (TYPE_CODE_ERROR, 0, 0, "stringptr", objfile);
       break;
     case 20:
       rettype = init_type (TYPE_CODE_CHAR, 1, TYPE_FLAG_UNSIGNED,
-                          "character", NULL);
+                          "character", objfile);
       break;
     case 21:
       rettype = init_type (TYPE_CODE_BOOL, 1, TYPE_FLAG_UNSIGNED,
-                          "logical*1", NULL);
+                          "logical*1", objfile);
       break;
     case 22:
       rettype = init_type (TYPE_CODE_BOOL, 2, TYPE_FLAG_UNSIGNED,
-                          "logical*2", NULL);
+                          "logical*2", objfile);
       break;
     case 23:
       rettype = init_type (TYPE_CODE_BOOL, 4, TYPE_FLAG_UNSIGNED,
-                          "logical*4", NULL);
+                          "logical*4", objfile);
       break;
     case 24:
       rettype = init_type (TYPE_CODE_BOOL, 4, TYPE_FLAG_UNSIGNED,
-                          "logical", NULL);
+                          "logical", objfile);
       break;
     case 25:
       /* Complex type consisting of two IEEE single precision values.  */
-      rettype = init_type (TYPE_CODE_COMPLEX, 8, 0, "complex", NULL);
+      rettype = init_type (TYPE_CODE_COMPLEX, 8, 0, "complex", objfile);
       TYPE_TARGET_TYPE (rettype) = init_type (TYPE_CODE_FLT, 4, 0, "float",
-                                             NULL);
+                                             objfile);
       break;
     case 26:
       /* Complex type consisting of two IEEE double precision values.  */
       rettype = init_type (TYPE_CODE_COMPLEX, 16, 0, "double complex", NULL);
       TYPE_TARGET_TYPE (rettype) = init_type (TYPE_CODE_FLT, 8, 0, "double",
-                                             NULL);
+                                             objfile);
       break;
     case 27:
-      rettype = init_type (TYPE_CODE_INT, 1, 0, "integer*1", NULL);
+      rettype = init_type (TYPE_CODE_INT, 1, 0, "integer*1", objfile);
       break;
     case 28:
-      rettype = init_type (TYPE_CODE_INT, 2, 0, "integer*2", NULL);
+      rettype = init_type (TYPE_CODE_INT, 2, 0, "integer*2", objfile);
       break;
     case 29:
-      rettype = init_type (TYPE_CODE_INT, 4, 0, "integer*4", NULL);
+      rettype = init_type (TYPE_CODE_INT, 4, 0, "integer*4", objfile);
       break;
     case 30:
-      rettype = init_type (TYPE_CODE_CHAR, 2, 0, "wchar", NULL);
+      rettype = init_type (TYPE_CODE_CHAR, 2, 0, "wchar", objfile);
       break;
     case 31:
-      rettype = init_type (TYPE_CODE_INT, 8, 0, "long long", NULL);
+      rettype = init_type (TYPE_CODE_INT, 8, 0, "long long", objfile);
       break;
     case 32:
       rettype = init_type (TYPE_CODE_INT, 8, TYPE_FLAG_UNSIGNED,
-                          "unsigned long long", NULL);
+                          "unsigned long long", objfile);
       break;
     case 33:
       rettype = init_type (TYPE_CODE_INT, 8, TYPE_FLAG_UNSIGNED,
-                          "logical*8", NULL);
+                          "logical*8", objfile);
       break;
     case 34:
-      rettype = init_type (TYPE_CODE_INT, 8, 0, "integer*8", NULL);
+      rettype = init_type (TYPE_CODE_INT, 8, 0, "integer*8", objfile);
       break;
     }
   negative_types[-typenum] = rettype;
@@ -2185,13 +2297,13 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
   char *p;
 
   /* Process each list until we find something that is not a member function
-     or find the end of the functions. */
+     or find the end of the functions.  */
 
   while (**pp != ';')
     {
       /* We should be positioned at the start of the function name.
          Scan forward to find the first ':' and if it is not the
-         first of a "::" delimiter, then this is not a member function. */
+         first of a "::" delimiter, then this is not a member function.  */
       p = *pp;
       while (*p != ':')
        {
@@ -2256,7 +2368,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
          /* Check for and handle cretinous dbx symbol name continuation!  */
          if (look_ahead_type == NULL)
            {
-             /* Normal case. */
+             /* Normal case.  */
              STABS_CONTINUE (pp, objfile);
 
              new_sublist->fn_field.type = read_type (pp, objfile);
@@ -2280,7 +2392,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
              p++;
            }
 
-         /* If this is just a stub, then we don't have the real name here. */
+         /* If this is just a stub, then we don't have the real name here.  */
 
          if (TYPE_STUB (new_sublist->fn_field.type))
            {
@@ -2305,33 +2417,35 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
          STABS_CONTINUE (pp, objfile);
          switch (**pp)
            {
-           case 'A':           /* Normal functions. */
+           case 'A':           /* Normal functions.  */
              new_sublist->fn_field.is_const = 0;
              new_sublist->fn_field.is_volatile = 0;
              (*pp)++;
              break;
-           case 'B':           /* `const' member functions. */
+           case 'B':           /* `const' member functions.  */
              new_sublist->fn_field.is_const = 1;
              new_sublist->fn_field.is_volatile = 0;
              (*pp)++;
              break;
-           case 'C':           /* `volatile' member function. */
+           case 'C':           /* `volatile' member function.  */
              new_sublist->fn_field.is_const = 0;
              new_sublist->fn_field.is_volatile = 1;
              (*pp)++;
              break;
-           case 'D':           /* `const volatile' member function. */
+           case 'D':           /* `const volatile' member function.  */
              new_sublist->fn_field.is_const = 1;
              new_sublist->fn_field.is_volatile = 1;
              (*pp)++;
              break;
-           case '*':           /* File compiled with g++ version 1 -- no info */
+           case '*':           /* File compiled with g++ version 1 --
+                                  no info.  */
            case '?':
            case '.':
              break;
            default:
              complaint (&symfile_complaints,
-                        _("const/volatile indicator missing, got '%c'"), **pp);
+                        _("const/volatile indicator missing, got '%c'"),
+                        **pp);
              break;
            }
 
@@ -2366,7 +2480,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
                    look_ahead_type = read_type (pp, objfile);
                    if (**pp == ':')
                      {
-                       /* g++ version 1 overloaded methods. */
+                       /* g++ version 1 overloaded methods.  */
                      }
                    else
                      {
@@ -2414,7 +2528,8 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
            default:
              /* error */
              complaint (&symfile_complaints,
-                        _("member function type missing, got '%c'"), (*pp)[-1]);
+                        _("member function type missing, got '%c'"),
+                        (*pp)[-1]);
              /* Fall through into normal member function.  */
 
            case '.':
@@ -2498,8 +2613,8 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
             method name     physname      physname   method name
 
             __opi            [none]     __opi__3Foo  operator int    opname
-                                                                  [now or later]
-            Foo              _._3Foo       _._3Foo      ~Foo       separate and
+                                                                [now or later]
+            Foo              _._3Foo       _._3Foo      ~Foo      separate and
                                                                       rename
             operator i     _ZN3FoocviEv _ZN3FoocviEv operator int    demangle
             __comp_ctor  _ZN3FooC1ERKS_ _ZN3FooC1ERKS_   Foo         demangle
@@ -2534,8 +2649,8 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
              make_cleanup (xfree, destr_fnlist);
              memset (destr_fnlist, 0, sizeof (struct next_fnfieldlist));
              destr_fnlist->fn_fieldlist.name
-               = obconcat (&objfile->objfile_obstack, "", "~",
-                           new_fnlist->fn_fieldlist.name);
+               = obconcat (&objfile->objfile_obstack, "~",
+                           new_fnlist->fn_fieldlist.name, (char *) NULL);
 
              destr_fnlist->fn_fieldlist.fn_fields = (struct fn_field *)
                obstack_alloc (&objfile->objfile_obstack,
@@ -2592,6 +2707,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
            {
              char dem_opname[256];
              int ret;
+
              ret = cplus_demangle_opname (new_fnlist->fn_fieldlist.name,
                                              dem_opname, DMGL_ANSI);
              if (!ret)
@@ -2660,7 +2776,7 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
       /* At this point, *pp points to something like "22:23=*22...",
          where the type number before the ':' is the "context" and
          everything after is a regular type definition.  Lookup the
-         type, find it's name, and construct the field name. */
+         type, find it's name, and construct the field name.  */
 
       context = read_type (pp, objfile);
 
@@ -2669,11 +2785,11 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
        case 'f':               /* $vf -- a virtual function table pointer */
          name = type_name_no_tag (context);
          if (name == NULL)
-         {
-                 name = "";
-         }
-         fip->list->field.name =
-           obconcat (&objfile->objfile_obstack, vptr_name, name, "");
+           {
+             name = "";
+           }
+         fip->list->field.name = obconcat (&objfile->objfile_obstack,
+                                           vptr_name, name, (char *) NULL);
          break;
 
        case 'b':               /* $vb -- a virtual bsomethingorother */
@@ -2681,24 +2797,25 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
          if (name == NULL)
            {
              complaint (&symfile_complaints,
-                        _("C++ abbreviated type name unknown at symtab pos %d"),
+                        _("C++ abbreviated type name "
+                          "unknown at symtab pos %d"),
                         symnum);
              name = "FOO";
            }
-         fip->list->field.name =
-           obconcat (&objfile->objfile_obstack, vb_name, name, "");
+         fip->list->field.name = obconcat (&objfile->objfile_obstack, vb_name,
+                                           name, (char *) NULL);
          break;
 
        default:
          invalid_cpp_abbrev_complaint (*pp);
-         fip->list->field.name =
-           obconcat (&objfile->objfile_obstack,
-                     "INVALID_CPLUSPLUS_ABBREV", "", "");
+         fip->list->field.name = obconcat (&objfile->objfile_obstack,
+                                           "INVALID_CPLUSPLUS_ABBREV",
+                                           (char *) NULL);
          break;
        }
 
       /* At this point, *pp points to the ':'.  Skip it and read the
-         field type. */
+         field type.  */
 
       p = ++(*pp);
       if (p[-1] != ':')
@@ -2714,6 +2831,7 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
 
       {
        int nbits;
+
        FIELD_BITPOS (fip->list->field) = read_huge_number (pp, ';', &nbits,
                                                             0);
        if (nbits != 0)
@@ -2744,7 +2862,7 @@ read_one_struct_field (struct field_info *fip, char **pp, char *p,
     obsavestring (*pp, p - *pp, &objfile->objfile_obstack);
   *pp = p + 1;
 
-  /* This means we have a visibility for a field coming. */
+  /* This means we have a visibility for a field coming.  */
   if (**pp == '/')
     {
       (*pp)++;
@@ -2761,7 +2879,7 @@ read_one_struct_field (struct field_info *fip, char **pp, char *p,
     {
       p = ++(*pp);
 #if 0
-      /* Possible future hook for nested types. */
+      /* Possible future hook for nested types.  */
       if (**pp == '!')
        {
          fip->list->field.bitpos = (long) -2;  /* nested type */
@@ -2790,6 +2908,7 @@ read_one_struct_field (struct field_info *fip, char **pp, char *p,
 
   {
     int nbits;
+
     FIELD_BITPOS (fip->list->field) = read_huge_number (pp, ',', &nbits, 0);
     if (nbits != 0)
       {
@@ -2888,9 +3007,9 @@ read_struct_fields (struct field_info *fip, char **pp, struct type *type,
 
   /* Read each data member type until we find the terminating ';' at the end of
      the data member list, or break for some other reason such as finding the
-     start of the member function list. */
+     start of the member function list.  */
   /* Stab string for structure/union does not end with two ';' in
-     SUN C compiler 5.3 i.e. F6U2, hence check for end of string. */
+     SUN C compiler 5.3 i.e. F6U2, hence check for end of string.  */
 
   while (**pp != ';' && **pp != '\0')
     {
@@ -2920,7 +3039,7 @@ read_struct_fields (struct field_info *fip, char **pp, struct type *type,
       /* Look for the ':' that separates the field name from the field
          values.  Data members are delimited by a single ':', while member
          functions are delimited by a pair of ':'s.  When we hit the member
-         functions (if any), terminate scan loop and return. */
+         functions (if any), terminate scan loop and return.  */
 
       while (*p != ':' && *p != '\0')
        {
@@ -2940,7 +3059,7 @@ read_struct_fields (struct field_info *fip, char **pp, struct type *type,
     {
       /* (the deleted) chill the list of fields: the last entry (at
          the head) is a partially constructed entry which we now
-         scrub. */
+         scrub.  */
       fip->list = fip->list->next;
     }
   return 1;
@@ -2986,13 +3105,14 @@ read_baseclasses (struct field_info *fip, char **pp, struct type *type,
     }
   else
     {
-      /* Skip the '!' baseclass information marker. */
+      /* Skip the '!' baseclass information marker.  */
       (*pp)++;
     }
 
   ALLOCATE_CPLUS_STRUCT_TYPE (type);
   {
     int nbits;
+
     TYPE_N_BASECLASSES (type) = read_huge_number (pp, ',', &nbits, 0);
     if (nbits != 0)
       return 0;
@@ -3022,13 +3142,14 @@ read_baseclasses (struct field_info *fip, char **pp, struct type *type,
       memset (new, 0, sizeof (struct nextfield));
       new->next = fip->list;
       fip->list = new;
-      FIELD_BITSIZE (new->field) = 0;  /* this should be an unpacked field! */
+      FIELD_BITSIZE (new->field) = 0;  /* This should be an unpacked
+                                          field!  */
 
       STABS_CONTINUE (pp, objfile);
       switch (**pp)
        {
        case '0':
-         /* Nothing to do. */
+         /* Nothing to do.  */
          break;
        case '1':
          SET_TYPE_FIELD_VIRTUAL (type, i);
@@ -3037,7 +3158,8 @@ read_baseclasses (struct field_info *fip, char **pp, struct type *type,
          /* Unknown character.  Complain and treat it as non-virtual.  */
          {
            complaint (&symfile_complaints,
-                      _("Unknown virtual character `%c' for baseclass"), **pp);
+                      _("Unknown virtual character `%c' for baseclass"),
+                      **pp);
          }
        }
       ++(*pp);
@@ -3074,12 +3196,12 @@ read_baseclasses (struct field_info *fip, char **pp, struct type *type,
 
       /* The last piece of baseclass information is the type of the
          base class.  Read it, and remember it's type name as this
-         field's name. */
+         field's name.  */
 
       new->field.type = read_type (pp, objfile);
       new->field.name = type_name_no_tag (new->field.type);
 
-      /* skip trailing ';' and bump count of number of fields seen */
+      /* Skip trailing ';' and bump count of number of fields seen.  */
       if (**pp == ';')
        (*pp)++;
       else
@@ -3104,7 +3226,7 @@ read_tilde_fields (struct field_info *fip, char **pp, struct type *type,
 
   STABS_CONTINUE (pp, objfile);
 
-  /* If we are positioned at a ';', then skip it. */
+  /* If we are positioned at a ';', then skip it.  */
   if (**pp == ';')
     {
       (*pp)++;
@@ -3117,7 +3239,7 @@ read_tilde_fields (struct field_info *fip, char **pp, struct type *type,
       if (**pp == '=' || **pp == '+' || **pp == '-')
        {
          /* Obsolete flags that used to indicate the presence
-            of constructors and/or destructors. */
+            of constructors and/or destructors.  */
          (*pp)++;
        }
 
@@ -3146,13 +3268,14 @@ read_tilde_fields (struct field_info *fip, char **pp, struct type *type,
            }
 
          TYPE_VPTR_BASETYPE (type) = t;
-         if (type == t)        /* Our own class provides vtbl ptr */
+         if (type == t)        /* Our own class provides vtbl ptr */
            {
              for (i = TYPE_NFIELDS (t) - 1;
                   i >= TYPE_N_BASECLASSES (t);
                   --i)
                {
                  char *name = TYPE_FIELD_NAME (t, i);
+
                  if (!strncmp (name, vptr_name, sizeof (vptr_name) - 2)
                      && is_cplus_marker (name[sizeof (vptr_name) - 2]))
                    {
@@ -3162,7 +3285,8 @@ read_tilde_fields (struct field_info *fip, char **pp, struct type *type,
                }
              /* Virtual function table field not found.  */
              complaint (&symfile_complaints,
-                        _("virtual function table pointer not found when defining class `%s'"),
+                        _("virtual function table pointer "
+                          "not found when defining class `%s'"),
                         TYPE_NAME (type));
              return 0;
            }
@@ -3187,7 +3311,7 @@ attach_fn_fields_to_type (struct field_info *fip, struct type *type)
        fip->fnlist != NULL;
        fip->fnlist = fip->fnlist->next)
     {
-      --n;                     /* Circumvent Sun3 compiler bug */
+      --n;                     /* Circumvent Sun3 compiler bug */
       TYPE_FN_FIELDLISTS (type)[n] = fip->fnlist->fn_fieldlist;
     }
   return 1;
@@ -3208,7 +3332,7 @@ attach_fields_to_type (struct field_info *fip, struct type *type,
   /* Count up the number of fields that we have, as well as taking note of
      whether or not there are any non-public fields, which requires us to
      allocate and build the private_field_bits and protected_field_bits
-     bitfields. */
+     bitfields.  */
 
   for (scan = fip->list; scan != NULL; scan = scan->next)
     {
@@ -3221,7 +3345,7 @@ attach_fields_to_type (struct field_info *fip, struct type *type,
 
   /* Now we know how many fields there are, and whether or not there are any
      non-public fields.  Record the field count, allocate space for the
-     array of fields, and create blank visibility bitfields if necessary. */
+     array of fields, and create blank visibility bitfields if necessary.  */
 
   TYPE_NFIELDS (type) = nfields;
   TYPE_FIELDS (type) = (struct field *)
@@ -3245,9 +3369,10 @@ attach_fields_to_type (struct field_info *fip, struct type *type,
       B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields);
     }
 
-  /* Copy the saved-up fields into the field vector.  Start from the head
-     of the list, adding to the tail of the field array, so that they end
-     up in the same order in the array in which they were added to the list. */
+  /* Copy the saved-up fields into the field vector.  Start from the
+     head of the list, adding to the tail of the field array, so that
+     they end up in the same order in the array in which they were
+     added to the list.  */
 
   while (nfields-- > 0)
     {
@@ -3272,7 +3397,8 @@ attach_fields_to_type (struct field_info *fip, struct type *type,
        default:
          /* Unknown visibility.  Complain and treat it as public.  */
          {
-           complaint (&symfile_complaints, _("Unknown visibility `%c' for field"),
+           complaint (&symfile_complaints,
+                      _("Unknown visibility `%c' for field"),
                       fip->list->visibility);
          }
          break;
@@ -3317,12 +3443,48 @@ complain_about_struct_wipeout (struct type *type)
             _("struct/union type gets multiply defined: %s%s"), kind, name);
 }
 
+/* Set the length for all variants of a same main_type, which are
+   connected in the closed chain.
+   
+   This is something that needs to be done when a type is defined *after*
+   some cross references to this type have already been read.  Consider
+   for instance the following scenario where we have the following two
+   stabs entries:
+
+        .stabs  "t:p(0,21)=*(0,22)=k(0,23)=xsdummy:",160,0,28,-24
+        .stabs  "dummy:T(0,23)=s16x:(0,1),0,3[...]"
+
+   A stubbed version of type dummy is created while processing the first
+   stabs entry.  The length of that type is initially set to zero, since
+   it is unknown at this point.  Also, a "constant" variation of type
+   "dummy" is created as well (this is the "(0,22)=k(0,23)" section of
+   the stabs line).
+
+   The second stabs entry allows us to replace the stubbed definition
+   with the real definition.  However, we still need to adjust the length
+   of the "constant" variation of that type, as its length was left
+   untouched during the main type replacement...  */
+
+static void
+set_length_in_type_chain (struct type *type)
+{
+  struct type *ntype = TYPE_CHAIN (type);
+
+  while (ntype != type)
+    {
+      if (TYPE_LENGTH(ntype) == 0)
+       TYPE_LENGTH (ntype) = TYPE_LENGTH (type);
+      else
+        complain_about_struct_wipeout (ntype);
+      ntype = TYPE_CHAIN (ntype);
+    }
+}
 
 /* Read the description of a structure (or union type) and return an object
    describing the type.
 
    PP points to a character pointer that points to the next unconsumed token
-   in the the stabs string.  For example, given stabs "A:T4=s4a:1,0,32;;",
+   in the stabs string.  For example, given stabs "A:T4=s4a:1,0,32;;",
    *PP will point to "4a:1,0,32;;".
 
    TYPE points to an incomplete type that needs to be filled in.
@@ -3372,15 +3534,17 @@ read_struct_type (char **pp, struct type *type, enum type_code type_code,
 
   {
     int nbits;
+
     TYPE_LENGTH (type) = read_huge_number (pp, 0, &nbits, 0);
     if (nbits != 0)
       return error_type (pp, objfile);
+    set_length_in_type_chain (type);
   }
 
   /* Now read the baseclasses, if any, read the regular C struct or C++
      class member fields, attach the fields to the type, read the C++
      member functions, attach them to the type, and then read any tilde
-     field (baseclass specifier for the class holding the main vtable). */
+     field (baseclass specifier for the class holding the main vtable).  */
 
   if (!read_baseclasses (&fi, pp, type, objfile)
       || !read_struct_fields (&fi, pp, type, objfile)
@@ -3523,7 +3687,7 @@ read_enum_type (char **pp, struct type *type,
        obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
       memset (sym, 0, sizeof (struct symbol));
       SYMBOL_SET_LINKAGE_NAME (sym, name);
-      SYMBOL_LANGUAGE (sym) = current_subfile->language;
+      SYMBOL_SET_LANGUAGE (sym, current_subfile->language);
       SYMBOL_CLASS (sym) = LOC_CONST;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
       SYMBOL_VALUE (sym) = n;
@@ -3539,6 +3703,7 @@ read_enum_type (char **pp, struct type *type,
   /* Now fill in the fields of the type-structure.  */
 
   TYPE_LENGTH (type) = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT;
+  set_length_in_type_chain (type);
   TYPE_CODE (type) = TYPE_CODE_ENUM;
   TYPE_STUB (type) = 0;
   if (unsigned_enum)
@@ -3560,9 +3725,11 @@ read_enum_type (char **pp, struct type *type,
     {
       int last = syms == osyms ? o_nsyms : 0;
       int j = syms->nsyms;
+
       for (; --j >= last; --n)
        {
          struct symbol *xsym = syms->symbol[j];
+
          SYMBOL_TYPE (xsym) = type;
          TYPE_FIELD_NAME (type, n) = SYMBOL_LINKAGE_NAME (xsym);
          TYPE_FIELD_BITPOS (type, n) = SYMBOL_VALUE (xsym);
@@ -3631,12 +3798,12 @@ read_sun_builtin_type (char **pp, int typenums[2], struct objfile *objfile)
   if (nbits != 0)
     return error_type (pp, objfile);
 
-  /* The second number is always 0, so ignore it too. */
+  /* The second number is always 0, so ignore it too.  */
   read_huge_number (pp, ';', &nbits, 0);
   if (nbits != 0)
     return error_type (pp, objfile);
 
-  /* The third number is the number of bits for this type. */
+  /* The third number is the number of bits for this type.  */
   type_bits = read_huge_number (pp, 0, &nbits, 0);
   if (nbits != 0)
     return error_type (pp, objfile);
@@ -3674,7 +3841,7 @@ read_sun_floating_type (char **pp, int typenums[2], struct objfile *objfile)
   if (nbits != 0)
     return error_type (pp, objfile);
 
-  /* The second number is the number of bytes occupied by this type */
+  /* The second number is the number of bytes occupied by this type */
   nbytes = read_huge_number (pp, ';', &nbits, 0);
   if (nbits != 0)
     return error_type (pp, objfile);
@@ -3747,12 +3914,14 @@ read_huge_number (char **pp, int end, int *bits, int twos_complement_bits)
 
       size_t len;
       char *p1 = p;
+
       while ((c = *p1) >= '0' && c < '8')
        p1++;
 
       len = p1 - p;
       if (len > twos_complement_bits / 3
-         || (twos_complement_bits % 3 == 0 && len == twos_complement_bits / 3))
+         || (twos_complement_bits % 3 == 0
+             && len == twos_complement_bits / 3))
        {
          /* Ok, we have enough characters for a signed value, check
             for signness by testing if the sign bit is set.  */
@@ -3780,6 +3949,7 @@ read_huge_number (char **pp, int end, int *bits, int twos_complement_bits)
              if (n == 0)
                {
                  long sn = c - '0' - ((2 * (c - '0')) | (2 << sign_bit));
+
                  n = -sn;
                }
               else
@@ -3792,14 +3962,14 @@ read_huge_number (char **pp, int end, int *bits, int twos_complement_bits)
             {
               /* unsigned representation */
               n *= radix;
-              n += c - '0';            /* FIXME this overflows anyway */
+              n += c - '0';            /* FIXME this overflows anyway */
             }
         }
       else
         overflow = 1;
 
       /* This depends on large values being output in octal, which is
-         what GCC does. */
+         what GCC does.  */
       if (radix == 8)
        {
          if (nbits == 0)
@@ -3919,7 +4089,7 @@ read_range_type (char **pp, int typenums[2], int type_size,
       int nbits = 0;
 
       /* If a type size attribute has been specified, the bounds of
-         the range should fit in this size. If the lower bounds needs
+         the range should fit in this size.  If the lower bounds needs
          more bits than the upper bound, then the type is signed.  */
       if (n2bits <= type_size && n3bits <= type_size)
         {
@@ -3971,7 +4141,7 @@ read_range_type (char **pp, int typenums[2], int type_size,
 
      Also note that for complexes, g77 sets n2 to the size of one of
      the member floats, not the whole complex beast.  My guess is that
-     this was to work well with pre-COMPLEX versions of gdb. */
+     this was to work well with pre-COMPLEX versions of gdb.  */
 
   if (n3 == 0 && n2 > 0)
     {
@@ -3982,6 +4152,7 @@ read_range_type (char **pp, int typenums[2], int type_size,
        {
          struct type *complex_type = 
            init_type (TYPE_CODE_COMPLEX, 2 * n2, 0, NULL, objfile);
+
          TYPE_TARGET_TYPE (complex_type) = float_type;
          return complex_type;
        }
@@ -3994,6 +4165,7 @@ read_range_type (char **pp, int typenums[2], int type_size,
   else if (n2 == 0 && n3 == -1)
     {
       int bits = type_size;
+
       if (bits <= 0)
        {
          /* We don't know its size.  It is unsigned int or unsigned
@@ -4062,9 +4234,9 @@ read_range_type (char **pp, int typenums[2], int type_size,
 handle_true_range:
 
   if (self_subrange)
-    index_type = builtin_type (gdbarch)->builtin_int;
+    index_type = objfile_type (objfile)->builtin_int;
   else
-    index_type = *dbx_lookup_type (rangenums);
+    index_type = *dbx_lookup_type (rangenums, objfile);
   if (index_type == NULL)
     {
       /* Does this actually ever happen?  Is that why we are worrying
@@ -4073,7 +4245,7 @@ handle_true_range:
       complaint (&symfile_complaints,
                 _("base type %d of range type is not defined"), rangenums[1]);
 
-      index_type = builtin_type (gdbarch)->builtin_int;
+      index_type = objfile_type (objfile)->builtin_int;
     }
 
   result_type = create_range_type ((struct type *) NULL, index_type, n2, n3);
@@ -4089,7 +4261,7 @@ read_args (char **pp, int end, struct objfile *objfile, int *nargsp,
           int *varargsp)
 {
   /* FIXME!  Remove this arbitrary limit!  */
-  struct type *types[1024];    /* allow for fns of 1023 parameters */
+  struct type *types[1024];    /* Allow for fns of 1023 parameters.  */
   int n = 0, i;
   struct field *rval;
 
@@ -4102,9 +4274,19 @@ read_args (char **pp, int end, struct objfile *objfile, int *nargsp,
       STABS_CONTINUE (pp, objfile);
       types[n++] = read_type (pp, objfile);
     }
-  (*pp)++;                     /* get past `end' (the ':' character) */
+  (*pp)++;                     /* get past `end' (the ':' character) */
 
-  if (TYPE_CODE (types[n - 1]) != TYPE_CODE_VOID)
+  if (n == 0)
+    {
+      /* We should read at least the THIS parameter here.  Some broken stabs
+        output contained `(0,41),(0,42)=@s8;-16;,(0,43),(0,1);' where should
+        have been present ";-16,(0,43)" reference instead.  This way the
+        excessive ";" marker prematurely stops the parameters parsing.  */
+
+      complaint (&symfile_complaints, _("Invalid (empty) method arguments"));
+      *varargsp = 0;
+    }
+  else if (TYPE_CODE (types[n - 1]) != TYPE_CODE_VOID)
     *varargsp = 1;
   else
     {
@@ -4178,7 +4360,7 @@ common_block_end (struct objfile *objfile)
   sym = (struct symbol *)
     obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
   memset (sym, 0, sizeof (struct symbol));
-  /* Note: common_block_name already saved on objfile_obstack */
+  /* Note: common_block_name already saved on objfile_obstack */
   SYMBOL_SET_LINKAGE_NAME (sym, common_block_name);
   SYMBOL_CLASS (sym) = LOC_BLOCK;
 
@@ -4220,9 +4402,11 @@ static void
 fix_common_block (struct symbol *sym, int valu)
 {
   struct pending *next = (struct pending *) SYMBOL_TYPE (sym);
+
   for (; next; next = next->next)
     {
       int j;
+
       for (j = next->nsyms - 1; j >= 0; j--)
        SYMBOL_VALUE_ADDRESS (next->symbol[j]) += valu;
     }
@@ -4293,7 +4477,7 @@ add_undefined_type (struct type *type, int typenums[2])
 /* Try to fix all undefined types pushed on the UNDEF_TYPES vector.  */
 
 static void
-cleanup_undefined_types_noname (void)
+cleanup_undefined_types_noname (struct objfile *objfile)
 {
   int i;
 
@@ -4302,7 +4486,7 @@ cleanup_undefined_types_noname (void)
       struct nat nat = noname_undefs[i];
       struct type **type;
 
-      type = dbx_lookup_type (nat.typenums);
+      type = dbx_lookup_type (nat.typenums, objfile);
       if (nat.type != *type && TYPE_CODE (*type) != TYPE_CODE_UNDEF)
         {
           /* The instance flags of the undefined type are still unset,
@@ -4368,7 +4552,7 @@ cleanup_undefined_types_1 (void)
              {
                struct pending *ppt;
                int i;
-               /* Name of the type, without "struct" or "union" */
+               /* Name of the type, without "struct" or "union" */
                char *typename = TYPE_TAG_NAME (*type);
 
                if (typename == NULL)
@@ -4415,10 +4599,10 @@ cleanup_undefined_types_1 (void)
    this unit.  */
 
 void
-cleanup_undefined_types (void)
+cleanup_undefined_types (struct objfile *objfile)
 {
   cleanup_undefined_types_1 ();
-  cleanup_undefined_types_noname ();
+  cleanup_undefined_types_noname (objfile);
 }
 
 /* Scan through all of the global symbols defined in the object file,
@@ -4473,7 +4657,7 @@ scan_file_globals (struct objfile *objfile)
          prev = NULL;
 
          /* Get the hash index and check all the symbols
-            under that hash index. */
+            under that hash index.  */
 
          hash = hashname (SYMBOL_LINKAGE_NAME (msymbol));
 
@@ -4483,7 +4667,7 @@ scan_file_globals (struct objfile *objfile)
                          SYMBOL_LINKAGE_NAME (sym)) == 0)
                {
                  /* Splice this symbol out of the hash chain and
-                    assign the value we have to it. */
+                    assign the value we have to it.  */
                  if (prev)
                    {
                      SYMBOL_VALUE_CHAIN (prev) = SYMBOL_VALUE_CHAIN (sym);
@@ -4551,7 +4735,8 @@ scan_file_globals (struct objfile *objfile)
            SYMBOL_CLASS (prev) = LOC_UNRESOLVED;
          else
            complaint (&symfile_complaints,
-                      _("%s: common block `%s' from global_sym_chain unresolved"),
+                      _("%s: common block `%s' from "
+                        "global_sym_chain unresolved"),
                       objfile->name, SYMBOL_PRINT_NAME (prev));
        }
     }
@@ -4579,7 +4764,7 @@ stabsread_new_init (void)
 }
 
 /* Initialize anything that needs initializing at the same time as
-   start_symtab() is called. */
+   start_symtab() is called.  */
 
 void
 start_stabs (void)
@@ -4594,7 +4779,7 @@ start_stabs (void)
   common_block_name = NULL;
 }
 
-/* Call after end_symtab() */
+/* Call after end_symtab() */
 
 void
 end_stabs (void)
@@ -4625,6 +4810,7 @@ static char *
 find_name_end (char *name)
 {
   char *s = name;
+
   if (s[0] == '-' || *s == '+')
     {
       /* Must be an ObjC method symbol.  */
@@ -4645,11 +4831,13 @@ find_name_end (char *name)
     }
 }
 
-/* Initializer for this module */
+/* Initializer for this module */
 
 void
 _initialize_stabsread (void)
 {
+  rs6000_builtin_type_data = register_objfile_data ();
+
   undef_types_allocated = 20;
   undef_types_length = 0;
   undef_types = (struct type **)