Patchwork [16/29,AARCH64] Detect ILP32 in configure scripts.

login
register
mail settings
Submitter Andrew Pinski
Date Oct. 27, 2014, 7:59 a.m.
Message ID <1414396793-9005-17-git-send-email-apinski@cavium.com>
Download mbox | patch
Permalink /patch/3427/
State New
Headers show

Comments

Andrew Pinski - Oct. 27, 2014, 7:59 a.m.
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
Joseph Myers - Oct. 27, 2014, 6:05 p.m.
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.
Mike Frysinger - Oct. 28, 2014, 8:16 p.m.
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
pinskia@gmail.com - Oct. 28, 2014, 8:18 p.m.
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

Patch

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])