xref: /llvm-project/lldb/test/Shell/SymbolFile/DWARF/x86/DW_AT_const_value-bitfields.s (revision 8a64d80a959bf2844df33f9112e456f33de7b468)
1# RUN: llvm-mc -filetype=obj -o %t -triple x86_64-apple-macosx10.15.0 %s
2# RUN: %lldb %t -o "target variable constant" -b | FileCheck %s
3
4# CHECK: (lldb) target variable constant
5# CHECK: (U) constant = {
6# CHECK:   raw = 1688469761
7# CHECK:    = (a = 1, b = 1, c = 36, d = 2, e = 36, f = 1)
8# CHECK: }
9
10# This is testing when how ValueObjectVariable handles the case where the
11# DWARFExpression holds the data that represents a constant value.
12# Compile at -O1 allows us to capture this case. Below is the code used
13# to generate the assembly:
14#
15# typedef union
16# {
17#   unsigned raw;
18#   struct
19#   {
20#     unsigned a : 8;
21#     unsigned b : 8;
22#     unsigned c : 6;
23#     unsigned d : 2;
24#     unsigned e : 6;
25#     unsigned f : 2;
26#   } ;
27# } U;
28#
29# static U __attribute__((used)) _type_anchor;
30# static const int constant = 0x64A40101;
31#
32# int g() { return constant; }
33#
34# int main() {
35#   U u;
36#   u.raw = 0x64A40101;
37# }
38#
39# Compiled as follows:
40#
41#   clang -gdwarf-4 -O1 dw_at_const_value_bug.c -S -o dw_at_const_value_bug.s
42#
43# I was able to obtain a global of type U with DW_AT_const_value but was able
44# to using int. This required modifying the DW_AT_type of constant to be type
45# U. After that stripping as much of the assembly as possible to give us a
46# smaller reproducer.
47
48
49.zerofill __DATA,__bss,__type_anchor,4,2 ## @_type_anchor
50	.no_dead_strip	__type_anchor
51	.section	__DWARF,__debug_str,regular,debug
52Linfo_string:
53  .zero 90
54	.asciz	"constant"              ## string offset=90
55	.asciz	"int"                   ## string offset=99
56	.asciz	"_type_anchor"          ## string offset=103
57	.asciz	"U"                     ## string offset=116
58	.asciz	"raw"                   ## string offset=118
59	.asciz	"unsigned int"          ## string offset=122
60	.asciz	"a"                     ## string offset=135
61	.asciz	"b"                     ## string offset=137
62	.asciz	"c"                     ## string offset=139
63	.asciz	"d"                     ## string offset=141
64	.asciz	"e"                     ## string offset=143
65	.asciz	"f"                     ## string offset=145
66	.asciz	"g"                     ## string offset=147
67	.asciz	"main"                  ## string offset=149
68	.asciz	"u"                     ## string offset=154
69	.section	__DWARF,__debug_abbrev,regular,debug
70Lsection_abbrev:
71	.byte	1                       ## Abbreviation Code
72	.byte	17                      ## DW_TAG_compile_unit
73	.byte	1                       ## DW_CHILDREN_yes
74	.byte	37                      ## DW_AT_producer
75	.byte	14                      ## DW_FORM_strp
76	.byte	19                      ## DW_AT_language
77	.byte	5                       ## DW_FORM_data2
78	.byte	3                       ## DW_AT_name
79	.byte	14                      ## DW_FORM_strp
80	.byte	66                      ## DW_AT_stmt_list
81	.byte	23                      ## DW_FORM_sec_offset
82	.byte	27                      ## DW_AT_comp_dir
83	.byte	14                      ## DW_FORM_strp
84	.ascii	"\264B"                 ## DW_AT_GNU_pubnames
85	.byte	25                      ## DW_FORM_flag_present
86	.ascii	"\341\177"              ## DW_AT_APPLE_optimized
87	.byte	25                      ## DW_FORM_flag_present
88	.byte	17                      ## DW_AT_low_pc
89	.byte	1                       ## DW_FORM_addr
90	.byte	18                      ## DW_AT_high_pc
91	.byte	6                       ## DW_FORM_data4
92	.byte	0                       ## EOM(1)
93	.byte	0                       ## EOM(2)
94	.byte	2                       ## Abbreviation Code
95	.byte	52                      ## DW_TAG_variable
96	.byte	0                       ## DW_CHILDREN_no
97	.byte	3                       ## DW_AT_name
98	.byte	14                      ## DW_FORM_strp
99	.byte	73                      ## DW_AT_type
100	.byte	19                      ## DW_FORM_ref4
101	.byte	58                      ## DW_AT_decl_file
102	.byte	11                      ## DW_FORM_data1
103	.byte	59                      ## DW_AT_decl_line
104	.byte	11                      ## DW_FORM_data1
105	.byte	28                      ## DW_AT_const_value
106	.byte	15                      ## DW_FORM_udata
107	.byte	0                       ## EOM(1)
108	.byte	0                       ## EOM(2)
109	.byte	3                       ## Abbreviation Code
110	.byte	38                      ## DW_TAG_const_type
111	.byte	0                       ## DW_CHILDREN_no
112	.byte	73                      ## DW_AT_type
113	.byte	19                      ## DW_FORM_ref4
114	.byte	0                       ## EOM(1)
115	.byte	0                       ## EOM(2)
116	.byte	4                       ## Abbreviation Code
117	.byte	36                      ## DW_TAG_base_type
118	.byte	0                       ## DW_CHILDREN_no
119	.byte	3                       ## DW_AT_name
120	.byte	14                      ## DW_FORM_strp
121	.byte	62                      ## DW_AT_encoding
122	.byte	11                      ## DW_FORM_data1
123	.byte	11                      ## DW_AT_byte_size
124	.byte	11                      ## DW_FORM_data1
125	.byte	0                       ## EOM(1)
126	.byte	0                       ## EOM(2)
127	.byte	5                       ## Abbreviation Code
128	.byte	52                      ## DW_TAG_variable
129	.byte	0                       ## DW_CHILDREN_no
130	.byte	3                       ## DW_AT_name
131	.byte	14                      ## DW_FORM_strp
132	.byte	73                      ## DW_AT_type
133	.byte	19                      ## DW_FORM_ref4
134	.byte	58                      ## DW_AT_decl_file
135	.byte	11                      ## DW_FORM_data1
136	.byte	59                      ## DW_AT_decl_line
137	.byte	11                      ## DW_FORM_data1
138	.byte	2                       ## DW_AT_location
139	.byte	24                      ## DW_FORM_exprloc
140	.byte	0                       ## EOM(1)
141	.byte	0                       ## EOM(2)
142	.byte	6                       ## Abbreviation Code
143	.byte	22                      ## DW_TAG_typedef
144	.byte	0                       ## DW_CHILDREN_no
145	.byte	73                      ## DW_AT_type
146	.byte	19                      ## DW_FORM_ref4
147	.byte	3                       ## DW_AT_name
148	.byte	14                      ## DW_FORM_strp
149	.byte	58                      ## DW_AT_decl_file
150	.byte	11                      ## DW_FORM_data1
151	.byte	59                      ## DW_AT_decl_line
152	.byte	11                      ## DW_FORM_data1
153	.byte	0                       ## EOM(1)
154	.byte	0                       ## EOM(2)
155	.byte	7                       ## Abbreviation Code
156	.byte	23                      ## DW_TAG_union_type
157	.byte	1                       ## DW_CHILDREN_yes
158	.byte	11                      ## DW_AT_byte_size
159	.byte	11                      ## DW_FORM_data1
160	.byte	58                      ## DW_AT_decl_file
161	.byte	11                      ## DW_FORM_data1
162	.byte	59                      ## DW_AT_decl_line
163	.byte	11                      ## DW_FORM_data1
164	.byte	0                       ## EOM(1)
165	.byte	0                       ## EOM(2)
166	.byte	8                       ## Abbreviation Code
167	.byte	13                      ## DW_TAG_member
168	.byte	0                       ## DW_CHILDREN_no
169	.byte	3                       ## DW_AT_name
170	.byte	14                      ## DW_FORM_strp
171	.byte	73                      ## DW_AT_type
172	.byte	19                      ## DW_FORM_ref4
173	.byte	58                      ## DW_AT_decl_file
174	.byte	11                      ## DW_FORM_data1
175	.byte	59                      ## DW_AT_decl_line
176	.byte	11                      ## DW_FORM_data1
177	.byte	56                      ## DW_AT_data_member_location
178	.byte	11                      ## DW_FORM_data1
179	.byte	0                       ## EOM(1)
180	.byte	0                       ## EOM(2)
181	.byte	9                       ## Abbreviation Code
182	.byte	13                      ## DW_TAG_member
183	.byte	0                       ## DW_CHILDREN_no
184	.byte	73                      ## DW_AT_type
185	.byte	19                      ## DW_FORM_ref4
186	.byte	58                      ## DW_AT_decl_file
187	.byte	11                      ## DW_FORM_data1
188	.byte	59                      ## DW_AT_decl_line
189	.byte	11                      ## DW_FORM_data1
190	.byte	56                      ## DW_AT_data_member_location
191	.byte	11                      ## DW_FORM_data1
192	.byte	0                       ## EOM(1)
193	.byte	0                       ## EOM(2)
194	.byte	10                      ## Abbreviation Code
195	.byte	19                      ## DW_TAG_structure_type
196	.byte	1                       ## DW_CHILDREN_yes
197	.byte	11                      ## DW_AT_byte_size
198	.byte	11                      ## DW_FORM_data1
199	.byte	58                      ## DW_AT_decl_file
200	.byte	11                      ## DW_FORM_data1
201	.byte	59                      ## DW_AT_decl_line
202	.byte	11                      ## DW_FORM_data1
203	.byte	0                       ## EOM(1)
204	.byte	0                       ## EOM(2)
205	.byte	11                      ## Abbreviation Code
206	.byte	13                      ## DW_TAG_member
207	.byte	0                       ## DW_CHILDREN_no
208	.byte	3                       ## DW_AT_name
209	.byte	14                      ## DW_FORM_strp
210	.byte	73                      ## DW_AT_type
211	.byte	19                      ## DW_FORM_ref4
212	.byte	58                      ## DW_AT_decl_file
213	.byte	11                      ## DW_FORM_data1
214	.byte	59                      ## DW_AT_decl_line
215	.byte	11                      ## DW_FORM_data1
216	.byte	13                      ## DW_AT_bit_size
217	.byte	11                      ## DW_FORM_data1
218	.byte	107                     ## DW_AT_data_bit_offset
219	.byte	11                      ## DW_FORM_data1
220	.byte	0                       ## EOM(1)
221	.byte	0                       ## EOM(2)
222	.byte	12                      ## Abbreviation Code
223	.byte	46                      ## DW_TAG_subprogram
224	.byte	0                       ## DW_CHILDREN_no
225	.byte	17                      ## DW_AT_low_pc
226	.byte	1                       ## DW_FORM_addr
227	.byte	18                      ## DW_AT_high_pc
228	.byte	6                       ## DW_FORM_data4
229	.byte	64                      ## DW_AT_frame_base
230	.byte	24                      ## DW_FORM_exprloc
231	.byte	122                     ## DW_AT_call_all_calls
232	.byte	25                      ## DW_FORM_flag_present
233	.byte	3                       ## DW_AT_name
234	.byte	14                      ## DW_FORM_strp
235	.byte	58                      ## DW_AT_decl_file
236	.byte	11                      ## DW_FORM_data1
237	.byte	59                      ## DW_AT_decl_line
238	.byte	11                      ## DW_FORM_data1
239	.byte	73                      ## DW_AT_type
240	.byte	19                      ## DW_FORM_ref4
241	.byte	63                      ## DW_AT_external
242	.byte	25                      ## DW_FORM_flag_present
243	.ascii	"\341\177"              ## DW_AT_APPLE_optimized
244	.byte	25                      ## DW_FORM_flag_present
245	.byte	0                       ## EOM(1)
246	.byte	0                       ## EOM(2)
247	.byte	13                      ## Abbreviation Code
248	.byte	46                      ## DW_TAG_subprogram
249	.byte	1                       ## DW_CHILDREN_yes
250	.byte	17                      ## DW_AT_low_pc
251	.byte	1                       ## DW_FORM_addr
252	.byte	18                      ## DW_AT_high_pc
253	.byte	6                       ## DW_FORM_data4
254	.byte	64                      ## DW_AT_frame_base
255	.byte	24                      ## DW_FORM_exprloc
256	.byte	122                     ## DW_AT_call_all_calls
257	.byte	25                      ## DW_FORM_flag_present
258	.byte	3                       ## DW_AT_name
259	.byte	14                      ## DW_FORM_strp
260	.byte	58                      ## DW_AT_decl_file
261	.byte	11                      ## DW_FORM_data1
262	.byte	59                      ## DW_AT_decl_line
263	.byte	11                      ## DW_FORM_data1
264	.byte	73                      ## DW_AT_type
265	.byte	19                      ## DW_FORM_ref4
266	.byte	63                      ## DW_AT_external
267	.byte	25                      ## DW_FORM_flag_present
268	.ascii	"\341\177"              ## DW_AT_APPLE_optimized
269	.byte	25                      ## DW_FORM_flag_present
270	.byte	0                       ## EOM(1)
271	.byte	0                       ## EOM(2)
272	.byte	14                      ## Abbreviation Code
273	.byte	52                      ## DW_TAG_variable
274	.byte	0                       ## DW_CHILDREN_no
275	.byte	28                      ## DW_AT_const_value
276	.byte	15                      ## DW_FORM_udata
277	.byte	3                       ## DW_AT_name
278	.byte	14                      ## DW_FORM_strp
279	.byte	58                      ## DW_AT_decl_file
280	.byte	11                      ## DW_FORM_data1
281	.byte	59                      ## DW_AT_decl_line
282	.byte	11                      ## DW_FORM_data1
283	.byte	73                      ## DW_AT_type
284	.byte	19                      ## DW_FORM_ref4
285	.byte	0                       ## EOM(1)
286	.byte	0                       ## EOM(2)
287	.byte	0                       ## EOM(3)
288	.section	__DWARF,__debug_info,regular,debug
289Lsection_info:
290Lcu_begin0:
291.set Lset0, Ldebug_info_end0-Ldebug_info_start0 ## Length of Unit
292	.long	Lset0
293Ldebug_info_start0:
294	.short	4                       ## DWARF version number
295.set Lset1, Lsection_abbrev-Lsection_abbrev ## Offset Into Abbrev. Section
296	.long	Lset1
297	.byte	8                       ## Address Size (in bytes)
298	.byte	1                       ## Abbrev [1] 0xb:0x112 DW_TAG_compile_unit
299	.long	0                       ## DW_AT_producer
300	.short	12                      ## DW_AT_language
301	.long	47                      ## DW_AT_name
302	.long 0                       ## DW_AT_stmt_list
303	.long	71                      ## DW_AT_comp_dir
304                                        ## DW_AT_GNU_pubnames
305                                        ## DW_AT_APPLE_optimized
306	.quad	0            ## DW_AT_low_pc
307	.long 0
308	.byte	2                       ## Abbrev [2] 0x2a:0x10 DW_TAG_variable
309	.long	90                      ## DW_AT_name
310	.long	91                      ## DW_AT_type
311	.byte	1                       ## DW_AT_decl_file
312	.byte	16                      ## DW_AT_decl_line
313	.ascii	"\201\202\220\245\006"  ## DW_AT_const_value
314	.byte	3                       ## Abbrev [3] 0x3a:0x5 DW_TAG_const_type
315	.long	63                      ## DW_AT_type
316	.byte	4                       ## Abbrev [4] 0x3f:0x7 DW_TAG_base_type
317	.long	99                      ## DW_AT_name
318	.byte	5                       ## DW_AT_encoding
319	.byte	4                       ## DW_AT_byte_size
320	.byte	5                       ## Abbrev [5] 0x46:0x15 DW_TAG_variable
321	.long	103                     ## DW_AT_name
322	.long	91                      ## DW_AT_type
323	.byte	1                       ## DW_AT_decl_file
324	.byte	15                      ## DW_AT_decl_line
325	.byte	9                       ## DW_AT_location
326	.byte	3
327	.quad	__type_anchor
328	.byte	6                       ## Abbrev [6] 0x5b:0xb DW_TAG_typedef
329	.long	102                     ## DW_AT_type
330	.long	116                     ## DW_AT_name
331	.byte	1                       ## DW_AT_decl_file
332	.byte	13                      ## DW_AT_decl_line
333	.byte	7                       ## Abbrev [7] 0x66:0x6c DW_TAG_union_type
334	.byte	4                       ## DW_AT_byte_size
335	.byte	1                       ## DW_AT_decl_file
336	.byte	1                       ## DW_AT_decl_line
337	.byte	8                       ## Abbrev [8] 0x6a:0xc DW_TAG_member
338	.long	118                     ## DW_AT_name
339	.long	210                     ## DW_AT_type
340	.byte	1                       ## DW_AT_decl_file
341	.byte	3                       ## DW_AT_decl_line
342	.byte	0                       ## DW_AT_data_member_location
343	.byte	9                       ## Abbrev [9] 0x76:0x8 DW_TAG_member
344	.long	126                     ## DW_AT_type
345	.byte	1                       ## DW_AT_decl_file
346	.byte	4                       ## DW_AT_decl_line
347	.byte	0                       ## DW_AT_data_member_location
348	.byte	10                      ## Abbrev [10] 0x7e:0x53 DW_TAG_structure_type
349	.byte	4                       ## DW_AT_byte_size
350	.byte	1                       ## DW_AT_decl_file
351	.byte	4                       ## DW_AT_decl_line
352	.byte	11                      ## Abbrev [11] 0x82:0xd DW_TAG_member
353	.long	135                     ## DW_AT_name
354	.long	210                     ## DW_AT_type
355	.byte	1                       ## DW_AT_decl_file
356	.byte	6                       ## DW_AT_decl_line
357	.byte	8                       ## DW_AT_bit_size
358	.byte	0                       ## DW_AT_data_bit_offset
359	.byte	11                      ## Abbrev [11] 0x8f:0xd DW_TAG_member
360	.long	137                     ## DW_AT_name
361	.long	210                     ## DW_AT_type
362	.byte	1                       ## DW_AT_decl_file
363	.byte	7                       ## DW_AT_decl_line
364	.byte	8                       ## DW_AT_bit_size
365	.byte	8                       ## DW_AT_data_bit_offset
366	.byte	11                      ## Abbrev [11] 0x9c:0xd DW_TAG_member
367	.long	139                     ## DW_AT_name
368	.long	210                     ## DW_AT_type
369	.byte	1                       ## DW_AT_decl_file
370	.byte	8                       ## DW_AT_decl_line
371	.byte	6                       ## DW_AT_bit_size
372	.byte	16                      ## DW_AT_data_bit_offset
373	.byte	11                      ## Abbrev [11] 0xa9:0xd DW_TAG_member
374	.long	141                     ## DW_AT_name
375	.long	210                     ## DW_AT_type
376	.byte	1                       ## DW_AT_decl_file
377	.byte	9                       ## DW_AT_decl_line
378	.byte	2                       ## DW_AT_bit_size
379	.byte	22                      ## DW_AT_data_bit_offset
380	.byte	11                      ## Abbrev [11] 0xb6:0xd DW_TAG_member
381	.long	143                     ## DW_AT_name
382	.long	210                     ## DW_AT_type
383	.byte	1                       ## DW_AT_decl_file
384	.byte	10                      ## DW_AT_decl_line
385	.byte	6                       ## DW_AT_bit_size
386	.byte	24                      ## DW_AT_data_bit_offset
387	.byte	11                      ## Abbrev [11] 0xc3:0xd DW_TAG_member
388	.long	145                     ## DW_AT_name
389	.long	210                     ## DW_AT_type
390	.byte	1                       ## DW_AT_decl_file
391	.byte	11                      ## DW_AT_decl_line
392	.byte	2                       ## DW_AT_bit_size
393	.byte	30                      ## DW_AT_data_bit_offset
394	.byte	0                       ## End Of Children Mark
395	.byte	0                       ## End Of Children Mark
396	.byte	4                       ## Abbrev [4] 0xd2:0x7 DW_TAG_base_type
397	.long	122                     ## DW_AT_name
398	.byte	7                       ## DW_AT_encoding
399	.byte	4                       ## DW_AT_byte_size
400	.byte	14                      ## Abbrev [14] 0x10b:0x10 DW_TAG_variable
401	.ascii	"\201\202\220\245\006"  ## DW_AT_const_value
402	.long	154                     ## DW_AT_name
403	.byte	1                       ## DW_AT_decl_file
404	.byte	21                      ## DW_AT_decl_line
405	.long	91                      ## DW_AT_type
406	.byte	0                       ## End Of Children Mark
407	.byte	0                       ## End Of Children Mark
408Ldebug_info_end0:
409