# This testcase is part of GDB, the GNU debugger.

# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009,
# 2010 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 3 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, see <http://www.gnu.org/licenses/>.

# use this to debug:
#
#log_user 1

# ending-run.exp -- Expect script to test ending a test run in gdb

if { [prepare_for_testing ending-run.exp ending-run] } {
    return -1
}
remote_exec build "rm -f core"

# CHFts23469: Test that you can "clear" a bp set at
# a line _before_ the routine (which will default to the
# first line in the routine, which turns out to correspond
# to the prolog--that's another bug...)
#

gdb_test "b ending-run.c:1" ".*Breakpoint.*ending-run.c, line 1.*" \
	"bpt at line before routine"

gdb_test "b ending-run.c:14" \
	".*Note.*also.*Breakpoint 2.*ending-run.c, line 14.*" \
	"b ending-run.c:14, one"

# Set up to go to the next-to-last line of the program
#
gdb_test "b ending-run.c:31" ".*Breakpoint 3.*ending-run.c, line 31.*"

# Expect to hit the bp at line "1", but symbolize this
# as line "13".  Then try to clear it--this should work.
#
gdb_run_cmd
gdb_test "" ".*Breakpoint.*1.*callee.*14.*" "run"

gdb_test "cle" ".*Deleted breakpoints 1 2.*" "clear worked"
gdb_test_multiple "i b" "cleared bp at line before routine" {
    -re ".* breakpoint .* breakpoint .*$gdb_prompt $" { 
	fail "cleared bp at line before routine" 
    }
    -re ".*3.*main.*31.*$gdb_prompt $" { 
	pass "cleared bp at line before routine" 
    }
}

# Test some other "clear" combinations
#
gdb_test "b ending-run.c:1" ".*Breakpoint.*4.*"
gdb_test "b ending-run.c:14" ".*Note.*also.*Breakpoint.*5.*" "b ending-run.c:14, two"
gdb_test "cle ending-run.c:14" \
	".*Deleted breakpoint 5.*" "Cleared 2 by line"

gdb_test_multiple "info line ending-run.c:14" "" {
    -re ".*address (0x\[0-9a-fA-F]*).*$gdb_prompt $" {
        set line_nine $expect_out(1,string)
        gdb_test "b ending-run.c:14" ".*Breakpoint 6.*ending-run.c, line 14.*"
        gdb_test "b *$line_nine" ".*Note.*also.*Breakpoint 7.*" "Breakpoint 7 at *ending-run.c:14"
        gdb_test "cle" ".*Deleted breakpoints 4 6 7.*" "Clear 2 by default"
    }
    -re ".*$gdb_prompt $" {
        fail "need to fix test for new compile outcome"
    }
}

gdb_test_multiple "i b" "all set to continue" {
    -re ".* breakpoint .* breakpoint .*$gdb_prompt $" {
        fail "all set to continue (didn't clear bps)" 
    }
    -re ".*3.*main.*31.*$gdb_prompt $" {
        pass "all set to continue"
    }
    -re ".*$gdb_prompt $" {
        fail "all set to continue (missing bp at end)"
    }
}


# See if we can step out with control.  The "1 2 3" stuff
# is output from the program.
#
if ![gdb_skip_stdio_test "cont"] {
    gdb_test "cont" ".*1 2 7 14 23 34 47 62 79.*Breakpoint.*31.*"
} else {
    gdb_test "cont" ".*Breakpoint.*31.*"
}

if ![gdb_skip_stdio_test "Step to return"] {
    gdb_test "next" ".*Goodbye!.*32.*" \
	    "Step to return"
} else {
    gdb_test "next" ".*" ""
}

set old_timeout $timeout
set timeout 50
set program_exited 0
set nexted 0

