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]

[RFA] Fix gas xc16x.exp test failures


Hi.

While testing regenerated cgen files for xc16x I ran into a couple of
bugs in the gas port, and needed to verify they weren't caused by
the file regeneration (which was pretty clear, but it's easier to do
when there aren't any failures at all).

There are still more issues, but I don't know the xc16x that well.

Ok to check in?

2009-10-18  Doug Evans  <dje@sebabeach.org>

	* config/tc-xc16x.c (md_cgen_lookup_reloc): Ensure fx_size is set
	correctly for all 16 bit relocs.  Return BFD_RELOC_NONE if reloc
	isn't recognized, not BFD_RELOC_XC16X_SOF.

	testsuite:
	* gas/xc16x/shlrol.s: Specify constant shift amount.
	* gas/xc16x/xc16x.exp (do_xc16x_shlrol): Update expected output.

Index: config/tc-xc16x.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-xc16x.c,v
retrieving revision 1.6
diff -u -p -r1.6 tc-xc16x.c
--- config/tc-xc16x.c	24 Jul 2009 11:45:01 -0000	1.6
+++ config/tc-xc16x.c	18 Oct 2009 23:34:54 -0000
@@ -154,38 +154,46 @@ md_cgen_lookup_reloc (const CGEN_INSN *i
   switch (operand->type)
     {
     case XC16X_OPERAND_REL:
+      /* ??? Adjust size?  */
       fixP->fx_where += 1;
       fixP->fx_pcrel = 1;
       return BFD_RELOC_8_PCREL;
 
     case XC16X_OPERAND_CADDR:
+      fixP->fx_size = 2;
       fixP->fx_where += 2;
       return BFD_RELOC_16;
 
     case XC16X_OPERAND_UIMM7:
+      /* ??? Adjust size?  */
       fixP->fx_where += 1;
       fixP->fx_pcrel = 1;
       return BFD_RELOC_8_PCREL;
 
     case XC16X_OPERAND_UIMM16:
     case XC16X_OPERAND_MEMORY:
+      fixP->fx_size = 2;
       fixP->fx_where += 2;
       return BFD_RELOC_16;
 
     case XC16X_OPERAND_UPOF16:
+      fixP->fx_size = 2;
       fixP->fx_where += 2;
       return BFD_RELOC_XC16X_POF;
 
     case XC16X_OPERAND_UPAG16:
+      fixP->fx_size = 2;
       fixP->fx_where += 2;
       return BFD_RELOC_XC16X_PAG;
 
     case XC16X_OPERAND_USEG8:
+      /* ??? This is an 8 bit field, why the 16 bit reloc?  */
       fixP->fx_where += 1;
       return BFD_RELOC_XC16X_SEG;
 
     case XC16X_OPERAND_USEG16:
     case  XC16X_OPERAND_USOF16:
+      fixP->fx_size = 2;
       fixP->fx_where += 2;
       return BFD_RELOC_XC16X_SOF;
 
@@ -193,8 +201,7 @@ md_cgen_lookup_reloc (const CGEN_INSN *i
       break;
     }
 
-  fixP->fx_where += 2;
-  return BFD_RELOC_XC16X_SOF;
+  return BFD_RELOC_NONE;
 }
 
 /* Write a value out to the object file, using the appropriate endianness.  */
Index: testsuite/gas/xc16x/shlrol.s
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/xc16x/shlrol.s,v
retrieving revision 1.1
diff -u -p -r1.1 shlrol.s
--- testsuite/gas/xc16x/shlrol.s	17 Feb 2006 14:36:25 -0000	1.1
+++ testsuite/gas/xc16x/shlrol.s	18 Oct 2009 23:34:55 -0000
@@ -3,12 +3,12 @@
 xc16x_shlrol:	
 
 	shl   r0,r1
-	shl   r0,#a
+	shl   r0,#4
 	shr   r0,r1
-	shr   r0,#a
+	shr   r0,#4
 	rol    r0,r1
-	rol    r0,#a
+	rol    r0,#4
 	ror    r0,r1
-	ror    r0,#a
+	ror    r0,#4
 	ashr r0,r1
-	ashr r0,#a
+	ashr r0,#4
Index: testsuite/gas/xc16x/xc16x.exp
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/xc16x/xc16x.exp,v
retrieving revision 1.1
diff -u -p -r1.1 xc16x.exp
--- testsuite/gas/xc16x/xc16x.exp	17 Feb 2006 14:36:25 -0000	1.1
+++ testsuite/gas/xc16x/xc16x.exp	18 Oct 2009 23:34:55 -0000
@@ -557,15 +557,15 @@ proc do_xc16x_shlrol {} {
     while 1 {
 	expect {
 	    -re " +\[0-9\]+ 0000 4C01\[^\n\]*\n"   { set x [expr $x+1] }
-	    -re " +\[0-9\]+ 0002 5C00\[^\n\]*\n"   { set x [expr $x+1] }
+	    -re " +\[0-9\]+ 0002 5C40\[^\n\]*\n"   { set x [expr $x+1] }
 	    -re " +\[0-9\]+ 0004 6C01\[^\n\]*\n"   { set x [expr $x+1] }
-	    -re " +\[0-9\]+ 0006 7C00\[^\n\]*\n"   { set x [expr $x+1] }
+	    -re " +\[0-9\]+ 0006 7C40\[^\n\]*\n"   { set x [expr $x+1] }
 	    -re " +\[0-9\]+ 0008 0C01\[^\n\]*\n"   { set x [expr $x+1] }
-	    -re " +\[0-9\]+ 000a 1C00\[^\n\]*\n"   { set x [expr $x+1] }
+	    -re " +\[0-9\]+ 000a 1C40\[^\n\]*\n"   { set x [expr $x+1] }
 	    -re " +\[0-9\]+ 000c 2C01\[^\n\]*\n"   { set x [expr $x+1] }
-	    -re " +\[0-9\]+ 000e 3C00\[^\n\]*\n"   { set x [expr $x+1] }
+	    -re " +\[0-9\]+ 000e 3C40\[^\n\]*\n"   { set x [expr $x+1] }
 	    -re " +\[0-9\]+ 0010 AC01\[^\n\]*\n"   { set x [expr $x+1] }
-	    -re " +\[0-9\]+ 0012 BC00\[^\n\]*\n"   { set x [expr $x+1] }
+	    -re " +\[0-9\]+ 0012 BC40\[^\n\]*\n"   { set x [expr $x+1] }
 	    timeout 				{ perror "timeout\n; break }
 	    eof					{ break }
 	}


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