From: Jan Kratochvil Date: Fri, 19 Nov 2010 22:30:47 +0000 (+0000) Subject: gdb/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3f1eff0a2c7f0e7078f011f55b8e7f710aae0cc2;p=binutils-gdb.git gdb/ Fix stale memory references. * elfread.c (elf_symfile_read): Replace xmalloc by bfd_alloc, drop xfree, new comment. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 39d48ef35ae..fcbd31d52a6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +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 diff --git a/gdb/elfread.c b/gdb/elfread.c index 270f93feff8..d607b874d35 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);