diff options
author | Tom Tromey <tromey@redhat.com> | 2010-06-17 17:36:54 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2010-06-17 17:36:54 +0000 |
commit | 60606b2c71756935d1f399d04f26d30352e44fc1 (patch) | |
tree | f50dea0c14b630489e84812a42e1b08a4aa1f643 | |
parent | 83bcb37903a025de78f588e13081a2af9406c835 (diff) | |
download | gdb-60606b2c71756935d1f399d04f26d30352e44fc1.zip gdb-60606b2c71756935d1f399d04f26d30352e44fc1.tar.gz gdb-60606b2c71756935d1f399d04f26d30352e44fc1.tar.bz2 |
* dwarf2read.c (psymtabs_addrmap_cleanup): New function.
(dwarf2_build_psymtabs_hard): Use it. Create addrmap on a
temporary obstack.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/dwarf2read.c | 21 |
2 files changed, 24 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5079f8a..db4a2c5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2010-06-17 Tom Tromey <tromey@redhat.com> + + * dwarf2read.c (psymtabs_addrmap_cleanup): New function. + (dwarf2_build_psymtabs_hard): Use it. Create addrmap on a + temporary obstack. + 2010-06-16 Sergio Durigan Junior <sergiodj@redhat.com> Jan Kratochvil <jan.kratochvil@redhat.com> diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 297138c..9723ea2 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -1995,6 +1995,15 @@ build_type_psymtabs (struct objfile *objfile) process_type_comp_unit, objfile); } +/* A cleanup function that clears objfile's psymtabs_addrmap field. */ + +static void +psymtabs_addrmap_cleanup (void *o) +{ + struct objfile *objfile = o; + objfile->psymtabs_addrmap = NULL; +} + /* Build the partial symbol table by doing a quick pass through the .debug_info and .debug_abbrev sections. */ @@ -2002,7 +2011,8 @@ static void dwarf2_build_psymtabs_hard (struct objfile *objfile) { gdb_byte *info_ptr; - struct cleanup *back_to; + struct cleanup *back_to, *addrmap_cleanup; + struct obstack temp_obstack; dwarf2_read_section (objfile, &dwarf2_per_objfile->info); info_ptr = dwarf2_per_objfile->info.buffer; @@ -2015,8 +2025,12 @@ dwarf2_build_psymtabs_hard (struct objfile *objfile) create_all_comp_units (objfile); - objfile->psymtabs_addrmap = - addrmap_create_mutable (&objfile->objfile_obstack); + /* Create a temporary address map on a temporary obstack. We later + copy this to the final obstack. */ + obstack_init (&temp_obstack); + make_cleanup_obstack_free (&temp_obstack); + objfile->psymtabs_addrmap = addrmap_create_mutable (&temp_obstack); + addrmap_cleanup = make_cleanup (psymtabs_addrmap_cleanup, objfile); /* Since the objects we're extracting from .debug_info vary in length, only the individual functions to extract them (like @@ -2048,6 +2062,7 @@ dwarf2_build_psymtabs_hard (struct objfile *objfile) objfile->psymtabs_addrmap = addrmap_create_fixed (objfile->psymtabs_addrmap, &objfile->objfile_obstack); + discard_cleanups (addrmap_cleanup); do_cleanups (back_to); } |