From: Alice Carlotti Date: Thu, 29 Jan 2026 12:10:43 +0000 (+0000) Subject: aarch64: Return QLF_ERR for error conditions X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da2fb8e1624ee0e17bb40359d4869de7d5fadacc;p=thirdparty%2Fbinutils-gdb.git aarch64: Return QLF_ERR for error conditions In vectype_to_qualifier and get_qualifier_from_partial_encoding, return AARCH64_OPND_QLF_ERR instead of AARCH64_OPND_QLF_NIL to indicate an error condition. --- diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index b851868d3ff..abc351f60b3 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -879,7 +879,7 @@ vectype_to_qualifier (const struct vector_type_el *vectype) vectype_conversion_fail: first_error (_("bad vector arrangement type")); - return AARCH64_OPND_QLF_NIL; + return AARCH64_OPND_QLF_ERR; } /* Register parsing. */ @@ -4703,7 +4703,7 @@ parse_reg_with_qual (char **str, aarch64_reg_type reg_type, else { *qualifier = vectype_to_qualifier (&vectype); - if (*qualifier == AARCH64_OPND_QLF_NIL) + if (*qualifier == AARCH64_OPND_QLF_ERR) return NULL; } @@ -6974,7 +6974,7 @@ parse_operands (char *str, const aarch64_opcode *opcode) else { info->qualifier = vectype_to_qualifier (&vectype); - if (info->qualifier == AARCH64_OPND_QLF_NIL) + if (info->qualifier == AARCH64_OPND_QLF_ERR) goto failure; } break; @@ -7067,7 +7067,7 @@ parse_operands (char *str, const aarch64_opcode *opcode) if (vectype.type == NT_invtype) goto failure; info->qualifier = vectype_to_qualifier (&vectype); - if (info->qualifier == AARCH64_OPND_QLF_NIL) + if (info->qualifier == AARCH64_OPND_QLF_ERR) goto failure; } @@ -7197,7 +7197,7 @@ parse_operands (char *str, const aarch64_opcode *opcode) } } info->qualifier = vectype_to_qualifier (&vectype); - if (info->qualifier == AARCH64_OPND_QLF_NIL) + if (info->qualifier == AARCH64_OPND_QLF_ERR) goto failure; break; @@ -8354,7 +8354,11 @@ parse_operands (char *str, const aarch64_opcode *opcode) if (vectype.type == NT_invtype) info->qualifier = AARCH64_OPND_QLF_NIL; else - info->qualifier = vectype_to_qualifier (&vectype); + { + info->qualifier = vectype_to_qualifier (&vectype); + if (info->qualifier == AARCH64_OPND_QLF_ERR) + goto failure; + } break; case AARCH64_OPND_BARRIER_GCSB: diff --git a/opcodes/aarch64-dis.c b/opcodes/aarch64-dis.c index 3395cc3fde1..50f4943afd2 100644 --- a/opcodes/aarch64-dis.c +++ b/opcodes/aarch64-dis.c @@ -2512,7 +2512,7 @@ aarch64_ext_plain_shrimm (const aarch64_operand *self, aarch64_opnd_info *info, constrained field(s). Given the VALUE of such a field or fields, the qualifiers CANDIDATES and the MASK (indicating which bits are valid for operand encoding), the function returns the matching qualifier or - AARCH64_OPND_QLF_NIL if nothing matches. + AARCH64_OPND_QLF_ERR if nothing matches. N.B. CANDIDATES is a group of possible qualifiers that are valid for one operand; it has a maximum of AARCH64_MAX_QLF_SEQ_NUM qualifiers and @@ -2535,7 +2535,7 @@ get_qualifier_from_partial_encoding (aarch64_insn value, if ((standard_value & mask) == (value & mask)) return candidates[i]; } - return AARCH64_OPND_QLF_NIL; + return AARCH64_OPND_QLF_ERR; } /* Given a list of qualifier sequences, return all possible valid qualifiers @@ -2562,7 +2562,6 @@ static int decode_sizeq (aarch64_inst *inst) { int idx; - enum aarch64_opnd_qualifier qualifier; aarch64_insn code; aarch64_insn value, mask; enum aarch64_field_kind fld_sz; @@ -2613,9 +2612,10 @@ decode_sizeq (aarch64_inst *inst) } #endif /* DEBUG_AARCH64 */ - qualifier = get_qualifier_from_partial_encoding (value, candidates, mask); + enum aarch64_opnd_qualifier qualifier + = get_qualifier_from_partial_encoding (value, candidates, mask); - if (qualifier == AARCH64_OPND_QLF_NIL) + if (qualifier == AARCH64_OPND_QLF_ERR) return 0; inst->operands[idx].qualifier = qualifier;