From 3f1eff0a2c7f0e7078f011f55b8e7f710aae0cc2 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Fri, 19 Nov 2010 22:30:47 +0000 Subject: gdb/ Fix stale memory references. * elfread.c (elf_symfile_read): Replace xmalloc by bfd_alloc, drop xfree, new comment. --- gdb/ChangeLog | 6 ++++++ gdb/elfread.c | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 39d48ef..fcbd31d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,4 +1,10 @@ 2010-11-19 Jan Kratochvil + + Fix stale memory references. + * elfread.c (elf_symfile_read): Replace xmalloc by bfd_alloc, drop + xfree, new comment. + +2010-11-19 Jan Kratochvil Tom Tromey * Makefile.in (.y.c): Directly create $@ from YLWRAP. diff --git a/gdb/elfread.c b/gdb/elfread.c index 270f93f..d607b87 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -790,8 +790,14 @@ elf_symfile_read (struct objfile *objfile, int symfile_flags) if (storage_needed > 0) { - dyn_symbol_table = (asymbol **) xmalloc (storage_needed); - make_cleanup (xfree, dyn_symbol_table); + /* Memory gets permanently referenced from ABFD after + bfd_get_synthetic_symtab so it must not get freed before ABFD gets. + It happens only in the case when elf_slurp_reloc_table sees + asection->relocation NULL. Determining which section is asection is + done by _bfd_elf_get_synthetic_symtab which is all a bfd + implementation detail, though. */ + + dyn_symbol_table = bfd_alloc (abfd, storage_needed); dynsymcount = bfd_canonicalize_dynamic_symtab (objfile->obfd, dyn_symbol_table); -- cgit v1.1