Tests for validate symbol file using build-id.
[gdb/archer.git] / gdb / testsuite / gdb.reverse / sigall-precsave.exp
blob1748586255f45f9bc01b3c4cf3e62148786be02c
1 # Copyright 2009-2013 Free Software Foundation, Inc.
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.
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.
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/>.
16 if [target_info exists gdb,nosignals] {
17 verbose "Skipping sigall-precsave.exp because of nosignals."
18 return
21 if ![supports_reverse] {
22 return
26 gdb_exit
27 gdb_start
28 gdb_reinitialize_dir $srcdir/$subdir
30 standard_testfile sigall-reverse.c
31 set precsave [standard_output_file sigall.precsave]
33 if {[build_executable $testfile.exp $testfile $srcfile debug] == -1} {
34 return -1
37 proc test_one_sig {nextsig} {
38 global sig_supported
39 global gdb_prompt
40 global thissig
42 set this_sig_supported $sig_supported
43 gdb_test "handle SIG$thissig stop print" \
44 "SIG$thissig\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Yes.*"
45 gdb_test "b handle_$thissig" "Breakpoint \[0-9\]+ .*"
46 gdb_test "b gen_$nextsig" "Breakpoint \[0-9\]+ .*"
48 set need_another_continue 1
49 set missed_handler 0
50 if $this_sig_supported then {
51 if { $thissig == "IO" } {
52 setup_xfail "i*86-pc-linuxoldld-gnu" "i*86-pc-linuxaout-gnu"
54 set testmsg "get signal $thissig"
55 gdb_test_multiple "continue" $testmsg {
56 -re "Program received signal SIG$thissig.*handle_$thissig.*$gdb_prompt $" {
57 fail "$testmsg (wrong location)"
59 -re "Program received signal SIG$thissig.*$gdb_prompt $" {
60 pass $testmsg
62 -re "Breakpoint.* handle_$thissig.*$gdb_prompt $" {
63 xfail $testmsg
64 set need_another_continue 0
68 if [ istarget "alpha-dec-osf3*" ] then {
69 # OSF/1-3.x is unable to continue with a job control stop signal.
70 # The inferior remains stopped without an event of interest
71 # and GDB waits forever for the inferior to stop on an event
72 # of interest. Work around the kernel bug.
73 if { $thissig == "TSTP" || $thissig == "TTIN" || $thissig == "TTOU" } {
74 setup_xfail "alpha-dec-osf3*"
75 fail "cannot continue from signal $thissig"
76 set need_another_continue 0
80 if $need_another_continue then {
81 if { $thissig == "URG" } {
82 setup_xfail "i*86-pc-linuxoldld-gnu" "i*86-pc-linuxaout-gnu"
84 # Either Lynx or GDB screws up on SIGPRIO
85 if { $thissig == "PRIO" } {
86 setup_xfail "*-*-*lynx*"
88 set testmsg "send signal $thissig"
89 gdb_test_multiple "continue" $testmsg {
90 -re "Breakpoint.*handle_$thissig.*$gdb_prompt $" {
91 pass $testmsg
93 -re "Breakpoint.*gen_$nextsig.*kill.*$gdb_prompt $" {
94 fail "missed breakpoint at handle_$thissig"
95 set missed_handler 1
100 if { $missed_handler == "0" } then {
101 set testmsg "advance to $nextsig"
102 gdb_test_multiple "signal 0" $testmsg {
103 -re "Breakpoint.*gen_$nextsig.*kill.*$gdb_prompt $" {
104 pass $testmsg
105 set sig_supported 1
107 -re "Breakpoint.*gen_$nextsig.*handle.*$gdb_prompt $" {
108 pass $testmsg
109 set sig_supported 0
113 set thissig $nextsig
116 proc test_one_sig_reverse {prevsig} {
117 global gdb_prompt
119 gdb_test "reverse-continue" "Breakpoint .* handle_$prevsig.*" \
120 "reverse to handler of $prevsig"
122 set saw_signal 0
123 set testmsg "reverse to gen_$prevsig"
124 gdb_test_multiple "reverse-continue" $testmsg {
125 -re "Breakpoint.*handle_.*$gdb_prompt " {
126 pass "$testmsg (un-handled)"
128 -re "Program received signal SIG$prevsig.*$gdb_prompt " {
129 pass "reverse to signal event, $prevsig"
131 set nested_testmsg "reverse signal delivered"
132 gdb_test_multiple "frame" $nested_testmsg {
133 -re ".*handle_$prevsig.*$gdb_prompt " {
134 fail "$nested_testmsg (wrong location)"
136 -re ".*$gdb_prompt " {
137 pass $nested_testmsg
141 set saw_signal 1
142 send_gdb "reverse-continue\n"
143 exp_continue
145 -re "Breakpoint.*kill.*$gdb_prompt " {
146 if { $saw_signal } then {
147 pass "$testmsg (handled)"
148 } else {
149 xfail "$testmsg (handled)"
152 -re "No more reverse-execution history.*kill.*$gdb_prompt " {
153 if { $saw_signal } then {
154 pass "$testmsg (handled)"
155 } else {
156 xfail "$testmsg (handled)"
162 gdb_load $binfile
164 runto gen_ABRT
166 if [supports_process_record] {
167 # Activate process record/replay
168 gdb_test_no_output "record" "Turn on process record"
171 # Run until end, then save execution log.
173 set breakloc [gdb_get_line_number "end of main" "$srcfile"]
174 gdb_test "break $breakloc" \
175 "Breakpoint $decimal at .*/$srcfile, line $breakloc\." \
176 "BP at end of main"
178 # Signal handlers must be disabled
179 gdb_test "handle all nostop noprint"
181 # The list of signals that the program generates, in the order they
182 # are generated.
183 set signals {
184 ABRT
186 QUIT
191 SEGV
193 PIPE
194 ALRM
196 TSTP
197 CONT
198 CHLD
199 TTIN
200 TTOU
202 XCPU
203 XFSZ
204 VTALRM
205 PROF
206 WINCH
207 LOST
208 USR1
209 USR2
211 POLL
212 WIND
213 PHONE
214 WAITING
216 DANGER
217 GRANT
218 RETRACT
220 SOUND
222 PRIO
254 TERM
257 # Software single-step targets can't step into signal handlers. Since
258 # later, when replaying the execution log, the test wants to set
259 # breakpoints on handlers, we need to make sure that while recording,
260 # GDB steps through the handlers too, so that the execution log covers
261 # them. Setting breakpoints in all handlers takes care of it. This
262 # is harmless for hardware-step targets.
263 foreach sig $signals {
264 set test "break *handle_$sig"
265 gdb_test_multiple $test $test {
266 -re "Breakpoint .*$gdb_prompt $" {
267 # No need to record a pass for each breakpoint.
272 gdb_test_multiple "continue" "continue" {
273 -re "Breakpoint .* end of main .*$gdb_prompt $" {
274 pass "run to end of main"
276 -re "Breakpoint .* handle_.*$gdb_prompt $" {
277 send_gdb "continue\n"
278 exp_continue
282 delete_breakpoints
284 gdb_test "record save $precsave" \
285 "Saved core file $precsave with execution log\." \
286 "save process recfile"
288 gdb_test "kill" "" "Kill process, prepare to debug log file" \
289 "Kill the program being debugged\\? \\(y or n\\) " "y"
291 gdb_test "record restore $precsave" \
292 "Program terminated with signal .*" \
293 "reload precord save file"
295 # Signal handlers must be re-enabled
296 gdb_test "handle all stop print"
298 # Make the first signal SIGABRT because it is always supported.
299 set sig_supported 1
300 set thissig "ABRT"
302 # test signal handling
303 foreach sig [lrange $signals 1 end] {
304 test_one_sig $sig
307 # The last signal (SIGTERM) gets handled slightly differently because
308 # we are not setting up for another test.
309 gdb_test "handle SIGTERM stop print" \
310 "SIGTERM\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Yes.*"
311 gdb_test "b handle_TERM" "Breakpoint \[0-9\]+ .*"
312 gdb_test "continue" \
313 "Continuing.*Program received signal SIGTERM.*" \
314 "get signal TERM"
315 gdb_test "continue" "Breakpoint.*handle_TERM.*" "send signal TERM"
317 gdb_test "continue" " end of main .*" "continue to sigall exit"
319 foreach sig [lreverse $signals] {
320 test_one_sig_reverse $sig
323 # Make the first signal SIGABRT because it is always supported.
324 set sig_supported 1
325 set thissig "ABRT"
327 foreach sig [lrange $signals 1 end] {
328 test_one_sig $sig