]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
aarch64: system register aliasing detection
authorVictor Do Nascimento <victor.donascimento@arm.com>
Mon, 2 Oct 2023 08:51:27 +0000 (09:51 +0100)
committerVictor Do Nascimento <victor.donascimento@arm.com>
Wed, 4 Oct 2023 11:21:53 +0000 (12:21 +0100)
commit1bf6696b594193c457091b90f7773f6b289b5dc4
tree45b9aae240c3521008d7ee95e56fc204eb5308a8
parent1181bcd0d2572aee2c0947040e56bc1f9af634e3
aarch64: system register aliasing detection

This patch adds a mechanism for system register name alias detection
to register-matching mechanisms.

A new `F_REG_ALIAS' flag is added to the set of register flags and
used to label which entries in aarch64_sys_regs[] correspond to
aliases (and thus which CPENC values are non-unique in this array).

Where this is used is, for example, in `aarch64_print_operand' where,
in the case of system register decoding, the aarch64_sys_regs[] array
is iterated through until a match in CPENC value is made and the first
match accepted.  If insufficient care is given in the ordering of
system registers in this array, the alias is encountered before the
"real" register and used incorrectly as the register name in the
disassembled output.

With this flag and the new `aarch64_sys_reg_alias_p' test, search
candidates corresponding to aliases can be conveniently skipped over.

One concrete example of where this is useful is with the
`trcextinselr0' system register.  It was initially placed in the
system register list before `trcextinselr', in contrast to a more
natural alphabetical order.

include/ChangeLog:
* opcode/aarch64.h: add `aarch64_sys_reg_alias_p' prototype.

opcodes/ChangeLog:
* aarch64-opc.c (aarch64_sys_reg_alias_p): New.
(aarch64_print_operand): add aarch64_sys_reg_alias_p check.
(aarch64_sys_regs): Add F_REG_ALIAS flag to "trcextinselr"
entry.
* aarch64-opc.h (F_REG_ALIAS): New.
include/opcode/aarch64.h
opcodes/aarch64-opc.c
opcodes/aarch64-opc.h