1# Copyright 1999, 2000, 2001, 2003 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 2 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, write to the Free Software 15# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 16 17# Please email any bugs, comments, and/or additions to this file to: 18# bug-gdb@prep.ai.mit.edu 19 20# Test Machine interface (MI) operations 21# Verify that, using the MI, we can run a simple program and perform 22# exec-until. 23 24# The goal is not to 25# test gdb functionality, which is done by other tests, but to verify 26# the correct output response to MI operations. 27# 28 29load_lib mi-support.exp 30set MIFLAGS "-i=mi2" 31 32gdb_exit 33if [mi_gdb_start] { 34 continue 35} 36 37set testfile "until" 38set srcfile ${testfile}.c 39set binfile ${objdir}/${subdir}/${testfile} 40if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } { 41 gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." 42} 43 44mi_delete_breakpoints 45mi_gdb_reinitialize_dir $srcdir/$subdir 46mi_gdb_reinitialize_dir $srcdir/$subdir 47mi_gdb_load ${binfile} 48 49proc test_running_to_foo {} { 50 global mi_gdb_prompt 51 global hex 52 53 mi_gdb_test "200-break-insert 10" \ 54 "200\\^done,bkpt=\{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"foo\",file=\".*until.c\",line=\"10\",times=\"0\"\}" \ 55 "break-insert operation" 56 57 mi_run_cmd 58 59 gdb_expect { 60 -re "000\\*stopped,reason=\"breakpoint-hit\",bkptno=\"1\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"foo\",args=\\\[\\\],file=\".*until.c\",line=\"10\"\}\r\n$mi_gdb_prompt$" { 61 pass "run to main" 62 } 63 -re ".*$mi_gdb_prompt$" { 64 fail "run to main (2)" 65 } 66 timeout { 67 fail "run to main (timeout)" 68 } 69 } 70 71 mi_gdb_test "100-break-delete 1" "100\\^done" "break-delete 1" 72 73} 74 75proc test_until {} { 76 global mi_gdb_prompt 77 global hex 78 79 send_gdb "111-exec-until\n" 80 gdb_expect { 81 -re "111\\^running\r\n${mi_gdb_prompt}111\\*stopped,reason=\"end-stepping-range\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"foo\",args=\\\[\\\],file=\".*until.c\",line=\"12\"\}\r\n$mi_gdb_prompt$" { 82 pass "until after while loop" 83 } 84 timeout { 85 fail "until after while loop (timeout)" 86 } 87 } 88 89 send_gdb "222-exec-until 15\n" 90 gdb_expect { 91 -re "222\\^running\r\n${mi_gdb_prompt}222\\*stopped,reason=\"location-reached\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"foo\",args=\\\[\\\],file=\".*until.c\",line=\"15\"\}\r\n$mi_gdb_prompt$" { 92 pass "until line number" 93 } 94 timeout { 95 fail "until line number (timeout)" 96 } 97 } 98 99 send_gdb "333-exec-until until.c:17\n" 100 gdb_expect { 101 -re "333\\^running\r\n${mi_gdb_prompt}333\\*stopped,reason=\"location-reached\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"foo\",args=\\\[\\\],file=\".*until.c\",line=\"17\"\}\r\n$mi_gdb_prompt$" { 102 pass "until line number:file" 103 } 104 timeout { 105 fail "until line number:file (timeout)" 106 } 107 } 108 109 # This is supposed to NOT stop at line 25. It stops right after foo is over. 110 111 send_gdb "444-exec-until until.c:25\n" 112 gdb_expect { 113 -re "444\\^running\r\n${mi_gdb_prompt}444\\*stopped,reason=\"location-reached\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"main\",args=\\\[\\\],file=\".*until.c\",line=\"24\"\}\r\n$mi_gdb_prompt$" { 114 pass "until after current function" 115 } 116 timeout { 117 fail "until after current function (timeout)" 118 } 119 } 120 121} 122 123test_running_to_foo 124test_until 125 126mi_gdb_exit 127return 0 128