aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2025-01-18 22:39:05 +1030
committerAlan Modra <amodra@gmail.com>2025-01-21 08:45:01 +1030
commit6427e777b99ec6505509a68de6d460ff772bee6a (patch)
tree51b8c09ae154782ea47669099ec2dc93d53b3c13
parent592819f7188509713f3db6dbe6bc7d0b7e3af89e (diff)
downloadbinutils-6427e777b99ec6505509a68de6d460ff772bee6a.zip
binutils-6427e777b99ec6505509a68de6d460ff772bee6a.tar.gz
binutils-6427e777b99ec6505509a68de6d460ff772bee6a.tar.bz2
Support broken gcc test for gas string merge support
On casual reading of older gcc configure scripts it might be supposed that the test for gas string merge support tries with %progbits after a fail on ARM with @progbits. It doesn't succeed due to a bug. So to support building of older gcc's for ARM without users having to edit gcc sources, add a hack to gas. The hack can disappear in a few years when building older gcc's likely requires other work too. I've changed the docs to reflect what we actually allow for .section syntax prior to this patch. (No way should this hack be documented as allowed!) PR 32491 * config/obj-elf.c (obj_elf_section): Allow missing entsize for ARM gcc configure bug. * doc/as.texi: Correct syntax of ELF .section directive. * testsuite/gas/elf/string.s, * testsuite/gas/elf/string.d: Test it.
-rw-r--r--gas/config/obj-elf.c26
-rw-r--r--gas/doc/as.texi2
-rw-r--r--gas/testsuite/gas/elf/string.d2
-rw-r--r--gas/testsuite/gas/elf/string.s4
4 files changed, 27 insertions, 7 deletions
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index 6670b9a..b3b2025 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -1324,13 +1324,27 @@ obj_elf_section (int push)
&& (bfd_section_flags (now_seg)
& (SEC_MERGE | SEC_STRINGS)) != 0)
goto fetch_entsize;
- entsize = get_absolute_expression ();
- SKIP_WHITESPACE ();
- if (entsize <= 0)
+ if (is_end_of_line[(unsigned char) *input_line_pointer])
+ {
+ /* ??? This is here for older versions of gcc that
+ test for gas string merge support with
+ '.section .rodata.str, "aMS", @progbits, 1'
+ Unfortunately '@' begins a comment on arm.
+ This isn't as_warn because gcc tests with
+ --fatal-warnings. */
+ as_tsktsk (_("missing merge / string entity size, 1 assumed"));
+ entsize = 1;
+ }
+ else
{
- as_warn (_("invalid merge / string entity size"));
- attr &= ~(SHF_MERGE | SHF_STRINGS);
- entsize = 0;
+ entsize = get_absolute_expression ();
+ SKIP_WHITESPACE ();
+ if (entsize <= 0)
+ {
+ as_warn (_("invalid merge / string entity size"));
+ attr &= ~(SHF_MERGE | SHF_STRINGS);
+ entsize = 0;
+ }
}
}
else if ((attr & (SHF_MERGE | SHF_STRINGS)) != 0 && inherit
diff --git a/gas/doc/as.texi b/gas/doc/as.texi
index d95ce9c..afe1737 100644
--- a/gas/doc/as.texi
+++ b/gas/doc/as.texi
@@ -6884,7 +6884,7 @@ This is one of the ELF section stack manipulation directives. The others are
For ELF targets, the @code{.section} directive is used like this:
@smallexample
-.section @var{name} [, "@var{flags}"[, @@@var{type}[,@var{flag_specific_arguments}]]]
+.section @var{name} [, "@var{flags}"[, @@@var{type}][,@var{flag_specific_arguments}]]
@end smallexample
@anchor{Section Name Substitutions}
diff --git a/gas/testsuite/gas/elf/string.d b/gas/testsuite/gas/elf/string.d
index 6fcfe46..6dbd2d5 100644
--- a/gas/testsuite/gas/elf/string.d
+++ b/gas/testsuite/gas/elf/string.d
@@ -1,9 +1,11 @@
#readelf: -SW
#name: string sections
+#warning: (.*missing merge / string entity size, 1 assumed)?
#...
[ ]*\[.*\][ ]+\.str1[ ]+PROGBITS[ ]+0+[ ]+[0-9a-f]+[ ]+[0-9a-f]+[ ]+01[ ]+S[ ]+.*
[ ]*\[.*\][ ]+\.str2[ ]+PROGBITS[ ]+0+[ ]+[0-9a-f]+[ ]+[0-9a-f]+[ ]+01[ ]+S[ ]+.*
[ ]*\[.*\][ ]+\.str3[ ]+PROGBITS[ ]+0+[ ]+[0-9a-f]+[ ]+[0-9a-f]+[ ]+01[ ]+S[ ]+.*
[ ]*\[.*\][ ]+\.str4[ ]+PROGBITS[ ]+0+[ ]+[0-9a-f]+[ ]+[0-9a-f]+[ ]+02[ ]+S[ ]+.*
+[ ]*\[.*\][ ]+\.rodata\.str[ ]+PROGBITS[ ]+0+[ ]+[0-9a-f]+[ ]+[0-9a-f]+[ ]+01[ ]+AMS[ ]+.*
#pass
diff --git a/gas/testsuite/gas/elf/string.s b/gas/testsuite/gas/elf/string.s
index 78c22f7..7733cfb 100644
--- a/gas/testsuite/gas/elf/string.s
+++ b/gas/testsuite/gas/elf/string.s
@@ -8,3 +8,7 @@
.asciz "ghi"
.section .str4,"S",%progbits,2
.short 32, 0
+# The following is used in older versions of gcc to test for gas
+# string merge support. On arm, @ begins a comment.
+ .section .rodata.str, "aMS", @progbits, 1
+ .asciz "jkl"