aboutsummaryrefslogtreecommitdiff
path: root/bfd/opncls.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2006-04-25 17:46:15 +0000
committerH.J. Lu <hjl.tools@gmail.com>2006-04-25 17:46:15 +0000
commitb25e3d8745c44ea273073a657682137b97a04d1e (patch)
treee0a160144965edf2892e57004a67d7b12d9d81de /bfd/opncls.c
parent1946c96e94f55ec6ebb8dcfc2521f9dd31921f68 (diff)
downloadfsf-binutils-gdb-b25e3d8745c44ea273073a657682137b97a04d1e.zip
fsf-binutils-gdb-b25e3d8745c44ea273073a657682137b97a04d1e.tar.gz
fsf-binutils-gdb-b25e3d8745c44ea273073a657682137b97a04d1e.tar.bz2
2006-04-25 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/2467 * elf.c (_bfd_elf_close_and_cleanup): Check elf_tdata (abfd) is NULL first. * elf32-arm.c (elf32_arm_close_and_cleanup): Check if abfd->sections is NULL. (elf32_arm_bfd_free_cached_info): New. (bfd_elf32_bfd_free_cached_info): Defined. * elfxx-target.h (bfd_elfNN_bfd_free_cached_info): Default it to _bfd_free_cached_info. * libbfd-in.h (_bfd_free_cached_info): New. * libbfd: Regenerated. * opncls.c (_bfd_delete_bfd): Check if abfd->memory is NULL. (_bfd_free_cached_info): New.
Diffstat (limited to 'bfd/opncls.c')
-rw-r--r--bfd/opncls.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/bfd/opncls.c b/bfd/opncls.c
index b02b137..7e62d06 100644
--- a/bfd/opncls.c
+++ b/bfd/opncls.c
@@ -115,11 +115,35 @@ _bfd_new_bfd_contained_in (bfd *obfd)
void
_bfd_delete_bfd (bfd *abfd)
{
- bfd_hash_table_free (&abfd->section_htab);
- objalloc_free ((struct objalloc *) abfd->memory);
+ if (abfd->memory)
+ {
+ bfd_hash_table_free (&abfd->section_htab);
+ objalloc_free ((struct objalloc *) abfd->memory);
+ }
free (abfd);
}
+/* Free objalloc memory. */
+
+bfd_boolean
+_bfd_free_cached_info (bfd *abfd)
+{
+ if (abfd->memory)
+ {
+ bfd_hash_table_free (&abfd->section_htab);
+ objalloc_free ((struct objalloc *) abfd->memory);
+
+ abfd->sections = NULL;
+ abfd->section_last = NULL;
+ abfd->outsymbols = NULL;
+ abfd->tdata.any = NULL;
+ abfd->usrdata = NULL;
+ abfd->memory = NULL;
+ }
+
+ return TRUE;
+}
+
/*
SECTION
Opening and closing BFDs