[PATCH 1/4] Makeconfig: Add libgcc directory to rtld-prefix search path
Andreas K. Huettel
dilfridge@gentoo.org
Thu Jan 30 16:50:56 GMT 2025
Am Mittwoch, 29. Januar 2025, 20:55:28 Mitteleuropäische Normalzeit schrieb Adhemerval Zanella Netto:
>
> On 22/01/25 13:12, dilfridge@gentoo.org wrote:
> > From: Andreas K. Hüttel <dilfridge@gentoo.org>
> >
> > Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
> > ---
> > Makeconfig | 10 +++++++++-
> > 1 file changed, 9 insertions(+), 1 deletion(-)
> >
> > diff --git a/Makeconfig b/Makeconfig
> > index d0108d2caa..6b4ebd1320 100644
> > --- a/Makeconfig
> > +++ b/Makeconfig
> > @@ -692,6 +692,11 @@ link-libc-static-tests = -Wl,--start-group $(common-objpfx)libc.a $(static-gnuli
> > # some cases and it is preferable to link with libgcc_eh or libgcc_s
> > # so that the testing is as similar as possible to how programs will
> > # be built with the installed glibc.
> > +# This leads to moderate difficulties, also since distributions may
> > +# install libgcc_s.so in directories only found via ld.so.conf, e.g.
> > +# to be able to switch between gcc versions. We need to add the
> > +# corresponding directory to the library search path to make sure
> > +# our test programs can find it.
> > #
> > # Some architectures have architecture-specific systems for exception
> > # handling that may involve undefined references to
> > @@ -709,6 +714,7 @@ libgcc_eh := -Wl,--as-needed -lgcc_s $(libunwind) -Wl,--no-as-needed
> > gnulib-arch =
> > gnulib = -lgcc $(gnulib-arch)
> > gnulib-tests := -lgcc $(libgcc_eh)
> > +gnulib-extralibdir := $(shell $(CC) -print-libgcc-file-name | sed -e 's:/libgcc.*$$::')
>
> From gcc documentation [1], -print-libgcc-file-name is the same as -print-file-name=libgcc.a
> which might be different than the place libgcc_s.so is installed.
>
> On a toolchain built with build-many-glibc.py, I see:
>
> $ arm-glibc-linux-gnueabihf-gcc -print-libgcc-file-name | xargs realpath
> <path>/install/compilers/14/arm-linux-gnueabihf/lib/gcc/arm-glibc-linux-gnueabihf/14.2.1/libgcc.a
>
> $ arm-glibc-linux-gnueabihf-gcc -print-file-name=libgcc_s.so | xargs realpath
> <path>/install/compilers/14/arm-linux-gnueabihf/arm-glibc-linux-gnueabihf/lib/libgcc_s.so
>
> So I think we should -print-file-name=libgcc_s.so instead here, and maybe 'dirname'
> instead of sed (just to be a bit more clear).
Makes sense.
>
> > static-gnulib-arch =
> > # By default, elf/static-stubs.o, instead of -lgcc_eh, is used to
> > # statically link programs. When --disable-shared is used, we use
> > @@ -781,10 +787,12 @@ endif
> >
> > # How to run a program we just linked with our library.
> > # The program binary is assumed to be $(word 2,$^).
> > +# We may require additional libraries from gcc (e.g. libgcc_s.so for exception
> > +# handling), which unfortunately somewhat breaks the isolation.
> > built-program-file = $(dir $(word 2,$^))$(notdir $(word 2,$^))
> > rtld-prefix = $(elf-objpfx)$(rtld-installed-name) \
> > --library-path \
> > - $(rpath-link)$(patsubst %,:%,$(sysdep-library-path))
> > + $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)):$(gnulib-extralibdir)
>
> It solves for the default case where tests are run explicit by issuing the loader,
> we still need to add on RPATH for --enable-hardcoded-path-in-tests:
>
> diff --git a/Makeconfig b/Makeconfig
> index 6b4ebd1320..0008b8bec0 100644
> --- a/Makeconfig
> +++ b/Makeconfig
> @@ -635,7 +635,7 @@ link-libc-printers-tests = $(link-libc-rpath) \
> # This is how to find at build-time things that will be installed there.
> rpath-dirs = math elf dlfcn nss nis rt resolv mathvec support
> rpath-link = \
> -$(common-objdir):$(subst $(empty) ,:,$(patsubst ../$(subdir),.,$(rpath-dirs:%=$(common-objpfx)%)))
> +$(common-objdir):$(subst $(empty) ,:,$(patsubst ../$(subdir),.,$(rpath-dirs:%=$(common-objpfx)%))):$(gnulib-extralibdir)
> else # build-static
> link-libc = $(common-objpfx)libc.a $(otherlibs) $(gnulib) $(common-objpfx)libc.a $(gnulib)
> link-libc-tests = $(common-objpfx)libc.a $(otherlibs) $(gnulib-tests) $(common-objpfx)libc.a $(gnulib-tests)
>
Ah, OK, this was not in my field of vision. Makes sense.
> > ifeq (yes,$(build-shared))
> > comma = ,
> > sysdep-library-path = \
>
> [1] https://gcc.gnu.org/onlinedocs/gcc/Developer-Options.html
>
--
Andreas K. Hüttel
dilfridge@gentoo.org
Gentoo Linux developer
(council, comrel, toolchain, base-system, perl, libreoffice)
https://wiki.gentoo.org/wiki/User:Dilfridge
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <https://sourceware.org/pipermail/libc-alpha/attachments/20250130/620249cc/attachment.sig>
More information about the Libc-alpha
mailing list