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: Ludovic Courtès <ludo <at> gnu.org>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#75483: closed ([PATCH] gnu: gcc-4.7: Fix slash in startfile
 prefix.)
Date: Thu, 16 Jan 2025 22:45:01 +0000
[Message part 1 (text/plain, inline)]
Your message dated Thu, 16 Jan 2025 23:44:32 +0100
with message-id <8734hiz8dr.fsf <at> gnu.org>
and subject line Re: [bug#75483] [PATCH] gnu: gcc-4.7: Fix slash in startfile prefix.
has caused the debbugs.gnu.org bug report #75483,
regarding [PATCH] gnu: gcc-4.7: Fix slash in startfile prefix.
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> 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: 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



[Message part 3 (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’.


This bug report was last modified 184 days ago.

Previous Next


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