diff options
author | Thiago Jung Bauermann <thiago.bauermann@linaro.org> | 2024-12-27 18:47:56 -0300 |
---|---|---|
committer | Thiago Jung Bauermann <thiago.bauermann@linaro.org> | 2025-01-08 18:40:38 -0300 |
commit | 36eee5a74eb6d4c48a3a22cd71b3944bac499d0a (patch) | |
tree | d30a4d701fb013ec87d6f3bdc73d62d650d26028 /gcc | |
parent | c42261d89538c416464c2191e4c72ec002a43cd0 (diff) | |
download | gcc-36eee5a74eb6d4c48a3a22cd71b3944bac499d0a.zip gcc-36eee5a74eb6d4c48a3a22cd71b3944bac499d0a.tar.gz gcc-36eee5a74eb6d4c48a3a22cd71b3944bac499d0a.tar.bz2 |
gcc/configure: Fix check for assembler section merging support on Arm
In 32-bit Arm assembly, the @ character is the start of a comment so
the section type needs to use the % character instead.
configure.ac attempts to account for this difference by doing a second
try when checking the assembler for section merging support.
Unfortunately there is a bug: because the gcc_GAS_CHECK_FEATURE macro
has a call to AC_CACHE_CHECK, it will actually skip the second try
because the gcc_cv_as_shf_merge variable has already been set:
checking assembler for section merging support... no
checking assembler for section merging support... (cached) no
Fix by using a separate variable for the second try, as is done in the
check for COMDAT group support.
This problem was noticed because the recent binutils commit
d5cbf916be4a ("gas/ELF: also reject merge entity size being zero") caused
gas to be stricter about mergeable sections without an entity size:
configure:27013: checking assembler for section merging support
configure:27022: /path/to/as --fatal-warnings -o conftest.o conftest.s >&5
conftest.s: Assembler messages:
conftest.s:1: Warning: invalid merge / string entity size
conftest.s: Error: 1 warning, treating warnings as errors
configure:27025: $? = 1
configure: failed program was
.section .rodata.str, "aMS", @progbits, 1
configure:27036: result: no
In previous versions of gas the conftest.s program above was accepted
and configure detected support for section merging.
See also:
https://linaro.atlassian.net/browse/GNU-1427
https://sourceware.org/bugzilla/show_bug.cgi?id=32491
Tested on armv8l-linux-gnueabihf.
gcc/ChangeLog:
* configure.ac: Fix check for HAVE_GAS_SHF_MERGE on Arm targets.
* configure: Regenerate.
Diffstat (limited to 'gcc')
-rwxr-xr-x | gcc/configure | 17 | ||||
-rw-r--r-- | gcc/configure.ac | 6 |
2 files changed, 13 insertions, 10 deletions
diff --git a/gcc/configure b/gcc/configure index a495762..b4c52de 100755 --- a/gcc/configure +++ b/gcc/configure @@ -27038,12 +27038,12 @@ $as_echo "$gcc_cv_as_shf_merge" >&6; } if test $gcc_cv_as_shf_merge = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for section merging support" >&5 -$as_echo_n "checking assembler for section merging support... " >&6; } -if ${gcc_cv_as_shf_merge+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for section merging support (%progbits)" >&5 +$as_echo_n "checking assembler for section merging support (%progbits)... " >&6; } +if ${gcc_cv_as_shf_merge_percent+:} false; then : $as_echo_n "(cached) " >&6 else - gcc_cv_as_shf_merge=no + gcc_cv_as_shf_merge_percent=no if test x$gcc_cv_as != x; then $as_echo '.section .rodata.str, "aMS", %progbits, 1' > conftest.s if { ac_try='$gcc_cv_as $gcc_cv_as_flags --fatal-warnings -o conftest.o conftest.s >&5' @@ -27053,7 +27053,7 @@ else $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then - gcc_cv_as_shf_merge=yes + gcc_cv_as_shf_merge_percent=yes else echo "configure: failed program was" >&5 cat conftest.s >&5 @@ -27061,14 +27061,15 @@ else rm -f conftest.o conftest.s fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_shf_merge" >&5 -$as_echo "$gcc_cv_as_shf_merge" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_shf_merge_percent" >&5 +$as_echo "$gcc_cv_as_shf_merge_percent" >&6; } fi cat >>confdefs.h <<_ACEOF -#define HAVE_GAS_SHF_MERGE `if test $gcc_cv_as_shf_merge = yes; then echo 1; else echo 0; fi` +#define HAVE_GAS_SHF_MERGE `if test $gcc_cv_as_shf_merge = yes \ + || test $gcc_cv_as_shf_merge_percent = yes; then echo 1; else echo 0; fi` _ACEOF diff --git a/gcc/configure.ac b/gcc/configure.ac index 2426163..6c38c49 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -3612,12 +3612,14 @@ gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge, [--fatal-warnings], [.section .rodata.str, "aMS", @progbits, 1]) if test $gcc_cv_as_shf_merge = no; then - gcc_GAS_CHECK_FEATURE(section merging support, gcc_cv_as_shf_merge, + gcc_GAS_CHECK_FEATURE(section merging support (%progbits), + gcc_cv_as_shf_merge_percent, [--fatal-warnings], [.section .rodata.str, "aMS", %progbits, 1]) fi AC_DEFINE_UNQUOTED(HAVE_GAS_SHF_MERGE, - [`if test $gcc_cv_as_shf_merge = yes; then echo 1; else echo 0; fi`], + [`if test $gcc_cv_as_shf_merge = yes \ + || test $gcc_cv_as_shf_merge_percent = yes; then echo 1; else echo 0; fi`], [Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.]) gcc_GAS_CHECK_FEATURE([COMDAT group support (GNU as)], |