mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21:49 +08:00
3a3a4c1fe4
Supporting -static-pie on PowerPC64 requires the linker to properly treat SHN_ABS symbols for cases like glibc's _nl_current_LC_CTYPE_used absolute symbol. I've been slow to fix the linker on powerpc because there is some chance that this will break some shared libraries or PIEs. bfd/ * elf64-ppc.c (ppc64_elf_check_relocs): Consolidate local sym handling code. Don't count dyn relocs against non-dynamic absolute symbols. (dec_dynrel_count): Adjust to suit. (ppc64_elf_edit_toc): Don't remove entries for absolute symbols when pic. (allocate_got): Don't allocate space for got relocs against non-dynamic absolute syms. (ppc64_elf_layout_multitoc): Likewise. (got_and_plt_relr): Likewise. (ppc64_elf_size_dynamic_sections): Likewise for local got. (got_and_plt_relr_for_local_syms): Likewise. (ppc64_elf_size_stubs): Don't allocate space for relr either. (ppc64_elf_relocate_section): Don't write relocs against non-dynamic absolute symbols. Don't optimise got and toc code sequences loading absolute symbol entries. ld/ * testsuite/ld-powerpc/abs-reloc.s, * testsuite/ld-powerpc/abs-static.d, * testsuite/ld-powerpc/abs-static.r, * testsuite/ld-powerpc/abs-pie.d, * testsuite/ld-powerpc/abs-pie.r, * testsuite/ld-powerpc/abs-shared.d, * testsuite/ld-powerpc/abs-shared.r, * testsuite/ld-powerpc/abs-pie-relr.d, * testsuite/ld-powerpc/abs-pie-relr.r, * testsuite/ld-powerpc/abs-shared-relr.d, * testsuite/ld-powerpc/abs-shared-relr.r: New tests. * testsuite/ld-powerpc/powerpc.exp: Run them.
33 lines
1.3 KiB
Makefile
33 lines
1.3 KiB
Makefile
#source: abs-reloc.s
|
|
#as: -a64
|
|
#ld: -melf64ppc -static --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0
|
|
#objdump: -sdr
|
|
|
|
#...
|
|
Contents of section \.got:
|
|
.* (00000000 10018100|00810110 00000000) (12345678 9abcdef0|f0debc9a 78563412) .*
|
|
.* (12345678 9abcdef0|f0debc9a 78563412) .*
|
|
Contents of section \.data:
|
|
.* (00000000 10010118|18010110 00000000) (00000000 00000001|01000000 00000000) .*
|
|
.* (00000000 00000002|02000000 00000000) (12345678 9abcdef0|f0debc9a 78563412) .*
|
|
#...
|
|
.* <_start>:
|
|
.*: (3c 40 10 02|02 10 40 3c) lis r2,4098
|
|
.*: (38 42 81 00|00 81 42 38) addi r2,r2,-32512
|
|
.*: (60 00 00 00|00 00 00 60) nop
|
|
.*: (38 62 80 18|18 80 62 38) addi r3,r2,-32744
|
|
.*: (3c 82 ef fe|fe ef 82 3c) addis r4,r2,-4098
|
|
.*: (38 84 7f 01|01 7f 84 38) addi r4,r4,32513
|
|
.*: (3c a2 ef fe|fe ef a2 3c) addis r5,r2,-4098
|
|
.*: (38 a5 7f 02|02 7f a5 38) addi r5,r5,32514
|
|
.*: (60 00 00 00|00 00 00 60) nop
|
|
.*: (e8 c2 80 08|08 80 c2 e8) ld r6,-32760\(r2\)
|
|
.*: (60 00 00 00|00 00 00 60) nop
|
|
.*: (38 e2 80 18|18 80 e2 38) addi r7,r2,-32744
|
|
.*: (3d 02 ef fe|fe ef 02 3d) addis r8,r2,-4098
|
|
.*: (39 08 7f 01|01 7f 08 39) addi r8,r8,32513
|
|
.*: (3d 22 ef fe|fe ef 22 3d) addis r9,r2,-4098
|
|
.*: (39 29 7f 02|02 7f 29 39) addi r9,r9,32514
|
|
.*: (60 00 00 00|00 00 00 60) nop
|
|
.*: (e9 42 80 10|10 80 42 e9) ld r10,-32752\(r2\)
|