about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/tools/misc/binutils
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/tools/misc/binutils')
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/CVE-2023-1972.patch23
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/default.nix22
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/gold-powerpc-for-llvm.patch107
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/mingw-abort-fix.patch30
-rw-r--r--nixpkgs/pkgs/development/tools/misc/binutils/mips64-default-n64.patch82
5 files changed, 114 insertions, 150 deletions
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2023-1972.patch b/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2023-1972.patch
deleted file mode 100644
index 838fbf722761..000000000000
--- a/nixpkgs/pkgs/development/tools/misc/binutils/CVE-2023-1972.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff --git a/bfd/elf.c b/bfd/elf.c
-index 027d0143735..185028cbd97 100644
---- a/bfd/elf.c
-+++ b/bfd/elf.c
-@@ -9030,6 +9030,9 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
- 	  bfd_set_error (bfd_error_file_too_big);
- 	  goto error_return_verdef;
- 	}
-+
-+      if (amt == 0)
-+	goto error_return_verdef;
-       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
-       if (elf_tdata (abfd)->verdef == NULL)
- 	goto error_return_verdef;
-@@ -9133,6 +9136,8 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
- 	  bfd_set_error (bfd_error_file_too_big);
- 	  goto error_return;
- 	}
-+      if (amt == 0)
-+	goto error_return;
-       elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
-       if (elf_tdata (abfd)->verdef == NULL)
- 	goto error_return;
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/default.nix b/nixpkgs/pkgs/development/tools/misc/binutils/default.nix
index 3a5a07dadabb..c707d0daec89 100644
--- a/nixpkgs/pkgs/development/tools/misc/binutils/default.nix
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/default.nix
@@ -33,12 +33,12 @@ assert enableGoldDefault -> enableGold;
 let
   inherit (stdenv) buildPlatform hostPlatform targetPlatform;
 
