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

# Copyright 1997-2020 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

standard_testfile

if { [prepare_for_testing "failed to prepare" $testfile] } {
    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"

set break1_line [gdb_get_line_number "-break1-"]
gdb_test "b ending-run.c:$break1_line" \
	".*Note.*also.*Breakpoint 2.*ending-run.c, line $break1_line.*" \
	"b ending-run.c:$break1_line, one"

# Set up to go to the next-to-last line of the program
#
set break2_line [gdb_get_line_number "-break2-"]
gdb_test "b ending-run.c:$break2_line" ".*Breakpoint 3.*ending-run.c, line $break2_line.*"

# 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.*$break1_line.*" "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.*$break2_line.*$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:$break1_line" ".*Note.*also.*Breakpoint.*5.*" "b ending-run.c:$break1_line, two"
gdb_test "cle ending-run.c:$break1_line" \
	".*Deleted breakpoints 4 5.*" "Cleared 2 by line"

gdb_test_multiple "info line ending-run.c:$break1_line" "" {
    -re ".*address (0x\[0-9a-fA-F]*).*$gdb_prompt $" {
        set line_nine $expect_out(1,string)
        gdb_test "b ending-run.c:$break1_line" ".*Breakpoint 6.*ending-run.c, line $break1_line.*"
        gdb_test "b *$line_nine" ".*Note.*also.*Breakpoint 7.*" "breakpoint 7 at *ending-run.c:$break1_line"
        gdb_test "cle" ".*Deleted breakpoints 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.*$break2_line.*$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_stdio "cont" \
	"1 2 7 14 23 34 47 62 79" \
	"Breakpoint.*$break2_line.*"
} else {
    gdb_test "cont" ".*Breakpoint.*$break2_line.*"
}

if ![gdb_skip_stdio_test "Step to return"] {
    gdb_test_stdio "next" \
	"Goodbye!" \
	"[expr {$break2_line + 1}].*" \
	"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 "[expr {$break2_line + 2}]\[ \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 ".*$inferior_exited_re 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"
    }
    -re ".*in.*__uClibc_main.*$gdb_prompt $" {
	# This is what happens on system using uClibc.
	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 {!$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 "$inferior_exited_re 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.*$inferior_exited_re 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.*$inferior_exited_re.*$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




