powerpc64 automatic multiple toc vs. ld -r
Alan Modra
amodra@gmail.com
Tue Jun 26 01:42:00 GMT 2012
I noticed recently that the code that partitions .got and .toc
sections into toc groups would mistakenly complain with "linker script
separates .got and .toc" if a new group was found to be needed for
anything but the first section of an input file containing multiple
.got/.toc sections. In practise this only happens if you deliberately
create multiple .toc sections, eg. ld -r --unique=*, since .got is
linker created.
* elf64-ppc.c (ppc64_elf_next_toc_section): Don't error if input
file has multiple .got/.toc sections and all don't fit in
current toc group.
Index: bfd/elf64-ppc.c
===================================================================
RCS file: /cvs/src/src/bfd/elf64-ppc.c,v
retrieving revision 1.388
diff -u -p -r1.388 elf64-ppc.c
--- bfd/elf64-ppc.c 22 Jun 2012 05:53:04 -0000 1.388
+++ bfd/elf64-ppc.c 25 Jun 2012 14:58:26 -0000
@@ -10554,7 +10554,9 @@ ppc64_elf_next_toc_section (struct bfd_l
if (!htab->second_toc_pass)
{
/* Keep track of the first .toc or .got section for this input bfd. */
- if (htab->toc_bfd != isec->owner)
+ bfd_boolean new_bfd = htab->toc_bfd != isec->owner;
+
+ if (new_bfd)
{
htab->toc_bfd = isec->owner;
htab->toc_first_sec = isec;
@@ -10582,7 +10584,8 @@ ppc64_elf_next_toc_section (struct bfd_l
/* Die if someone uses a linker script that doesn't keep input
file .toc and .got together. */
- if (elf_gp (isec->owner) != 0
+ if (new_bfd
+ && elf_gp (isec->owner) != 0
&& elf_gp (isec->owner) != off)
return FALSE;
--
Alan Modra
Australia Development Lab, IBM
More information about the Binutils
mailing list