forked from Imagelibrary/binutils-gdb
gas: pru: Fix trailing whitespace handling
With commit6ae8a30d44, 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 with6ae8a30d44reverted, 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>
This commit is contained in:
@@ -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;
|
||||
|
||||
11
gas/testsuite/gas/pru/pr32073.d
Normal file
11
gas/testsuite/gas/pru/pr32073.d
Normal file
@@ -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
|
||||
6
gas/testsuite/gas/pru/pr32073.s
Normal file
6
gas/testsuite/gas/pru/pr32073.s
Normal file
@@ -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 /* ... */
|
||||
Reference in New Issue
Block a user