1 # Copyright 2020-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/>. 15 load_lib dwarf.exp 16 17 # This test can only be run on targets which support DWARF-2 and use gas. 18 if {![dwarf2_support]} { 19 verbose "Skipping $gdb_test_file_name." 20 return 0 21 } 22 23 # The .c files use __attribute__. 24 if ![is_c_compiler_gcc] { 25 verbose "Skipping $gdb_test_file_name." 26 return 0 27 } 28 29 standard_testfile .c -dw.S 30 31 set asm_file [standard_output_file $srcfile2] 32 Dwarf::assemble $asm_file { 33 declare_labels Llines 34 global srcdir subdir srcfile 35 36 cu {} { 37 compile_unit { 38 {language @DW_LANG_C} 39 {name dw2-line-number-zero.c} 40 {stmt_list $Llines DW_FORM_sec_offset} 41 } { 42 subprogram { 43 {external 1 flag} 44 {MACRO_AT_func {main}} 45 } 46 subprogram { 47 {external 1 flag} 48 {MACRO_AT_func {bar1}} 49 } 50 subprogram { 51 {external 1 flag} 52 {MACRO_AT_func {bar2}} 53 } 54 } 55 } 56 57 lines {version 2} Llines { 58 include_dir "${srcdir}/${subdir}" 59 file_name "$srcfile" 1 60 61 program { 62 DW_LNE_set_address bar1_label 63 line 27 64 DW_LNS_copy 65 66 DW_LNE_set_address bar1_label_2 67 line 29 68 DW_LNS_copy 69 70 DW_LNE_set_address bar1_label_3 71 line 0 72 DW_LNS_copy 73 74 DW_LNE_set_address bar1_label_4 75 line 33 76 DW_LNS_copy 77 78 DW_LNE_set_address bar1_label_5 79 DW_LNE_end_sequence 80 81 82 DW_LNE_set_address bar2_label 83 line 41 84 DW_LNS_copy 85 86 DW_LNE_set_address bar2_label_2 87 line 43 88 DW_LNS_copy 89 90 DW_LNE_set_address bar2_label_3 91 line 0 92 DW_LNS_negate_stmt 93 DW_LNS_copy 94 DW_LNS_negate_stmt 95 96 DW_LNE_set_address bar2_label_4 97 line 47 98 DW_LNS_copy 99 100 DW_LNE_set_address bar2_label_5 101 DW_LNE_end_sequence 102 } 103 } 104 } 105 106 if { [prepare_for_testing "failed to prepare" ${testfile} \ 107 [list $srcfile $asm_file] {nodebug}] } { 108 return -1 109 } 110 111 if ![runto_main] { 112 return -1 113 } 114 115 gdb_breakpoint "$srcfile:27" 116 gdb_continue_to_breakpoint "bar1" "\[^\r\n\]*:27\r\n.*" 117 118 gdb_test "n" "foo \\(2\\);" "bar1, 1st next" 119 gdb_test "n" "foo \\(4\\);" "bar1, 2nd next" 120 121 gdb_breakpoint "$srcfile:41" 122 gdb_continue_to_breakpoint "bar2" "\[^\r\n\]*:41\r\n.*" 123 124 gdb_test "n" "foo \\(2\\);" "bar2, 1st next" 125 gdb_test "n" "foo \\(4\\);" "bar2, 2nd next" 126 127 if ![runto_main] { 128 return -1 129 } 130 131 gdb_breakpoint "bar1_label_3" 132 setup_kfail "gdb/nnnnn" *-*-* 133 gdb_continue_to_breakpoint "bar1_label_3" "bar1 \\(\\)" 134 135 gdb_breakpoint "bar2_label_3" 136 setup_kfail "gdb/nnnnn" *-*-* 137 gdb_continue_to_breakpoint "bar2_label_3" "bar2 \\(\\)" 138