]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.reverse/machinestate.exp
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.reverse / machinestate.exp
CommitLineData
1d506c26 1# Copyright 2008-2024 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
5954db83 38require supports_reverse
28d41a99 39
7686c074 40standard_testfile .c ms1.c
28d41a99 41
5b362f04 42if { [prepare_for_testing "failed to prepare" $testfile \
7686c074 43 [list $srcfile $srcfile2]] } {
28d41a99
MS
44 return -1
45}
46
47set newline "\[\r\n\]+"
48
49set beginmain [gdb_get_line_number " begin main " $srcfile]
50set endmain [gdb_get_line_number " end main " $srcfile]
51
52# Test begins
53
50441f0f 54runto_main
28d41a99 55
d3895d7d 56if [supports_process_record] {
28d41a99 57 # Activate process record/replay
9f058c10 58 gdb_test_no_output "record" "turn on process record"
28d41a99
MS
59}
60
61# Proceed to end of main
62
63gdb_test "break $endmain" \
cce0ae56
PA
64 "Breakpoint.* file .*$srcfile, line $endmain.*" \
65 "break at end of main"
a80db015 66gdb_continue_to_breakpoint "end of main" ".*$srcfile:$endmain.*"
28d41a99
MS
67
68###
69###
70###
71
72# Now run backward to each of several points where data is changed.
73#
74
75# Module global variable, reverse
cce0ae56
PA
76with_test_prefix "module global variable, reverse" {
77 set breakloc [gdb_get_line_number \
78 "module_global_state: set breakpoint here" $srcfile]
79
80 gdb_test "tbreak $breakloc" "$srcfile, line $breakloc.*"
81 gdb_test "reverse-continue" "$srcfile:$breakloc.*" "reverse to $breakloc"
82
e2f62013 83 gdb_test "print aglobal" " = 0" "module global reverse-breakpoint"
cce0ae56 84 gdb_test "step" " module global post-change .*"
e2f62013 85 gdb_test "print aglobal" " = 1" "module global forward past bp"
cce0ae56 86 gdb_test "reverse-step" "$newline$breakloc.*"
e2f62013 87 gdb_test "print aglobal" " = 0" "module global reverse-step to bp"
cce0ae56 88}
28d41a99
MS
89
90# Module static variable, reverse
cce0ae56
PA
91with_test_prefix "module static variable, reverse" {
92 set breakloc [gdb_get_line_number \
93 "module_static_state: set breakpoint here" $srcfile]
94
95 gdb_test "tbreak $breakloc" "$srcfile, line $breakloc.*"
96 gdb_test "reverse-continue" "$srcfile:$breakloc.*" "reverse to $breakloc"
97
e2f62013 98 gdb_test "print astatic" " = 0" "module static reverse-breakpoint"
cce0ae56 99 gdb_test "step" " module static post-change .*"
e2f62013 100 gdb_test "print astatic" " = 1" "module static forward"
cce0ae56 101 gdb_test "reverse-step" "$newline$breakloc.*"
e2f62013 102 gdb_test "print astatic" " = 0" "module static reverse-step"
cce0ae56 103}
28d41a99
MS
104
105# Function static variable, reverse
cce0ae56
PA
106with_test_prefix "function static variable, reverse" {
107 set breakloc [gdb_get_line_number \
108 "function_static_state: set breakpoint here" $srcfile]
109
110 gdb_test "tbreak $breakloc" "$srcfile, line $breakloc.*"
111 gdb_test "reverse-continue" "$srcfile:$breakloc.*" "reverse to $breakloc"
112
e2f62013 113 gdb_test "print a" " = 0" "function static reverse-breakpoint"
cce0ae56 114 gdb_test "step" " function static post-change .*"
e2f62013 115 gdb_test "print a" " = 1" "function static forward"
cce0ae56 116 gdb_test "reverse-step" "$newline$breakloc.*"
e2f62013 117 gdb_test "print a" " = 0" "function static reverse-step"
cce0ae56 118}
28d41a99
MS
119
120# Auto variable, reverse
cce0ae56
PA
121with_test_prefix "auto variable, reverse" {
122 set breakloc [gdb_get_line_number \
123 "auto_state: set breakpoint here" $srcfile]
124
125 gdb_test "tbreak $breakloc" "$srcfile, line $breakloc.*"
126 gdb_test "reverse-continue" "$srcfile:$breakloc.*" "reverse to $breakloc"
127
e2f62013 128 gdb_test "print a" " = 0" "auto var reverse-breakpoint"
cce0ae56 129 gdb_test "step" " auto post-change .*"
e2f62013 130 gdb_test "print a" " = 1" "auto var forward"
cce0ae56 131 gdb_test "reverse-step" "$newline$breakloc.*"
e2f62013 132 gdb_test "print a" " = 0" "auto var reverse-step"
cce0ae56 133}
28d41a99
MS
134
135# Register variable, reverse
cce0ae56
PA
136with_test_prefix "register variable, reverse" {
137 set breakloc [gdb_get_line_number \
138 "register_state: set breakpoint here" $srcfile]
139
140 gdb_test "tbreak $breakloc" "$srcfile, line $breakloc.*"
141 gdb_test "reverse-continue" "$srcfile:$breakloc.*" "reverse to $breakloc"
142
e2f62013 143 gdb_test "print a" " = 0" "register var reverse-breakpoint"
cce0ae56 144 gdb_test "step" " register post-change .*"
e2f62013 145 gdb_test "print a" " = 1" "register var step post-change"
cce0ae56 146 gdb_test "reverse-step" "$newline$breakloc.*"
e2f62013 147 gdb_test "print a" " = 0" \
cce0ae56
PA
148 "register var reverse step-to, first time"
149}
28d41a99
MS
150
151# Proceed to beginning of main
152
cce0ae56
PA
153gdb_test "tbreak $beginmain" "$srcfile, line $beginmain.*"
154gdb_test "reverse-continue" "$srcfile:$beginmain.*" "reverse to main"
28d41a99
MS
155
156# Now repeat tests while replaying forward.
157
158# Register variable, forward
159
cce0ae56
PA
160with_test_prefix "register variable, forward" {
161 set breakloc [gdb_get_line_number \
162 "register_state: set breakpoint here" $srcfile]
28d41a99 163
cce0ae56
PA
164 gdb_test "tbreak $breakloc" "$srcfile, line $breakloc.*"
165 gdb_test "continue" "$srcfile:$breakloc.*" "forward to $breakloc"
28d41a99 166
e2f62013 167 gdb_test "print a" " = 0" "register var forward-breakpoint"
cce0ae56
PA
168 gdb_test "reverse-step" "hide.*"
169 gdb_test "step" "$newline$breakloc.*" "step, 1"
e2f62013 170 gdb_test "print a" " = 0" "register var forward step-to"
cce0ae56 171 gdb_test "step" " register post-change .*" "step, 2"
e2f62013 172 gdb_test "print a" " = 1" \
cce0ae56
PA
173 "register var step post-change, second time"
174}
28d41a99
MS
175
176# Auto variable, forward
cce0ae56
PA
177with_test_prefix "auto variable, forward" {
178 set breakloc [gdb_get_line_number \
179 "auto_state: set breakpoint here" $srcfile]
180
181 gdb_test "tbreak $breakloc" "$srcfile, line $breakloc.*"
182 gdb_test "continue" "$srcfile:$breakloc.*" "forward to $breakloc"
183
e2f62013 184 gdb_test "print a" " = 0" "auto var forward-breakpoint"
cce0ae56
PA
185 gdb_test "reverse-step" "hide.*"
186 gdb_test "step" "$newline$breakloc.*" "step, 1"
e2f62013 187 gdb_test "print a" " = 0" "auto var forward step-to"
cce0ae56 188 gdb_test "step" " auto post-change .*" "step, 2"
e2f62013 189 gdb_test "print a" " = 1" "auto var step post-change"
cce0ae56 190}
28d41a99
MS
191
192# Function static variable, forward
cce0ae56
PA
193with_test_prefix "function static variable, forward" {
194 set breakloc [gdb_get_line_number \
195 "function_static_state: set breakpoint here" $srcfile]
196
197 gdb_test "tbreak $breakloc" "$srcfile, line $breakloc.*"
198 gdb_test "continue" "$srcfile:$breakloc.*" "forward to $breakloc"
199
e2f62013 200 gdb_test "print a" " = 0" "function static forward-breakpoint"
cce0ae56
PA
201 gdb_test "reverse-step" "hide.*"
202 gdb_test "step" "$newline$breakloc.*" "step, 1"
e2f62013 203 gdb_test "print a" " = 0" "function static forward step-to"
cce0ae56 204 gdb_test "step" " function static post-change .*" "step, 2"
e2f62013 205 gdb_test "print a" " = 1" "function static step post-change"
cce0ae56 206}
28d41a99
MS
207
208# Module static variable, forward
cce0ae56
PA
209with_test_prefix "module static variable, forward" {
210 set breakloc [gdb_get_line_number \
211 "module_static_state: set breakpoint here" $srcfile]
212
213 gdb_test "tbreak $breakloc" "$srcfile, line $breakloc.*"
214 gdb_test "continue" "$srcfile:$breakloc.*" "forward to $breakloc"
215
e2f62013 216 gdb_test "print astatic" " = 0" "module static forward-breakpoint"
cce0ae56
PA
217 gdb_test "reverse-step" "hide.*"
218 gdb_test "step" "$newline$breakloc.*" "step, 1"
e2f62013 219 gdb_test "print astatic" " = 0" "module static forward step-to"
cce0ae56 220 gdb_test "step" " module static post-change .*" "step, 2"
e2f62013 221 gdb_test "print astatic" " = 1" "module static step post-change"
cce0ae56 222}
28d41a99
MS
223
224# Module global variable, forward
cce0ae56
PA
225with_test_prefix "module global variable, forward" {
226 set breakloc [gdb_get_line_number \
227 "module_global_state: set breakpoint here" $srcfile]
228
229 gdb_test "tbreak $breakloc" "$srcfile, line $breakloc.*"
230 gdb_test "continue" "$srcfile:$breakloc.*" "forward to $breakloc"
231
e2f62013 232 gdb_test "print aglobal" " = 0" "module global forward-breakpoint"
cce0ae56
PA
233 gdb_test "reverse-step" "hide.*"
234 gdb_test "step" "$newline$breakloc.*" "step, 1"
e2f62013 235 gdb_test "print aglobal" " = 0" "module global forward step-to"
cce0ae56 236 gdb_test "step" " module global post-change .*" "step, 2"
e2f62013 237 gdb_test "print aglobal" " = 1" "module global step post-change"
cce0ae56 238}