# Copyright (C) 2010-2012 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.*"
