From 556a8cd6f9375a0f4e61e6bb67997f04832a5853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leo=20Nikkil=C3=A4?= Date: Sat, 11 Jan 2025 03:43:57 +0200 Subject: [PATCH] gnu: gcc-4.7: Fix slash in startfile prefix. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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]: [1]: * gnu/packages/gcc.scm (gcc-4.7): Fix replaced startfile prefix. [arguments]: <#:phases>: Fix it. Signed-off-by: Ludovic Courtès --- 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 4a034da11f..d6c6366ec5 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -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))))