aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.dwarf2/dw2-line-number-zero.exp
blob: 68696f0b634771ca8473fbbcfcd4d3e515981f88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Copyright 2020-2023 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.
require dwarf2_support

# The .c files use __attribute__.
require is_c_compiler_gcc

standard_testfile .c -dw.S

set asm_file [standard_output_file $srcfile2]
Dwarf::assemble $asm_file {
    declare_labels Llines
    global srcdir subdir srcfile

    cu {} {
	compile_unit {
	    {language @DW_LANG_C}
	    {name dw2-line-number-zero.c}
	    {stmt_list $Llines DW_FORM_sec_offset}
	} {
	    subprogram {
		{external 1 flag}
		{MACRO_AT_func {main}}
	    }
	    subprogram {
		{external 1 flag}
		{MACRO_AT_func {bar1}}
	    }
	    subprogram {
		{external 1 flag}
		{MACRO_AT_func {bar2}}
	    }
	}
    }

    lines {version 2} Llines {
	include_dir "${srcdir}/${subdir}"
	file_name "$srcfile" 1

	program {
	    DW_LNE_set_address bar1_label
	    line 27
	    DW_LNS_copy

	    DW_LNE_set_address bar1_label_2
	    line 29
	    DW_LNS_copy

	    DW_LNE_set_address bar1_label_3
	    line 0
	    DW_LNS_copy

	    DW_LNE_set_address bar1_label_4
	    line 33
	    DW_LNS_copy

	    DW_LNE_set_address bar1_label_5
	    DW_LNE_end_sequence


	    DW_LNE_set_address bar2_label
	    line 41
	    DW_LNS_copy

	    DW_LNE_set_address bar2_label_2
	    line 43
	    DW_LNS_copy

	    DW_LNE_set_address bar2_label_3
	    line 0
	    DW_LNS_negate_stmt
	    DW_LNS_copy
	    DW_LNS_negate_stmt

	    DW_LNE_set_address bar2_label_4
	    line 47
	    DW_LNS_copy

	    DW_LNE_set_address bar2_label_5
	    DW_LNE_end_sequence
	}
    }
}

if { [prepare_for_testing "failed to prepare" ${testfile} \
	  [list $srcfile $asm_file] {nodebug}] } {
    return -1
}

if ![runto_main] {
    return -1
}

gdb_breakpoint "$srcfile:27"
gdb_continue_to_breakpoint "bar1" "\[^\r\n\]*:27\r\n.*"

gdb_test "n" "foo \\(2\\);" "bar1, 1st next"
gdb_test "n" "foo \\(4\\);" "bar1, 2nd next"

gdb_breakpoint "$srcfile:41"
gdb_continue_to_breakpoint "bar2" "\[^\r\n\]*:41\r\n.*"

gdb_test "n" "foo \\(2\\);" "bar2, 1st next"
gdb_test "n" "foo \\(4\\);" "bar2, 2nd next"

if ![runto_main] {
    return -1
}

gdb_breakpoint "bar1_label_3"
setup_kfail "gdb/nnnnn" *-*-*
gdb_continue_to_breakpoint "bar1_label_3" "bar1 \\(\\)"

gdb_breakpoint "bar2_label_3"
setup_kfail "gdb/nnnnn" *-*-*
gdb_continue_to_breakpoint "bar2_label_3" "bar2 \\(\\)"