# Copyright 2013-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/>.
load_lib dwarf.exp

standard_testfile .S

# This test can only be run on targets which support DWARF-2 and use gas.
if ![dwarf2_support] {
    return 0
}

# This test can only be run on x86-64 targets.
if {![istarget x86_64-*] || ![is_lp64_target]} {
    return 0
}

if {[prepare_for_testing "failed to prepare" "$testfile" $srcfile {nodebug nopie}]} {
    return -1
}

if ![runto "stop_frame"] {
    return -1
}

# stop_frame should be the outermost frame.

# Check that backtrace shows only frame #0.
gdb_test "bt" "#0\[ \]\+stop_frame \[^\r\n\]\+"

# And that "up" doesn't work.
gdb_test "up" \
    "Initial frame selected; you cannot go up\\." \
    "up refuses to go up"

# "info frame" unwinds the PC for "saved ... = ".  Make sure that
# doesn't cause an error, and shows "<not saved>".
gdb_test "info frame" [multi_line \
    "Stack level 0, frame at $hex\:" \
    " rip = $hex in stop_frame \\(dw2-undefined-ret-addr\\.c:22\\); saved rip = <not saved>" \
    " Outermost frame: outermost" \
    " source language c\\." \
    " Arglist at $hex, args\: " \
    " Locals at $hex, Previous frame's sp is $hex" \
    " Saved registers\:" \
    "  rbp at $hex.*" \
]
