diff mbox

AARCH64 configure check for gas -mabi support

Message ID 529F98A0.8020503@linaro.org
State Superseded
Headers show

Commit Message

Kugan Vivekanandarajah Dec. 4, 2013, 9:03 p.m. UTC
Hi,

gcc trunk aarch64 bootstrapping fails with gas version 2.23.2 (with
error message similar to cannot compute suffix of object files) as this
particular version does not support -mabi=lp64. It succeeds with later
versions of gas that supports -mabi.

Attached patch add checking for -mabi=lp64 and prompts upgradation. Is
this Ok?

Thanks,
Kugan

+2013-12-05  Kugan Vivekanandarajah  <kuganv@linaro.org>
+	* configure.ac: Add checks for aarch64 assembler -mabi support.
+	* configure: Regenerate.
+

Comments

Yufeng Zhang Dec. 6, 2013, 4:18 p.m. UTC | #1
Hi Kugan,

Thanks for working on this issue.

On 12/04/13 21:03, Kugan wrote:
> Hi,
>
> gcc trunk aarch64 bootstrapping fails with gas version 2.23.2 (with
> error message similar to cannot compute suffix of object files) as this
> particular version does not support -mabi=lp64. It succeeds with later
> versions of gas that supports -mabi.

The -mabi option was introduced to gas when the support for ILP32 was 
added.  Initially the options were named -milp32 and -mlp64:

   http://sourceware.org/ml/binutils/2013-06/msg00178.html

and later on they were change to -mabi=ilp32 and -mabi=lp64 for 
consistency with those in the aarch64 gcc:

   http://sourceware.org/ml/binutils/2013-07/msg00180.html

The following gcc patch made the driver use the explicit option to drive 
gas:

   http://gcc.gnu.org/ml/gcc-patches/2013-07/msg00083.html

It is a neglect of the backward compatibility with binutils 2.23.

>
> Attached patch add checking for -mabi=lp64 and prompts upgradation. Is
> this Ok?

I think instead of mandating the support for the -mabi option, the 
compiler shall be changed able to work with binutils 2.23.  The 2.23 
binutils have a good support for aarch64 and the main difference from 
2.24 is the ILP32 support.  I think it is necessary to maintain the 
backward compatibility, and it should be achieved by suppressing the 
compiler's support for ILP32 when the -mabi option is not found 
available in gas during the configuration time.

I had a quick look at areas need to be updated:

* multilib support

In gcc/config.gcc, the default and the only accepted value for 
--with-multilib-list and --with-abi shall be lp64 when -mabi is not 
available.

* -mabi option

I suggest we keep the -mabi option, but reject -mabi=ilp32 in 
gcc/config/aarch64/aarch64.c:aarch64_override_options ()

* driver spec

In gcc/config/aarch64/aarch64-elf.h, the DRIVER_SELF_SPECS and ASM_SPEC 
shall be updated to not pass/specify -mabi for gas.

* documentation

I think it needs to be mentioned in gcc/doc/install.texi the constraint 
of using pre-2.24 binutils with aarch64 gcc that is 4.9 or later.

It is a quick scouting, but hopefully it has provided provide some 
guidance.  If you need more help, just let me know.


Yufeng

P.s. some minor comments on the attached patch.

>
> diff --git a/gcc/configure b/gcc/configure
> index fdf0cd0..17b6e85 100755
> --- a/gcc/configure
> +++ b/gcc/configure

Diff result of auto-generation is usually excluded from a patch.

> diff --git a/gcc/configure.ac b/gcc/configure.ac
> index 91a22d5..730ada0 100644
> --- a/gcc/configure.ac
> +++ b/gcc/configure.ac
> @@ -3532,6 +3532,15 @@ case "$target" in
>   		[Define if your assembler supports the -no-mul-bug-abort option.])])
>       ;;
>
> + aarch64-*-*)

aarch64*-*-*

> +    gcc_GAS_CHECK_FEATURE([-mabi option],
> +      gcc_cv_as_aarch64_mabi,,
> +      [-mabi=lp64], [.text],,,)
> +    if test x$gcc_cv_as_aarch64_mabi = xno; then
> +	AC_MSG_ERROR([Assembler support for -mabi=lp64 is required. Upgrade the Assembler.])
> +    fi
> +    ;;
> +
>     sparc*-*-*)
>       gcc_GAS_CHECK_FEATURE([.register], gcc_cv_as_sparc_register_op,,,
>         [.register %g2, #scratch],,
>
diff mbox

Patch

diff --git a/gcc/configure b/gcc/configure
index fdf0cd0..17b6e85 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -24057,6 +24057,38 @@  $as_echo "#define HAVE_AS_NO_MUL_BUG_ABORT_OPTION 1" >>confdefs.h
 fi
     ;;
 
+ aarch64-*-*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for -mabi option" >&5
+$as_echo_n "checking assembler for -mabi option... " >&6; }
+if test "${gcc_cv_as_aarch64_mabi+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gcc_cv_as_aarch64_mabi=no
+  if test x$gcc_cv_as != x; then
+    $as_echo '.text' > conftest.s
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -mabi=lp64 -o conftest.o conftest.s >&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+    then
+	gcc_cv_as_aarch64_mabi=yes
+    else
+      echo "configure: failed program was" >&5
+      cat conftest.s >&5
+    fi
+    rm -f conftest.o conftest.s
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_aarch64_mabi" >&5
+$as_echo "$gcc_cv_as_aarch64_mabi" >&6; }
+
+    if test x$gcc_cv_as_aarch64_mabi = xno; then
+	as_fn_error "Assembler support for -mabi=lp64 is required. Upgrade the Assembler." "$LINENO" 5
+    fi
+    ;;
+
   sparc*-*-*)
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .register" >&5
 $as_echo_n "checking assembler for .register... " >&6; }
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 91a22d5..730ada0 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -3532,6 +3532,15 @@  case "$target" in
 		[Define if your assembler supports the -no-mul-bug-abort option.])])
     ;;
 
+ aarch64-*-*)
+    gcc_GAS_CHECK_FEATURE([-mabi option],
+      gcc_cv_as_aarch64_mabi,,
+      [-mabi=lp64], [.text],,,)
+    if test x$gcc_cv_as_aarch64_mabi = xno; then
+	AC_MSG_ERROR([Assembler support for -mabi=lp64 is required. Upgrade the Assembler.])
+    fi
+    ;;
+
   sparc*-*-*)
     gcc_GAS_CHECK_FEATURE([.register], gcc_cv_as_sparc_register_op,,,
       [.register %g2, #scratch],,