# Copyright (C) 2010, 2011 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.

# 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.

set testfile break-entry

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

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

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.*"
