]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: pru: Fix trailing whitespace handling
authorDimitar Dimitrov <dimitar@dinux.eu>
Mon, 12 Aug 2024 19:25:57 +0000 (22:25 +0300)
committerDimitar Dimitrov <dimitar@dinux.eu>
Thu, 15 Aug 2024 15:14:42 +0000 (18:14 +0300)
With commit 6ae8a30d44f016cafb46a75843b5109316eb1996, arguments followed
by a C-style comment ended up with a trailing space.  That extra space
character confused the PRU register name matching, leading to spurious
errors about unrecognized registers.  This affected existing code like
newlib's setjmp.s for pru.

Fix by stripping the trailing whitespace for any argument.

Even with 6ae8a30d44f016cafb46a75843b5109316eb1996 reverted, this patch
is safe to be applied.

Successfully regression-tested with GCC and newlib testsuites for pru-unknown-elf.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
gas/config/tc-pru.c
gas/testsuite/gas/pru/pr32073.d [new file with mode: 0644]
gas/testsuite/gas/pru/pr32073.s [new file with mode: 0644]

index 99a3c1ef88ce23189a259dfbfbea5605290b726c..fb158fb06e60e0f6bda30f59a9388eb172a586e7 100644 (file)
@@ -1401,6 +1401,7 @@ pru_parse_args (pru_insn_infoS *insn ATTRIBUTE_UNUSED, char *argstr,
   char *p;
   char *end = NULL;
   int i;
+  size_t len;
   p = argstr;
   i = 0;
   bool terminate = false;
@@ -1437,6 +1438,13 @@ pru_parse_args (pru_insn_infoS *insn ATTRIBUTE_UNUSED, char *argstr,
            as_bad (_("too many arguments"));
        }
 
+      /* Strip trailing whitespace.  */
+      len = strlen (parsed_args[i]);
+      for (char *temp = parsed_args[i] + len - 1;
+          len && ISSPACE (*temp);
+          temp--, len--)
+       *temp = '\0';
+
       if (*parsestr == '\0' || (p != NULL && *p == '\0'))
        terminate = true;
       ++i;
diff --git a/gas/testsuite/gas/pru/pr32073.d b/gas/testsuite/gas/pru/pr32073.d
new file mode 100644 (file)
index 0000000..ac353bd
--- /dev/null
@@ -0,0 +1,11 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: whitespace parsing
+
+# Test the whitespace parsing
+
+.*: +file format elf32-pru
+
+Disassembly of section .text:
+0+0000 <[^>]*> 1300e2e1        mov     r1, sp
+0+0004 <[^>]*> 1300e2e1        mov     r1, sp
+0+0008 <[^>]*> 1300e2e1        mov     r1, sp
diff --git a/gas/testsuite/gas/pru/pr32073.s b/gas/testsuite/gas/pru/pr32073.s
new file mode 100644 (file)
index 0000000..ebfab23
--- /dev/null
@@ -0,0 +1,6 @@
+# Source file used to test the whitespace parsing.
+
+foo:
+       mov     r1 /* comment */, r2    /* ... */
+       mov     r1      /* comment */, r2       /* ... */
+       mov     /* x */ r1      /* comment */ , r2      /* ... */