# Copyright (C) 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/>.

# Test inferior can stop at its very first instruction, usually "_start".
# Dynamic executables have first instruction in ld.so.

set testfile break-entry
if { [prepare_for_testing ${testfile}.exp ${testfile} start.c {additional_flags=-static}] } {
    return -1
}

# If we're using a stub, we'll already be debugging a live program and
# stopped at the entry point when we connect, and so the runto below
# will issue a "continue", which always skips any breakpoint at PC.
# When testing with a native target (or some other target that supports
# "run"), runto will do a "run", which first creates the process,
# leaving the PC at the entry point, just like the stub case, but then
# continues the process with the equivalent of "jump *$PC", which
# triggers any breakpoint at $PC.  The latter is what we want to test.

if [target_info exists use_gdb_stub] {
    untested ${testfile}.exp
    return
}

set test "info files"
set entry ""
gdb_test_multiple $test $test {
    -re "\r\n\[\t \]*Entry point:\[\t \]*(0x\[0-9a-f\]+)\r\n.*$gdb_prompt $" {
	set entry $expect_out(1,string)
	pass $test
    }
}
if {$entry == ""} {
    untested ${testfile}.exp
    return
}

if {[istarget powerpc64-*] && [is_lp64_target]} {
    set test "convert entry point"
    gdb_test_multiple "p *(void(*)(void) *) $entry" $test {
	-re " =( \\(\[^0-9\]*\\))? (0x\[0-9a-f\]+)( <.*)?\r\n$gdb_prompt $" {
	    set entry $expect_out(2,string)
	    pass $test
	}
    }
}

if ![runto "*$entry"] {
    return
}
gdb_test {p/x $pc} " = $entry"

gdb_breakpoint "main"
gdb_continue_to_breakpoint "main" "\\.?main.*"
