From 3c95e6af3b96e8603713949ffb3e74cb5e8f2436 Mon Sep 17 00:00:00 2001 From: Paul Gilliam Date: Tue, 3 May 2005 00:41:49 +0000 Subject: 2004-05-02 Paul Gilliam * lib/gdb.exp (skip_altivec_tests): New function, based on check_vmx_hw_available from the GCC testsuite. * lib/gdb.arch/altivec-abi.exp: Use skip_altivec_tests. * lib/gdb.arch/altivec-regs.exp: Likewise. --- gdb/testsuite/ChangeLog | 7 +++ gdb/testsuite/gdb.arch/altivec-abi.exp | 3 +- gdb/testsuite/gdb.arch/altivec-regs.exp | 3 +- gdb/testsuite/lib/gdb.exp | 88 +++++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 2 deletions(-) (limited to 'gdb/testsuite') diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 7ccee46..87baff6 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2004-05-02 Paul Gilliam + + * lib/gdb.exp (skip_altivec_tests): New function, based on + check_vmx_hw_available from the GCC testsuite. + * lib/gdb.arch/altivec-abi.exp: Use skip_altivec_tests. + * lib/gdb.arch/altivec-regs.exp: Likewise. + 2005-05-02 Jim Blandy * gdb.base/auxv.exp: Call 'untested' and return -1 instead of diff --git a/gdb/testsuite/gdb.arch/altivec-abi.exp b/gdb/testsuite/gdb.arch/altivec-abi.exp index 6b22c9a..91b625a 100644 --- a/gdb/testsuite/gdb.arch/altivec-abi.exp +++ b/gdb/testsuite/gdb.arch/altivec-abi.exp @@ -32,8 +32,9 @@ if $tracelevel then { set prms_id 0 set bug_id 0 -if ![istarget "powerpc-*altivec"] then { +if {![istarget "powerpc*"] || [skip_altivec_tests]} then { verbose "Skipping altivec abi tests." + verbose -log "Skipping altivec abi tests." return } diff --git a/gdb/testsuite/gdb.arch/altivec-regs.exp b/gdb/testsuite/gdb.arch/altivec-regs.exp index a1330d0..52833a7 100644 --- a/gdb/testsuite/gdb.arch/altivec-regs.exp +++ b/gdb/testsuite/gdb.arch/altivec-regs.exp @@ -32,8 +32,9 @@ if $tracelevel then { set prms_id 0 set bug_id 0 -if ![istarget "powerpc-*altivec"] then { +if {![istarget "powerpc*"] || [skip_altivec_tests]} then { verbose "Skipping altivec register tests." + verbose -log "Skipping altivec register tests." return } diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index ce9d6f1..c587c87 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1142,6 +1142,94 @@ proc skip_fortran_tests {} { return 0 } +# Run a test on the target to see if it supports vmx hardware. Return 0 if so, +# 1 if it does not. Based on 'check_vmx_hw_available' from the GCC testsuite. + +proc skip_altivec_tests {} { + global skip_vmx_tests_saved + global srcdir subdir gdb_prompt + + # Use the cached value, if it exists. + set me "skip_altivec_tests" + if [info exists skip_vmx_tests_saved] { + verbose "$me: returning saved $skip_vmx_tests_saved" 2 + return $skip_vmx_tests_saved + } + + # Some simulators are known to not support VMX instructions. + if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] } { + verbose "$me: target known to not support VMX, returning 1" 2 + return [set $skip_vmx_tests_saved 1] + } + + # Make sure we have a compiler that understands altivec. + set compile_flags {debug additional_flags=-w} + if [get_compiler_info not-used] { + warning "Could not get compiler info" + return 1 + } + if [test_compiler_info gcc*] { + set compile_flags "$compile_flags additional_flags=-maltivec" + } elseif [test_compiler_info xlc*] { + set compile_flags "$compile_flags additional_flags=-qaltivec" + } else { + verbose "Could not compile with altivec support, returning 1" 2 + return 1 + } + + # Set up, compile, and execute a test program containing VMX instructions. + # Include the current process ID in the file names to prevent conflicts + # with invocations for multiple testsuites. + set src vmx[pid].c + set exe vmx[pid].x + + set f [open $src "w"] + puts $f "int main() {" + puts $f "#ifdef __MACH__" + puts $f " asm volatile (\"vor v0,v0,v0\");" + puts $f "#else" + puts $f " asm volatile (\"vor 0,0,0\");" + puts $f "#endif" + puts $f " return 0; }" + close $f + + verbose "$me: compiling testfile $src" 2 + set lines [gdb_compile $src $exe executable $compile_flags] + file delete $src + + if ![string match "" $lines] then { + verbose "$me: testfile compilation failed, returning 1" 2 + return [set skip_vmx_tests_saved 1] + } + + # No error message, compilation succeeded so now run it via gdb. + + gdb_exit + gdb_start + gdb_reinitialize_dir $srcdir/$subdir + gdb_load "$exe" + gdb_run_cmd + gdb_expect { + -re ".*Illegal instruction.*${gdb_prompt} $" { + verbose -log "\n$me altivec hardware not detected" + set skip_vmx_tests_saved 1 + } + -re ".*Program exited normally.*${gdb_prompt} $" { + verbose -log "\n$me: altivec hardware detected" + set skip_vmx_tests_saved 0 + } + default { + warning "\n$me: default case taken" + set skip_vmx_tests_saved 1 + } + } + gdb_exit + remote_file build delete $exe + + verbose "$me: returning $skip_vmx_tests_saved" 2 + return $skip_vmx_tests_saved +} + # Skip all the tests in the file if you are not on an hppa running # hpux target. -- cgit v1.1