~alpine/aports

testing/binutils-cross: new aport v2 APPLIED

Drew DeVault: 1
 testing/binutils-cross: new aport

 9 files changed, 553 insertions(+), 0 deletions(-)
Hi Oliver! I would be open to moving this to community if it had more
testing, and pmOS is in a good position to do some of that testing --
are you able to help out?

I'm also open with merging -embedded, but not sure what exactly needs to
be done there. I only have toolchain expertise for the architectures I'm
familiar with (i386, x86_64, riscv64, and to some extent aarch64).
Perhaps we can jointly maintain the package to get a nice spread of
participants with different expertise?
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.alpinelinux.org/~alpine/aports/patches/4097/mbox | git am -3
Learn more about email & git

[RFC PATCH v2] testing/binutils-cross: new aport Export this patch

---
 ...gnu.attributes-are-not-checked-for-s.patch |  55 +++++++
 testing/binutils-cross/APKBUILD               | 141 +++++++++++++++++
 .../binutils-ld-fix-static-linking.patch      |  46 ++++++
 .../binutils-mips-disable-assert.patch        |  14 ++
 .../binutils-ppc-fix-machine-options.patch    |  41 +++++
 testing/binutils-cross/binutils-s390x-1.patch | 147 ++++++++++++++++++
 testing/binutils-cross/binutils-s390x-2.patch |  51 ++++++
 testing/binutils-cross/gold-mips.patch        |  39 +++++
 testing/binutils-cross/ld-bfd-mips.patch      |  19 +++
 9 files changed, 553 insertions(+)
 create mode 100644 testing/binutils-cross/0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
 create mode 100644 testing/binutils-cross/APKBUILD
 create mode 100644 testing/binutils-cross/binutils-ld-fix-static-linking.patch
 create mode 100644 testing/binutils-cross/binutils-mips-disable-assert.patch
 create mode 100644 testing/binutils-cross/binutils-ppc-fix-machine-options.patch
 create mode 100644 testing/binutils-cross/binutils-s390x-1.patch
 create mode 100644 testing/binutils-cross/binutils-s390x-2.patch
 create mode 100644 testing/binutils-cross/gold-mips.patch
 create mode 100644 testing/binutils-cross/ld-bfd-mips.patch

diff --git a/testing/binutils-cross/0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch b/testing/binutils-cross/0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
new file mode 100644
index 0000000000..6e1fa7731c
--- /dev/null
+++ b/testing/binutils-cross/0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
@@ -0,0 +1,55 @@
From bbf05b742fde518fb97c789b043fe0d3aaf549f0 Mon Sep 17 00:00:00 2001
From: Ariadne Conill <ariadne@dereferenced.org>
Date: Tue, 21 Sep 2021 14:53:13 +0000
Subject: [PATCH] Revert "PR25882, .gnu.attributes are not checked for shared
 libraries"

This revert is needed to avoid wrongly tagging objects with the incompatible
IBM long double ABI, which is not supported by musl and will result in
linking errors if used.

This reverts commit a8acd6eeb6dc2cc5460ece90f90ebe36b56b20ba.
---
 bfd/elf32-tic6x.c |  3 ---
 ld/ldlang.c       | 10 ++++------
 2 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c
index 5754f3cb860..3ad1d612749 100644
--- a/bfd/elf32-tic6x.c
+++ b/bfd/elf32-tic6x.c
@@ -3735,9 +3735,6 @@ elf32_tic6x_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
 
 	case Tag_ABI_PIC:
 	case Tag_ABI_PID:
-	  /* Don't transfer these tags from dynamic objects.  */
-	  if ((ibfd->flags & DYNAMIC) != 0)
-	    continue;
 	  if (out_attr[i].i > in_attr[i].i)
 	    out_attr[i].i = in_attr[i].i;
 	  break;
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 37b64c89ee1..f13beaef9d9 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -7071,13 +7071,11 @@ lang_check (void)
 		   bfd_printable_name (input_bfd), input_bfd,
 		   bfd_printable_name (link_info.output_bfd));
 	}
