aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2024-07-26 08:00:42 +0200
committerJan Beulich <jbeulich@suse.com>2024-07-26 08:00:42 +0200
commite0b9535c824deb24e209acddcb7662124aeb413f (patch)
tree5a02d18ed2ba0d4f8d7fee385829cffb2f59d48a
parentc97f0d71ea9cc5c3bf63aacef34b5ebc95dd3b9a (diff)
downloadgdb-e0b9535c824deb24e209acddcb7662124aeb413f.zip
gdb-e0b9535c824deb24e209acddcb7662124aeb413f.tar.gz
gdb-e0b9535c824deb24e209acddcb7662124aeb413f.tar.bz2
gas: drop scrubber state -2
Instead re-use code handling LEX_IS_TWOCHAR_COMMENT_1ST, thus ensuring that we wouldn't get bogus state transitions: For example, when we're in states 0 or 1, a comment should be no different from whitespace encountered in those states. Plus for e.g. x86 this results in such comments now truly being converted to a blank, as mandated by documentation. Both aspects apparently were a result of blindly (and wrongly) moving to state 3 _before_ consuming the "ungot" blank. Also amend a related comment elsewhere. In the new testcase the .irp is to make visible in the listing all the whitespace that the scrubber inserts / leaves in place.
-rw-r--r--gas/app.c54
-rw-r--r--gas/testsuite/gas/i386/comments.l30
-rw-r--r--gas/testsuite/gas/i386/comments.s13
-rw-r--r--gas/testsuite/gas/i386/i386.exp1
4 files changed, 50 insertions, 48 deletions
diff --git a/gas/app.c b/gas/app.c
index 6a3efb1..fa87785 100644
--- a/gas/app.c
+++ b/gas/app.c
@@ -217,7 +217,8 @@ do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED)
lex[(unsigned char) *p] = LEX_IS_PARALLEL_SEPARATOR;
#endif
- /* Only allow slash-star comments if slash is not in use.
+ /* Only allow slash-star comments if slash is not in use. Certain
+ other cases are dealt with in LEX_IS_LINE_COMMENT_START handling.
FIXME: This isn't right. We should always permit them. */
if (lex['/'] == 0)
lex['/'] = LEX_IS_TWOCHAR_COMMENT_1ST;
@@ -476,7 +477,6 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen,
10: After seeing whitespace in state 9 (keep white before symchar)
11: After seeing a symbol character in state 0 (eg a label definition)
-1: output string in out_string and go to the state in old_state
- -2: flush text until a '*' '/' is seen, then go to state old_state
12: no longer used
#ifdef DOUBLEBAR_PARALLEL
13: After seeing a vertical bar, looking for a second
@@ -579,43 +579,6 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen,
PUT (ch);
continue;
- case -2:
- for (;;)
- {
- do
- {
- ch = GET ();
-
- if (ch == EOF)
- {
- as_warn (_("end of file in comment"));
- goto fromeof;
- }
-
- if (ch == '\n')
- PUT ('\n');
- }
- while (ch != '*');
-
- while ((ch = GET ()) == '*')
- ;
-
- if (ch == EOF)
- {
- as_warn (_("end of file in comment"));
- goto fromeof;
- }
-
- if (ch == '/')
- break;
-
- UNGET (ch);
- }
-
- state = old_state;
- UNGET (' ');
- continue;
-
case 4:
ch = GET ();
if (ch == EOF)
@@ -1076,6 +1039,7 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen,
ch2 = GET ();
if (ch2 == '*')
{
+ twochar_comment:
for (;;)
{
do
@@ -1290,15 +1254,9 @@ do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen,
{
ch2 = GET ();
if (ch2 == '*')
- {
- old_state = 3;
- state = -2;
- break;
- }
- else if (ch2 != EOF)
- {
- UNGET (ch2);
- }
+ goto twochar_comment;
+ if (ch2 != EOF)
+ UNGET (ch2);
}
if (state == 0 || state == 1) /* Only comment at start of line. */
diff --git a/gas/testsuite/gas/i386/comments.l b/gas/testsuite/gas/i386/comments.l
new file mode 100644
index 0000000..7aef3a1
--- /dev/null
+++ b/gas/testsuite/gas/i386/comments.l
@@ -0,0 +1,30 @@
+.*: Assembler messages:
+.*:6: Error: .*
+.*:7: Error: .*
+[ ]*[0-9]+[ ]+scrubber:
+[ ]*[0-9]+[ ]+\.irp x,""
+[ ]*[0-9]+[ ]*
+[ ]*[0-9]+[ ]+/\* \*/vaddps %zmm0, %zmm1, %zmm2
+[ ]*[0-9]+[ ]+vaddps/\*\*/%zmm0, %zmm1, %zmm2
+[ ]*[0-9]+[ ]+vadd/\*\*/ps %zmm0, %zmm1, %zmm2
+[ ]*[0-9]+[ ]+vaddps %zmm/\*\*/0, %zmm1, %zmm2
+[ ]*[0-9]+[ ]*
+[ ]*[0-9]+[ ]+vaddps %zmm0, %zmm1, %zmm2# ...
+[ ]*[0-9]+[ ]+vaddps %zmm0, %zmm1, %zmm2 # ...
+[ ]*[0-9]+[ ]+vaddps %zmm0, %zmm1, %zmm2/\* \*/# ...
+[ ]*[0-9]+[ ]*
+[ ]*[0-9]+[ ]+\.endr
+[ ]*[0-9]+[ ]+> +
+[ ]*[0-9]+ \?\?\?\? [0-9A-F]+[ ]+> vaddps %zmm0,%zmm1,%zmm2
+#...
+[ ]*[0-9]+ \?\?\?\? [0-9A-F]+[ ]+> vaddps %zmm0,%zmm1,%zmm2
+#...
+[ ]*[0-9]+[ ]+> vadd ps %zmm0,%zmm1,%zmm2
+[ ]*[0-9]+[ ]+> vaddps %zmm 0,%zmm1,%zmm2
+[ ]*[0-9]+[ ]+> +
+[ ]*[0-9]+ \?\?\?\? [0-9A-F]+[ ]+> vaddps %zmm0,%zmm1,%zmm2
+#...
+[ ]*[0-9]+ \?\?\?\? [0-9A-F]+[ ]+> vaddps %zmm0,%zmm1,%zmm2
+#...
+[ ]*[0-9]+ \?\?\?\? [0-9A-F]+[ ]+> vaddps %zmm0,%zmm1,%zmm2
+#pass
diff --git a/gas/testsuite/gas/i386/comments.s b/gas/testsuite/gas/i386/comments.s
new file mode 100644
index 0000000..ea700eb
--- /dev/null
+++ b/gas/testsuite/gas/i386/comments.s
@@ -0,0 +1,13 @@
+scrubber:
+ .irp x,""
+
+/* */vaddps %zmm0, %zmm1, %zmm2
+ vaddps/**/%zmm0, %zmm1, %zmm2
+ vadd/**/ps %zmm0, %zmm1, %zmm2
+ vaddps %zmm/**/0, %zmm1, %zmm2
+
+ vaddps %zmm0, %zmm1, %zmm2# ...
+ vaddps %zmm0, %zmm1, %zmm2 # ...
+ vaddps %zmm0, %zmm1, %zmm2/* */# ...
+
+ .endr
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index bf9cb26..590a55d 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -105,6 +105,7 @@ if [gas_32_check] then {
run_dump_test "equ"
run_list_test "equ-2" "-al"
run_list_test "equ-bad"
+ run_list_test "comments" "-almn"
run_dump_test "curly"
run_dump_test "separator"
run_dump_test "divide"