Message ID | 1414396793-9005-17-git-send-email-apinski@cavium.com |
---|---|
State | New |
Headers | show |
On Mon, 27 Oct 2014, Andrew Pinski wrote: > diff --git a/sysdeps/aarch64/preconfigure b/sysdeps/aarch64/preconfigure > index d9bd1f8..4bcd8e3 100644 > --- a/sysdeps/aarch64/preconfigure > +++ b/sysdeps/aarch64/preconfigure > @@ -1,6 +1,15 @@ > case "$machine" in > aarch64*) > base_machine=aarch64 > - machine=aarch64 > + case "$CC $CFLAGS $CPPFLAGS " in > + *" -mabi=ilp32 "*) aarch64_config_abi=ilp32 ;; > + *" -mabi=lp64 "*) aarch64_config_abi=lp64 ;; > + *) aarch64_config_abi=default ;; > + esac > + case $aarch64_config_abi in > + default) machine=aarch64/lp64 aarch64_config_abi=lp64 ;; It would seem better to test how the compiler behaves (what it predefines), as now done for MIPS, so that this works with a compiler configured --with-abi=ilp32 without needing to add an explicit ABI option to CC or CFLAGS. > diff --git a/sysdeps/unix/sysv/linux/aarch64/configure.ac b/sysdeps/unix/sysv/linux/aarch64/configure.ac > index 211fa9c..6526816 100644 > --- a/sysdeps/unix/sysv/linux/aarch64/configure.ac > +++ b/sysdeps/unix/sysv/linux/aarch64/configure.ac > @@ -1,6 +1,11 @@ > GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. > # Local configure fragment for sysdeps/unix/sysv/linux/aarch64. > > -arch_minimum_kernel=3.7.0 > +if test $aarch64_config_abi = ilp32; then > + arch_minimum_kernel=3.19.0 Since 3.19 doesn't yet exist, this should be 10.0.0 (following the MIPS NaN2008 precedent) until the ILP32 support goes into Linus's git tree, after which it can be set to the actual version in which ILP32 support appears.
On 27 Oct 2014 00:59, Andrew Pinski wrote: > --- a/sysdeps/unix/sysv/linux/aarch64/configure.ac > +++ b/sysdeps/unix/sysv/linux/aarch64/configure.ac > @@ -1,6 +1,11 @@ > GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. > # Local configure fragment for sysdeps/unix/sysv/linux/aarch64. > > -arch_minimum_kernel=3.7.0 > +if test $aarch64_config_abi = ilp32; then > + arch_minimum_kernel=3.19.0 > + LIBC_SLIBDIR_RTLDDIR([libilp32], [lib]) "libilp32" is pretty ugly. why not something simpler ? MIPS n32 uses "lib32" (since o32 is "lib" and n64 is "lib64"). seems reasonable to also use "lib32" here and make the next 32bit ABI pick an uglier name. -mike
On Tue, Oct 28, 2014 at 1:16 PM, Mike Frysinger <vapier@gentoo.org> wrote: > On 27 Oct 2014 00:59, Andrew Pinski wrote: >> --- a/sysdeps/unix/sysv/linux/aarch64/configure.ac >> +++ b/sysdeps/unix/sysv/linux/aarch64/configure.ac >> @@ -1,6 +1,11 @@ >> GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. >> # Local configure fragment for sysdeps/unix/sysv/linux/aarch64. >> >> -arch_minimum_kernel=3.7.0 >> +if test $aarch64_config_abi = ilp32; then >> + arch_minimum_kernel=3.19.0 >> + LIBC_SLIBDIR_RTLDDIR([libilp32], [lib]) > > "libilp32" is pretty ugly. why not something simpler ? MIPS n32 uses "lib32" > (since o32 is "lib" and n64 is "lib64"). seems reasonable to also use "lib32" > here and make the next 32bit ABI pick an uglier name. I had used lib32 but the maintainers had asked to move it over to libilp32 when I submitted the GCC patches: https://gcc.gnu.org/ml/gcc-patches/2013-12/msg00282.html Thanks, Andrew Pinski > -mike
diff --git a/sysdeps/aarch64/configure b/sysdeps/aarch64/configure old mode 100644 new mode 100755 index 5bd355a..7dd56e8 --- a/sysdeps/aarch64/configure +++ b/sysdeps/aarch64/configure @@ -163,12 +163,19 @@ rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_aarch64_be" >&5 $as_echo "$libc_cv_aarch64_be" >&6; } + +if test $aarch64_config_abi = ilp32; then + $as_echo "#define HAVE_AARCH64_ILP32 1" >>confdefs.h + +fi + if test $libc_cv_aarch64_be = yes; then $as_echo "#define HAVE_AARCH64_BE 1" >>confdefs.h - config_vars="$config_vars -default-abi = lp64_be" + libc_aarch64_be=_be else - config_vars="$config_vars -default-abi = lp64" + libc_aarch64_be= fi + +config_vars="$config_vars +default-abi = ${aarch64_config_abi}${libc_aarch64_be}" diff --git a/sysdeps/aarch64/configure.ac b/sysdeps/aarch64/configure.ac index 7851dd4..9069325 100644 --- a/sysdeps/aarch64/configure.ac +++ b/sysdeps/aarch64/configure.ac @@ -14,9 +14,16 @@ AC_CACHE_CHECK([for big endian], yes #endif ], libc_cv_aarch64_be=yes, libc_cv_aarch64_be=no)]) + +if test $aarch64_config_abi = ilp32; then + AC_DEFINE(HAVE_AARCH64_ILP32) +fi + if test $libc_cv_aarch64_be = yes; then AC_DEFINE(HAVE_AARCH64_BE) - LIBC_CONFIG_VAR([default-abi], [lp64_be]) + libc_aarch64_be=_be else - LIBC_CONFIG_VAR([default-abi], [lp64]) + libc_aarch64_be= fi + +LIBC_CONFIG_VAR([default-abi], [${aarch64_config_abi}${libc_aarch64_be}]) diff --git a/sysdeps/aarch64/preconfigure b/sysdeps/aarch64/preconfigure index d9bd1f8..4bcd8e3 100644 --- a/sysdeps/aarch64/preconfigure +++ b/sysdeps/aarch64/preconfigure @@ -1,6 +1,15 @@ case "$machine" in aarch64*) base_machine=aarch64 - machine=aarch64 + case "$CC $CFLAGS $CPPFLAGS " in + *" -mabi=ilp32 "*) aarch64_config_abi=ilp32 ;; + *" -mabi=lp64 "*) aarch64_config_abi=lp64 ;; + *) aarch64_config_abi=default ;; + esac + case $aarch64_config_abi in + default) machine=aarch64/lp64 aarch64_config_abi=lp64 ;; + ilp32) machine=aarch64/ilp32 ;; + lp64) machine=aarch64/lp64 ;; + esac ;; esac diff --git a/sysdeps/unix/sysv/linux/aarch64/configure b/sysdeps/unix/sysv/linux/aarch64/configure old mode 100644 new mode 100755 index 60230a2..59372d2 --- a/sysdeps/unix/sysv/linux/aarch64/configure +++ b/sysdeps/unix/sysv/linux/aarch64/configure @@ -1,9 +1,23 @@ # This file is generated from configure.ac by Autoconf. DO NOT EDIT! # Local configure fragment for sysdeps/unix/sysv/linux/aarch64. -arch_minimum_kernel=3.7.0 - -test -n "$libc_cv_slibdir" || +if test $aarch64_config_abi = ilp32; then + arch_minimum_kernel=3.19.0 + test -n "$libc_cv_slibdir" || +case "$prefix" in +/usr | /usr/) + libc_cv_slibdir=/libilp32 + libc_cv_rtlddir=/lib + if test "$libdir" = '${exec_prefix}/lib'; then + libdir='${exec_prefix}/libilp32'; + # Locale data can be shared between 32-bit and 64-bit libraries. + libc_cv_localedir='${exec_prefix}/lib/locale' + fi + ;; +esac +else + arch_minimum_kernel=3.7.0 + test -n "$libc_cv_slibdir" || case "$prefix" in /usr | /usr/) libc_cv_slibdir=/lib64 @@ -15,3 +29,5 @@ case "$prefix" in fi ;; esac +fi + diff --git a/sysdeps/unix/sysv/linux/aarch64/configure.ac b/sysdeps/unix/sysv/linux/aarch64/configure.ac index 211fa9c..6526816 100644 --- a/sysdeps/unix/sysv/linux/aarch64/configure.ac +++ b/sysdeps/unix/sysv/linux/aarch64/configure.ac @@ -1,6 +1,11 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. # Local configure fragment for sysdeps/unix/sysv/linux/aarch64. -arch_minimum_kernel=3.7.0 +if test $aarch64_config_abi = ilp32; then + arch_minimum_kernel=3.19.0 + LIBC_SLIBDIR_RTLDDIR([libilp32], [lib]) +else + arch_minimum_kernel=3.7.0 + LIBC_SLIBDIR_RTLDDIR([lib64], [lib]) +fi -LIBC_SLIBDIR_RTLDDIR([lib64], [lib])