aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2023-03-30 11:09:02 +0100
committerRichard Sandiford <richard.sandiford@arm.com>2023-03-30 11:09:02 +0100
commit3e4525ca0b410b558207b2cdf62c44e3fc13b4f3 (patch)
treea643301b2925e24438387aece1b0dfa028c7a4a8
parenta5791d5814226054215b7aab9f87dec6b8e41664 (diff)
downloadgdb-3e4525ca0b410b558207b2cdf62c44e3fc13b4f3.zip
gdb-3e4525ca0b410b558207b2cdf62c44e3fc13b4f3.tar.gz
gdb-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.c30
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