aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleg Endo <olegendo@gcc.gnu.org>2018-01-22 14:31:10 +0000
committerNick Clifton <nickc@redhat.com>2018-01-22 14:31:10 +0000
commit49da480ff6208abc419fe66e030dfa052c11ee1b (patch)
tree757bba068e6add31ea3649048ea1de7735e8284e
parentf433138f1f9e6b8bcd93145a40ebae6c5d996792 (diff)
downloadgdb-49da480ff6208abc419fe66e030dfa052c11ee1b.zip
gdb-49da480ff6208abc419fe66e030dfa052c11ee1b.tar.gz
gdb-49da480ff6208abc419fe66e030dfa052c11ee1b.tar.bz2
Fix the RX assembler so that it can handle escaped double quote characters, ie: \"
PR 22737 * config/tc-rx.c (rx_start_line): Handle escaped double-quote character. * testsuite/gas/rx/pr22737.s: New test. * testsuite/gas/rx/pr22737.d: Likewise. * testsuite/gas/rx/rx.exp: Run the new test.
-rw-r--r--gas/ChangeLog8
-rw-r--r--gas/config/tc-rx.c7
-rw-r--r--gas/testsuite/gas/rx/pr22737.d15
-rw-r--r--gas/testsuite/gas/rx/pr22737.s1
-rw-r--r--gas/testsuite/gas/rx/rx.exp1
5 files changed, 30 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 001d30d..7e81c3e 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,11 @@
+2018-01-22 Oleg Endo <olegendo@gcc.gnu.org>
+
+ PR 22737
+ * config/tc-rx.c (rx_start_line): Handle escaped double-quote character.
+ * testsuite/gas/rx/pr22737.s: New test.
+ * testsuite/gas/rx/pr22737.d: Likewise.
+ * testsuite/gas/rx/rx.exp: Run the new test.
+
2018-01-19 Thomas Preud'homme <thomas.preudhomme@arm.com>
* config/tc-arm.c (ToC macro): Remove spurious comment.
diff --git a/gas/config/tc-rx.c b/gas/config/tc-rx.c
index 8e49ddd..6c8befe 100644
--- a/gas/config/tc-rx.c
+++ b/gas/config/tc-rx.c
@@ -2681,6 +2681,7 @@ rx_start_line (void)
int in_single_quote = 0;
int done = 0;
char * p = input_line_pointer;
+ char prev_char = 0;
/* Scan the line looking for question marks. Skip past quote enclosed regions. */
do
@@ -2693,7 +2694,9 @@ rx_start_line (void)
break;
case '"':
- in_double_quote = ! in_double_quote;
+ /* Handle escaped double quote \" inside a string. */
+ if (prev_char != '\\')
+ in_double_quote = ! in_double_quote;
break;
case '\'':
@@ -2722,7 +2725,7 @@ rx_start_line (void)
break;
}
- p ++;
+ prev_char = *p++;
}
while (! done);
}
diff --git a/gas/testsuite/gas/rx/pr22737.d b/gas/testsuite/gas/rx/pr22737.d
new file mode 100644
index 0000000..3705408
--- /dev/null
+++ b/gas/testsuite/gas/rx/pr22737.d
@@ -0,0 +1,15 @@
+#objdump: -dr
+
+dump.o: file format elf32-rx-le
+
+
+Disassembly of section .*:
+
+00000000 <.*>:
+ 0: ff 16.*
+ 2: c8 1f 68 22.*
+ 6: d0 64.*
+ 8: a0 3f.*
+ a: 3a e1 4f.*
+ d: da 0e 8c b6 c6 9c.*
+.*
diff --git a/gas/testsuite/gas/rx/pr22737.s b/gas/testsuite/gas/rx/pr22737.s
new file mode 100644
index 0000000..74b29f0
--- /dev/null
+++ b/gas/testsuite/gas/rx/pr22737.s
@@ -0,0 +1 @@
+.ascii "\377\026\310\037h\"\320d\240?:\341O\332\016\214\266\306\234."
diff --git a/gas/testsuite/gas/rx/rx.exp b/gas/testsuite/gas/rx/rx.exp
index d8cca78..e6d21dda 100644
--- a/gas/testsuite/gas/rx/rx.exp
+++ b/gas/testsuite/gas/rx/rx.exp
@@ -35,3 +35,4 @@ foreach test [lsort [glob $srcdir/$subdir/*.sm]] {
run_dump_test "rx-asm-good"
# run_list_test "rx-asm-bad" "" "Generation of error messages with bogus Renesas assembler directives"
run_dump_test "pr19665"
+run_dump_test "pr22737"