Fix foreach_with_prefix regression
[deliverable/binutils-gdb.git] / gdb / stabsread.c
index 14122021c63863ad3b096a0c823f3cfd0e21d161..a3fe6c99ca3529bed7b3fb239b0c4b33c6445f40 100644 (file)
@@ -1,6 +1,6 @@
 /* Support routines for decoding "stabs" debugging information format.
 
-   Copyright (C) 1986-2017 Free Software Foundation, Inc.
+   Copyright (C) 1986-2019 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #include "libaout.h"
 #include "aout/aout64.h"
 #include "gdb-stabs.h"
-#include "buildsym.h"
+#include "buildsym-legacy.h"
 #include "complaints.h"
 #include "demangle.h"
 #include "gdb-demangle.h"
 #include "language.h"
-#include "doublest.h"
+#include "target-float.h"
 #include "cp-abi.h"
 #include "cp-support.h"
 #include <ctype.h>
 
-/* Ask stabsread.h to define the vars it normally declares `extern'.  */
-#define        EXTERN
-/**/
-#include "stabsread.h"         /* Our own declarations */
-#undef EXTERN
+#include "stabsread.h"
 
-extern void _initialize_stabsread (void);
+/* See stabsread.h for these globals.  */
+unsigned int symnum;
+const char *(*next_symbol_text_func) (struct objfile *);
+unsigned char processing_gcc_compilation;
+int within_function;
+struct symbol *global_sym_chain[HASHSIZE];
+struct pending_stabs *global_stabs;
+int previous_stab_code;
+int *this_object_header_files;
+int n_this_object_header_files;
+int n_allocated_this_object_header_files;
 
 struct nextfield
 {
@@ -78,21 +84,23 @@ struct next_fnfieldlist
    This is part of some reorganization of low level C++ support and is
    expected to eventually go away...  (FIXME) */
 
-struct field_info
+struct stab_field_info
   {
-    struct nextfield *list;
-    struct next_fnfieldlist *fnlist;
+    struct nextfield *list = nullptr;
+    struct next_fnfieldlist *fnlist = nullptr;
+
+    auto_obstack obstack;
   };
 
 static void
-read_one_struct_field (struct field_info *, char **, char *,
+read_one_struct_field (struct stab_field_info *, const char **, const char *,
                       struct type *, struct objfile *);
 
 static struct type *dbx_alloc_type (int[2], struct objfile *);
 
-static long read_huge_number (char **, int, int *, int);
+static long read_huge_number (const char **, int, int *, int);
 
-static struct type *error_type (char **, struct objfile *);
+static struct type *error_type (const char **, struct objfile *);
 
 static void
 patch_block_stabs (struct pending *, struct pending_stabs *,
@@ -100,60 +108,63 @@ patch_block_stabs (struct pending *, struct pending_stabs *,
 
 static void fix_common_block (struct symbol *, CORE_ADDR);
 
-static int read_type_number (char **, int *);
+static int read_type_number (const char **, int *);
 
-static struct type *read_type (char **, struct objfile *);
+static struct type *read_type (const char **, struct objfile *);
 
-static struct type *read_range_type (char **, int[2], int, struct objfile *);
+static struct type *read_range_type (const char **, int[2],
+                                    int, struct objfile *);
 
-static struct type *read_sun_builtin_type (char **, int[2], struct objfile *);
+static struct type *read_sun_builtin_type (const char **,
+                                          int[2], struct objfile *);
 
-static struct type *read_sun_floating_type (char **, int[2],
+static struct type *read_sun_floating_type (const char **, int[2],
                                            struct objfile *);
 
-static struct type *read_enum_type (char **, struct type *, struct objfile *);
+static struct type *read_enum_type (const char **, struct type *, struct objfile *);
 
 static struct type *rs6000_builtin_type (int, struct objfile *);
 
 static int
-read_member_functions (struct field_info *, char **, struct type *,
+read_member_functions (struct stab_field_info *, const char **, struct type *,
                       struct objfile *);
 
 static int
-read_struct_fields (struct field_info *, char **, struct type *,
+read_struct_fields (struct stab_field_info *, const char **, struct type *,
                    struct objfile *);
 
 static int
-read_baseclasses (struct field_info *, char **, struct type *,
+read_baseclasses (struct stab_field_info *, const char **, struct type *,
                  struct objfile *);
 
 static int
-read_tilde_fields (struct field_info *, char **, struct type *,
+read_tilde_fields (struct stab_field_info *, const char **, struct type *,
                   struct objfile *);
 
-static int attach_fn_fields_to_type (struct field_info *, struct type *);
+static int attach_fn_fields_to_type (struct stab_field_info *, struct type *);
 
-static int attach_fields_to_type (struct field_info *, struct type *,
+static int attach_fields_to_type (struct stab_field_info *, struct type *,
                                  struct objfile *);
 
-static struct type *read_struct_type (char **, struct type *,
+static struct type *read_struct_type (const char **, struct type *,
                                       enum type_code,
                                      struct objfile *);
 
-static struct type *read_array_type (char **, struct type *,
+static struct type *read_array_type (const char **, struct type *,
                                     struct objfile *);
 
-static struct field *read_args (char **, int, struct objfile *, int *, int *);
+static struct field *read_args (const char **, int, struct objfile *,
+                               int *, int *);
 
 static void add_undefined_type (struct type *, int[2]);
 
 static int
-read_cpp_abbrev (struct field_info *, char **, struct type *,
+read_cpp_abbrev (struct stab_field_info *, const char **, struct type *,
                 struct objfile *);
 
-static char *find_name_end (char *name);
+static const char *find_name_end (const char *name);
 
-static int process_reference (char **string);
+static int process_reference (const char **string);
 
 void stabsread_clear_cache (void);
 
@@ -163,21 +174,20 @@ static const char vb_name[] = "_vb$";
 static void
 invalid_cpp_abbrev_complaint (const char *arg1)
 {
-  complaint (&symfile_complaints, _("invalid C++ abbreviation `%s'"), arg1);
+  complaint (_("invalid C++ abbreviation `%s'"), arg1);
 }
 
 static void
 reg_value_complaint (int regnum, int num_regs, const char *sym)
 {
-  complaint (&symfile_complaints,
-            _("bad register number %d (max %d) in symbol %s"),
+  complaint (_("bad register number %d (max %d) in symbol %s"),
              regnum, num_regs - 1, sym);
 }
 
 static void
 stabs_general_complaint (const char *arg1)
 {
-  complaint (&symfile_complaints, "%s", arg1);
+  complaint ("%s", arg1);
 }
 
 /* Make a list of forward references which haven't been defined.  */
@@ -248,8 +258,7 @@ dbx_lookup_type (int typenums[2], struct objfile *objfile)
 
   if (filenum < 0 || filenum >= n_this_object_header_files)
     {
-      complaint (&symfile_complaints,
-                _("Invalid symbol data: type number "
+      complaint (_("Invalid symbol data: type number "
                   "(%d,%d) out of range at symtab pos %d."),
                 filenum, index, symnum);
       goto error_return;
@@ -367,7 +376,7 @@ dbx_init_float_type (struct objfile *objfile, int bits)
   if (format)
     type = init_float_type (objfile, bits, NULL, format);
   else
-    type = init_type (objfile, TYPE_CODE_ERROR, bits / TARGET_CHAR_BIT, NULL);
+    type = init_type (objfile, TYPE_CODE_ERROR, bits, NULL);
 
   return type;
 }
@@ -381,7 +390,7 @@ patch_block_stabs (struct pending *symbols, struct pending_stabs *stabs,
 {
   int ii;
   char *name;
-  char *pp;
+  const char *pp;
   struct symbol *sym;
 
   if (stabs)
@@ -432,7 +441,7 @@ patch_block_stabs (struct pending *symbols, struct pending_stabs *stabs,
                {
                  SYMBOL_TYPE (sym) = read_type (&pp, objfile);
                }
-             add_symbol_to_list (sym, &global_symbols);
+             add_symbol_to_list (sym, get_global_symbols ());
            }
          else
            {
@@ -461,7 +470,7 @@ patch_block_stabs (struct pending *symbols, struct pending_stabs *stabs,
    Returns 0 for success, -1 for error.  */
 
 static int
-read_type_number (char **pp, int *typenums)
+read_type_number (const char **pp, int *typenums)
 {
   int nbits;
 
@@ -496,7 +505,7 @@ read_type_number (char **pp, int *typenums)
 
 struct ref_map
 {
-  char *stabs;
+  const char *stabs;
   CORE_ADDR value;
   struct symbol *sym;
 };
@@ -528,7 +537,7 @@ stabsread_clear_cache (void)
    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)
+ref_add (int refnum, struct symbol *sym, const char *stabs, CORE_ADDR value)
 {
   if (ref_count == 0)
     ref_chunk = 0;
@@ -563,9 +572,9 @@ ref_search (int refnum)
    reference number.  Move STRING beyond the reference id.  */
 
 static int
-process_reference (char **string)
+process_reference (const char **string)
 {
-  char *p;
+  const char *p;
   int refnum = 0;
 
   if (**string != '#')
@@ -588,9 +597,9 @@ process_reference (char **string)
    definition for later use.  Return the reference number.  */
 
 int
-symbol_reference_defined (char **string)
+symbol_reference_defined (const char **string)
 {
-  char *p = *string;
+  const char *p = *string;
   int refnum = 0;
 
   refnum = process_reference (&p);
@@ -616,13 +625,9 @@ stab_reg_to_regnum (struct symbol *sym, struct gdbarch *gdbarch)
 {
   int regno = gdbarch_stab_reg_to_regnum (gdbarch, SYMBOL_VALUE (sym));
 
-  if (regno < 0
-      || regno >= (gdbarch_num_regs (gdbarch)
-                  + gdbarch_num_pseudo_regs (gdbarch)))
+  if (regno < 0 || regno >= gdbarch_num_cooked_regs (gdbarch))
     {
-      reg_value_complaint (regno,
-                          gdbarch_num_regs (gdbarch)
-                            + gdbarch_num_pseudo_regs (gdbarch),
+      reg_value_complaint (regno, gdbarch_num_cooked_regs (gdbarch),
                           SYMBOL_PRINT_NAME (sym));
 
       regno = gdbarch_sp_regnum (gdbarch); /* Known safe, though useless.  */
@@ -641,12 +646,12 @@ static int stab_register_index;
 static int stab_regparm_index;
 
 struct symbol *
-define_symbol (CORE_ADDR valu, char *string, int desc, int type,
+define_symbol (CORE_ADDR valu, const char *string, int desc, int type,
               struct objfile *objfile)
 {
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   struct symbol *sym;
-  char *p = (char *) find_name_end (string);
+  const char *p = find_name_end (string);
   int deftype;
   int synonym = 0;
   int i;
@@ -672,7 +677,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       p = strchr (p, ':');
       if (p == NULL)
        {
-         complaint (&symfile_complaints, 
+         complaint (
                     _("Bad stabs string '%s'"), string);
          return NULL;
        }
@@ -695,7 +700,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_LINE (sym) = 0;   /* unknown */
     }
 
-  SYMBOL_SET_LANGUAGE (sym, current_subfile->language,
+  SYMBOL_SET_LANGUAGE (sym, get_current_subfile ()->language,
                       &objfile->objfile_obstack);
 
   if (is_cplus_marker (string[0]))
@@ -722,10 +727,10 @@ 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'"),
+         complaint (_("Unknown C++ symbol name `%s'"),
                     string);
          goto normal;          /* Do *something* with it.  */
        }
@@ -753,7 +758,8 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
        SYMBOL_SET_NAMES (sym, string, p - string, 1, objfile);
 
       if (SYMBOL_LANGUAGE (sym) == language_cplus)
-       cp_scan_for_anonymous_namespaces (sym, objfile);
+       cp_scan_for_anonymous_namespaces (get_buildsym_compunit (), sym,
+                                         objfile);
 
     }
   p++;
@@ -789,7 +795,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
          SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
          SYMBOL_TYPE (sym) = error_type (&p, objfile);
          SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-         add_symbol_to_list (sym, &file_symbols);
+         add_symbol_to_list (sym, get_file_symbols ());
          return sym;
        }
       ++p;
@@ -797,19 +803,15 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
        {
        case 'r':
          {
-           double d = atof (p);
            gdb_byte *dbl_valu;
            struct type *dbl_type;
 
-           /* FIXME-if-picky-about-floating-accuracy: Should be using
-              target arithmetic to get the value.  real.c in GCC
-              probably has the necessary code.  */
-
            dbl_type = objfile_type (objfile)->builtin_double;
            dbl_valu
              = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack,
                                            TYPE_LENGTH (dbl_type));
-           store_typed_floating (dbl_valu, dbl_type, d);
+
+           target_float_from_string (dbl_valu, dbl_type, std::string (p));
 
            SYMBOL_TYPE (sym) = dbl_type;
            SYMBOL_VALUE_BYTES (sym) = dbl_valu;
@@ -852,7 +854,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
                SYMBOL_TYPE (sym) = error_type (&p, objfile);
                SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-               add_symbol_to_list (sym, &file_symbols);
+               add_symbol_to_list (sym, get_file_symbols ());
                return sym;
              }
 
@@ -877,7 +879,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
                SYMBOL_TYPE (sym) = error_type (&p, objfile);
                SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-               add_symbol_to_list (sym, &file_symbols);
+               add_symbol_to_list (sym, get_file_symbols ());
                return sym;
              }
 
@@ -932,7 +934,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
          }
        }
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      add_symbol_to_list (sym, &file_symbols);
+      add_symbol_to_list (sym, get_file_symbols ());
       return sym;
 
     case 'C':
@@ -941,7 +943,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_ACLASS_INDEX (sym) = LOC_LABEL;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
       SYMBOL_VALUE_ADDRESS (sym) = valu;
-      add_symbol_to_list (sym, &local_symbols);
+      add_symbol_to_list (sym, get_local_symbols ());
       break;
 
     case 'f':
@@ -949,7 +951,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
       SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      add_symbol_to_list (sym, &file_symbols);
+      add_symbol_to_list (sym, get_file_symbols ());
       /* fall into process_function_types.  */
 
     process_function_types:
@@ -976,7 +978,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
          struct type *ftype = SYMBOL_TYPE (sym);
          int nsemi = 0;
          int nparams = 0;
-         char *p1 = p;
+         const char *p1 = p;
 
          /* Obtain a worst case guess for the number of arguments
             by counting the semicolons.  */
@@ -1020,7 +1022,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_TYPE (sym) = read_type (&p, objfile);
       SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      add_symbol_to_list (sym, &global_symbols);
+      add_symbol_to_list (sym, get_global_symbols ());
       goto process_function_types;
 
     case 'G':
@@ -1041,7 +1043,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
          SYMBOL_VALUE_CHAIN (sym) = global_sym_chain[i];
          global_sym_chain[i] = sym;
        }
-      add_symbol_to_list (sym, &global_symbols);
+      add_symbol_to_list (sym, get_global_symbols ());
       break;
 
       /* This case is faked by a conditional above,
@@ -1053,7 +1055,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
       SYMBOL_VALUE (sym) = valu;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      add_symbol_to_list (sym, &local_symbols);
+      add_symbol_to_list (sym, get_local_symbols ());
       break;
 
     case 'p':
@@ -1074,7 +1076,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_VALUE (sym) = valu;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
       SYMBOL_IS_ARGUMENT (sym) = 1;
-      add_symbol_to_list (sym, &local_symbols);
+      add_symbol_to_list (sym, get_local_symbols ());
 
       if (gdbarch_byte_order (gdbarch) != BFD_ENDIAN_BIG)
        {
@@ -1103,6 +1105,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
            }
          break;
        }
+      /* Fall through.  */
 
     case 'P':
       /* acc seems to use P to declare the prototypes of functions that
@@ -1122,7 +1125,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_IS_ARGUMENT (sym) = 1;
       SYMBOL_VALUE (sym) = valu;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      add_symbol_to_list (sym, &local_symbols);
+      add_symbol_to_list (sym, get_local_symbols ());
       break;
 
     case 'r':
@@ -1153,6 +1156,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
             but this case is considered pathological and causes a warning
             from a decent compiler.  */
 
+         struct pending *local_symbols = *get_local_symbols ();
          if (local_symbols
              && local_symbols->nsyms > 0
              && gdbarch_stabs_argument_has_addr (gdbarch, SYMBOL_TYPE (sym)))
@@ -1174,10 +1178,10 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                  break;
                }
            }
-         add_symbol_to_list (sym, &local_symbols);
+         add_symbol_to_list (sym, get_local_symbols ());
        }
       else
-       add_symbol_to_list (sym, &file_symbols);
+       add_symbol_to_list (sym, get_file_symbols ());
       break;
 
     case 'S':
@@ -1204,7 +1208,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
            }
        }
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      add_symbol_to_list (sym, &file_symbols);
+      add_symbol_to_list (sym, get_file_symbols ());
       break;
 
     case 't':
@@ -1249,7 +1253,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
            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) =
-                 type_name_no_tag (TYPE_BASECLASS (SYMBOL_TYPE (sym), j));
+                 TYPE_NAME (TYPE_BASECLASS (SYMBOL_TYPE (sym), j));
          }
 
       if (TYPE_NAME (SYMBOL_TYPE (sym)) == NULL)
@@ -1299,7 +1303,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                 */
 
              /* Pascal accepts names for pointer types.  */
-             if (current_subfile->language == language_pascal)
+             if (get_current_subfile ()->language == language_pascal)
                {
                  TYPE_NAME (SYMBOL_TYPE (sym)) = SYMBOL_LINKAGE_NAME (sym);
                }
@@ -1308,7 +1312,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
            TYPE_NAME (SYMBOL_TYPE (sym)) = SYMBOL_LINKAGE_NAME (sym);
        }
 
-      add_symbol_to_list (sym, &file_symbols);
+      add_symbol_to_list (sym, get_file_symbols ());
 
       if (synonym)
         {
@@ -1324,7 +1328,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
              = obconcat (&objfile->objfile_obstack,
                          SYMBOL_LINKAGE_NAME (sym),
                          (char *) NULL);
-          add_symbol_to_list (struct_sym, &file_symbols);
+          add_symbol_to_list (struct_sym, get_file_symbols ());
         }
       
       break;
@@ -1347,12 +1351,12 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
       SYMBOL_VALUE (sym) = valu;
       SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
-      if (TYPE_TAG_NAME (SYMBOL_TYPE (sym)) == 0)
-       TYPE_TAG_NAME (SYMBOL_TYPE (sym))
+      if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
+       TYPE_NAME (SYMBOL_TYPE (sym))
          = obconcat (&objfile->objfile_obstack,
                      SYMBOL_LINKAGE_NAME (sym),
                      (char *) NULL);
-      add_symbol_to_list (sym, &file_symbols);
+      add_symbol_to_list (sym, get_file_symbols ());
 
       if (synonym)
        {
@@ -1368,7 +1372,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
              = obconcat (&objfile->objfile_obstack,
                          SYMBOL_LINKAGE_NAME (sym),
                          (char *) NULL);
-         add_symbol_to_list (typedef_sym, &file_symbols);
+         add_symbol_to_list (typedef_sym, get_file_symbols ());
        }
       break;
 
@@ -1396,7 +1400,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
            }
        }
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-       add_symbol_to_list (sym, &local_symbols);
+       add_symbol_to_list (sym, get_local_symbols ());
       break;
 
     case 'v':
@@ -1406,7 +1410,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_IS_ARGUMENT (sym) = 1;
       SYMBOL_VALUE (sym) = valu;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      add_symbol_to_list (sym, &local_symbols);
+      add_symbol_to_list (sym, get_local_symbols ());
       break;
 
     case 'a':
@@ -1416,7 +1420,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_IS_ARGUMENT (sym) = 1;
       SYMBOL_VALUE (sym) = valu;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      add_symbol_to_list (sym, &local_symbols);
+      add_symbol_to_list (sym, get_local_symbols ());
       break;
 
     case 'X':
@@ -1428,7 +1432,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_ACLASS_INDEX (sym) = LOC_LOCAL;
       SYMBOL_VALUE (sym) = valu;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      add_symbol_to_list (sym, &local_symbols);
+      add_symbol_to_list (sym, get_local_symbols ());
       break;
 
     default:
@@ -1436,7 +1440,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
       SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
       SYMBOL_VALUE (sym) = 0;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
-      add_symbol_to_list (sym, &file_symbols);
+      add_symbol_to_list (sym, get_file_symbols ());
       break;
     }
 
@@ -1490,10 +1494,9 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
    debugger will be able to read the new symbol tables.  */
 
 static struct type *
-error_type (char **pp, struct objfile *objfile)
+error_type (const char **pp, struct objfile *objfile)
 {
-  complaint (&symfile_complaints,
-            _("couldn't parse type; debugger out of date?"));
+  complaint (_("couldn't parse type; debugger out of date?"));
   while (1)
     {
       /* Skip to end of symbol.  */
@@ -1523,7 +1526,7 @@ error_type (char **pp, struct objfile *objfile)
    deciding whether to call read_type.  */
 
 static struct type *
-read_type (char **pp, struct objfile *objfile)
+read_type (const char **pp, struct objfile *objfile)
 {
   struct type *type = 0;
   struct type *type1;
@@ -1595,7 +1598,7 @@ again:
        char *type_name;
 
        {
-         char *from, *to, *p, *q1, *q2;
+         const char *from, *p, *q1, *q2;
 
          /* Set the type code according to the following letter.  */
          switch ((*pp)[0])
@@ -1613,8 +1616,7 @@ again:
              {
                /* Complain and keep going, so compilers can invent new
                   cross-reference types.  */
-               complaint (&symfile_complaints,
-                          _("Unrecognized cross-reference type `%c'"),
+               complaint (_("Unrecognized cross-reference type `%c'"),
                           (*pp)[0]);
                code = TYPE_CODE_STRUCT;
                break;
@@ -1643,7 +1645,7 @@ again:
                return error_type (pp, objfile);
            }
          type_name = NULL;
-         if (current_subfile->language == language_cplus)
+         if (get_current_subfile ()->language == language_cplus)
            {
              char *name = (char *) alloca (p - *pp + 1);
 
@@ -1661,7 +1663,7 @@ again:
            }
          if (type_name == NULL)
            {
-             to = type_name = (char *)
+             char *to = type_name = (char *)
                obstack_alloc (&objfile->objfile_obstack, p - *pp + 1);
 
              /* Copy the name.  */
@@ -1680,7 +1682,7 @@ again:
            type, rather than allocating a new one.  This saves some
            memory.  */
 
-       for (ppt = file_symbols; ppt; ppt = ppt->next)
+       for (ppt = *get_file_symbols (); ppt; ppt = ppt->next)
          for (i = 0; i < ppt->nsyms; i++)
            {
              struct symbol *sym = ppt->symbol[i];
@@ -1705,7 +1707,7 @@ again:
           type.  */
        type = dbx_alloc_type (typenums, objfile);
        TYPE_CODE (type) = code;
-       TYPE_TAG_NAME (type) = type_name;
+       TYPE_NAME (type) = type_name;
        INIT_CPLUS_SPECIFIC (type);
        TYPE_STUB (type) = 1;
 
@@ -1770,7 +1772,6 @@ again:
                copies of a type otherwise.  */
            replace_type (type, xtype);
            TYPE_NAME (type) = NULL;
-           TYPE_TAG_NAME (type) = NULL;
          }
        else
          {
@@ -1844,8 +1845,7 @@ again:
           ++*pp;
         else
           {
-           complaint (&symfile_complaints,
-                      _("Prototyped function type didn't "
+           complaint (_("Prototyped function type didn't "
                         "end arguments with `#':\n%s"),
                       type_start);
           }
@@ -1910,7 +1910,7 @@ again:
       else
        /* type attribute */
        {
-         char *attr = *pp;
+         const char *attr = *pp;
 
          /* Skip to the semicolon.  */
          while (**pp != ';' && **pp != '\0')
@@ -1957,8 +1957,7 @@ again:
          (*pp)++;
          return_type = read_type (pp, objfile);
          if (*(*pp)++ != ';')
-           complaint (&symfile_complaints,
-                      _("invalid (minimal) member type "
+           complaint (_("invalid (minimal) member type "
                         "data format at symtab pos %d."),
                       symnum);
          type = allocate_stub_method (return_type);
@@ -2049,7 +2048,7 @@ again:
 
     case 'S':                  /* Set type */
       type1 = read_type (pp, objfile);
-      type = create_set_type ((struct type *) NULL, type1);
+      type = create_set_type (NULL, type1);
       if (typenums[0] != -1)
        *dbx_lookup_type (typenums, objfile) = type;
       break;
@@ -2076,13 +2075,14 @@ again:
 /* 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.  */
 
-static const struct objfile_data *rs6000_builtin_type_data;
+static const struct objfile_key<struct type *,
+                               gdb::noop_deleter<struct type *>>
+  rs6000_builtin_type_data;
 
 static struct type *
 rs6000_builtin_type (int typenum, struct objfile *objfile)
 {
-  struct type **negative_types
-    = (struct type **) objfile_data (objfile, rs6000_builtin_type_data);
+  struct type **negative_types = rs6000_builtin_type_data.get (objfile);
 
   /* We recognize types numbered from -NUMBER_RECOGNIZED to -1.  */
 #define NUMBER_RECOGNIZED 34
@@ -2090,7 +2090,7 @@ rs6000_builtin_type (int typenum, struct objfile *objfile)
 
   if (typenum >= 0 || typenum < -NUMBER_RECOGNIZED)
     {
-      complaint (&symfile_complaints, _("Unknown builtin type %d"), typenum);
+      complaint (_("Unknown builtin type %d"), typenum);
       return objfile_type (objfile)->builtin_error;
     }
 
@@ -2099,7 +2099,7 @@ rs6000_builtin_type (int typenum, struct objfile *objfile)
       /* 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);
+      rs6000_builtin_type_data.set (objfile, negative_types);
     }
 
   if (negative_types[-typenum] != NULL)
@@ -2152,7 +2152,7 @@ rs6000_builtin_type (int typenum, struct objfile *objfile)
       rettype = init_integer_type (objfile, 32, 1, "unsigned long");
       break;
     case 11:
-      rettype = init_type (objfile, TYPE_CODE_VOID, 1, "void");
+      rettype = init_type (objfile, TYPE_CODE_VOID, TARGET_CHAR_BIT, "void");
       break;
     case 12:
       /* IEEE single precision (32 bit).  */
@@ -2256,8 +2256,7 @@ stabs_method_name_from_physname (const char *physname)
 
   if (method_name == NULL)
     {
-      complaint (&symfile_complaints,
-                _("Method has bad physname %s\n"), physname);
+      complaint (_("Method has bad physname %s\n"), physname);
       return NULL;
     }
 
@@ -2280,8 +2279,8 @@ stabs_method_name_from_physname (const char *physname)
    Returns 1 for success, 0 for failure.  */
 
 static int
-read_member_functions (struct field_info *fip, char **pp, struct type *type,
-                      struct objfile *objfile)
+read_member_functions (struct stab_field_info *fip, const char **pp,
+                      struct type *type, struct objfile *objfile)
 {
   int nfn_fields = 0;
   int length = 0;
@@ -2296,7 +2295,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
   struct next_fnfieldlist *new_fnlist;
   struct next_fnfield *new_sublist;
   char *main_fn_name;
-  char *p;
+  const char *p;
 
   /* Process each list until we find something that is not a member function
      or find the end of the functions.  */
@@ -2320,8 +2319,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
       look_ahead_type = NULL;
       length = 0;
 
-      new_fnlist = XCNEW (struct next_fnfieldlist);
-      make_cleanup (xfree, new_fnlist);
+      new_fnlist = OBSTACK_ZALLOC (&fip->obstack, struct next_fnfieldlist);
 
       if ((*pp)[0] == 'o' && (*pp)[1] == 'p' && is_cplus_marker ((*pp)[2]))
        {
@@ -2360,8 +2358,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
 
       do
        {
-         new_sublist = XCNEW (struct next_fnfield);
-         make_cleanup (xfree, new_sublist);
+         new_sublist = OBSTACK_ZALLOC (&fip->obstack, struct next_fnfield);
 
          /* Check for and handle cretinous dbx symbol name continuation!  */
          if (look_ahead_type == NULL)
@@ -2448,8 +2445,7 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
            case '.':
              break;
            default:
-             complaint (&symfile_complaints,
-                        _("const/volatile indicator missing, got '%c'"),
+             complaint (_("const/volatile indicator missing, got '%c'"),
                         **pp);
              break;
            }
@@ -2532,10 +2528,10 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
 
            default:
              /* error */
-             complaint (&symfile_complaints,
-                        _("member function type missing, got '%c'"),
+             complaint (_("member function type missing, got '%c'"),
                         (*pp)[-1]);
-             /* Fall through into normal member function.  */
+             /* Normal member function.  */
+             /* Fall through.  */
 
            case '.':
              /* normal member function.  */
@@ -2564,7 +2560,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
        }
       else
        {
-         int has_stub = 0;
          int has_destructor = 0, has_other = 0;
          int is_v3 = 0;
          struct next_fnfield *tmp_sublist;
@@ -2628,8 +2623,6 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
          tmp_sublist = sublist;
          while (tmp_sublist != NULL)
            {
-             if (tmp_sublist->fn_field.is_stub)
-               has_stub = 1;
              if (tmp_sublist->fn_field.physname[0] == '_'
                  && tmp_sublist->fn_field.physname[1] == 'Z')
                is_v3 = 1;
@@ -2649,8 +2642,8 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
 
              /* Create a new fn_fieldlist for the destructors.  */
 
-             destr_fnlist = XCNEW (struct next_fnfieldlist);
-             make_cleanup (xfree, destr_fnlist);
+             destr_fnlist = OBSTACK_ZALLOC (&fip->obstack,
+                                            struct next_fnfieldlist);
 
              destr_fnlist->fn_fieldlist.name
                = obconcat (&objfile->objfile_obstack, "~",
@@ -2716,29 +2709,9 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
                          "~", main_fn_name, (char *)NULL);
              xfree (main_fn_name);
            }
-         else if (!has_stub)
-           {
-             char dem_opname[256];
-             int ret;
-
-             ret = cplus_demangle_opname (new_fnlist->fn_fieldlist.name,
-                                             dem_opname, DMGL_ANSI);
-             if (!ret)
-               ret = cplus_demangle_opname (new_fnlist->fn_fieldlist.name,
-                                            dem_opname, 0);
-             if (ret)
-               new_fnlist->fn_fieldlist.name
-                 = ((const char *)
-                    obstack_copy0 (&objfile->objfile_obstack, dem_opname,
-                                   strlen (dem_opname)));
-             xfree (main_fn_name);
-           }
 
-         new_fnlist->fn_fieldlist.fn_fields = (struct fn_field *)
-           obstack_alloc (&objfile->objfile_obstack,
-                          sizeof (struct fn_field) * length);
-         memset (new_fnlist->fn_fieldlist.fn_fields, 0,
-                 sizeof (struct fn_field) * length);
+         new_fnlist->fn_fieldlist.fn_fields
+           = OBSTACK_CALLOC (&objfile->objfile_obstack, length, fn_field);
          for (i = length; (i--, sublist); sublist = sublist->next)
            {
              new_fnlist->fn_fieldlist.fn_fields[i] = sublist->fn_field;
@@ -2770,10 +2743,10 @@ read_member_functions (struct field_info *fip, char **pp, struct type *type,
    keep parsing and it's time for error_type().  */
 
 static int
-read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
-                struct objfile *objfile)
+read_cpp_abbrev (struct stab_field_info *fip, const char **pp,
+                struct type *type, struct objfile *objfile)
 {
-  char *p;
+  const char *p;
   const char *name;
   char cpp_abbrev;
   struct type *context;
@@ -2796,7 +2769,7 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
       switch (cpp_abbrev)
        {
        case 'f':               /* $vf -- a virtual function table pointer */
-         name = type_name_no_tag (context);
+         name = TYPE_NAME (context);
          if (name == NULL)
            {
              name = "";
@@ -2806,11 +2779,10 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
          break;
 
        case 'b':               /* $vb -- a virtual bsomethingorother */
-         name = type_name_no_tag (context);
+         name = TYPE_NAME (context);
          if (name == NULL)
            {
-             complaint (&symfile_complaints,
-                        _("C++ abbreviated type name "
+             complaint (_("C++ abbreviated type name "
                           "unknown at symtab pos %d"),
                         symnum);
              name = "FOO";
@@ -2866,8 +2838,9 @@ read_cpp_abbrev (struct field_info *fip, char **pp, struct type *type,
 }
 
 static void
-read_one_struct_field (struct field_info *fip, char **pp, char *p,
-                      struct type *type, struct objfile *objfile)
+read_one_struct_field (struct stab_field_info *fip, const char **pp,
+                      const char *p, struct type *type,
+                      struct objfile *objfile)
 {
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
 
@@ -3009,10 +2982,10 @@ read_one_struct_field (struct field_info *fip, char **pp, char *p,
    Returns 1 for success, 0 for failure.  */
 
 static int
-read_struct_fields (struct field_info *fip, char **pp, struct type *type,
-                   struct objfile *objfile)
+read_struct_fields (struct stab_field_info *fip, const char **pp,
+                   struct type *type, struct objfile *objfile)
 {
-  char *p;
+  const char *p;
   struct nextfield *newobj;
 
   /* We better set p right now, in case there are no fields at all...    */
@@ -3029,8 +3002,7 @@ read_struct_fields (struct field_info *fip, char **pp, struct type *type,
     {
       STABS_CONTINUE (pp, objfile);
       /* Get space to record the next field's data.  */
-      newobj = XCNEW (struct nextfield);
-      make_cleanup (xfree, newobj);
+      newobj = OBSTACK_ZALLOC (&fip->obstack, struct nextfield);
 
       newobj->next = fip->list;
       fip->list = newobj;
@@ -3107,8 +3079,8 @@ read_struct_fields (struct field_info *fip, char **pp, struct type *type,
 
 
 static int
-read_baseclasses (struct field_info *fip, char **pp, struct type *type,
-                 struct objfile *objfile)
+read_baseclasses (struct stab_field_info *fip, const char **pp,
+                 struct type *type, struct objfile *objfile)
 {
   int i;
   struct nextfield *newobj;
@@ -3151,8 +3123,7 @@ read_baseclasses (struct field_info *fip, char **pp, struct type *type,
 
   for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
     {
-      newobj = XCNEW (struct nextfield);
-      make_cleanup (xfree, newobj);
+      newobj = OBSTACK_ZALLOC (&fip->obstack, struct nextfield);
 
       newobj->next = fip->list;
       fip->list = newobj;
@@ -3171,8 +3142,7 @@ read_baseclasses (struct field_info *fip, char **pp, struct type *type,
        default:
          /* Unknown character.  Complain and treat it as non-virtual.  */
          {
-           complaint (&symfile_complaints,
-                      _("Unknown virtual character `%c' for baseclass"),
+           complaint (_("Unknown virtual character `%c' for baseclass"),
                       **pp);
          }
        }
@@ -3189,8 +3159,7 @@ read_baseclasses (struct field_info *fip, char **pp, struct type *type,
          /* Bad visibility format.  Complain and treat it as
             public.  */
          {
-           complaint (&symfile_complaints,
-                      _("Unknown visibility `%c' for baseclass"),
+           complaint (_("Unknown visibility `%c' for baseclass"),
                       newobj->visibility);
            newobj->visibility = VISIBILITY_PUBLIC;
          }
@@ -3213,7 +3182,7 @@ read_baseclasses (struct field_info *fip, char **pp, struct type *type,
          field's name.  */
 
       newobj->field.type = read_type (pp, objfile);
-      newobj->field.name = type_name_no_tag (newobj->field.type);
+      newobj->field.name = TYPE_NAME (newobj->field.type);
 
       /* Skip trailing ';' and bump count of number of fields seen.  */
       if (**pp == ';')
@@ -3233,10 +3202,10 @@ read_baseclasses (struct field_info *fip, char **pp, struct type *type,
    so we can look for the vptr base class info.  */
 
 static int
-read_tilde_fields (struct field_info *fip, char **pp, struct type *type,
-                  struct objfile *objfile)
+read_tilde_fields (struct stab_field_info *fip, const char **pp,
+                  struct type *type, struct objfile *objfile)
 {
-  char *p;
+  const char *p;
 
   STABS_CONTINUE (pp, objfile);
 
@@ -3298,8 +3267,7 @@ 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 "
+             complaint (_("virtual function table pointer "
                           "not found when defining class `%s'"),
                         TYPE_NAME (type));
              return 0;
@@ -3317,7 +3285,7 @@ read_tilde_fields (struct field_info *fip, char **pp, struct type *type,
 }
 
 static int
-attach_fn_fields_to_type (struct field_info *fip, struct type *type)
+attach_fn_fields_to_type (struct stab_field_info *fip, struct type *type)
 {
   int n;
 
@@ -3336,7 +3304,7 @@ attach_fn_fields_to_type (struct field_info *fip, struct type *type)
    for this class's virtual functions.  */
 
 static int
-attach_fields_to_type (struct field_info *fip, struct type *type,
+attach_fields_to_type (struct stab_field_info *fip, struct type *type,
                       struct objfile *objfile)
 {
   int nfields = 0;
@@ -3411,8 +3379,7 @@ 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 (_("Unknown visibility `%c' for field"),
                       fip->list->visibility);
          }
          break;
@@ -3431,9 +3398,9 @@ complain_about_struct_wipeout (struct type *type)
   const char *name = "";
   const char *kind = "";
 
-  if (TYPE_TAG_NAME (type))
+  if (TYPE_NAME (type))
     {
-      name = TYPE_TAG_NAME (type);
+      name = TYPE_NAME (type);
       switch (TYPE_CODE (type))
         {
         case TYPE_CODE_STRUCT: kind = "struct "; break;
@@ -3442,19 +3409,13 @@ complain_about_struct_wipeout (struct type *type)
         default: kind = "";
         }
     }
-  else if (TYPE_NAME (type))
-    {
-      name = TYPE_NAME (type);
-      kind = "";
-    }
   else
     {
       name = "<unknown>";
       kind = "";
     }
 
-  complaint (&symfile_complaints,
-            _("struct/union type gets multiply defined: %s%s"), kind, name);
+  complaint (_("struct/union type gets multiply defined: %s%s"), kind, name);
 }
 
 /* Set the length for all variants of a same main_type, which are
@@ -3509,14 +3470,10 @@ set_length_in_type_chain (struct type *type)
  */
 
 static struct type *
-read_struct_type (char **pp, struct type *type, enum type_code type_code,
+read_struct_type (const char **pp, struct type *type, enum type_code type_code,
                   struct objfile *objfile)
 {
-  struct cleanup *back_to;
-  struct field_info fi;
-
-  fi.list = NULL;
-  fi.fnlist = NULL;
+  struct stab_field_info fi;
 
   /* When describing struct/union/class types in stabs, G++ always drops
      all qualifications from the name.  So if you've got:
@@ -3538,8 +3495,6 @@ read_struct_type (char **pp, struct type *type, enum type_code type_code,
       return type;
     }
 
-  back_to = make_cleanup (null_cleanup, 0);
-
   INIT_CPLUS_SPECIFIC (type);
   TYPE_CODE (type) = type_code;
   TYPE_STUB (type) = 0;
@@ -3551,10 +3506,7 @@ read_struct_type (char **pp, struct type *type, enum type_code type_code,
 
     TYPE_LENGTH (type) = read_huge_number (pp, 0, &nbits, 0);
     if (nbits != 0)
-      {
-       do_cleanups (back_to);
-       return error_type (pp, objfile);
-      }
+      return error_type (pp, objfile);
     set_length_in_type_chain (type);
   }
 
@@ -3573,7 +3525,6 @@ read_struct_type (char **pp, struct type *type, enum type_code type_code,
       type = error_type (pp, objfile);
     }
 
-  do_cleanups (back_to);
   return (type);
 }
 
@@ -3583,7 +3534,7 @@ read_struct_type (char **pp, struct type *type, enum type_code type_code,
    array.  */
 
 static struct type *
-read_array_type (char **pp, struct type *type,
+read_array_type (const char **pp, struct type *type,
                 struct objfile *objfile)
 {
   struct type *index_type, *element_type, *range_type;
@@ -3634,7 +3585,7 @@ read_array_type (char **pp, struct type *type,
     }
 
   range_type =
-    create_static_range_type ((struct type *) NULL, index_type, lower, upper);
+    create_static_range_type (NULL, index_type, lower, upper);
   type = create_array_type (type, element_type, range_type);
 
   return type;
@@ -3646,11 +3597,11 @@ read_array_type (char **pp, struct type *type,
    Also defines the symbols that represent the values of the type.  */
 
 static struct type *
-read_enum_type (char **pp, struct type *type,
+read_enum_type (const char **pp, struct type *type,
                struct objfile *objfile)
 {
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  char *p;
+  const char *p;
   char *name;
   long n;
   struct symbol *sym;
@@ -3666,10 +3617,10 @@ read_enum_type (char **pp, struct type *type,
      to be file-scope, between N_FN entries, using N_LSYM.  What's a mother
      to do?  For now, force all enum values to file scope.  */
   if (within_function)
-    symlist = &local_symbols;
+    symlist = get_local_symbols ();
   else
 #endif
-    symlist = &file_symbols;
+    symlist = get_file_symbols ();
   osyms = *symlist;
   o_nsyms = osyms ? osyms->nsyms : 0;
 
@@ -3702,7 +3653,7 @@ read_enum_type (char **pp, struct type *type,
 
       sym = allocate_symbol (objfile);
       SYMBOL_SET_LINKAGE_NAME (sym, name);
-      SYMBOL_SET_LANGUAGE (sym, current_subfile->language,
+      SYMBOL_SET_LANGUAGE (sym, get_current_subfile ()->language,
                           &objfile->objfile_obstack);
       SYMBOL_ACLASS_INDEX (sym) = LOC_CONST;
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
@@ -3772,7 +3723,7 @@ read_enum_type (char **pp, struct type *type,
    FIXME.  */
 
 static struct type *
-read_sun_builtin_type (char **pp, int typenums[2], struct objfile *objfile)
+read_sun_builtin_type (const char **pp, int typenums[2], struct objfile *objfile)
 {
   int type_bits;
   int nbits;
@@ -3834,7 +3785,8 @@ read_sun_builtin_type (char **pp, int typenums[2], struct objfile *objfile)
 
   if (type_bits == 0)
     {
-      struct type *type = init_type (objfile, TYPE_CODE_VOID, 1, NULL);
+      struct type *type = init_type (objfile, TYPE_CODE_VOID,
+                                    TARGET_CHAR_BIT, NULL);
       if (unsigned_type)
         TYPE_UNSIGNED (type) = 1;
       return type;
@@ -3847,7 +3799,8 @@ read_sun_builtin_type (char **pp, int typenums[2], struct objfile *objfile)
 }
 
 static struct type *
-read_sun_floating_type (char **pp, int typenums[2], struct objfile *objfile)
+read_sun_floating_type (const char **pp, int typenums[2],
+                       struct objfile *objfile)
 {
   int nbits;
   int details;
@@ -3895,9 +3848,10 @@ read_sun_floating_type (char **pp, int typenums[2], struct objfile *objfile)
    If encounter garbage, set *BITS to -1 and return 0.  */
 
 static long
-read_huge_number (char **pp, int end, int *bits, int twos_complement_bits)
+read_huge_number (const char **pp, int end, int *bits,
+                 int twos_complement_bits)
 {
-  char *p = *pp;
+  const char *p = *pp;
   int sign = 1;
   int sign_bit = 0;
   long n = 0;
@@ -3932,7 +3886,7 @@ read_huge_number (char **pp, int end, int *bits, int twos_complement_bits)
         negative number.  */
 
       size_t len;
-      char *p1 = p;
+      const char *p1 = p;
 
       while ((c = *p1) >= '0' && c < '8')
        p1++;
@@ -4059,11 +4013,11 @@ read_huge_number (char **pp, int end, int *bits, int twos_complement_bits)
 }
 
 static struct type *
-read_range_type (char **pp, int typenums[2], int type_size,
+read_range_type (const char **pp, int typenums[2], int type_size,
                  struct objfile *objfile)
 {
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  char *orig_pp = *pp;
+  const char *orig_pp = *pp;
   int rangenums[2];
   long n2, n3;
   int n2bits, n3bits;
@@ -4144,7 +4098,7 @@ read_range_type (char **pp, int typenums[2], int type_size,
 
   /* A type defined as a subrange of itself, with bounds both 0, is void.  */
   if (self_subrange && n2 == 0 && n3 == 0)
-    return init_type (objfile, TYPE_CODE_VOID, 1, NULL);
+    return init_type (objfile, TYPE_CODE_VOID, TARGET_CHAR_BIT, NULL);
 
   /* If n3 is zero and n2 is positive, we want a floating type, and n2
      is the width in bytes.
@@ -4190,7 +4144,8 @@ read_range_type (char **pp, int typenums[2], int type_size,
      itself with range 0-127.  */
   else if (self_subrange && n2 == 0 && n3 == 127)
     {
-      struct type *type = init_integer_type (objfile, 1, 0, NULL);
+      struct type *type = init_integer_type (objfile, TARGET_CHAR_BIT,
+                                            0, NULL);
       TYPE_NOSIGN (type) = 1;
       return type;
     }
@@ -4251,14 +4206,13 @@ handle_true_range:
       /* Does this actually ever happen?  Is that why we are worrying
          about dealing with it rather than just calling error_type?  */
 
-      complaint (&symfile_complaints,
-                _("base type %d of range type is not defined"), rangenums[1]);
+      complaint (_("base type %d of range type is not defined"), rangenums[1]);
 
       index_type = objfile_type (objfile)->builtin_int;
     }
 
   result_type
-    = create_static_range_type ((struct type *) NULL, index_type, n2, n3);
+    = create_static_range_type (NULL, index_type, n2, n3);
   return (result_type);
 }
 
@@ -4267,7 +4221,7 @@ handle_true_range:
    if there is an error.  */
 
 static struct field *
-read_args (char **pp, int end, struct objfile *objfile, int *nargsp,
+read_args (const char **pp, int end, struct objfile *objfile, int *nargsp,
           int *varargsp)
 {
   /* FIXME!  Remove this arbitrary limit!  */
@@ -4293,7 +4247,7 @@ read_args (char **pp, int end, struct objfile *objfile, int *nargsp,
         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"));
+      complaint (_("Invalid (empty) method arguments"));
       *varargsp = 0;
     }
   else if (TYPE_CODE (types[n - 1]) != TYPE_CODE_VOID)
@@ -4331,15 +4285,14 @@ static char *common_block_name;
    to remain after this function returns.  */
 
 void
-common_block_start (char *name, struct objfile *objfile)
+common_block_start (const char *name, struct objfile *objfile)
 {
   if (common_block_name != NULL)
     {
-      complaint (&symfile_complaints,
-                _("Invalid symbol data: common block within common block"));
+      complaint (_("Invalid symbol data: common block within common block"));
     }
-  common_block = local_symbols;
-  common_block_i = local_symbols ? local_symbols->nsyms : 0;
+  common_block = *get_local_symbols ();
+  common_block_i = common_block ? common_block->nsyms : 0;
   common_block_name = (char *) obstack_copy0 (&objfile->objfile_obstack, name,
                                              strlen (name));
 }
@@ -4362,7 +4315,7 @@ common_block_end (struct objfile *objfile)
 
   if (common_block_name == NULL)
     {
-      complaint (&symfile_complaints, _("ECOMM symbol unmatched by BCOMM"));
+      complaint (_("ECOMM symbol unmatched by BCOMM"));
       return;
     }
 
@@ -4374,7 +4327,7 @@ common_block_end (struct objfile *objfile)
   /* Now we copy all the symbols which have been defined since the BCOMM.  */
 
   /* Copy all the struct pendings before common_block.  */
-  for (next = local_symbols;
+  for (next = *get_local_symbols ();
        next != NULL && next != common_block;
        next = next->next)
     {
@@ -4475,7 +4428,7 @@ add_undefined_type_1 (struct type *type)
 static void
 add_undefined_type (struct type *type, int typenums[2])
 {
-  if (TYPE_TAG_NAME (type) == NULL)
+  if (TYPE_NAME (type) == NULL)
     add_undefined_type_noname (type, typenums);
   else
     add_undefined_type_1 (type);
@@ -4560,14 +4513,14 @@ cleanup_undefined_types_1 (void)
                struct pending *ppt;
                int i;
                /* Name of the type, without "struct" or "union".  */
-               const char *type_name = TYPE_TAG_NAME (*type);
+               const char *type_name = TYPE_NAME (*type);
 
                if (type_name == NULL)
                  {
-                   complaint (&symfile_complaints, _("need a type name"));
+                   complaint (_("need a type name"));
                    break;
                  }
-               for (ppt = file_symbols; ppt; ppt = ppt->next)
+               for (ppt = *get_file_symbols (); ppt; ppt = ppt->next)
                  {
                    for (i = 0; i < ppt->nsyms; i++)
                      {
@@ -4590,8 +4543,7 @@ cleanup_undefined_types_1 (void)
 
        default:
          {
-           complaint (&symfile_complaints,
-                      _("forward-referenced types left unresolved, "
+           complaint (_("forward-referenced types left unresolved, "
                        "type code %d."),
                       TYPE_CODE (*type));
          }
@@ -4612,15 +4564,12 @@ cleanup_undefined_stabs_types (struct objfile *objfile)
   cleanup_undefined_types_noname (objfile);
 }
 
-/* Scan through all of the global symbols defined in the object file,
-   assigning values to the debugging symbols that need to be assigned
-   to.  Get these symbols from the minimal symbol table.  */
+/* See stabsread.h.  */
 
 void
 scan_file_globals (struct objfile *objfile)
 {
   int hash;
-  struct minimal_symbol *msymbol;
   struct symbol *sym, *prev;
   struct objfile *resolve_objfile;
 
@@ -4646,7 +4595,7 @@ scan_file_globals (struct objfile *objfile)
       if (hash >= HASHSIZE)
        return;
 
-      ALL_OBJFILE_MSYMBOLS (resolve_objfile, msymbol)
+      for (minimal_symbol *msymbol : resolve_objfile->msymbols ())
        {
          QUIT;
 
@@ -4742,8 +4691,7 @@ scan_file_globals (struct objfile *objfile)
          if (SYMBOL_CLASS (prev) == LOC_STATIC)
            SYMBOL_ACLASS_INDEX (prev) = LOC_UNRESOLVED;
          else
-           complaint (&symfile_complaints,
-                      _("%s: common block `%s' from "
+           complaint (_("%s: common block `%s' from "
                         "global_sym_chain unresolved"),
                       objfile_name (objfile), SYMBOL_PRINT_NAME (prev));
        }
@@ -4782,6 +4730,7 @@ start_stabs (void)
   n_this_object_header_files = 1;
   type_vector_length = 0;
   type_vector = (struct type **) 0;
+  within_function = 0;
 
   /* FIXME: If common_block_name is not already NULL, we should complain().  */
   common_block_name = NULL;
@@ -4806,7 +4755,7 @@ finish_global_stabs (struct objfile *objfile)
 {
   if (global_stabs)
     {
-      patch_block_stabs (global_symbols, global_stabs, objfile);
+      patch_block_stabs (*get_global_symbols (), global_stabs, objfile);
       xfree (global_stabs);
       global_stabs = NULL;
     }
@@ -4814,10 +4763,10 @@ finish_global_stabs (struct objfile *objfile)
 
 /* Find the end of the name, delimited by a ':', but don't match
    ObjC symbols which look like -[Foo bar::]:bla.  */
-static char *
-find_name_end (char *name)
+static const char *
+find_name_end (const char *name)
 {
-  char *s = name;
+  const char *s = name;
 
   if (s[0] == '-' || *s == '+')
     {
@@ -4839,13 +4788,19 @@ find_name_end (char *name)
     }
 }
 
+/* See stabsread.h.  */
+
+int
+hashname (const char *name)
+{
+  return hash (name, strlen (name)) % HASHSIZE;
+}
+
 /* 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 = XNEWVEC (struct type *, undef_types_allocated);
This page took 0.072985 seconds and 4 git commands to generate.