-
-      /* If the input bfd has no contents, it shouldn't set the
-	 private data of the output bfd.  */
-      else if (!file->flags.just_syms
-	       && ((input_bfd->flags & DYNAMIC) != 0
-		   || bfd_count_sections (input_bfd) != 0))
+      else if (bfd_count_sections (input_bfd))
 	{
+	  /* If the input bfd has no contents, it shouldn't set the
+	     private data of the output bfd.  */
+
 	  bfd_error_handler_type pfn = NULL;
 
 	  /* If we aren't supposed to warn about mismatched input
-- 
2.33.0

diff --git a/testing/binutils-cross/APKBUILD b/testing/binutils-cross/APKBUILD
new file mode 100644
index 0000000000..a9e1223fdf
--- /dev/null
+++ b/testing/binutils-cross/APKBUILD
@@ -0,0 +1,141 @@
# Contributor: Natanael Copa <ncopa@alpinelinux.org>
# Contributor: Ariadne Conill <ariadne@dereferenced.org>
# Maintainer: Drew DeVault <sir@cmpwn.com>
pkgname=binutils-cross
pkgver=2.38
pkgrel=0
pkgdesc="Tools necessary to build programs for foreign architectures"
url="https://www.gnu.org/software/binutils/"
makedepends_build="bison flex texinfo"
makedepends_host="zlib-dev"
makedepends="$makedepends_build $makedepends_host"
arch="all"
license="GPL-2.0 GPL-3.0-or-later LGPL-2.0 BSD"
source="https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.xz
	binutils-ld-fix-static-linking.patch
	gold-mips.patch
	ld-bfd-mips.patch
	0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
	binutils-mips-disable-assert.patch
	binutils-ppc-fix-machine-options.patch
	binutils-s390x-1.patch
	binutils-s390x-2.patch
	"
builddir="$srcdir/binutils-$pkgver"
targets="aarch64 armhf armv7 mips64 ppc64le riscv64 s390x x86 x86_64"
options="!check"
for target in $targets
do
	subpackages="$subpackages binutils-$target:_$target"
done

build() {
	for target in $targets
	do
		local _arch_configure=""
		if [ "$target" = "x86_64" ]; then
			_arch_configure="--enable-targets=x86_64-pep"
		fi

		case "$target" in
		mips*)  _hash_style_configure="--enable-default-hash-style=sysv" ;;
		*)      _hash_style_configure="--enable-default-hash-style=gnu"	;;
		esac

		mkdir "$srcdir/$target"
		cd "$srcdir/$target"

		local ctarget="$(arch_to_hostspec "$target")"
		"$builddir"/configure \
			--build=$CBUILD \
			--host=$CHOST \
			--target=$ctarget \
			--program-prefix=$ctarget- \
			--prefix=/usr \
			--mandir=/usr/share/man \
			--infodir=/usr/share/info \
			--disable-multilib \
			--enable-ld=default \
			--disable-gold \
			--enable-64-bit-bfd \
			--disable-plugins \
			--enable-relro \
			--enable-deterministic-archives \
			--disable-internal-libiberty \
			$_arch_configure \
			$_hash_style_configure \
			--with-pic \
			--disable-werror \
			--disable-nls \
			--with-mmap \
			--with-system-zlib
		make
	done
}

package() {
	pkgdesc="Tools necessary to build programs for foreign architectures"
	for target in $targets
	do
		depends="$depends binutils-$target"
	done
	mkdir -p "$pkgdir"
}

_install_target() {
	local target="$1"
	pkgdesc="Tools necessary to build programs for $target"
	cd "$srcdir/$target"
	make install DESTDIR="$subpkgdir"
	rm -rf "$subpkgdir"/usr/share
	rm -rf "$subpkgdir"/usr/lib
	rm -rf "$subpkgdir"/usr/include
}

_aarch64() {
	_install_target aarch64
}

_armhf() {
	_install_target armhf
}

_armv7() {
	_install_target armv7
}

_mips64() {
	_install_target mips64
}

_ppc64le() {
	_install_target ppc64le
}

_riscv64() {
	_install_target riscv64
}

_s390x() {
	_install_target s390x
}

_x86() {
	_install_target x86
}

_x86_64() {
	_install_target x86_64
}

sha512sums="
8bf0b0d193c9c010e0518ee2b2e5a830898af206510992483b427477ed178396cd210235e85fd7bd99a96fc6d5eedbeccbd48317a10f752b7336ada8b2bb826d  binutils-2.38.tar.xz
ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735fd681d1965fcc42ac81b0c8824e540430ce0c706c81e8b49  binutils-ld-fix-static-linking.patch
f55cf2e0bf82f97583a1abe10710e4013ecf7d64f1da2ef8659a44a06d0dd8beaf58dab98a183488ea137f03e32d62efc878d95f018f836f8cec870bc448556f  gold-mips.patch
314d2ef9071c89940aa6c8118e8a1e2f191a5d0a4bf596da1ad9cc84f884d8bc7dea8bd7b9fc3f8f1bddd3fd41c6eb017e1e804044b3bf084df1ed9e6e095e2d  ld-bfd-mips.patch
70ec22bd72ef6dddecfd970613387dd4a8cdc8730dd3cbf03d5a0c3a7c4d839383167bb06dad21bf7c235329fd44b5dc4aefe762f68544f17155cf002bf1be4a  0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
609cd90d8b334eb309f586b17b9d335a08d3dbb6def7c3eb5c010028fcb681674031e5b9d853aa7a39a50304356a86afc184b85562b3f228f8197f4d29395c8f  binutils-mips-disable-assert.patch
27ea91e0e406e2ed464fd692cf92a07e338781789f2d968c8b95d9d5545985056a6f7f500df3952e5ab42165db28b741aa33d6b717e880b11a2e41fe406b13c4  binutils-ppc-fix-machine-options.patch
a9efe2689624865f0ff33d4776a5bd295bcad6484bdd38d0ca490fea43691c4933ab33d17478851998eef12922dbf83d6c3225bb1f8faf92a1367d086390f7d3  binutils-s390x-1.patch
0e291df80ad279005265634014d0935d2c115a5ed708d25407094b7ad4ddf267d1fb7fcbcb2d9ad73bd305b4e3974628b820bd1f249f56c095e4896872434cc9  binutils-s390x-2.patch
"
diff --git a/testing/binutils-cross/binutils-ld-fix-static-linking.patch b/testing/binutils-cross/binutils-ld-fix-static-linking.patch
new file mode 100644
index 0000000000..bc5d762656
--- /dev/null
+++ b/testing/binutils-cross/binutils-ld-fix-static-linking.patch
@@ -0,0 +1,46 @@
This fixes static linking for our hardened toolchain
diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
index e8126cb..9532bfb 100644
--- a/ld/scripttempl/elf.sc
+++ b/ld/scripttempl/elf.sc
@@ -235,8 +235,8 @@ test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
 if test "${ENABLE_INITFINI_ARRAY}" = "yes"; then
   SORT_INIT_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))"
   SORT_FINI_ARRAY="KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))"
-  CTORS_IN_INIT_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors"
-  DTORS_IN_FINI_ARRAY="EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors"
+  CTORS_IN_INIT_ARRAY="EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .ctors"
+  DTORS_IN_FINI_ARRAY="EXCLUDE_FILE (*crtbegin*.o *crtend*.o $OTHER_EXCLUDE_FILES) .dtors"
 else
   SORT_INIT_ARRAY="KEEP (*(SORT(.init_array.*)))"
   SORT_FINI_ARRAY="KEEP (*(SORT(.fini_array.*)))"
@@ -270,15 +270,14 @@ CTOR=".ctors        ${CONSTRUCTING-0} :
        doesn't matter which directory crtbegin.o
        is in.  */
 
-    KEEP (*crtbegin.o(.ctors))
-    KEEP (*crtbegin?.o(.ctors))
+    KEEP (*crtbegin*.o(.ctors))
 
     /* We don't want to include the .ctor section from
        the crtend.o file until after the sorted ctors.
        The .ctor section from the crtend file contains the
        end of ctors marker and it must be last */
 
-    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .ctors))
+    KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .ctors))
     KEEP (*(SORT(.ctors.*)))
     KEEP (*(.ctors))
     ${CONSTRUCTING+${CTOR_END}}
