Message ID | 529F98A0.8020503@linaro.org |
---|---|
State | Superseded |
Headers | show |
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 --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],,