[binutils-gdb] aarch64: Use aarch64_operand_error more widely

Richard Sandiford rsandifo@sourceware.org
Thu Mar 30 10:11:04 GMT 2023


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=3e4525ca0b410b558207b2cdf62c44e3fc13b4f3

commit 3e4525ca0b410b558207b2cdf62c44e3fc13b4f3
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Thu Mar 30 11:09:02 2023 +0100

    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.

Diff:
---
 gas/config/tc-aarch64.c | 30 ++++++++----------------------
 1 file changed, 8 insertions(+), 22 deletions(-)

diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 67b0e61a7ff..4e75946c684 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


More information about the Binutils-cvs mailing list