From c15c44923661245b5ca0b5fd74622d5c95beacac Mon Sep 17 00:00:00 2001 From: Ben Gamari Date: Thu, 26 Oct 2017 16:00:37 -0400 Subject: [PATCH] binutils: Always search DT_RPATH --- .../tools/misc/binutils/always-search-rpath.patch | 14 ++++++++++++++ pkgs/development/tools/misc/binutils/default.nix | 8 ++++++++ 2 files changed, 22 insertions(+) create mode 100644 pkgs/development/tools/misc/binutils/always-search-rpath.patch diff --git a/pkgs/development/tools/misc/binutils/always-search-rpath.patch b/pkgs/development/tools/misc/binutils/always-search-rpath.patch new file mode 100644 index 00000000000..2e9956e6b6e --- /dev/null +++ b/pkgs/development/tools/misc/binutils/always-search-rpath.patch @@ -0,0 +1,14 @@ +diff --git a/ld/genscripts.sh b/ld/genscripts.sh +index b6940d376d..0feb1adfd0 100755 +--- a/ld/genscripts.sh ++++ b/ld/genscripts.sh +@@ -125,6 +125,9 @@ if test "x$NATIVE" = "xyes" ; then + USE_LIBPATH=yes + fi + ++# TODO: why is this needed? ++USE_LIBPATH=yes ++ + # Set the library search path, for libraries named by -lfoo. + # If LIB_PATH is defined (e.g., by Makefile) and non-empty, it is used. + # Otherwise, the default is set here. diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index 7628e37ae1c..1b016652699 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -53,6 +53,14 @@ stdenv.mkDerivation rec { # elf32-littlearm-vxworks in favor of the first. # https://github.com/NixOS/nixpkgs/pull/30484#issuecomment-345472766 ./disambiguate-arm-targets.patch + + # For some reason bfd ld doesn't search DT_RPATH when cross-compiling. It's + # not clear why this behavior was decided upon but it has the unfortunate + # consequence that the linker will fail to find transitive dependencies of + # shared objects when cross-compiling. Consequently, we are forced to + # override this behavior, forcing ld to search DT_RPATH even when + # cross-compiling. + ./always-search-rpath.patch ]; outputs = [ "out" "info" "man" ];