From fe3e1990b3ea81a95d90721f8e86fb5a10f76ba1 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Mon, 22 Oct 2007 01:16:34 +0000 Subject: [PATCH] * coffread.c (coff_symfile_finish): Call dwarf2_free_objfile. * dwarf2read.c (dwarf2_free_objfile): New. * elfread.c (elf_symfile_finish): Call dwarf2_free_objfile. * symfile.h (dwarf2_free_objfile): Declare. --- gdb/ChangeLog | 7 +++++++ gdb/coffread.c | 2 ++ gdb/dwarf2read.c | 16 ++++++++++++++++ gdb/elfread.c | 2 ++ gdb/symfile.h | 2 ++ 5 files changed, 29 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2ad5ec2f6e..6ce0ef949e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2007-10-21 Daniel Jacobowitz + + * coffread.c (coff_symfile_finish): Call dwarf2_free_objfile. + * dwarf2read.c (dwarf2_free_objfile): New. + * elfread.c (elf_symfile_finish): Call dwarf2_free_objfile. + * symfile.h (dwarf2_free_objfile): Declare. + 2007-10-21 Joel Brobecker * hppa-hpux-nat.c (hppa_hpux_store_register): Add missing semi-colon. diff --git a/gdb/coffread.c b/gdb/coffread.c index c4927490b9..d1a4246822 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -665,6 +665,8 @@ coff_symfile_finish (struct objfile *objfile) /* Let stabs reader clean up */ stabsread_clear_cache (); + + dwarf2_free_objfile (objfile); } diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index e5e8aa4aa2..dbbe019d14 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -9964,6 +9964,22 @@ free_one_cached_comp_unit (void *target_cu) } } +/* Release all extra memory associated with OBJFILE. */ + +void +dwarf2_free_objfile (struct objfile *objfile) +{ + dwarf2_per_objfile = objfile_data (objfile, dwarf2_objfile_data_key); + + if (dwarf2_per_objfile == NULL) + return; + + /* Cached DIE trees use xmalloc and the comp_unit_obstack. */ + free_cached_comp_units (NULL); + + /* Everything else should be on the objfile obstack. */ +} + /* A pair of DIE offset and GDB type pointer. We store these in a hash table separate from the DIEs, and preserve them when the DIEs are flushed out of cache. */ diff --git a/gdb/elfread.c b/gdb/elfread.c index 7b317b8675..e479a7698a 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -709,6 +709,8 @@ elf_symfile_finish (struct objfile *objfile) { xfree (objfile->deprecated_sym_stab_info); } + + dwarf2_free_objfile (objfile); } /* ELF specific initialization routine for reading symbols. diff --git a/gdb/symfile.h b/gdb/symfile.h index fd14215c7b..8876df29dd 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -365,6 +365,8 @@ extern int dwarf2_has_info (struct objfile *); extern void dwarf2_build_psymtabs (struct objfile *, int); extern void dwarf2_build_frame_info (struct objfile *); +void dwarf2_free_objfile (struct objfile *); + /* From mdebugread.c */ /* Hack to force structures to exist before use in parameter list. */ -- 2.34.1