aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRenlin Li <renlin.li@arm.com>2016-02-16 10:00:29 +0000
committerRenlin Li <renlin.li@arm.com>2016-02-16 10:04:41 +0000
commit671eeb286f0523f13ee8a16a9a1900bb656496ca (patch)
tree6db2e94bab199ff179b1bcfcd5c14cd43be72e46
parent64bfc2584c013e7c60caceeffbad8250558e3cd2 (diff)
downloadgdb-671eeb286f0523f13ee8a16a9a1900bb656496ca.zip
gdb-671eeb286f0523f13ee8a16a9a1900bb656496ca.tar.gz
gdb-671eeb286f0523f13ee8a16a9a1900bb656496ca.tar.bz2
[PR19620][GAS][AArch64]Remove mov[z,k,n] relocation symbol name restriction.
In AArch64 gas, register name or string starts with valid register name is not allowed as symbol name for mov[z,k,n] instruction. This patch removes the restriction. gas/ PR gas/19620 * config/tc-aarch64.c (parse_half): Remove restrictions on symbol name. * testsuite/gas/aarch64/movw_label.d: New. * testsuite/gas/aarch64/movw_label.s: New.
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-aarch64.c10
-rw-r--r--gas/testsuite/gas/aarch64/movw_label.d22
-rw-r--r--gas/testsuite/gas/aarch64/movw_label.s10
4 files changed, 40 insertions, 9 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index c4bd331..f018268 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+2016-02-16 Renlin Li <renlin.li@arm.com>
+
+ PR gas/19620
+ * config/tc-aarch64.c (parse_half): Remove restrictions on symbol name.
+ * testsuite/gas/aarch64/movw_label.d: New.
+ * testsuite/gas/aarch64/movw_label.s: New.
+
2016-02-15 Vinay Kumar G. <Vinay.G@kpit.com>
PR gas/19556
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 5cb9ab5..dfcbd52 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -3473,10 +3473,8 @@ parse_address_reloc (char **str, aarch64_opnd_info *operand)
static bfd_boolean
parse_half (char **str, int *internal_fixup_p)
{
- char *p, *saved;
- int dummy;
+ char *p = *str;
- p = *str;
skip_past_char (&p, '#');
gas_assert (internal_fixup_p);
@@ -3506,12 +3504,6 @@ parse_half (char **str, int *internal_fixup_p)
else
*internal_fixup_p = 1;
- /* Avoid parsing a register as a general symbol. */
- saved = p;
- if (aarch64_reg_parse_32_64 (&p, 0, 0, &dummy, &dummy) != PARSE_FAIL)
- return FALSE;
- p = saved;
-
if (! my_get_expression (&inst.reloc.exp, &p, GE_NO_PREFIX, 1))
return FALSE;
diff --git a/gas/testsuite/gas/aarch64/movw_label.d b/gas/testsuite/gas/aarch64/movw_label.d
new file mode 100644
index 0000000..78ef63f
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/movw_label.d
@@ -0,0 +1,22 @@
+#objdump: -dr
+#name: movw relocation symbol name
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+0000000000000000 <.*>:
+ 0: f2800002 movk x2, #0x0
+ 0: R_AARCH64_MOVW_UABS_G0_NC x3.22
+ 4: f2800002 movk x2, #0x0
+ 4: R_AARCH64_MOVW_UABS_G0_NC x8
+ 8: f2800002 movk x2, #0x0
+ 8: R_AARCH64_MOVW_UABS_G0_NC w3
+ c: f2800002 movk x2, #0x0
+ c: R_AARCH64_MOVW_UABS_G0_NC w8.22
+ 10: f2800002 movk x2, #0x0
+ 10: R_AARCH64_MOVW_UABS_G0_NC sp
+ 14: f2800002 movk x2, #0x0
+ 14: R_AARCH64_MOVW_UABS_G0_NC wzr
+ 18: f2800002 movk x2, #0x0
+ 18: R_AARCH64_MOVW_UABS_G0_NC xzr
diff --git a/gas/testsuite/gas/aarch64/movw_label.s b/gas/testsuite/gas/aarch64/movw_label.s
new file mode 100644
index 0000000..6e7bae5
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/movw_label.s
@@ -0,0 +1,10 @@
+ .text
+ movk x2, #:abs_g0_nc: x3.22
+ movk x2, #:abs_g0_nc: x8
+
+ movk x2, #:abs_g0_nc: w3
+ movk x2, #:abs_g0_nc: w8.22
+
+ movk x2, #:abs_g0_nc: sp
+ movk x2, #:abs_g0_nc: wzr
+ movk x2, #:abs_g0_nc: xzr