[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#20102: Problem with ld.so RUNPATH on armhf
From: |
Ludovic Courtès |
Subject: |
bug#20102: Problem with ld.so RUNPATH on armhf |
Date: |
Wed, 08 Apr 2015 20:39:09 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux) |
Mark H Weaver <address@hidden> skribis:
> 13440
> execve("/gnu/store/p70wvylq6xdrlxblnk76k3ljgkrmvpnq-ld-wrapper-0/bin/ld",
> ["/gnu/store/p70wvylq6xdrlxblnk76k3ljgkrmvpnq-ld-wrapper-0/bin/ld",
> "--eh-frame-hdr", "-shared", "-dynamic-linker",
> "/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib/ld-linux-armhf.so.3",
> "-X", "-m", "armelf_linux_eabi", "-o",
> "/tmp/nix-build-glibc-2.21.drv-0/build/elf/ld.so.new",
> "-L/gnu/store/84bsc47g2052allrmh4ph6xaqvp6f4cm-perl-5.16.1/lib",
> "-L/gnu/store/lakz7x2m4vqvvfdasn5x95a91rkqqs3c-bzip2-1.0.6/lib",
> "-L/gnu/store/mrb163wwjc45hgrcjwmb6nxp8fgab3lk-xz-5.0.4/lib",
> "-L/gnu/store/f1fnh2sp1j32jysdr2nw9z296iba6b5d-file-5.22/lib",
> "-L/gnu/store/l9ji7gc640j2r8c1c561iwcnqpcd585m-gawk-4.1.1/lib",
> "-L/gnu/store/w7gjnx5rz64mssxndnryazlwlhflfd2j-binutils-2.25/lib",
> "-L/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib",
> "-L/gnu/store/psmxs9gcr9l4arz7agmp94vm8fjwninv-glibc-utf8-locales-2.21/lib",
> "-L/gnu/store/fc8kqk3dazn6mcgcjxd931752b2pf3wj-gcc-4.8.4-lib/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.4",
>
> "-L/gnu/store/fc8kqk3dazn6mcgcjxd931752b2pf3wj-gcc-4.8.4-lib/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.4/../../..",
> "-L/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib", "-z",
> "combreloc", "-z", "relro", "--hash-style=both", "-z", "defs",
> "/tmp/nix-build-glibc-2.21.drv-0/build/elf/librtld.os",
> "--version-script=/tmp/nix-build-glibc-2.21.drv-0/build/ld.map",
> "-soname=ld-linux-armhf.so.3", "-defsym=_begin=0"], [/* 55 vars */]
> <unfinished ...>
Indeed, here’s what happens when passing it through ld-wrapper:
--8<---------------cut here---------------start------------->8---
$ GUIX_LD_WRAPPER_DEBUG=yes ld "--eh-frame-hdr" "-shared" "-dynamic-linker"
"/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib/ld-linux-armhf.so.3"
"-X" "-m" "armelf_linux_eabi" "-o"
"/tmp/nix-build-glibc-2.21.drv-0/build/elf/ld.so.new"
"-L/gnu/store/84bsc47g2052allrmh4ph6xaqvp6f4cm-perl-5.16.1/lib"
"-L/gnu/store/lakz7x2m4vqvvfdasn5x95a91rkqqs3c-bzip2-1.0.6/lib"
"-L/gnu/store/mrb163wwjc45hgrcjwmb6nxp8fgab3lk-xz-5.0.4/lib"
"-L/gnu/store/f1fnh2sp1j32jysdr2nw9z296iba6b5d-file-5.22/lib"
"-L/gnu/store/l9ji7gc640j2r8c1c561iwcnqpcd585m-gawk-4.1.1/lib"
"-L/gnu/store/w7gjnx5rz64mssxndnryazlwlhflfd2j-binutils-2.25/lib"
"-L/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib"
"-L/gnu/store/psmxs9gcr9l4arz7agmp94vm8fjwninv-glibc-utf8-locales-2.21/lib"
"-L/gnu/store/fc8kqk3dazn6mcgcjxd931752b2pf3wj-gcc-4.8.4-lib/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.4"
"-L/gnu/store/fc8kqk3dazn6mcgcjxd931752b2pf3wj-gcc-4.8.4-lib/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.4/../../.."
"-L/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib" "-z"
"combreloc" "-z" "relro" "--hash-style=both" "-z" "defs"
"/tmp/nix-build-glibc-2.21.drv-0/build/elf/librtld.os"
"--version-script=/tmp/nix-build-glibc-2.21.drv-0/build/ld.map"
"-soname=ld-linux-armhf.so.3" "-defsym=_begin=0"
ld-wrapper: invoking
`/gnu/store/z9d24s2wkri1z0ix5r7qqyp7zy3dklb4-binutils-2.25/bin/ld' with
("--eh-frame-hdr" "-shared" "-dynamic-linker"
"/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib/ld-linux-armhf.so.3"
"-X" "-m" "armelf_linux_eabi" "-o"
"/tmp/nix-build-glibc-2.21.drv-0/build/elf/ld.so.new"
"-L/gnu/store/84bsc47g2052allrmh4ph6xaqvp6f4cm-perl-5.16.1/lib"
"-L/gnu/store/lakz7x2m4vqvvfdasn5x95a91rkqqs3c-bzip2-1.0.6/lib"
"-L/gnu/store/mrb163wwjc45hgrcjwmb6nxp8fgab3lk-xz-5.0.4/lib"
"-L/gnu/store/f1fnh2sp1j32jysdr2nw9z296iba6b5d-file-5.22/lib"
"-L/gnu/store/l9ji7gc640j2r8c1c561iwcnqpcd585m-gawk-4.1.1/lib"
"-L/gnu/store/w7gjnx5rz64mssxndnryazlwlhflfd2j-binutils-2.25/lib"
"-L/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib"
"-L/gnu/store/psmxs9gcr9l4arz7agmp94vm8fjwninv-glibc-utf8-locales-2.21/lib"
"-L/gnu/store/fc8kqk3dazn6mcgcjxd931752b2pf3wj-gcc-4.8.4-lib/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.4"
"-L/gnu/store/fc8kqk3dazn6mcgcjxd931752b2pf3wj-gcc-4.8.4-lib/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.4/../../.."
"-L/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib" "-z"
"combreloc" "-z" "relro" "--hash-style=both" "-z" "defs"
"/tmp/nix-build-glibc-2.21.drv-0/build/elf/librtld.os"
"--version-script=/tmp/nix-build-glibc-2.21.drv-0/build/ld.map"
"-soname=ld-linux-armhf.so.3" "-defsym=_begin=0" "-rpath"
"/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib")
ld: unrecognised emulation mode: armelf_linux_eabi
--8<---------------cut here---------------end--------------->8---
Conversely, when “replaying” the command that’s used on x86_64, -rpath
is not added:
--8<---------------cut here---------------start------------->8---
$ GUIX_LD_WRAPPER_DEBUG=yes ld "--eh-frame-hdr" "-m" "elf_x86_64" "-shared"
"-o" "/tmp/nix-build-glibc-2.21.drv-0/build/elf/ld.so.new"
"-L/gnu/store/xxjla3x9lv9djgszi9g2i7sp3zdh2fhz-perl-5.16.1/lib"
"-L/gnu/store/zf0lrd865zxwkx30zmmv2s9pm3cbnyq9-bzip2-1.0.6/lib"
"-L/gnu/store/yc75pismby9n46pimi7l9ifjwmj2ybix-xz-5.0.4/lib"
"-L/gnu/store/ip9ydlmc7kwb1q472rh8539rkplx8xgl-file-5.22/lib"
"-L/gnu/store/vmlwh55kmsjk7mmrw5qi8n71f02l4w0p-gawk-4.1.1/lib"
"-L/gnu/store/z9d24s2wkri1z0ix5r7qqyp7zy3dklb4-binutils-2.25/lib"
"-L/gnu/store/wiqbxcvzj3r35hd55yxzz919b1dv1hnv-glibc-2.21/lib"
"-L/gnu/store/43mpxdd1qwmlsfgnl79jy1zkkx25nz6r-glibc-utf8-locales-2.21/lib"
"-L/gnu/store/h132igxl2lkj3sbfcbknn2rd493j7d1l-gcc-4.8.4-lib/lib/gcc/x86_64-unknown-linux-gnu/4.8.4"
"-L/gnu/store/h132igxl2lkj3sbfcbknn2rd493j7d1l-gcc-4.8.4-lib/lib/gcc/x86_64-unknown-linux-gnu/4.8.4/../../.."
"-L/gnu/store/wiqbxcvzj3r35hd55yxzz919b1dv1hnv-glibc-2.21/lib" "-z"
"combreloc" "-z" "relro" "--hash-style=both" "-z" "defs"
"/tmp/nix-build-glibc-2.21.drv-0/build/elf/librtld.os"
"--version-script=/tmp/nix-build-glibc-2.21.drv-0/build/ld.map"
"-soname=ld-linux-x86-64.so.2" "-defsym=_begin=0"
ld-wrapper: invoking
`/gnu/store/z9d24s2wkri1z0ix5r7qqyp7zy3dklb4-binutils-2.25/bin/ld' with
("--eh-frame-hdr" "-m" "elf_x86_64" "-shared" "-o"
"/tmp/nix-build-glibc-2.21.drv-0/build/elf/ld.so.new"
"-L/gnu/store/xxjla3x9lv9djgszi9g2i7sp3zdh2fhz-perl-5.16.1/lib"
"-L/gnu/store/zf0lrd865zxwkx30zmmv2s9pm3cbnyq9-bzip2-1.0.6/lib"
"-L/gnu/store/yc75pismby9n46pimi7l9ifjwmj2ybix-xz-5.0.4/lib"
"-L/gnu/store/ip9ydlmc7kwb1q472rh8539rkplx8xgl-file-5.22/lib"
"-L/gnu/store/vmlwh55kmsjk7mmrw5qi8n71f02l4w0p-gawk-4.1.1/lib"
"-L/gnu/store/z9d24s2wkri1z0ix5r7qqyp7zy3dklb4-binutils-2.25/lib"
"-L/gnu/store/wiqbxcvzj3r35hd55yxzz919b1dv1hnv-glibc-2.21/lib"
"-L/gnu/store/43mpxdd1qwmlsfgnl79jy1zkkx25nz6r-glibc-utf8-locales-2.21/lib"
"-L/gnu/store/h132igxl2lkj3sbfcbknn2rd493j7d1l-gcc-4.8.4-lib/lib/gcc/x86_64-unknown-linux-gnu/4.8.4"
"-L/gnu/store/h132igxl2lkj3sbfcbknn2rd493j7d1l-gcc-4.8.4-lib/lib/gcc/x86_64-unknown-linux-gnu/4.8.4/../../.."
"-L/gnu/store/wiqbxcvzj3r35hd55yxzz919b1dv1hnv-glibc-2.21/lib" "-z"
"combreloc" "-z" "relro" "--hash-style=both" "-z" "defs"
"/tmp/nix-build-glibc-2.21.drv-0/build/elf/librtld.os"
"--version-script=/tmp/nix-build-glibc-2.21.drv-0/build/ld.map"
"-soname=ld-linux-x86-64.so.2" "-defsym=_begin=0")
--8<---------------cut here---------------end--------------->8---
With a bit of additional debug, I can print the value of ‘libs’ in the
‘ld-wrapper’ procedure:
--8<---------------cut here---------------start------------->8---
;;; (libs
("/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib/ld-linux-armhf.so.3"))
--8<---------------cut here---------------end--------------->8---
This one comes from the -dynamic-linker flag, which is not passed on
x86_64.
I believe this extra -dynamic-linker flag comes from a bogus ‘link’ spec
on ARM, solved by this:
--- gcc-4.8.4/gcc/config/arm/linux-elf.h.orig 2015-04-08 20:31:20.376900478
+0200
+++ gcc-4.8.4/gcc/config/arm/linux-elf.h 2015-04-08 20:31:36.437014437
+0200
@@ -65,7 +65,7 @@
%{symbolic:-Bsymbolic} \
%{!static: \
%{rdynamic:-export-dynamic} \
- -dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \
+ %{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}} \
-X \
%{mbig-endian:-EB} %{mlittle-endian:-EL}" \
SUBTARGET_EXTRA_LINK_SPEC
That way it would match GNU_USER_TARGET_LINK_SPEC in i386/gnu-user.h,
where -dynamic-linker appears within %{!static ... %{!shared ...}}.
So, could you do:
(define patched-gcc
(package
(inherit gcc-4.8)
(sources (origin (inherit (package-source gcc-4.8))
(patches ...)))))
build it, and then use it in the failed glibc build tree to rebuild
ld.so?
There are ways we could have worked around it, for instance by adding:
(setenv "GUIX_LD_WRAPPER_DISABLE_RPATH" "yes")
in the glibc recipe.
But I think it’s better to understand what’s going on.
Thanks,
Ludo’.
- bug#20102: Problem with ld.so RUNPATH on armhf, Ludovic Courtès, 2015/04/04
- bug#20102: Problem with ld.so RUNPATH on armhf, Mark H Weaver, 2015/04/05
- bug#20102: Problem with ld.so RUNPATH on armhf, Ludovic Courtès, 2015/04/06
- bug#20102: Problem with ld.so RUNPATH on armhf, Mark H Weaver, 2015/04/06
- bug#20102: Problem with ld.so RUNPATH on armhf, Ludovic Courtès, 2015/04/08
- bug#20102: Problem with ld.so RUNPATH on armhf, Mark H Weaver, 2015/04/08
- bug#20102: Problem with ld.so RUNPATH on armhf, Mark H Weaver, 2015/04/08
- bug#20102: Problem with ld.so RUNPATH on armhf, Ludovic Courtès, 2015/04/08
- bug#20102: Problem with ld.so RUNPATH on armhf, Mark H Weaver, 2015/04/08
- bug#20102: Problem with ld.so RUNPATH on armhf,
Ludovic Courtès <=
- bug#20102: Problem with ld.so RUNPATH on armhf, Ludovic Courtès, 2015/04/08
- bug#20102: Problem with ld.so RUNPATH on armhf, Mark H Weaver, 2015/04/09
- bug#20102: Problem with ld.so RUNPATH on armhf, Ludovic Courtès, 2015/04/09
- bug#20102: Problem with ld.so RUNPATH on armhf, Ludovic Courtès, 2015/04/09