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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
|
#! /bin/sh
# Copyright (C) 2013 Red Hat, Inc.
# This file is part of elfutils.
#
# This file 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.
#
# elfutils 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/>.
. $srcdir/test-subr.sh
# Tests readelf --debug-dump=line and --debug-dump=decodedline
# See run-readelf-aranges for testfiles.
testfiles testfilefoobarbaz
testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfilefoobarbaz <<EOF
DWARF section [30] '.debug_line' at offset 0x15f6:
Table at offset 0:
Length: 83
DWARF version: 2
Prologue length: 43
Minimum instruction length: 1
Maximum operations per instruction: 1
Initial value if 'is_stmt': 1
Line base: -5
Line range: 14
Opcode base: 13
Opcodes:
[ 1] 0 arguments
[ 2] 1 argument
[ 3] 1 argument
[ 4] 1 argument
[ 5] 1 argument
[ 6] 0 arguments
[ 7] 0 arguments
[ 8] 0 arguments
[ 9] 1 argument
[10] 0 arguments
[11] 0 arguments
[12] 1 argument
Directory table:
File name table:
Entry Dir Time Size Name
1 0 0 0 foo.c
2 0 0 0 foobarbaz.h
Line number statements:
[ 35] extended opcode 2: set address to 0x80482f0 <main>
[ 3c] advance line by constant 15 to 16
[ 3e] copy
[ 3f] special opcode 159: address+10 = 0x80482fa <main+0xa>, line+1 = 17
[ 40] special opcode 117: address+7 = 0x8048301 <main+0x11>, line+1 = 18
[ 41] advance line by constant -9 to 9
[ 43] special opcode 200: address+13 = 0x804830e <main+0x1e>, line+0 = 9
[ 44] special opcode 48: address+2 = 0x8048310 <main+0x20>, line+2 = 11
[ 45] special opcode 58: address+3 = 0x8048313 <main+0x23>, line-2 = 9
[ 46] special opcode 48: address+2 = 0x8048315 <main+0x25>, line+2 = 11
[ 47] special opcode 44: address+2 = 0x8048317 <main+0x27>, line-2 = 9
[ 48] advance line by constant 13 to 22
[ 4a] special opcode 46: address+2 = 0x8048319 <main+0x29>, line+0 = 22
[ 4b] advance line by constant -13 to 9
[ 4d] special opcode 60: address+3 = 0x804831c <main+0x2c>, line+0 = 9
[ 4e] advance line by constant 12 to 21
[ 50] special opcode 60: address+3 = 0x804831f <main+0x2f>, line+0 = 21
[ 51] special opcode 61: address+3 = 0x8048322 <main+0x32>, line+1 = 22
[ 52] advance address by 2 to 0x8048324
[ 54] extended opcode 1: end of sequence
Table at offset 87:
Length: 72
DWARF version: 2
Prologue length: 28
Minimum instruction length: 1
Maximum operations per instruction: 1
Initial value if 'is_stmt': 1
Line base: -5
Line range: 14
Opcode base: 13
Opcodes:
[ 1] 0 arguments
[ 2] 1 argument
[ 3] 1 argument
[ 4] 1 argument
[ 5] 1 argument
[ 6] 0 arguments
[ 7] 0 arguments
[ 8] 0 arguments
[ 9] 1 argument
[10] 0 arguments
[11] 0 arguments
[12] 1 argument
Directory table:
File name table:
Entry Dir Time Size Name
1 0 0 0 bar.c
Line number statements:
[ 7d] extended opcode 2: set address to 0x8048330 <nobar>
[ 84] advance line by constant 12 to 13
[ 86] copy
[ 87] special opcode 19: address+0 = 0x8048330 <nobar>, line+1 = 14
[ 88] advance address by 11 to 0x804833b
[ 8a] extended opcode 1: end of sequence
[ 8d] extended opcode 2: set address to 0x8048440 <bar>
[ 94] advance line by constant 18 to 19
[ 96] copy
[ 97] special opcode 19: address+0 = 0x8048440 <bar>, line+1 = 20
[ 98] advance line by constant -12 to 8
[ 9a] special opcode 200: address+13 = 0x804844d <bar+0xd>, line+0 = 8
[ 9b] advance line by constant 14 to 22
[ 9d] special opcode 74: address+4 = 0x8048451 <bar+0x11>, line+0 = 22
[ 9e] advance address by 1 to 0x8048452
[ a0] extended opcode 1: end of sequence
Table at offset 163:
Length: 106
DWARF version: 2
Prologue length: 43
Minimum instruction length: 1
Maximum operations per instruction: 1
Initial value if 'is_stmt': 1
Line base: -5
Line range: 14
Opcode base: 13
Opcodes:
[ 1] 0 arguments
[ 2] 1 argument
[ 3] 1 argument
[ 4] 1 argument
[ 5] 1 argument
[ 6] 0 arguments
[ 7] 0 arguments
[ 8] 0 arguments
[ 9] 1 argument
[10] 0 arguments
[11] 0 arguments
[12] 1 argument
Directory table:
File name table:
Entry Dir Time Size Name
1 0 0 0 baz.c
2 0 0 0 foobarbaz.h
Line number statements:
[ d8] extended opcode 2: set address to 0x8048340 <nobaz>
[ df] advance line by constant 12 to 13
[ e1] copy
[ e2] special opcode 19: address+0 = 0x8048340 <nobaz>, line+1 = 14
[ e3] advance address by 11 to 0x804834b
[ e5] extended opcode 1: end of sequence
[ e8] extended opcode 2: set address to 0x8048460 <baz>
[ ef] advance line by constant 18 to 19
[ f1] copy
[ f2] special opcode 74: address+4 = 0x8048464 <baz+0x4>, line+0 = 19
[ f3] special opcode 75: address+4 = 0x8048468 <baz+0x8>, line+1 = 20
[ f4] extended opcode 4: set discriminator to 1
[ f8] special opcode 78: address+4 = 0x804846c <baz+0xc>, line+4 = 24
[ f9] special opcode 187: address+12 = 0x8048478 <baz+0x18>, line+1 = 25
[ fa] special opcode 87: address+5 = 0x804847d <baz+0x1d>, line-1 = 24
[ fb] special opcode 61: address+3 = 0x8048480 <baz+0x20>, line+1 = 25
[ fc] special opcode 101: address+6 = 0x8048486 <baz+0x26>, line-1 = 24
[ fd] special opcode 61: address+3 = 0x8048489 <baz+0x29>, line+1 = 25
[ fe] special opcode 87: address+5 = 0x804848e <baz+0x2e>, line-1 = 24
[ ff] advance line by constant -16 to 8
[ 101] special opcode 46: address+2 = 0x8048490 <baz+0x30>, line+0 = 8
[ 102] advance line by constant 20 to 28
[ 104] special opcode 186: address+12 = 0x804849c <baz+0x3c>, line+0 = 28
[ 105] advance line by constant -20 to 8
[ 107] special opcode 88: address+5 = 0x80484a1 <baz+0x41>, line+0 = 8
[ 108] advance line by constant 13 to 21
[ 10a] advance address by constant 17 to 0x80484b2 <baz+0x52>
[ 10b] special opcode 32: address+1 = 0x80484b3 <baz+0x53>, line+0 = 21
[ 10c] advance address by 9 to 0x80484bc
[ 10e] extended opcode 1: end of sequence
EOF
testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedline testfilefoobarbaz <<\EOF
DWARF section [30] '.debug_line' at offset 0x15f6:
CU [b] foo.c
line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
/home/mark/src/tests/foobarbaz/foo.c (mtime: 0, length: 0)
16:0 S 0 0 0 0x080482f0 <main>
17:0 S 0 0 0 0x080482fa <main+0xa>
18:0 S 0 0 0 0x08048301 <main+0x11>
9:0 S 0 0 0 0x0804830e <main+0x1e>
11:0 S 0 0 0 0x08048310 <main+0x20>
9:0 S 0 0 0 0x08048313 <main+0x23>
11:0 S 0 0 0 0x08048315 <main+0x25>
9:0 S 0 0 0 0x08048317 <main+0x27>
22:0 S 0 0 0 0x08048319 <main+0x29>
9:0 S 0 0 0 0x0804831c <main+0x2c>
21:0 S 0 0 0 0x0804831f <main+0x2f>
22:0 S 0 0 0 0x08048322 <main+0x32>
22:0 S * 0 0 0 0x08048323 <main+0x33>
CU [141] bar.c
line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
/home/mark/src/tests/foobarbaz/bar.c (mtime: 0, length: 0)
13:0 S 0 0 0 0x08048330 <nobar>
14:0 S 0 0 0 0x08048330 <nobar>
14:0 S * 0 0 0 0x0804833a <nobar+0xa>
19:0 S 0 0 0 0x08048440 <bar>
20:0 S 0 0 0 0x08048440 <bar>
8:0 S 0 0 0 0x0804844d <bar+0xd>
22:0 S 0 0 0 0x08048451 <bar+0x11>
22:0 S * 0 0 0 0x08048451 <bar+0x11>
CU [1dc] baz.c
line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
/home/mark/src/tests/foobarbaz/baz.c (mtime: 0, length: 0)
13:0 S 0 0 0 0x08048340 <nobaz>
14:0 S 0 0 0 0x08048340 <nobaz>
14:0 S * 0 0 0 0x0804834a <nobaz+0xa>
19:0 S 0 0 0 0x08048460 <baz>
19:0 S 0 0 0 0x08048464 <baz+0x4>
20:0 S 0 0 0 0x08048468 <baz+0x8>
24:0 S 1 0 0 0x0804846c <baz+0xc>
25:0 S 0 0 0 0x08048478 <baz+0x18>
24:0 S 0 0 0 0x0804847d <baz+0x1d>
25:0 S 0 0 0 0x08048480 <baz+0x20>
24:0 S 0 0 0 0x08048486 <baz+0x26>
25:0 S 0 0 0 0x08048489 <baz+0x29>
24:0 S 0 0 0 0x0804848e <baz+0x2e>
8:0 S 0 0 0 0x08048490 <baz+0x30>
28:0 S 0 0 0 0x0804849c <baz+0x3c>
8:0 S 0 0 0 0x080484a1 <baz+0x41>
21:0 S 0 0 0 0x080484b3 <baz+0x53>
21:0 S * 0 0 0 0x080484bb <baz+0x5b>
EOF
exit 0
|