@@ -286,9 +285,8 @@ CTOR=".ctors        ${CONSTRUCTING-0} :
 DTOR=".dtors        ${CONSTRUCTING-0} :
   {
     ${CONSTRUCTING+${DTOR_START}}
-    KEEP (*crtbegin.o(.dtors))
-    KEEP (*crtbegin?.o(.dtors))
-    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o $OTHER_EXCLUDE_FILES) .dtors))
+    KEEP (*crtbegin*.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend*.o $OTHER_EXCLUDE_FILES) .dtors))
     KEEP (*(SORT(.dtors.*)))
     KEEP (*(.dtors))
     ${CONSTRUCTING+${DTOR_END}}
diff --git a/testing/binutils-cross/binutils-mips-disable-assert.patch b/testing/binutils-cross/binutils-mips-disable-assert.patch
new file mode 100644
index 0000000000..1a78858033
--- /dev/null
+++ b/testing/binutils-cross/binutils-mips-disable-assert.patch
@@ -0,0 +1,14 @@
diff -urN binutils-2.35.2.orig/bfd/elfxx-mips.c binutils-2.35.2/bfd/elfxx-mips.c
--- binutils-2.35.2.orig/bfd/elfxx-mips.c	2021-01-30 01:38:03.000000000 -0700
+++ binutils-2.35.2/bfd/elfxx-mips.c	2021-05-13 17:35:34.706913601 -0600
@@ -6744,8 +6744,10 @@
      in the relocation.  */
   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
     {
+#if 0
       BFD_ASSERT (htab->root.target_os == is_vxworks
 		  || h->global_got_area != GGA_NONE);
+#endif
       indx = h->root.dynindx;
       if (SGI_COMPAT (output_bfd))
 	defined_p = h->root.def_regular;
diff --git a/testing/binutils-cross/binutils-ppc-fix-machine-options.patch b/testing/binutils-cross/binutils-ppc-fix-machine-options.patch
new file mode 100644
index 0000000000..703ecf98a3
--- /dev/null
+++ b/testing/binutils-cross/binutils-ppc-fix-machine-options.patch
@@ -0,0 +1,41 @@
Fix for DARN opcode error during ppc64le compilation of rng-tools which
occurs with binutils 2.38 but not with binutils 2.37..

https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=cebc89b9328;hp=9cbed90ee623d75e31994e7943960c997ba565f2


diff -aur a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -5965,7 +5965,30 @@
 	     options do not count as a new machine, instead they add
 	     to currently selected opcodes.  */
 	  ppc_cpu_t machine_sticky = 0;
-	  new_cpu = ppc_parse_cpu (ppc_cpu, &machine_sticky, cpu_string);
+	  /* Unfortunately, some versions of gcc emit a .machine
+	     directive very near the start of the compiler's assembly
+	     output file.  This is bad because it overrides user -Wa
+	     cpu selection.  Worse, there are versions of gcc that
+	     emit the *wrong* cpu, not even respecting the -mcpu given
+	     to gcc.  See gcc pr101393.  And to compound the problem,
+	     as of 20220222 gcc doesn't pass the correct cpu option to
+	     gas on the command line.  See gcc pr59828.  Hack around
+	     this by keeping sticky options for an early .machine.  */
+	  asection *sec;
+	  for (sec = stdoutput->sections; sec != NULL; sec = sec->next)
+	    {
+	      segment_info_type *info = seg_info (sec);
+	      /* Are the frags for this section perturbed from their
+	         initial state?  Even .align will count here.  */
+	      if (info != NULL
+	          && (info->frchainP->frch_root != info->frchainP->frch_last
+	              || info->frchainP->frch_root->fr_type != rs_fill
+	              || info->frchainP->frch_root->fr_fix != 0))
+	        break;
+	    }
+	  new_cpu = ppc_parse_cpu (ppc_cpu,
+	                           sec == NULL ? &sticky : &machine_sticky,
+	                           cpu_string);
 	  if (new_cpu != 0)
 	    ppc_cpu = new_cpu;
 	  else
diff --git a/testing/binutils-cross/binutils-s390x-1.patch b/testing/binutils-cross/binutils-s390x-1.patch
new file mode 100644
index 0000000000..fab51a2fad
--- /dev/null
+++ b/testing/binutils-cross/binutils-s390x-1.patch
@@ -0,0 +1,147 @@
From 82a5bb730a16f8c7962568030268e784b4fb42c8 Mon Sep 17 00:00:00 2001
From: Stefan Liebler <stli@linux.ibm.com>
Date: Thu, 28 Apr 2022 14:29:58 +0200
Subject: [PATCH] s390: Avoid dynamic TLS relocs in PIE

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.

(cherry picked from commit 26b1426577b5dcb32d149c64cca3e603b81948a9)
---
 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.27.0

diff --git a/testing/binutils-cross/binutils-s390x-2.patch b/testing/binutils-cross/binutils-s390x-2.patch
new file mode 100644
index 0000000000..75d7a931a3
--- /dev/null
+++ b/testing/binutils-cross/binutils-s390x-2.patch
@@ -0,0 +1,51 @@
From 9a01457e02e7bb594ff9a9ac62a38c909e2e3083 Mon Sep 17 00:00:00 2001
From: Stefan Liebler <stli@linux.ibm.com>
Date: Thu, 28 Apr 2022 14:30:55 +0200
Subject: [PATCH] s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie

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.

(cherry picked from commit d942d8db12adf4c9e5c7d9ed6496a779ece7149e)
---
 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.27.0

diff --git a/testing/binutils-cross/gold-mips.patch b/testing/binutils-cross/gold-mips.patch
new file mode 100644
index 0000000000..291a2aae6a
--- /dev/null
+++ b/testing/binutils-cross/gold-mips.patch
@@ -0,0 +1,39 @@
# DP: Fix gold on mips64 targets.

gold/

2016-08-09  Aurelien Jarno  <aurelien@aurel32.net>

	* configure.tgt: Add mips64el*-*-*|mips64le*-*-* and mips64*-*-*.

 
--- a/gold/configure.tgt
+++ b/gold/configure.tgt
@@ -153,6 +153,13 @@ aarch64*-*)
  targ_big_endian=false
  targ_extra_big_endian=true
  ;;
