[binutils-gdb] Specify architecture for SPARC gas tests

Rainer Orth ro@sourceware.org
Fri Jul 20 09:21:00 GMT 2018


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0458ca44409420c3d5cdbbb21561ee71fd930d31

commit 0458ca44409420c3d5cdbbb21561ee71fd930d31
Author: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Date:   Fri Jul 20 11:15:57 2018 +0200

    Specify architecture for SPARC gas tests
    
    A couple of SPARC gas tests FAIL on Solaris/SPARC (both
    sparc-sun-solaris2.11 and sparcv9-sun-solaris2.11):
    
    FAIL: sparc PAUSE
    FAIL: sparc CBCOND
    FAIL: sparc CFR
    FAIL: sparc CRYPTO
    FAIL: sparc HPC+VIS3
    FAIL: sparc IMA
    FAIL: sparc OSA2015 %mwait asr and MWAIT instruction
    FAIL: sparc OSA2015 %mcdper asr
    FAIL: sparc SPARC5 and VIS4.0
    FAIL: OSA2015 crypto instructions
    FAIL: SPARC6
    FAIL: FPCMPSHL OSA2017 instructions
    FAIL: OSA2017 ONADD/ONSUB/ONMUL/ONDIV instructions.
    FAIL: OSA2017 RLE instructions
    FAIL: sparc64 rdasr
    FAIL: sparc64 rdpr
    FAIL: sparc64 rdhpr
    FAIL: sparc64 wrasr
    FAIL: sparc64 wrpr
    
    It turns out there's a common pattern here: failures happen for all
    tests that use SPARC ISA extensions beyond sparcv9, e.g. for the sparc
    PAUSE test:
    
    regexp_diff match failure
    regexp "^   0:  b7 80 40 02     wr  %g1, %g2, %pause$"
    line   "   0:   b7 80 40 02     wr  %g1, %g2, %asr27"
    [...]
    regexp_diff match failure
    regexp "^   8:  b7 80 20 08     pause  8$"
    line   "   8:   b7 80 20 08     wr  8, %asr27"
    [...]
    
    The fix is easy, actually: just as the tests specify the ISA extension
    to use as a gas flag, the same needs to be done for objdump.  For the
    test above, which has -Av9v, this means passing -msparc:v9v to objdump.
    Doing so makes all but two (unrelated; to be reported separately)
    failures go away.
    
    This doesn't happen on Linux/SPARC, where gas emits GNU object attributes
    matching the hardcare capabilities used.  Since gas doesn't yet implement
    Solaris-style object capabilites, the explicit -march is needed, but only
    passed on Solaris.
    
    Tested on both sparc-sun-solaris2.11 and sparcv9-sun-solaris2.11.
    
    	* testsuite/gas/sparc/sparc.exp (set_tests_arch): New proc.
    	Prefix v9c, v9d, v9v, v9m, v9m8 tests with corresponding
    	set_tests_arch.

Diff:
---
 gas/ChangeLog                     |  7 ++++
 gas/testsuite/gas/sparc/sparc.exp | 78 +++++++++++++++++++++++++++------------
 2 files changed, 62 insertions(+), 23 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index be66002..beea270 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+2018-07-20  Jose E. Marchesi  <jose.marchesi@oracle.com>
+	    Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	* testsuite/gas/sparc/sparc.exp (set_tests_arch): New proc.
+	Prefix v9c, v9d, v9v, v9m, v9m8 tests with corresponding
+	set_tests_arch.
+
 2018-07-19  Jan Beulich  <jbeulich@suse.com>
 
 	* config/tc-i386.c (build_evex_prefix): Derive vector length
diff --git a/gas/testsuite/gas/sparc/sparc.exp b/gas/testsuite/gas/sparc/sparc.exp
index 7aa5c86..dcfec40 100644
--- a/gas/testsuite/gas/sparc/sparc.exp
+++ b/gas/testsuite/gas/sparc/sparc.exp
@@ -31,6 +31,20 @@ proc gas_64_check { } {
     return [regexp "elf64\[_-\]sparc" [lindex $status 1]]
 }
 
