]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.reverse/machinestate.exp
Update years in copyright notice for the GDB files.
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.reverse / machinestate.exp
CommitLineData
8acc9f48 1# Copyright 2008-2013 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
7686c074
TT
44if { [prepare_for_testing $testfile.exp $testfile \
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
bcd2dc50 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" \
66 "Breakpoint.* file .*/$srcfile, line $endmain.*" ""
67gdb_continue_to_breakpoint "end of main" ".*/$srcfile:$endmain.*"
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
81gdb_test "tbreak $breakloc" ".*/$srcfile, line $breakloc.*" ""
82gdb_test "reverse-continue" ".*/$srcfile:$breakloc.*" "reverse to $breakloc"
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
96gdb_test "tbreak $breakloc" ".*/$srcfile, line $breakloc.*" ""
97gdb_test "reverse-continue" ".*/$srcfile:$breakloc.*" "reverse to $breakloc"
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
110gdb_test "tbreak $breakloc" ".*/$srcfile, line $breakloc.*" ""
111gdb_test "reverse-continue" ".*/$srcfile:$breakloc.*" "reverse to $breakloc"
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
124gdb_test "tbreak $breakloc" ".*/$srcfile, line $breakloc.*" ""
125gdb_test "reverse-continue" ".*/$srcfile:$breakloc.*" "reverse to $breakloc"
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
138gdb_test "tbreak $breakloc" ".*/$srcfile, line $breakloc.*" ""
139gdb_test "reverse-continue" ".*/$srcfile:$breakloc.*" "reverse to $breakloc"
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.*" ""
145gdb_test "print a" ".* = 0$newline" "register var reverse step-to"
146
147# Proceed to beginning of main
148
149gdb_test "tbreak $beginmain" ".*/$srcfile, line $beginmain.*" ""
150gdb_test "reverse-continue" ".*/$srcfile:$beginmain.*" "reverse to main"
151
152# Now repeat tests while replaying forward.
153
154# Register variable, forward
155
156set breakloc [gdb_get_line_number \
157 "register_state: set breakpoint here" $srcfile]
158
159gdb_test "tbreak $breakloc" ".*/$srcfile, line $breakloc.*" ""
160gdb_test "continue" ".*/$srcfile:$breakloc.*" "forward to $breakloc"
161
162gdb_test "print a" ".* = 0$newline" "register var forward-breakpoint"
163gdb_test "reverse-step" ".*hide.*" ""
164gdb_test "step" ".*$newline$breakloc.*" ""
165gdb_test "print a" ".* = 0$newline" "register var forward step-to"
166gdb_test "step" ".* register post-change .*" ""
167gdb_test "print a" ".* = 1$newline" "register var step post-change"
168
169# Auto variable, forward
170
171set breakloc [gdb_get_line_number \
172 "auto_state: set breakpoint here" $srcfile]
173
174gdb_test "tbreak $breakloc" ".*/$srcfile, line $breakloc.*" ""
175gdb_test "continue" ".*/$srcfile:$breakloc.*" "forward to $breakloc"
176
177gdb_test "print a" ".* = 0$newline" "auto var forward-breakpoint"
178gdb_test "reverse-step" ".*hide.*" ""
179gdb_test "step" ".*$newline$breakloc.*" ""
180gdb_test "print a" ".* = 0$newline" "auto var forward step-to"
181gdb_test "step" ".* auto post-change .*" ""
182gdb_test "print a" ".* = 1$newline" "auto var step post-change"
183
184# Function static variable, forward
185
186set breakloc [gdb_get_line_number \
187 "function_static_state: set breakpoint here" $srcfile]
188
189gdb_test "tbreak $breakloc" ".*/$srcfile, line $breakloc.*" ""
190gdb_test "continue" ".*/$srcfile:$breakloc.*" "forward to $breakloc"
191
192gdb_test "print a" ".* = 0$newline" "function static forward-breakpoint"
193gdb_test "reverse-step" ".*hide.*" ""
194gdb_test "step" ".*$newline$breakloc.*" ""
195gdb_test "print a" ".* = 0$newline" "function static forward step-to"
196gdb_test "step" ".* function static post-change .*" ""
197gdb_test "print a" ".* = 1$newline" "function static step post-change"
198
199# Module static variable, forward
200
201set breakloc [gdb_get_line_number \
202 "module_static_state: set breakpoint here" $srcfile]
203
204gdb_test "tbreak $breakloc" ".*/$srcfile, line $breakloc.*" ""
205gdb_test "continue" ".*/$srcfile:$breakloc.*" "forward to $breakloc"
206
207gdb_test "print astatic" ".* = 0$newline" "module static forward-breakpoint"
208gdb_test "reverse-step" ".*hide.*" ""
209gdb_test "step" ".*$newline$breakloc.*" ""
210gdb_test "print astatic" ".* = 0$newline" "module static forward step-to"
211gdb_test "step" ".* module static post-change .*" ""
212gdb_test "print astatic" ".* = 1$newline" "module static step post-change"
213
214# Module global variable, forward
215
216set breakloc [gdb_get_line_number \
217 "module_global_state: set breakpoint here" $srcfile]
218
219gdb_test "tbreak $breakloc" ".*/$srcfile, line $breakloc.*" ""
220gdb_test "continue" ".*/$srcfile:$breakloc.*" "forward to $breakloc"
221
222gdb_test "print aglobal" ".* = 0$newline" "module global forward-breakpoint"
223gdb_test "reverse-step" ".*hide.*" ""
224gdb_test "step" ".*$newline$breakloc.*" ""
225gdb_test "print aglobal" ".* = 0$newline" "module global forward step-to"
226gdb_test "step" ".* module global post-change .*" ""
227gdb_test "print aglobal" ".* = 1$newline" "module global step post-change"
228