1# Copyright 1998-2013 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 17clear_xfail "*-*-*" 18 19set testfile "jump" 20set srcfile ${testfile}.c 21set binfile ${objdir}/${subdir}/${testfile} 22 23# Build the test case 24if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } { 25 untested jump.exp 26 return -1 27 } 28 29 30# Start with a fresh gdb 31 32gdb_exit 33gdb_start 34gdb_reinitialize_dir $srcdir/$subdir 35gdb_load ${binfile} 36 37if ![runto_main] then { 38 perror "Couldn't run to main" 39 return -1 40} 41 42# Set a breakpoint on the statement that we're about to jump to. 43# The statement doesn't contain a function call. 44# 45set bp_on_non_call 0 46gdb_test_multiple "break 22" "break before jump to non-call" { 47 -re "\[Bb\]reakpoint (\[0-9\]*) at 0x\[0-9a-fA-F\]*: file .*${srcfile}, line 22.*$gdb_prompt $" { 48 set bp_on_non_call $expect_out(1,string) 49 pass "break before jump to non-call" 50 } 51} 52 53# Can we jump to the statement? Do we stop there? 54# 55gdb_test "jump 22" "Breakpoint \[0-9\]*, .*${srcfile}:22.*" \ 56 "jump to non-call" 57 58# Set a breakpoint on the statement that we're about to jump to. 59# The statement does contain a function call. 60# 61set bp_on_call 0 62gdb_test_multiple "break 21" "break before jump to call" { 63 -re "\[Bb\]reakpoint (\[0-9\]*) at 0x\[0-9a-fA-F\]*: file .*${srcfile}, line 21.*$gdb_prompt $" { 64 set bp_on_call $expect_out(1,string) 65 pass "break before jump to call" 66 } 67} 68 69# Can we jump to the statement? Do we stop there? 70# 71gdb_test "jump 21" \ 72 "Breakpoint \[0-9\]*, .*${srcfile}:21.*" \ 73 "jump to call" 74 75# If we disable the breakpoint at the function call, and then 76# if we jump to that statement, do we not stop there, but at 77# the following breakpoint? 78# 79gdb_test_no_output "disable $bp_on_call" "disable breakpoint on call" 80 81gdb_test "jump 21" "Breakpoint \[0-9\]*, .*${srcfile}:22.*" \ 82 "jump to call with disabled breakpoint" 83 84# Verify that GDB responds gracefully to the "jump" command without 85# an argument. 86# 87gdb_test "jump" "Argument required .starting address.*" \ 88 "jump without argument disallowed" 89 90 91# Verify that GDB responds gracefully to the "jump" command with 92# trailing junk. 93# 94gdb_test "jump 21 100" \ 95 "malformed linespec error: unexpected number, \"100\"" \ 96 "jump with trailing argument junk" 97 98 99# Verify that GDB responds gracefully to a request to jump out of 100# the current function. (Note that this will very likely cause the 101# inferior to die. Be prepared to rerun the inferior, if further 102# testing is desired.) 103# 104# Try it both ways: confirming and not confirming the jump. 105# 106 107gdb_test "jump 12" \ 108 "Not confirmed.*" \ 109 "aborted jump out of current function" \ 110 "Line 12 is not in `main'. Jump anyway.*y or n. $" \ 111 "n" 112 113gdb_test "jump 12" \ 114 "Continuing at.*" \ 115 "jump out of current function" \ 116 "Line 12 is not in `main'. Jump anyway.*y or n. $" \ 117 "y" 118 119gdb_exit 120return 0 121