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 <ludo@gnu.org>
This commit is contained in:
Leo Nikkilä 2025-01-11 03:43:57 +02:00 committed by Ludovic Courtès
parent 5e7c01875c
commit 556a8cd6f9
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -312,7 +312,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)))
@ -326,7 +326,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))))