]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
ppc476 linker workaround shared lib fixes
authorAlan Modra <amodra@gmail.com>
Fri, 5 Jun 2015 09:05:40 +0000 (18:35 +0930)
committerAlan Modra <amodra@gmail.com>
Fri, 10 Jul 2015 10:27:37 +0000 (19:57 +0930)
commit2bc6144cb70a4bd4129d12afe3313a20235fc31e
treeefa370fc907752efe1a9f0a07f24de20c570e9fa
parent21d697be19adab1b6df7090f05c629b0003adfa4
ppc476 linker workaround shared lib fixes

When building a shared lib from non-PIC objects, we'll get dynamic
text relocations.  These need to move with any insns we move.
Otherwise the dynamic reloc will modify the branch, resulting in
crashes and other unpleasant behaviour.

Also, ld -r --ppc476-workaround used with sufficiently aligned PIC
objects needs a fix for emitted REL16 relocs.

bfd/
* elf64-ppc.c (ppc_elf_relocate_section): Move dynamic text
relocs with insns moved by --ppc476-workaround.  Correct
output of REL16 relocs.
ld/testsuite/
* ld-powerpc/ppc476-shared.s,
* ld-powerpc/ppc476-shared.lnk,
* ld-powerpc/ppc476-shared.d,
* ld-powerpc/ppc476-shared2.d: New tests.
* ld-powerpc/powerpc.exp: Run them.
bfd/ChangeLog
bfd/elf32-ppc.c
ld/testsuite/ChangeLog
ld/testsuite/ld-powerpc/powerpc.exp
ld/testsuite/ld-powerpc/ppc476-shared.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/ppc476-shared.lnk [new file with mode: 0644]
ld/testsuite/ld-powerpc/ppc476-shared.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/ppc476-shared2.d [new file with mode: 0644]