AArch64: Refactor verifiers to make more general.

The current verifiers only take an instruction description and encoded value as
arguments.  This was enough when the verifiers only needed to do simple checking
but it's insufficient for the purposes of validating instruction sequences.

This patch adds the required arguments and also a flag to allow a verifier to
distinguish between whether it's being run during encoding or decoding.  It also
allows for errors and warnings to be returned by a verifier instead of a simple
pass/fail.

include/

	* opcode/aarch64.h (struct aarch64_opcode): Expand verifiers to take
	more arguments.

opcodes/

	* aarch64-dis.c (aarch64_opcode_decode): Update verifier call.
	* aarch64-opc.c (verify_ldpsw): Update arguments.
This commit is contained in:
Tamar Christina 2018-10-03 18:37:07 +01:00
parent 1d4823943d
commit 755b748fd9
5 changed files with 24 additions and 8 deletions

View file

@ -727,7 +727,9 @@ struct aarch64_opcode
unsigned char tied_operand;
/* If non-NULL, a function to verify that a given instruction is valid. */
bfd_boolean (* verifier) (const struct aarch64_opcode *, const aarch64_insn);
enum err_type (* verifier) (const struct aarch64_inst *, const aarch64_insn,
bfd_vma, bfd_boolean, aarch64_operand_error *,
struct aarch64_instr_sequence *);
};
typedef struct aarch64_opcode aarch64_opcode;