This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
ld --gc-sections and shared libs built with -q
- From: Alan Modra <amodra at gmail dot com>
- To: binutils at sourceware dot org
- Date: Fri, 30 Mar 2012 09:49:46 +1030
- Subject: ld --gc-sections and shared libs built with -q
This cures a linker segfault found when running the gcc testsuite
against libstdc++.so built with --emit-relocations. There isn't any
reason to look into dynamic library relocations (normally there aren't
any non-dynamic ones for --gc-sections to look at), and if we do, ld
uses the wrong symbol table.
Applied.
* elflink.c (_bfd_elf_gc_mark_reloc): Don't delve into dynamic
libraries.
Index: bfd/elflink.c
===================================================================
RCS file: /cvs/src/src/bfd/elflink.c,v
retrieving revision 1.434
diff -u -p -r1.434 elflink.c
--- bfd/elflink.c 23 Mar 2012 09:27:43 -0000 1.434
+++ bfd/elflink.c 29 Mar 2012 22:53:42 -0000
@@ -11590,7 +11590,8 @@ _bfd_elf_gc_mark_reloc (struct bfd_link_
rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie);
if (rsec && !rsec->gc_mark)
{
- if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour)
+ if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour
+ || (rsec->owner->flags & DYNAMIC) != 0)
rsec->gc_mark = 1;
else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook))
return FALSE;
--
Alan Modra
Australia Development Lab, IBM