gdb_test_multiple "next" "step out of main" {
    -re "33\[ \t\]+\}.*$gdb_prompt $" {
	# sometimes we stop at the closing brace, if so, do another next
	if { $nexted } {
	    fail "step out of main"
	} else {
	    set nexted 1
	    send_gdb "next\n"
	    exp_continue
	}
    }
    -re ".*Unable to find return pc for this frame.*$gdb_prompt $" {
	fail "step out of main"
	gdb_test "n" ".*" ""
    }
    -re ".*in.*start.*$gdb_prompt $" { 
	pass "step out of main"
    }
    -re ".*in.*bsp_trap.*$gdb_prompt $" { 
	pass "step out of main"
    }
    -re ".*in.*init.*$gdb_prompt $" { 
	# This is what happens on sparc64-elf ultra.
	pass "step out of main"
    }
    -re ".*in.*dll_crt0_1.*$gdb_prompt $" {
	# This is what happens on Cygwin.
	pass "step out of main"
    }
    -re ".*WinMain.*$gdb_prompt $" {
	# This is what happens on mingw32ce.
	pass "step out of main"
    }
    -re ".*Program exited normally.*$gdb_prompt $" {
	# This is what happens on Linux i86 (and I would expect others)
	set program_exited 1
	pass "step out of main"
    }
    -re ".*in .nope ().*$gdb_prompt $" {
	# This is what happens on Solaris currently -sts 1999-08-25
	pass "step out of main"
    }
    -re ".*in _int_reset ().*$gdb_prompt $" {
	# This is what happens on Sanyo XStormy16
	pass "step out of main"
    }
    -re ".*init ().*$gdb_prompt $" {
	# This is what happens on many Mips targets
	pass "step out of main"
    }
    -re ".*in ..change.mode ().*$gdb_prompt $" {
	# This is what happens on ARM in thumb mode -fn 2000-02-01
	pass "step out of main"
    }
    -re ".*__rt_entry.* ().*$gdb_prompt $" {
	# This is what happens on the ARM RVDS runtime
	pass "step out of main"
    }
    -re ".*in.*\\\$START\\\$.*from.*dld.sl.*$gdb_prompt $" { 
	pass "step out of main"
    }
    -re ".*in __wrap__?main ().*$gdb_prompt $" {
	pass "step out of main"
    }
    -re "__setup_argv_for_main (.*).*$gdb_prompt $" {
	# On sh, another wrapper function (start_l) exists, so
	# another `next' is necessary.
	gdb_test "next" ".*in start_l ().*" "step out of main"
    }
    -re "E32Main (.*).*$gdb_prompt $" {
	# On SymbianOS there's a different function which calls main.
	pass "step out of main"
    }
    -re ".*in.*currently asm.*$gdb_prompt $" { 
        pass "step out of main"
    }
    -re "_*start\[0-9\]* \\(\[^)\]*\\).*$gdb_prompt $" {
        pass "step out of main"
    }
    -re ".*Program received signal SIGTRAP.*$gdb_prompt $" {
        pass "step out of main"
    }
}

# When we're talking to a program running on a real stand-alone board,
# every BSP's exit function behaves differently, so there's no single
# way to tell whether we've exited gracefully or not.  So don't run
# these tests when use_gdb_stub is set, or when we're running under Cygmon.
set program_exited_normally 0
set program_not_exited 0
set program_in_exit 0
if {! [target_info exists use_gdb_stub]
    && (! [target_info exists use_cygmon] || ! [target_info use_cygmon])} {
    global program_exited;
    if {[eval expr $program_exited == 0]} {
	gdb_test_multiple "n" "step to end of run" {
	    -re "Program exited normally.*$gdb_prompt $" {
		# If we actually have debug info for the start function,
		# then we won't get the "Single-stepping until function
		# exit" message.
		pass "step to end of run"
		set program_exited_normally 1
	    }
	    -re "Single.*EXIT code 0\r\n.*Program exited normally.*$gdb_prompt $" {
		pass "step to end of run (status wrapper)"
		set program_exited_normally 1
	    }
	    -re "Single.*EXIT code 0\r\n.*$gdb_prompt $" {
		pass "step to end of run (status wrapper)"
	    }
	    -re ".*Single.*Program exited.*$gdb_prompt $" {
		pass "step to end of run"
		set program_exited_normally 1
	    }
	    -re ".*Single.*in exit.*from.*dld.sl.*$gdb_prompt $" {
		pass "step to end of run" 
		set program_in_exit 1
	    }
	    -re ".*Single.*_int_reset.*$gdb_prompt $" {
	        pass "step to end of run"
		if {![istarget "xstormy16-*-*"]} {
		    set program_exited_normally 1
		}
	    }
	}   
    }

    if {$program_in_exit} {
	if {[gdb_test "c" ".*" "continue after exit"] == 0} {
	    set program_exited_normally 1
	}
    } else {
	unsupported "continue after exit"
    }

    if {$program_exited_normally} {
        gdb_test "n" ".*The program is not being run.*" "don't step after run"
    } elseif {$program_not_exited} {
	unresolved "don't step after run"
    } else {
	unsupported "don't step after run"
    }

    set exec_output [remote_exec host "ls core"]

    if [ regexp "core not found" $exec_output]  {
	pass "No core dumped on quit"
    } else {
	if [ regexp "No such file or directory" $exec_output] {
	    pass "ls: core (No core dumped on quit)"
	} else {
	    remote_exec build "rm -f core"
	    fail "ls: core (Core dumped on quit)"
	}
    }
}

set timeout $old_timeout

#remote_exec build "rm -f ${binfile}"
return 0




