]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.arch/mips-fpregset-core.exp
gdb/testsuite: remove use of then keyword from gdb.arch/*.exp
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.arch / mips-fpregset-core.exp
CommitLineData
4a94e368 1# Copyright 2018-2022 Free Software Foundation, Inc.
d8dab6c3
MR
2
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 3 of the License, or
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with this program. If not, see <http://www.gnu.org/licenses/>.
15
16# Test MIPS Floating Point General Register handling in core files.
17
75b6f386 18if {![istarget "mips*-*-*"]} {
d8dab6c3
MR
19 verbose "Skipping MIPS Floating Point General Register tests."
20 return
21}
22
23standard_testfile
24
25if { [prepare_for_testing "failed to prepare" ${testfile}] } {
26 return
27}
28
29# Procedure to get current content of all floating-point registers.
30proc mips_fpregset_core_fetch_float_registers { test } {
31 global gdb_prompt
32
33 set all_registers_lines {}
34 set bad -1
35 # Former trailing `\[\r\n\]+' may eat just \r leaving \n in the buffer
36 # corrupting the next matches.
37 if { [gdb_test_multiple "info registers float" $test {
38 -re "info registers float\r\n" {
39 exp_continue
40 }
41 -ex "The program has no registers now" {
42 set bad 1
43 exp_continue
44 }
45 -re "^\(?:fcsr\|fir\):\[ \t\]+\[^\r\n\]+\r\n" {
46 # Filter out control registers. They may or may not be a part
47 # of the float group depending on whether XML descriptions are
48 # used or not.
49 exp_continue
50 }
51 -re "^\[^ \t\]+\[ \t\]+\[^\r\n\]+\r\n" {
52 lappend all_registers_lines $expect_out(0,string)
53 exp_continue
54 }
55 -re "$gdb_prompt $" {
56 incr bad
57 }
58 -re "^\[^\r\n\]+\r\n" {
59 if { !$bad } {
60 warning "Unrecognized output: $expect_out(0,string)"
61 set bad 1
62 }
63 exp_continue
64 }
65 }] != 0 } {
66 return {}
67 }
68
69 if { $bad } {
70 fail $test
71 return {}
72 }
73
74 pass $test
75 return $all_registers_lines
76}
77
78# Generate a native core file.
79
80set corefile [core_find $binfile]
81set core_supported [expr {$corefile != ""}]
82
83# Generate a core file with "gcore".
84
85clean_restart ${binfile}
86
87runto break_here
88
89# Check if we have an FPU available.
90gdb_test_multiple "show mipsfpu" "check for MIPS floating-point coprocessor" {
91 -re "The MIPS floating-point coprocessor\
92 .*\(absent\|unknown\).*$gdb_prompt $" {
93 unsupported "no MIPS floating-point coprocessor in the processor"
94 return
95 }
96 -re "The MIPS floating-point coprocessor .*$gdb_prompt $" {
97 verbose "MIPS floating-point coprocessor check successful."
98 }
99 default {
100 fail
101 return
102 }
103}
104
105# Save live FGR register contents.
106set live_fgr_contents [mips_fpregset_core_fetch_float_registers \
107 "retrieve live FGR register contents"]
108
109set gcorefile [standard_output_file gcore.test]
110set gcore_supported [gdb_gcore_cmd "$gcorefile" "gcore"]
111
112# Restart gdb and load COREFILE as a core file. SUPPORTED is true iff
113# the core was generated successfully; otherwise, the tests are marked
114# unsupported.
115#
116proc mips_fpregset_core_test { supported corefile } {
117 upvar live_fgr_contents live_fgr_contents
118 upvar target_triplet target_triplet
119 upvar host_triplet host_triplet
120 upvar binfile binfile
121
122 clean_restart ${binfile}
123
124 set test "load core file"
125 if { $supported } {
126 set core_loaded [gdb_core_cmd $corefile $test]
127 } else {
128 set core_loaded 0
129 unsupported $test
130 }
131
132 if { $core_loaded == 1 } {
133 set test "core file FGR register contents"
134 set core_fgr_contents \
135 [mips_fpregset_core_fetch_float_registers "retrieve $test"]
75b6f386 136 if {$core_fgr_contents == $live_fgr_contents} {
d8dab6c3
MR
137 pass $test
138 } else {
139 fail $test
140 }
141 } else {
142 unsupported $test
143 }
144}
145
146with_test_prefix "native" {
147 mips_fpregset_core_test $core_supported $corefile
148}
149
150with_test_prefix "gcore" {
151 mips_fpregset_core_test $gcore_supported $gcorefile
152}
153
154gdb_exit