This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH roland/arm] ARM: Clean up EABI-related configury
- From: Richard Earnshaw <rearnsha at arm dot com>
- To: Roland McGrath <roland at hack dot frob dot com>
- Cc: "GNU C. Library" <libc-alpha at sourceware dot org>
- Date: Fri, 04 Jul 2014 13:45:22 +0100
- Subject: Re: [PATCH roland/arm] ARM: Clean up EABI-related configury
- Authentication-results: sourceware.org; auth=none
- References: <20140704014928 dot 435BC2C3988 at topped-with-meat dot com>
On 04/07/14 02:49, Roland McGrath wrote:
> Now that pre-EABI is no longer supported, new toolchains are starting to be
> built using tuples arm-linux* rather than arm-linux*eabi*. e.g. Fedora's
> cross tools use arm-linux-gnu.
>
> Also, there was a lopsided situation where sysdeps/arm/ already assume EABI
> stuff but configure was doing some of the EABI-related magic only for Linux
> configurations. Now sysdeps/arm/{pre,}configure require, check for, and
> cater to, EABI support universally for any ARM configuration.
>
> This makes a cross-build on Fedora for --host=arm-linux-gnu succeed where
> before it did not.
>
I'm not necessarily objecting, but this seems quite an aggressive
schedule. GCC-4.8 was the first compiler not to support the old ABI,
and GCC-4.7.4 was released only a few weeks ago; that did support the
old ABI.
R.
> OK?
>
>
> Thanks,
> Roland
>
>
> 2014-07-03 Roland McGrath <roland@hack.frob.com>
>
> * sysdeps/arm/preconfigure.ac: Apply EABI sanity check to arm*, not
> just Linux configurations. Test empirically that the compiler sets
> __ARM_EABI__, rather than using the tuple to decide.
> * sysdeps/unix/sysv/linux/arm/configure: File removed.
> * sysdeps/unix/sysv/linux/arm/configure.ac: File removed,
> contents appended ...
> * sysdeps/arm/configure.ac: ... here.
> * sysdeps/arm/configure: Regenerated.
>
> --- a/sysdeps/arm/configure
> +++ b/sysdeps/arm/configure
> @@ -210,3 +210,11 @@ else
> config_vars="$config_vars
> have-arm-tls-desc = no"
> fi
> +
> +libc_cv_gcc_unwind_find_fde=no
> +
> +# Remove -fno-unwind-tables that was added in sysdeps/arm/preconfigure.ac.
> +CFLAGS=${CFLAGS% -fno-unwind-tables}
> +
> +libc_cv_gcc_exceptions=yes
> +exceptions=-fexceptions
> --- a/sysdeps/arm/configure.ac
> +++ b/sysdeps/arm/configure.ac
> @@ -39,3 +39,14 @@ if test $libc_cv_arm_tls_desc = yes; then
> else
> LIBC_CONFIG_VAR([have-arm-tls-desc], [no])
> fi
> +
> +libc_cv_gcc_unwind_find_fde=no
> +
> +# Remove -fno-unwind-tables that was added in sysdeps/arm/preconfigure.ac.
> +CFLAGS=${CFLAGS% -fno-unwind-tables}
> +
> +dnl The normal configure check for gcc -fexecptions fails because it can't
> +dnl find __aeabi_unwind_cpp_pr0. Work around this here; our GCC definitely
> +dnl has -fexceptions.
> +libc_cv_gcc_exceptions=yes
> +exceptions=-fexceptions
> --- a/sysdeps/arm/preconfigure
> +++ b/sysdeps/arm/preconfigure
> @@ -3,22 +3,36 @@
>
> case "$machine" in
> arm*)
> - case $config_os in
> - linux-gnueabi*)
> - # If the compiler enables unwind tables by default, this causes
> - # problems with undefined symbols in -nostdlib link tests. To
> - # avoid this, add -fno-unwind-tables here and remove it in
> - # sysdeps/unix/sysv/linux/arm/configure.ac after those tests have
> - # been run.
> - if test "${CFLAGS+set}" != "set"; then
> - CFLAGS="-g -O2"
> - fi
> - CFLAGS="$CFLAGS -fno-unwind-tables"
> - ;;
> - linux*)
> - as_fn_error $? "Old ABI no longer supported" "$LINENO" 5
> - ;;
> - esac
> +
> +cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h. */
> +
> +#if !__ARM_EABI__
> +#error
> +#endif
> +int
> +main ()
> +{
> +
> + ;
> + return 0;
> +}
> +_ACEOF
> +if ac_fn_c_try_compile "$LINENO"; then :
> +
> +else
> + as_fn_error $? "Old ABI no longer supported" "$LINENO" 5
> +fi
> +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> +
> + # If the compiler enables unwind tables by default, this causes
> + # problems with undefined symbols in -nostdlib link tests. To
> + # avoid this, add -fno-unwind-tables here and remove it in
> + # sysdeps/arm/configure.ac after those tests have been run.
> + if test "${CFLAGS+set}" != "set"; then
> + CFLAGS="-g -O2"
> + fi
> + CFLAGS="$CFLAGS -fno-unwind-tables"
>
> base_machine=arm
> # Lets ask the compiler which ARM family we've got
> --- a/sysdeps/arm/preconfigure.ac
> +++ b/sysdeps/arm/preconfigure.ac
> @@ -3,22 +3,19 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
>
> case "$machine" in
> arm*)
> - case $config_os in
> - linux-gnueabi*)
> - # If the compiler enables unwind tables by default, this causes
> - # problems with undefined symbols in -nostdlib link tests. To
> - # avoid this, add -fno-unwind-tables here and remove it in
> - # sysdeps/unix/sysv/linux/arm/configure.ac after those tests have
> - # been run.
> - if test "${CFLAGS+set}" != "set"; then
> - CFLAGS="-g -O2"
> - fi
> - CFLAGS="$CFLAGS -fno-unwind-tables"
> - ;;
> - linux*)
> - AC_MSG_ERROR([Old ABI no longer supported])
> - ;;
> - esac
> + AC_TRY_COMPILE([
> +#if !__ARM_EABI__
> +#error
> +#endif], [], [], [AC_MSG_ERROR([Old ABI no longer supported])])
> +
> + # If the compiler enables unwind tables by default, this causes
> + # problems with undefined symbols in -nostdlib link tests. To
> + # avoid this, add -fno-unwind-tables here and remove it in
> + # sysdeps/arm/configure.ac after those tests have been run.
> + if test "${CFLAGS+set}" != "set"; then
> + CFLAGS="-g -O2"
> + fi
> + CFLAGS="$CFLAGS -fno-unwind-tables"
>
> base_machine=arm
> # Lets ask the compiler which ARM family we've got
> --- a/sysdeps/microblaze/nptl/tls.h
> +++ b/sysdeps/microblaze/nptl/tls.h
> @@ -99,7 +99,7 @@ static inline void *__microblaze_get_thread_area (void)
> /* Code to initially initialize the thread pointer.
> r21 is reserved for thread pointer. */
> # define TLS_INIT_TP(tcbp) \
> - ({ __asm __volatile ("or r21,r0,%0" : : "r" ((void *)tcbp)); 0; })
> + ({ __asm __volatile ("or r21,r0,%0" : : "r" ((void *)tcbp)); NULL; })
>
> # define TLS_DEFINE_INIT_TP(tp, pd) void *tp = (pd) + 1
>
> --- a/sysdeps/unix/sysv/linux/arm/configure
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
> - # Local configure fragment for sysdeps/unix/sysv/linux/arm.
> -
> -libc_cv_gcc_unwind_find_fde=no
> -# Remove -fno-unwind-tables that was added in sysdeps/arm/preconfigure.ac.
> -CFLAGS=${CFLAGS% -fno-unwind-tables}
> -
> -libc_cv_gcc_exceptions=yes
> -exceptions=-fexceptions
> --- a/sysdeps/unix/sysv/linux/arm/configure.ac
> +++ /dev/null
> @@ -1,12 +0,0 @@
> -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
> -# Local configure fragment for sysdeps/unix/sysv/linux/arm.
> -
> -libc_cv_gcc_unwind_find_fde=no
> -# Remove -fno-unwind-tables that was added in sysdeps/arm/preconfigure.ac.
> -CFLAGS=${CFLAGS% -fno-unwind-tables}
> -
> -dnl The normal configure check for gcc -fexecptions fails because it can't
> -dnl find __aeabi_unwind_cpp_pr0. Work around this here; our GCC definitely
> -dnl has -fexceptions.
> -libc_cv_gcc_exceptions=yes
> -exceptions=-fexceptions
>