From: Jens Remus Date: Fri, 1 Mar 2024 11:45:14 +0000 (+0100) Subject: s390: Be more verbose about missing operand type X-Git-Tag: gdb-15-branchpoint~807 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5c97cb1c80994462632ba7c62a54a3fbecaff2ca;p=thirdparty%2Fbinutils-gdb.git s390: Be more verbose about missing operand type Provide expected operand type in s390-specific assembler operand parsing error message: "error: operand : missing operand" With being one of: - base register - displacement - [vector] index register - length - access register - control register - floating-point register - general-purpose register - vector register - [un]signed number gas/ * config/tc-s390.c: Provide missing operand type in error message. * testsuite/gas/s390/zarch-base-index-0-err.l: Update test case result validation patterns to operand number in operand syntax error messages. * testsuite/gas/s390/zarch-omitted-base-index-err.l: Likewise. Reviewed-by: Andreas Krebbel Signed-off-by: Jens Remus --- diff --git a/gas/config/tc-s390.c b/gas/config/tc-s390.c index a2f499bd5ba..659c6af392b 100644 --- a/gas/config/tc-s390.c +++ b/gas/config/tc-s390.c @@ -1329,6 +1329,41 @@ s390_elf_cons (int nbytes /* 1=.byte, 2=.word, 4=.long */) demand_empty_rest_of_line (); } +static const char * +operand_type_str(const struct s390_operand * operand) +{ + if (operand->flags & S390_OPERAND_BASE) + return _("base register"); + else if (operand->flags & S390_OPERAND_DISP) + return _("displacement"); + else if (operand->flags & S390_OPERAND_INDEX) + { + if (operand->flags & S390_OPERAND_VR) + return _("vector index register"); + else + return _("index register"); + } + else if (operand->flags & S390_OPERAND_LENGTH) + return _("length"); + else if (operand->flags & S390_OPERAND_AR) + return _("access register"); + else if (operand->flags & S390_OPERAND_CR) + return _("control register"); + else if (operand->flags & S390_OPERAND_FPR) + return _("floating-point register"); + else if (operand->flags & S390_OPERAND_GPR) + return _("general-purpose register"); + else if (operand->flags & S390_OPERAND_VR) + return _("vector register"); + else + { + if (operand->flags & S390_OPERAND_SIGNED) + return _("signed number"); + else + return _("unsigned number"); + } +} + /* Return true if all remaining operands in the opcode with OPCODE_FLAGS can be skipped. */ static bool @@ -1431,7 +1466,8 @@ md_gather_operands (char *str, { if (opindex_ptr[0] == '\0') break; - as_bad (_("operand %d: missing operand"), operand_number); + as_bad (_("operand %d: missing %s operand"), operand_number, + operand_type_str(operand)); } else if (ex.X_op == O_register || ex.X_op == O_constant) { diff --git a/gas/testsuite/gas/s390/zarch-base-index-0-err.l b/gas/testsuite/gas/s390/zarch-base-index-0-err.l index 6332d994349..26187c93d4b 100644 --- a/gas/testsuite/gas/s390/zarch-base-index-0-err.l +++ b/gas/testsuite/gas/s390/zarch-base-index-0-err.l @@ -16,9 +16,9 @@ .*:16: Error: bad expression .*:16: Error: operand 2: syntax error; missing '\)' after base register .*:17: Error: operand 1: operand out of range \(0 is not between 1 and 256\) -.*:18: Error: operand 1: missing operand -.*:19: Error: operand 1: missing operand -.*:20: Error: operand 1: missing operand +.*:18: Error: operand 1: missing length operand +.*:19: Error: operand 1: missing length operand +.*:20: Error: operand 1: missing length operand .*:21: Error: bad expression .*:21: Error: operand 1: operand out of range \(0 is not between 1 and 256\) .*:21: Error: operand 1: operand out of range \(32 is not between 0 and 15\) @@ -31,9 +31,9 @@ .*:22: Error: operand 1: syntax error; missing '\(' after displacement .*:23: Error: operand 1: invalid length field specified .*:26: Error: operand 1: operand out of range \(0 is not between 1 and 16\) -.*:27: Error: operand 1: missing operand -.*:28: Error: operand 1: missing operand -.*:29: Error: operand 1: missing operand +.*:27: Error: operand 1: missing length operand +.*:28: Error: operand 1: missing length operand +.*:29: Error: operand 1: missing length operand .*:30: Error: bad expression .*:30: Error: operand 1: operand out of range \(0 is not between 1 and 16\) .*:30: Error: operand 1: operand out of range \(32 is not between 0 and 15\) @@ -42,21 +42,21 @@ .*:30: Error: found ',', expected: '\)' .*:31: Error: operand 1: syntax error; missing '\(' after displacement .*:32: Error: operand 2: operand out of range \(0 is not between 1 and 16\) -.*:33: Error: operand 2: missing operand -.*:34: Error: operand 2: missing operand -.*:35: Error: operand 2: missing operand +.*:33: Error: operand 2: missing length operand +.*:34: Error: operand 2: missing length operand +.*:35: Error: operand 2: missing length operand .*:36: Error: bad expression .*:36: Error: operand 2: operand out of range \(0 is not between 1 and 16\) .*:36: Error: operand 2: syntax error; expected ',' .*:37: Error: operand 2: syntax error; missing '\(' after displacement .*:38: Error: operand 1: operand out of range \(0 is not between 1 and 16\) .*:38: Error: operand 2: operand out of range \(0 is not between 1 and 16\) -.*:39: Error: operand 1: missing operand -.*:39: Error: operand 2: missing operand -.*:40: Error: operand 1: missing operand -.*:40: Error: operand 2: missing operand -.*:41: Error: operand 1: missing operand -.*:41: Error: operand 2: missing operand +.*:39: Error: operand 1: missing length operand +.*:39: Error: operand 2: missing length operand +.*:40: Error: operand 1: missing length operand +.*:40: Error: operand 2: missing length operand +.*:41: Error: operand 1: missing length operand +.*:41: Error: operand 2: missing length operand .*:42: Error: bad expression .*:42: Error: operand 1: operand out of range \(0 is not between 1 and 16\) .*:42: Error: operand 1: operand out of range \(32 is not between 0 and 15\) diff --git a/gas/testsuite/gas/s390/zarch-omitted-base-index-err.l b/gas/testsuite/gas/s390/zarch-omitted-base-index-err.l index b2ee382b0f9..9ff6392915e 100644 --- a/gas/testsuite/gas/s390/zarch-omitted-base-index-err.l +++ b/gas/testsuite/gas/s390/zarch-omitted-base-index-err.l @@ -6,8 +6,8 @@ .*:11: Warning: operand 2: expected general register name as base register .*:12: Error: bad expression .*:12: Error: operand 2: syntax error; missing '\)' after base register -.*:15: Error: operand 1: missing operand -.*:16: Error: operand 1: missing operand +.*:15: Error: operand 1: missing length operand +.*:16: Error: operand 1: missing length operand .*:17: Error: operand 1: invalid length field specified .*:18: Error: bad expression .*:18: Error: operand 1: operand out of range \(0 is not between 1 and 256\)