From c76890f2fe24ca64bc216515149f7316080912f0 Mon Sep 17 00:00:00 2001 From: Orivej Desh Date: Sun, 19 Nov 2017 03:30:43 +0000 Subject: [PATCH] binutils: disambiguate ARM targets https://github.com/NixOS/nixpkgs/pull/30484#issuecomment-345472766 Since [1] libbfd is compiled with support for all available targets. However, it can not choose whether an ARM ELF file is elf32-littlearm, elf32-littlearm-symbian, or elf32-littlearm-vxworks, and fails with the "File format is ambiguous" error. Here [2] Alan Modra intended to prioritize the first of the three, but although his patch was merged and reportedly solved the issue, currently glibc 2.28.1 and 2.29.1 again fail to disambiguate these targets. This commit makes it prioritize elf32-littlearm over the other two. [1] f8741c38cd546e3ff18ce9d708de14ff2aae68ab [2] https://sourceware.org/ml/binutils/2013-05/msg00271.html --- .../tools/misc/binutils/default.nix | 5 ++++ .../binutils/disambiguate-arm-targets.patch | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 pkgs/development/tools/misc/binutils/disambiguate-arm-targets.patch diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index 83982b1376e9..8e44a982067d 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -48,6 +48,11 @@ stdenv.mkDerivation rec { # there) and causes a cycle between the lib and bin outputs, so # get rid of it. ./no-plugins.patch + + # Help bfd choose between elf32-littlearm, elf32-littlearm-symbian, and + # elf32-littlearm-vxworks in favor of the first. + # https://github.com/NixOS/nixpkgs/pull/30484#issuecomment-345472766 + ./disambiguate-arm-targets.patch ]; outputs = [ "out" "info" ]; diff --git a/pkgs/development/tools/misc/binutils/disambiguate-arm-targets.patch b/pkgs/development/tools/misc/binutils/disambiguate-arm-targets.patch new file mode 100644 index 000000000000..abbfa73da05d --- /dev/null +++ b/pkgs/development/tools/misc/binutils/disambiguate-arm-targets.patch @@ -0,0 +1,23 @@ +diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c +index 9f956d3..f5b61f1 100644 +--- a/bfd/elf32-arm.c ++++ b/bfd/elf32-arm.c +@@ -19585,7 +19585,10 @@ elf32_arm_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker) + #undef ELF_MAXPAGESIZE + #define ELF_MAXPAGESIZE 0x1000 + ++/* Prioritize elf32-*arm (priority 1) over elf32-*arm-vxworks (priority 2) */ ++#define elf_match_priority 2 + #include "elf32-target.h" ++#undef elf_match_priority + + + /* Merge backend specific data from an object file to the output +@@ -19974,4 +19977,7 @@ elf32_arm_symbian_plt_sym_val (bfd_vma i, const asection *plt, + #undef ELF_MAXPAGESIZE + #define ELF_MAXPAGESIZE 0x8000 + ++/* Prioritize elf32-*arm (priority 1) over elf32-*arm-symbian (priority 2) */ ++#define elf_match_priority 2 + #include "elf32-target.h" ++#undef elf_match_priority