[flang] Support OPEN(..., FORM="BINARY") (#124657)
[llvm-project.git] / lld / test / MachO / objc-relative-method-lists-simple.s
blobc8646f59603b3f35fb4935370c9c22fc740d7bb3
1 # REQUIRES: aarch64
2 # UNSUPPORTED: target=arm{{.*}}-unknown-linux-gnueabihf
3 # RUN: rm -rf %t; split-file %s %t && cd %t
5 ## Compile a64_rel_dylib.o
6 # RUN: llvm-mc -filetype=obj -triple=arm64-apple-macos10.15 -o a64_rel_dylib.o a64_simple_class.s
8 ## Test arm64 + relative method lists
9 # RUN: %no-lsystem-lld a64_rel_dylib.o -o a64_rel_dylib.dylib -map a64_rel_dylib.map -dylib -arch arm64
10 # RUN: llvm-objdump --macho --objc-meta-data a64_rel_dylib.dylib | FileCheck %s --check-prefix=CHK_REL
12 ## Test arm64 + relative method lists + dead-strip
13 # RUN: %no-lsystem-lld a64_rel_dylib.o -o a64_rel_dylib.dylib -map a64_rel_dylib.map -dylib -arch arm64 -dead_strip
14 # RUN: llvm-objdump --macho --objc-meta-data a64_rel_dylib.dylib | FileCheck %s --check-prefix=CHK_REL
16 ## Test arm64 + traditional method lists (no relative offsets)
17 # RUN: %no-lsystem-lld a64_rel_dylib.o -o a64_rel_dylib.dylib -map a64_rel_dylib.map -dylib -arch arm64 -no_objc_relative_method_lists
18 # RUN: llvm-objdump --macho --objc-meta-data a64_rel_dylib.dylib | FileCheck %s --check-prefix=CHK_NO_REL
20 ## Test arm64 + relative method lists by explicitly adding `-objc_relative_method_lists`.
21 # RUN: %lld a64_rel_dylib.o -o a64_rel_dylib.dylib -map a64_rel_dylib.map -dylib -arch arm64 -platform_version macOS 10.15 10.15 -objc_relative_method_lists
22 # RUN: llvm-objdump --macho --objc-meta-data a64_rel_dylib.dylib | FileCheck %s --check-prefix=CHK_REL
24 ## Test arm64 + no relative method lists by default.
25 # RUN: %lld a64_rel_dylib.o -o a64_rel_dylib.dylib -map a64_rel_dylib.map -dylib -arch arm64 -platform_version macOS 10.15 10.15
26 # RUN: llvm-objdump --macho --objc-meta-data a64_rel_dylib.dylib | FileCheck %s --check-prefix=CHK_NO_REL
29 CHK_REL: Contents of (__DATA_CONST,__objc_classlist) section
30 CHK_REL-NEXT: _OBJC_CLASS_$_MyClass
31 CHK_REL: baseMethods
32 CHK_REL-NEXT: entsize 12 (relative)
33 CHK_REL-NEXT: count 3
34 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_00
35 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
36 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_00]
37 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_01
38 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
39 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_01]
40 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_02
41 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
42 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_02]
44 CHK_REL: Meta Class
45 CHK_REL-NEXT: isa 0x{{[0-9a-f]*}} _OBJC_METACLASS_$_MyClass
46 CHK_REL: baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)
47 CHK_REL-NEXT: entsize 12 (relative)
48 CHK_REL-NEXT: count 3
49 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) class_method_00
50 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
51 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) +[MyClass class_method_00]
52 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) class_method_01
53 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
54 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) +[MyClass class_method_01]
55 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) class_method_02
56 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
57 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) +[MyClass class_method_02]
60 CHK_NO_REL-NOT: (relative)
62 CHK_NO_REL: Contents of (__DATA_CONST,__objc_classlist) section
63 CHK_NO_REL-NEXT: _OBJC_CLASS_$_MyClass
65 CHK_NO_REL: baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)
66 CHK_NO_REL-NEXT: entsize 24
67 CHK_NO_REL-NEXT: count 3
68 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} instance_method_00
69 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
70 CHK_NO_REL-NEXT: imp -[MyClass instance_method_00]
71 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} instance_method_01
72 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
73 CHK_NO_REL-NEXT: imp -[MyClass instance_method_01]
74 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} instance_method_02
75 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
76 CHK_NO_REL-NEXT: imp -[MyClass instance_method_02]
79 CHK_NO_REL: Meta Class
80 CHK_NO_REL-NEXT: _OBJC_METACLASS_$_MyClass
82 CHK_NO_REL: baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)
83 CHK_NO_REL-NEXT: entsize 24
84 CHK_NO_REL-NEXT: count 3
85 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} class_method_00
86 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
87 CHK_NO_REL-NEXT: imp +[MyClass class_method_00]
88 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} class_method_01
89 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
90 CHK_NO_REL-NEXT: imp +[MyClass class_method_01]
91 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} class_method_02
92 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
93 CHK_NO_REL-NEXT: imp +[MyClass class_method_02]
96 ######################## Generate a64_simple_class.s #########################
97 # clang -c simple_class.mm -s -o a64_simple_class.s -target arm64-apple-macos -arch arm64 -Oz
99 ######################## simple_class.mm ########################
100 # __attribute__((objc_root_class))
101 # @interface MyClass
102 # - (void)instance_method_00;
103 # - (void)instance_method_01;
104 # - (void)instance_method_02;
105 # + (void)class_method_00;
106 # + (void)class_method_01;
107 # + (void)class_method_02;
108 # @end
110 # @implementation MyClass
111 # - (void)instance_method_00 {}
112 # - (void)instance_method_01 {}
113 # - (void)instance_method_02 {}
114 # + (void)class_method_00 {}
115 # + (void)class_method_01 {}
116 # + (void)class_method_02 {}
117 # @end
119 # void *_objc_empty_cache;
120 # void *_objc_empty_vtable;
123 #--- objc-macros.s
124 .macro .objc_selector_def name
125 .p2align 2
126 "\name":
127 .cfi_startproc
129 .cfi_endproc
130 .endm
132 #--- a64_simple_class.s
133 .include "objc-macros.s"
135 .section __TEXT,__text,regular,pure_instructions
136 .build_version macos, 10, 15
138 .objc_selector_def "-[MyClass instance_method_00]"
139 .objc_selector_def "-[MyClass instance_method_01]"
140 .objc_selector_def "-[MyClass instance_method_02]"
142 .objc_selector_def "+[MyClass class_method_00]"
143 .objc_selector_def "+[MyClass class_method_01]"
144 .objc_selector_def "+[MyClass class_method_02]"
146 .globl __objc_empty_vtable
147 .zerofill __DATA,__common,__objc_empty_vtable,8,3
148 .section __DATA,__objc_data
149 .globl _OBJC_CLASS_$_MyClass
150 .p2align 3, 0x0
152 _OBJC_CLASS_$_MyClass:
153 .quad _OBJC_METACLASS_$_MyClass
154 .quad 0
155 .quad __objc_empty_cache
156 .quad __objc_empty_vtable
157 .quad __OBJC_CLASS_RO_$_MyClass
158 .globl _OBJC_METACLASS_$_MyClass
159 .p2align 3, 0x0
161 _OBJC_METACLASS_$_MyClass:
162 .quad _OBJC_METACLASS_$_MyClass
163 .quad _OBJC_CLASS_$_MyClass
164 .quad __objc_empty_cache
165 .quad __objc_empty_vtable
166 .quad __OBJC_METACLASS_RO_$_MyClass
168 .section __TEXT,__objc_classname,cstring_literals
169 l_OBJC_CLASS_NAME_:
170 .asciz "MyClass"
171 .section __TEXT,__objc_methname,cstring_literals
172 l_OBJC_METH_VAR_NAME_:
173 .asciz "class_method_00"
174 .section __TEXT,__objc_methtype,cstring_literals
175 l_OBJC_METH_VAR_TYPE_:
176 .asciz "v16@0:8"
177 .section __TEXT,__objc_methname,cstring_literals
178 l_OBJC_METH_VAR_NAME_.1:
179 .asciz "class_method_01"
180 l_OBJC_METH_VAR_NAME_.2:
181 .asciz "class_method_02"
182 .section __DATA,__objc_const
183 .p2align 3, 0x0
184 __OBJC_$_CLASS_METHODS_MyClass:
185 .long 24
186 .long 3
187 .quad l_OBJC_METH_VAR_NAME_
188 .quad l_OBJC_METH_VAR_TYPE_
189 .quad "+[MyClass class_method_00]"
190 .quad l_OBJC_METH_VAR_NAME_.1
191 .quad l_OBJC_METH_VAR_TYPE_
192 .quad "+[MyClass class_method_01]"
193 .quad l_OBJC_METH_VAR_NAME_.2
194 .quad l_OBJC_METH_VAR_TYPE_
195 .quad "+[MyClass class_method_02]"
196 .p2align 3, 0x0
198 __OBJC_METACLASS_RO_$_MyClass:
199 .long 3
200 .long 40
201 .long 40
202 .space 4
203 .quad 0
204 .quad l_OBJC_CLASS_NAME_
205 .quad __OBJC_$_CLASS_METHODS_MyClass
206 .quad 0
207 .quad 0
208 .quad 0
209 .quad 0
211 .section __TEXT,__objc_methname,cstring_literals
212 l_OBJC_METH_VAR_NAME_.3:
213 .asciz "instance_method_00"
214 l_OBJC_METH_VAR_NAME_.4:
215 .asciz "instance_method_01"
216 l_OBJC_METH_VAR_NAME_.5:
217 .asciz "instance_method_02"
219 .section __DATA,__objc_const
220 .p2align 3, 0x0
221 __OBJC_$_INSTANCE_METHODS_MyClass:
222 .long 24
223 .long 3
224 .quad l_OBJC_METH_VAR_NAME_.3
225 .quad l_OBJC_METH_VAR_TYPE_
226 .quad "-[MyClass instance_method_00]"
227 .quad l_OBJC_METH_VAR_NAME_.4
228 .quad l_OBJC_METH_VAR_TYPE_
229 .quad "-[MyClass instance_method_01]"
230 .quad l_OBJC_METH_VAR_NAME_.5
231 .quad l_OBJC_METH_VAR_TYPE_
232 .quad "-[MyClass instance_method_02]"
233 .p2align 3, 0x0
235 __OBJC_CLASS_RO_$_MyClass:
236 .long 2
237 .long 0
238 .long 0
239 .space 4
240 .quad 0
241 .quad l_OBJC_CLASS_NAME_
242 .quad __OBJC_$_INSTANCE_METHODS_MyClass
243 .quad 0
244 .quad 0
245 .quad 0
246 .quad 0
247 .globl __objc_empty_cache
249 .zerofill __DATA,__common,__objc_empty_cache,8,3
250 .section __DATA,__objc_classlist,regular,no_dead_strip
251 .p2align 3, 0x0
252 l_OBJC_LABEL_CLASS_$:
253 .quad _OBJC_CLASS_$_MyClass
254 .section __DATA,__objc_imageinfo,regular,no_dead_strip
255 L_OBJC_IMAGE_INFO:
256 .long 0
257 .long 64
258 .subsections_via_symbols