xref: /llvm-project/lldb/test/Shell/SymbolFile/DWARF/x86/DW_OP_div-with-signed.s (revision 16c2872d7b09eee67dd0c7ef6b5dd3c3724d3cfc)
1  # Test handling of values represented via DW_OP_div
2  # RUN: %clang -c --target=x86_64-pc-linux -o %t %s
3  # RUN: %lldb %t -o "expression -T -- g" -o "exit" | FileCheck %s
4
5  # Failing case was:
6  # (int) $0 = 0
7  # CHECK: (int) $0 = 2
8  #
9  # This file is crafted by hand on the basis of a very simple C program.
10
11  # The original (NOT THIS FILE) error-triggering code is:
12  # #include "stdint.h"
13  # static volatile uint64_t g = 0;
14  #  static const int32_t f()
15  #  {
16  #    uint32_t i;
17  #        for (i = 0; (i != 10); i++)
18  #              ++g;
19  #        return 0;
20  #
21  #  }
22  #
23  #  int main()
24  #  {
25  #    f();
26  #    return 0;
27  #
28  #  }
29	# When the above code is compiled by Clang 15.0.7 with -O1, it generates desired DW_OP_div for testing.
30	# Due to cross-platform issue, this case is hand-crafted for testing.
31
32	.text
33	.file "DW_OP_div-with-signed.c"
34	.file	0 "DW_OP_div-with-signed.c"     # Dummy file
35	.globl	main                          # -- Begin function main
36	.p2align	4, 0x90
37	.type	main,@function
38main:                                   # @main
39.Lfunc_begin0:
40	.loc	0 4 0                           # DW_OP_div-with-signed.c:4:0
41	.cfi_startproc
42# %bb.0:
43	.loc	0 5 5 prologue_end              # DW_OP_div-with-signed.c:5:5
44	xorl	%eax, %eax
45	retq
46.Ltmp0:
47.Lfunc_end0:
48	.size	main, .Lfunc_end0-main
49	.cfi_endproc
50                                        # -- End function
51	.type	g,@object                       # @g
52	.data
53	.globl	g
54	.p2align	2, 0x0
55g:
56	.long	3735928559                      # 0xdeadbeef
57	.size	g, 4
58
59	.section	.debug_abbrev,"",@progbits
60	.byte	1                               # Abbreviation Code
61	.byte	17                              # DW_TAG_compile_unit
62	.byte	1                               # DW_CHILDREN_yes
63	.byte	37                              # DW_AT_producer
64	.byte	37                              # DW_FORM_strx1
65	.byte	19                              # DW_AT_language
66	.byte	5                               # DW_FORM_data2
67	.byte	3                               # DW_AT_name
68	.byte	37                              # DW_FORM_strx1
69	.byte	114                             # DW_AT_str_offsets_base
70	.byte	23                              # DW_FORM_sec_offset
71	.byte	16                              # DW_AT_stmt_list
72	.byte	23                              # DW_FORM_sec_offset
73	.byte	27                              # DW_AT_comp_dir
74	.byte	37                              # DW_FORM_strx1
75	.byte	17                              # DW_AT_low_pc
76	.byte	27                              # DW_FORM_addrx
77	.byte	18                              # DW_AT_high_pc
78	.byte	6                               # DW_FORM_data4
79	.byte	115                             # DW_AT_addr_base
80	.byte	23                              # DW_FORM_sec_offset
81	.byte	0                               # EOM(1)
82	.byte	0                               # EOM(2)
83	.byte	2                               # Abbreviation Code
84	.byte	52                              # DW_TAG_variable
85	.byte	0                               # DW_CHILDREN_no
86	.byte	3                               # DW_AT_name
87	.byte	37                              # DW_FORM_strx1
88	.byte	73                              # DW_AT_type
89	.byte	19                              # DW_FORM_ref4
90	.byte	63                              # DW_AT_external
91	.byte	25                              # DW_FORM_flag_present
92	.byte	58                              # DW_AT_decl_file
93	.byte	11                              # DW_FORM_data1
94	.byte	59                              # DW_AT_decl_line
95	.byte	11                              # DW_FORM_data1
96	.byte	2                               # DW_AT_location
97	.byte	24                              # DW_FORM_exprloc
98	.byte	0                               # EOM(1)
99	.byte	0                               # EOM(2)
100	.byte	3                               # Abbreviation Code
101	.byte	36                              # DW_TAG_base_type
102	.byte	0                               # DW_CHILDREN_no
103	.byte	3                               # DW_AT_name
104	.byte	37                              # DW_FORM_strx1
105	.byte	62                              # DW_AT_encoding
106	.byte	11                              # DW_FORM_data1
107	.byte	11                              # DW_AT_byte_size
108	.byte	11                              # DW_FORM_data1
109	.byte	0                               # EOM(1)
110	.byte	0                               # EOM(2)
111	.byte	4                               # Abbreviation Code
112	.byte	46                              # DW_TAG_subprogram
113	.byte	0                               # DW_CHILDREN_no
114	.byte	17                              # DW_AT_low_pc
115	.byte	27                              # DW_FORM_addrx
116	.byte	18                              # DW_AT_high_pc
117	.byte	6                               # DW_FORM_data4
118	.byte	64                              # DW_AT_frame_base
119	.byte	24                              # DW_FORM_exprloc
120	.byte	122                             # DW_AT_call_all_calls
121	.byte	25                              # DW_FORM_flag_present
122	.byte	3                               # DW_AT_name
123	.byte	37                              # DW_FORM_strx1
124	.byte	58                              # DW_AT_decl_file
125	.byte	11                              # DW_FORM_data1
126	.byte	59                              # DW_AT_decl_line
127	.byte	11                              # DW_FORM_data1
128	.byte	73                              # DW_AT_type
129	.byte	19                              # DW_FORM_ref4
130	.byte	63                              # DW_AT_external
131	.byte	25                              # DW_FORM_flag_present
132	.byte	0                               # EOM(1)
133	.byte	0                               # EOM(2)
134	.byte	0                               # EOM(3)
135	.section	.debug_info,"",@progbits
136.Lcu_begin0:
137	.long	.Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
138.Ldebug_info_start0:
139	.short	5                               # DWARF version number
140	.byte	1                               # DWARF Unit Type
141	.byte	8                               # Address Size (in bytes)
142	.long	.debug_abbrev                   # Offset Into Abbrev. Section
143	.byte	1                               # Abbrev [1] 0xc:0x36 DW_TAG_compile_unit
144	.byte	0                               # DW_AT_producer
145	.short	29                              # DW_AT_language
146	.byte	1                               # DW_AT_name
147	.long	.Lstr_offsets_base0             # DW_AT_str_offsets_base
148	.long	.Lline_table_start0             # DW_AT_stmt_list
149	.byte	2                               # DW_AT_comp_dir
150	.byte	1                               # DW_AT_low_pc
151	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
152	.long	.Laddr_table_base0              # DW_AT_addr_base
153	.byte	2                               # Abbrev [2] 0x23:0xb DW_TAG_variable
154	.byte	3                               # DW_AT_name
155	.long	60                              # DW_AT_type
156                                        # DW_AT_external
157	.byte	0                               # DW_AT_decl_file
158	.byte	1                               # DW_AT_decl_line
159	.byte	16                               # DW_AT_location
160	.byte	49
161	.byte	49
162	.byte	16                              # DW_OP_constu
163	.byte	255                             # 4294967295
164	.byte	255                             #
165	.byte	255                             #
166	.byte	255                             #
167	.byte	15                              #
168	.byte	26                              # DW_OP_and
169	.byte	17                              # DW_OP_consts
170	.byte	3                               # 3
171	.byte	28                              # DW_OP_minus
172	.byte	17                              # DW_OP_consts
173	.byte	127                             # -1
174	.byte	27                              # DW_OP_div
175	.byte	159
176	.byte	3                               # Abbrev [3] 0x2e:0x4 DW_TAG_base_type
177	.byte	4                               # DW_AT_name
178	.byte	5                               # DW_AT_encoding
179	.byte	4                               # DW_AT_byte_size
180	.byte	4                               # Abbrev [4] 0x32:0xf DW_TAG_subprogram
181	.byte	1                               # DW_AT_low_pc
182	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
183	.byte	1                               # DW_AT_frame_base
184	.byte	87
185                                        # DW_AT_call_all_calls
186	.byte	5                               # DW_AT_name
187	.byte	0                               # DW_AT_decl_file
188	.byte	3                               # DW_AT_decl_line
189	.long	60                              # DW_AT_type
190                                        # DW_AT_external
191	.byte	0                               # End Of Children Mark
192.Ldebug_info_end0:
193	.section	.debug_str_offsets,"",@progbits
194	.long	28                              # Length of String Offsets Set
195	.short	5
196	.short	0
197.Lstr_offsets_base0:
198	.section	.debug_str,"MS",@progbits,1
199.Linfo_string0:
200	.asciz	"clang version 17.0.0 (https://github.com/llvm/llvm-project.git 1b18ab358a8e91e69a54f676c77f6a4cda8ba02d)" # string offset=0
201.Linfo_string1:
202	.asciz	"DW_OP_div-with-signed.c"       # string offset=105
203.Linfo_string2:
204	.asciz	"" # string offset=129
205.Linfo_string3:
206	.asciz	"g"                             # string offset=166
207.Linfo_string4:
208	.asciz	"int"                           # string offset=168
209.Linfo_string5:
210	.asciz	"main"                          # string offset=172
211	.section	.debug_str_offsets,"",@progbits
212	.long	.Linfo_string0
213	.long	.Linfo_string1
214	.long	.Linfo_string2
215	.long	.Linfo_string3
216	.long	.Linfo_string4
217	.long	.Linfo_string5
218	.section	.debug_addr,"",@progbits
219	.long	.Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution
220.Ldebug_addr_start0:
221	.short	5                               # DWARF version number
222	.byte	8                               # Address size
223	.byte	0                               # Segment selector size
224.Laddr_table_base0:
225	.quad	g
226	.quad	.Lfunc_begin0
227.Ldebug_addr_end0:
228	.ident	"clang version 17.0.0 (https://github.com/llvm/llvm-project.git 1b18ab358a8e91e69a54f676c77f6a4cda8ba02d)"
229	.section	".note.GNU-stack","",@progbits
230	.addrsig
231	.section	.debug_line,"",@progbits
232.Lline_table_start0:
233