This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH roland/arm] ARM: Clean up EABI-related configury


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
> 



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]