-  version = "2.40";
+  version = "2.41";
 
   srcs = {
     normal = fetchurl {
       url = "mirror://gnu/binutils/binutils-${version}.tar.bz2";
-      hash = "sha256-+CmOsVOks30RLpRapcsoUAQLzyaj6mW1pxXIOv4F5Io=";
+      hash = "sha256-pMS+wFL3uDcAJOYDieGUN38/SLVmGEGOpRBn9nqqsws=";
     };
     vc4-none = fetchFromGitHub {
       owner = "itszor";
@@ -66,6 +66,11 @@ stdenv.mkDerivation (finalAttrs: {
   # fetchpatch! All mutable patches (generated by GitHub or cgit) that are
   # needed here should be included directly in Nixpkgs as files.
   patches = [
+    # Upstream patch to fix llvm testsuite failure when loading powerpc
+    # objects:
+    #   https://sourceware.org/PR30794
+    ./gold-powerpc-for-llvm.patch
+
     # Make binutils output deterministic by default.
     ./deterministic.patch
 
@@ -90,10 +95,6 @@ stdenv.mkDerivation (finalAttrs: {
     # not need to know binutils' BINDIR at all. It's an absolute path
     # where libraries are stored.
     ./plugins-no-BINDIR.patch
-
-    # CVE-2023-1972 fix to bfd/elf.c from:
-    # https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=c22d38baefc5a7a1e1f5cdc9dbb556b1f0ec5c57
-    ./CVE-2023-1972.patch
   ]
   ++ lib.optional targetPlatform.isiOS ./support-ios.patch
   # Adds AVR-specific options to "size" for compatibility with Atmel's downstream distribution
@@ -101,15 +102,6 @@ stdenv.mkDerivation (finalAttrs: {
   # https://github.com/archlinux/svntogit-community/blob/c8d53dd1734df7ab15931f7fad0c9acb8386904c/trunk/avr-size.patch
   ++ lib.optional targetPlatform.isAvr ./avr-size.patch
   ++ lib.optional stdenv.targetPlatform.isWindows ./windres-locate-gcc.patch
-  ++ lib.optional stdenv.targetPlatform.isMips64n64
-     # this patch is from debian:
-     # https://sources.debian.org/data/main/b/binutils/2.38-3/debian/patches/mips64-default-n64.diff
-     (if stdenv.targetPlatform.isMusl
-      then substitute { src = ./mips64-default-n64.patch; substitutions = [ "--replace" "gnuabi64" "muslabi64" ]; }
-      else ./mips64-default-n64.patch)
-  # This patch fixes a bug in 2.40 on MinGW, which breaks DXVK when cross-building from Darwin.
-  # See https://sourceware.org/bugzilla/show_bug.cgi?id=30079
-  ++ lib.optional stdenv.targetPlatform.isMinGW ./mingw-abort-fix.patch
   ;
 
   outputs = [ "out" "info" "man" "dev" ]
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/gold-powerpc-for-llvm.patch b/nixpkgs/pkgs/development/tools/misc/binutils/gold-powerpc-for-llvm.patch
new file mode 100644
index 000000000000..29330131499b
--- /dev/null
+++ b/nixpkgs/pkgs/development/tools/misc/binutils/gold-powerpc-for-llvm.patch
@@ -0,0 +1,107 @@
+https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff_plain;h=d537f77ef3b18a5fbfd598643aaad957652e9608
+
+Fix llvm testsuite failure on a single test:
+    FAIL: LLVM :: tools/gold/PowerPC/mtriple.ll (43659 of 49708)
+      ld.gold: internal error in add_output_section_to_load, at output.cc:4097
+
+From: Alan Modra <amodra@gmail.com>
+Date: Thu, 24 Aug 2023 23:42:18 +0000 (+0930)
+Subject: PR30794, PowerPC gold: internal error in add_output_section_to_load
+X-Git-Tag: gdb-14-branchpoint~482
+X-Git-Url: https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff_plain;h=d537f77ef3b18a5fbfd598643aaad957652e9608
+
+PR30794, PowerPC gold: internal error in add_output_section_to_load
+
+Caused by commit 5a97377e5513, specifically this code added to
+Target_powerpc::do_relax
++      if (parameters->options().output_is_position_independent())
++       this->rela_dyn_size_
++         = this->rela_dyn_section(layout)->current_data_size();
+
+The problem here is that if .rela.dyn isn't already created then the
+call to rela_dyn_section creates it, and as this comment in
+Target_powerpc::do_finalize_sections says:
+	  // Annoyingly, we need to make these sections now whether or
+	  // not we need them.  If we delay until do_relax then we
+	  // need to mess with the relaxation machinery checkpointing.
+We can't be creating sections in do_relax.
+
+	PR 30794
+	* powerpc.cc (Target_powerpc::do_relax): Only set rela_dyn_size_
+	for size == 64, and assert that rela_dyn_ already exists.
+	Tidy code setting plt_thread_safe, which also only needs to be
+	set when size == 64 for ELFv1.
+---
+
+diff --git a/gold/powerpc.cc b/gold/powerpc.cc
+index e66d9cbb900..a4fecaae55a 100644
+--- a/gold/powerpc.cc
++++ b/gold/powerpc.cc
+@@ -3714,12 +3714,7 @@ Target_powerpc<size, big_endian>::do_relax(int pass,
+   unsigned int prev_brlt_size = 0;
+   if (pass == 1)
+     {
+-      bool thread_safe
+-	= this->abiversion() < 2 && parameters->options().plt_thread_safe();
+-      if (size == 64
+-	  && this->abiversion() < 2
+-	  && !thread_safe
+-	  && !parameters->options().user_set_plt_thread_safe())
++      if (size == 64 && this->abiversion() < 2)
+ 	{
+ 	  static const char* const thread_starter[] =
+ 	    {
+@@ -3747,29 +3742,37 @@ Target_powerpc<size, big_endian>::do_relax(int pass,
+ 	      /* libgo */
+ 	      "__go_go",
+ 	    };
++	  bool thread_safe = parameters->options().plt_thread_safe();
+ 
+-	  if (parameters->options().shared())
+-	    thread_safe = true;
+-	  else
++	  if (!thread_safe
++	      && !parameters->options().user_set_plt_thread_safe())
+ 	    {
+-	      for (unsigned int i = 0;
+-		   i < sizeof(thread_starter) / sizeof(thread_starter[0]);
+-		   i++)
++	      if (parameters->options().shared())
++		thread_safe = true;
++	      else
+ 		{
+-		  Symbol* sym = symtab->lookup(thread_starter[i], NULL);
+-		  thread_safe = (sym != NULL
+-				 && sym->in_reg()
+-				 && sym->in_real_elf());
+-		  if (thread_safe)
+-		    break;
++		  for (unsigned int i = 0;
++		       i < sizeof(thread_starter) / sizeof(thread_starter[0]);
++		       i++)
++		    {
++		      Symbol* sym = symtab->lookup(thread_starter[i], NULL);
++		      thread_safe = (sym != NULL
++				     && sym->in_reg()
++				     && sym->in_real_elf());
++		      if (thread_safe)
++			break;
++		    }
+ 		}
+ 	    }
++	  this->plt_thread_safe_ = thread_safe;
+ 	}
+-      this->plt_thread_safe_ = thread_safe;
+ 
+-      if (parameters->options().output_is_position_independent())
+-	this->rela_dyn_size_
+-	  = this->rela_dyn_section(layout)->current_data_size();
++      if (size == 64
++	  && parameters->options().output_is_position_independent())
++	{
++	  gold_assert (this->rela_dyn_);
++	  this->rela_dyn_size_ = this->rela_dyn_->current_data_size();
++	}
+ 
+       this->stub_group_size_ = parameters->options().stub_group_size();
+       bool no_size_errors = true;
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/mingw-abort-fix.patch b/nixpkgs/pkgs/development/tools/misc/binutils/mingw-abort-fix.patch
deleted file mode 100644
index b322d6ad7cd1..000000000000
--- a/nixpkgs/pkgs/development/tools/misc/binutils/mingw-abort-fix.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From b7eab2a9d4f4e92692daf14b09fc95ca11b72e30 Mon Sep 17 00:00:00 2001
-From: Michael Matz <matz@suse.de>
-Date: Thu, 9 Feb 2023 15:29:00 +0100
-Subject: [PATCH 1/1] Fix PR30079: abort on mingw
-
-the early-out in wild_sort is not enough, it might still be
-that filenames are equal _and_ the wildcard list doesn't specify
-a sort order either.  Don't call compare_section then.
-
-Tested on all targets.
----
- ld/ldlang.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/ld/ldlang.c b/ld/ldlang.c
-index 84a2914fc26..b5e0d026ae4 100644
---- a/ld/ldlang.c
-+++ b/ld/ldlang.c
-@@ -649,7 +649,8 @@ wild_sort (lang_wild_statement_type *wild,
- 	 looking at the sections for this file.  */
- 
-       /* Find the correct node to append this section.  */
--      if (compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
-+      if (sec && sec->spec.sorted != none && sec->spec.sorted != by_none
-+	  && compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
- 	tree = &((*tree)->left);
-       else
- 	tree = &((*tree)->right);
--- 
-2.31.1
diff --git a/nixpkgs/pkgs/development/tools/misc/binutils/mips64-default-n64.patch b/nixpkgs/pkgs/development/tools/misc/binutils/mips64-default-n64.patch
deleted file mode 100644
index 00581279f85e..000000000000
--- a/nixpkgs/pkgs/development/tools/misc/binutils/mips64-default-n64.patch
+++ /dev/null
@@ -1,82 +0,0 @@
---- a/bfd/config.bfd
-+++ b/bfd/config.bfd
-@@ -927,11 +927,21 @@ case "${targ}" in
-     targ_defvec=mips_elf32_be_vec
-     targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
-     ;;
--  mips64*el-*-linux*)
-+  mips*64*el-*-linux*-gnuabi64)
-+    targ_defvec=mips_elf64_trad_le_vec
-+    targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec"
-+    want64=true
-+    ;;
-+  mips*64*-*-linux*-gnuabi64)
-+    targ_defvec=mips_elf64_trad_be_vec
-+    targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_le_vec"
-+    want64=true
-+    ;;
-+  mips*64*el-*-linux*)
-     targ_defvec=mips_elf32_ntrad_le_vec
-     targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec"
-     ;;
--  mips64*-*-linux*)
-+  mips*64*-*-linux*)
-     targ_defvec=mips_elf32_ntrad_be_vec
-     targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
-     ;;
---- a/binutils/testsuite/binutils-all/mips/mips-note-2-n32.d
-+++ b/binutils/testsuite/binutils-all/mips/mips-note-2-n32.d
-@@ -1,4 +1,5 @@
- #PROG: objcopy
-+#as: -n32
- #readelf: --notes --wide
- #objcopy: --merge-notes
- #name: MIPS merge notes section (n32)
---- a/gas/configure
-+++ b/gas/configure
-@@ -12167,6 +12167,9 @@ _ACEOF
- 	esac
- 	# Decide which ABI to target by default.
- 	case ${target} in
-+	  mips*64*-linux-gnuabi64)
-+	    mips_default_abi=N64_ABI
-+	    ;;
- 	  mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
- 	  | mips64*-kfreebsd*-gnu | mips64*-ps2-elf*)
- 	    mips_default_abi=N32_ABI
---- a/gas/configure.ac
-+++ b/gas/configure.ac
-@@ -384,6 +384,9 @@ changequote([,])dnl
- 	esac
- 	# Decide which ABI to target by default.
- 	case ${target} in
-+	  mips*64*-linux-gnuabi64)
-+	    mips_default_abi=N64_ABI
-+	    ;;
- 	  mips64*-linux* | mips-sgi-irix6* | mips64*-freebsd* \
- 	  | mips64*-kfreebsd*-gnu | mips64*-ps2-elf*)
- 	    mips_default_abi=N32_ABI
---- a/ld/configure.tgt
-+++ b/ld/configure.tgt
-@@ -543,11 +543,19 @@ mips*-*-vxworks*)	targ_emul=elf32ebmipvx
- 			;;
- mips*-*-windiss)	targ_emul=elf32mipswindiss
- 			;;
--mips64*el-*-linux-*)	targ_emul=elf32ltsmipn32
-+mips*64*el-*-linux-gnuabi64)	targ_emul=elf64ltsmip
-+			targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32ltsmip elf32btsmip elf64btsmip"
-+			targ_extra_libpath=$targ_extra_emuls
-+			;;
-+mips*64*el-*-linux-*)	targ_emul=elf32ltsmipn32
- 			targ_extra_emuls="elf32btsmipn32 elf32ltsmip elf32btsmip elf64ltsmip elf64btsmip"
- 			targ_extra_libpath=$targ_extra_emuls
- 			;;
--mips64*-*-linux-*)	targ_emul=elf32btsmipn32
-+mips*64*-*-linux-gnuabi64)	targ_emul=elf64btsmip
-+			targ_extra_emuls="elf32btsmipn32 elf32ltsmipn32 elf32btsmip elf32ltsmip elf64ltsmip"
-+			targ_extra_libpath=$targ_extra_emuls
-+			;;
-+mips*64*-*-linux-*)	targ_emul=elf32btsmipn32
- 			targ_extra_emuls="elf32ltsmipn32 elf32btsmip elf32ltsmip elf64btsmip elf64ltsmip"
- 			targ_extra_libpath=$targ_extra_emuls
- 			;;