unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
From: ludo@gnu.org (Ludovic Courtès)
To: Mark H Weaver <mhw@netris.org>
Cc: 20102@debbugs.gnu.org
Subject: bug#20102: Problem with ld.so RUNPATH on armhf
Date: Wed, 08 Apr 2015 20:39:09 +0200	[thread overview]
Message-ID: <87twwqv50y.fsf@gnu.org> (raw)
In-Reply-To: <87bniyy7au.fsf@netris.org> (Mark H. Weaver's message of "Wed, 08 Apr 2015 11:21:45 -0400")

[-- Attachment #1: Type: text/plain, Size: 7605 bytes --]

Mark H Weaver <mhw@netris.org> 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:


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 463 bytes --]

--- 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

[-- Attachment #3: Type: text/plain, Size: 636 bytes --]


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’.

  parent reply	other threads:[~2015-04-08 18:40 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-13 18:56 bug#20102: Problem with ld.so RUNPATH on armhf Mark H Weaver
2015-04-04 21:58 ` Ludovic Courtès
2015-04-05  4:42   ` Mark H Weaver
2015-04-06 20:24     ` Ludovic Courtès
2015-04-06 21:02       ` Mark H Weaver
2015-04-08  9:52         ` Ludovic Courtès
2015-04-08 15:21           ` Mark H Weaver
2015-04-08 15:26             ` Mark H Weaver
2015-04-08 15:48               ` Ludovic Courtès
2015-04-08 15:50             ` Mark H Weaver
2015-04-08 18:39             ` Ludovic Courtès [this message]
2015-04-08 22:33               ` Ludovic Courtès
2015-04-09  6:04               ` Mark H Weaver
2015-04-09  6:57                 ` Ludovic Courtès
2015-04-09  8:18                 ` Ludovic Courtès
2015-06-13 15:12 ` Mark H Weaver
2015-06-13 23:36   ` Ludovic Courtès
2015-07-14 13:32     ` Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87twwqv50y.fsf@gnu.org \
    --to=ludo@gnu.org \
    --cc=20102@debbugs.gnu.org \
    --cc=mhw@netris.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).