1#!/usr/local/bin/bash
2# Copyright (C) 2019 Red Hat, Inc.
3# This file is part of elfutils.
4#
5# This file is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 3 of the License, or
8# (at your option) any later version.
9#
10# elfutils is distributed in the hope that it will be useful, but
11# WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18. $srcdir/test-subr.sh
19
20# = rng.ads =
21# package Rng is
22#
23#    type Rec (I : Integer) is record
24#       case I is
25#  when Positive =>
26#     case I is
27#        when 1..15 | 17 | 23 =>
28#   null;
29#        when others =>
30#   J : Integer;
31#     end case;
32#  when -52..-1 =>
33#     Q: Integer;
34#  when -64 =>
35#     R: Boolean;
36#  when others =>
37#     null;
38#       end case;
39#    end record;
40#
41#    R : Rec (1);
42#
43# end Rng;
44
45# = urng.ads =
46#
47# package Urng is
48#
49#    type Unsigned is mod 65536;
50#    type Rec (U : Unsigned) is record
51#       case U is
52#  when 17 | 23 | 32768..65535 =>
53#     null;
54#  when 256 =>
55#     B: Boolean;
56#  when others =>
57#     I : Integer;
58#       end case;
59#    end record;
60#
61#    R : Rec (1);
62#
63# end Urng;
64
65# gcc -c -g -fgnat-encodings=minimal -gstrict-dwarf rng.ads
66# eu-strip -g -f rng.debug rng.o
67# gcc -c -g -fgnat-encodings=minimal -gstrict-dwarf urng.ads
68# eu-strip -g -f urng.debug urng.o
69
70testfiles testfile-rng.debug testfile-urng.debug
71
72testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=info testfile-rng.debug testfile-urng.debug <<EOF
73
74testfile-rng.debug:
75
76
77DWARF section [ 5] '.debug_info' at offset 0x40:
78 [Offset]
79 Compilation unit at offset 0:
80 Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4
81 [     b]  compile_unit         abbrev: 1
82           producer             (strp) "GNU Ada 9.1.1 20190503 (Red Hat 9.1.1-1) -g -fgnat-encodings=minimal -gstrict-dwarf -mtune=generic -march=x86-64"
83           language             (data1) Ada95 (13)
84           name                 (strp) "rng.ads"
85           comp_dir             (strp) "/home/mark"
86           low_pc               (addr) 000000000000000000
87           high_pc              (data8) 2016 (0x00000000000007e0)
88           stmt_list            (sec_offset) 0
89 [    2d]    structure_type       abbrev: 2
90             name                 (strp) "rng__rec"
91             byte_size            (exprloc) 
92              [ 0] push_object_address
93              [ 1] deref_size 4
94              [ 3] call4 [    c6]
95              [ 8] plus_uconst 7
96              [10] const1s -4
97              [12] and
98             decl_file            (data1) rng.ads (1)
99             decl_line            (data1) 3
100             decl_column          (data1) 9
101             sibling              (ref4) [    ab]
102 [    47]      member               abbrev: 3
103               name                 (string) "i"
104               decl_file            (data1) rng.ads (1)
105               decl_line            (data1) 3
106               decl_column          (data1) 14
107               type                 (ref4) [    fe]
108               data_member_location (data1) 0
109 [    52]      variant_part         abbrev: 4
110               discr                (ref4) [    47]
111 [    57]        variant              abbrev: 5
112                 discr_list           (block1) range 1..2147483647
113                 sibling              (ref4) [    81]
114 [    64]          variant_part         abbrev: 4
115                   discr                (ref4) [    47]
116 [    69]            variant              abbrev: 6
117                     discr_list           (block1) range 1..15, label 17, label 23
118 [    72]            variant              abbrev: 7
119 [    73]              member               abbrev: 3
120                       name                 (string) "j"
121                       decl_file            (data1) rng.ads (1)
122                       decl_line            (data1) 10
123                       decl_column          (data1) 19
124                       type                 (ref4) [    fe]
125                       data_member_location (data1) 4
126 [    81]        variant              abbrev: 5
127                 discr_list           (block1) range -52..-1
128                 sibling              (ref4) [    96]
129 [    8a]          member               abbrev: 3
130                   name                 (string) "q"
131                   decl_file            (data1) rng.ads (1)
132                   decl_line            (data1) 13
133                   decl_column          (data1) 13
134                   type                 (ref4) [    fe]
135                   data_member_location (data1) 4
136 [    96]        variant              abbrev: 8
137                 discr_value          (sdata) -64
138                 sibling              (ref4) [    a8]
139 [    9c]          member               abbrev: 3
140                   name                 (string) "r"
141                   decl_file            (data1) rng.ads (1)
142                   decl_line            (data1) 15
143                   decl_column          (data1) 13
144                   type                 (ref4) [   105]
145                   data_member_location (data1) 4
146 [    a8]        variant              abbrev: 9
147 [    ab]    dwarf_procedure      abbrev: 10
148             location             (exprloc) 
149              [ 0] dup
150              [ 1] lit0
151              [ 2] gt
152              [ 3] over
153              [ 4] lit15
154              [ 5] le
155              [ 6] and
156              [ 7] over
157              [ 8] lit17
158              [ 9] eq
159              [10] or
160              [11] over
161              [12] lit23
162              [13] eq
163              [14] or
164              [15] bra 22
165              [18] lit4
166              [19] skip 23
167              [22] lit0
168              [23] swap
169              [24] drop
170 [    c6]    dwarf_procedure      abbrev: 10
171             location             (exprloc) 
172              [ 0] dup
173              [ 1] lit0
174              [ 2] gt
175              [ 3] bra 36
176              [ 6] dup
177              [ 7] const1s -52
178              [ 9] lt
179              [10] over
180              [11] lit0
181              [12] ge
182              [13] or
183              [14] bra 21
184              [17] lit4
185              [18] skip 33
186              [21] dup
187              [22] const1s -64
188              [24] eq
189              [25] bra 32
190              [28] lit0
191              [29] skip 33
192              [32] lit4
193              [33] skip 52
194              [36] dup
195              [37] call4 [    ab]
196              [42] plus_uconst 3
197              [44] const1s -4
198              [46] and
199              [47] plus_uconst 3
200              [49] const1s -4
201              [51] and
202              [52] swap
203              [53] drop
204 [    fe]    base_type            abbrev: 11
205             byte_size            (data1) 4
206             encoding             (data1) signed (5)
207             name                 (strp) "integer"
208             artificial           (flag_present) yes
209 [   105]    base_type            abbrev: 12
210             byte_size            (data1) 1
211             encoding             (data1) boolean (2)
212             name                 (strp) "boolean"
213 [   10c]    variable             abbrev: 13
214             name                 (strp) "rng__r"
215             decl_file            (data1) rng.ads (1)
216             decl_line            (data1) 21
217             decl_column          (data1) 4
218             type                 (ref4) [    2d]
219             external             (flag_present) yes
220             location             (exprloc) 
221              [ 0] addr 0x7e4
222 [   122]    subprogram           abbrev: 14
223             external             (flag_present) yes
224             name                 (strp) "rng___elabs"
225             artificial           (flag_present) yes
226             low_pc               (addr) 0x0000000000000734
227             high_pc              (data8) 22 (0x000000000000074a)
228             frame_base           (exprloc) 
229              [ 0] call_frame_cfa
230
231testfile-urng.debug:
232
233
234DWARF section [ 5] '.debug_info' at offset 0x40:
235 [Offset]
236 Compilation unit at offset 0:
237 Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4
238 [     b]  compile_unit         abbrev: 1
239           producer             (strp) "GNU Ada 9.1.1 20190503 (Red Hat 9.1.1-1) -g -fgnat-encodings=minimal -gstrict-dwarf -mtune=generic -march=x86-64"
240           language             (data1) Ada95 (13)
241           name                 (strp) "urng.ads"
242           comp_dir             (strp) "/home/mark"
243           low_pc               (addr) 000000000000000000
244           high_pc              (data8) 977 (0x00000000000003d1)
245           stmt_list            (sec_offset) 0
246 [    2d]    base_type            abbrev: 2
247             byte_size            (data1) 2
248             encoding             (data1) unsigned (7)
249             name                 (strp) "urng__unsigned"
250 [    34]    structure_type       abbrev: 3
251             name                 (strp) "urng__rec"
252             byte_size            (exprloc) 
253              [ 0] push_object_address
254              [ 1] deref_size 2
255              [ 3] call4 [    8d]
256              [ 8] plus_uconst 7
257              [10] const1s -4
258              [12] and
259             decl_file            (data1) urng.ads (1)
260             decl_line            (data1) 4
261             decl_column          (data1) 9
262             sibling              (ref4) [    8d]
263 [    4e]      member               abbrev: 4
264               name                 (string) "u"
265               decl_file            (data1) urng.ads (1)
266               decl_line            (data1) 4
267               decl_column          (data1) 14
268               type                 (ref4) [    2d]
269               data_member_location (data1) 0
270 [    59]      variant_part         abbrev: 5
271               discr                (ref4) [    4e]
272 [    5e]        variant              abbrev: 6
273                 discr_list           (block1) label 17, label 23, range 32768..65535
274 [    6b]        variant              abbrev: 7
275                 discr_value          (udata) 256
276                 sibling              (ref4) [    7e]
277 [    72]          member               abbrev: 4
278                   name                 (string) "b"
279                   decl_file            (data1) urng.ads (1)
280                   decl_line            (data1) 9
281                   decl_column          (data1) 13
282                   type                 (ref4) [    a4]
283                   data_member_location (data1) 4
284 [    7e]        variant              abbrev: 8
285 [    7f]          member               abbrev: 4
286                   name                 (string) "i"
287                   decl_file            (data1) urng.ads (1)
288                   decl_line            (data1) 11
289                   decl_column          (data1) 13
290                   type                 (ref4) [    ab]
291                   data_member_location (data1) 4
292 [    8d]    dwarf_procedure      abbrev: 9
293             location             (exprloc) 
294              [ 0] dup
295              [ 1] lit17
296              [ 2] ne
297              [ 3] over
298              [ 4] lit23
299              [ 5] ne
300              [ 6] and
301              [ 7] over
302              [ 8] lit0
303              [ 9] ge
304              [10] and
305              [11] bra 18
306              [14] lit0
307              [15] skip 19
308              [18] lit4
309              [19] swap
310              [20] drop
311 [    a4]    base_type            abbrev: 2
312             byte_size            (data1) 1
313             encoding             (data1) boolean (2)
314             name                 (strp) "boolean"
315 [    ab]    base_type            abbrev: 10
316             byte_size            (data1) 4
317             encoding             (data1) signed (5)
318             name                 (strp) "integer"
319             artificial           (flag_present) yes
320 [    b2]    variable             abbrev: 11
321             name                 (strp) "urng__r"
322             decl_file            (data1) urng.ads (1)
323             decl_line            (data1) 15
324             decl_column          (data1) 4
325             type                 (ref4) [    34]
326             external             (flag_present) yes
327             location             (exprloc) 
328              [ 0] addr 0x3d8
329 [    c8]    subprogram           abbrev: 12
330             external             (flag_present) yes
331             name                 (strp) "urng___elabs"
332             artificial           (flag_present) yes
333             low_pc               (addr) 0x0000000000000386
334             high_pc              (data8) 22 (0x000000000000039c)
335             frame_base           (exprloc) 
336              [ 0] call_frame_cfa
337EOF
338