Add scalar_storage_order support for floating point
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.reverse / machinestate.exp
CommitLineData
42a4f53d 1# Copyright 2008-2019 Free Software Foundation, Inc.
28d41a99
MS
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# This file is part of the GDB testsuite.
17# This test tests the restoration of various kinds of machine state
18# to their original values by reverse execution. We will execute
19# the program forward while it changes various types of data, and
20# then execute it backward to see if their values get restored.
21#
22# The types of machine state (data) that are tested are:
23# register variable
24# auto variable
25# function static variable
26# module static variable
27# module global variable
28#
29# TODO:
30# various, possibly including...
31# .bss variable, .data variable, ...
32# shared library variable
33# heap variable (pointer)...
34# overlay variables...
35# Test forward replay
36#
37
d3895d7d 38if ![supports_reverse] {
28d41a99
MS
39 return
40}
41
7686c074 42standard_testfile .c ms1.c
28d41a99 43
5b362f04 44if { [prepare_for_testing "failed to prepare" $testfile \
7686c074 45 [list $srcfile $srcfile2]] } {
28d41a99
MS
46 return -1
47}
48
49set newline "\[\r\n\]+"
50
51set beginmain [gdb_get_line_number " begin main " $srcfile]
52set endmain [gdb_get_line_number " end main " $srcfile]
53
54# Test begins
55
56runto main
57
d3895d7d 58if [supports_process_record] {
28d41a99 59 # Activate process record/replay
9f058c10 60 gdb_test_no_output "record" "turn on process record"
28d41a99
MS
61}
62
63# Proceed to end of main
64
65gdb_test "break $endmain" \
a80db015
LM
66 "Breakpoint.* file .*$srcfile, line $endmain.*" ""
67gdb_continue_to_breakpoint "end of main" ".*$srcfile:$endmain.*"
28d41a99
MS
68
69###
70###
71###
72
73# Now run backward to each of several points where data is changed.
74#
75
76# Module global variable, reverse
77
78set breakloc [gdb_get_line_number \
79 "module_global_state: set breakpoint here" $srcfile]
80
a80db015
LM
81gdb_test "tbreak $breakloc" ".*$srcfile, line $breakloc.*" ""
82gdb_test "reverse-continue" ".*$srcfile:$breakloc.*" "reverse to $breakloc"
28d41a99
MS
83
84gdb_test "print aglobal" ".* = 0$newline" "module global reverse-breakpoint"
85gdb_test "step" ".* module global post-change .*" ""
86gdb_test "print aglobal" ".* = 1$newline" "module global forward past bp"
87gdb_test "reverse-step" ".*$newline$breakloc.*" ""
88gdb_test "print aglobal" ".* = 0$newline" "module global reverse-step to bp"
89
90
91# Module static variable, reverse
92
93set breakloc [gdb_get_line_number \
94 "module_static_state: set breakpoint here" $srcfile]
95
a80db015
LM
96gdb_test "tbreak $breakloc" ".*$srcfile, line $breakloc.*" ""
97gdb_test "reverse-continue" ".*$srcfile:$breakloc.*" "reverse to $breakloc"
28d41a99
MS
98
99gdb_test "print astatic" ".* = 0$newline" "module static reverse-breakpoint"
100gdb_test "step" ".* module static post-change .*" ""
101gdb_test "print astatic" ".* = 1$newline" "module static forward"
102gdb_test "reverse-step" ".*$newline$breakloc.*" ""
103gdb_test "print astatic" ".* = 0$newline" "module static reverse-step"
104
105# Function static variable, reverse
106
107set breakloc [gdb_get_line_number \
108 "function_static_state: set breakpoint here" $srcfile]
109
a80db015
LM
110gdb_test "tbreak $breakloc" ".*$srcfile, line $breakloc.*" ""
111gdb_test "reverse-continue" ".*$srcfile:$breakloc.*" "reverse to $breakloc"
28d41a99
MS
112
113gdb_test "print a" ".* = 0$newline" "function static reverse-breakpoint"
114gdb_test "step" ".* function static post-change .*" ""
115gdb_test "print a" ".* = 1$newline" "function static forward"
116gdb_test "reverse-step" ".*$newline$breakloc.*" ""
117gdb_test "print a" ".* = 0$newline" "function static reverse-step"
118
119# Auto variable, reverse
120
121set breakloc [gdb_get_line_number \
122 "auto_state: set breakpoint here" $srcfile]
123
a80db015
LM
124gdb_test "tbreak $breakloc" ".*$srcfile, line $breakloc.*" ""
125gdb_test "reverse-continue" ".*$srcfile:$breakloc.*" "reverse to $breakloc"
28d41a99
MS
126
127gdb_test "print a" ".* = 0$newline" "auto var reverse-breakpoint"
128gdb_test "step" ".* auto post-change .*" ""
129gdb_test "print a" ".* = 1$newline" "auto var forward"
130gdb_test "reverse-step" ".*$newline$breakloc.*" ""
131gdb_test "print a" ".* = 0$newline" "auto var reverse-step"
132
133# Register variable, reverse
134
135set breakloc [gdb_get_line_number \
136 "register_state: set breakpoint here" $srcfile]
137
a80db015
LM
138gdb_test "tbreak $breakloc" ".*$srcfile, line $breakloc.*" ""
139gdb_test "reverse-continue" ".*$srcfile:$breakloc.*" "reverse to $breakloc"
28d41a99
MS
140
141gdb_test "print a" ".* = 0$newline" "register var reverse-breakpoint"
142gdb_test "step" ".* register post-change .*" ""
143gdb_test "print a" ".* = 1$newline" "register var step post-change"
144gdb_test "reverse-step" ".*$newline$breakloc.*" ""
4d421147
AB
145gdb_test "print a" ".* = 0$newline" \
146 "register var reverse step-to, first time"
28d41a99
MS
147
148# Proceed to beginning of main
149
a80db015
LM
150gdb_test "tbreak $beginmain" ".*$srcfile, line $beginmain.*" ""
151gdb_test "reverse-continue" ".*$srcfile:$beginmain.*" "reverse to main"
28d41a99
MS
152
153# Now repeat tests while replaying forward.
154
155# Register variable, forward
156
157set breakloc [gdb_get_line_number \
158 "register_state: set breakpoint here" $srcfile]
159
a80db015
LM
160gdb_test "tbreak $breakloc" ".*$srcfile, line $breakloc.*" ""
161gdb_test "continue" ".*$srcfile:$breakloc.*" "forward to $breakloc"
28d41a99
MS
162
163gdb_test "print a" ".* = 0$newline" "register var forward-breakpoint"
164gdb_test "reverse-step" ".*hide.*" ""
165gdb_test "step" ".*$newline$breakloc.*" ""
166gdb_test "print a" ".* = 0$newline" "register var forward step-to"
167gdb_test "step" ".* register post-change .*" ""
4d421147
AB
168gdb_test "print a" ".* = 1$newline" \
169 "register var step post-change, second time"
28d41a99
MS
170
171# Auto variable, forward
172
173set breakloc [gdb_get_line_number \
174 "auto_state: set breakpoint here" $srcfile]
175
a80db015
LM
176gdb_test "tbreak $breakloc" ".*$srcfile, line $breakloc.*" ""
177gdb_test "continue" ".*$srcfile:$breakloc.*" "forward to $breakloc"
28d41a99
MS
178
179gdb_test "print a" ".* = 0$newline" "auto var forward-breakpoint"
180gdb_test "reverse-step" ".*hide.*" ""
181gdb_test "step" ".*$newline$breakloc.*" ""
182gdb_test "print a" ".* = 0$newline" "auto var forward step-to"
183gdb_test "step" ".* auto post-change .*" ""
184gdb_test "print a" ".* = 1$newline" "auto var step post-change"
185
186# Function static variable, forward
187
188set breakloc [gdb_get_line_number \
189 "function_static_state: set breakpoint here" $srcfile]
190
a80db015
LM
191gdb_test "tbreak $breakloc" ".*$srcfile, line $breakloc.*" ""
192gdb_test "continue" ".*$srcfile:$breakloc.*" "forward to $breakloc"
28d41a99
MS
193
194gdb_test "print a" ".* = 0$newline" "function static forward-breakpoint"
195gdb_test "reverse-step" ".*hide.*" ""
196gdb_test "step" ".*$newline$breakloc.*" ""
197gdb_test "print a" ".* = 0$newline" "function static forward step-to"
198gdb_test "step" ".* function static post-change .*" ""
199gdb_test "print a" ".* = 1$newline" "function static step post-change"
200
201# Module static variable, forward
202
203set breakloc [gdb_get_line_number \
204 "module_static_state: set breakpoint here" $srcfile]
205
a80db015
LM
206gdb_test "tbreak $breakloc" ".*$srcfile, line $breakloc.*" ""
207gdb_test "continue" ".*$srcfile:$breakloc.*" "forward to $breakloc"
28d41a99
MS
208
209gdb_test "print astatic" ".* = 0$newline" "module static forward-breakpoint"
210gdb_test "reverse-step" ".*hide.*" ""
211gdb_test "step" ".*$newline$breakloc.*" ""
212gdb_test "print astatic" ".* = 0$newline" "module static forward step-to"
213gdb_test "step" ".* module static post-change .*" ""
214gdb_test "print astatic" ".* = 1$newline" "module static step post-change"
215
216# Module global variable, forward
217
218set breakloc [gdb_get_line_number \
219 "module_global_state: set breakpoint here" $srcfile]
220
a80db015
LM
221gdb_test "tbreak $breakloc" ".*$srcfile, line $breakloc.*" ""
222gdb_test "continue" ".*$srcfile:$breakloc.*" "forward to $breakloc"
28d41a99
MS
223
224gdb_test "print aglobal" ".* = 0$newline" "module global forward-breakpoint"
225gdb_test "reverse-step" ".*hide.*" ""
226gdb_test "step" ".*$newline$breakloc.*" ""
227gdb_test "print aglobal" ".* = 0$newline" "module global forward step-to"
228gdb_test "step" ".* module global post-change .*" ""
229gdb_test "print aglobal" ".* = 1$newline" "module global step post-change"
230
This page took 1.216938 seconds and 4 git commands to generate.