diff options
Diffstat (limited to 'gdb/testsuite/gdb.cell/sizeof.exp')
-rw-r--r-- | gdb/testsuite/gdb.cell/sizeof.exp | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.cell/sizeof.exp b/gdb/testsuite/gdb.cell/sizeof.exp new file mode 100644 index 00000000000..cd950d4d77f --- /dev/null +++ b/gdb/testsuite/gdb.cell/sizeof.exp @@ -0,0 +1,120 @@ +# Copyright 2009 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Contributed by Markus Deuling <deuling@de.ibm.com>. +# +# Testsuite for Cell Broadband Engine combined debugger +# Check size of data types both on PPU and SPU. + +load_lib cell.exp + +set ppu_file "size" +set ppu_src ${srcdir}/${subdir}/${ppu_file}.c +set ppu_bin ${objdir}/${subdir}/${ppu_file} +set spu_file "size-spu" +set spu_src ${srcdir}/${subdir}/${spu_file}.c +set spu_bin ${objdir}/${subdir}/${spu_file} + +if {[skip_cell_tests]} { + return 0 +} + +# Compile SPU binary. +if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}] != "" } { + unsupported "Compiling spu binary failed." + return -1 +} +# Compile PPU binary. +if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}] != "" } { + unsupported "Embedding spu binary failed." + return -1 +} +if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } { + unsupported "Compiling ppu binary failed." + return -1 +} + +if [get_compiler_info ${ppu_bin}] { + return -1 +} + + +# Ask GDB about the sizes of data types. This has +# to be done in PPU thread and SPU thread. +proc get_gdb_size { type } { + global gdb_prompt + + set val "0" + gdb_test_multiple "print/d sizeof(${type})" "get sizeof(${type})" { + -re "\\$\[0-9\]* = (\[-\]*\[0-9\]*).*$gdb_prompt $" { + set val $expect_out(1,string) + pass "get sizeof ($type) = $val" + } + } + return ${val} +} + +# Compare sizes from GDB and sizeof(). +proc size_compare { type gdb_size } { + set expr [string_to_regexp "sizeof(${type})=${gdb_size}"] + gdb_test "next" \ + ".*" \ + "next" + # Checks against string_to_regexp fails in remote testing. + if ![is_remote target] { + gdb_test "next" \ + "${expr}.*" \ + "check sizeof \"$type\" \"$gdb_size\" " + } else { + gdb_test "next" ".*" "check sizeof deactivate in remote testing" + } +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${ppu_bin} + +if ![runto_main] then { + fail "Can't run to main" + return 0 +} + +# Compare sizes. +size_compare "char" [get_gdb_size "char"] +size_compare "short" [get_gdb_size "short"] +size_compare "int" [get_gdb_size "int"] +size_compare "long" [get_gdb_size "long"] +size_compare "long long" [get_gdb_size "long long"] +size_compare "float" [get_gdb_size "float"] +size_compare "double" [get_gdb_size "double"] +size_compare "long double" [get_gdb_size "long double"] + +# Continue to SPU thread. +cont_spu_main +check_spu_arch "" + +# Compare sizes in SPU thread. +size_compare "char" [get_gdb_size "char"] +size_compare "short" [get_gdb_size "short"] +size_compare "int" [get_gdb_size "int"] +size_compare "long" [get_gdb_size "long"] +size_compare "long long" [get_gdb_size "long long"] +size_compare "float" [get_gdb_size "float"] +size_compare "double" [get_gdb_size "double"] +size_compare "long double" [get_gdb_size "long double"] + +gdb_exit +return 0 |