aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
authorJens Remus <jremus@linux.ibm.com>2024-06-25 17:25:55 +0200
committerJens Remus <jremus@linux.ibm.com>2024-06-25 17:25:55 +0200
commit64daf9abd9c805770727ade9c8197f5e07b28324 (patch)
tree4f6cea43093e6ab64b66d5217f7301943c97f0f4 /opcodes
parent98dd5ba2afe93b7e7ce56f4cbfba0f43c45225b5 (diff)
downloadgdb-64daf9abd9c805770727ade9c8197f5e07b28324.zip
gdb-64daf9abd9c805770727ade9c8197f5e07b28324.tar.gz
gdb-64daf9abd9c805770727ade9c8197f5e07b28324.tar.bz2
aarch64: Treat operand Rt_IN_SYS_ALIASES as register number (PR 31919)
The AArch64 instruction table (aarch64-tbl.h) defines the operand Rt_IN_SYS_ALIASES as register number. During assembly it is correctly encoded as register number (reg.regno) in parse_operands. During disassembly it is first correctly decoded as register number (reg.regno) in aarch64_ext_regno called by aarch64_extract_operand, but then erroneously treated as immediate value (imm.value) in aarch64_print_operand. This resolves the assembler test case "gas/aarch64/brbe-brb-inst" to erroneously fail on s390. On AArch64 - being little-endian - the struct aarch64_opnd_info union fields reg.regno and imm.value share their least-significant bits. On s390 - being big-endian - they do not. opcodes/ PR binutils/31919 * aarch64-opc.c: Treat operand Rt_IN_SYS_ALIASES as register number. Bug: https://sourceware.org/PR31919 Fixes: 72476aca8f58 ("aarch64: add Branch Record Buffer extension instructions") Signed-off-by: Jens Remus <jremus@linux.ibm.com>
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/aarch64-opc.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c
index 72eea59..0b09055 100644
--- a/opcodes/aarch64-opc.c
+++ b/opcodes/aarch64-opc.c
@@ -4029,7 +4029,7 @@ aarch64_print_operand (char *buf, size_t size, bfd_vma pc,
{
/* Avoid printing an invalid additional value for Rt in SYS aliases such as
BRB, provide a helpful comment instead */
- snprintf (comment, comment_size, "unpredictable encoding (Rt!=31): #%" PRIi64, opnd->imm.value);
+ snprintf (comment, comment_size, "unpredictable encoding (Rt!=31): #%u", opnd->reg.regno);
break;
}
/* Omit the operand, e.g. RET. */