janneke pushed a commit to branch core-packages-team
in repository guix.

commit feb56748faa07c457654187e3cd154b26f7e6b2a
Author: Leo Nikkilä <he...@lnikki.la>
AuthorDate: Sat Jan 11 03:43:57 2025 +0200

    gnu: gcc-4.7: Fix slash in startfile prefix.
    
    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.
    
    Signed-off-by: Ludovic Courtès <l...@gnu.org>
---
 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 40fe0eec93..efeee13349 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -313,7 +313,7 @@ exec \"$@\" \
 \"-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)))
@@ -327,7 +327,7 @@ exec \"$@\" \
 \"-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))))

Reply via email to