+mips*64*el*-*-*|mips*64*le*-*-*)
+ targ_obj=mips
+ targ_machine=EM_MIPS_RS3_LE
+ targ_size=64
+ targ_big_endian=false
+ targ_extra_big_endian=true
+ ;;
 mips*el*-*-*|mips*le*-*-*)
  targ_obj=mips
  targ_machine=EM_MIPS_RS3_LE
@@ -160,6 +167,13 @@ mips*el*-*-*|mips*le*-*-*)
  targ_big_endian=false
  targ_extra_big_endian=true
  ;;
+mips*64*-*-*)
+ targ_obj=mips
+ targ_machine=EM_MIPS
+ targ_size=64
+ targ_big_endian=true
+ targ_extra_big_endian=false
+ ;;
 mips*-*-*)
  targ_obj=mips
  targ_machine=EM_MIPS
diff --git a/testing/binutils-cross/ld-bfd-mips.patch b/testing/binutils-cross/ld-bfd-mips.patch
new file mode 100644
index 0000000000..2991c88571
--- /dev/null
+++ b/testing/binutils-cross/ld-bfd-mips.patch
@@ -0,0 +1,19 @@
--- ./ld/configure.tgt.orig
+++ ./ld/configure.tgt
@@ -541,12 +541,12 @@
 			;;
 mips*-*-windiss)	targ_emul=elf32mipswindiss
 			;;
