symfile, vdso: remove target sections
Target sections added by the add-symbol-file-from-memory command are not removed when the process exits. In fact, they are not removed, at all. This causes GDB to crash in gdb.base/break-interp.exp. Change the owner of those target sections to the object file generated in symbol_file_add_from_memory and generalize the free_objfile observer in symfile.c to remove target sections of any freed object file.
This commit is contained in:
parent
34fd659b79
commit
c33b2f1258
3 changed files with 10 additions and 19 deletions
|
@ -1,3 +1,10 @@
|
|||
2014-06-06 Markus Metzger <markus.t.metzger@intel.com>
|
||||
|
||||
* symfile.c (symfile_free_objfile): Remove restriction to
|
||||
OBJF_USERLOADED.
|
||||
* symfile-mem.c (symbol_file_add_from_memory): Call
|
||||
add_target_sections_of_objfile.
|
||||
|
||||
2014-06-05 Ludovic Courtès <ludo@gnu.org>
|
||||
|
||||
* guile/scm-value.c (gdbscm_history_append_x): Use
|
||||
|
|
|
@ -92,7 +92,6 @@ symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr,
|
|||
struct section_addr_info *sai;
|
||||
unsigned int i;
|
||||
struct cleanup *cleanup;
|
||||
struct target_section *sections, *sections_end, *tsec;
|
||||
|
||||
if (bfd_get_flavour (templ) != bfd_target_elf_flavour)
|
||||
error (_("add-symbol-file-from-memory not supported for this target"));
|
||||
|
@ -132,22 +131,7 @@ symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr,
|
|||
from_tty ? SYMFILE_VERBOSE : 0,
|
||||
sai, OBJF_SHARED, NULL);
|
||||
|
||||
sections = NULL;
|
||||
sections_end = NULL;
|
||||
|
||||
if (build_section_table (nbfd, §ions, §ions_end) == 0)
|
||||
{
|
||||
make_cleanup (xfree, sections);
|
||||
|
||||
/* Adjust the target section addresses by the load address. */
|
||||
for (tsec = sections; tsec != sections_end; ++tsec)
|
||||
{
|
||||
tsec->addr += loadbase;
|
||||
tsec->endaddr += loadbase;
|
||||
}
|
||||
|
||||
add_target_sections (&nbfd, sections, sections_end);
|
||||
}
|
||||
add_target_sections_of_objfile (objf);
|
||||
|
||||
/* This might change our ideas about frames already looked at. */
|
||||
reinit_frame_cache ();
|
||||
|
|
|
@ -3892,8 +3892,8 @@ symfile_find_segment_sections (struct objfile *objfile)
|
|||
static void
|
||||
symfile_free_objfile (struct objfile *objfile)
|
||||
{
|
||||
/* Remove the target sections of user-added objfiles. */
|
||||
if (objfile != 0 && objfile->flags & OBJF_USERLOADED)
|
||||
/* Remove the target sections owned by this objfile. */
|
||||
if (objfile != NULL)
|
||||
remove_target_sections ((void *) objfile);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue