1 # This testcase is part of GDB
, the GNU debugger.
3 # Copyright
1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free
4 # Software Foundation
, Inc.
6 # This
program is free software
; you can redistribute it and
/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation
; either version
2 of the License
, or
9 #
(at your option
) any later version.
11 # This
program is distributed in the hope that it will be useful
,
12 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License
for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this
program; if not
, write to the Free Software
18 # Foundation
, Inc.
, 59 Temple Place
- Suite
330, Boston
, MA
02111-1307, USA.
24 # ending
-run.exp
-- Expect script to test ending a test run in gdb
30 set testfile ending
-run
31 set srcfile $
{testfile
}.c
32 set binfile $
{objdir
}/$
{subdir
}/$
{testfile
}
34 remote_exec build
"rm -f ${binfile}"
35 remote_exec build
"rm -f core"
38 if { [gdb_compile
"${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
39 gdb_suppress_entire_file
"Testcase compile failed, so all tests in this file will automatically fail."
46 gdb_reinitialize_dir $srcdir
/$subdir
49 # CHFts23469
: Test that you can
"clear" a bp set at
50 # a line _before_ the routine
(which will default to the
51 # first line in the routine
, which turns out to correspond
52 # to the prolog
--that
's another bug...)
55 gdb_test "b ending-run.c:1" ".*Breakpoint.*ending-run.c, line 1.*" \
56 "bpt at line before routine"
58 gdb_test "b ending-run.c:13" \
59 ".*Note.*also.*Breakpoint 2.*ending-run.c, line 13.*" \
60 "b ending-run.c:13, one"
62 # Set up to go to the next-to-last line of the program
64 gdb_test "b ending-run.c:31" ".*Breakpoint 3.*ending-run.c, line 31.*"
66 # Expect to hit the bp at line "1", but symbolize this
67 # as line "13". Then try to clear it--this should work.
69 if [target_info exists use_gdb_stub] {
70 gdb_test "continue" ".*Breakpoint.*1.*callee.*13.*"
72 gdb_test "r" ".*Breakpoint.*1.*callee.*13.*"
74 gdb_test "cle" ".*Deleted breakpoints 2 1.*" "clear worked"
77 -re ".* breakpoint .* breakpoint .*$gdb_prompt $" {
78 fail "cleared bp at line before routine"
80 -re ".*3.*main.*31.*$gdb_prompt $" {
81 pass "cleared bp at line before routine"
83 -re ".*$gdb_prompt $" {
84 fail "cleared bp at line before routine (info b)"
88 # Test some other "clear" combinations
90 gdb_test "b ending-run.c:1" ".*Breakpoint.*4.*"
91 gdb_test "b ending-run.c:13" ".*Note.*also.*Breakpoint.*5.*" "b ending-run.c:13, two"
92 gdb_test "cle ending-run.c:13" \
93 ".*Deleted breakpoint 5.*" "Only cleared 1 by line"
95 send_gdb "inf line ending-run.c:13\n"
97 -re ".*address (0x\[0-9a-fA-F]*).*$gdb_prompt $" {
98 set line_eight $expect_out(1,string)
99 gdb_test "b 13" ".*Breakpoint.*6.*"
100 gdb_test "cle *$line_eight" ".*Deleted breakpoints 6 4.*" "Clear 2 by address"
102 -re ".*$gdb_prompt $" {
103 fail "need to fix test for new compile outcome"
107 send_gdb "inf line ending-run.c:14\n"
109 -re ".*address (0x\[0-9a-fA-F]*).*$gdb_prompt $" {
110 set line_nine $expect_out(1,string)
111 gdb_test "b ending-run.c:14" ".*Breakpoint 7.*ending-run.c, line 14.*"
112 gdb_test "b *$line_nine" ".*Note.*also.*Breakpoint 8.*" "Breakpoint 7 at *ending-run.c:14"
113 gdb_test "c" ".*Breakpoint.*7.*callee.*14.*"
114 gdb_test "cle" ".*Deleted breakpoints 8 7.*" "Clear 2 by default"
116 -re ".*$gdb_prompt $" {
117 fail "need to fix test for new compile outcome"
123 -re ".* breakpoint .* breakpoint .*$gdb_prompt $" {
124 fail "all set to continue (didn't clear bps
)"
126 -re
".*3.*main.*31.*$gdb_prompt $" {
127 pass
"all set to continue"
129 -re
".*$gdb_prompt $" {
130 fail
"all set to continue (missing bp at end)"
135 # See
if we can step out with control. The
"1 2 3" stuff
136 # is output from the
program.
138 if ![gdb_skip_stdio_test
"cont"] {
139 gdb_test
"cont" ".*1 2 7 14 23 34 47 62 79.*Breakpoint.*31.*"
141 gdb_test
"cont" ".*Breakpoint.*31.*"
144 if ![gdb_skip_stdio_test
"Step to return"] {
145 gdb_test
"next" ".*Goodbye!.*32.*" \
148 gdb_test
"next" "" ""
151 set old_timeout $timeout
156 -re
"33.*$gdb_prompt $" {
157 # sometimes we stop at the closing brace
, if so
, do another next
160 -re
".*Unable to find return pc for this frame.*$gdb_prompt $" {
161 fail
"step out of main (Old bug came back!)"
164 -re
".*in.*start.*$gdb_prompt $" {
165 pass
"step out of main"
167 -re
".*in.*bsp_trap.*$gdb_prompt $" {
168 pass
"step out of main"
170 -re
".*in.*init.*$gdb_prompt $" {
171 # This is what happens
on sparc64
-elf ultra.
172 pass
"step out of main"
174 -re
".*in.*dll_crt0_1.*$gdb_prompt $" {
175 # This is what happens
on Cygwin.
176 pass
"step out of main"
178 -re
".*Program exited normally.*$gdb_prompt $" {
179 # This is what happens
on Linux i86
(and I would expect others
)
181 pass
"step out of main"
183 -re
".*in .nope ().*$gdb_prompt $" {
184 # This is what happens
on Solaris currently
-sts
1999-08-25
185 pass
"step out of main (on Solaris)"
187 -re
".*in _int_reset ().*$gdb_prompt $" {
188 # This is what happens
on Sanyo XStormy16
189 pass
"step out of main"
191 -re
".*init ().*$gdb_prompt $" {
192 # This is what happens
on many Mips targets
193 pass
"step out of main"
195 -re
".*in ..change.mode ().*$gdb_prompt $" {
196 # This is what happens
on ARM in thumb
mode -fn
2000-02-01
197 pass
"step out of main (on ARM thumb)"
199 -re
".*in.*\\\$START\\\$.*from.*dld.sl.*$gdb_prompt $" {
200 pass
"step out of main"
202 -re
".*in __wrap__?main ().*$gdb_prompt $" {
203 pass
"step out of main (status wrapper)"
205 -re
"__setup_argv_for_main (.*).*$gdb_prompt $" {
206 #
On sh
, another wrapper function
(start_l
) exists, so
207 # another `next
' is necessary.
208 gdb_test "next" ".*in start_l ().*" "step out of main (on sh)"
210 -re ".*$gdb_prompt $" { fail "step out of main (at end 2)" }
212 fail "step out of main (hang or timeout on step at end 2)"
216 -re ".*Unable to find return pc for this frame.*$gdb_prompt $" {
217 fail "Old bug came back!"
220 -re ".*in.*start.*$gdb_prompt $" {
221 pass "step out of main"
223 -re ".*in.*\\\$START\\\$.*from.*dld.sl.*$gdb_prompt $" {
224 pass "step out of main (2)"
226 -re ".*Program exited normally.*$gdb_prompt $" {
227 # This is what happens on Linux i86 (and I would expect others)
229 pass "step out of main"
231 -re ".*in.*currently asm.*$gdb_prompt $" {
232 pass "step out of main (into assembler)"
234 -re ".*Program received signal SIGTRAP.*$gdb_prompt $" {
235 pass "Cygmon stopped in ending trap."
237 -re ".*$gdb_prompt $" { fail "step out of main (at end 1)" }
238 timeout { fail "step out of main (hang or timeout on step at end 1)" }
241 # When we're talking to a
program running
on a real stand
-alone board
,
242 #
every BSP
's exit function behaves differently, so there's no single
243 # way to tell whether we
've exited gracefully or not. So don't run
244 # these tests when use_gdb_stub is
set, or when we
're running under Cygmon.
245 set program_exited_normally 0
246 set program_not_exited 0
247 set program_in_exit 0
248 if {! [target_info exists use_gdb_stub]
249 && (! [target_info exists use_cygmon] || ! [target_info use_cygmon])} {
250 global program_exited;
251 if {[eval expr $program_exited == 0]} {
254 -re "Program exited normally.*$gdb_prompt $" {
255 # If we actually have debug info for the start function,
256 # then we won't
get the
"Single-stepping until function
258 pass
"step to end of run"
259 set program_exited_normally
1
261 -re
"Single.*EXIT code 0\r\n.*Program exited normally.*$gdb_prompt $" {
262 pass
"step to end of run (status wrapper)"
263 set program_exited_normally
1
265 -re
"Single.*EXIT code 0\r\n.*$gdb_prompt $" {
266 pass
"step to end of run (status wrapper)"
268 -re
".*Single.*Program exited.*$gdb_prompt $" {
269 pass
"step to end of run"
270 set program_exited_normally
1
272 -re
".*Single.*in exit.*from.*dld.sl.*$gdb_prompt $" {
273 pass
"step to end of run"
274 set program_in_exit
1
276 -re
".*Single.*_int_reset.*$gdb_prompt $" {
277 pass
"step to end of run"
278 if {![istarget
"xstormy16-*-*"]} {
279 set program_exited_normally
1
282 -re
".*$gdb_prompt $" {
283 fail
"step to end of run"
284 set program_not_exited
1
287 fail
"(timeout) step to end of run"
288 set program_not_exited
1
293 if {$program_in_exit
} {
294 if {[gdb_test
"c" ".*" "continue after exit"] == 0} {
295 set program_exited_normally
1
298 unsupported
"continue after exit"
301 set timeout $old_timeout
303 if {$program_exited_normally
} {
304 gdb_test
"n" ".*The program is not being run.*" "don't step after run"
305 } elseif
{$program_not_exited
} {
306 unresolved
"don't step after run"
308 unsupported
"don't step after run"
311 set exec_output
[remote_exec host
"ls core"]
313 if [ regexp
"core not found" $exec_output] {
314 pass
"No core dumped on quit"
316 if [ regexp
"No such file or directory" $exec_output] {
317 pass
"ls: core (No core dumped on quit)"
319 remote_exec build
"rm -f core"
320 fail
"ls: core (Core dumped on quit)"
325 #remote_exec build
"rm -f ${binfile}"