# Copyright 2010-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/>.

standard_testfile .c

# If we're using a stub, breakpoints at the entry point will not trigger.
# See also the comment in break-entry.exp.

if [use_gdb_stub] {
    untested "skipping tests due to use_gdb_stub"
    return
}

# default_target_compile would otherwise add "-lm" making the testcase
# dependent on whether the system libraries are already prelinked.
# prelink: Could not set /lib64/libm-2.11.1.so owner or mode: Operation not permitted
set compile {
    gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-nostdlib}
}
set board [target_info name]
if [board_info $board exists mathlib] {
    set mathlib [board_info $dest mathlib]
    set_board_info mathlib ""
    set err [eval $compile]
    set_board_info mathlib $mathlib
} else {
    set_board_info mathlib ""
    set err [eval $compile]
    unset_board_info mathlib
}
if {$err != ""} {
    untested "failed to compile"
    return -1
}

clean_restart $binfile

gdb_breakpoint "*marker"
gdb_breakpoint "*_start"

gdb_run_cmd

# Breakpoint 2, Stopped due to shared library event
# _start () at ./gdb.base/nostdlib.c:20
gdb_test "" {Breakpoint [0-9]+, .*_start .*} "stop at run"

gdb_test "continue" {Breakpoint [0-9]+, marker .*} "continue to marker"
