diff options
author | Alan Modra <amodra@gmail.com> | 2022-01-26 10:31:36 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2022-02-03 13:40:41 +1030 |
commit | 3a3a4c1fe4ccb1914d29fbf8f5930d55aacec78f (patch) | |
tree | d70433071d319f0d23a4f09aa62380be09291430 /ld/testsuite/ld-powerpc/abs-shared-relr.r | |
parent | 36a13a0e62bc672f59c6d27bc2b963edee32b488 (diff) | |
download | gdb-3a3a4c1fe4ccb1914d29fbf8f5930d55aacec78f.zip gdb-3a3a4c1fe4ccb1914d29fbf8f5930d55aacec78f.tar.gz gdb-3a3a4c1fe4ccb1914d29fbf8f5930d55aacec78f.tar.bz2 |
PowerPC64 treatment of absolute symbols
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.
Diffstat (limited to 'ld/testsuite/ld-powerpc/abs-shared-relr.r')
-rw-r--r-- | ld/testsuite/ld-powerpc/abs-shared-relr.r | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/ld/testsuite/ld-powerpc/abs-shared-relr.r b/ld/testsuite/ld-powerpc/abs-shared-relr.r new file mode 100644 index 0000000..978c43a --- /dev/null +++ b/ld/testsuite/ld-powerpc/abs-shared-relr.r @@ -0,0 +1,17 @@ +#source: abs-reloc.s +#as: -a64 +#ld: -melf64ppc -pie --hash-style=sysv -z pack-relative-relocs --defsym a=1 --defsym 'HIDDEN(b=2)' --defsym c=0x123456789abcdef0 +#readelf: -rW + +Relocation section '\.rela\.dyn' at offset .* contains 6 entries: + +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend +0+10408 0+500000026 R_PPC64_ADDR64 0+1 a \+ 0 +0+10430 0+500000014 R_PPC64_GLOB_DAT 0+1 a \+ 0 +0+10440 0+500000026 R_PPC64_ADDR64 0+1 a \+ 0 +0+10418 0+400000026 R_PPC64_ADDR64 123456789abcdef0 c \+ 0 +0+10428 0+400000014 R_PPC64_GLOB_DAT 123456789abcdef0 c \+ 0 +0+10450 0+400000026 R_PPC64_ADDR64 123456789abcdef0 c \+ 0 + +Relocation section '\.relr\.dyn' at offset .* contains 1 entry: + 1 offset +0+10438 |