[16/29,AARCH64] Detect ILP32 in configure scripts.
Commit Message
This adds detecting of ILP32 to the configure scripts.
Adding to preconfigure detection of ilp32 in preconfigure and then writing out the default-abi in configure.
* sysdeps/aarch64/preconfigure: Detect ILP32 and set aarch64_config_abi
to ilp32 for ilp32 and lp64 for lp64. Set machine to either
aarch64/ilp32 or aarch64/lp64 depending on the ABI that is selected.
* sysdeps/aarch64/configure.ac: Define HAVE_AARCH64_ILP32 if this is ILP32.
Set the default-abi to either ilp32, lp64, ilp32_be or lp64_be depending
on the ABI.
* sysdeps/aarch64/configure: Regenerate.
* sysdeps/unix/sysv/linux/aarch64/configure.ac: Set arch_minimum_kernel
to 3.19.0 for ILP32.
Set LIBC_SLIBDIR_RTLDDIR to libilp32/lib for ilp32.
* sysdeps/unix/sysv/linux/aarch64/configure: Regenerate.
---
sysdeps/aarch64/configure | 15 +++++++++++----
sysdeps/aarch64/configure.ac | 11 +++++++++--
sysdeps/aarch64/preconfigure | 11 ++++++++++-
sysdeps/unix/sysv/linux/aarch64/configure | 22 +++++++++++++++++++---
sysdeps/unix/sysv/linux/aarch64/configure.ac | 9 +++++++--
5 files changed, 56 insertions(+), 12 deletions(-)
mode change 100644 => 100755 sysdeps/aarch64/configure
mode change 100644 => 100755 sysdeps/unix/sysv/linux/aarch64/configure
Comments
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
old mode 100644
new mode 100755
@@ -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}"
@@ -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}])
@@ -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
old mode 100644
new mode 100755
@@ -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
+
@@ -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])