Subject: Re: [bug#75483] [PATCH] gnu: gcc-4.7: Fix slash in startfile prefix.
From: Ludovic Courtès <[email-masked]>
To: Leo Nikkilä <[email-masked]>
Cc: [email-masked], Janneke Nieuwenhuizen <[email-masked]>
Date: Thu, 16 Jan 2025 23:44:32 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi Leo,

Leo Nikkilä <[email-masked]> 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’.