Add support for generating static PIE binaries for s390x. (#2088331)
This commit is contained in:
parent
10477980ae
commit
6f4f398193
142
binutils-s390x-static-PIE.patch
Normal file
142
binutils-s390x-static-PIE.patch
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
diff -rup binutils.orig/bfd/elf64-s390.c binutils-2.37/bfd/elf64-s390.c
|
||||||
|
--- binutils.orig/bfd/elf64-s390.c 2022-05-19 11:32:09.424050559 +0100
|
||||||
|
+++ binutils-2.37/bfd/elf64-s390.c 2022-05-19 11:32:29.169924728 +0100
|
||||||
|
@@ -774,7 +774,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)
|
||||||
|
@@ -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
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
@@ -1876,7 +1876,20 @@ elf_s390_size_dynamic_sections (bfd *out
|
||||||
|
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. */
|
||||||
|
@@ -2662,7 +2675,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;
|
||||||
|
@@ -2690,7 +2703,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)
|
||||||
|
@@ -2801,14 +2814,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;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2825,7 +2838,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. */
|
||||||
|
@@ -2900,7 +2913,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. */
|
||||||
|
@@ -2922,7 +2935,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
|
||||||
|
@@ -2972,7 +2985,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,. */
|
||||||
|
@@ -2991,7 +3004,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.37/bfd: elf64-s390.c.orig
|
@ -39,7 +39,7 @@
|
|||||||
Summary: A GNU collection of binary utilities
|
Summary: A GNU collection of binary utilities
|
||||||
Name: binutils%{?name_cross}%{?_with_debug:-debug}
|
Name: binutils%{?name_cross}%{?_with_debug:-debug}
|
||||||
Version: 2.37
|
Version: 2.37
|
||||||
Release: 17%{?dist}
|
Release: 18%{?dist}
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
URL: https://sourceware.org/binutils
|
URL: https://sourceware.org/binutils
|
||||||
|
|
||||||
@ -315,6 +315,10 @@ Patch26: binutils-readelf-corrupt-program-headers.patch
|
|||||||
# Lifetime: Fixed in 2.39
|
# Lifetime: Fixed in 2.39
|
||||||
Patch27: binutils-do-not-use-debuginfod.patch
|
Patch27: binutils-do-not-use-debuginfod.patch
|
||||||
|
|
||||||
|
# Purpose: Support generating static PIE binaries for the s390x.
|
||||||
|
# Lifetime: Fixed in 2.39
|
||||||
|
Patch28: binutils-s390x-static-PIE.patch
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
Provides: bundled(libiberty)
|
Provides: bundled(libiberty)
|
||||||
@ -381,6 +385,9 @@ Requires(post): coreutils
|
|||||||
BuildRequires: elfutils-debuginfod-client-devel
|
BuildRequires: elfutils-debuginfod-client-devel
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
# The priority of the linker. Important oif the gold linker is also being built.
|
||||||
|
%{!?ld_bfd_priority: %global ld_bfd_priority 50}
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -406,6 +413,14 @@ Requires: binutils = %{version}-%{release}
|
|||||||
# BZ 1215242: We need touch...
|
# BZ 1215242: We need touch...
|
||||||
Requires: coreutils
|
Requires: coreutils
|
||||||
|
|
||||||
|
# BZ 1924068. Since applications that use the BFD library are
|
||||||
|
# required to link against the static version, ensure that it retains
|
||||||
|
# its debug informnation.
|
||||||
|
# FIXME: Yes - this is being done twice. I have no idea why this
|
||||||
|
# second invocation is necessary but if both are not present the
|
||||||
|
# static archives will be stripped.
|
||||||
|
%undefine __brp_strip_static_archive
|
||||||
|
|
||||||
%description devel
|
%description devel
|
||||||
This package contains BFD and opcodes static and dynamic libraries.
|
This package contains BFD and opcodes static and dynamic libraries.
|
||||||
|
|
||||||
@ -420,14 +435,6 @@ dynamic libraries.
|
|||||||
Developers starting new projects are strongly encouraged to consider
|
Developers starting new projects are strongly encouraged to consider
|
||||||
using libelf instead of BFD.
|
using libelf instead of BFD.
|
||||||
|
|
||||||
# BZ 1924068. Since applications that use the BFD library are
|
|
||||||
# required to link against the static version, ensure that it retains
|
|
||||||
# its debug informnation.
|
|
||||||
# FIXME: Yes - this is being done twice. I have no idea why this
|
|
||||||
# second invocation is necessary but if both are not present the
|
|
||||||
# static archives will be stripped.
|
|
||||||
%undefine __brp_strip_static_archive
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
%if %{with gold}
|
%if %{with gold}
|
||||||
@ -437,13 +444,6 @@ Summary: The GOLD linker, a faster alternative to the BFD linker
|
|||||||
Provides: gold = %{version}-%{release}
|
Provides: gold = %{version}-%{release}
|
||||||
Requires: binutils >= %{version}
|
Requires: binutils >= %{version}
|
||||||
|
|
||||||
%description gold
|
|
||||||
This package provides the GOLD linker, which can be used as an alternative to
|
|
||||||
the default binutils linker (ld.bfd). The GOLD is generally faster than the
|
|
||||||
BFD linker, and it supports features such as Identical Code Folding and
|
|
||||||
Incremental linking. Unfortunately it is not as well maintained as the BFD
|
|
||||||
linker, and it may become deprecated in the future.
|
|
||||||
|
|
||||||
# Gold needs bison in order to build gold/yyscript.c.
|
# Gold needs bison in order to build gold/yyscript.c.
|
||||||
BuildRequires: bison, m4, gcc-c++
|
BuildRequires: bison, m4, gcc-c++
|
||||||
# The GOLD testsuite needs a static libc++
|
# The GOLD testsuite needs a static libc++
|
||||||
@ -454,12 +454,17 @@ BuildRequires: gcc-c++
|
|||||||
Conflicts: gcc-c++ < 4.0.0
|
Conflicts: gcc-c++ < 4.0.0
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# The higher of these two numbers determines the default ld.
|
# If ld_gold_priority is higher than ld_bfd_priority then it will be the default linker.
|
||||||
%{!?ld_gold_priority:%global ld_gold_priority 30}
|
%{!?ld_gold_priority:%global ld_gold_priority 30}
|
||||||
|
|
||||||
%endif
|
%description gold
|
||||||
|
This package provides the GOLD linker, which can be used as an alternative to
|
||||||
|
the default binutils linker (ld.bfd). The GOLD is generally faster than the
|
||||||
|
BFD linker, and it supports features such as Identical Code Folding and
|
||||||
|
Incremental linking. Unfortunately it is not as well maintained as the BFD
|
||||||
|
linker, and it may become deprecated in the future.
|
||||||
|
|
||||||
%{!?ld_bfd_priority: %global ld_bfd_priority 50}
|
%endif
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -932,6 +937,9 @@ exit 0
|
|||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu May 19 2022 Nick Clifton <nickc@redhat.comn> - 2.37-18
|
||||||
|
- Add support for generating static PIE binaries for s390x. (#2088331)
|
||||||
|
|
||||||
* Thu Mar 10 2022 Nick Clifton <nickc@redhat.comn> - 2.37-17
|
* Thu Mar 10 2022 Nick Clifton <nickc@redhat.comn> - 2.37-17
|
||||||
- Add an option to objdump/readelf to disable accessing debuginfod servers. (#2051741)
|
- Add an option to objdump/readelf to disable accessing debuginfod servers. (#2051741)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user