This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

simplify some Xtensa GAS error messages


Some of the Xtensa-specific error messages were reporting operand positions with numbers starting from zero, which was confusing. This patch changes them to use numbers starting from one.

Some other messages were confusing when the assembler relaxes the instruction, because the opcode and operand shown in the error message did not match the source. The patch changes these messages to omit the opcode and operand information. It would be nice to provide the more detailed information, but the line number and an "invalid symbolic operand" message is usually sufficient to identify the problem, and the extra information can be really confusing when it doesn't match.

Tested with an xtensa-elf build and committed on the mainline.

2006-02-13 Bob Wilson <bob.wilson@acm.org>

	* config/tc-xtensa.c (xg_add_opcode_fix): Number operands starting
	from 1, not 0, in error messages.
	(md_assemble): Simplify special-case check for ENTRY instructions.
	(tinsn_has_invalid_symbolic_operands): Do not include opcode and
	operand in error message.

Index: config/tc-xtensa.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-xtensa.c,v
retrieving revision 1.56
diff -u -p -r1.56 tc-xtensa.c
--- config/tc-xtensa.c	10 Feb 2006 01:02:12 -0000	1.56
+++ config/tc-xtensa.c	14 Feb 2006 00:50:35 -0000
@@ -4131,7 +4131,7 @@ xg_add_opcode_fix (TInsn *tinsn,
   if (opnum != get_relaxable_immed (opcode))
     {
       as_bad (_("invalid relocation for operand %i of '%s'"),
-	      opnum, xtensa_opcode_name (xtensa_default_isa, opcode));
+	      opnum + 1, xtensa_opcode_name (xtensa_default_isa, opcode));
       return FALSE;
     }
 
@@ -4141,7 +4141,7 @@ xg_add_opcode_fix (TInsn *tinsn,
   if (expr->X_op == O_lo16 || expr->X_op == O_hi16)
     {
       as_bad (_("invalid expression for operand %i of '%s'"),
-	      opnum, xtensa_opcode_name (xtensa_default_isa, opcode));
+	      opnum + 1, xtensa_opcode_name (xtensa_default_isa, opcode));
       return FALSE;
     }
 
@@ -5252,24 +5252,12 @@ md_assemble (char *str)
 
   xg_add_branch_and_loop_targets (&orig_insn);
 
-  /* Special-case for "entry" instruction.  */
-  if (orig_insn.opcode == xtensa_entry_opcode)
+  /* Check that immediate value for ENTRY is >= 16.  */
+  if (orig_insn.opcode == xtensa_entry_opcode && orig_insn.ntok >= 3)
     {
-      /* Check that the third opcode (#2) is >= 16.  */
-      if (orig_insn.ntok >= 3)
-	{
-	  expressionS *exp = &orig_insn.tok[2];
-	  switch (exp->X_op)
-	    {
-	    case O_constant:
-	      if (exp->X_add_number < 16)
-		as_warn (_("entry instruction with stack decrement < 16"));
-	      break;
-
-	    default:
-	      as_warn (_("entry instruction with non-constant decrement"));
-	    }
-	}
+      expressionS *exp = &orig_insn.tok[2];
+      if (exp->X_op == O_constant && exp->X_add_number < 16)
+	as_warn (_("entry instruction with stack decrement < 16"));
     }
 
   /* Finish it off:
@@ -11045,8 +11033,7 @@ tinsn_has_invalid_symbolic_operands (con
 	      || (xtensa_operand_is_PCrelative (isa, insn->opcode, i) != 1
 		  && insn->opcode != xtensa_const16_opcode))
 	    {
-	      as_bad (_("invalid symbolic operand %d on '%s'"),
-		      i, xtensa_opcode_name (isa, insn->opcode));
+	      as_bad (_("invalid symbolic operand"));
 	      return TRUE;
 	    }
 	}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]