]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: generated code/data listing output vs .endr and alike
authorJan Beulich <jbeulich@suse.com>
Fri, 30 Aug 2024 09:21:58 +0000 (11:21 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 30 Aug 2024 09:21:58 +0000 (11:21 +0200)
These ending directives are swallowed by buffer_and_nest() and hence
aren't seen by read_a_source_file(). Thus they also weren't announced to
the listing subsystem. That was, when macro expansions are included,
thus misguided to associate possible output resulting from the first
line of the construct being expanded with both the .endr and that first
line (i.e. showing it twice).

gas/macro.c
gas/testsuite/gas/macros/macros.exp
gas/testsuite/gas/macros/rept.l [new file with mode: 0644]

index d0c90d30e47b223df84545b4dd4201facc9c3542..8b376f7f490ba6923f99c8b77875b0946b937989 100644 (file)
@@ -220,6 +220,11 @@ buffer_and_nest (const char *from, const char *to, sb *ptr,
                {
                  /* Reset the string to not include the ending rune.  */
                  ptr->len = line_start;
+
+                 /* With the ending directive consumed here, announce the
+                    line for macro-expanded listings. */
+                 if (listing & LISTING_MACEXP)
+                   listing_newline (NULL);
                  break;
                }
            }
index 3e84902c65fcced34646654e4a55be175efc66f3..3ac199feaa500344a21a56168845b16e657063ea 100644 (file)
@@ -29,6 +29,7 @@ run_dump_test test3
 if { ![istarget *c54x*-*-*] && ![istarget *c4x*-*-*] && ![istarget "nds32*-*-*"] } {
     run_dump_test irp
     run_dump_test rept
+    run_list_test rept "-almn"
     run_dump_test repeat
     run_dump_test vararg
 }
diff --git a/gas/testsuite/gas/macros/rept.l b/gas/testsuite/gas/macros/rept.l
new file mode 100644 (file)
index 0000000..626e9dc
--- /dev/null
@@ -0,0 +1,8 @@
+#...
+[      ]*[1-9][0-9]*[  ]+\.rept        3
+[      ]*[1-9][0-9]*[  ]+\.long        foo1
+[      ]*[1-9][0-9]*[  ]+\.endr
+[      ]*[1-9][0-9]* 0000 [0   ]+> +\.long foo1
+[      ]*[1-9][0-9]* 000[48] [0        ]+> +\.long foo1
+[      ]*[1-9][0-9]* 00[01][08] [0     ]+> +\.long foo1
+#pass