Commit | Line | Data |
---|---|---|
0fb0cc75 | 1 | # Copyright 2002, 2003, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. |
075559bc AC |
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 | |
e22f8b7c | 5 | # the Free Software Foundation; either version 3 of the License, or |
075559bc | 6 | # (at your option) any later version. |
e22f8b7c | 7 | # |
075559bc AC |
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. | |
e22f8b7c | 12 | # |
075559bc | 13 | # You should have received a copy of the GNU General Public License |
e22f8b7c | 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
075559bc | 15 | |
075559bc AC |
16 | # Test MI output with synthetic frames on the stack (call dummies, |
17 | # signal handlers). | |
18 | ||
9b1c792e SC |
19 | if [target_info exists gdb,nosignals] { |
20 | verbose "Skipping mi-syn-frame.exp because of nosignals." | |
21 | continue | |
22 | } | |
23 | ||
075559bc AC |
24 | load_lib mi-support.exp |
25 | set MIFLAGS "-i=mi" | |
26 | ||
27 | set testfile "mi-syn-frame" | |
28 | set srcfile ${testfile}.c | |
29 | set binfile ${objdir}/${subdir}/${testfile} | |
30 | if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } { | |
b60f0898 JB |
31 | untested mi-syn-frame.exp |
32 | return -1 | |
075559bc AC |
33 | } |
34 | ||
075559bc | 35 | mi_gdb_exit |
d084b331 | 36 | mi_gdb_start |
075559bc AC |
37 | mi_run_to_main |
38 | ||
d24317b4 VP |
39 | mi_create_breakpoint "foo" 2 keep foo ".*mi-syn-frame.c" $decimal $hex \ |
40 | "insert breakpoint foo" | |
075559bc AC |
41 | |
42 | # | |
43 | # Call foo() by hand, where we'll hit a breakpoint. | |
44 | # | |
45 | ||
b89667eb DE |
46 | mi_gdb_test "401-data-evaluate-expression foo()" ".*401\\^error,msg=\"The program being debugged stopped while in a function called from GDB.\\\\nEvaluation of the expression containing the function\\\\n\\(foo\\) will be abandoned.\\\\nWhen the function is done executing, GDB will silently stop.\"" \ |
47 | "call inferior's function with a breakpoint set in it" | |
a13e061a | 48 | |
075559bc | 49 | |
589e074d | 50 | mi_gdb_test "402-stack-list-frames" "402\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",func=\"foo\",file=\".*mi-syn-frame.c\",line=\"$decimal\"\},frame=\{level=\"1\",addr=\"$hex\",func=\"<function called from gdb>\"\},frame=\{level=\"2\",addr=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",line=\"$decimal\"\}.*\\\]" "backtrace from inferior function stopped at bp, showing gdb dummy frame" |
075559bc AC |
51 | |
52 | # | |
53 | # Continue back to main() | |
54 | # | |
e1ac3328 | 55 | mi_send_resuming_command "exec-continue" "testing exec continue" |
075559bc | 56 | |
f7f9a841 | 57 | mi_expect_stop "really-no-reason" "" "" "" "" "" "finished exec continue" |
40e55bef | 58 | |
f1ea48cb BR |
59 | mi_gdb_test "404-stack-list-frames 0 0" \ |
60 | "404\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\"\}.*\\\]" \ | |
61 | "list stack frames" | |
075559bc AC |
62 | |
63 | ||
64 | # | |
65 | # Call have_a_very_merry_interrupt() which will eventually raise a signal | |
66 | # that's caught by handler() which calls subroutine(). | |
67 | ||
d24317b4 VP |
68 | mi_create_breakpoint "subroutine" 3 keep subroutine ".*mi-syn-frame.c" $decimal $hex \ |
69 | "insert breakpoint subroutine" | |
075559bc | 70 | |
f1ea48cb | 71 | mi_gdb_test "406-data-evaluate-expression have_a_very_merry_interrupt()" \ |
b89667eb | 72 | ".*406\\^error,msg=\"The program being debugged stopped while in a function called from GDB.\\\\nEvaluation of the expression containing the function\\\\n\\(have_a_very_merry_interrupt\\) will be abandoned.\\\\nWhen the function is done executing, GDB will silently stop.\"" \ |
d084b331 | 73 | "data evaluate expression" |
075559bc AC |
74 | |
75 | # We should have both a signal handler and a call dummy frame | |
76 | # in this next output. | |
77 | ||
f1ea48cb BR |
78 | mi_gdb_test "407-stack-list-frames" \ |
79 | "407\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",func=\"subroutine\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\"\},frame=\{level=\"1\",addr=\"$hex\",func=\"handler\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\"\},frame=\{level=\"2\",addr=\"$hex\",func=\"<signal handler called>\"\},.*frame=\{level=\"$decimal\",addr=\"$hex\",func=\"have_a_very_merry_interrupt\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\"\},frame=\{level=\"$decimal\",addr=\"$hex\",func=\"<function called from gdb>\"\},frame=\{level=\"$decimal\",addr=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\"\}.*\\\]" \ | |
80 | "list stack frames" | |
075559bc AC |
81 | |
82 | ||
e1ac3328 | 83 | mi_send_resuming_command "exec-continue" "testing exec continue" |
40e55bef | 84 | |
f7f9a841 | 85 | mi_expect_stop "really-no-reason" "" "" "" "" "" "finished exec continue" |
075559bc | 86 | |
f1ea48cb BR |
87 | mi_gdb_test "409-stack-list-frames 0 0" \ |
88 | "409\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\"\}.*\\\]" \ | |
89 | "list stack frames" | |
075559bc AC |
90 | |
91 | # | |
92 | # Call bar() by hand, which should get an exception while running. | |
93 | # | |
94 | ||
ecd3fd0f | 95 | mi_gdb_test "410-data-evaluate-expression bar()" \ |
b89667eb | 96 | ".*410\\^error,msg=\"The program being debugged was signaled while in a function called from GDB.\\\\nGDB remains in the frame where the signal was received.\\\\nTo change this behavior use \\\\\"set unwindonsignal on\\\\\".\\\\nEvaluation of the expression containing the function\\\\n\\(bar\\) will be abandoned.\\\\nWhen the function is done executing, GDB will silently stop.\"" \ |
d084b331 | 97 | "call inferior function which raises exception" |
075559bc | 98 | |
589e074d | 99 | mi_gdb_test "411-stack-list-frames" "411\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",func=\"bar\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\"},frame=\{level=\"1\",addr=\"$hex\",func=\"<function called from gdb>\"\},frame=\{level=\"2\",addr=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\"}.*\\\]" "backtrace from inferior function at exception" |
075559bc AC |
100 | |
101 | mi_gdb_exit | |
102 | ||
103 | return 0 |