Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / lld / test / MachO / objc-imageinfo.s
blobf83e93e7c0348ccfd6da22c59b3756af710fe85f
1 # REQUIRES: x86
3 # RUN: rm -rf %t; split-file %s %t
5 ## ld64 ignores the __objc_imageinfo section entirely if there is no actual
6 ## ObjC class + category data in the file. LLD doesn't yet do this check, but
7 ## to make this test work for both linkers, I am inserting an appropriate class
8 ## definition into each test file.
9 # RUN: cat %t/no-category-cls.s %t/foo-cls.s > %t/no-category-cls-1.s
10 # RUN: cat %t/with-category-cls.s %t/foo-cls.s > %t/with-category-cls-1.s
11 # RUN: cat %t/ignored-flags.s %t/foo-cls.s > %t/ignored-flags-1.s
12 # RUN: cat %t/invalid-version.s %t/foo-cls.s > %t/invalid-version-1.s
13 # RUN: cat %t/invalid-size.s %t/foo-cls.s > %t/invalid-size-1.s
14 # RUN: cat %t/swift-version-1.s %t/foo-cls.s > %t/swift-version-1-1.s
15 # RUN: cat %t/swift-version-2.s %t/foo-cls.s > %t/swift-version-2-1.s
17 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/no-category-cls-1.s -o %t/no-category-cls.o
18 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/with-category-cls-1.s -o %t/with-category-cls.o
19 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/ignored-flags-1.s -o %t/ignored-flags.o
20 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/invalid-version-1.s -o %t/invalid-version.o
21 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/swift-version-1-1.s -o %t/swift-version-1.o
22 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/swift-version-2-1.s -o %t/swift-version-2.o
23 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/invalid-size-1.s -o %t/invalid-size.o
25 # RUN: %lld -dylib -lSystem %t/with-category-cls.o -o %t/test-with-cat
26 # RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" --syms \
27 # RUN: %t/test-with-cat | FileCheck %s --check-prefix=HAS-CAT-CLS \
28 # RUN: --implicit-check-not=_discard_me
30 # RUN: %lld -dylib -lSystem %t/no-category-cls.o -o %t/test-no-cat
31 # RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" --syms \
32 # RUN: %t/test-no-cat | FileCheck %s --check-prefix=NO-CAT-CLS \
33 # RUN: --implicit-check-not=_discard_me
35 # RUN: %lld -dylib -lSystem %t/no-category-cls.o %t/with-category-cls.o -o %t/test1
36 # RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test1 \
37 # RUN: | FileCheck %s --check-prefix=NO-CAT-CLS
39 # RUN: %lld -dylib -lSystem %t/with-category-cls.o %t/ignored-flags.o -o %t/test2
40 # RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test2 \
41 # RUN: | FileCheck %s --check-prefix=HAS-CAT-CLS
43 # RUN: %lld -dylib -lSystem %t/no-category-cls.o %t/ignored-flags.o -o %t/test3
44 # RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test3 \
45 # RUN: | FileCheck %s --check-prefix=NO-CAT-CLS
47 # RUN: %no-fatal-warnings-lld -dylib -lSystem %t/with-category-cls.o \
48 # RUN: %t/invalid-version.o -o %t/test4 2>&1 | FileCheck %s \
49 # RUN: --check-prefix=IMAGE-VERSION
50 # RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test4 \
51 # RUN: | FileCheck %s --check-prefix=NO-CAT-CLS
53 # RUN: %no-fatal-warnings-lld -dylib -lSystem %t/no-category-cls.o \
54 # RUN: %t/invalid-version.o -o %t/test5 2>&1 | FileCheck %s \
55 # RUN: --check-prefix=IMAGE-VERSION
56 # RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test5 \
57 # RUN: | FileCheck %s --check-prefix=NO-CAT-CLS
59 # RUN: %no-fatal-warnings-lld -dylib -lSystem %t/with-category-cls.o \
60 # RUN: %t/invalid-size.o -o %t/test6 2>&1 | FileCheck %s \
61 # RUN: --check-prefix=INVALID-SIZE
62 # RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" %t/test6 \
63 # RUN: | FileCheck %s --check-prefix=NO-CAT-CLS
65 # RUN: not %lld -dylib -lSystem %t/swift-version-1.o %t/swift-version-2.o -o \
66 # RUN: /dev/null 2>&1 | FileCheck %s --check-prefix=SWIFT-MISMATCH-12
67 # RUN: not %lld -dylib -lSystem %t/swift-version-2.o %t/swift-version-1.o -o \
68 # RUN: /dev/null 2>&1 | FileCheck %s --check-prefix=SWIFT-MISMATCH-21
70 ## with-category-cls.o does not have a Swift version (it's set to zero) and
71 ## should be compatible with any Swift version.
72 # RUN: %lld -dylib -lSystem %t/with-category-cls.o %t/swift-version-1.o -o %t/swift-v1
73 # RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" \
74 # RUN: %t/swift-v1 | FileCheck %s --check-prefix=SWIFT-V1
75 # RUN: %lld -dylib -lSystem %t/with-category-cls.o %t/swift-version-2.o -o %t/swift-v2
76 # RUN: llvm-objdump --macho --section="__DATA_CONST,__objc_imageinfo" \
77 # RUN: %t/swift-v2 | FileCheck %s --check-prefix=SWIFT-V2
79 # HAS-CAT-CLS: Contents of (__DATA_CONST,__objc_imageinfo) section
80 # HAS-CAT-CLS: 00 00 00 40 00 00 00
81 # HAS-CAT-CLS-EMPTY:
83 # NO-CAT-CLS: Contents of (__DATA_CONST,__objc_imageinfo) section
84 # NO-CAT-CLS: 00 00 00 00 00 00 00
85 # NO-CAT-CLS-EMPTY:
87 # SWIFT-V1: Contents of (__DATA_CONST,__objc_imageinfo) section
88 # SWIFT-V1: 00 00 00 40 01 00 00
89 # SWIFT-V1-EMPTY:
91 # SWIFT-V2: Contents of (__DATA_CONST,__objc_imageinfo) section
92 # SWIFT-V2: 00 00 00 40 02 00 00
93 # SWIFT-V2-EMPTY:
95 # IMAGE-VERSION: warning: {{.*}}invalid-version.o: invalid __objc_imageinfo version
97 # INVALID-SIZE: warning: {{.*}}invalid-size.o: invalid __objc_imageinfo size
99 # SWIFT-MISMATCH-12: error: Swift version mismatch: {{.*}}swift-version-1.o has version 1.0 but {{.*}}swift-version-2.o has version 1.1
100 # SWIFT-MISMATCH-21: error: Swift version mismatch: {{.*}}swift-version-2.o has version 1.1 but {{.*}}swift-version-1.o has version 1.0
102 #--- no-category-cls.s
103 .section __DATA,__objc_imageinfo,regular,no_dead_strip
104 ## ld64 discards any symbols in this section; we follow suit.
105 _discard_me:
106 .long 0
107 .long 0
109 #--- with-category-cls.s
110 .section __DATA,__objc_imageinfo,regular,no_dead_strip
111 _discard_me:
112 .long 0
113 .long 0x40 ## "has category class properties" flag
115 #--- ignored-flags.s
116 .section __DATA,__objc_imageinfo,regular,no_dead_strip
117 .long 0
118 ## Only the 0x40 flag is carried through to the output binary.
119 .long (0x40 | 0x20 | 0x4 | 0x2)
121 #--- invalid-version.s
122 .section __DATA,__objc_imageinfo,regular,no_dead_strip
123 .long 1 ## only 0 is valid; the flag field below will not be parsed.
124 .long 0x40
126 #--- invalid-size.s
127 .section __DATA,__objc_imageinfo
128 .long 0
130 #--- swift-version-1.s
131 .section __DATA,__objc_imageinfo,regular,no_dead_strip
132 .long 0
133 .byte 0x40
134 .byte 0x1 ## Swift version
135 .short 0
137 #--- swift-version-2.s
138 .section __DATA,__objc_imageinfo,regular,no_dead_strip
139 .long 0
140 .byte 0x40
141 .byte 0x2 ## Swift version
142 .short 0
144 #--- foo-cls.s
145 .section __TEXT,__objc_classname,cstring_literals
146 L_CAT_NAME:
147 .asciz "barcat"
149 .section __DATA,__objc_data
150 .p2align 3
151 _OBJC_CLASS_$_FooClass:
152 .space 40
154 .section __DATA,__objc_const
155 .p2align 3
156 __OBJC_$_CATEGORY_FooClass_$_barcat:
157 .quad L_CAT_NAME
158 .quad _OBJC_CLASS_$_FooClass
159 .quad 0
160 .quad 0
161 .quad 0
162 .quad 0
163 .quad 0
164 .long 64
165 .space 4
167 .section __DATA,__objc_catlist,regular,no_dead_strip
168 .p2align 3
169 .quad __OBJC_$_CATEGORY_FooClass_$_barcat