aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2012-08-07 13:47:19 +0000
committerNick Clifton <nickc@redhat.com>2012-08-07 13:47:19 +0000
commita988325c2410b0ce11675fd262940bdc030f6bff (patch)
tree93df8e694479ee61dc37cace2f924872a6762dea /bfd
parent4f69f4c267a21e787685116945fb40729a7297a5 (diff)
downloadgdb-a988325c2410b0ce11675fd262940bdc030f6bff.zip
gdb-a988325c2410b0ce11675fd262940bdc030f6bff.tar.gz
gdb-a988325c2410b0ce11675fd262940bdc030f6bff.tar.bz2
* config/tc-i386.c (lex_got): Provide implementation for PE
format. * gas/i386/secrel.s: Add test of <symbol>@SECREL32. * gas/i386/secrel.d: Add expected disassembly. * scripttempl/pe.sc (R_TLS): Add .tls$AAA and .tls$ZZZ. * scripttempl/pep.sc (R_TLS): Add .tls$AAA and .tls$ZZZ. * archive.c (_bfd_delete_archive_data): New function. * libbfd-in.h (_bfd_delete_archive_data): Declare. * libbfd.h: Rebuild. * opncls.c (_bfd_delete_bfd): Call _bfd_delete_archive_data.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/archive.c13
-rw-r--r--bfd/libbfd-in.h2
-rw-r--r--bfd/libbfd.h2
-rw-r--r--bfd/opncls.c4
5 files changed, 28 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 91a09e6..da2a229 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2012-08-07 Tom Tromey <tromey@redhat.com>
+
+ * archive.c (_bfd_delete_archive_data): New function.
+ * libbfd-in.h (_bfd_delete_archive_data): Declare.
+ * libbfd.h: Rebuild.
+ * opncls.c (_bfd_delete_bfd): Call _bfd_delete_archive_data.
+
2012-08-07 Nick Clifton <nickc@redhat.com>
* po/uk.po: Updated Ukranian translation.
diff --git a/bfd/archive.c b/bfd/archive.c
index fe57755..1148c11 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -293,6 +293,19 @@ bfd_set_archive_head (bfd *output_archive, bfd *new_head)
return TRUE;
}
+/* Free the archive hash table, if it exists. */
+
+void
+_bfd_delete_archive_data (bfd *abfd)
+{
+ struct artdata *ardata = bfd_ardata (abfd);
+
+ BFD_ASSERT (abfd->format == bfd_archive);
+
+ if (ardata && ardata->cache)
+ htab_delete (ardata->cache);
+}
+
bfd *
_bfd_look_for_bfd_in_cache (bfd *arch_bfd, file_ptr filepos)
{
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
index 1495825..8cdb1c6 100644
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
@@ -130,6 +130,8 @@ extern void bfd_release
bfd * _bfd_create_empty_archive_element_shell
(bfd *obfd);
+void _bfd_delete_archive_data
+ (bfd *abfd);
bfd * _bfd_look_for_bfd_in_cache
(bfd *, file_ptr);
bfd_boolean _bfd_add_bfd_to_archive_cache
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index c31780d..a1e544f 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -135,6 +135,8 @@ extern void bfd_release
bfd * _bfd_create_empty_archive_element_shell
(bfd *obfd);
+void _bfd_delete_archive_data
+ (bfd *abfd);
bfd * _bfd_look_for_bfd_in_cache
(bfd *, file_ptr);
bfd_boolean _bfd_add_bfd_to_archive_cache
diff --git a/bfd/opncls.c b/bfd/opncls.c
index 0c02ee4..e538981 100644
--- a/bfd/opncls.c
+++ b/bfd/opncls.c
@@ -130,11 +130,15 @@ _bfd_new_bfd_contained_in (bfd *obfd)
static void
_bfd_delete_bfd (bfd *abfd)
{
+ if (abfd->format == bfd_archive)
+ _bfd_delete_archive_data (abfd);
+
if (abfd->memory)
{
bfd_hash_table_free (&abfd->section_htab);
objalloc_free ((struct objalloc *) abfd->memory);
}
+
free (abfd);
}