On Mon, 4 May 2020, Szabolcs Nagy wrote:

> i think __getauxval needs to be declared where it is used.

Yes.

> and libgcc should do a link test in configure becasuse a
> libc may provide sys/auxv.h but not have __getauxval e.g.
> musl libc does not export __getauxval, only getauxval.

libgcc can't do link tests, since it's built before libc.  It can use the 
glibc version number ($glibc_version_major and $glibc_version_minor) 
already computed in libgcc/configure.ac, which uses --with-glibc-version 
or target headers if available and otherwise defaults to 0.0.

A design principle is that glibc built with libgcc configured without 
glibc headers but with --with-glibc-version should produce an identical 
stripped binary to the glibc resulting from a longer alternating sequence 
of GCC and glibc builds.  So it is not correct for any libgcc 
functionality that would end up being linked into glibc binaries to depend 
on glibc headers or libraries being available when libgcc is configured.

Thus, this libgcc code should not actually be conditional on 
!inhibit_libc, without a fallback when configured using 
--with-glibc-version to specify a glibc version with __getauxval, because 
that would mean the modern process for bootstrapping a cross glibc build 
produces a glibc binary that quietly differs from one produced by a longer 
alternating sequence of builds (missing this constructor).

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to