diff options
author | Ilya Leoshkevich <iii@linux.ibm.com> | 2024-06-10 15:33:48 +0200 |
---|---|---|
committer | Ilya Leoshkevich <iii@linux.ibm.com> | 2024-06-10 22:37:06 +0200 |
commit | 48e63b875381cdb7acaa8ec27b0a426e5eff6b7d (patch) | |
tree | fb55508b27f9efe39635cdf7a34cfe2064459fce /bfd | |
parent | c4c093a31f6252df4ce7b1e23da4a4290c852c51 (diff) | |
download | gdb-48e63b875381cdb7acaa8ec27b0a426e5eff6b7d.zip gdb-48e63b875381cdb7acaa8ec27b0a426e5eff6b7d.tar.gz gdb-48e63b875381cdb7acaa8ec27b0a426e5eff6b7d.tar.bz2 |
IBM zSystems: Rewrite l(g)rl @GOTENT to larl for --no-pie
Regtested on s390x-redhat-linux.
Rewriting l(g)rl @GOTENT to larl is unnecessarily guarded by
bfd_link_pic(). There were no use cases for this in the past, but
since recently the Linux Kernel on s390x is compiled with -fPIE
and linked with --no-pie. Remove the unnecessary bfd_link_pic()
check.
bfd/ChangeLog:
* elf32-s390.c (elf_s390_relocate_section): Don't check for
bfd_link_pic() when rewriting lrl@GOTENT to larl.
(elf_s390_finish_dynamic_symbol): Emit a relative reloc for
the above case.
* elf64-s390.c (elf_s390_relocate_section): Don't check for
bfd_link_pic() when rewriting lgrl@GOTENT to larl.
(elf_s390_finish_dynamic_symbol): Emit a relative reloc for
the above case.
ld/ChangeLog:
* testsuite/ld-s390/s390.exp: Hook up the new tests.
* testsuite/ld-s390/gotreloc_31-no-pie-1.dd: New test.
* testsuite/ld-s390/gotreloc_64-no-pie-1.dd: New test.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/elf32-s390.c | 7 | ||||
-rw-r--r-- | bfd/elf64-s390.c | 11 |
2 files changed, 6 insertions, 12 deletions
diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c index 2b97b7d..702b023 100644 --- a/bfd/elf32-s390.c +++ b/bfd/elf32-s390.c @@ -2236,8 +2236,7 @@ elf_s390_relocate_section (bfd *output_bfd, else if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) - || (bfd_link_pic (info) - && SYMBOL_REFERENCES_LOCAL (info, h)) + || SYMBOL_REFERENCES_LOCAL (info, h) || resolved_to_zero) { /* This is actually a static link, or it is a @@ -2262,7 +2261,6 @@ elf_s390_relocate_section (bfd *output_bfd, } if ((h->def_regular - && bfd_link_pic (info) && SYMBOL_REFERENCES_LOCAL (info, h)) /* lrl rx,sym@GOTENT -> larl rx, sym */ && ((r_type == R_390_GOTENT @@ -3492,8 +3490,7 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd, return true; } } - else if (bfd_link_pic (info) - && SYMBOL_REFERENCES_LOCAL (info, h)) + else if (SYMBOL_REFERENCES_LOCAL (info, h)) { if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) return true; diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index d3b6e17..05dd4e8 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -2222,8 +2222,7 @@ elf_s390_relocate_section (bfd *output_bfd, else if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h) - || (bfd_link_pic (info) - && SYMBOL_REFERENCES_LOCAL (info, h)) + || SYMBOL_REFERENCES_LOCAL (info, h) || resolved_to_zero) { Elf_Internal_Sym *isym; @@ -2254,9 +2253,8 @@ elf_s390_relocate_section (bfd *output_bfd, reference using larl we have to make sure that the symbol is 1. properly aligned and 2. it is no ABS symbol or will become one. */ - if ((h->def_regular - && bfd_link_pic (info) - && SYMBOL_REFERENCES_LOCAL (info, h)) + if (h->def_regular + && SYMBOL_REFERENCES_LOCAL (info, h) /* lgrl rx,sym@GOTENT -> larl rx, sym */ && ((r_type == R_390_GOTENT && (bfd_get_16 (input_bfd, @@ -3414,8 +3412,7 @@ elf_s390_finish_dynamic_symbol (bfd *output_bfd, return true; } } - else if (bfd_link_pic (info) - && SYMBOL_REFERENCES_LOCAL (info, h)) + else if (SYMBOL_REFERENCES_LOCAL (info, h)) { if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)) return true; |