This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[patch] test for altivec h/w on PowerPC
- From: Paul Gilliam <pgilliam at us dot ibm dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Tue, 1 Mar 2005 15:19:39 -0800
- Subject: [patch] test for altivec h/w on PowerPC
- Reply-to: pgilliam at us dot ibm dot com
testsuite/gdb.arch/altivec-abi.exp and testsuite/gdb.arch/altivec-regs.exp
test for relivance by checking if the configuration string ends in 'altivec'.
This wasn't working for me and doesn't seem like the right way to do this.
So I replaced it by adding a new routine to testsuit/lib/gdb.exp that compiles
and runs a tiny little program. If we are on any machine that doesn't have
altivec hardware, then either the compile fails or the tiny little program
gets an illegal instruction trap when run. This is a modification of a
similar routine in the gcc testsuite. (cut-and-paste code re-use)
I then changed the two tests mentioned above to use the new routine.
Ok to commit?
-=# Paul Gilliam #=-
diff -Naur testsuite.old/gdb.arch/altivec-abi.exp testsuite/gdb.arch/altivec-abi.exp
--- testsuite.old/gdb.arch/altivec-abi.exp 2005-03-01 14:56:21.484222560 -0800
+++ testsuite/gdb.arch/altivec-abi.exp 2005-03-01 15:01:49.451289288 -0800
@@ -32,7 +32,7 @@
set prms_id 0
set bug_id 0
-if ![istarget "powerpc-*altivec"] then {
+if [skip_altivec_tests] {
verbose "Skipping altivec abi tests."
return
}
diff -Naur testsuite.old/gdb.arch/altivec-regs.exp testsuite/gdb.arch/altivec-regs.exp
--- testsuite.old/gdb.arch/altivec-regs.exp 2005-03-01 14:56:21.485222408 -0800
+++ testsuite/gdb.arch/altivec-regs.exp 2005-03-01 15:02:41.869176744 -0800
@@ -32,7 +32,7 @@
set prms_id 0
set bug_id 0
-if ![istarget "powerpc-*altivec"] then {
+if [skip_altivec_tests] then {
verbose "Skipping altivec register tests."
return
}
diff -Naur testsuite.old/lib/gdb.exp testsuite/lib/gdb.exp
--- testsuite.old/lib/gdb.exp 2005-03-01 14:56:22.127258976 -0800
+++ testsuite/lib/gdb.exp 2005-03-01 15:00:18.199183888 -0800
@@ -1142,6 +1142,57 @@
return 0
}
+# Run a test on the target to see if it supports vmx hardware.
+# Return 1 if it does not, 0 if it does.
+
+proc skip_atltivec_tests {} {
+ global skip_vmx_tests_saved
+
+ if [info exists skip_vmx_tests_saved] {
+ verbose "check_hw_available: 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 "check_hw_available returning 0" 2
+ return [set $skip_vmx_tests_saved 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 "skip_altivec_testing compiling testfile $src" 0
+ set lines [gdb_compile $src $exe executable {debug additional_flags=-maltivec}]
+ file delete $src
+
+ if ![string match "" $lines] then {
+ verbose "check_vmx_hw_availalble testfile compilation failed" 2
+ return [set skip_vmx_tests_saved 1]
+ }
+
+ # No error message, compilation succeeded so now run it.
+
+ set exec_result [remote_exec build "./$exe"]
+
+ return [set skip_vmx_tests_saved [lindex $exec_result 0]]
+}
+
+
# Skip all the tests in the file if you are not on an hppa running
# hpux target.