diff options
Diffstat (limited to 'gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp')
-rw-r--r-- | gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp b/gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp new file mode 100644 index 0000000..d5db532 --- /dev/null +++ b/gdb/testsuite/gdb.arch/powerpc-fpscr-gcore.exp @@ -0,0 +1,93 @@ +# Copyright (C) 2018 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/>. + +# This file is part of the gdb testsuite. + +# This tests checks that generating and loading a core file preserves +# the correct FPSCR size. + +if {![istarget "powerpc*-*-linux*"]} then { + verbose "Skipping PowerPC test for corefiles with FPSCR." + return +} + +standard_testfile .c + +set gen_src [standard_output_file $srcfile] + +gdb_produce_source $gen_src { + int main() { + return 0; + } +} + +if {[build_executable "compile" $binfile $gen_src] == -1} { + return -1 +} + +clean_restart $binfile + +if ![runto_main] then { + fail "could not run to main" + return -1 +} + +# Check if our target has FPSCR +proc check_fpscr_access {} { + global gdb_prompt + + set test "fpscr register access" + gdb_test_multiple "info reg fpscr" "$test" { + -re "Invalid register.*\r\n$gdb_prompt $" { + unsupported "$test" + return 0 + } + -re "\r\nfpscr.*\r\n$gdb_prompt $" { + pass "$test" + return 1 + } + } + return 0 +} + +if { ![check_fpscr_access] } { + return -1 +} + +set fpscr_size_process [get_integer_valueof "sizeof(\$fpscr)" -1] + +set core_filename [standard_output_file "$testfile.core"] +set core_generated [gdb_gcore_cmd "$core_filename" "generate core file"] + +if { !$core_generated } { + return -1 +} + +clean_restart + +set core_loaded [gdb_core_cmd "$core_filename" "load core file"] + +if { $core_loaded != 1 } { + return -1 +} + +set fpscr_size_corefile [get_integer_valueof "sizeof(\$fpscr)" -2] + +set test "fpscr size matches" +if {$fpscr_size_process == $fpscr_size_corefile} { + pass $test +} else { + fail $test +} |