]>
Commit | Line | Data |
---|---|---|
1d506c26 | 1 | # Copyright 2009-2024 Free Software Foundation, Inc. |
02506ff1 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 | ||
18 | # | |
19 | # This test tests some i386 general instructions with a precord dumpfile. | |
20 | # | |
21 | ||
22 | # This test suitable only for process record-replay | |
18d2b876 | 23 | require supports_process_record is_x86_like_target |
02506ff1 | 24 | |
7686c074 | 25 | standard_testfile i386-reverse.c |
55baab26 | 26 | set precsave [standard_output_file i386.precsave] |
02506ff1 MS |
27 | |
28 | # some targets have leading underscores on assembly symbols. | |
ee5683ab | 29 | set additional_flags [gdb_target_symbol_prefix_flags] |
02506ff1 | 30 | |
5b362f04 | 31 | if {[prepare_for_testing "failed to prepare" $testfile $srcfile \ |
7686c074 | 32 | [list debug $additional_flags]]} { |
02506ff1 MS |
33 | return -1 |
34 | } | |
35 | ||
36 | set end_of_main [gdb_get_line_number " end of main "] | |
37 | set end_of_inc_dec_tests [gdb_get_line_number " end inc_dec_tests "] | |
38 | ||
50441f0f | 39 | runto_main |
02506ff1 | 40 | |
ade3e4f5 TT |
41 | # Activate process record/replay |
42 | gdb_test_no_output "record" "turn on process record" | |
02506ff1 MS |
43 | |
44 | global hex | |
45 | global decimal | |
46 | ||
47 | gdb_test "break $end_of_main" \ | |
a80db015 | 48 | "Breakpoint $decimal at .*$srcfile, line $end_of_main\." \ |
bb95117e | 49 | "breakpoint at end of main" |
02506ff1 MS |
50 | |
51 | gdb_test "continue" "Breakpoint .* end of main .*" "run to end of main" | |
52 | ||
55baab26 TT |
53 | gdb_test "record save $precsave" \ |
54 | "Saved core file $precsave with execution log\." \ | |
02506ff1 MS |
55 | "save process recfile" |
56 | ||
cdc7edd7 | 57 | gdb_test "kill" "" "kill process, prepare to debug log file" \ |
02506ff1 MS |
58 | "Kill the program being debugged\\? \\(y or n\\) " "y" |
59 | ||
55baab26 | 60 | gdb_test "record restore $precsave" \ |
470e2f4e | 61 | "Restored records from core file .*" \ |
02506ff1 MS |
62 | "reload precord save file" |
63 | ||
64 | gdb_test "step" "inc .eax.*" "step to inc eax 1st time" | |
65 | send_gdb "info reg eax\n" | |
66 | gdb_expect { | |
adf8243b | 67 | -re "eax *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
68 | set preinc_eax $expect_out(1,string) |
69 | } | |
70 | } | |
71 | ||
72 | gdb_test "step" "inc .ecx.*" "step to inc ecx 1st time" | |
73 | send_gdb "info reg ecx\n" | |
74 | gdb_expect { | |
adf8243b | 75 | -re "ecx *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
76 | set preinc_ecx $expect_out(1,string) |
77 | } | |
78 | } | |
79 | ||
80 | gdb_test "step" "inc .edx.*" "step to inc edx 1st time" | |
81 | send_gdb "info reg edx\n" | |
82 | gdb_expect { | |
adf8243b | 83 | -re "edx *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
84 | set preinc_edx $expect_out(1,string) |
85 | } | |
86 | } | |
87 | ||
88 | gdb_test "step" "inc .ebx.*" "step to inc ebx 1st time" | |
89 | send_gdb "info reg ebx\n" | |
90 | gdb_expect { | |
adf8243b | 91 | -re "ebx *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
92 | set preinc_ebx $expect_out(1,string) |
93 | } | |
94 | } | |
95 | ||
96 | gdb_test "step" "inc .esp.*" "step to inc esp 1st time" | |
97 | send_gdb "info reg esp\n" | |
98 | gdb_expect { | |
adf8243b | 99 | -re "esp *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
100 | set preinc_esp $expect_out(1,string) |
101 | } | |
102 | } | |
103 | ||
104 | gdb_test "step" "inc .ebp.*" "step to inc ebp 1st time" | |
105 | send_gdb "info reg ebp\n" | |
106 | gdb_expect { | |
adf8243b | 107 | -re "ebp *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
108 | set preinc_ebp $expect_out(1,string) |
109 | } | |
110 | } | |
111 | ||
112 | gdb_test "step" "inc .esi.*" "step to inc esi 1st time" | |
113 | send_gdb "info reg esi\n" | |
114 | gdb_expect { | |
adf8243b | 115 | -re "esi *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
116 | set preinc_esi $expect_out(1,string) |
117 | } | |
118 | } | |
119 | ||
120 | gdb_test "step" "inc .edi.*" "step to inc edi 1st time" | |
121 | send_gdb "info reg edi\n" | |
122 | gdb_expect { | |
adf8243b | 123 | -re "edi *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
124 | set preinc_edi $expect_out(1,string) |
125 | } | |
126 | } | |
127 | ||
128 | gdb_test "step" "dec .eax.*" "step to dec eax 1st time" | |
129 | send_gdb "info reg eax\n" | |
130 | gdb_expect { | |
adf8243b | 131 | -re "eax *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
132 | set predec_eax $expect_out(1,string) |
133 | } | |
134 | } | |
135 | ||
136 | gdb_test "step" "dec .ecx.*" "step to dec ecx 1st time" | |
137 | send_gdb "info reg ecx\n" | |
138 | gdb_expect { | |
adf8243b | 139 | -re "ecx *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
140 | set predec_ecx $expect_out(1,string) |
141 | } | |
142 | } | |
143 | ||
144 | gdb_test "step" "dec .edx.*" "step to dec edx 1st time" | |
145 | send_gdb "info reg edx\n" | |
146 | gdb_expect { | |
adf8243b | 147 | -re "edx *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
148 | set predec_edx $expect_out(1,string) |
149 | } | |
150 | } | |
151 | ||
152 | gdb_test "step" "dec .ebx.*" "step to dec ebx 1st time" | |
153 | send_gdb "info reg ebx\n" | |
154 | gdb_expect { | |
adf8243b | 155 | -re "ebx *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
156 | set predec_ebx $expect_out(1,string) |
157 | } | |
158 | } | |
159 | ||
160 | gdb_test "step" "dec .esp.*" "step to dec esp 1st time" | |
161 | send_gdb "info reg esp\n" | |
162 | gdb_expect { | |
adf8243b | 163 | -re "esp *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
164 | set predec_esp $expect_out(1,string) |
165 | } | |
166 | } | |
167 | ||
168 | gdb_test "step" "dec .ebp.*" "step to dec ebp 1st time" | |
169 | send_gdb "info reg ebp\n" | |
170 | gdb_expect { | |
adf8243b | 171 | -re "ebp *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
172 | set predec_ebp $expect_out(1,string) |
173 | } | |
174 | } | |
175 | ||
176 | gdb_test "step" "dec .esi.*" "step to dec esi 1st time" | |
177 | send_gdb "info reg esi\n" | |
178 | gdb_expect { | |
adf8243b | 179 | -re "esi *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
180 | set predec_esi $expect_out(1,string) |
181 | } | |
182 | } | |
183 | ||
184 | gdb_test "step" "dec .edi.*" "step to dec edi 1st time" | |
185 | send_gdb "info reg edi\n" | |
186 | gdb_expect { | |
adf8243b | 187 | -re "edi *($hex)\[ \t\]+.*$gdb_prompt " { |
02506ff1 MS |
188 | set predec_edi $expect_out(1,string) |
189 | } | |
190 | } | |
191 | ||
192 | # gdb_test "step" "end inc_dec_tests .*" "step to end inc_dec_tests 1st time" | |
193 | ||
194 | gdb_test "break $end_of_main" \ | |
195 | "Breakpoint $decimal at .* line $end_of_main\." \ | |
196 | "set breakpoint at end of main" | |
197 | ||
198 | gdb_test "continue" \ | |
199 | " end of main .*" \ | |
200 | "continue to end of main" | |
201 | ||
202 | gdb_test "break $end_of_inc_dec_tests" \ | |
203 | "Breakpoint $decimal at .* line $end_of_inc_dec_tests\." \ | |
204 | "set breakpoint at end of inc_dec_tests" | |
205 | ||
206 | gdb_test "reverse-continue" \ | |
207 | " end inc_dec_tests .*" \ | |
208 | "reverse to inc_dec_tests" | |
209 | ||
210 | # | |
211 | # Now reverse step, and check register values. | |
212 | # | |
213 | ||
adf8243b | 214 | gdb_test "info reg edi" "edi *$preinc_edi\[ \t\]+.*" "edi before reverse-dec" |
02506ff1 | 215 | gdb_test "reverse-step" "dec .edi.*" "reverse-step to dec edi" |
adf8243b | 216 | gdb_test "info reg edi" "edi *$predec_edi\[ \t\]+.*" "edi after reverse-dec" |
02506ff1 | 217 | |
adf8243b | 218 | gdb_test "info reg esi" "esi *$preinc_esi\[ \t\]+.*" "esi before reverse-dec" |
02506ff1 | 219 | gdb_test "reverse-step" "dec .esi.*" "reverse-step to dec esi" |
adf8243b | 220 | gdb_test "info reg esi" "esi *$predec_esi\[ \t\]+.*" "esi after reverse-dec" |
02506ff1 | 221 | |
adf8243b | 222 | gdb_test "info reg ebp" "ebp *$preinc_ebp\[ \t\]+.*" "ebp before reverse-dec" |
02506ff1 | 223 | gdb_test "reverse-step" "dec .ebp.*" "reverse-step to dec ebp" |
adf8243b | 224 | gdb_test "info reg ebp" "ebp *$predec_ebp\[ \t\]+.*" "ebp after reverse-dec" |
02506ff1 | 225 | |
adf8243b | 226 | gdb_test "info reg esp" "esp *$preinc_esp\[ \t\]+.*" "esp before reverse-dec" |
02506ff1 | 227 | gdb_test "reverse-step" "dec .esp.*" "reverse-step to dec esp" |
adf8243b | 228 | gdb_test "info reg esp" "esp *$predec_esp\[ \t\]+.*" "esp after reverse-dec" |
02506ff1 | 229 | |
adf8243b | 230 | gdb_test "info reg ebx" "ebx *$preinc_ebx\[ \t\]+.*" "ebx before reverse-dec" |
02506ff1 | 231 | gdb_test "reverse-step" "dec .ebx.*" "reverse-step to dec ebx" |
adf8243b | 232 | gdb_test "info reg ebx" "ebx *$predec_ebx\[ \t\]+.*" "ebx after reverse-dec" |
02506ff1 | 233 | |
adf8243b | 234 | gdb_test "info reg edx" "edx *$preinc_edx\[ \t\]+.*" "edx before reverse-dec" |
02506ff1 | 235 | gdb_test "reverse-step" "dec .edx.*" "reverse-step to dec edx" |
adf8243b | 236 | gdb_test "info reg edx" "edx *$predec_edx\[ \t\]+.*" "edx after reverse-dec" |
02506ff1 | 237 | |
adf8243b | 238 | gdb_test "info reg ecx" "ecx *$preinc_ecx\[ \t\]+.*" "ecx before reverse-dec" |
02506ff1 | 239 | gdb_test "reverse-step" "dec .ecx.*" "reverse-step to dec ecx" |
adf8243b | 240 | gdb_test "info reg ecx" "ecx *$predec_ecx\[ \t\]+.*" "ecx after reverse-dec" |
02506ff1 | 241 | |
adf8243b | 242 | gdb_test "info reg eax" "eax *$preinc_eax\[ \t\]+.*" "eax before reverse-dec" |
02506ff1 | 243 | gdb_test "reverse-step" "dec .eax.*" "reverse-step to dec eax" |
adf8243b | 244 | gdb_test "info reg eax" "eax *$predec_eax\[ \t\]+.*" "eax after reverse-dec" |
02506ff1 | 245 | |
adf8243b | 246 | gdb_test "info reg edi" "edi *$predec_edi\[ \t\]+.*" "edi before reverse-inc" |
02506ff1 | 247 | gdb_test "reverse-step" "inc .edi.*" "reverse-step to inc edi" |
adf8243b | 248 | gdb_test "info reg edi" "edi *$preinc_edi\[ \t\]+.*" "edi after reverse-inc" |
02506ff1 | 249 | |
adf8243b | 250 | gdb_test "info reg esi" "esi *$predec_esi\[ \t\]+.*" "esi before reverse-inc" |
02506ff1 | 251 | gdb_test "reverse-step" "inc .esi.*" "reverse-step to inc esi" |
adf8243b | 252 | gdb_test "info reg esi" "esi *$preinc_esi\[ \t\]+.*" "esi after reverse-inc" |
02506ff1 | 253 | |
adf8243b | 254 | gdb_test "info reg ebp" "ebp *$predec_ebp\[ \t\]+.*" "ebp before reverse-inc" |
02506ff1 | 255 | gdb_test "reverse-step" "inc .ebp.*" "reverse-step to inc ebp" |
adf8243b | 256 | gdb_test "info reg ebp" "ebp *$preinc_ebp\[ \t\]+.*" "ebp after reverse-inc" |
02506ff1 | 257 | |
adf8243b | 258 | gdb_test "info reg esp" "esp *$predec_esp\[ \t\]+.*" "esp before reverse-inc" |
02506ff1 | 259 | gdb_test "reverse-step" "inc .esp.*" "reverse-step to inc esp" |
adf8243b | 260 | gdb_test "info reg esp" "esp *$preinc_esp\[ \t\]+.*" "esp after reverse-inc" |
02506ff1 | 261 | |
adf8243b | 262 | gdb_test "info reg ebx" "ebx *$predec_ebx\[ \t\]+.*" "ebx before reverse-inc" |
02506ff1 | 263 | gdb_test "reverse-step" "inc .ebx.*" "reverse-step to inc ebx" |
adf8243b | 264 | gdb_test "info reg ebx" "ebx *$preinc_ebx\[ \t\]+.*" "ebx after reverse-inc" |
02506ff1 | 265 | |
adf8243b | 266 | gdb_test "info reg edx" "edx *$predec_edx\[ \t\]+.*" "edx before reverse-inc" |
02506ff1 | 267 | gdb_test "reverse-step" "inc .edx.*" "reverse-step to inc edx" |
adf8243b | 268 | gdb_test "info reg edx" "edx *$preinc_edx\[ \t\]+.*" "edx after reverse-inc" |
02506ff1 | 269 | |
adf8243b | 270 | gdb_test "info reg ecx" "ecx *$predec_ecx\[ \t\]+.*" "ecx before reverse-inc" |
02506ff1 | 271 | gdb_test "reverse-step" "inc .ecx.*" "reverse-step to inc ecx" |
adf8243b | 272 | gdb_test "info reg ecx" "ecx *$preinc_ecx\[ \t\]+.*" "ecx after reverse-inc" |
02506ff1 | 273 | |
adf8243b | 274 | gdb_test "info reg eax" "eax *$predec_eax\[ \t\]+.*" "eax before reverse-inc" |
02506ff1 | 275 | gdb_test "reverse-step" "inc .eax.*" "reverse-step to inc eax" |
adf8243b | 276 | gdb_test "info reg eax" "eax *$preinc_eax\[ \t\]+.*" "eax after reverse-inc" |
02506ff1 MS |
277 | |
278 |