xref: /llvm-project/llvm/test/tools/dsymutil/X86/DWARFLinkerParallel/odr-recursive-dependence.test (revision f1fdfe6888f93b9f6dfb4689e1f3206de584ff5b)
1b61ac4a8Savl-llvm## This test checks output of dsymutil for the incorrect DWARF.
2b61ac4a8Savl-llvm## CU1 has a type which references type in CU2. This referenced
3b61ac4a8Savl-llvm## type references the same type in CU1 back. There is a recursive
4b61ac4a8Savl-llvm## dependence between these two types. dsymutil should report a error,
5b61ac4a8Savl-llvm## remove CU1 and CU2, put only CU3 into the output.
6b61ac4a8Savl-llvm
7b61ac4a8Savl-llvm# RUN: yaml2obj %s -o %t.o
8b61ac4a8Savl-llvm# RUN: echo '---' > %t2.map
9b61ac4a8Savl-llvm# RUN: echo "triple:          'x86_64-apple-darwin'" >> %t2.map
10b61ac4a8Savl-llvm# RUN: echo 'objects:'  >> %t2.map
11b61ac4a8Savl-llvm# RUN: echo " -  filename: '%t.o'" >> %t2.map
12b61ac4a8Savl-llvm# RUN: echo '    symbols:' >> %t2.map
13b61ac4a8Savl-llvm# RUN: echo '      - { sym: __Z3foov, objAddr: 0x0, binAddr: 0x10000, size: 0x10 }' >> %t2.map
14b61ac4a8Savl-llvm# RUN: echo '...' >> %t2.map
15*f1fdfe68SAlexey Lapshin# RUN: dsymutil --linker parallel -y %t2.map --num-threads 1 -f -o %t1.out 2>&1 \
16b61ac4a8Savl-llvm# RUN:   | FileCheck --check-prefix ERROR %s
17b61ac4a8Savl-llvm# RUN: llvm-dwarfdump -a %t1.out | FileCheck %s
18b61ac4a8Savl-llvm
19b61ac4a8Savl-llvm# ERROR: error: Cann't parse input DWARF. Recursive dependence.
20b61ac4a8Savl-llvm# ERROR: while processing CU1
21b61ac4a8Savl-llvm# ERROR: error: Cann't resolve DIE reference
22b61ac4a8Savl-llvm# ERROR: while processing CU2
23b61ac4a8Savl-llvm
24b61ac4a8Savl-llvm# CHECK: file format Mach-O 64-bit x86-64
25b61ac4a8Savl-llvm# CHECK: .debug_info contents:
26b61ac4a8Savl-llvm# CHECK: Compile Unit:
27b61ac4a8Savl-llvm# CHECK: DW_TAG_compile_unit
28b61ac4a8Savl-llvm# CHECK: DW_AT_name{{.*}}"__artificial_type_unit"
29b61ac4a8Savl-llvm# CHECK: 0x[[CLASS1:[0-9a-f]*]]: DW_TAG_class_type{{.*[[:space:]].*}}DW_AT_name{{.*}}"class1"
30b61ac4a8Savl-llvm
31b61ac4a8Savl-llvm# CHECK: Compile Unit:
32b61ac4a8Savl-llvm# CHECK: DW_TAG_compile_unit
33b61ac4a8Savl-llvm# CHECK-NOT: "CU1"
34b61ac4a8Savl-llvm# CHECK-NOT: "CU2"
35b61ac4a8Savl-llvm# CHECK: DW_AT_name{{.*}}"CU3"
36b61ac4a8Savl-llvm# CHECK-NOT: DW_TAG_class_type
37b61ac4a8Savl-llvm# CHECK: DW_TAG_variable
38b61ac4a8Savl-llvm# CHECK: DW_AT_name{{.*}}"var3"
39b61ac4a8Savl-llvm# CHECK: DW_AT_const_value
40b61ac4a8Savl-llvm# CHECK: DW_AT_type (0x00000000[[CLASS1]]
41b61ac4a8Savl-llvm
42b61ac4a8Savl-llvm# CHECK-NOT: Compile Unit:
43b61ac4a8Savl-llvm
44b61ac4a8Savl-llvm--- !mach-o
45b61ac4a8Savl-llvmFileHeader:
46b61ac4a8Savl-llvm  magic:      0xFEEDFACF
47b61ac4a8Savl-llvm  cputype:    0x01000007
48b61ac4a8Savl-llvm  cpusubtype: 0x00000003
49b61ac4a8Savl-llvm  filetype:   0x00000001
50b61ac4a8Savl-llvm  ncmds:      2
51b61ac4a8Savl-llvm  sizeofcmds: 376
52b61ac4a8Savl-llvm  flags:      0x00002000
53b61ac4a8Savl-llvm  reserved:   0x00000000
54b61ac4a8Savl-llvmLoadCommands:
55b61ac4a8Savl-llvm  - cmd:      LC_SEGMENT_64
56b61ac4a8Savl-llvm    cmdsize:  232
57b61ac4a8Savl-llvm    segname:  ''
58b61ac4a8Savl-llvm    vmaddr:   0x00
59b61ac4a8Savl-llvm    vmsize:   0x300
60b61ac4a8Savl-llvm    fileoff:  0x300
61b61ac4a8Savl-llvm    filesize: 0x300
62b61ac4a8Savl-llvm    maxprot:  7
63b61ac4a8Savl-llvm    initprot: 7
64b61ac4a8Savl-llvm    nsects:   2
65b61ac4a8Savl-llvm    flags:    0
66b61ac4a8Savl-llvm    Sections:
67b61ac4a8Savl-llvm      - sectname:  __debug_abbrev
68b61ac4a8Savl-llvm        segname:   __DWARF
69b61ac4a8Savl-llvm        addr:      0x000000000000000F
70b61ac4a8Savl-llvm        size:      0x5a
71b61ac4a8Savl-llvm        offset:    0x00000380
72b61ac4a8Savl-llvm        align:     0
73b61ac4a8Savl-llvm        reloff:    0x00000000
74b61ac4a8Savl-llvm        nreloc:    0
75b61ac4a8Savl-llvm        flags:     0x02000000
76b61ac4a8Savl-llvm        reserved1: 0x00000000
77b61ac4a8Savl-llvm        reserved2: 0x00000000
78b61ac4a8Savl-llvm        reserved3: 0x00000000
79b61ac4a8Savl-llvm      - sectname:  __debug_info
80b61ac4a8Savl-llvm        segname:   __DWARF
81b61ac4a8Savl-llvm        addr:      0x000000000000100
82b61ac4a8Savl-llvm        size:      0x8d
83b61ac4a8Savl-llvm        offset:    0x00000410
84b61ac4a8Savl-llvm        align:     0
85b61ac4a8Savl-llvm        reloff:    0x00000600
86b61ac4a8Savl-llvm        nreloc:    1
87b61ac4a8Savl-llvm        flags:     0x02000000
88b61ac4a8Savl-llvm        reserved1: 0x00000000
89b61ac4a8Savl-llvm        reserved2: 0x00000000
90b61ac4a8Savl-llvm        reserved3: 0x00000000
91b61ac4a8Savl-llvm        relocations:
92b61ac4a8Savl-llvm          - address:         0x1FC
93b61ac4a8Savl-llvm            symbolnum:       1
94b61ac4a8Savl-llvm            pcrel:           true
95b61ac4a8Savl-llvm            length:          3
96b61ac4a8Savl-llvm            extern:          true
97b61ac4a8Savl-llvm            type:            0
98b61ac4a8Savl-llvm            scattered:       false
99b61ac4a8Savl-llvm            value:           0
100b61ac4a8Savl-llvm  - cmd:             LC_SYMTAB
101b61ac4a8Savl-llvm    cmdsize:         24
102b61ac4a8Savl-llvm    symoff:          0x700
103b61ac4a8Savl-llvm    nsyms:           2
104b61ac4a8Savl-llvm    stroff:          0x720
105b61ac4a8Savl-llvm    strsize:         10
106b61ac4a8Savl-llvmLinkEditData:
107b61ac4a8Savl-llvm  NameList:
108b61ac4a8Savl-llvm    - n_strx:          1
109b61ac4a8Savl-llvm      n_type:          0x0F
110b61ac4a8Savl-llvm      n_sect:          1
111b61ac4a8Savl-llvm      n_desc:          0
112b61ac4a8Savl-llvm      n_value:         0
113b61ac4a8Savl-llvm    - n_strx:          1
114b61ac4a8Savl-llvm      n_type:          0x0F
115b61ac4a8Savl-llvm      n_sect:          1
116b61ac4a8Savl-llvm      n_desc:          0
117b61ac4a8Savl-llvm      n_value:         0
118b61ac4a8Savl-llvm  StringTable:
119b61ac4a8Savl-llvm    - ''
120b61ac4a8Savl-llvm    - '__Z3foov'
121b61ac4a8Savl-llvm    - ''
122b61ac4a8Savl-llvmDWARF:
123b61ac4a8Savl-llvm  debug_abbrev:
124b61ac4a8Savl-llvm    - Table:
125b61ac4a8Savl-llvm      - Tag:      DW_TAG_compile_unit
126b61ac4a8Savl-llvm        Children: DW_CHILDREN_yes
127b61ac4a8Savl-llvm        Attributes:
128b61ac4a8Savl-llvm          - Attribute: DW_AT_producer
129b61ac4a8Savl-llvm            Form:      DW_FORM_string
130b61ac4a8Savl-llvm          - Attribute: DW_AT_language
131b61ac4a8Savl-llvm            Form:      DW_FORM_data2
132b61ac4a8Savl-llvm          - Attribute: DW_AT_name
133b61ac4a8Savl-llvm            Form:      DW_FORM_string
134b61ac4a8Savl-llvm      - Tag:      DW_TAG_pointer_type
135b61ac4a8Savl-llvm        Children: DW_CHILDREN_no
136b61ac4a8Savl-llvm        Attributes:
137b61ac4a8Savl-llvm          - Attribute: DW_AT_type
138b61ac4a8Savl-llvm            Form:      DW_FORM_ref_addr
139b61ac4a8Savl-llvm      - Tag:      DW_TAG_variable
140b61ac4a8Savl-llvm        Children: DW_CHILDREN_no
141b61ac4a8Savl-llvm        Attributes:
142b61ac4a8Savl-llvm          - Attribute: DW_AT_name
143b61ac4a8Savl-llvm            Form:      DW_FORM_string
144b61ac4a8Savl-llvm          - Attribute: DW_AT_const_value
145b61ac4a8Savl-llvm            Form:      DW_FORM_data4
146b61ac4a8Savl-llvm          - Attribute: DW_AT_type
147b61ac4a8Savl-llvm            Form:      DW_FORM_ref4
148b61ac4a8Savl-llvm    - Table:
149b61ac4a8Savl-llvm      - Tag:      DW_TAG_compile_unit
150b61ac4a8Savl-llvm        Children: DW_CHILDREN_yes
151b61ac4a8Savl-llvm        Attributes:
152b61ac4a8Savl-llvm          - Attribute: DW_AT_producer
153b61ac4a8Savl-llvm            Form:      DW_FORM_string
154b61ac4a8Savl-llvm          - Attribute: DW_AT_language
155b61ac4a8Savl-llvm            Form:      DW_FORM_data2
156b61ac4a8Savl-llvm          - Attribute: DW_AT_name
157b61ac4a8Savl-llvm            Form:      DW_FORM_string
158b61ac4a8Savl-llvm      - Tag:      DW_TAG_pointer_type
159b61ac4a8Savl-llvm        Children: DW_CHILDREN_no
160b61ac4a8Savl-llvm        Attributes:
161b61ac4a8Savl-llvm          - Attribute: DW_AT_type
162b61ac4a8Savl-llvm            Form:      DW_FORM_ref_addr
163b61ac4a8Savl-llvm      - Tag:      DW_TAG_variable
164b61ac4a8Savl-llvm        Children: DW_CHILDREN_no
165b61ac4a8Savl-llvm        Attributes:
166b61ac4a8Savl-llvm          - Attribute: DW_AT_name
167b61ac4a8Savl-llvm            Form:      DW_FORM_string
168b61ac4a8Savl-llvm          - Attribute: DW_AT_const_value
169b61ac4a8Savl-llvm            Form:      DW_FORM_data4
170b61ac4a8Savl-llvm          - Attribute: DW_AT_type
171b61ac4a8Savl-llvm            Form:      DW_FORM_ref4
172b61ac4a8Savl-llvm    - Table:
173b61ac4a8Savl-llvm      - Tag:      DW_TAG_compile_unit
174b61ac4a8Savl-llvm        Children: DW_CHILDREN_yes
175b61ac4a8Savl-llvm        Attributes:
176b61ac4a8Savl-llvm          - Attribute: DW_AT_producer
177b61ac4a8Savl-llvm            Form:      DW_FORM_string
178b61ac4a8Savl-llvm          - Attribute: DW_AT_language
179b61ac4a8Savl-llvm            Form:      DW_FORM_data2
180b61ac4a8Savl-llvm          - Attribute: DW_AT_name
181b61ac4a8Savl-llvm            Form:      DW_FORM_string
182b61ac4a8Savl-llvm      - Tag:      DW_TAG_class_type
183b61ac4a8Savl-llvm        Children: DW_CHILDREN_no
184b61ac4a8Savl-llvm        Attributes:
185b61ac4a8Savl-llvm          - Attribute: DW_AT_name
186b61ac4a8Savl-llvm            Form:      DW_FORM_string
187b61ac4a8Savl-llvm      - Tag:      DW_TAG_variable
188b61ac4a8Savl-llvm        Children: DW_CHILDREN_no
189b61ac4a8Savl-llvm        Attributes:
190b61ac4a8Savl-llvm          - Attribute: DW_AT_name
191b61ac4a8Savl-llvm            Form:      DW_FORM_string
192b61ac4a8Savl-llvm          - Attribute: DW_AT_const_value
193b61ac4a8Savl-llvm            Form:      DW_FORM_data4
194b61ac4a8Savl-llvm          - Attribute: DW_AT_type
195b61ac4a8Savl-llvm            Form:      DW_FORM_ref4
196b61ac4a8Savl-llvm  debug_info:
197b61ac4a8Savl-llvm    - Version: 4
198b61ac4a8Savl-llvm      Entries:
199b61ac4a8Savl-llvm        - AbbrCode: 1
200b61ac4a8Savl-llvm          Values:
201b61ac4a8Savl-llvm            - CStr: by_hand
202b61ac4a8Savl-llvm            - Value:  0x04
203b61ac4a8Savl-llvm            - CStr: CU1
204b61ac4a8Savl-llvm        - AbbrCode: 2
205b61ac4a8Savl-llvm          Values:
206b61ac4a8Savl-llvm            - Value:  0x48
207b61ac4a8Savl-llvm        - AbbrCode: 3
208b61ac4a8Savl-llvm          Values:
209b61ac4a8Savl-llvm            - CStr: var1
210b61ac4a8Savl-llvm            - Value:  0x00000000
211b61ac4a8Savl-llvm            - Value:  0x0000001a
212b61ac4a8Savl-llvm        - AbbrCode: 0
213b61ac4a8Savl-llvm    - Version: 4
214b61ac4a8Savl-llvm      Entries:
215b61ac4a8Savl-llvm        - AbbrCode: 1
216b61ac4a8Savl-llvm          Values:
217b61ac4a8Savl-llvm            - CStr: by_hand
218b61ac4a8Savl-llvm            - Value:  0x04
219b61ac4a8Savl-llvm            - CStr: CU2
220b61ac4a8Savl-llvm        - AbbrCode: 2
221b61ac4a8Savl-llvm          Values:
222b61ac4a8Savl-llvm            - Value: 0x1a
223b61ac4a8Savl-llvm        - AbbrCode: 3
224b61ac4a8Savl-llvm          Values:
225b61ac4a8Savl-llvm            - CStr: var2
226b61ac4a8Savl-llvm            - Value:  0x00000000
227b61ac4a8Savl-llvm            - Value:  0x0000001a
228b61ac4a8Savl-llvm        - AbbrCode: 0
229b61ac4a8Savl-llvm    - Version: 4
230b61ac4a8Savl-llvm      Entries:
231b61ac4a8Savl-llvm        - AbbrCode: 1
232b61ac4a8Savl-llvm          Values:
233b61ac4a8Savl-llvm            - CStr: by_hand
234b61ac4a8Savl-llvm            - Value:  0x04
235b61ac4a8Savl-llvm            - CStr: CU3
236b61ac4a8Savl-llvm        - AbbrCode: 2
237b61ac4a8Savl-llvm          Values:
238b61ac4a8Savl-llvm            - CStr: class1
239b61ac4a8Savl-llvm        - AbbrCode: 3
240b61ac4a8Savl-llvm          Values:
241b61ac4a8Savl-llvm            - CStr: var3
242b61ac4a8Savl-llvm            - Value:  0x00000000
243b61ac4a8Savl-llvm            - Value:  0x0000001a
244b61ac4a8Savl-llvm        - AbbrCode: 0
245b61ac4a8Savl-llvm...
246