From 0458ca44409420c3d5cdbbb21561ee71fd930d31 Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Fri, 20 Jul 2018 11:15:57 +0200 Subject: [PATCH] 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. --- 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 + Rainer Orth + + * 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 * 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" -- 2.7.4