+# Until binutils support Solaris-style capabilities, specify the arch
+# necessary to disassemble the ISA extensions used.
+proc set_tests_arch {arch} {
+    global OBJDUMPFLAGS
+
+    if [istarget "sparc*-*-solaris*"] {
+	if { $arch != "" } {
+	    set OBJDUMPFLAGS "-msparc:$arch"
+	} else {
+	    set OBJDUMPFLAGS ""
+	}
+    }
+}
+
 if [istarget sparc*-*-*] {
 
     if [is_elf_format] {
@@ -50,40 +64,53 @@ if [istarget sparc*-*-*] {
         run_list_test "pr4587" ""
         run_dump_test "ticc-imm-reg"
         run_dump_test "v8-movwr-imm"
-        run_dump_test "pause"
         run_dump_test "save-args"
-        run_dump_test "cbcond"
+
+	set_tests_arch "v9c"
+	run_dump_test "ldtxa"
+
+	set_tests_arch "v9d"
+	run_dump_test "edge"
+
+	set_tests_arch "v9v"
+	run_dump_test "cbcond"
+	run_dump_test "cfr"
+	run_dump_test "crypto"
+	run_dump_test "hpcvis3"
+	run_dump_test "ima"
+	run_dump_test "pause"
+
+	set_tests_arch "v9m"
+	run_dump_test "mcdper"
+	run_dump_test "mwait"
+	run_dump_test "sparc5vis4"
+	run_dump_test "xcrypto"
+
+	set_tests_arch "v9m8"
+	run_dump_test "fpcmpshl"
+	run_dump_test "ldm-stm"
+	run_dump_test "ldmf-stmf"
+	run_dump_test "on"
+	run_dump_test "rle"
+	run_dump_test "sparc6"
+	set_tests_arch ""
+
         run_list_test "cbcond-diag" "-64"
-        run_dump_test "cfr"
-        run_dump_test "crypto"
-        run_dump_test "edge"
         run_dump_test "flush"
-        run_dump_test "hpcvis3"
-        run_dump_test "ima"
         run_dump_test "ld_st_fsr"
         run_dump_test "ldtw_sttw"
         run_dump_test "ldd_std"
         run_dump_test "ldx_stx"
         run_dump_test "ldx_efsr"
-        run_dump_test "mwait"
-        run_dump_test "mcdper"
-        run_dump_test "sparc5vis4"
-        run_dump_test "xcrypto"
         run_dump_test "v9branch1"
         run_dump_test "imm-plus-rreg"
         run_dump_test "dcti-couples-v9"
         run_dump_test "call-relax"
-        run_dump_test "sparc6"
         run_list_test "sparc6-diag" "-64"
-        run_dump_test "fpcmpshl"
         run_list_test "fpcmpshl-diag" "-64"
-        run_dump_test "ldm-stm"
         run_list_test "ldm-stm-diag" "-64"
-        run_dump_test "ldmf-stmf"
         run_list_test "ldmf-stmf-diag" "-64"
-        run_dump_test "on"
         run_list_test "on-diag" "-64"
-        run_dump_test "rle"
     } else {
         # The next tests are a.out only.
         run_dump_test "call-relax-aout"
@@ -95,12 +122,6 @@ if [istarget sparc*-*-*] {
 	run_dump_test "prefetch"
 	run_dump_test "set64"
 	run_dump_test "synth64"
-        run_dump_test "rdasr"
-	run_dump_test "rdpr"
-	run_dump_test "rdhpr"
-        run_dump_test "wrasr"
-	run_dump_test "wrpr"
-	run_dump_test "wrhpr"
 	run_dump_test "window"
 	run_dump_test "reloc64"
 	run_dump_test "pcrel64"
@@ -109,6 +130,17 @@ if [istarget sparc*-*-*] {
         run_list_test "hwcaps-bump" "-64 -bump"
         run_list_test "asi-bump-warn" "-64 -bump"
         run_list_test "asi-arch-error" "-Av9"
+
+	set_tests_arch "v9m"
+	run_dump_test "rdhpr"
+	run_dump_test "rdpr"
+	run_dump_test "wrasr"
+	run_dump_test "wrhpr"
+	run_dump_test "wrpr"
+
+	set_tests_arch "v9m8"
+	run_dump_test "rdasr"
+	set_tests_arch ""
     }
 
     run_dump_test "synth"



More information about the Binutils-cvs mailing list