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