Introduce a gdb_ref_ptr specialization for struct value
[deliverable/binutils-gdb.git] / gdb / dbxread.c
index 5ee73152203b5ba17d4db5e74d680c003eba94c1..bdf4fb9c798394133237bdf54bb26be41d2034d3 100644 (file)
@@ -1,5 +1,5 @@
 /* Read dbx symbol tables and convert to internal format, for GDB.
-   Copyright (C) 1986-2016 Free Software Foundation, Inc.
+   Copyright (C) 1986-2018 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -54,7 +54,6 @@
 #include "cp-support.h"
 #include "psympriv.h"
 #include "block.h"
-
 #include "aout/aout64.h"
 #include "aout/stab_gnu.h"     /* We always use GNU stabs, not
                                   native, now.  */
@@ -92,6 +91,7 @@ struct symloc
     int symbol_offset;
     int string_offset;
     int file_string_offset;
+    enum language pst_language;
   };
 
 #define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff)
@@ -101,6 +101,7 @@ struct symloc
 #define SYMBOL_OFFSET(p) (SYMLOC(p)->symbol_offset)
 #define STRING_OFFSET(p) (SYMLOC(p)->string_offset)
 #define FILE_STRING_OFFSET(p) (SYMLOC(p)->file_string_offset)
+#define PST_LANGUAGE(p) (SYMLOC(p)->pst_language)
 \f
 
 /* The objfile we are currently reading.  */
@@ -144,10 +145,6 @@ static unsigned int next_file_string_table_offset;
 
 static int symfile_relocatable = 0;
 
-/* If this is nonzero, N_LBRAC, N_RBRAC, and N_SLINE entries are
-   relative to the function start address.  */
-
-static int block_address_function_relative = 0;
 \f
 /* The lowest text address we have yet encountered.  This is needed
    because in an a.out file, there is no header field which tells us
@@ -241,7 +238,7 @@ find_text_range (bfd * sym_bfd, struct objfile *objfile)
 
 struct header_file_location
 {
-  char *name;                  /* Name of header file */
+  const char *name;            /* Name of header file */
   int instance;                        /* See above */
   struct partial_symtab *pst;  /* Partial symtab that has the
                                   BINCL/EINCL defs for this file.  */
@@ -253,8 +250,6 @@ static int bincls_allocated;
 
 /* Local function prototypes.  */
 
