# Copyright 2026 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 . # Test GDB against an FDE in the .debug_frame section that doesn't set a rule # for the CFA. load_lib dwarf.exp require dwarf2_support is_x86_64_m64_target standard_testfile main.c -dw.S set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { get_func_info main cu { version 5 } { compile_unit { {name debug-frame-no-cfa.c} {comp_dir /tmp} } { declare_labels int_type_label int_type_label: base_type { {name int} {encoding @DW_ATE_signed} {byte_size 4 DW_FORM_sdata} } subprogram { {MACRO_AT_func { main }} {DW_AT_frame_base { DW_OP_call_frame_cfa } SPECIAL_expr} } { DW_TAG_variable { {name x} {type :$int_type_label} {location { DW_OP_fbreg 0 } SPECIAL_expr} } } } } frame { declare_labels cie_label cie_label: CIE { return_address_register 16 } {} FDE $cie_label $main_start $main_len {} { } } } if { [prepare_for_testing "failed to prepare" ${testfile} \ [list $srcfile $asm_file] {nodebug}] } { return } if { ![runto_main] } { return } # This would cause an internal error in dwarf2_frame_cache. # # Make sure to match a single line, so that the test fails if an error # about stack unwind is printed after frame 0. gdb_test "backtrace" "^#0 \[^\r\n\]* main \[^\r\n\]*" # Translating the location of "x" to an agent expression requires # evaluating its frame base, which uses DW_OP_call_frame_cfa. This would # cause an internal error in dwarf2_fetch_cfa_info. gdb_test "maint agent x" \ "Could not compute CFA; needed to translate this expression"