xref: /llvm-project/llvm/test/DebugInfo/X86/dwarfdump-debug-names.s (revision 78502251f4019953e462bb8bc886381589e9d257)
1# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj -o - | llvm-dwarfdump -debug-names - | FileCheck %s
2	.section	.debug_str,"MS",@progbits,1
3.Linfo_string0:
4	.asciz	"foo"
5.Linfo_string1:
6	.asciz	"_Z3foov"
7.Linfo_string2:
8	.asciz	"bar"
9
10# Fake .debug_info. We just need it for the offsets to two "compile units" and
11# two "DIEs"
12	.section	.debug_info,"",@progbits
13.Lcu_begin0:
14	.byte	0
15.Ldie0:
16	.byte	0
17.Lcu_begin1:
18	.byte	0
19.Ldie1:
20	.byte	0
21
22	.section	.debug_names,"",@progbits
23	.long	.Lnames_end0-.Lnames_start0 # Header: contribution length
24.Lnames_start0:
25	.short	5                       # Header: version
26	.short	0                       # Header: padding
27	.long	1                       # Header: compilation unit count
28	.long	0                       # Header: local type unit count
29	.long	0                       # Header: foreign type unit count
30	.long	2                       # Header: bucket count
31	.long	2                       # Header: name count
32	.long	.Lnames_abbrev_end0-.Lnames_abbrev_start0 # Header: abbreviation table size
33	.long	0                       # Header: augmentation length
34	.long	.Lcu_begin0             # Compilation unit 0
35	.long	0                       # Bucket 0
36	.long	1                       # Bucket 1
37	.long	193491849               # Hash in Bucket 1
38	.long	-1257882357             # Hash in Bucket 1
39	.long	.Linfo_string0          # String in Bucket 1: foo
40	.long	.Linfo_string1          # String in Bucket 1: _Z3foov
41	.long	.Lnames0-.Lnames_entries0 # Offset in Bucket 1
42	.long	.Lnames1-.Lnames_entries0 # Offset in Bucket 1
43.Lnames_abbrev_start0:
44	.byte	46                      # Abbrev code
45	.byte	46                      # DW_TAG_subprogram
46	.byte	3                       # DW_IDX_die_offset
47	.byte	19                      # DW_FORM_ref4
48	.byte	0                       # End of abbrev
49	.byte	0                       # End of abbrev
50	.byte	0                       # End of abbrev list
51.Lnames_abbrev_end0:
52.Lnames_entries0:
53.Lnames0:
54	.byte	46                      # Abbrev code
55	.long	.Ldie0-.Lcu_begin0      # DW_IDX_die_offset
56	.long	0                       # End of list: foo
57.Lnames1:
58	.byte	46                      # Abbrev code
59	.long	.Ldie0-.Lcu_begin0      # DW_IDX_die_offset
60	.long	0                       # End of list: _Z3foov
61	.p2align	2
62.Lnames_end0:
63
64	.long	.Lnames_end1-.Lnames_start1 # Header: contribution length
65.Lnames_start1:
66	.short	5                       # Header: version
67	.short	0                       # Header: padding
68	.long	1                       # Header: compilation unit count
69	.long	0                       # Header: local type unit count
70	.long	0                       # Header: foreign type unit count
71	.long	1                       # Header: bucket count
72	.long	1                       # Header: name count
73	.long	.Lnames_abbrev_end1-.Lnames_abbrev_start1 # Header: abbreviation table size
74	.long	0                       # Header: augmentation length
75	.long	.Lcu_begin1             # Compilation unit 0
76	.long	1                       # Bucket 0
77	.long	193487034               # Hash in Bucket 0
78	.long	.Linfo_string2          # String in Bucket 0: bar
79	.long	.Lnames2-.Lnames_entries1 # Offset in Bucket 0
80.Lnames_abbrev_start1:
81	.byte	52                      # Abbrev code
82	.byte	52                      # DW_TAG_variable
83	.byte	3                       # DW_IDX_die_offset
84	.byte	19                      # DW_FORM_ref4
85	.byte	0                       # End of abbrev
86	.byte	0                       # End of abbrev
87	.byte	0                       # End of abbrev list
88.Lnames_abbrev_end1:
89.Lnames_entries1:
90.Lnames2:
91	.byte	52                      # Abbrev code
92	.long	.Ldie1-.Lcu_begin1      # DW_IDX_die_offset
93	.long	0                       # End of list: bar
94	.p2align	2
95.Lnames_end1:
96
97	.long	0xffffffff                  # DWARF64 mark
98	.quad	.Lnames_end2-.Lnames_start2 # Length
99.Lnames_start2:
100	.short	5                           # Version
101	.space	2                           # Padding
102	.long	1                           # CU count
103	.long	1                           # Local TU count
104	.long	1                           # Foreign TU count
105	.long	1                           # Bucket count
106	.long	1                           # Name count
107	.long	.Lnames_abbrev_end2-.Lnames_abbrev_start2   # Abbreviations table size
108	.long	0                           # Augmentation string size
109	.quad	0xcc00cccccccc              # CU0 offset
110	.quad	0xaa00aaaaaaaa              # Local TU0 offset
111	.quad	0xffffff00ffffffff          # Foreign TU2 signature
112	.long	1                           # Bucket 0
113	.long	0xb887389                   # Hash in Bucket 0
114	.quad	.Linfo_string0              # String in Bucket 0: foo
115	.quad	.Lnames3-.Lnames_entries2   # Offset in Bucket 0
116.Lnames_abbrev_start2:
117	.byte	0x01                        # Abbrev code
118	.byte	0x24                        # DW_TAG_base_type
119	.byte	0x02                        # DW_IDX_type_unit
120	.byte	0x06                        # DW_FORM_data4
121	.byte	0x05                        # DW_IDX_type_hash
122	.byte	0x07                        # DW_FORM_data8
123	.byte	0x00                        # End of abbrev
124	.byte	0x00                        # End of abbrev
125	.byte	0x00                        # End of abbrev list
126.Lnames_abbrev_end2:
127.Lnames_entries2:
128.Lnames3:
129	.byte	0x01                        # Abbrev code
130	.long	1                           # DW_IDX_type_unit
131	.quad	0xff03ffffffff              # DW_IDX_type_hash
132	.byte   0x00                        # End of list: foo
133	.p2align	2
134.Lnames_end2:
135
136# CHECK: .debug_names contents:
137# CHECK-NEXT: Name Index @ 0x0 {
138# CHECK-NEXT:   Header {
139# CHECK-NEXT:     Length: 0x60
140# CHECK-NEXT:     Format: DWARF32
141# CHECK-NEXT:     Version: 5
142# CHECK-NEXT:     CU count: 1
143# CHECK-NEXT:     Local TU count: 0
144# CHECK-NEXT:     Foreign TU count: 0
145# CHECK-NEXT:     Bucket count: 2
146# CHECK-NEXT:     Name count: 2
147# CHECK-NEXT:     Abbreviations table size: 0x7
148# CHECK-NEXT:     Augmentation: ''
149# CHECK-NEXT:   }
150# CHECK-NEXT:   Compilation Unit offsets [
151# CHECK-NEXT:     CU[0]: 0x00000000
152# CHECK-NEXT:   ]
153# CHECK-NEXT:   Abbreviations [
154# CHECK-NEXT:     Abbreviation [[ABBREV:0x[0-9a-f]*]] {
155# CHECK-NEXT:       Tag: DW_TAG_subprogram
156# CHECK-NEXT:       DW_IDX_die_offset: DW_FORM_ref4
157# CHECK-NEXT:     }
158# CHECK-NEXT:   ]
159# CHECK-NEXT:   Bucket 0 [
160# CHECK-NEXT:     EMPTY
161# CHECK-NEXT:   ]
162# CHECK-NEXT:   Bucket 1 [
163# CHECK-NEXT:     Name 1 {
164# CHECK-NEXT:       Hash: 0xB887389
165# CHECK-NEXT:       String: 0x00000000 "foo"
166# CHECK-NEXT:       Entry @ 0x4f {
167# CHECK-NEXT:         Abbrev: [[ABBREV]]
168# CHECK-NEXT:         Tag: DW_TAG_subprogram
169# CHECK-NEXT:         DW_IDX_die_offset: 0x00000001
170# CHECK-NEXT:       }
171# CHECK-NEXT:     }
172# CHECK-NEXT:     Name 2 {
173# CHECK-NEXT:       Hash: 0xB5063D0B
174# CHECK-NEXT:       String: 0x00000004 "_Z3foov"
175# CHECK-NEXT:       Entry @ 0x58 {
176# CHECK-NEXT:         Abbrev: [[ABBREV]]
177# CHECK-NEXT:         Tag: DW_TAG_subprogram
178# CHECK-NEXT:         DW_IDX_die_offset: 0x00000001
179# CHECK-NEXT:       }
180# CHECK-NEXT:     }
181# CHECK-NEXT:   ]
182# CHECK-NEXT: }
183# CHECK-NEXT: Name Index @ 0x64 {
184# CHECK-NEXT:   Header {
185# CHECK-NEXT:     Length: 0x44
186# CHECK-NEXT:     Format: DWARF32
187# CHECK-NEXT:     Version: 5
188# CHECK-NEXT:     CU count: 1
189# CHECK-NEXT:     Local TU count: 0
190# CHECK-NEXT:     Foreign TU count: 0
191# CHECK-NEXT:     Bucket count: 1
192# CHECK-NEXT:     Name count: 1
193# CHECK-NEXT:     Abbreviations table size: 0x7
194# CHECK-NEXT:     Augmentation: ''
195# CHECK-NEXT:   }
196# CHECK-NEXT:   Compilation Unit offsets [
197# CHECK-NEXT:     CU[0]: 0x00000002
198# CHECK-NEXT:   ]
199# CHECK-NEXT:   Abbreviations [
200# CHECK-NEXT:     Abbreviation [[ABBREV1:0x[0-9a-f]*]] {
201# CHECK-NEXT:       Tag: DW_TAG_variable
202# CHECK-NEXT:       DW_IDX_die_offset: DW_FORM_ref4
203# CHECK-NEXT:     }
204# CHECK-NEXT:   ]
205# CHECK-NEXT:   Bucket 0 [
206# CHECK-NEXT:     Name 1 {
207# CHECK-NEXT:       Hash: 0xB8860BA
208# CHECK-NEXT:       String: 0x0000000c "bar"
209# CHECK-NEXT:       Entry @ 0xa3 {
210# CHECK-NEXT:         Abbrev: [[ABBREV1]]
211# CHECK-NEXT:         Tag: DW_TAG_variable
212# CHECK-NEXT:         DW_IDX_die_offset: 0x00000001
213# CHECK-NEXT:       }
214# CHECK-NEXT:     }
215# CHECK-NEXT:   ]
216# CHECK-NEXT: }
217# CHECK-NEXT: Name Index @ 0xac {
218# CHECK-NEXT:   Header {
219# CHECK-NEXT:     Length: 0x68
220# CHECK-NEXT:     Format: DWARF64
221# CHECK-NEXT:     Version: 5
222# CHECK-NEXT:     CU count: 1
223# CHECK-NEXT:     Local TU count: 1
224# CHECK-NEXT:     Foreign TU count: 1
225# CHECK-NEXT:     Bucket count: 1
226# CHECK-NEXT:     Name count: 1
227# CHECK-NEXT:     Abbreviations table size: 0x9
228# CHECK-NEXT:     Augmentation: ''
229# CHECK-NEXT:   }
230# CHECK-NEXT:   Compilation Unit offsets [
231# CHECK-NEXT:     CU[0]: 0xcc00cccccccc
232# CHECK-NEXT:   ]
233# CHECK-NEXT:   Local Type Unit offsets [
234# CHECK-NEXT:     LocalTU[0]: 0xaa00aaaaaaaa
235# CHECK-NEXT:   ]
236# CHECK-NEXT:   Foreign Type Unit signatures [
237# CHECK-NEXT:     ForeignTU[0]: 0xffffff00ffffffff
238# CHECK-NEXT:   ]
239# CHECK-NEXT:   Abbreviations [
240# CHECK-NEXT:     Abbreviation [[ABBREV2:0x[0-9a-f]*]] {
241# CHECK-NEXT:       Tag: DW_TAG_base_type
242# CHECK-NEXT:       DW_IDX_type_unit: DW_FORM_data4
243# CHECK-NEXT:       DW_IDX_type_hash: DW_FORM_data8
244# CHECK-NEXT:     }
245# CHECK-NEXT:   ]
246# CHECK-NEXT:   Bucket 0 [
247# CHECK-NEXT:     Name 1 {
248# CHECK-NEXT:       Hash: 0xB887389
249# CHECK-NEXT:       String: 0x00000000 "foo"
250# CHECK-NEXT:       Entry @ 0x111 {
251# CHECK-NEXT:         Abbrev: [[ABBREV2]]
252# CHECK-NEXT:         Tag: DW_TAG_base_type
253# CHECK-NEXT:         DW_IDX_type_unit: 0x00000001
254# CHECK-NEXT:         DW_IDX_type_hash: 0x0000ff03ffffffff
255# CHECK-NEXT:       }
256# CHECK-NEXT:     }
257# CHECK-NEXT:   ]
258# CHECK-NEXT: }
259