This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [RX] Fix for Bug 22737
- From: Oleg Endo <oleg dot endo at t-online dot de>
- To: binutils <binutils at sourceware dot org>
- Cc: Nick Clifton <nickc at redhat dot com>
- Date: Mon, 22 Jan 2018 23:19:36 +0900
- Subject: Re: [RX] Fix for Bug 22737
- Authentication-results: sourceware.org; auth=none
- References: <1516448465.13888.2.camel@t-online.de>
Hi,
This is the updated patch now with GAS test case and ChangeLog entry.
Tested with "make check" before and after the patch to make sure that
the testcase actually works.
Cheers,
Oleg
gas/ChangeLog:
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: Likewise.
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"