-extern void _initialize_dbxread (void);
-
 static void read_ofile_symtab (struct objfile *, struct partial_symtab *);
 
 static void dbx_read_symtab (struct partial_symtab *self,
@@ -262,19 +257,18 @@ static void dbx_read_symtab (struct partial_symtab *self,
 
 static void dbx_psymtab_to_symtab_1 (struct objfile *, struct partial_symtab *);
 
-static void read_dbx_dynamic_symtab (struct objfile *objfile);
-
-static void read_dbx_symtab (struct objfile *);
+static void read_dbx_symtab (minimal_symbol_reader &, struct objfile *);
 
 static void free_bincl_list (struct objfile *);
 
-static struct partial_symtab *find_corresponding_bincl_psymtab (char *, int);
+static struct partial_symtab *find_corresponding_bincl_psymtab (const char *,
+                                                               int);
 
-static void add_bincl_to_list (struct partial_symtab *, char *, int);
+static void add_bincl_to_list (struct partial_symtab *, const char *, int);
 
 static void init_bincl_list (int, struct objfile *);
 
-static char *dbx_next_symbol_text (struct objfile *);
+static const char *dbx_next_symbol_text (struct objfile *);
 
 static void fill_symbuf (bfd *);
 
@@ -282,23 +276,24 @@ static void dbx_symfile_init (struct objfile *);
 
 static void dbx_new_init (struct objfile *);
 
-static void dbx_symfile_read (struct objfile *, int);
+static void dbx_symfile_read (struct objfile *, symfile_add_flags);
 
 static void dbx_symfile_finish (struct objfile *);
 
-static void record_minimal_symbol (const char *, CORE_ADDR, int,
+static void record_minimal_symbol (minimal_symbol_reader &,
+                                  const char *, CORE_ADDR, int,
                                   struct objfile *);
 
-static void add_new_header_file (char *, int);
+static void add_new_header_file (const char *, int);
 
-static void add_old_header_file (char *, int);
+static void add_old_header_file (const char *, int);
 
 static void add_this_object_header_file (int);
 
-static struct partial_symtab *start_psymtab (struct objfile *, char *,
+static struct partial_symtab *start_psymtab (struct objfile *, const char *,
                                             CORE_ADDR, int,
-                                            struct partial_symbol **,
-                                            struct partial_symbol **);
+                                            std::vector<partial_symbol *> &,
+                                            std::vector<partial_symbol *> &);
 
 /* Free up old header file tables.  */
 
@@ -345,7 +340,7 @@ add_this_object_header_file (int i)
    symbol tables for the same header file.  */
 
 static void
-add_old_header_file (char *name, int instance)
+add_old_header_file (const char *name, int instance)
 {
   struct header_file *p = HEADER_FILES (dbxread_objfile);
   int i;
@@ -371,7 +366,7 @@ add_old_header_file (char *name, int instance)
    so we record the file when its "begin" is seen and ignore the "end".  */
 
 static void
-add_new_header_file (char *name, int instance)
+add_new_header_file (const char *name, int instance)
 {
   int i;
   struct header_file *hfile;
@@ -429,7 +424,8 @@ explicit_lookup_type (int real_filenum, int index)
 #endif
 \f
 static void
-record_minimal_symbol (const char *name, CORE_ADDR address, int type,
+record_minimal_symbol (minimal_symbol_reader &reader,
+                      const char *name, CORE_ADDR address, int type,
                       struct objfile *objfile)
 {
   enum minimal_symbol_type ms_type;
@@ -508,8 +504,7 @@ record_minimal_symbol (const char *name, CORE_ADDR address, int type,
       && address < lowest_text_address)
     lowest_text_address = address;
 
-  prim_record_minimal_symbol_and_info
-    (name, address, ms_type, section, objfile);
+  reader.record_with_info (name, address, ms_type, section);
 }
 \f
 /* Scan and build partial symbols for a symbol file.
@@ -518,11 +513,10 @@ record_minimal_symbol (const char *name, CORE_ADDR address, int type,
    hung off the objfile structure.  */
 
 static void
-dbx_symfile_read (struct objfile *objfile, int symfile_flags)
+dbx_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
 {
   bfd *sym_bfd;
   int val;
-  struct cleanup *back_to;
 
   sym_bfd = objfile->obfd;
 
@@ -532,49 +526,31 @@ dbx_symfile_read (struct objfile *objfile, int symfile_flags)
 
   symfile_relocatable = bfd_get_file_flags (sym_bfd) & HAS_RELOC;
 
-  /* This is true for Solaris (and all other systems which put stabs
-     in sections, hopefully, since it would be silly to do things
-     differently from Solaris), and false for SunOS4 and other a.out
-     file formats.  */
-  block_address_function_relative =
-    ((startswith (bfd_get_target (sym_bfd), "elf"))
-     || (startswith (bfd_get_target (sym_bfd), "som"))
-     || (startswith (bfd_get_target (sym_bfd), "coff"))
-     || (startswith (bfd_get_target (sym_bfd), "pe"))
-     || (startswith (bfd_get_target (sym_bfd), "epoc-pe"))
-     || (startswith (bfd_get_target (sym_bfd), "nlm")));
-
   val = bfd_seek (sym_bfd, DBX_SYMTAB_OFFSET (objfile), SEEK_SET);
   if (val < 0)
     perror_with_name (objfile_name (objfile));
 
   /* Size the symbol table.  */
-  if (objfile->global_psymbols.size == 0 && objfile->static_psymbols.size == 0)
+  if (objfile->global_psymbols.capacity () == 0
+      && objfile->static_psymbols.capacity () == 0)
     init_psymbol_list (objfile, DBX_SYMCOUNT (objfile));
 
   symbol_size = DBX_SYMBOL_SIZE (objfile);
   symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
 
   free_pending_blocks ();
-  back_to = make_cleanup (really_free_pendings, 0);
+  scoped_free_pendings free_pending;
 
-  init_minimal_symbol_collection ();
-  make_cleanup_discard_minimal_symbols ();
+  minimal_symbol_reader reader (objfile);
 
   /* Read stabs data from executable file and define symbols.  */
 
-  read_dbx_symtab (objfile);
-
-  /* Add the dynamic symbols.  */
-
-  read_dbx_dynamic_symtab (objfile);
+  read_dbx_symtab (reader, objfile);
 
   /* Install any minimal symbols that have been collected as the current
      minimal symbols for this objfile.  */
 
-  install_minimal_symbols (objfile);
-
-  do_cleanups (back_to);
+  reader.install ();
 }
 
 /* Initialize anything that needs initializing when a completely new
@@ -756,7 +732,7 @@ static int symbuf_end;
 
 /* Name of last function encountered.  Used in Solaris to approximate
    object file boundaries.  */
-static char *last_function_name;
+static const char *last_function_name;
 
 /* The address in memory of the string table of the object file we are
    reading (which might not be the "main" object file, but might be a
@@ -864,7 +840,7 @@ stabs_seek (int sym_offset)
    (a \ at the end of the text of a name)
    call this function to get the continuation.  */
 
-static char *
+static const char *
 dbx_next_symbol_text (struct objfile *objfile)
 {
   struct internal_nlist nlist;
@@ -895,7 +871,7 @@ init_bincl_list (int number, struct objfile *objfile)
 /* Add a bincl to the list.  */
 
 static void
-add_bincl_to_list (struct partial_symtab *pst, char *name, int instance)
+add_bincl_to_list (struct partial_symtab *pst, const char *name, int instance)
 {
   if (next_bincl >= bincl_list + bincls_allocated)
     {
@@ -917,7 +893,7 @@ add_bincl_to_list (struct partial_symtab *pst, char *name, int instance)
    with that header_file_location.  */
 
 static struct partial_symtab *
-find_corresponding_bincl_psymtab (char *name, int instance)
+find_corresponding_bincl_psymtab (const char *name, int instance)
 {
   struct header_file_location *bincl;
 
@@ -955,10 +931,10 @@ make_cleanup_free_bincl_list (struct objfile *objfile)
    give a fake name, and print a single error message per symbol file read,
    rather than abort the symbol reading or flood the user with messages.  */
 
-static char *
+static const char *
 set_namestring (struct objfile *objfile, const struct internal_nlist *nlist)
 {
-  char *namestring;
+  const char *namestring;
 
   if (nlist->n_strx + file_string_table_offset
       >= DBX_STRINGTAB_SIZE (objfile)
@@ -975,157 +951,20 @@ set_namestring (struct objfile *objfile, const struct internal_nlist *nlist)
   return namestring;
 }
 
-/* Scan a SunOs dynamic symbol table for symbols of interest and
-   add them to the minimal symbol table.  */
-
-static void
-read_dbx_dynamic_symtab (struct objfile *objfile)
-{
-  bfd *abfd = objfile->obfd;
-  struct cleanup *back_to;
-  int counter;
-  long dynsym_size;
-  long dynsym_count;
-  asymbol **dynsyms;
-  asymbol **symptr;
-  arelent **relptr;
-  long dynrel_size;
-  long dynrel_count;
-  arelent **dynrels;
-  CORE_ADDR sym_value;
-  const char *name;
-
-  /* Check that the symbol file has dynamic symbols that we know about.
-     bfd_arch_unknown can happen if we are reading a sun3 symbol file
-     on a sun4 host (and vice versa) and bfd is not configured
-     --with-target=all.  This would trigger an assertion in bfd/sunos.c,
-     so we ignore the dynamic symbols in this case.  */
-  if (bfd_get_flavour (abfd) != bfd_target_aout_flavour
-      || (bfd_get_file_flags (abfd) & DYNAMIC) == 0
-      || bfd_get_arch (abfd) == bfd_arch_unknown)
-    return;
-
-  dynsym_size = bfd_get_dynamic_symtab_upper_bound (abfd);
-  if (dynsym_size < 0)
-    return;
-
-  dynsyms = (asymbol **) xmalloc (dynsym_size);
-  back_to = make_cleanup (xfree, dynsyms);
-
-  dynsym_count = bfd_canonicalize_dynamic_symtab (abfd, dynsyms);
-  if (dynsym_count < 0)
-    {
-      do_cleanups (back_to);
-      return;
-    }
-
-  /* Enter dynamic symbols into the minimal symbol table
-     if this is a stripped executable.  */
-  if (bfd_get_symcount (abfd) <= 0)
-    {
-      symptr = dynsyms;
-      for (counter = 0; counter < dynsym_count; counter++, symptr++)
-       {
-         asymbol *sym = *symptr;
-         asection *sec;
-         int type;
-
-         sec = bfd_get_section (sym);
-
-         /* BFD symbols are section relative.  */
-         sym_value = sym->value + sec->vma;
-
-         if (bfd_get_section_flags (abfd, sec) & SEC_CODE)
-           {
-             type = N_TEXT;
-           }
-         else if (bfd_get_section_flags (abfd, sec) & SEC_DATA)
-           {
-             type = N_DATA;
-           }
-         else if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
-           {
-             type = N_BSS;
-           }
-         else
-           continue;
-
-         if (sym->flags & BSF_GLOBAL)
-           type |= N_EXT;
-
-         record_minimal_symbol (bfd_asymbol_name (sym), sym_value,
-                                type, objfile);
-       }
-    }
-
-  /* Symbols from shared libraries have a dynamic relocation entry
-     that points to the associated slot in the procedure linkage table.
-     We make a mininal symbol table entry with type mst_solib_trampoline
-     at the address in the procedure linkage table.  */
-  dynrel_size = bfd_get_dynamic_reloc_upper_bound (abfd);
-  if (dynrel_size < 0)
-    {
-      do_cleanups (back_to);
-      return;
-    }
-
-  dynrels = (arelent **) xmalloc (dynrel_size);
-  make_cleanup (xfree, dynrels);
-
-  dynrel_count = bfd_canonicalize_dynamic_reloc (abfd, dynrels, dynsyms);
-  if (dynrel_count < 0)
-    {
-      do_cleanups (back_to);
-      return;
-    }
-
-  for (counter = 0, relptr = dynrels;
-       counter < dynrel_count;
-       counter++, relptr++)
-    {
-      arelent *rel = *relptr;
-      CORE_ADDR address = rel->address;
-
-      switch (bfd_get_arch (abfd))
-       {
-       case bfd_arch_sparc:
-         if (rel->howto->type != RELOC_JMP_SLOT)
-           continue;
-         break;
-       case bfd_arch_m68k:
-         /* `16' is the type BFD produces for a jump table relocation.  */
-         if (rel->howto->type != 16)
-           continue;
-
-         /* Adjust address in the jump table to point to
-            the start of the bsr instruction.  */
-         address -= 2;
-         break;
-       default:
-         continue;
-       }
-
-      name = bfd_asymbol_name (*rel->sym_ptr_ptr);
-      prim_record_minimal_symbol (name, address, mst_solib_trampoline,
-                                 objfile);
-    }
-
-  do_cleanups (back_to);
-}
-
 static CORE_ADDR
-find_stab_function_addr (char *namestring, const char *filename,
+find_stab_function_addr (const char *namestring, const char *filename,
                         struct objfile *objfile)
 {
   struct bound_minimal_symbol msym;
-  char *p;
   int n;
 
-  p = strchr (namestring, ':');
-  if (p == NULL)
-    p = namestring;
-  n = p - namestring;
-  p = (char *) alloca (n + 2);
+  const char *colon = strchr (namestring, ':');
+  if (colon == NULL)
+    n = 0;
+  else
+    n = colon - namestring;
+
+  char *p = (char *) alloca (n + 2);
   strncpy (p, namestring, n);
   p[n] = 0;
 
@@ -1170,17 +1009,17 @@ function_outside_compilation_unit_complaint (const char *arg1)
    debugging information is available.  */
 
 static void
-read_dbx_symtab (struct objfile *objfile)
+read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile)
 {
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   struct external_nlist *bufp = 0;     /* =0 avoids gcc -Wall glitch.  */
   struct internal_nlist nlist;
   CORE_ADDR text_addr;
   int text_size;
-  char *sym_name;
+  const char *sym_name;
   int sym_len;
 
-  char *namestring;
+  const char *namestring;
   int nsl;
   int past_first_source_file = 0;
   CORE_ADDR last_function_start = 0;
@@ -1326,7 +1165,7 @@ read_dbx_symtab (struct objfile *objfile)
          record_it:
          namestring = set_namestring (objfile, &nlist);
 
-         record_minimal_symbol (namestring, nlist.n_value,
+         record_minimal_symbol (reader, namestring, nlist.n_value,
                                 nlist.n_type, objfile);        /* Always */
          continue;
 
@@ -1443,7 +1282,7 @@ read_dbx_symtab (struct objfile *objfile)
            static int prev_so_symnum = -10;
            static int first_so_symnum;
            const char *p;
-           static char *dirname_nso;
+           static const char *dirname_nso;
            int prev_textlow_not_set;
 
            valu = nlist.n_value + ANOFFSET (objfile->section_offsets,
@@ -1518,8 +1357,8 @@ read_dbx_symtab (struct objfile *objfile)
                pst = start_psymtab (objfile,
                                     namestring, valu,
                                     first_so_symnum * symbol_size,
-                                    objfile->global_psymbols.next,
-                                    objfile->static_psymbols.next);
+                                    objfile->global_psymbols,
+                                    objfile->static_psymbols);
                pst->dirname = dirname_nso;
                dirname_nso = NULL;
              }
@@ -1637,7 +1476,7 @@ read_dbx_symtab (struct objfile *objfile)
        case N_M2C:             /* I suspect that I can ignore this here.  */
        case N_SCOPE:           /* Same.   */
        {
-         char *p;
+         const char *p;
 
          namestring = set_namestring (objfile, &nlist);
 
@@ -1663,20 +1502,16 @@ read_dbx_symtab (struct objfile *objfile)
          sym_name = NULL;      /* pacify "gcc -Werror" */
          if (psymtab_language == language_cplus)
            {
-             char *new_name, *name = (char *) xmalloc (p - namestring + 1);
-             memcpy (name, namestring, p - namestring);
-
-             name[p - namestring] = '\0';
-             new_name = cp_canonicalize_string (name);
-             if (new_name != NULL)
-               {
-                 sym_len = strlen (new_name);
+             std::string name (namestring, p - namestring);
+             std::string new_name = cp_canonicalize_string (name.c_str ());
+             if (!new_name.empty ())
+               {
+                 sym_len = new_name.length ();
                  sym_name = (char *) obstack_copy0 (&objfile->objfile_obstack,
-                                                    new_name, sym_len);
-                 xfree (new_name);
-               }
-              xfree (name);
-           }
+                                                    new_name.c_str (),
+                                                    sym_len);
+               }
+           }
 
          if (sym_len == 0)
            {
@@ -1795,7 +1630,7 @@ read_dbx_symtab (struct objfile *objfile)
                     Accept either.  */
                  while (*p && *p != ';' && *p != ',')
                    {
-                     char *q;
+                     const char *q;
 
                      /* Check for and handle cretinous dbx symbol name
                         continuation!  */
@@ -2160,13 +1995,13 @@ read_dbx_symtab (struct objfile *objfile)
    (normal).  */
 
 static struct partial_symtab *
-start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow,
-              int ldsymoff, struct partial_symbol **global_syms,
-              struct partial_symbol **static_syms)
+start_psymtab (struct objfile *objfile, const char *filename, CORE_ADDR textlow,
+              int ldsymoff, std::vector<partial_symbol *> &global_psymbols,
+              std::vector<partial_symbol *> &static_psymbols)
 {
   struct partial_symtab *result =
     start_psymtab_common (objfile, filename, textlow,
-                         global_syms, static_syms);
+                         global_psymbols, static_psymbols);
 
   result->read_symtab_private =
     XOBNEW (&objfile->objfile_obstack, struct symloc);
@@ -2179,6 +2014,7 @@ start_psymtab (struct objfile *objfile, char *filename, CORE_ADDR textlow,
 
   /* Deduce the source language from the filename for this psymtab.  */
   psymtab_language = deduce_language_from_filename (filename);
+  PST_LANGUAGE (result) = psymtab_language;
 
   return result;
 }
@@ -2221,15 +2057,15 @@ dbx_end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
   if (pst->texthigh == 0 && last_function_name
       && gdbarch_sofun_address_maybe_missing (gdbarch))
     {
-      char *p;
       int n;
       struct bound_minimal_symbol minsym;
 
-      p = strchr (last_function_name, ':');
-      if (p == NULL)
-       p = last_function_name;
-      n = p - last_function_name;
-      p = (char *) alloca (n + 2);
+      const char *colon = strchr (last_function_name, ':');
+      if (colon == NULL)
+       n = 0;
+      else
+       n = colon - last_function_name;
+      char *p = (char *) alloca (n + 2);
       strncpy (p, last_function_name, n);
       p[n] = 0;
 
@@ -2349,7 +2185,6 @@ dbx_end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
 static void
 dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst)
 {
-  struct cleanup *old_chain;
   int i;
 
   if (pst->readin)
@@ -2383,15 +2218,13 @@ dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst)
       /* Init stuff necessary for reading in symbols */
       stabsread_init ();
       buildsym_init ();
-      old_chain = make_cleanup (really_free_pendings, 0);
+      scoped_free_pendings free_pending;
       file_string_table_offset = FILE_STRING_OFFSET (pst);
       symbol_size = SYMBOL_SIZE (pst);
 
       /* Read in this file's symbols.  */
       bfd_seek (objfile->obfd, SYMBOL_OFFSET (pst), SEEK_SET);
       read_ofile_symtab (objfile, pst);
-
-      do_cleanups (old_chain);
     }
 
   pst->readin = 1;
@@ -2403,8 +2236,6 @@ dbx_psymtab_to_symtab_1 (struct objfile *objfile, struct partial_symtab *pst)
 static void
 dbx_read_symtab (struct partial_symtab *self, struct objfile *objfile)
 {
-  bfd *sym_bfd;
-
   if (self->readin)
     {
       fprintf_unfiltered (gdb_stderr, "Psymtab for %s already read in.  "
@@ -2425,8 +2256,6 @@ dbx_read_symtab (struct partial_symtab *self, struct objfile *objfile)
          gdb_flush (gdb_stdout);
        }
 
-      sym_bfd = objfile->obfd;
-
       next_symbol_text_func = dbx_next_symbol_text;
 
       back_to = make_cleanup (null_cleanup, NULL);
@@ -2461,7 +2290,7 @@ dbx_read_symtab (struct partial_symtab *self, struct objfile *objfile)
 static void
 read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst)
 {
-  char *namestring;
+  const char *namestring;
   struct external_nlist *bufp;
   struct internal_nlist nlist;
   unsigned char type;
@@ -2569,7 +2398,8 @@ read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst)
                 positive offsets.  */
            nlist.n_value = (nlist.n_value ^ 0x80000000) - 0x80000000;
          process_one_symbol (type, nlist.n_desc, nlist.n_value,
-                             namestring, section_offsets, objfile);
+                             namestring, section_offsets, objfile,
+                             PST_LANGUAGE (pst));
        }
       /* We skip checking for a new .o or -l file; that should never
          happen in this routine.  */
@@ -2664,12 +2494,14 @@ cp_set_block_scope (const struct symbol *symbol,
    the pst->section_offsets.  All symbols that refer to memory
    locations need to be offset by these amounts.
    OBJFILE is the object file from which we are reading symbols.  It
-   is used in end_symtab.  */
+   is used in end_symtab.
+   LANGUAGE is the language of the symtab.
+*/
 
 void
-process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
+process_one_symbol (int type, int desc, CORE_ADDR valu, const char *name,
                    const struct section_offsets *section_offsets,
-                   struct objfile *objfile)
+                   struct objfile *objfile, enum language language)
 {
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   struct context_stack *newobj;
@@ -2695,18 +2527,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
      source file.  Used to detect the SunPRO solaris compiler.  */
   static int n_opt_found;
 
-  /* The stab type used for the definition of the last function.
-     N_STSYM or N_GSYM for SunOS4 acc; N_FUN for other compilers.  */
-  static int function_stab_type = 0;
-
-  if (!block_address_function_relative)
-    {
-      /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
-        function start address, so just use the text offset.  */
-      function_start_offset =
-       ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
-    }
-
   /* Something is wrong if we see real data before seeing a source
      file name.  */
 
@@ -2762,8 +2582,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
 
          /* May be switching to an assembler file which may not be using
             block relative stabs, so reset the offset.  */
-         if (block_address_function_relative)
-           function_start_offset = 0;
+         function_start_offset = 0;
 
          break;
        }
@@ -2785,13 +2604,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       if (n_opt_found && desc == 1)
        break;
 
-      if (block_address_function_relative)
-       /* Relocate for Sun ELF acc fn-relative syms.  */
-       valu += function_start_offset;
-      else
-       /* On most machines, the block addresses are relative to the
-          N_SO, the linker did not relocate them (sigh).  */
-       valu += last_source_start_addr;
+      valu += function_start_offset;
 
       push_context (desc, valu);
       break;
@@ -2804,13 +2617,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       if (n_opt_found && desc == 1)
        break;
 
-      if (block_address_function_relative)
-       /* Relocate for Sun ELF acc fn-relative syms.  */
-       valu += function_start_offset;
-      else
-       /* On most machines, the block addresses are relative to the
-          N_SO, the linker did not relocate them (sigh).  */
-       valu += last_source_start_addr;
+      valu += function_start_offset;
 
       if (context_stack_depth <= 0)
        {
@@ -2905,11 +2712,10 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       if (*name == '\000')
        break;
 
-      if (block_address_function_relative)
-       function_start_offset = 0;
+      function_start_offset = 0;
 
       start_stabs ();
-      start_symtab (objfile, name, NULL, valu);
+      start_symtab (objfile, name, NULL, valu, language);
       record_debugformat ("stabs");
       break;
 
@@ -2999,7 +2805,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
          down ONE MORE function call level, which we really don't want
          to do).  */
       {
-       char *p;
+       const char *p;
 
        /* Normal object file and NLMs have non-zero text seg offsets,
           but don't need their static syms offset in this fashion.
@@ -3092,7 +2898,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
       if (name)
        {
          int deftype;
-         char *colon_pos = strchr (name, ':');
+         const char *colon_pos = strchr (name, ':');
 
          if (colon_pos == NULL)
            deftype = '\0';
@@ -3103,8 +2909,6 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
            {
            case 'f':
            case 'F':
-             function_stab_type = type;
-
              /* Deal with the SunPRO 3.0 compiler which omits the
                 address from N_FUN symbols.  */
              if (type == N_FUN
@@ -3126,14 +2930,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
                    valu = minsym_valu;
                }
 
-             if (block_address_function_relative)
-               /* For Solaris 2 compilers, the block addresses and
-                  N_SLINE's are relative to the start of the
-                  function.  On normal systems, and when using GCC on
-                  Solaris 2, these addresses are just absolute, or
-                  relative to the N_SO, depending on
-                  BLOCK_ADDRESS_ABSOLUTE.  */
-               function_start_offset = valu;
+             /* These addresses are absolute.  */
+             function_start_offset = valu;
 
              within_function = 1;
 
@@ -3223,7 +3021,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
          definition.  If a symbol reference is being defined, go ahead
          and add it.  Otherwise, just return.  */
 
-      char *s = name;
+      const char *s = name;
       int refnum;
 
       /* If this stab defines a new reference ID that is not on the
@@ -3273,13 +3071,8 @@ coffstab_build_psymtabs (struct objfile *objfile,
   int val;
   bfd *sym_bfd = objfile->obfd;
   char *name = bfd_get_filename (sym_bfd);
-  struct dbx_symfile_info *info;
   unsigned int stabsize;
 
-  /* There is already a dbx_symfile_info allocated by our caller.
-     It might even contain some info from the coff symtab to help us.  */
-  info = DBX_SYMFILE_INFO (objfile);
-
   DBX_TEXT_ADDR (objfile) = textaddr;
   DBX_TEXT_SIZE (objfile) = textsize;
 
@@ -3362,13 +3155,8 @@ elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect,
   int val;
   bfd *sym_bfd = objfile->obfd;
   char *name = bfd_get_filename (sym_bfd);
-  struct dbx_symfile_info *info;
   struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
 
-  /* There is already a dbx_symfile_info allocated by our caller.
-     It might even contain some info from the ELF symtab to help us.  */
-  info = DBX_SYMFILE_INFO (objfile);
-
   /* Find the first and last text address.  dbx_symfile_read seems to
      want this.  */
   find_text_range (sym_bfd, objfile);
This page took 0.03465 seconds and 4 git commands to generate.