1da0c48c4Sopenharmony_ci#! /bin/sh
2da0c48c4Sopenharmony_ci# Copyright (C) 2018 Red Hat, Inc.
3da0c48c4Sopenharmony_ci# This file is part of elfutils.
4da0c48c4Sopenharmony_ci#
5da0c48c4Sopenharmony_ci# This file is free software; you can redistribute it and/or modify
6da0c48c4Sopenharmony_ci# it under the terms of the GNU General Public License as published by
7da0c48c4Sopenharmony_ci# the Free Software Foundation; either version 3 of the License, or
8da0c48c4Sopenharmony_ci# (at your option) any later version.
9da0c48c4Sopenharmony_ci#
10da0c48c4Sopenharmony_ci# elfutils is distributed in the hope that it will be useful, but
11da0c48c4Sopenharmony_ci# WITHOUT ANY WARRANTY; without even the implied warranty of
12da0c48c4Sopenharmony_ci# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13da0c48c4Sopenharmony_ci# GNU General Public License for more details.
14da0c48c4Sopenharmony_ci#
15da0c48c4Sopenharmony_ci# You should have received a copy of the GNU General Public License
16da0c48c4Sopenharmony_ci# along with this program.  If not, see <http://www.gnu.org/licenses/>.
17da0c48c4Sopenharmony_ci
18da0c48c4Sopenharmony_ci. $srcdir/test-subr.sh
19da0c48c4Sopenharmony_ci
20da0c48c4Sopenharmony_ci# See run-readelf-loc.sh
21da0c48c4Sopenharmony_ci
22da0c48c4Sopenharmony_citestfiles testfileloc
23da0c48c4Sopenharmony_ci
24da0c48c4Sopenharmony_ci# Process values as offsets from base addresses and resolve to symbols.
25da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/readelf --debug-dump=ranges testfileloc<<\EOF
26da0c48c4Sopenharmony_ci
27da0c48c4Sopenharmony_ciDWARF section [34] '.debug_ranges' at offset 0xd94:
28da0c48c4Sopenharmony_ci
29da0c48c4Sopenharmony_ci CU [     b] base: 0x0000000000400480 <main>
30da0c48c4Sopenharmony_ci [     0] range 0, 2
31da0c48c4Sopenharmony_ci          0x0000000000400480 <main>..
32da0c48c4Sopenharmony_ci          0x0000000000400481 <main+0x1>
33da0c48c4Sopenharmony_ci          range 5, d
34da0c48c4Sopenharmony_ci          0x0000000000400485 <main+0x5>..
35da0c48c4Sopenharmony_ci          0x000000000040048c <main+0xc>
36da0c48c4Sopenharmony_ci
37da0c48c4Sopenharmony_ci CU [    e0] base: 0x00000000004004a0 <say>
38da0c48c4Sopenharmony_ci [    30] range d, f
39da0c48c4Sopenharmony_ci          0x00000000004004ad <say+0xd>..
40da0c48c4Sopenharmony_ci          0x00000000004004ae <say+0xe>
41da0c48c4Sopenharmony_ci          range 12, 1a
42da0c48c4Sopenharmony_ci          0x00000000004004b2 <say+0x12>..
43da0c48c4Sopenharmony_ci          0x00000000004004b9 <say+0x19>
44da0c48c4Sopenharmony_ciEOF
45da0c48c4Sopenharmony_ci
46da0c48c4Sopenharmony_ci# Don't resolve addresses to symbols.
47da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/readelf -N --debug-dump=ranges testfileloc<<\EOF
48da0c48c4Sopenharmony_ci
49da0c48c4Sopenharmony_ciDWARF section [34] '.debug_ranges' at offset 0xd94:
50da0c48c4Sopenharmony_ci
51da0c48c4Sopenharmony_ci CU [     b] base: 0x0000000000400480
52da0c48c4Sopenharmony_ci [     0] range 0, 2
53da0c48c4Sopenharmony_ci          0x0000000000400480..
54da0c48c4Sopenharmony_ci          0x0000000000400481
55da0c48c4Sopenharmony_ci          range 5, d
56da0c48c4Sopenharmony_ci          0x0000000000400485..
57da0c48c4Sopenharmony_ci          0x000000000040048c
58da0c48c4Sopenharmony_ci
59da0c48c4Sopenharmony_ci CU [    e0] base: 0x00000000004004a0
60da0c48c4Sopenharmony_ci [    30] range d, f
61da0c48c4Sopenharmony_ci          0x00000000004004ad..
62da0c48c4Sopenharmony_ci          0x00000000004004ae
63da0c48c4Sopenharmony_ci          range 12, 1a
64da0c48c4Sopenharmony_ci          0x00000000004004b2..
65da0c48c4Sopenharmony_ci          0x00000000004004b9
66da0c48c4Sopenharmony_ciEOF
67da0c48c4Sopenharmony_ci
68da0c48c4Sopenharmony_ci# Produce "raw" unprocessed content.
69da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=ranges testfileloc<<\EOF
70da0c48c4Sopenharmony_ci
71da0c48c4Sopenharmony_ciDWARF section [34] '.debug_ranges' at offset 0xd94:
72da0c48c4Sopenharmony_ci
73da0c48c4Sopenharmony_ci CU [     b] base: 0x0000000000400480
74da0c48c4Sopenharmony_ci [     0] range 0, 2
75da0c48c4Sopenharmony_ci          range 5, d
76da0c48c4Sopenharmony_ci
77da0c48c4Sopenharmony_ci CU [    e0] base: 0x00000000004004a0
78da0c48c4Sopenharmony_ci [    30] range d, f
79da0c48c4Sopenharmony_ci          range 12, 1a
80da0c48c4Sopenharmony_ciEOF
81da0c48c4Sopenharmony_ci
82da0c48c4Sopenharmony_ci# .debug_rnglists (DWARF5), see tests/testfile-dwarf-45.source
83da0c48c4Sopenharmony_citestfiles testfile-dwarf-5
84da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/readelf --debug-dump=ranges testfile-dwarf-5<<\EOF
85da0c48c4Sopenharmony_ci
86da0c48c4Sopenharmony_ciDWARF section [33] '.debug_rnglists' at offset 0x1d9a:
87da0c48c4Sopenharmony_ciTable at Offset 0x0:
88da0c48c4Sopenharmony_ci
89da0c48c4Sopenharmony_ci Length:               45
90da0c48c4Sopenharmony_ci DWARF version:         5
91da0c48c4Sopenharmony_ci Address size:          8
92da0c48c4Sopenharmony_ci Segment size:          0
93da0c48c4Sopenharmony_ci Offset entries:        0
94da0c48c4Sopenharmony_ci CU [   218] base: 000000000000000000
95da0c48c4Sopenharmony_ci
96da0c48c4Sopenharmony_ci  Offset: c, Index: 0
97da0c48c4Sopenharmony_ci    base_address 0x400583
98da0c48c4Sopenharmony_ci      0x0000000000400583 <calc+0x13>
99da0c48c4Sopenharmony_ci    offset_pair 0, 2
100da0c48c4Sopenharmony_ci      0x0000000000400583 <calc+0x13>..
101da0c48c4Sopenharmony_ci      0x0000000000400584 <calc+0x14>
102da0c48c4Sopenharmony_ci    offset_pair 5, 15
103da0c48c4Sopenharmony_ci      0x0000000000400588 <calc+0x18>..
104da0c48c4Sopenharmony_ci      0x0000000000400597 <calc+0x27>
105da0c48c4Sopenharmony_ci    end_of_list
106da0c48c4Sopenharmony_ci
107da0c48c4Sopenharmony_ci  Offset: 1c, Index: 10
108da0c48c4Sopenharmony_ci    start_length 0x400570, 2b
109da0c48c4Sopenharmony_ci      0x0000000000400570 <calc>..
110da0c48c4Sopenharmony_ci      0x000000000040059a <calc+0x2a>
111da0c48c4Sopenharmony_ci    start_length 0x400410, 20
112da0c48c4Sopenharmony_ci      0x0000000000400410 <main>..
113da0c48c4Sopenharmony_ci      0x000000000040042f <main+0x1f>
114da0c48c4Sopenharmony_ci    end_of_list
115da0c48c4Sopenharmony_ci
116da0c48c4Sopenharmony_ciEOF
117da0c48c4Sopenharmony_ci
118da0c48c4Sopenharmony_ci# Same as above, but for DWARF4, note no header, and base address is not
119da0c48c4Sopenharmony_ci# given, but ranges are the same.
120da0c48c4Sopenharmony_citestfiles testfile-dwarf-4
121da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/readelf --debug-dump=ranges testfile-dwarf-4<<\EOF
122da0c48c4Sopenharmony_ci
123da0c48c4Sopenharmony_ciDWARF section [32] '.debug_ranges' at offset 0x1f96:
124da0c48c4Sopenharmony_ci
125da0c48c4Sopenharmony_ci CU [   21c] base: 000000000000000000
126da0c48c4Sopenharmony_ci [     0] range 400583, 400585
127da0c48c4Sopenharmony_ci          0x0000000000400583 <calc+0x13>..
128da0c48c4Sopenharmony_ci          0x0000000000400584 <calc+0x14>
129da0c48c4Sopenharmony_ci          range 400588, 400598
130da0c48c4Sopenharmony_ci          0x0000000000400588 <calc+0x18>..
131da0c48c4Sopenharmony_ci          0x0000000000400597 <calc+0x27>
132da0c48c4Sopenharmony_ci [    30] range 400570, 40059b
133da0c48c4Sopenharmony_ci          0x0000000000400570 <calc>..
134da0c48c4Sopenharmony_ci          0x000000000040059a <calc+0x2a>
135da0c48c4Sopenharmony_ci          range 400410, 400430
136da0c48c4Sopenharmony_ci          0x0000000000400410 <main>..
137da0c48c4Sopenharmony_ci          0x000000000040042f <main+0x1f>
138da0c48c4Sopenharmony_ciEOF
139da0c48c4Sopenharmony_ci
140da0c48c4Sopenharmony_ci# Now with split dwarf. See tests/testfile-dwarf-45.source.
141da0c48c4Sopenharmony_ci# Note that this will have an offsets table that the .dwo can refer to.
142da0c48c4Sopenharmony_citestfiles testfile-splitdwarf-5 testfile-hello5.dwo testfile-world5.dwo
143da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/readelf --debug-dump=ranges testfile-splitdwarf-5<<\EOF
144da0c48c4Sopenharmony_ci
145da0c48c4Sopenharmony_ciDWARF section [35] '.debug_rnglists' at offset 0x393a:
146da0c48c4Sopenharmony_ciTable at Offset 0x0:
147da0c48c4Sopenharmony_ci
148da0c48c4Sopenharmony_ci Length:               53
149da0c48c4Sopenharmony_ci DWARF version:         5
150da0c48c4Sopenharmony_ci Address size:          8
151da0c48c4Sopenharmony_ci Segment size:          0
152da0c48c4Sopenharmony_ci Offset entries:        2
153da0c48c4Sopenharmony_ci CU [    49] base: 000000000000000000
154da0c48c4Sopenharmony_ci
155da0c48c4Sopenharmony_ci  Offsets starting at 0xc:
156da0c48c4Sopenharmony_ci   [     0] 0x8
157da0c48c4Sopenharmony_ci   [     1] 0x18
158da0c48c4Sopenharmony_ci
159da0c48c4Sopenharmony_ci  Offset: 14, Index: 8
160da0c48c4Sopenharmony_ci    base_address 0x4011d3
161da0c48c4Sopenharmony_ci      0x00000000004011d3 <calc+0x13>
162da0c48c4Sopenharmony_ci    offset_pair 0, 2
163da0c48c4Sopenharmony_ci      0x00000000004011d3 <calc+0x13>..
164da0c48c4Sopenharmony_ci      0x00000000004011d4 <calc+0x14>
165da0c48c4Sopenharmony_ci    offset_pair 5, 15
166da0c48c4Sopenharmony_ci      0x00000000004011d8 <calc+0x18>..
167da0c48c4Sopenharmony_ci      0x00000000004011e7 <calc+0x27>
168da0c48c4Sopenharmony_ci    end_of_list
169da0c48c4Sopenharmony_ci
170da0c48c4Sopenharmony_ci  Offset: 24, Index: 18
171da0c48c4Sopenharmony_ci    start_length 0x4011c0, 2b
172da0c48c4Sopenharmony_ci      0x00000000004011c0 <calc>..
173da0c48c4Sopenharmony_ci      0x00000000004011ea <calc+0x2a>
174da0c48c4Sopenharmony_ci    start_length 0x401060, 20
175da0c48c4Sopenharmony_ci      0x0000000000401060 <main>..
176da0c48c4Sopenharmony_ci      0x000000000040107f <main+0x1f>
177da0c48c4Sopenharmony_ci    end_of_list
178da0c48c4Sopenharmony_ci
179da0c48c4Sopenharmony_ciEOF
180da0c48c4Sopenharmony_ci
181da0c48c4Sopenharmony_ci# Note that the rnglist_base attribute of the second CU points to the offsets
182da0c48c4Sopenharmony_ci# above 0xc [c].
183da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/readelf --debug-dump=info testfile-splitdwarf-5<<\EOF
184da0c48c4Sopenharmony_ci
185da0c48c4Sopenharmony_ciDWARF section [28] '.debug_info' at offset 0x3102:
186da0c48c4Sopenharmony_ci [Offset]
187da0c48c4Sopenharmony_ci Compilation unit at offset 0:
188da0c48c4Sopenharmony_ci Version: 5, Abbreviation section offset: 0, Address size: 8, Offset size: 4
189da0c48c4Sopenharmony_ci Unit type: skeleton (4), Unit id: 0xc422aa5c31fec205
190da0c48c4Sopenharmony_ci [    14]  skeleton_unit        abbrev: 1
191da0c48c4Sopenharmony_ci           low_pc               (addr) 0x0000000000401160 <foo>
192da0c48c4Sopenharmony_ci           high_pc              (data8) 81 (0x00000000004011b1)
193da0c48c4Sopenharmony_ci           stmt_list            (sec_offset) 0
194da0c48c4Sopenharmony_ci           dwo_name             (strp) "testfile-hello5.dwo"
195da0c48c4Sopenharmony_ci           comp_dir             (strp) "/home/mark/src/elfutils/tests"
196da0c48c4Sopenharmony_ci           GNU_pubnames         (flag_present) yes
197da0c48c4Sopenharmony_ci           addr_base            (sec_offset) address base [     8]
198da0c48c4Sopenharmony_ci Compilation unit at offset 53:
199da0c48c4Sopenharmony_ci Version: 5, Abbreviation section offset: 21, Address size: 8, Offset size: 4
200da0c48c4Sopenharmony_ci Unit type: skeleton (4), Unit id: 0xb6c8b9d97e6dfdfe
201da0c48c4Sopenharmony_ci [    49]  skeleton_unit        abbrev: 1
202da0c48c4Sopenharmony_ci           ranges               (sec_offset) range list [    24]
203da0c48c4Sopenharmony_ci           low_pc               (addr) 000000000000000000
204da0c48c4Sopenharmony_ci           stmt_list            (sec_offset) 655
205da0c48c4Sopenharmony_ci           dwo_name             (strp) "testfile-world5.dwo"
206da0c48c4Sopenharmony_ci           comp_dir             (strp) "/home/mark/src/elfutils/tests"
207da0c48c4Sopenharmony_ci           GNU_pubnames         (flag_present) yes
208da0c48c4Sopenharmony_ci           addr_base            (sec_offset) address base [    a8]
209da0c48c4Sopenharmony_ci           rnglists_base        (sec_offset) range list [     c]
210da0c48c4Sopenharmony_ciEOF
211da0c48c4Sopenharmony_ci
212da0c48c4Sopenharmony_ci# Same for DWARF4 GNU DebugFission. But now we need to scan the .dwo
213da0c48c4Sopenharmony_ci# explicitly to know it will use the first ranges.
214da0c48c4Sopenharmony_citestfiles testfile-splitdwarf-4 testfile-hello4.dwo testfile-world4.dwo
215da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/readelf --debug-dump=ranges testfile-splitdwarf-4<<\EOF
216da0c48c4Sopenharmony_ci
217da0c48c4Sopenharmony_ciDWARF section [32] '.debug_ranges' at offset 0x3611:
218da0c48c4Sopenharmony_ci
219da0c48c4Sopenharmony_ci CU [     b] base: 000000000000000000
220da0c48c4Sopenharmony_ci [     0] range 4011d3, 4011d5
221da0c48c4Sopenharmony_ci          0x00000000004011d3 <calc+0x13>..
222da0c48c4Sopenharmony_ci          0x00000000004011d4 <calc+0x14>
223da0c48c4Sopenharmony_ci          range 4011d8, 4011e8
224da0c48c4Sopenharmony_ci          0x00000000004011d8 <calc+0x18>..
225da0c48c4Sopenharmony_ci          0x00000000004011e7 <calc+0x27>
226da0c48c4Sopenharmony_ci
227da0c48c4Sopenharmony_ci CU [    3f] base: 000000000000000000
228da0c48c4Sopenharmony_ci [    30] range 4011c0, 4011eb
229da0c48c4Sopenharmony_ci          0x00000000004011c0 <calc>..
230da0c48c4Sopenharmony_ci          0x00000000004011ea <calc+0x2a>
231da0c48c4Sopenharmony_ci          range 401060, 401080
232da0c48c4Sopenharmony_ci          0x0000000000401060 <main>..
233da0c48c4Sopenharmony_ci          0x000000000040107f <main+0x1f>
234da0c48c4Sopenharmony_ciEOF
235da0c48c4Sopenharmony_ci
236da0c48c4Sopenharmony_ciexit 0
237