xref: /llvm-project/bolt/test/X86/dwarf5-debug-names.test (revision 4841858862df4b8ac4ac68922086f03c8bbd3dc2)
1; RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-debug-names-main.s   -o %tmain.o
2; RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %p/Inputs/dwarf5-debug-names-helper.s -o %thelper.o
3; RUN: %clang %cflags -gdwarf-5 %tmain.o %thelper.o -o %tmain.exe
4; RUN: llvm-bolt %tmain.exe -o %tmain.exe.bolt --update-debug-sections
5; RUN: llvm-dwarfdump --debug-info -r 0 --debug-names %tmain.exe.bolt > %tlog.txt
6; RUN: cat %tlog.txt | FileCheck -check-prefix=BOLT %s
7
8;; Tests that BOLT correctly generates .debug_names section with two CUs
9
10; BOLT: [[OFFSET1:0x[0-9a-f]*]]: Compile Unit
11; BOLT: [[OFFSET2:0x[0-9a-f]*]]: Compile Unit
12; BOLT:       Name Index @ 0x0 {
13; BOLT-NEXT:   Header {
14; BOLT-NEXT:     Length: 0x1D4
15; BOLT-NEXT:     Format: DWARF32
16; BOLT-NEXT:     Version: 5
17; BOLT-NEXT:     CU count: 2
18; BOLT-NEXT:     Local TU count: 0
19; BOLT-NEXT:     Foreign TU count: 0
20; BOLT-NEXT:     Bucket count: 14
21; BOLT-NEXT:     Name count: 15
22; BOLT-NEXT:     Abbreviations table size: 0x3D
23; BOLT-NEXT:     Augmentation: 'BOLT'
24; BOLT-NEXT:   }
25; BOLT-NEXT:   Compilation Unit offsets [
26; BOLT-NEXT:     CU[0]: [[OFFSET1]]
27; BOLT-NEXT:     CU[1]: [[OFFSET2]]
28; BOLT-NEXT:   ]
29; BOLT-NEXT:   Abbreviations [
30; BOLT-NEXT:     Abbreviation [[ABBREV1:0x[0-9a-f]*]] {
31; BOLT-NEXT:       Tag: DW_TAG_structure_type
32; BOLT-NEXT:       DW_IDX_compile_unit: DW_FORM_data1
33; BOLT-NEXT:       DW_IDX_die_offset: DW_FORM_ref4
34; BOLT-NEXT:       DW_IDX_parent: DW_FORM_flag_present
35; BOLT-NEXT:     }
36; BOLT-NEXT:     Abbreviation [[ABBREV2:0x[0-9a-f]*]] {
37; BOLT-NEXT:       Tag: DW_TAG_namespace
38; BOLT-NEXT:       DW_IDX_compile_unit: DW_FORM_data1
39; BOLT-NEXT:       DW_IDX_die_offset: DW_FORM_ref4
40; BOLT-NEXT:       DW_IDX_parent: DW_FORM_flag_present
41; BOLT-NEXT:     }
42; BOLT-NEXT:     Abbreviation [[ABBREV3:0x[0-9a-f]*]] {
43; BOLT-NEXT:       Tag: DW_TAG_subprogram
44; BOLT-NEXT:       DW_IDX_compile_unit: DW_FORM_data1
45; BOLT-NEXT:       DW_IDX_die_offset: DW_FORM_ref4
46; BOLT-NEXT:       DW_IDX_parent: DW_FORM_flag_present
47; BOLT-NEXT:     }
48; BOLT-NEXT:     Abbreviation [[ABBREV4:0x[0-9a-f]*]] {
49; BOLT-NEXT:       Tag: DW_TAG_base_type
50; BOLT-NEXT:       DW_IDX_compile_unit: DW_FORM_data1
51; BOLT-NEXT:       DW_IDX_die_offset: DW_FORM_ref4
52; BOLT-NEXT:       DW_IDX_parent: DW_FORM_flag_present
53; BOLT-NEXT:     }
54; BOLT-NEXT:     Abbreviation [[ABBREV5:0x[0-9a-f]*]] {
55; BOLT-NEXT:       Tag: DW_TAG_variable
56; BOLT-NEXT:       DW_IDX_compile_unit: DW_FORM_data1
57; BOLT-NEXT:       DW_IDX_die_offset: DW_FORM_ref4
58; BOLT-NEXT:       DW_IDX_parent: DW_FORM_flag_present
59; BOLT-NEXT:     }
60; BOLT-NEXT:       Abbreviation [[ABBREV6:0x[0-9a-f]*]] {
61; BOLT-NEXT:         Tag: DW_TAG_structure_type
62; BOLT-NEXT:         DW_IDX_compile_unit: DW_FORM_data1
63; BOLT-NEXT:         DW_IDX_die_offset: DW_FORM_ref4
64; BOLT-NEXT:         DW_IDX_parent: DW_FORM_ref4
65; BOLT-NEXT:       }
66; BOLT-NEXT:   ]
67; BOLT-NEXT:   Bucket 0 [
68; BOLT-NEXT:     Name 1 {
69; BOLT-NEXT:       Hash: 0x59796C
70; BOLT-NEXT:       String: {{.+}} "t3"
71; BOLT-NEXT:       Entry @ {{.+}} {
72; BOLT-NEXT:         Abbrev: [[ABBREV1]]
73; BOLT-NEXT:         Tag: DW_TAG_structure_type
74; BOLT-NEXT:         DW_IDX_compile_unit: 0x00
75; BOLT-NEXT:         DW_IDX_die_offset: 0x0000002f
76; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
77; BOLT-NEXT:       }
78; BOLT-NEXT:     }
79; BOLT-NEXT:   ]
80; BOLT-NEXT:   Bucket 1 [
81; BOLT-NEXT:     Name 2 {
82; BOLT-NEXT:       Hash: 0x7C96E4DB
83; BOLT-NEXT:       String: {{.+}} "Foo2"
84; BOLT-NEXT:       Entry @ {{.+}} {
85; BOLT-NEXT:         Abbrev: [[ABBREV1]]
86; BOLT-NEXT:         Tag: DW_TAG_structure_type
87; BOLT-NEXT:         DW_IDX_compile_unit: 0x00
88; BOLT-NEXT:         DW_IDX_die_offset: 0x000000eb
89; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
90; BOLT-NEXT:       }
91; BOLT-NEXT:     }
92; BOLT-NEXT:   ]
93; BOLT-NEXT:   Bucket 2 [
94; BOLT-NEXT:     Name 3 {
95; BOLT-NEXT:       Hash: 0x8CFC710C
96; BOLT-NEXT:       String: {{.+}} "(anonymous namespace)"
97; BOLT-NEXT:       Entry @ [[ENTRY:0x[0-9a-f]*]] {
98; BOLT-NEXT:         Abbrev: [[ABBREV2]]
99; BOLT-NEXT:         Tag: DW_TAG_namespace
100; BOLT-NEXT:         DW_IDX_compile_unit: 0x00
101; BOLT-NEXT:         DW_IDX_die_offset: 0x00000061
102; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
103; BOLT-NEXT:       }
104; BOLT-NEXT:     }
105; BOLT-NEXT:     Name 4 {
106; BOLT-NEXT:       Hash: 0xBA564846
107; BOLT-NEXT:       String: {{.+}} "Foo2Int"
108; BOLT-NEXT:       Entry @ {{.+}} {
109; BOLT-NEXT:         Abbrev: [[ABBREV1]]
110; BOLT-NEXT:         Tag: DW_TAG_structure_type
111; BOLT-NEXT:         DW_IDX_compile_unit: 0x01
112; BOLT-NEXT:         DW_IDX_die_offset: 0x0000005a
113; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
114; BOLT-NEXT:       }
115; BOLT-NEXT:     }
116; BOLT-NEXT:   ]
117; BOLT-NEXT:   Bucket 3 [
118; BOLT-NEXT:     EMPTY
119; BOLT-NEXT:   ]
120; BOLT-NEXT:   Bucket 4 [
121; BOLT-NEXT:     EMPTY
122; BOLT-NEXT:   ]
123; BOLT-NEXT:   Bucket 5 [
124; BOLT-NEXT:     Name 5 {
125; BOLT-NEXT:       Hash: 0xB887389
126; BOLT-NEXT:       String: {{.+}} "Foo"
127; BOLT-NEXT:       Entry @ {{.+}} {
128; BOLT-NEXT:         Abbrev: [[ABBREV1]]
129; BOLT-NEXT:         Tag: DW_TAG_structure_type
130; BOLT-NEXT:         DW_IDX_compile_unit: 0x00
131; BOLT-NEXT:         DW_IDX_die_offset: 0x000000c9
132; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
133; BOLT-NEXT:       }
134; BOLT-NEXT:     }
135; BOLT-NEXT:     Name 6 {
136; BOLT-NEXT:       Hash: 0xB887389
137; BOLT-NEXT:       String: {{.+}} "foo"
138; BOLT-NEXT:       Entry @ {{.+}} {
139; BOLT-NEXT:         Abbrev: [[ABBREV3]]
140; BOLT-NEXT:         Tag: DW_TAG_subprogram
141; BOLT-NEXT:         DW_IDX_compile_unit: 0x01
142; BOLT-NEXT:         DW_IDX_die_offset: 0x00000033
143; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
144; BOLT-NEXT:       }
145; BOLT-NEXT:     }
146; BOLT-NEXT:     Name 7 {
147; BOLT-NEXT:       Hash: 0x7C952063
148; BOLT-NEXT:       String: {{.+}} "char"
149; BOLT-NEXT:       Entry @ {{.+}} {
150; BOLT-NEXT:         Abbrev: [[ABBREV4]]
151; BOLT-NEXT:         Tag: DW_TAG_base_type
152; BOLT-NEXT:         DW_IDX_compile_unit: 0x01
153; BOLT-NEXT:         DW_IDX_die_offset: 0x0000009f
154; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
155; BOLT-NEXT:       }
156; BOLT-NEXT:       Entry @ {{.+}} {
157; BOLT-NEXT:         Abbrev: [[ABBREV4]]
158; BOLT-NEXT:         Tag: DW_TAG_base_type
159; BOLT-NEXT:         DW_IDX_compile_unit: 0x00
160; BOLT-NEXT:         DW_IDX_die_offset: 0x000000c5
161; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
162; BOLT-NEXT:       }
163; BOLT-NEXT:     }
164; BOLT-NEXT:   ]
165; BOLT-NEXT:   Bucket 6 [
166; BOLT-NEXT:     Name 8 {
167; BOLT-NEXT:       Hash: 0x392140FA
168; BOLT-NEXT:       String: {{.+}} "t2<&fooint>"
169; BOLT-NEXT:       Entry @ {{.+}} {
170; BOLT-NEXT:         Abbrev: [[ABBREV1]]
171; BOLT-NEXT:         Tag: DW_TAG_structure_type
172; BOLT-NEXT:         DW_IDX_compile_unit: 0x00
173; BOLT-NEXT:         DW_IDX_die_offset: 0x0000003f
174; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
175; BOLT-NEXT:       }
176; BOLT-NEXT:     }
177; BOLT-NEXT:     Name 9 {
178; BOLT-NEXT:       Hash: 0xFDE48034
179; BOLT-NEXT:       String: {{.+}} "fooint"
180; BOLT-NEXT:       Entry @ {{.+}} {
181; BOLT-NEXT:         Abbrev: [[ABBREV5]]
182; BOLT-NEXT:         Tag: DW_TAG_variable
183; BOLT-NEXT:         DW_IDX_compile_unit: 0x01
184; BOLT-NEXT:         DW_IDX_die_offset: 0x00000024
185; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
186; BOLT-NEXT:       }
187; BOLT-NEXT:     }
188; BOLT-NEXT:   ]
189; BOLT-NEXT:   Bucket 7 [
190; BOLT-NEXT:     Name 10 {
191; BOLT-NEXT:       Hash: 0xB5063D0B
192; BOLT-NEXT:       String: {{.+}} "_Z3foov"
193; BOLT-NEXT:       Entry @ {{.+}} {
194; BOLT-NEXT:         Abbrev: [[ABBREV3]]
195; BOLT-NEXT:         Tag: DW_TAG_subprogram
196; BOLT-NEXT:         DW_IDX_compile_unit: 0x01
197; BOLT-NEXT:         DW_IDX_die_offset: 0x00000033
198; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
199; BOLT-NEXT:       }
200; BOLT-NEXT:     }
201; BOLT-NEXT:   ]
202; BOLT-NEXT:   Bucket 8 [
203; BOLT-NEXT:     Name 11 {
204; BOLT-NEXT:       Hash: 0x5979AC
205; BOLT-NEXT:       String: {{.+}} "v1"
206; BOLT-NEXT:       Entry @ {{.+}} {
207; BOLT-NEXT:         Abbrev: [[ABBREV5]]
208; BOLT-NEXT:         Tag: DW_TAG_variable
209; BOLT-NEXT:         DW_IDX_compile_unit: 0x00
210; BOLT-NEXT:         DW_IDX_die_offset: 0x00000024
211; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
212; BOLT-NEXT:       }
213; BOLT-NEXT:     }
214; BOLT-NEXT:   ]
215; BOLT-NEXT:   Bucket 9 [
216; BOLT-NEXT:     EMPTY
217; BOLT-NEXT:   ]
218; BOLT-NEXT:   Bucket 10 [
219; BOLT-NEXT:     Name 12 {
220; BOLT-NEXT:       Hash: 0xB888030
221; BOLT-NEXT:       String: {{.+}} "int"
222; BOLT-NEXT:       Entry @ {{.+}} {
223; BOLT-NEXT:         Abbrev: [[ABBREV4]]
224; BOLT-NEXT:         Tag: DW_TAG_base_type
225; BOLT-NEXT:         DW_IDX_compile_unit: 0x01
226; BOLT-NEXT:         DW_IDX_die_offset: 0x0000002f
227; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
228; BOLT-NEXT:       }
229; BOLT-NEXT:       Entry @ {{.+}} {
230; BOLT-NEXT:         Abbrev: [[ABBREV4]]
231; BOLT-NEXT:         Tag: DW_TAG_base_type
232; BOLT-NEXT:         DW_IDX_compile_unit: 0x00
233; BOLT-NEXT:         DW_IDX_die_offset: 0x0000005d
234; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
235; BOLT-NEXT:       }
236; BOLT-NEXT:     }
237; BOLT-NEXT:     Name 13 {
238; BOLT-NEXT:       Hash: 0xF73809C
239; BOLT-NEXT:       String: {{.+}} "Foo2a"
240; BOLT-NEXT:       Entry @ {{.+}} {
241; BOLT-NEXT:         Abbrev: [[ABBREV1]]
242; BOLT-NEXT:         Tag: DW_TAG_structure_type
243; BOLT-NEXT:         DW_IDX_compile_unit: 0x01
244; BOLT-NEXT:         DW_IDX_die_offset: 0x00000078
245; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
246; BOLT-NEXT:       }
247; BOLT-NEXT:       Entry @ {{.+}} {
248; BOLT-NEXT:         Abbrev: [[ABBREV1]]
249; BOLT-NEXT:         Tag: DW_TAG_structure_type
250; BOLT-NEXT:         DW_IDX_compile_unit: 0x00
251; BOLT-NEXT:         DW_IDX_die_offset: 0x00000104
252; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
253; BOLT-NEXT:       }
254; BOLT-NEXT:     }
255; BOLT-NEXT:     Name 14 {
256; BOLT-NEXT:       Hash: 0x7C9A7F6A
257; BOLT-NEXT:       String: {{.+}} "main"
258; BOLT-NEXT:       Entry @ {{.+}} {
259; BOLT-NEXT:         Abbrev: [[ABBREV3]]
260; BOLT-NEXT:         Tag: DW_TAG_subprogram
261; BOLT-NEXT:         DW_IDX_compile_unit: 0x00
262; BOLT-NEXT:         DW_IDX_die_offset: 0x00000073
263; BOLT-NEXT:         DW_IDX_parent: <parent not indexed>
264; BOLT-NEXT:       }
265; BOLT-NEXT:     }
266; BOLT-NEXT:   ]
267; BOLT-NEXT:   Bucket 11 [
268; BOLT-NEXT:     EMPTY
269; BOLT-NEXT:   ]
270; BOLT-NEXT:   Bucket 12 [
271; BOLT-NEXT:     Name 15 {
272; BOLT-NEXT:       Hash: 0x59796A
273; BOLT-NEXT:       String: {{.+}} "t1"
274; BOLT-NEXT:       Entry @ {{.+}} {
275; BOLT-NEXT:         Abbrev: [[ABBREV6]]
276; BOLT-NEXT:         Tag: DW_TAG_structure_type
277; BOLT-NEXT:         DW_IDX_compile_unit: 0x00
278; BOLT-NEXT:         DW_IDX_die_offset: 0x00000062
279; BOLT-NEXT:         DW_IDX_parent: Entry @ [[ENTRY]]
280; BOLT-NEXT:       }
281; BOLT-NEXT:     }
282; BOLT-NEXT:   ]
283; BOLT-NEXT:   Bucket 13 [
284; BOLT-NEXT:     EMPTY
285; BOLT-NEXT:   ]
286; BOLT-NEXT: }
287