From mboxrd@z Thu Jan 1 00:00:00 1970 From: ludo@gnu.org (Ludovic =?UTF-8?Q?Court=C3=A8s?=) Subject: bug#20102: Problem with ld.so RUNPATH on armhf Date: Wed, 08 Apr 2015 20:39:09 +0200 Message-ID: <87twwqv50y.fsf@gnu.org> References: <87y4n0ybdd.fsf@netris.org> <87pp7jh7y8.fsf@gnu.org> <87384f5goy.fsf@netris.org> <87oan16m4z.fsf@gnu.org> <87d23hynqe.fsf@netris.org> <87fv8b0wwx.fsf@gnu.org> <87bniyy7au.fsf@netris.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:41119) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YfutQ-0002c5-16 for bug-guix@gnu.org; Wed, 08 Apr 2015 14:40:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YfutO-0004kv-CM for bug-guix@gnu.org; Wed, 08 Apr 2015 14:40:03 -0400 Received: from debbugs.gnu.org ([140.186.70.43]:59698) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YfutO-0004kh-90 for bug-guix@gnu.org; Wed, 08 Apr 2015 14:40:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1YfutN-0008BG-O9 for bug-guix@gnu.org; Wed, 08 Apr 2015 14:40:02 -0400 Sender: "Debbugs-submit" Resent-Message-ID: In-Reply-To: <87bniyy7au.fsf@netris.org> (Mark H. Weaver's message of "Wed, 08 Apr 2015 11:21:45 -0400") List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org Sender: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org To: Mark H Weaver Cc: 20102@debbugs.gnu.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Mark H Weaver skribis: > 13440 execve("/gnu/store/p70wvylq6xdrlxblnk76k3ljgkrmvpnq-ld-wrapper-0/bi= n/ld", ["/gnu/store/p70wvylq6xdrlxblnk76k3ljgkrmvpnq-ld-wrapper-0/bin/ld", = "--eh-frame-hdr", "-shared", "-dynamic-linker", "/gnu/store/fbdjazgwy3zyx8q= c5z4ag0j78k2d7raw-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/sto= re/lakz7x2m4vqvvfdasn5x95a91rkqqs3c-bzip2-1.0.6/lib", "-L/gnu/store/mrb163w= wjc45hgrcjwmb6nxp8fgab3lk-xz-5.0.4/lib", "-L/gnu/store/f1fnh2sp1j32jysdr2nw= 9z296iba6b5d-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/armv7= l-unknown-linux-gnueabihf/4.8.4", "-L/gnu/store/fc8kqk3dazn6mcgcjxd931752b2= pf3wj-gcc-4.8.4-lib/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.4/../../..",= "-L/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib", "-z", "com= breloc", "-z", "relro", "--hash-style=3Dboth", "-z", "defs", "/tmp/nix-buil= d-glibc-2.21.drv-0/build/elf/librtld.os", "--version-script=3D/tmp/nix-buil= d-glibc-2.21.drv-0/build/ld.map", "-soname=3Dld-linux-armhf.so.3", "-defsym= =3D_begin=3D0"], [/* 55 vars */] Indeed, here=E2=80=99s what happens when passing it through ld-wrapper: --8<---------------cut here---------------start------------->8--- $ GUIX_LD_WRAPPER_DEBUG=3Dyes ld "--eh-frame-hdr" "-shared" "-dynamic-linke= r" "/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib/ld-linux-arm= hf.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/l9ji7gc640j2= r8c1c561iwcnqpcd585m-gawk-4.1.1/lib" "-L/gnu/store/w7gjnx5rz64mssxndnryazlw= lhflfd2j-binutils-2.25/lib" "-L/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-= glibc-2.21/lib" "-L/gnu/store/psmxs9gcr9l4arz7agmp94vm8fjwninv-glibc-utf8-l= ocales-2.21/lib" "-L/gnu/store/fc8kqk3dazn6mcgcjxd931752b2pf3wj-gcc-4.8.4-l= ib/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.4" "-L/gnu/store/fc8kqk3dazn6= mcgcjxd931752b2pf3wj-gcc-4.8.4-lib/lib/gcc/armv7l-unknown-linux-gnueabihf/4= .8.4/../../.." "-L/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/li= b" "-z" "combreloc" "-z" "relro" "--hash-style=3Dboth" "-z" "defs" "/tmp/ni= x-build-glibc-2.21.drv-0/build/elf/librtld.os" "--version-script=3D/tmp/nix= -build-glibc-2.21.drv-0/build/ld.map" "-soname=3Dld-linux-armhf.so.3" "-def= sym=3D_begin=3D0" 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/f1fnh2sp1j32j= ysdr2nw9z296iba6b5d-file-5.22/lib" "-L/gnu/store/l9ji7gc640j2r8c1c561iwcnqp= cd585m-gawk-4.1.1/lib" "-L/gnu/store/w7gjnx5rz64mssxndnryazlwlhflfd2j-binut= ils-2.25/lib" "-L/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib= " "-L/gnu/store/psmxs9gcr9l4arz7agmp94vm8fjwninv-glibc-utf8-locales-2.21/li= b" "-L/gnu/store/fc8kqk3dazn6mcgcjxd931752b2pf3wj-gcc-4.8.4-lib/lib/gcc/arm= v7l-unknown-linux-gnueabihf/4.8.4" "-L/gnu/store/fc8kqk3dazn6mcgcjxd931752b= 2pf3wj-gcc-4.8.4-lib/lib/gcc/armv7l-unknown-linux-gnueabihf/4.8.4/../../.."= "-L/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib" "-z" "combr= eloc" "-z" "relro" "--hash-style=3Dboth" "-z" "defs" "/tmp/nix-build-glibc-= 2.21.drv-0/build/elf/librtld.os" "--version-script=3D/tmp/nix-build-glibc-2= .21.drv-0/build/ld.map" "-soname=3Dld-linux-armhf.so.3" "-defsym=3D_begin= =3D0" "-rpath" "/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib") ld: unrecognised emulation mode: armelf_linux_eabi --8<---------------cut here---------------end--------------->8--- Conversely, when =E2=80=9Creplaying=E2=80=9D the command that=E2=80=99s use= d on x86_64, -rpath is not added: --8<---------------cut here---------------start------------->8--- $ GUIX_LD_WRAPPER_DEBUG=3Dyes ld "--eh-frame-hdr" "-m" "elf_x86_64" "-share= d" "-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/zf0lrd865z= xwkx30zmmv2s9pm3cbnyq9-bzip2-1.0.6/lib" "-L/gnu/store/yc75pismby9n46pimi7l9= ifjwmj2ybix-xz-5.0.4/lib" "-L/gnu/store/ip9ydlmc7kwb1q472rh8539rkplx8xgl-fi= le-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/43mpxd= d1qwmlsfgnl79jy1zkkx25nz6r-glibc-utf8-locales-2.21/lib" "-L/gnu/store/h132i= gxl2lkj3sbfcbknn2rd493j7d1l-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/wiqbxcvzj3r35hd55yx= zz919b1dv1hnv-glibc-2.21/lib" "-z" "combreloc" "-z" "relro" "--hash-style= =3Dboth" "-z" "defs" "/tmp/nix-build-glibc-2.21.drv-0/build/elf/librtld.os"= "--version-script=3D/tmp/nix-build-glibc-2.21.drv-0/build/ld.map" "-soname= =3Dld-linux-x86-64.so.2" "-defsym=3D_begin=3D0" 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/xxjla3x9lv9dj= gszi9g2i7sp3zdh2fhz-perl-5.16.1/lib" "-L/gnu/store/zf0lrd865zxwkx30zmmv2s9p= m3cbnyq9-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/wiqbxcvz= j3r35hd55yxzz919b1dv1hnv-glibc-2.21/lib" "-L/gnu/store/43mpxdd1qwmlsfgnl79j= y1zkkx25nz6r-glibc-utf8-locales-2.21/lib" "-L/gnu/store/h132igxl2lkj3sbfcbk= nn2rd493j7d1l-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-unknow= n-linux-gnu/4.8.4/../../.." "-L/gnu/store/wiqbxcvzj3r35hd55yxzz919b1dv1hnv-= glibc-2.21/lib" "-z" "combreloc" "-z" "relro" "--hash-style=3Dboth" "-z" "d= efs" "/tmp/nix-build-glibc-2.21.drv-0/build/elf/librtld.os" "--version-scri= pt=3D/tmp/nix-build-glibc-2.21.drv-0/build/ld.map" "-soname=3Dld-linux-x86-= 64.so.2" "-defsym=3D_begin=3D0") --8<---------------cut here---------------end--------------->8--- With a bit of additional debug, I can print the value of =E2=80=98libs=E2= =80=99 in the =E2=80=98ld-wrapper=E2=80=99 procedure: --8<---------------cut here---------------start------------->8--- ;;; (libs ("/gnu/store/fbdjazgwy3zyx8qc5z4ag0j78k2d7raw-glibc-2.21/lib/ld-l= inux-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 =E2=80=98link= =E2=80=99 spec on ARM, solved by this: --=-=-= Content-Type: text/x-patch Content-Disposition: inline --- 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 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable 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=E2=80=99s better to understand what=E2=80=99s going on. Thanks, Ludo=E2=80=99. --=-=-=--