aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorStephen Casner <casner@acm.org>2020-05-27 18:40:38 -0700
committerStephen Casner <casner@acm.org>2020-05-27 18:40:38 -0700
commit1c912705af057b0d30ea51af46d8a00014a84034 (patch)
treec1ee20550f9f18c06ad31ae480c4440d76c3510f /gas
parent92eb6ed1779e5bb675d99b2be472021ac0703656 (diff)
downloadgdb-1c912705af057b0d30ea51af46d8a00014a84034.zip
gdb-1c912705af057b0d30ea51af46d8a00014a84034.tar.gz
gdb-1c912705af057b0d30ea51af46d8a00014a84034.tar.bz2
Fix PR gas/26001 (pdp11-*-*)
PR gas/26001 * gas/config/tc-pdp11.c (parse_reg): Distinguish register names from symbols that begin with a register name. * gas/testsuite/gas/pdp11/pdp11.exp: Add test of such symbols. * gas/testsuite/gas/pdp11/pr26001.s: Likewise. * gas/testsuite/gas/pdp11/pr26001.d: Likewise.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog9
-rw-r--r--gas/config/tc-pdp11.c11
-rw-r--r--gas/testsuite/gas/pdp11/pdp11.exp1
-rw-r--r--gas/testsuite/gas/pdp11/pr26001.d12
-rw-r--r--gas/testsuite/gas/pdp11/pr26001.s9
5 files changed, 41 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 0d1565f..c0b3dc8 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,12 @@
+2020-05-27 Stephen Casner <casner@acm.org>
+
+ PR gas/26001
+ * config/tc-pdp11.c (parse_reg): Distinguish register names from
+ symbols that begin with a register name.
+ * testsuite/gas/pdp11/pdp11.exp: Add test of such symbols.
+ * testsuite/gas/pdp11/pr26001.s: Likewise.
+ * testsuite/gas/pdp11/pr26001.d: Likewise.
+
2020-05-27 Simon Cook <simon.cook@embecosm.com>
* config/tc-riscv.c (riscv_init_csr_hash): NULL initilize next
diff --git a/gas/config/tc-pdp11.c b/gas/config/tc-pdp11.c
index d38a3cd..57daa0f 100644
--- a/gas/config/tc-pdp11.c
+++ b/gas/config/tc-pdp11.c
@@ -358,8 +358,17 @@ parse_reg (char *str, struct pdp11_code *operand)
str += 2;
}
else
- operand->error = _("Bad register name");
+ {
+ operand->error = _("Bad register name");
+ return str;
+ }
+ if (ISALNUM (*str) || *str == '_' || *str == '.')
+ {
+ operand->error = _("Bad register name");
+ str -= 2;
+ }
+
return str;
}
diff --git a/gas/testsuite/gas/pdp11/pdp11.exp b/gas/testsuite/gas/pdp11/pdp11.exp
index e27dd05..65c6a05 100644
--- a/gas/testsuite/gas/pdp11/pdp11.exp
+++ b/gas/testsuite/gas/pdp11/pdp11.exp
@@ -23,4 +23,5 @@ if [expr [istarget "pdp11-*-*"]] then {
run_dump_test "absreloc"
run_dump_test "pr14480"
run_dump_test "pr23481"
+ run_dump_test "pr26001"
}
diff --git a/gas/testsuite/gas/pdp11/pr26001.d b/gas/testsuite/gas/pdp11/pr26001.d
new file mode 100644
index 0000000..a6ccdef
--- /dev/null
+++ b/gas/testsuite/gas/pdp11/pr26001.d
@@ -0,0 +1,12 @@
+#name: PR 26001 - distinguish register names from symbols
+#objdump: -dw
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+00 <start>:
+[ ]+0:[ ]+09f7 fffc[ ]+jsr[ ]+pc, 0 <start>
+[ ]+4:[ ]+1037 0004[ ]+mov[ ]+r0, \$c <space>
+[ ]+8:[ ]+1dc1 0002[ ]+mov[ ]+\$e <r00f>, r1
+#pass
diff --git a/gas/testsuite/gas/pdp11/pr26001.s b/gas/testsuite/gas/pdp11/pr26001.s
new file mode 100644
index 0000000..44faa14
--- /dev/null
+++ b/gas/testsuite/gas/pdp11/pr26001.s
@@ -0,0 +1,9 @@
+ .text
+ .globl sprintf
+start: jsr pc,sprintf
+ mov r0,space
+ mov r00f,r1
+ .data
+space: .word 0
+r00f: .word 0
+ .end