[v2,08/12] Allocate the address map on the psymtab obstack

Message ID 20181125192043.8405-9-tom@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey Nov. 25, 2018, 7:20 p.m. UTC
  After this patch, the psymtab address map will now be allocated on the
psymtab obstack rather than the objfile obstack.  This also changes
the psymtab storage object to make the obstack private; this will be
used later.

gdb/ChangeLog
2018-11-25  Tom Tromey  <tom@tromey.com>

	* psymtab.h (psymtab_storage::obstack): New method.
	<m_obstack>: Rename from obstack; now private.
	* psymtab.c (psymtab_storage): Update.
	* dwarf2read.c (create_addrmap_from_index)
	(create_addrmap_from_aranges, dwarf2_build_psymtabs_hard):
	Update.
---
 gdb/ChangeLog    |  9 +++++++++
 gdb/dwarf2read.c |  6 +++---
 gdb/psymtab.c    |  4 ++--
 gdb/psymtab.h    | 17 +++++++++++++----
 4 files changed, 27 insertions(+), 9 deletions(-)
  

Patch

diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 26fc47b669..35717aa6a3 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -3191,7 +3191,7 @@  create_addrmap_from_index (struct dwarf2_per_objfile *dwarf2_per_objfile,
     }
 
   objfile->partial_symtabs->psymtabs_addrmap
-    = addrmap_create_fixed (mutable_map, &objfile->objfile_obstack);
+    = addrmap_create_fixed (mutable_map, objfile->partial_symtabs->obstack ());
 }
 
 /* Read the address map data from DWARF-5 .debug_aranges, and use it to
@@ -3352,7 +3352,7 @@  create_addrmap_from_aranges (struct dwarf2_per_objfile *dwarf2_per_objfile,
     }
 
   objfile->partial_symtabs->psymtabs_addrmap
-    = addrmap_create_fixed (mutable_map, &objfile->objfile_obstack);
+    = addrmap_create_fixed (mutable_map, objfile->partial_symtabs->obstack ());
 }
 
 /* Find a slot in the mapped index INDEX for the object named NAME.
@@ -8485,7 +8485,7 @@  dwarf2_build_psymtabs_hard (struct dwarf2_per_objfile *dwarf2_per_objfile)
 
   objfile->partial_symtabs->psymtabs_addrmap
     = addrmap_create_fixed (objfile->partial_symtabs->psymtabs_addrmap,
-			    &objfile->objfile_obstack);
+			    objfile->partial_symtabs->obstack ());
   /* At this point we want to keep the address map.  */
   save_psymtabs_addrmap.release ();
 
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index c06ff0c70e..d4152bdba4 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -68,8 +68,8 @@  static struct compunit_symtab *psymtab_to_symtab (struct objfile *objfile,
 
 
 psymtab_storage::psymtab_storage (struct objfile *objfile)
-  : obstack (&objfile->objfile_obstack),
-    psymbol_cache (psymbol_bcache_init ())
+  : psymbol_cache (psymbol_bcache_init ()),
+    m_obstack (&objfile->objfile_obstack)
 {
 }
 
diff --git a/gdb/psymtab.h b/gdb/psymtab.h
index 7bdb9d185f..d0b446b5ed 100644
--- a/gdb/psymtab.h
+++ b/gdb/psymtab.h
@@ -54,6 +54,13 @@  public:
 
   void discard_psymtab (struct partial_symtab *pst);
 
+  /* Return the obstack that is used for storage by this object.  */
+
+  struct obstack *obstack ()
+  {
+    return m_obstack;
+  }
+
 
   /* Each objfile points to a linked list of partial symtabs derived from
      this file, one partial symtab structure for each compilation unit
@@ -72,10 +79,6 @@  public:
 
   struct partial_symtab *free_psymtabs = nullptr;
 
-  /* The obstack where allocations are made.  */
-
-  struct obstack *obstack;
-
   /* A byte cache where we can stash arbitrary "chunks" of bytes that
      will not change.  */
 
@@ -86,6 +89,12 @@  public:
 
   std::vector<partial_symbol *> global_psymbols;
   std::vector<partial_symbol *> static_psymbols;
+
+private:
+
+  /* The obstack where allocations are made.  */
+
+  struct obstack *m_obstack;
 };