[PATCH] aarch64: Fix segfault on unicode symbols

Alex Coplan alex.coplan@arm.com
Thu Jul 2 12:04:53 GMT 2020


Hello,

This patch fixes a segfault which occurs when the AArch64 backend parses
a symbol operand that begins with a register name and ends with a
unicode byte (byte value > 127).

For example, the following input causes the crash:

x0é: udf x0é

Testing:
 * aarch64-none-elf testsuite run on x86_64 host.

OK for master?

Thanks,
Alex

---

gas/ChangeLog:

2020-07-02  Alex Coplan  <alex.coplan@arm.com>

	* config/tc-aarch64.c (reg_name_p): Fix cast so that we don't
	segfault on negative chars.
	* testsuite/gas/aarch64/reglike-label-unicode-segv.d: New test.
	* testsuite/gas/aarch64/reglike-label-unicode-segv.s: Input.
-------------- next part --------------
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 728fd10a4e2..ecb15d23437 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -2190,7 +2190,7 @@ reg_name_p (char *str, aarch64_reg_type reg_type)
     return FALSE;
 
   skip_whitespace (str);
-  if (*str == ',' || is_end_of_line[(unsigned int) *str])
+  if (*str == ',' || is_end_of_line[(unsigned char) *str])
     return TRUE;
 
   return FALSE;
diff --git a/gas/testsuite/gas/aarch64/reglike-label-unicode-segv.d b/gas/testsuite/gas/aarch64/reglike-label-unicode-segv.d
new file mode 100644
index 00000000000..f262e6f75ab
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/reglike-label-unicode-segv.d
@@ -0,0 +1,8 @@
+#objdump: -dr
+
+.*:     file format .*
+
+Disassembly of section \.text:
+
+0+ <x0é>:
+.*:	00000000 	udf	#0
diff --git a/gas/testsuite/gas/aarch64/reglike-label-unicode-segv.s b/gas/testsuite/gas/aarch64/reglike-label-unicode-segv.s
new file mode 100644
index 00000000000..18f1e929571
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/reglike-label-unicode-segv.s
@@ -0,0 +1,2 @@
+x0é:
+udf x0é


More information about the Binutils mailing list