xref: /llvm-project/lldb/test/Shell/SymbolFile/DWARF/x86/dwarf5-split.s (revision 8a64d80a959bf2844df33f9112e456f33de7b468)
1*8a64d80aSDavid Spickett## This test checks that lldb reads debug info from a dwp file when the dwo_id
2*8a64d80aSDavid Spickett## is in a DWARF5 CU header instead of a DW_AT_GNU_dwo_id attribute.
3*8a64d80aSDavid Spickett
4*8a64d80aSDavid Spickett# RUN: llvm-mc --filetype=obj --triple x86_64 %s -o %t --defsym MAIN=1
5*8a64d80aSDavid Spickett# RUN: llvm-mc --filetype=obj --triple x86_64 %s -o %t.dwp
6*8a64d80aSDavid Spickett# RUN: %lldb %t -o "target variable i" -b | FileCheck %s
7*8a64d80aSDavid Spickett# CHECK: (int) i = 42
8*8a64d80aSDavid Spickett
9*8a64d80aSDavid Spickett.ifdef MAIN
10*8a64d80aSDavid Spickett## Main file
11*8a64d80aSDavid Spickett	.text
12*8a64d80aSDavid Spickett	.globl	main                            # -- Begin function main
13*8a64d80aSDavid Spickettmain:                                   # @main
14*8a64d80aSDavid Spickett.Lfunc_begin0:
15*8a64d80aSDavid Spickett	pushq	%rbp
16*8a64d80aSDavid Spickett	movq	%rsp, %rbp
17*8a64d80aSDavid Spickett	xorl	%eax, %eax
18*8a64d80aSDavid Spickett	popq	%rbp
19*8a64d80aSDavid Spickett	retq
20*8a64d80aSDavid Spickett.Lfunc_end0:
21*8a64d80aSDavid Spickett                                        # -- End function
22*8a64d80aSDavid Spickett	.data
23*8a64d80aSDavid Spicketti:
24*8a64d80aSDavid Spickett	.long	42                              # 0x2a
25*8a64d80aSDavid Spickett
26*8a64d80aSDavid Spickett
27*8a64d80aSDavid Spickett	.section	.debug_abbrev,"",@progbits
28*8a64d80aSDavid Spickett	.byte	1                               # Abbreviation Code
29*8a64d80aSDavid Spickett	.byte	74                              # DW_TAG_skeleton_unit
30*8a64d80aSDavid Spickett	.byte	0                               # DW_CHILDREN_no
31*8a64d80aSDavid Spickett	.byte	118                             # DW_AT_dwo_name
32*8a64d80aSDavid Spickett	.byte	8                               # DW_FORM_string
33*8a64d80aSDavid Spickett	.byte	17                              # DW_AT_low_pc
34*8a64d80aSDavid Spickett	.byte	27                              # DW_FORM_addrx
35*8a64d80aSDavid Spickett	.byte	18                              # DW_AT_high_pc
36*8a64d80aSDavid Spickett	.byte	6                               # DW_FORM_data4
37*8a64d80aSDavid Spickett	.byte	115                             # DW_AT_addr_base
38*8a64d80aSDavid Spickett	.byte	23                              # DW_FORM_sec_offset
39*8a64d80aSDavid Spickett	.byte	0                               # EOM(1)
40*8a64d80aSDavid Spickett	.byte	0                               # EOM(2)
41*8a64d80aSDavid Spickett	.byte	0                               # EOM(3)
42*8a64d80aSDavid Spickett
43*8a64d80aSDavid Spickett
44*8a64d80aSDavid Spickett	.section	.debug_info,"",@progbits
45*8a64d80aSDavid Spickett.Lcu_begin0:
46*8a64d80aSDavid Spickett	.long	.Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
47*8a64d80aSDavid Spickett.Ldebug_info_start0:
48*8a64d80aSDavid Spickett	.short	5                             # DWARF version number
49*8a64d80aSDavid Spickett	.byte	4                               # DWARF Unit Type
50*8a64d80aSDavid Spickett	.byte	8                               # Address Size (in bytes)
51*8a64d80aSDavid Spickett	.long	.debug_abbrev                   # Offset Into Abbrev. Section
52*8a64d80aSDavid Spickett	.quad	1026699901672188186             # dwo_id
53*8a64d80aSDavid Spickett	.byte	1                               # Abbrev [1] 0x14:0x14 DW_TAG_skeleton_unit
54*8a64d80aSDavid Spickett	.asciz "hello.dwo"                    # DW_AT_dwo_name
55*8a64d80aSDavid Spickett	.byte	1                               # DW_AT_low_pc
56*8a64d80aSDavid Spickett	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
57*8a64d80aSDavid Spickett	.long	.Laddr_table_base0              # DW_AT_addr_base
58*8a64d80aSDavid Spickett.Ldebug_info_end0:
59*8a64d80aSDavid Spickett
60*8a64d80aSDavid Spickett	.section	.debug_addr,"",@progbits
61*8a64d80aSDavid Spickett	.long	.Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution
62*8a64d80aSDavid Spickett.Ldebug_addr_start0:
63*8a64d80aSDavid Spickett	.short	5                               # DWARF version number
64*8a64d80aSDavid Spickett	.byte	8                               # Address size
65*8a64d80aSDavid Spickett	.byte	0                               # Segment selector size
66*8a64d80aSDavid Spickett.Laddr_table_base0:
67*8a64d80aSDavid Spickett	.quad	i
68*8a64d80aSDavid Spickett	.quad	.Lfunc_begin0
69*8a64d80aSDavid Spickett.Ldebug_addr_end0:
70*8a64d80aSDavid Spickett
71*8a64d80aSDavid Spickett.else
72*8a64d80aSDavid Spickett## DWP file
73*8a64d80aSDavid Spickett	.section	.debug_str_offsets.dwo,"e",@progbits
74*8a64d80aSDavid Spickett	.long	28
75*8a64d80aSDavid Spickett	.short	5
76*8a64d80aSDavid Spickett	.short	0
77*8a64d80aSDavid Spickett
78*8a64d80aSDavid Spickett
79*8a64d80aSDavid Spickett	.section	.debug_str.dwo,"eMS",@progbits,1
80*8a64d80aSDavid Spickett.Linfo_string0:
81*8a64d80aSDavid Spickett	.asciz	"i"
82*8a64d80aSDavid Spickett.Linfo_string1:
83*8a64d80aSDavid Spickett	.asciz	"int"
84*8a64d80aSDavid Spickett.Linfo_string2:
85*8a64d80aSDavid Spickett	.asciz	"main"
86*8a64d80aSDavid Spickett.Linfo_string3:
87*8a64d80aSDavid Spickett	.asciz	"hand-tuned clang output"
88*8a64d80aSDavid Spickett.Linfo_string4:
89*8a64d80aSDavid Spickett	.asciz	"hello.c"
90*8a64d80aSDavid Spickett.Linfo_string5:
91*8a64d80aSDavid Spickett	.asciz	"hello.dwo"
92*8a64d80aSDavid Spickett
93*8a64d80aSDavid Spickett
94*8a64d80aSDavid Spickett	.section	.debug_str_offsets.dwo,"e",@progbits
95*8a64d80aSDavid Spickett	.long	.Linfo_string0-.debug_str.dwo
96*8a64d80aSDavid Spickett	.long	.Linfo_string1-.debug_str.dwo
97*8a64d80aSDavid Spickett	.long	.Linfo_string2-.debug_str.dwo
98*8a64d80aSDavid Spickett	.long	.Linfo_string3-.debug_str.dwo
99*8a64d80aSDavid Spickett	.long	.Linfo_string4-.debug_str.dwo
100*8a64d80aSDavid Spickett	.long	.Linfo_string5-.debug_str.dwo
101*8a64d80aSDavid Spickett.Lstr_offsets_end:
102*8a64d80aSDavid Spickett
103*8a64d80aSDavid Spickett
104*8a64d80aSDavid Spickett	.section	.debug_info.dwo,"e",@progbits
105*8a64d80aSDavid Spickett	.long	.Ldebug_info_dwo_end0-.Ldebug_info_dwo_start0 # Length of Unit
106*8a64d80aSDavid Spickett.Ldebug_info_dwo_start0:
107*8a64d80aSDavid Spickett	.short	5                               # DWARF version number
108*8a64d80aSDavid Spickett	.byte	5                               # DWARF Unit Type
109*8a64d80aSDavid Spickett	.byte	8                               # Address Size (in bytes)
110*8a64d80aSDavid Spickett	.long	0                               # Offset Into Abbrev. Section
111*8a64d80aSDavid Spickett	.quad	1026699901672188186             # dwo_id
112*8a64d80aSDavid Spickett	.byte	1                               # Abbrev [1] 0x14:0x25 DW_TAG_compile_unit
113*8a64d80aSDavid Spickett	.byte	3                               # DW_AT_producer
114*8a64d80aSDavid Spickett	.short	12                              # DW_AT_language
115*8a64d80aSDavid Spickett	.byte	4                               # DW_AT_name
116*8a64d80aSDavid Spickett	.byte	5                               # DW_AT_dwo_name
117*8a64d80aSDavid Spickett	.byte	2                               # Abbrev [2] 0x1a:0xb DW_TAG_variable
118*8a64d80aSDavid Spickett	.byte	0                               # DW_AT_name
119*8a64d80aSDavid Spickett	.long	37                              # DW_AT_type
120*8a64d80aSDavid Spickett                                        # DW_AT_external
121*8a64d80aSDavid Spickett	.byte	0                               # DW_AT_decl_file
122*8a64d80aSDavid Spickett	.byte	2                               # DW_AT_decl_line
123*8a64d80aSDavid Spickett	.byte	2                               # DW_AT_location
124*8a64d80aSDavid Spickett	.byte	161
125*8a64d80aSDavid Spickett	.byte	0
126*8a64d80aSDavid Spickett	.byte	3                               # Abbrev [3] 0x25:0x4 DW_TAG_base_type
127*8a64d80aSDavid Spickett	.byte	1                               # DW_AT_name
128*8a64d80aSDavid Spickett	.byte	5                               # DW_AT_encoding
129*8a64d80aSDavid Spickett	.byte	4                               # DW_AT_byte_size
130*8a64d80aSDavid Spickett	.byte	4                               # Abbrev [4] 0x29:0xf DW_TAG_subprogram
131*8a64d80aSDavid Spickett	.byte	1                               # DW_AT_low_pc
132*8a64d80aSDavid Spickett	.long	8       # DW_AT_high_pc
133*8a64d80aSDavid Spickett	.byte	1                               # DW_AT_frame_base
134*8a64d80aSDavid Spickett	.byte	86
135*8a64d80aSDavid Spickett	.byte	2                               # DW_AT_name
136*8a64d80aSDavid Spickett	.byte	0                               # DW_AT_decl_file
137*8a64d80aSDavid Spickett	.byte	3                               # DW_AT_decl_line
138*8a64d80aSDavid Spickett	.long	37                              # DW_AT_type
139*8a64d80aSDavid Spickett                                        # DW_AT_external
140*8a64d80aSDavid Spickett	.byte	0                               # End Of Children Mark
141*8a64d80aSDavid Spickett.Ldebug_info_dwo_end0:
142*8a64d80aSDavid Spickett
143*8a64d80aSDavid Spickett
144*8a64d80aSDavid Spickett	.section	.debug_abbrev.dwo,"e",@progbits
145*8a64d80aSDavid Spickett	.byte	1                               # Abbreviation Code
146*8a64d80aSDavid Spickett	.byte	17                              # DW_TAG_compile_unit
147*8a64d80aSDavid Spickett	.byte	1                               # DW_CHILDREN_yes
148*8a64d80aSDavid Spickett	.byte	37                              # DW_AT_producer
149*8a64d80aSDavid Spickett	.byte	37                              # DW_FORM_strx1
150*8a64d80aSDavid Spickett	.byte	19                              # DW_AT_language
151*8a64d80aSDavid Spickett	.byte	5                               # DW_FORM_data2
152*8a64d80aSDavid Spickett	.byte	3                               # DW_AT_name
153*8a64d80aSDavid Spickett	.byte	37                              # DW_FORM_strx1
154*8a64d80aSDavid Spickett	.byte	118                             # DW_AT_dwo_name
155*8a64d80aSDavid Spickett	.byte	37                              # DW_FORM_strx1
156*8a64d80aSDavid Spickett	.byte	0                               # EOM(1)
157*8a64d80aSDavid Spickett	.byte	0                               # EOM(2)
158*8a64d80aSDavid Spickett	.byte	2                               # Abbreviation Code
159*8a64d80aSDavid Spickett	.byte	52                              # DW_TAG_variable
160*8a64d80aSDavid Spickett	.byte	0                               # DW_CHILDREN_no
161*8a64d80aSDavid Spickett	.byte	3                               # DW_AT_name
162*8a64d80aSDavid Spickett	.byte	37                              # DW_FORM_strx1
163*8a64d80aSDavid Spickett	.byte	73                              # DW_AT_type
164*8a64d80aSDavid Spickett	.byte	19                              # DW_FORM_ref4
165*8a64d80aSDavid Spickett	.byte	63                              # DW_AT_external
166*8a64d80aSDavid Spickett	.byte	25                              # DW_FORM_flag_present
167*8a64d80aSDavid Spickett	.byte	58                              # DW_AT_decl_file
168*8a64d80aSDavid Spickett	.byte	11                              # DW_FORM_data1
169*8a64d80aSDavid Spickett	.byte	59                              # DW_AT_decl_line
170*8a64d80aSDavid Spickett	.byte	11                              # DW_FORM_data1
171*8a64d80aSDavid Spickett	.byte	2                               # DW_AT_location
172*8a64d80aSDavid Spickett	.byte	24                              # DW_FORM_exprloc
173*8a64d80aSDavid Spickett	.byte	0                               # EOM(1)
174*8a64d80aSDavid Spickett	.byte	0                               # EOM(2)
175*8a64d80aSDavid Spickett	.byte	3                               # Abbreviation Code
176*8a64d80aSDavid Spickett	.byte	36                              # DW_TAG_base_type
177*8a64d80aSDavid Spickett	.byte	0                               # DW_CHILDREN_no
178*8a64d80aSDavid Spickett	.byte	3                               # DW_AT_name
179*8a64d80aSDavid Spickett	.byte	37                              # DW_FORM_strx1
180*8a64d80aSDavid Spickett	.byte	62                              # DW_AT_encoding
181*8a64d80aSDavid Spickett	.byte	11                              # DW_FORM_data1
182*8a64d80aSDavid Spickett	.byte	11                              # DW_AT_byte_size
183*8a64d80aSDavid Spickett	.byte	11                              # DW_FORM_data1
184*8a64d80aSDavid Spickett	.byte	0                               # EOM(1)
185*8a64d80aSDavid Spickett	.byte	0                               # EOM(2)
186*8a64d80aSDavid Spickett	.byte	4                               # Abbreviation Code
187*8a64d80aSDavid Spickett	.byte	46                              # DW_TAG_subprogram
188*8a64d80aSDavid Spickett	.byte	0                               # DW_CHILDREN_no
189*8a64d80aSDavid Spickett	.byte	17                              # DW_AT_low_pc
190*8a64d80aSDavid Spickett	.byte	27                              # DW_FORM_addrx
191*8a64d80aSDavid Spickett	.byte	18                              # DW_AT_high_pc
192*8a64d80aSDavid Spickett	.byte	6                               # DW_FORM_data4
193*8a64d80aSDavid Spickett	.byte	64                              # DW_AT_frame_base
194*8a64d80aSDavid Spickett	.byte	24                              # DW_FORM_exprloc
195*8a64d80aSDavid Spickett	.byte	3                               # DW_AT_name
196*8a64d80aSDavid Spickett	.byte	37                              # DW_FORM_strx1
197*8a64d80aSDavid Spickett	.byte	58                              # DW_AT_decl_file
198*8a64d80aSDavid Spickett	.byte	11                              # DW_FORM_data1
199*8a64d80aSDavid Spickett	.byte	59                              # DW_AT_decl_line
200*8a64d80aSDavid Spickett	.byte	11                              # DW_FORM_data1
201*8a64d80aSDavid Spickett	.byte	73                              # DW_AT_type
202*8a64d80aSDavid Spickett	.byte	19                              # DW_FORM_ref4
203*8a64d80aSDavid Spickett	.byte	63                              # DW_AT_external
204*8a64d80aSDavid Spickett	.byte	25                              # DW_FORM_flag_present
205*8a64d80aSDavid Spickett	.byte	0                               # EOM(1)
206*8a64d80aSDavid Spickett	.byte	0                               # EOM(2)
207*8a64d80aSDavid Spickett	.byte	0                               # EOM(3)
208*8a64d80aSDavid Spickett.Ldebug_abbrev_end:
209*8a64d80aSDavid Spickett
210*8a64d80aSDavid Spickett.section .debug_cu_index,"",@progbits
211*8a64d80aSDavid Spickett.short 5  # DWARF version number
212*8a64d80aSDavid Spickett.short 0  # Reserved
213*8a64d80aSDavid Spickett.long  3  # Section count
214*8a64d80aSDavid Spickett.long  1  # Unit count
215*8a64d80aSDavid Spickett.long  2 # Slot count
216*8a64d80aSDavid Spickett
217*8a64d80aSDavid Spickett.quad  1026699901672188186, 0 # Hash table
218*8a64d80aSDavid Spickett.long  1, 0 # Index table
219*8a64d80aSDavid Spickett
220*8a64d80aSDavid Spickett## Table header
221*8a64d80aSDavid Spickett.long 1   # DW_SECT_INFO
222*8a64d80aSDavid Spickett.long 3   # DW_SECT_ABBREV
223*8a64d80aSDavid Spickett.long 6   # DW_SECT_STR_OFFSETS
224*8a64d80aSDavid Spickett
225*8a64d80aSDavid Spickett## Offsets
226*8a64d80aSDavid Spickett.long 0   # offset into .debug_info.dwo
227*8a64d80aSDavid Spickett.long 0   # offset into .debug_abbrev.dwo
228*8a64d80aSDavid Spickett.long 0   # offset into .debug_str_offsets.dwo
229*8a64d80aSDavid Spickett
230*8a64d80aSDavid Spickett## Sizes
231*8a64d80aSDavid Spickett.long .Ldebug_info_dwo_end0 - .debug_info.dwo
232*8a64d80aSDavid Spickett.long .Ldebug_abbrev_end - .debug_abbrev.dwo
233*8a64d80aSDavid Spickett.long .Lstr_offsets_end - .debug_str_offsets.dwo
234*8a64d80aSDavid Spickett
235*8a64d80aSDavid Spickett.endif
236