Message ID | mpt5z0fr9e0.fsf@arm.com |
---|---|
State | New |
Headers | show |
Series | [committed] aarch64: Always use .init/.fini_array for GNU/Linux | expand |
On Apr 21 2021, Richard Sandiford via Gcc-patches wrote: > However, AArch64 postdates glibc and binutils support for > .init/fini_array by some distance, so it's safe to hard-code the > result to "yes" for cross compilers. Should there be an automatism for any other new architecture added? Andreas.
On Wed, 21 Apr 2021, Andreas Schwab wrote: > On Apr 21 2021, Richard Sandiford via Gcc-patches wrote: > > > However, AArch64 postdates glibc and binutils support for > > .init/fini_array by some distance, so it's safe to hard-code the > > result to "yes" for cross compilers. > > Should there be an automatism for any other new architecture added? See what I said in <https://sourceware.org/pipermail/libc-alpha/2018-November/098712.html>. I think the configure test is valid for cross compilation and doesn't need to check build = host = target at all.
Joseph Myers <joseph@codesourcery.com> writes: > On Wed, 21 Apr 2021, Andreas Schwab wrote: > >> On Apr 21 2021, Richard Sandiford via Gcc-patches wrote: >> >> > However, AArch64 postdates glibc and binutils support for >> > .init/fini_array by some distance, so it's safe to hard-code the >> > result to "yes" for cross compilers. >> >> Should there be an automatism for any other new architecture added? I guess it depends on whether we want this to be done automatically only for GNU/Linux or for other OSes too. I'm a bit nervous about enabling it for aarch64*-elf by default. I guess we could have: x86_64*-linux-gnu) ...all other current linux-gnu targets except aarch64.... ... ...=no ;; *-*-linux-gnu*) ...=yes ;; *) ...=no ;; Then other targets that are similarly “new enough” can be removed from the first list. New architectures would automatically be “yes”. > See what I said in > <https://sourceware.org/pipermail/libc-alpha/2018-November/098712.html>. > I think the configure test is valid for cross compilation and doesn't need > to check build = host = target at all. Are you sure? The default (non-ia64) case includes: AC_PREPROC_IFELSE([AC_LANG_SOURCE([ #ifndef __ELF__ # error Not an ELF OS #endif #include <stdlib.h> #if defined __GLIBC_PREREQ # if __GLIBC_PREREQ (2, 4) # else # error GLIBC 2.4 required # endif #else # if defined __sun__ && defined __svr4__ /* Solaris ld.so.1 supports .init_array/.fini_array since Solaris 8. */ # else # error The C library not known to support .init_array/.fini_array # endif #endif ])],, [gcc_cv_initfini_array=no]);; which AFAICT would test preprocessing for the host rather than the target. Thanks, Richard
On Wed, 21 Apr 2021, Richard Sandiford wrote:
> which AFAICT would test preprocessing for the host rather than the target.
Ah, good point. (GCC_GLIBC_VERSION_GTE_IFELSE can be used to deal with
glibc version conditionals in a way that works, given appropriate
configure options, even when the target headers aren't available, though
at present the gcc_AC_INITFINI_ARRAY call comes before the glibc version
information has been computed.)
diff --git a/gcc/acinclude.m4 b/gcc/acinclude.m4 index 74c18241c91..f9f6a07b040 100644 --- a/gcc/acinclude.m4 +++ b/gcc/acinclude.m4 @@ -422,8 +422,18 @@ changequote([,])dnl ])],, [gcc_cv_initfini_array=no]);; esac else - AC_MSG_CHECKING(cross compile... guessing) - gcc_cv_initfini_array=no + case "${target}" in + aarch64*-linux-gnu*) + # AArch64 postdates glibc support for .init_array/.fini_array, + # so we don't need the preprocessor test above. + gcc_cv_initfini_array=yes + ;; + + *) + AC_MSG_CHECKING(cross compile... guessing) + gcc_cv_initfini_array=no + ;; + esac fi]) enable_initfini_array=$gcc_cv_initfini_array ]) diff --git a/gcc/configure b/gcc/configure index e8ecb3b0297..33eae5451ad 100755 --- a/gcc/configure +++ b/gcc/configure @@ -24132,9 +24132,19 @@ fi rm -f conftest.err conftest.i conftest.$ac_ext;; esac else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking cross compile... guessing" >&5 + case "${target}" in + aarch64*-linux-gnu*) + # AArch64 postdates glibc support for .init_array/.fini_array, + # so we don't need the preprocessor test above. + gcc_cv_initfini_array=yes + ;; + + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking cross compile... guessing" >&5 $as_echo_n "checking cross compile... guessing... " >&6; } - gcc_cv_initfini_array=no + gcc_cv_initfini_array=no + ;; + esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_initfini_array" >&5