This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB 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] test for altivec h/w on PowerPC


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.
 

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