GNU bug report logs - #75483
[PATCH] gnu: gcc-4.7: Fix slash in startfile prefix.

Previous Next

Package: guix-patches;

Reported by: Leo Nikkilä <hello <at> lnikki.la>

Date: Sat, 11 Jan 2025 01:46:01 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Leo Nikkilä <hello <at> lnikki.la>
Subject: bug#75483: closed (Re: [bug#75483] [PATCH] gnu: gcc-4.7: Fix
 slash in startfile prefix.)
Date: Thu, 16 Jan 2025 22:45:02 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#75483: [PATCH] gnu: gcc-4.7: Fix slash in startfile prefix.

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 75483 <at> debbugs.gnu.org.

-- 
75483: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=75483
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Ludovic Courtès <ludo <at> gnu.org>
To: Leo Nikkilä <hello <at> lnikki.la>
Cc: 75483-done <at> debbugs.gnu.org, Janneke Nieuwenhuizen <janneke <at> gnu.org>
Subject: Re: [bug#75483] [PATCH] gnu: gcc-4.7: Fix slash in startfile prefix.
Date: Thu, 16 Jan 2025 23:44:32 +0100
Hi Leo,

Leo Nikkilä <hello <at> lnikki.la> skribis:

> These prefixes must have a trailing slash.[0] When this slash is
> omitted, gcc fails to find ?crt*.o files when LIBRARY_PATH is not set:
>
>     $ uname -a
>     Linux guix 6.10.14-gnu #1 SMP PREEMPT_DYNAMIC 1 aarch64 GNU/Linux
>     $ guix shell --pure gcc-toolchain -- /bin/sh -c 'LIBRARY_PATH= gcc hello.c'
>     ld: cannot find crt1.o: No such file or directory
>     ld: cannot find crti.o: No such file or directory
>     collect2: error: ld returned 1 exit status
>
> I ran into this when building Yocto images in Guix containers, where
> bitbake resets the environment and expects an FHS system.
>
> Looking at `-print-search-dirs', the prefix is definitely present at the
> end of the startfiles prefixes list[1]:
>
>     $ guix shell --pure gcc-toolchain -- /bin/sh -c 'LIBRARY_PATH= gcc -print-search-dirs'
>     <...>
>     libraries: <...>:/gnu/store/3gvs8sw95ldfypr1n688svl5brwdmdi9-glibc-2.39/lib
>
> However, looking closer with strace, gcc is trying to find crt1.o at
> `/lib../lib/crt1.o' and `/libcrt1.o', which are paths that have been
> mangled due to the missing slash:
>
>     $ guix shell --pure gcc-toolchain strace -- /bin/sh -c 'LIBRARY_PATH= strace -e trace=file gcc hello.c' 2>&1 | grep /gnu/store/3gvs8sw95ldfypr1n688svl5brwdmdi9-glibc-2.39/lib
>     <...>
>     faccessat(AT_FDCWD, "/gnu/store/3gvs8sw95ldfypr1n688svl5brwdmdi9-glibc-2.39/lib../lib/crt1.o", R_OK) = -1 ENOENT (No such file or directory)
>     faccessat(AT_FDCWD, "/gnu/store/3gvs8sw95ldfypr1n688svl5brwdmdi9-glibc-2.39/libcrt1.o", R_OK) = -1 ENOENT (No such file or directory)
>     <...>
>
> [0]: <https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/gcc.cc;h=92c92996401005a9ad17fecd1af4385833785cec;hb=HEAD#l1610>
> [1]: <https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/gcc.cc;h=92c92996401005a9ad17fecd1af4385833785cec;hb=HEAD#l8604>
>
> * gnu/packages/gcc.scm (gcc-4.7): Fix replaced startfile prefix.
> [arguments]: <#:phases>: Fix it.

Good catch.  Pushed to the ‘core-packages-team’ branch.  (You can see
the position of this branch in the merge queue at
<https://qa.guix.gnu.org/>.)

Now’s a good time if you have other world-rebuild toolchain changes like
this one to submit them!

Thanks,
Ludo’.

[Message part 3 (message/rfc822, inline)]
From: Leo Nikkilä <hello <at> lnikki.la>
To: guix-patches <at> gnu.org
Cc: Leo Nikkilä <hello <at> lnikki.la>
Subject: [PATCH] gnu: gcc-4.7: Fix slash in startfile prefix.
Date: Sat, 11 Jan 2025 03:43:57 +0200
These prefixes must have a trailing slash.[0] When this slash is
omitted, gcc fails to find ?crt*.o files when LIBRARY_PATH is not set:

    $ uname -a
    Linux guix 6.10.14-gnu #1 SMP PREEMPT_DYNAMIC 1 aarch64 GNU/Linux
    $ guix shell --pure gcc-toolchain -- /bin/sh -c 'LIBRARY_PATH= gcc hello.c'
    ld: cannot find crt1.o: No such file or directory
    ld: cannot find crti.o: No such file or directory
    collect2: error: ld returned 1 exit status

I ran into this when building Yocto images in Guix containers, where
bitbake resets the environment and expects an FHS system.

Looking at `-print-search-dirs', the prefix is definitely present at the
end of the startfiles prefixes list[1]:

    $ guix shell --pure gcc-toolchain -- /bin/sh -c 'LIBRARY_PATH= gcc -print-search-dirs'
    <...>
    libraries: <...>:/gnu/store/3gvs8sw95ldfypr1n688svl5brwdmdi9-glibc-2.39/lib

However, looking closer with strace, gcc is trying to find crt1.o at
`/lib../lib/crt1.o' and `/libcrt1.o', which are paths that have been
mangled due to the missing slash:

    $ guix shell --pure gcc-toolchain strace -- /bin/sh -c 'LIBRARY_PATH= strace -e trace=file gcc hello.c' 2>&1 | grep /gnu/store/3gvs8sw95ldfypr1n688svl5brwdmdi9-glibc-2.39/lib
    <...>
    faccessat(AT_FDCWD, "/gnu/store/3gvs8sw95ldfypr1n688svl5brwdmdi9-glibc-2.39/lib../lib/crt1.o", R_OK) = -1 ENOENT (No such file or directory)
    faccessat(AT_FDCWD, "/gnu/store/3gvs8sw95ldfypr1n688svl5brwdmdi9-glibc-2.39/libcrt1.o", R_OK) = -1 ENOENT (No such file or directory)
    <...>

[0]: <https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/gcc.cc;h=92c92996401005a9ad17fecd1af4385833785cec;hb=HEAD#l1610>
[1]: <https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/gcc.cc;h=92c92996401005a9ad17fecd1af4385833785cec;hb=HEAD#l8604>

* gnu/packages/gcc.scm (gcc-4.7): Fix replaced startfile prefix.
[arguments]: <#:phases>: Fix it.
---
 gnu/packages/gcc.scm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 6247919fec..3af2fe5c31 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -285,7 +285,7 @@ (define-public gcc-4.7
 \"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib -lgcc_s}} \" ~a"
                                libc libc libdir suffix))
                       (("#define GNU_USER_TARGET_STARTFILE_SPEC.*$" line)
-                       (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
+                       (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib/\"
 #define STANDARD_STARTFILE_PREFIX_2 \"\"
 ~a"
                                libc line)))
@@ -299,7 +299,7 @@ (define-public gcc-4.7
 \"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib -lgcc_s}} \" ~a"
                                libc libc libdir suffix))
                       (("#define	STARTFILE_LINUX_SPEC.*$" line)
-                       (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
+                       (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib/\"
 #define STANDARD_STARTFILE_PREFIX_2 \"\"
 ~a"
                                libc line))))
-- 
2.46.0




This bug report was last modified 185 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.