This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH 3/5] remove deleted BFDs from the archive cache
On Thu, Aug 16, 2012 at 10:04 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Thu, Aug 16, 2012 at 8:53 PM, Hans-Peter Nilsson
> <hans-peter.nilsson@axis.com> wrote:
>> (Just replying to the last message in the thread)
>>
>>> xcalloc shouldn't be called from within bfd. I've already committed a
>>> kneejerk patch to revert Tom's last change, instead using bfd_zmalloc
>>> here. Tom said he'd look into fixing the leak this causes, so I'm
>>> happy to leave that to him. :)
>>
>> The last I see is (2012-08-17-02:39:34 UTC)
>>
>> bfd:
>> 2012-08-17 Yuri Chornoivan <yurchor@ukr.net>
>>
>> * elf-bfd.h, * elf32-ppc.c, * elf64-ia64-vms.c, * elfnn-ia64.c,
>> * elfxx-mips.c, * vms-alpha.c: Typo fixes.
>>
>> 2012-08-17 Alan Modra <amodra@gmail.com>
>>
>> PR binutils/14475:
>> * archive.c (bfd_ar_hdr_from_filesystem): Revert last change.
>> Instead malloc areltdata.
>>
>> binutils:
>> 2012-08-17 Yuri Chornoivan <yurchor@ukr.net>
>>
>> * doc/binutils.texi, * objdump.c, * od-xcoff.c: Typo fixes.
>>
>> 2012-08-16 H.J. Lu <hongjiu.lu@intel.com>
>>
>> PR binutils/14481
>> * Makefile.am (BFDTEST1_PROG): New.
>> (TEST_PROGS): Likewise.
>> (bfdtest1_DEPENDENCIES): Likewise.
>> (noinst_PROGRAMS): Add $(TEST_PROGS).
>> * Makefile.in: Regenerated.
>>
>> * bfdtest1.c: New file.
>>
>> With this I still see FAILS for cris-elf and cris-linux-gnu (but
>> not for arm-unknown-eabi, mipsisa32r2el-unknown-linux-gnu,
>> mmix-knuth-mmixware):
This should be a clue.
>> Running /tmp/hpautotest-binutils/bsrc/src/binutils/testsuite/binutils-all/ar.exp ...
>> FAIL: ar long file names (bfdtest1)
>> FAIL: ar thin archive (bfdtest1)
This fixes it.
--
H.J.
---
diff --git a/bfd/aoutx.h b/bfd/aoutx.h
index 1e0ad38..8e3f476 100644
--- a/bfd/aoutx.h
+++ b/bfd/aoutx.h
@@ -2846,26 +2846,26 @@ NAME (aout, bfd_free_cached_info) (bfd *abfd)
{
asection *o;
- if (bfd_get_format (abfd) != bfd_object
- || abfd->tdata.aout_data == NULL)
- return TRUE;
-
+ if (bfd_get_format (abfd) == bfd_object
+ && abfd->tdata.aout_data != NULL)
+ {
#define BFCI_FREE(x) if (x != NULL) { free (x); x = NULL; }
- BFCI_FREE (obj_aout_symbols (abfd));
+ BFCI_FREE (obj_aout_symbols (abfd));
#ifdef USE_MMAP
- obj_aout_external_syms (abfd) = 0;
- bfd_free_window (&obj_aout_sym_window (abfd));
- bfd_free_window (&obj_aout_string_window (abfd));
- obj_aout_external_strings (abfd) = 0;
+ obj_aout_external_syms (abfd) = 0;
+ bfd_free_window (&obj_aout_sym_window (abfd));
+ bfd_free_window (&obj_aout_string_window (abfd));
+ obj_aout_external_strings (abfd) = 0;
#else
- BFCI_FREE (obj_aout_external_syms (abfd));
- BFCI_FREE (obj_aout_external_strings (abfd));
+ BFCI_FREE (obj_aout_external_syms (abfd));
+ BFCI_FREE (obj_aout_external_strings (abfd));
#endif
- for (o = abfd->sections; o != NULL; o = o->next)
- BFCI_FREE (o->relocation);
+ for (o = abfd->sections; o != NULL; o = o->next)
+ BFCI_FREE (o->relocation);
#undef BFCI_FREE
+ }
- return TRUE;
+ return _bfd_generic_close_and_cleanup (abfd);
}
/* a.out link code. */