]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Support broken gcc test for gas string merge support
authorAlan Modra <amodra@gmail.com>
Sat, 18 Jan 2025 12:09:05 +0000 (22:39 +1030)
committerAlan Modra <amodra@gmail.com>
Tue, 21 Jan 2025 11:07:18 +0000 (21:37 +1030)
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.

(cherry picked from commit 6427e777b99ec6505509a68de6d460ff772bee6a)

gas/config/obj-elf.c
gas/doc/as.texi
gas/testsuite/gas/elf/string.d
gas/testsuite/gas/elf/string.s

index b5e1c1371b22b2026e37cd955e460605b27bd8c5..1aa4f404c877d5b801fc11a3efa5a8cf3718b575 100644 (file)
@@ -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
index d95ce9cf714f6fd4b8a517df4c73db06f8a1392f..afe1737f4cee41481d2b942a19af9143cf6160b7 100644 (file)
@@ -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}
index 6fcfe468af5d2b19f2affc66829beeda1f11808b..6dbd2d5dace1d0db35913044c8266f046cc23f45 100644 (file)
@@ -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
index 78c22f7496cbcb29e92713d50bf5419dfe10b560..7733cfb31c2e2c9f1d308e75206c0330bb4370be 100644 (file)
@@ -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"