diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2023-03-30 11:09:02 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2023-03-30 11:09:02 +0100 |
commit | 3e4525ca0b410b558207b2cdf62c44e3fc13b4f3 (patch) | |
tree | a643301b2925e24438387aece1b0dfa028c7a4a8 | |
parent | a5791d5814226054215b7aab9f87dec6b8e41664 (diff) | |
download | binutils-3e4525ca0b410b558207b2cdf62c44e3fc13b4f3.zip binutils-3e4525ca0b410b558207b2cdf62c44e3fc13b4f3.tar.gz binutils-3e4525ca0b410b558207b2cdf62c44e3fc13b4f3.tar.bz2 |
aarch64: Use aarch64_operand_error more widely
GAS's aarch64_instruction had its own cut-down error record,
but it's better for later patches if it reuses the binutils-wide
aarch64_operand_error instead. The main difference is that
aarch64_operand_error can store arguments to the error while
aarch64_instruction couldn't.
-rw-r--r-- | gas/config/tc-aarch64.c | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index 67b0e61..4e75946 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -155,11 +155,7 @@ struct aarch64_instruction /* libopcodes structure for instruction intermediate representation. */ aarch64_inst base; /* Record assembly errors found during the parsing. */ - struct - { - enum aarch64_operand_error_kind kind; - const char *error; - } parsing_error; + aarch64_operand_error parsing_error; /* The condition that appears in the assembly line. */ int cond; /* Relocation information (including the GAS internal fixup). */ @@ -195,8 +191,8 @@ static bool programmer_friendly_fixup (aarch64_instruction *); static inline void clear_error (void) { + memset (&inst.parsing_error, 0, sizeof (inst.parsing_error)); inst.parsing_error.kind = AARCH64_OPDE_NIL; - inst.parsing_error.error = NULL; } static inline bool @@ -205,21 +201,11 @@ error_p (void) return inst.parsing_error.kind != AARCH64_OPDE_NIL; } -static inline const char * -get_error_message (void) -{ - return inst.parsing_error.error; -} - -static inline enum aarch64_operand_error_kind -get_error_kind (void) -{ - return inst.parsing_error.kind; -} - static inline void set_error (enum aarch64_operand_error_kind kind, const char *error) { + memset (&inst.parsing_error, 0, sizeof (inst.parsing_error)); + inst.parsing_error.index = -1; inst.parsing_error.kind = kind; inst.parsing_error.error = error; } @@ -7733,15 +7719,15 @@ parse_operands (char *str, const aarch64_opcode *opcode) if (error_p ()) { + inst.parsing_error.index = i; DEBUG_TRACE ("parsing FAIL: %s - %s", - operand_mismatch_kind_names[get_error_kind ()], - get_error_message ()); + operand_mismatch_kind_names[inst.parsing_error.kind], + inst.parsing_error.error); /* Record the operand error properly; this is useful when there are multiple instruction templates for a mnemonic name, so that later on, we can select the error that most closely describes the problem. */ - record_operand_error (opcode, i, get_error_kind (), - get_error_message ()); + record_operand_error_info (opcode, &inst.parsing_error); return false; } else |