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

# Copyright 1997-2021 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 ".*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




