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]

[patch, committed] fix Nios II assembler self-test mode


The Nios II assembler has an undocumented -r command-line option that puts it into a self-test mode: all instructions take an extra argument that represents the expected encoding, and the assembler checks that it matches. Altera uses this for their own verification of the assembler. Unfortunately I broke it when preparing the binutils port for submission last year, and there was no test case to catch the breakage. I've remedied both problems with the attached patch.

-Sandra

2014-04-22  Sandra Loosemore  <sandra@codesourcery.com>

	gas/
	* config/tc-nios2.c (nios2_consume_arg): Add case for 'E' to
	unbreak self-test mode.

	gas/testsuite/
	* gas/nios2/selftest.s: New.
	* gas/nios2/selftest.d: New.
diff --git a/gas/config/tc-nios2.c b/gas/config/tc-nios2.c
index 754947c..21f4288 100644
--- a/gas/config/tc-nios2.c
+++ b/gas/config/tc-nios2.c
@@ -2006,6 +2006,7 @@ nios2_consume_arg (nios2_insn_infoS *insn, char *argstr, const char *parsestr)
 	as_bad (_("badly formed expression near %s"), argstr);
       break;
     case 'o':
+    case 'E':
       break;
     default:
       BAD_CASE (*parsestr);
diff --git a/gas/testsuite/gas/nios2/selftest.d b/gas/testsuite/gas/nios2/selftest.d
new file mode 100644
index 0000000..84b33a4
--- /dev/null
+++ b/gas/testsuite/gas/nios2/selftest.d
@@ -0,0 +1,18 @@
+#as: -r
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: NIOS2 selftest
+
+# Test the assembler self-test mode on some instructions that
+# manipulate control registers.  The purpose of this test is to make
+# sure the assembler doesn't choke, rather than to match the encodings
+# of the particular instructions in the test here.
+
+.*: +file format elf32-littlenios2
+
+
+Disassembly of section .text:
+0+0000 <[^>]*> 1001703a 	wrctl	status,r2
+0+0004 <[^>]*> 1001703a 	wrctl	status,r2
+0+0008 <[^>]*> 1001707a 	wrctl	estatus,r2
+0+000c <[^>]*> 1001707a 	wrctl	estatus,r2
+#...
diff --git a/gas/testsuite/gas/nios2/selftest.s b/gas/testsuite/gas/nios2/selftest.s
new file mode 100644
index 0000000..bbfad1a
--- /dev/null
+++ b/gas/testsuite/gas/nios2/selftest.s
@@ -0,0 +1,134 @@
+# Use self-test mode to verify that all the expected control register
+# names assemble correctly.
+	
+_start:
+        wrctl ctl0,    r2, 0x1001703a
+        wrctl status,  r2, 0x1001703a
+
+        wrctl ctl1,    r2, 0x1001707a
+        wrctl estatus, r2, 0x1001707a
+
+        wrctl ctl2,    r2, 0x100170ba
+        wrctl bstatus, r2, 0x100170ba
+
+        wrctl ctl3,    r2, 0x100170fa
+        wrctl ienable, r2, 0x100170fa
+
+#        wrctl ctl4,     r2, 0x1001713a		# write-only register
+#        wrctl ipending, r2, 0x1001713a		#
+
+         wrctl ctl5,     r2, 0x1001717a
+         wrctl cpuid,    r2, 0x1001717a
+
+         wrctl ctl6,     r2, 0x100171ba
+
+         wrctl ctl7,     r2, 0x100171fa
+         wrctl exception,r2, 0x100171fa
+
+         wrctl ctl8,     r2, 0x1001723a
+         wrctl pteaddr,  r2, 0x1001723a
+
+         wrctl ctl9,     r2, 0x1001727a
+         wrctl tlbacc,   r2, 0x1001727a
+
+         wrctl ctl10,    r2, 0x100172ba
+         wrctl tlbmisc,  r2, 0x100172ba
+
+         wrctl ctl11,    r2, 0x100172fa
+         wrctl eccinj,  r2, 0x100172fa
+
+        wrctl ctl12,     r2, 0x1001733a
+        wrctl badaddr,   r2, 0x1001733a
+
+        wrctl ctl13,     r2, 0x1001737a
+        wrctl config,    r2, 0x1001737a
+
+        wrctl ctl14,     r2, 0x100173ba
+        wrctl mpubase,   r2, 0x100173ba
+
+        wrctl ctl15,     r2, 0x100173fa
+        wrctl mpuacc,    r2, 0x100173fa
+
+        wrctl ctl16,     r2, 0x1001743a
+        wrctl ctl17,     r2, 0x1001747a
+        wrctl ctl18,     r2, 0x100174ba
+        wrctl ctl19,     r2, 0x100174fa
+        wrctl ctl20,     r2, 0x1001753a
+        wrctl ctl21,     r2, 0x1001757a
+        wrctl ctl22,     r2, 0x100175ba
+        wrctl ctl23,     r2, 0x100175fa
+        wrctl ctl24,     r2, 0x1001763a
+        wrctl ctl25,     r2, 0x1001767a
+        wrctl ctl26,     r2, 0x100176ba
+        wrctl ctl27,     r2, 0x100176fa
+        wrctl ctl28,     r2, 0x1001773a
+        wrctl ctl29,     r2, 0x1001777a
+        wrctl ctl30,     r2, 0x100177ba
+        wrctl ctl31,     r2, 0x100177fa
+
+
+        rdctl r2,ctl0,   0x0005303a
+        rdctl r2,status, 0x0005303a
+
+        rdctl r2,ctl1,    0x0005307a
+        rdctl r2,estatus, 0x0005307a
+
+        rdctl r2,ctl2,    0x000530ba
+        rdctl r2,bstatus, 0x000530ba
+
+        rdctl r2,ctl3,    0x000530fa
+        rdctl r2,ienable, 0x000530fa
+
+        rdctl r2,ctl4,     0x0005313a
+        rdctl r2,ipending, 0x0005313a
+
+        rdctl r2,ctl5,     0x0005317a
+        rdctl r2,cpuid,    0x0005317a
+
+        rdctl r2,ctl6,     0x000531ba
+
+        rdctl r2,ctl7,     0x000531fa
+        rdctl r2,exception,0x000531fa
+
+        rdctl r2,ctl8,     0x0005323a
+        rdctl r2,pteaddr,  0x0005323a
+
+        rdctl r2,ctl9,     0x0005327a
+        rdctl r2,tlbacc,   0x0005327a
+
+        rdctl r2,ctl10,    0x000532ba
+        rdctl r2,tlbmisc,  0x000532ba
+
+        rdctl r2,ctl11,    0x000532fa
+        rdctl r2,eccinj,  0x000532fa
+
+        rdctl r2,ctl12,    0x0005333a
+        rdctl r2,badaddr,  0x0005333a
+
+        rdctl r2,ctl13,    0x0005337a
+        rdctl r2,config,   0x0005337a
+
+        rdctl r2,ctl14,    0x000533ba
+        rdctl r2,mpubase,  0x000533ba
+
+        rdctl r2,ctl15,    0x000533fa
+        rdctl r2,mpuacc,   0x000533fa
+
+        rdctl r2,ctl16,    0x0005343a
+        rdctl r2,ctl17,    0x0005347a
+        rdctl r2,ctl18,    0x000534ba
+        rdctl r2,ctl19,    0x000534fa
+        rdctl r2,ctl20,    0x0005353a
+        rdctl r2,ctl21,    0x0005357a
+        rdctl r2,ctl22,    0x000535ba
+        rdctl r2,ctl23,    0x000535fa
+        rdctl r2,ctl24,    0x0005363a
+        rdctl r2,ctl25,    0x0005367a
+        rdctl r2,ctl26,    0x000536ba
+        rdctl r2,ctl27,    0x000536fa
+        rdctl r2,ctl28,    0x0005373a
+        rdctl r2,ctl29,    0x0005377a
+        rdctl r2,ctl30,    0x000537ba
+        rdctl r2,ctl31,    0x000537fa
+
+

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