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

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 ![runto "*$entry"] {
    return
}
gdb_test {p/x $pc} " = $entry"

gdb_breakpoint "main"
gdb_continue_to_breakpoint "main" "main.*"
