# Copyright 2002, 2003, 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Please email any bugs, comments, and/or additions to this file to: # bug-gdb@prep.ai.mit.edu # Test MI output with synthetic frames on the stack (call dummies, # signal handlers). if [target_info exists gdb,nosignals] { verbose "Skipping mi-syn-frame.exp because of nosignals." continue } load_lib mi-support.exp set MIFLAGS "-i=mi1" set testfile "mi-syn-frame" set srcfile ${testfile}.c set binfile ${objdir}/${subdir}/${testfile} if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } { gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." } set my_mi_gdb_prompt "\\(gdb\\)\[ \]*\[\r\n\]*" mi_gdb_exit mi_gdb_start separate-inferior-tty mi_delete_breakpoints mi_gdb_reinitialize_dir $srcdir/$subdir mi_gdb_load ${binfile} mi_run_to_main mi_gdb_test "400-break-insert foo" \ "400\\^done,bkpt=\{number=\"2\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"foo\",file=\".*mi-syn-frame.c\",line=\"$decimal\",shlib=\"$binfile\",times=\"0\"\}" \ "insert breakpoint foo" # # Call foo() by hand, where we'll hit a breakpoint. # # APPLE LOCAL [breakpoint-hit]: We emit a TIMES field. mi_gdb_test "401-data-evaluate-expression foo()" "401\\^error,msg=\"The program being debugged stopped while in a function called from GDB.\\\\nWhen the function .foo. is done executing, GDB will silently\\\\nstop .instead of continuing to evaluate the expression containing\\\\nthe function call.\\.\",reason=\"breakpoint-hit\",commands=\"no\",times=\"1\",bkptno=\"2\",thread-id=\"1\"" "call inferior's function with a breakpoint set in it" mi_gdb_test "402-stack-list-frames" "402\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",fp=\"$hex\",func=\"foo\",file=\".*mi-syn-frame.c\",line=\"$decimal\".*\},frame=\{level=\"1\",addr=\"$hex\",fp=\"$hex\",func=\"<function called from gdb>\".*\},frame=\{level=\"2\",addr=\"$hex\",fp=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",line=\"$decimal\".*\}.*\\\]" "backtrace from inferior function stopped at bp, showing gdb dummy frame" # # Continue back to main() # mi_gdb_test "403-exec-continue" \ "403\\^running\[\r\n\]+${my_mi_gdb_prompt}403\\\*stopped" \ "testing exec continue" \ "hi in foo\[\r\n\]\+" # APPLE LOCAL we emit extra fields mi_gdb_test "404-stack-list-frames 0 0" \ "404\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",fp=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\".*\}.*\\\]" \ "list stack frames 1" # # Call have_a_very_merry_interrupt() which will eventually raise a signal # that's caught by handler() which calls subroutine(). # APPLE LOCAL we emit a shlib field mi_gdb_test "405-break-insert subroutine" \ "405\\^done,bkpt=\{number=\"3\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"subroutine\",file=\".*mi-syn-frame.c\",line=\"$decimal\",shlib=\"$binfile\",times=\"0\"\}" \ "insert breakpoint subroutine" # APPLE LOCAL no excess error output mi_gdb_test "406-data-evaluate-expression have_a_very_merry_interrupt()" \ "406\\^error,msg=\"The program being debugged stopped while in a function called from GDB.\\\\nWhen the function \\(have_a_very_merry_interrupt\\) is done executing, GDB will silently\\\\nstop \\(instead of continuing to evaluate the expression containing\\\\nthe function call\\).*\"" \ "data evaluate expression" \ "Waiting to get a signal\[\r\n\]+" # We should have both a signal handler and a call dummy frame # in this next output. # APPLE LOCAL added to mi backtrace mi_gdb_test "407-stack-list-frames" \ "407\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",fp=\"$hex\",func=\"subroutine\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\".*\},frame=\{level=\"1\",addr=\"$hex\",fp=\"$hex\",func=\"handler\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\".*\},frame=\{level=\"2\",addr=\"$hex\",fp=\"$hex\",func=\"<signal handler called>\"\},.*frame=\{level=\"$decimal\".*,addr=\"$hex\",fp=\"$hex\",func=\"have_a_very_merry_interrupt\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\".*\},frame=\{level=\"$decimal\".*,addr=\"$hex\",fp=\"$hex\",func=\"<function called from gdb>\"\},frame=\{level=\"$decimal\".*,addr=\"$hex\",fp=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\".*\}.*\\\]" \ "list stack frames 2" mi_gdb_test "408-exec-continue" \ "408\\^running\[\r\n\]+${my_mi_gdb_prompt}408\\\*stopped" # APPLE LOCAL added to mi backtrace mi_gdb_test "409-stack-list-frames 0 0" \ "409\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",fp=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\".*\}.*\\\]" \ "list stack frames 3" # # Call bar() by hand, which should get an exception while running. # mi_gdb_test "410-data-evaluate-expression bar()" \ "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 \\(bar\\) will be abandoned.\",reason=\"signal-received\",signal-name=\".*\",signal-meaning=\".*\",thread-id=\"$decimal\"" \ "call inferior function which raises exception" \ "hi in bar\[\r\n\]+" # APPLE LOCAL added to mi backtrace mi_gdb_test "411-stack-list-frames" "411\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",fp=\"$hex\",func=\"bar\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\".*},frame=\{level=\"1\",addr=\"$hex\",fp=\"$hex\",func=\"<function called from gdb>\"\},frame=\{level=\"2\",addr=\"$hex\",fp=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\".*}.*\\\]" "backtrace from inferior function at exception" mi_gdb_exit return 0