xref: /llvm-project/lldb/test/Shell/SymbolFile/DWARF/x86/debug-names-signature.s (revision c0e1ad779f8b7b0073b89ecdd44c3b9c4a72e494)
1## Test that we can correctly complete types even if the debug_names index
2## contains entries referring to declaration dies (clang emitted entries like
3## that until bd5c6367bd7).
4##
5## This test consists of two compile units and one type unit. CU1 has the
6## definition of a variable, but only a forward-declaration of its type. When
7## attempting to find a definition, the debug_names lookup will return the DIE
8## in CU0, which is also a forward-declaration (with a reference to a type
9## unit). LLDB needs to find the definition of the type within the type unit.
10
11# RUN: llvm-mc -triple=x86_64-pc-linux -filetype=obj %s > %t
12# RUN: %lldb %t -o "target variable s" -o exit | FileCheck %s
13
14# CHECK:      (lldb) target variable s
15# CHECK-NEXT: (Struct) s = (member = 47)
16
17        .data
18        .p2align        2, 0x0
19        .long   0
20s:
21        .long   47                              # 0x2f
22
23        .section        .debug_abbrev,"",@progbits
24        .byte   1                               # Abbreviation Code
25        .byte   65                              # DW_TAG_type_unit
26        .byte   1                               # DW_CHILDREN_yes
27        .byte   19                              # DW_AT_language
28        .byte   5                               # DW_FORM_data2
29        .byte   0                               # EOM(1)
30        .byte   0                               # EOM(2)
31        .byte   2                               # Abbreviation Code
32        .byte   19                              # DW_TAG_structure_type
33        .byte   1                               # DW_CHILDREN_yes
34        .byte   54                              # DW_AT_calling_convention
35        .byte   11                              # DW_FORM_data1
36        .byte   3                               # DW_AT_name
37        .byte   14                              # DW_FORM_strp
38        .byte   11                              # DW_AT_byte_size
39        .byte   11                              # DW_FORM_data1
40        .byte   0                               # EOM(1)
41        .byte   0                               # EOM(2)
42        .byte   3                               # Abbreviation Code
43        .byte   13                              # DW_TAG_member
44        .byte   0                               # DW_CHILDREN_no
45        .byte   3                               # DW_AT_name
46        .byte   14                              # DW_FORM_strp
47        .byte   73                              # DW_AT_type
48        .byte   19                              # DW_FORM_ref4
49        .byte   56                              # DW_AT_data_member_location
50        .byte   11                              # DW_FORM_data1
51        .byte   0                               # EOM(1)
52        .byte   0                               # EOM(2)
53        .byte   4                               # Abbreviation Code
54        .byte   36                              # DW_TAG_base_type
55        .byte   0                               # DW_CHILDREN_no
56        .byte   3                               # DW_AT_name
57        .byte   14                              # DW_FORM_strp
58        .byte   62                              # DW_AT_encoding
59        .byte   11                              # DW_FORM_data1
60        .byte   11                              # DW_AT_byte_size
61        .byte   11                              # DW_FORM_data1
62        .byte   0                               # EOM(1)
63        .byte   0                               # EOM(2)
64        .byte   5                               # Abbreviation Code
65        .byte   17                              # DW_TAG_compile_unit
66        .byte   1                               # DW_CHILDREN_yes
67        .byte   37                              # DW_AT_producer
68        .byte   8                               # DW_FORM_string
69        .byte   19                              # DW_AT_language
70        .byte   5                               # DW_FORM_data2
71        .byte   0                               # EOM(1)
72        .byte   0                               # EOM(2)
73        .byte   6                               # Abbreviation Code
74        .byte   52                              # DW_TAG_variable
75        .byte   0                               # DW_CHILDREN_no
76        .byte   3                               # DW_AT_name
77        .byte   14                              # DW_FORM_strp
78        .byte   73                              # DW_AT_type
79        .byte   19                              # DW_FORM_ref4
80        .byte   2                               # DW_AT_location
81        .byte   24                              # DW_FORM_exprloc
82        .byte   0                               # EOM(1)
83        .byte   0                               # EOM(2)
84        .byte   7                               # Abbreviation Code
85        .byte   19                              # DW_TAG_structure_type
86        .byte   0                               # DW_CHILDREN_no
87        .byte   60                              # DW_AT_declaration
88        .byte   25                              # DW_FORM_flag_present
89        .byte   105                             # DW_AT_signature
90        .byte   32                              # DW_FORM_ref_sig8
91        .byte   0                               # EOM(1)
92        .byte   0                               # EOM(2)
93        .byte   8                               # Abbreviation Code
94        .byte   19                              # DW_TAG_structure_type
95        .byte   0                               # DW_CHILDREN_no
96        .byte   3                               # DW_AT_name
97        .byte   14                              # DW_FORM_strp
98        .byte   60                              # DW_AT_declaration
99        .byte   25                              # DW_FORM_flag_present
100        .byte   0                               # EOM(1)
101        .byte   0                               # EOM(2)
102        .byte   0                               # EOM(3)
103
104        .section        .debug_info,"",@progbits
105.Ltu_begin0:
106        .long   .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
107.Ldebug_info_start0:
108        .short  5                               # DWARF version number
109        .byte   2                               # DWARF Unit Type
110        .byte   8                               # Address Size (in bytes)
111        .long   .debug_abbrev                   # Offset Into Abbrev. Section
112        .quad   4878254330033667422             # Type Signature
113        .long   .LStruct_def-.Ltu_begin0        # Type DIE Offset
114        .byte   1                               # Abbrev [1] 0x18:0x20 DW_TAG_type_unit
115        .short  33                              # DW_AT_language
116.LStruct_def:
117        .byte   2                               # Abbrev [2] 0x23:0x10 DW_TAG_structure_type
118        .byte   5                               # DW_AT_calling_convention
119        .long   .Linfo_string6                  # DW_AT_name
120        .byte   4                               # DW_AT_byte_size
121        .byte   3                               # Abbrev [3] 0x29:0x9 DW_TAG_member
122        .long   .Linfo_string4                  # DW_AT_name
123        .long   .Lint-.Ltu_begin0               # DW_AT_type
124        .byte   0                               # DW_AT_data_member_location
125        .byte   0                               # End Of Children Mark
126.Lint:
127        .byte   4                               # Abbrev [4] 0x33:0x4 DW_TAG_base_type
128        .long   .Linfo_string5                  # DW_AT_name
129        .byte   5                               # DW_AT_encoding
130        .byte   4                               # DW_AT_byte_size
131        .byte   0                               # End Of Children Mark
132.Ldebug_info_end0:
133
134.Lcu_begin0:
135        .long   .Ldebug_info_end1-.Ldebug_info_start1 # Length of Unit
136.Ldebug_info_start1:
137        .short  5                               # DWARF version number
138        .byte   1                               # DWARF Unit Type
139        .byte   8                               # Address Size (in bytes)
140        .long   .debug_abbrev                   # Offset Into Abbrev. Section
141        .byte   5                               # Abbrev [5] 0xc:0x27 DW_TAG_compile_unit
142        .asciz  "Hand-written DWARF"            # DW_AT_producer
143        .short  33                              # DW_AT_language
144.Ls:
145        .byte   6                               # Abbrev [6] 0x1e:0xb DW_TAG_variable
146        .long   .Linfo_string3                  # DW_AT_name
147        .long   .LStruct_decl2-.Lcu_begin0       # DW_AT_type
148        .byte   9                               # DW_AT_location
149        .byte   3
150        .quad   s
151.LStruct_decl2:
152        .byte   8                               # Abbrev [8] 0x29:0x9 DW_TAG_structure_type
153        .long   .Linfo_string6                  # DW_AT_name
154                                                # DW_AT_declaration
155        .byte   0                               # End Of Children Mark
156.Ldebug_info_end1:
157
158.Lcu_begin1:
159        .long   .Ldebug_info_end2-.Ldebug_info_start2 # Length of Unit
160.Ldebug_info_start2:
161        .short  5                               # DWARF version number
162        .byte   1                               # DWARF Unit Type
163        .byte   8                               # Address Size (in bytes)
164        .long   .debug_abbrev                   # Offset Into Abbrev. Section
165        .byte   5                               # Abbrev [5] 0xc:0x27 DW_TAG_compile_unit
166        .asciz  "Hand-written DWARF"            # DW_AT_producer
167        .short  33                              # DW_AT_language
168.LStruct_decl:
169        .byte   7                               # Abbrev [7] 0x29:0x9 DW_TAG_structure_type
170                                                # DW_AT_declaration
171        .quad   4878254330033667422             # DW_AT_signature
172        .byte   0                               # End Of Children Mark
173.Ldebug_info_end2:
174
175        .section        .debug_str,"MS",@progbits,1
176.Linfo_string3:
177        .asciz  "s"                             # string offset=60
178.Linfo_string4:
179        .asciz  "member"                        # string offset=62
180.Linfo_string5:
181        .asciz  "int"                           # string offset=69
182.Linfo_string6:
183        .asciz  "Struct"                        # string offset=73
184
185        .section        .debug_names,"",@progbits
186        .long   .Lnames_end0-.Lnames_start0     # Header: unit length
187.Lnames_start0:
188        .short  5                               # Header: version
189        .short  0                               # Header: padding
190        .long   2                               # Header: compilation unit count
191        .long   1                               # Header: local type unit count
192        .long   0                               # Header: foreign type unit count
193        .long   0                               # Header: bucket count
194        .long   3                               # Header: name count
195        .long   .Lnames_abbrev_end0-.Lnames_abbrev_start0 # Header: abbreviation table size
196        .long   8                               # Header: augmentation string size
197        .ascii  "LLVM0700"                      # Header: augmentation string
198        .long   .Lcu_begin0                     # Compilation unit 0
199        .long   .Lcu_begin1                     # Compilation unit 1
200        .long   .Ltu_begin0                     # Type unit 0
201        .long   .Linfo_string6                  # String in Bucket 0: Struct
202        .long   .Linfo_string3                  # String in Bucket 1: s
203        .long   .Linfo_string5                  # String in Bucket 2: int
204        .long   .Lnames1-.Lnames_entries0       # Offset in Bucket 0
205        .long   .Lnames2-.Lnames_entries0       # Offset in Bucket 1
206        .long   .Lnames0-.Lnames_entries0       # Offset in Bucket 2
207.Lnames_abbrev_start0:
208        .byte   1                               # Abbrev code
209        .byte   19                              # DW_TAG_structure_type
210        .byte   2                               # DW_IDX_type_unit
211        .byte   11                              # DW_FORM_data1
212        .byte   3                               # DW_IDX_die_offset
213        .byte   19                              # DW_FORM_ref4
214        .byte   0                               # End of abbrev
215        .byte   0                               # End of abbrev
216        .byte   2                               # Abbrev code
217        .byte   52                              # DW_TAG_variable
218        .byte   1                               # DW_IDX_compile_unit
219        .byte   11                              # DW_FORM_data1
220        .byte   3                               # DW_IDX_die_offset
221        .byte   19                              # DW_FORM_ref4
222        .byte   0                               # End of abbrev
223        .byte   0                               # End of abbrev
224        .byte   3                               # Abbrev code
225        .byte   36                              # DW_TAG_base_type
226        .byte   2                               # DW_IDX_type_unit
227        .byte   11                              # DW_FORM_data1
228        .byte   3                               # DW_IDX_die_offset
229        .byte   19                              # DW_FORM_ref4
230        .byte   0                               # End of abbrev
231        .byte   0                               # End of abbrev
232        .byte   4                               # Abbrev code
233        .byte   19                              # DW_TAG_structure_type
234        .byte   1                               # DW_IDX_compile_unit
235        .byte   11                              # DW_FORM_data1
236        .byte   3                               # DW_IDX_die_offset
237        .byte   19                              # DW_FORM_ref4
238        .byte   0                               # End of abbrev
239        .byte   0                               # End of abbrev
240        .byte   0                               # End of abbrev list
241.Lnames_abbrev_end0:
242.Lnames_entries0:
243.Lnames1:
244        .byte   4                               # Abbreviation code
245        .byte   1                               # DW_IDX_compile_unit
246        .long   .LStruct_decl-.Lcu_begin1       # DW_IDX_die_offset
247        .byte   1                               # Abbreviation code
248        .byte   0                               # DW_IDX_type_unit
249        .long   .LStruct_def-.Ltu_begin0        # DW_IDX_die_offset
250        .byte   0
251                                        # End of list: Struct
252.Lnames2:
253        .byte   2                               # Abbreviation code
254        .byte   0                               # DW_IDX_compile_unit
255        .long   .Ls-.Lcu_begin0                 # DW_IDX_die_offset
256        .byte   0
257                                        # End of list: s
258.Lnames0:
259        .byte   3                               # Abbreviation code
260        .byte   0                               # DW_IDX_type_unit
261        .long   .Lint-.Ltu_begin0               # DW_IDX_die_offset
262        .byte   0
263                                        # End of list: int
264        .p2align        2, 0x0
265.Lnames_end0:
266