* [PATCH 1/2] [PR ld/22263] s390: Avoid dynamic TLS relocs in PIE
@ 2022-04-28 8:19 Stefan Liebler
2022-04-28 8:19 ` [PATCH 2/2] s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie Stefan Liebler
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Stefan Liebler @ 2022-04-28 8:19 UTC (permalink / raw)
To: binutils; +Cc: krebbel, Stefan Liebler
No dynamic relocs are needed for TLS defined in an executable, the
TP relative offset is known at link time.
Fixes
FAIL: Build pr22263-1
bfd/
PR ld/22263
* elf64-s390.c (elf_s390_tls_transition): Use bfd_link_dll
instead of bfd_link_pic for TLS.
(elf_s390_check_relocs): Likewise.
(allocate_dynrelocs): Likewise.
(elf_s390_relocate_section): Likewise.
---
bfd/elf64-s390.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
index e780efa7181..00ee386baab 100644
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -774,7 +774,7 @@ elf_s390_tls_transition (struct bfd_link_info *info,
int r_type,
int is_local)
{
- if (bfd_link_pic (info))
+ if (bfd_link_dll (info))
return r_type;
switch (r_type)
@@ -1026,7 +1026,7 @@ elf_s390_check_relocs (bfd *abfd,
case R_390_TLS_GOTIE20:
case R_390_TLS_GOTIE64:
case R_390_TLS_IEENT:
- if (bfd_link_pic (info))
+ if (bfd_link_dll (info))
info->flags |= DF_STATIC_TLS;
/* Fall through */
@@ -1107,7 +1107,7 @@ elf_s390_check_relocs (bfd *abfd,
if (r_type == R_390_TLS_LE64 && bfd_link_pie (info))
break;
- if (!bfd_link_pic (info))
+ if (!bfd_link_dll (info))
break;
info->flags |= DF_STATIC_TLS;
/* Fall through */
@@ -1571,7 +1571,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h,
to R_390_TLS_LE64 requiring no TLS entry. For GOTIE12 and IEENT
we can save the dynamic TLS relocation. */
if (h->got.refcount > 0
- && !bfd_link_pic (info)
+ && !bfd_link_dll (info)
&& h->dynindx == -1
&& elf_s390_hash_entry(h)->tls_type >= GOT_TLS_IE)
{
@@ -2662,7 +2662,7 @@ elf_s390_relocate_section (bfd *output_bfd,
/* Relocations for tls literal pool entries. */
case R_390_TLS_IE64:
- if (bfd_link_pic (info))
+ if (bfd_link_dll (info))
{
Elf_Internal_Rela outrel;
asection *sreloc;
@@ -2690,7 +2690,7 @@ elf_s390_relocate_section (bfd *output_bfd,
else if (h != NULL)
{
tls_type = elf_s390_hash_entry(h)->tls_type;
- if (!bfd_link_pic (info) && h->dynindx == -1 && tls_type >= GOT_TLS_IE)
+ if (!bfd_link_dll (info) && h->dynindx == -1 && tls_type >= GOT_TLS_IE)
r_type = R_390_TLS_LE64;
}
if (r_type == R_390_TLS_GD64 && tls_type >= GOT_TLS_IE)
@@ -2801,14 +2801,14 @@ elf_s390_relocate_section (bfd *output_bfd,
if (local_got_offsets == NULL)
abort();
off = local_got_offsets[r_symndx];
- if (bfd_link_pic (info))
+ if (bfd_link_dll (info))
goto emit_tls_relocs;
}
else
{
off = h->got.offset;
tls_type = elf_s390_hash_entry(h)->tls_type;
- if (bfd_link_pic (info) || h->dynindx != -1 || tls_type < GOT_TLS_IE)
+ if (bfd_link_dll (info) || h->dynindx != -1 || tls_type < GOT_TLS_IE)
goto emit_tls_relocs;
}
@@ -2825,7 +2825,7 @@ elf_s390_relocate_section (bfd *output_bfd,
break;
case R_390_TLS_LDM64:
- if (! bfd_link_pic (info))
+ if (! bfd_link_dll (info))
/* The literal pool entry this relocation refers to gets ignored
by the optimized code of the local exec model. Do nothing
and the value will turn out zero. */
@@ -2900,7 +2900,7 @@ elf_s390_relocate_section (bfd *output_bfd,
continue;
case R_390_TLS_LDO64:
- if (bfd_link_pic (info) || (input_section->flags & SEC_DEBUGGING))
+ if (bfd_link_dll (info) || (input_section->flags & SEC_DEBUGGING))
relocation -= dtpoff_base (info);
else
/* When converting LDO to LE, we must negate. */
@@ -2922,7 +2922,7 @@ elf_s390_relocate_section (bfd *output_bfd,
if (r_type == R_390_TLS_LOAD)
{
- if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1))
+ if (!bfd_link_dll (info) && (h == NULL || h->dynindx == -1))
{
/* IE->LE transition. Four valid cases:
lg %rx,(0,%ry) -> sllg %rx,%ry,0
@@ -2972,7 +2972,7 @@ elf_s390_relocate_section (bfd *output_bfd,
invalid_tls_insn (input_bfd, input_section, rel);
return false;
}
- if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1))
+ if (!bfd_link_dll (info) && (h == NULL || h->dynindx == -1))
{
/* GD->LE transition.
brasl %r14,__tls_get_addr@plt -> brcl 0,. */
@@ -2991,7 +2991,7 @@ elf_s390_relocate_section (bfd *output_bfd,
}
else if (r_type == R_390_TLS_LDCALL)
{
- if (!bfd_link_pic (info))
+ if (!bfd_link_dll (info))
{
unsigned int insn0, insn1;
--
2.33.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/2] s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie
2022-04-28 8:19 [PATCH 1/2] [PR ld/22263] s390: Avoid dynamic TLS relocs in PIE Stefan Liebler
@ 2022-04-28 8:19 ` Stefan Liebler
2022-04-28 8:27 ` Andreas Krebbel
2022-04-28 12:56 ` Andreas Krebbel
2022-04-28 8:26 ` [PATCH 1/2] [PR ld/22263] s390: Avoid dynamic TLS relocs in PIE Andreas Krebbel
2022-04-28 12:55 ` Andreas Krebbel
2 siblings, 2 replies; 6+ messages in thread
From: Stefan Liebler @ 2022-04-28 8:19 UTC (permalink / raw)
To: binutils; +Cc: krebbel, Stefan Liebler
In static-pie case, there are IRELATIVE-relocs in
.rela.iplt (htab->irelplt), which will later be grouped
to .rela.plt. On s390, the IRELATIVE relocations are
always located in .rela.iplt - even for non-static case.
Ensure that DT_JMPREL, DT_PLTRELA, DT_PLTRELASZ is added
to the dynamic section even if htab->srelplt->size == 0.
See _bfd_elf_add_dynamic_tags in bfd/elflink.c.
bfd/
elf64-s390.c (elf_s390_size_dynamic_sections):
Enforce DT_JMPREL via htab->elf.dt_jmprel_required.
---
bfd/elf64-s390.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
index 00ee386baab..0b851f7ac0e 100644
--- a/bfd/elf64-s390.c
+++ b/bfd/elf64-s390.c
@@ -1876,7 +1876,20 @@ elf_s390_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
else if (startswith (bfd_section_name (s), ".rela"))
{
if (s->size != 0 && s != htab->elf.srelplt)
- relocs = true;
+ {
+ relocs = true;
+ if (s == htab->elf.irelplt)
+ {
+ /* In static-pie case, there are IRELATIVE-relocs in
+ .rela.iplt (htab->irelplt), which will later be grouped
+ to .rela.plt. On s390, the IRELATIVE relocations are
+ always located in .rela.iplt - even for non-static case.
+ Ensure that DT_JMPREL, DT_PLTRELA, DT_PLTRELASZ is added
+ to the dynamic section even if htab->srelplt->size == 0.
+ See _bfd_elf_add_dynamic_tags in bfd/elflink.c. */
+ htab->elf.dt_jmprel_required = true;
+ }
+ }
/* We use the reloc_count field as a counter if we need
to copy relocs into the output file. */
--
2.33.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] [PR ld/22263] s390: Avoid dynamic TLS relocs in PIE
2022-04-28 8:19 [PATCH 1/2] [PR ld/22263] s390: Avoid dynamic TLS relocs in PIE Stefan Liebler
2022-04-28 8:19 ` [PATCH 2/2] s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie Stefan Liebler
@ 2022-04-28 8:26 ` Andreas Krebbel
2022-04-28 12:55 ` Andreas Krebbel
2 siblings, 0 replies; 6+ messages in thread
From: Andreas Krebbel @ 2022-04-28 8:26 UTC (permalink / raw)
To: Stefan Liebler, binutils
On 4/28/22 10:19, Stefan Liebler wrote:
> No dynamic relocs are needed for TLS defined in an executable, the
> TP relative offset is known at link time.
>
> Fixes
> FAIL: Build pr22263-1
>
> bfd/
> PR ld/22263
> * elf64-s390.c (elf_s390_tls_transition): Use bfd_link_dll
> instead of bfd_link_pic for TLS.
> (elf_s390_check_relocs): Likewise.
> (allocate_dynrelocs): Likewise.
> (elf_s390_relocate_section): Likewise.
Ok. Thanks!
Bye,
Andreas
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie
2022-04-28 8:19 ` [PATCH 2/2] s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie Stefan Liebler
@ 2022-04-28 8:27 ` Andreas Krebbel
2022-04-28 12:56 ` Andreas Krebbel
1 sibling, 0 replies; 6+ messages in thread
From: Andreas Krebbel @ 2022-04-28 8:27 UTC (permalink / raw)
To: Stefan Liebler, binutils
On 4/28/22 10:19, Stefan Liebler wrote:
> In static-pie case, there are IRELATIVE-relocs in
> .rela.iplt (htab->irelplt), which will later be grouped
> to .rela.plt. On s390, the IRELATIVE relocations are
> always located in .rela.iplt - even for non-static case.
> Ensure that DT_JMPREL, DT_PLTRELA, DT_PLTRELASZ is added
> to the dynamic section even if htab->srelplt->size == 0.
> See _bfd_elf_add_dynamic_tags in bfd/elflink.c.
>
> bfd/
> elf64-s390.c (elf_s390_size_dynamic_sections):
> Enforce DT_JMPREL via htab->elf.dt_jmprel_required.
Ok. Thanks!
Bye,
Andreas
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] [PR ld/22263] s390: Avoid dynamic TLS relocs in PIE
2022-04-28 8:19 [PATCH 1/2] [PR ld/22263] s390: Avoid dynamic TLS relocs in PIE Stefan Liebler
2022-04-28 8:19 ` [PATCH 2/2] s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie Stefan Liebler
2022-04-28 8:26 ` [PATCH 1/2] [PR ld/22263] s390: Avoid dynamic TLS relocs in PIE Andreas Krebbel
@ 2022-04-28 12:55 ` Andreas Krebbel
2 siblings, 0 replies; 6+ messages in thread
From: Andreas Krebbel @ 2022-04-28 12:55 UTC (permalink / raw)
To: Stefan Liebler, binutils
On 4/28/22 10:19, Stefan Liebler wrote:
> No dynamic relocs are needed for TLS defined in an executable, the
> TP relative offset is known at link time.
>
> Fixes
> FAIL: Build pr22263-1
>
> bfd/
> PR ld/22263
> * elf64-s390.c (elf_s390_tls_transition): Use bfd_link_dll
> instead of bfd_link_pic for TLS.
> (elf_s390_check_relocs): Likewise.
> (allocate_dynrelocs): Likewise.
> (elf_s390_relocate_section): Likewise.
Committed to master, 2.38, and 2.37 branch. Thanks!
Andreas
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie
2022-04-28 8:19 ` [PATCH 2/2] s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie Stefan Liebler
2022-04-28 8:27 ` Andreas Krebbel
@ 2022-04-28 12:56 ` Andreas Krebbel
1 sibling, 0 replies; 6+ messages in thread
From: Andreas Krebbel @ 2022-04-28 12:56 UTC (permalink / raw)
To: Stefan Liebler, binutils
On 4/28/22 10:19, Stefan Liebler wrote:
> In static-pie case, there are IRELATIVE-relocs in
> .rela.iplt (htab->irelplt), which will later be grouped
> to .rela.plt. On s390, the IRELATIVE relocations are
> always located in .rela.iplt - even for non-static case.
> Ensure that DT_JMPREL, DT_PLTRELA, DT_PLTRELASZ is added
> to the dynamic section even if htab->srelplt->size == 0.
> See _bfd_elf_add_dynamic_tags in bfd/elflink.c.
>
> bfd/
> elf64-s390.c (elf_s390_size_dynamic_sections):
> Enforce DT_JMPREL via htab->elf.dt_jmprel_required.
Committed to master, 2.38, and 2.37 branch. Thanks!
Andreas
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-04-28 12:56 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-28 8:19 [PATCH 1/2] [PR ld/22263] s390: Avoid dynamic TLS relocs in PIE Stefan Liebler
2022-04-28 8:19 ` [PATCH 2/2] s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie Stefan Liebler
2022-04-28 8:27 ` Andreas Krebbel
2022-04-28 12:56 ` Andreas Krebbel
2022-04-28 8:26 ` [PATCH 1/2] [PR ld/22263] s390: Avoid dynamic TLS relocs in PIE Andreas Krebbel
2022-04-28 12:55 ` Andreas Krebbel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).