-mips64*el-*-linux-*)	targ_emul=elf32ltsmipn32
-			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
+mips64*el-*-linux-*)	targ_emul=elf64ltsmip
+			targ_extra_emuls="elf32ltsmipn32 elf32btsmipn32 elf32ltsmip elf32btsmip elf64btsmip"
 			targ_extra_libpath=$targ_extra_emuls
 			;;
-mips64*-*-linux-*)	targ_emul=elf32btsmipn32
-			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
+mips64*-*-linux-*)	targ_emul=elf64btsmip
+			targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip"
 			targ_extra_libpath=$targ_extra_emuls
 			;;
 mips*el-*-linux-*)	targ_emul=elf32ltsmip

base-commit: 7b497064eb552ffc32da3dc2fab1acfabf4879a9
prerequisite-patch-id: 755bd398829e789dcf090d9e42d3e53a134dbbb7
prerequisite-patch-id: 592a5ada0ffb1f8b328cdb975ba2e1f1855f7e69
-- 
2.36.1
I think it should be possible to merge `community/binutils-cross-embedded` and `testing/binutils-corss`. There are some differences. E.g. the cross compilers really need mutlilib (e.g. any sensible compiler for ARM microcontrollers must support Cortex M0, Cortex M0+, Cortex M3, Cortex M4, Cortex M7, Cortex M23, ... with and without hardware FPU), and the lib dir has to be `/usr/$target/lib` to match expectations. But other than that it looks pretty much compatible to what we have in `community/binutils-cross-embedded`.

-- 
via https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/35306#note_241714
Hi Drew, thanks for making this.

Looks like we can probably drop the cross/binutils-aarch64 packages etc. we maintain in postmarketOS and use this, which would be great. I'd wait with that until this is moved from testing to community though.

It has been two weeks since the MR has been merged, do you want to move it to community?

What about possibly merging with binutils-cross-embedded? (not so relevant for me, but I guess it would lower shared maintenance effort and Marian asked above.)

-- 
via https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/35306#note_244920