Add support for generating s390x static PIE binaries.
Resolves: #2080164
This commit is contained in:
parent
9b29da778a
commit
6dc286ecd5
143
binutils-s390x-static-PIE.patch
Normal file
143
binutils-s390x-static-PIE.patch
Normal file
@ -0,0 +1,143 @@
|
||||
diff -rup binutils.orig/bfd/elf64-s390.c binutils-2.35.2/bfd/elf64-s390.c
|
||||
--- binutils.orig/bfd/elf64-s390.c 2022-05-03 12:03:39.004203905 +0100
|
||||
+++ binutils-2.35.2/bfd/elf64-s390.c 2022-05-03 12:06:19.884715801 +0100
|
||||
@@ -773,7 +773,7 @@ elf_s390_tls_transition (struct bfd_link
|
||||
int r_type,
|
||||
int is_local)
|
||||
{
|
||||
- if (bfd_link_pic (info))
|
||||
+ if (bfd_link_dll (info))
|
||||
return r_type;
|
||||
|
||||
switch (r_type)
|
||||
@@ -1025,7 +1025,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 */
|
||||
|
||||
@@ -1106,7 +1106,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 */
|
||||
@@ -1570,7 +1570,7 @@ allocate_dynrelocs (struct elf_link_hash
|
||||
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)
|
||||
{
|
||||
@@ -1875,7 +1875,20 @@ elf_s390_size_dynamic_sections (bfd *out
|
||||
else if (CONST_STRNEQ (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. */
|
||||
@@ -2661,7 +2674,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
|
||||
/* 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;
|
||||
@@ -2689,7 +2702,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
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)
|
||||
@@ -2800,14 +2813,14 @@ elf_s390_relocate_section (bfd *output_b
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -2824,7 +2837,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
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. */
|
||||
@@ -2899,7 +2912,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
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. */
|
||||
@@ -2921,7 +2934,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
|
||||
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
|
||||
@@ -2971,7 +2984,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
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,. */
|
||||
@@ -2990,7 +3003,7 @@ elf_s390_relocate_section (bfd *output_b
|
||||
}
|
||||
else if (r_type == R_390_TLS_LDCALL)
|
||||
{
|
||||
- if (!bfd_link_pic (info))
|
||||
+ if (!bfd_link_dll (info))
|
||||
{
|
||||
unsigned int insn0, insn1;
|
||||
|
||||
Only in binutils-2.35.2/bfd: elf64-s390.c.orig
|
||||
Only in binutils-2.35.2/bfd: elf64-s390.c.rej
|
@ -39,7 +39,7 @@
|
||||
Summary: A GNU collection of binary utilities
|
||||
Name: binutils%{?name_cross}%{?_with_debug:-debug}
|
||||
Version: 2.35.2
|
||||
Release: 21%{?dist}
|
||||
Release: 22%{?dist}
|
||||
License: GPLv3+
|
||||
URL: https://sourceware.org/binutils
|
||||
|
||||
@ -415,6 +415,10 @@ Patch54: binutils-aarch64-rng.patch
|
||||
# Lifetime: Fixed in 2.39
|
||||
Patch55: binutils-s390-z16.patch
|
||||
|
||||
# Purpose: Add support for generating s390x static PIE binaries.
|
||||
# Lifetime: Fixed in 2.37
|
||||
Patch56: binutils-s390x-static-PIE.patch
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
Provides: bundled(libiberty)
|
||||
@ -1008,6 +1012,9 @@ exit 0
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
%changelog
|
||||
* Tue May 03 2022 Nick Clifton <nickc@redhat.com> - 2.35.2-22
|
||||
- Add support for generating s390x static PIE binaries. (#2080164)
|
||||
|
||||
* Mon Apr 11 2022 Nick Clifton <nickc@redhat.com> - 2.35.2-21
|
||||
- Allow z16 to be used as an alias for the arch14 extenstions to the S390 architecture. (#2073383)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user