* infcall.c (call_function_by_hand): Handle inferior exit.
[external/binutils.git] / gdb / testsuite / gdb.base / callexit.exp
1 # Copyright 2008 Free Software Foundation, Inc.
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 if $tracelevel then {
17         strace $tracelevel
18 }
19
20 set prms_id 0
21 set bug_id 0
22
23 set testfile "callexit"
24 set srcfile ${testfile}.c
25 set binfile ${objdir}/${subdir}/${testfile}
26
27 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
28      untested callexit.exp
29      return -1
30 }
31
32 # Some targets can't do function calls, so don't even bother with this
33 # test.
34 if [target_info exists gdb,cannot_call_functions] {
35     setup_xfail "*-*-*" 2416
36     fail "This target can not call functions"
37     continue
38 }
39
40 # Set the current language to C.  This counts as a test.  If it
41 # fails, then we skip the other tests.
42
43 proc set_lang_c {} {
44     global gdb_prompt
45
46     send_gdb "set language c\n"
47     gdb_expect {
48         -re ".*$gdb_prompt $" {}
49         timeout { fail "set language c (timeout)" ; return 0; }
50     }
51
52     send_gdb "show language\n"
53     gdb_expect {
54         -re ".* source language is \"c\".*$gdb_prompt $" {
55             pass "set language to \"c\""
56             return 1
57         }
58         -re ".*$gdb_prompt $" {
59             fail "setting language to \"c\""
60             return 0
61         }
62         timeout {
63             fail "can't show language (timeout)"
64             return 0
65         }
66     }
67 }
68
69 # Start with a fresh gdb.
70
71 gdb_exit
72 gdb_start
73 gdb_reinitialize_dir $srcdir/$subdir
74 gdb_load ${binfile}
75
76 if { ![set_lang_c] } {
77     gdb_suppress_tests;
78 } else {
79     if { ![runto_main] } {
80         gdb_suppress_tests;
81     }
82 }
83
84 # Call function (causing the program to exit), and see if gdb handles
85 # it properly.
86 gdb_test "call callexit()" \
87         "The program being debugged exited.*" \
88         "inferior function call terminated program"
89
90 return 0