This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [patch] test for altivec h/w on PowerPC
(ping!)
It's been a while.
ok to commit?
-=# Paul #=-
On Wednesday 09 March 2005 16:38, Paul Gilliam wrote:
> Ok, I have made all the requested chanages and tested it on powerpc with
> and with out altivec.
>
> NOTE: this patch depends on a previous patch so that gdb.arch/altivec-*.exp
> can compile their test programs. The previous patch is here:
> http://sources.redhat.com/ml/gdb-patches/2005-03/msg00157.html
>
> 2005-03-09 Paul Gilliam <pgilliam@us.ibm.com>
>
> * lib/gdb.exp: New proc 'skip_altivec_tests'
> * gdb.arch/altivec-abi.exp, gdb.arch/altivec-regs.exp: Use the new
> proc.
>
> Index: gdb.arch/altivec-abi.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.arch/altivec-abi.exp,v
> retrieving revision 1.3
> diff -c -3 -p -r1.3 altivec-abi.exp
> *** gdb.arch/altivec-abi.exp 20 Jan 2003 15:40:07 -0000 1.3
> --- gdb.arch/altivec-abi.exp 10 Mar 2005 00:19:27 -0000
> *************** if $tracelevel then {
> *** 32,39 ****
> set prms_id 0
> set bug_id 0
>
> ! if ![istarget "powerpc-*altivec"] then {
> verbose "Skipping altivec abi tests."
> return
> }
>
> --- 32,40 ----
> set prms_id 0
> set bug_id 0
>
> ! if {![istarget "powerpc*"] || [skip_altivec_tests]} then {
> verbose "Skipping altivec abi tests."
> + verbose -log "Skipping altivec abi tests."
> return
> }
>
> Index: gdb.arch/altivec-regs.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.arch/altivec-regs.exp,v
> retrieving revision 1.2
> diff -c -3 -p -r1.2 altivec-regs.exp
> *** gdb.arch/altivec-regs.exp 20 Jan 2003 15:40:07 -0000 1.2
> --- gdb.arch/altivec-regs.exp 10 Mar 2005 00:19:27 -0000
> *************** if $tracelevel then {
> *** 32,39 ****
> set prms_id 0
> set bug_id 0
>
> ! if ![istarget "powerpc-*altivec"] then {
> verbose "Skipping altivec register tests."
> return
> }
>
> --- 32,40 ----
> set prms_id 0
> set bug_id 0
>
> ! if {![istarget "powerpc*"] || [skip_altivec_tests]} then {
> verbose "Skipping altivec register tests."
> + verbose -log "Skipping altivec register tests."
> return
> }
>
> Index: lib/gdb.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v
> retrieving revision 1.58
> diff -c -3 -p -r1.58 gdb.exp
> *** lib/gdb.exp 10 Sep 2004 01:04:59 -0000 1.58
> --- lib/gdb.exp 10 Mar 2005 00:19:28 -0000
> *************** proc skip_fortran_tests {} {
> *** 1142,1147 ****
> --- 1142,1235 ----
> 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 ${binfile}] {
> + 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.