aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorIlya Leoshkevich <iii@linux.ibm.com>2024-06-10 15:33:48 +0200
committerIlya Leoshkevich <iii@linux.ibm.com>2024-06-10 22:37:06 +0200
commit48e63b875381cdb7acaa8ec27b0a426e5eff6b7d (patch)
treefb55508b27f9efe39635cdf7a34cfe2064459fce /bfd
parentc4c093a31f6252df4ce7b1e23da4a4290c852c51 (diff)
downloadgdb-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.c7
-rw-r--r--bfd/elf64-s390.c11
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;