1# Copyright 2008-2023 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15load_lib dwarf.exp 16 17# This test can only be run on targets which support DWARF-2 and use gas. 18if {![dwarf2_support]} { 19 return 0 20} 21 22standard_testfile .S -func.c -main.c 23lassign [function_range func_nofb \ 24 "${srcdir}/${subdir}/${srcfile2} ${srcdir}/${subdir}/${srcfile3}"] \ 25 func_nofb_start func_nofb_len 26lassign [function_range func_loopfb \ 27 "${srcdir}/${subdir}/${srcfile2} ${srcdir}/${subdir}/${srcfile3}"] \ 28 func_loopfb_start func_loopfb_len 29 30set flags \ 31 [list \ 32 "additional_flags=\"-DFUNC_NOFB_START=$func_nofb_start\"" \ 33 "additional_flags=\"-DFUNC_NOFB_END=$func_nofb_start + $func_nofb_len\"" \ 34 "additional_flags=\"-DFUNC_LOOPFB_START=$func_loopfb_start\"" \ 35 "additional_flags=\"-DFUNC_LOOPFB_END=$func_loopfb_start + $func_loopfb_len\""] 36set executable ${testfile} 37 38if { [prepare_for_testing_full "failed to prepare" \ 39 [list $testfile {} \ 40 $srcfile [concat $flags {nodebug}] \ 41 $srcfile2 {nodebug} \ 42 $srcfile3 {debug}]] == -1 } { 43 return -1 44} 45 46# First try referencing DW_AT_frame_base which is not defined. 47if [runto func_nofb] { 48 gdb_test "p func_nofb_var" {Could not find the frame base for "func_nofb".} "func_nofb print" 49 gdb_test "bt full" " in main .* main_var = 1" "func_nofb backtrace" 50} 51 52# GDB could have crashed. 53clean_restart $executable 54 55# And now try referencing DW_AT_frame_base defined using a self-reference 56# (DW_OP_fbreg). 57if [runto func_loopfb] { 58 gdb_test "p func_loopfb_var" "DWARF-2 expression error: Loop detected .*" "func_loopfb print" 59 gdb_test "bt full" " in main .* main_var = 1" "func_loopfb backtrace" 60} 61