Delay allocation of dbx_symfile_info
authorTom Tromey <tromey@adacore.com>
Fri, 7 Jun 2019 21:01:50 +0000 (15:01 -0600)
committerTom Tromey <tromey@adacore.com>
Mon, 10 Jun 2019 13:23:33 +0000 (07:23 -0600)
I noticed that elfread.c always allocates a dbx_symfile_info, even
though this is only ever needed in the unusual case of reading stabs
in ELF.

This patch moves the allocation into dbxread.c, and applies the same
treatment to similar code in coffread.c.

Regression tested on x86-64 Fedora 29.

gdb/ChangeLog
2019-06-10  Tom Tromey  <tromey@adacore.com>

* elfread.c (elf_read_minimal_symbols): Don't set the dbx objfile
data.
(elf_new_init): Don't call stabsread_new_init.
* dbxread.c (coffstab_build_psymtabs): Set dbx objfile data.
(elfstab_build_psymtabs): Likewise.  Call stabsread_new_init.
* coffread.c (coff_symfile_init): Don't set the dbx objfile data.

gdb/ChangeLog
gdb/coffread.c
gdb/dbxread.c
gdb/elfread.c

index 3a40ecc16910fd2a4f6877a4540df50ac1cb7048..795ba4570f260f4f2ff369c9838d1a22d2f7828a 100644 (file)
@@ -1,3 +1,12 @@
+2019-06-10  Tom Tromey  <tromey@adacore.com>
+
+       * elfread.c (elf_read_minimal_symbols): Don't set the dbx objfile
+       data.
+       (elf_new_init): Don't call stabsread_new_init.
+       * dbxread.c (coffstab_build_psymtabs): Set dbx objfile data.
+       (elfstab_build_psymtabs): Likewise.  Call stabsread_new_init.
+       * coffread.c (coff_symfile_init): Don't set the dbx objfile data.
+
 2019-06-10  Tom de Vries  <tdevries@suse.de>
 
        PR symtab/16264
index 0956f3897b43befe182515af4238fabd780aef7d..6e379dd1e5241bbe26c15d32ddab11df803db002 100644 (file)
@@ -31,7 +31,6 @@
 #include "libcoff.h"           /* FIXME secret internal data from BFD */
 #include "objfiles.h"
 #include "buildsym-legacy.h"
-#include "gdb-stabs.h"
 #include "stabsread.h"
 #include "complaints.h"
 #include "target.h"
@@ -484,12 +483,6 @@ record_minimal_symbol (minimal_symbol_reader &reader,
 static void
 coff_symfile_init (struct objfile *objfile)
 {
-  struct dbx_symfile_info *dbx;
-
-  /* Allocate struct to keep track of stab reading.  */
-  dbx = XCNEW (struct dbx_symfile_info);
-  set_objfile_data (objfile, dbx_objfile_data_key, dbx);
-
   /* Allocate struct to keep track of the symfile.  */
   coff_objfile_data_key.emplace (objfile);
 
index ad2edc3ff4bf11e03f8259ddcc5b0654fbf8b397..307debd2824fa763320e6f18af1e47c45b032095 100644 (file)
@@ -2951,6 +2951,10 @@ coffstab_build_psymtabs (struct objfile *objfile,
   char *name = bfd_get_filename (sym_bfd);
   unsigned int stabsize;
 
+  /* Allocate struct to keep track of stab reading.  */
+  struct dbx_symfile_info *dbx = XCNEW (struct dbx_symfile_info);
+  set_objfile_data (objfile, dbx_objfile_data_key, dbx);
+
   DBX_TEXT_ADDR (objfile) = textaddr;
   DBX_TEXT_SIZE (objfile) = textsize;
 
@@ -3034,6 +3038,12 @@ elfstab_build_psymtabs (struct objfile *objfile, asection *stabsect,
   bfd *sym_bfd = objfile->obfd;
   char *name = bfd_get_filename (sym_bfd);
 
+  stabsread_new_init ();
+
+  /* Allocate struct to keep track of stab reading.  */
+  struct dbx_symfile_info *dbx = XCNEW (struct dbx_symfile_info);
+  set_objfile_data (objfile, dbx_objfile_data_key, dbx);
+
   /* Find the first and last text address.  dbx_symfile_read seems to
      want this.  */
   find_text_range (sym_bfd, objfile);
index cb98b83f74b772cf0ffae2bb89af04b2f5c03627..630550b80dc326416a07aa2febaccfd17b71c5d0 100644 (file)
@@ -29,7 +29,6 @@
 #include "symfile.h"
 #include "objfiles.h"
 #include "stabsread.h"
-#include "gdb-stabs.h"
 #include "complaints.h"
 #include "demangle.h"
 #include "psympriv.h"
@@ -1039,7 +1038,6 @@ elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
   long symcount = 0, dynsymcount = 0, synthcount, storage_needed;
   asymbol **symbol_table = NULL, **dyn_symbol_table = NULL;
   asymbol *synthsyms;
-  struct dbx_symfile_info *dbx;
 
   if (symtab_create_debug)
     {
@@ -1065,10 +1063,6 @@ elf_read_minimal_symbols (struct objfile *objfile, int symfile_flags,
 
   minimal_symbol_reader reader (objfile);
 
-  /* Allocate struct to keep track of the symfile.  */
-  dbx = XCNEW (struct dbx_symfile_info);
-  set_objfile_data (objfile, dbx_objfile_data_key, dbx);
-
   /* Process the normal ELF symbol table first.  */
 
   storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
@@ -1316,15 +1310,11 @@ read_psyms (struct objfile *objfile)
 
 /* Initialize anything that needs initializing when a completely new symbol
    file is specified (not just adding some symbols from another file, e.g. a
-   shared library).
-
-   We reinitialize buildsym, since we may be reading stabs from an ELF
-   file.  */
+   shared library).  */
 
 static void
 elf_new_init (struct objfile *ignore)
 {
-  stabsread_new_init ();
 }
 
 /* Perform any local cleanups required when we are done with a particular