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

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

set testfile "dw2-ref-missing-frame"
set srcsfile ${testfile}.S
set objsfile ${objdir}/${subdir}/${testfile}.o
set srcfuncfile ${testfile}-func.c
set objfuncfile ${objdir}/${subdir}/${testfile}-func.o
set srcmainfile ${testfile}-main.c
set objmainfile ${objdir}/${subdir}/${testfile}-main.o
set executable ${testfile}
set binfile ${objdir}/${subdir}/${executable}

if { [gdb_compile "${srcdir}/${subdir}/${srcsfile}" $objsfile object {}] != ""
     || [gdb_compile "${srcdir}/${subdir}/${srcfuncfile}" $objfuncfile object {}] != ""
     || [gdb_compile "${srcdir}/${subdir}/${srcmainfile}" $objmainfile object {debug}] != ""
     || [gdb_compile "$objsfile $objfuncfile $objmainfile" $binfile executable {}] != "" } {
    return -1
}

clean_restart $executable

# First try referencing DW_AT_frame_base which is not defined.
if [runto func_nofb] {
    gdb_test "p func_nofb_var" {Could not find the frame base for "func_nofb".} "func_nofb print"
    gdb_test "bt full" " in main .* main_var = 1" "func_nofb backtrace"
}

# GDB could have crashed.
clean_restart $executable

# And now try referencing DW_AT_frame_base defined using a self-reference
# (DW_OP_fbreg).
if [runto func_loopfb] {
    gdb_test "p func_loopfb_var" "DWARF-2 expression error: Loop detected .*" "func_loopfb print"
    gdb_test "bt full" " in main .* main_var = 1" "func_loopfb backtrace"
}
