[libc] Switch to using the generic `<gpuintrin.h>` implementations (#121810)
[llvm-project.git] / lld / test / MachO / objc-relative-method-lists-simple-x86.s
blob8ad9c0f5f60f82714f7a95a1292782a537679031
1 # REQUIRES: x86
2 # UNSUPPORTED: target=arm{{.*}}-unknown-linux-gnueabihf
3 # RUN: rm -rf %t; split-file %s %t && cd %t
5 ## Compile rel_dylib.o
6 # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o rel_dylib.o simple_class.s
8 ## Test relative method lists
9 # RUN: %no-lsystem-lld rel_dylib.o -o rel_dylib.dylib -map rel_dylib.map -dylib -objc_relative_method_lists
10 # RUN: llvm-objdump --macho --objc-meta-data rel_dylib.dylib | FileCheck %s --check-prefix=CHK_REL
12 ## Test relative method lists + dead-strip
13 # RUN: %no-lsystem-lld rel_dylib.o -o rel_dylib.dylib -map rel_dylib.map -dylib -objc_relative_method_lists -dead_strip
14 # RUN: llvm-objdump --macho --objc-meta-data rel_dylib.dylib | FileCheck %s --check-prefix=CHK_REL
16 ## Test traditional method lists (no relative offsets)
17 # RUN: %no-lsystem-lld rel_dylib.o -o rel_dylib.dylib -map rel_dylib.map -dylib -no_objc_relative_method_lists
18 # RUN: llvm-objdump --macho --objc-meta-data rel_dylib.dylib | FileCheck %s --check-prefix=CHK_NO_REL
21 CHK_REL: Contents of (__DATA_CONST,__objc_classlist) section
22 CHK_REL-NEXT: _OBJC_CLASS_$_MyClass
23 CHK_REL: baseMethods
24 CHK_REL-NEXT: entsize 12 (relative)
25 CHK_REL-NEXT: count 3
26 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_00
27 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
28 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_00]
29 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_01
30 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
31 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_01]
32 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) instance_method_02
33 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
34 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) -[MyClass instance_method_02]
36 CHK_REL: Meta Class
37 CHK_REL-NEXT: isa 0x{{[0-9a-f]*}} _OBJC_METACLASS_$_MyClass
38 CHK_REL: baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)
39 CHK_REL-NEXT: entsize 12 (relative)
40 CHK_REL-NEXT: count 3
41 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) class_method_00
42 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
43 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) +[MyClass class_method_00]
44 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) class_method_01
45 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
46 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) +[MyClass class_method_01]
47 CHK_REL-NEXT: name 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) class_method_02
48 CHK_REL-NEXT: types 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) v16@0:8
49 CHK_REL-NEXT: imp 0x{{[0-9a-f]*}} (0x{{[0-9a-f]*}}) +[MyClass class_method_02]
52 CHK_NO_REL-NOT: (relative)
54 CHK_NO_REL: Contents of (__DATA_CONST,__objc_classlist) section
55 CHK_NO_REL-NEXT: _OBJC_CLASS_$_MyClass
57 CHK_NO_REL: baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)
58 CHK_NO_REL-NEXT: entsize 24
59 CHK_NO_REL-NEXT: count 3
60 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} instance_method_00
61 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
62 CHK_NO_REL-NEXT: imp -[MyClass instance_method_00]
63 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} instance_method_01
64 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
65 CHK_NO_REL-NEXT: imp -[MyClass instance_method_01]
66 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} instance_method_02
67 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
68 CHK_NO_REL-NEXT: imp -[MyClass instance_method_02]
71 CHK_NO_REL: Meta Class
72 CHK_NO_REL-NEXT: _OBJC_METACLASS_$_MyClass
74 CHK_NO_REL: baseMethods 0x{{[0-9a-f]*}} (struct method_list_t *)
75 CHK_NO_REL-NEXT: entsize 24
76 CHK_NO_REL-NEXT: count 3
77 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} class_method_00
78 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
79 CHK_NO_REL-NEXT: imp +[MyClass class_method_00]
80 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} class_method_01
81 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
82 CHK_NO_REL-NEXT: imp +[MyClass class_method_01]
83 CHK_NO_REL-NEXT: name 0x{{[0-9a-f]*}} class_method_02
84 CHK_NO_REL-NEXT: types 0x{{[0-9a-f]*}} v16@0:8
85 CHK_NO_REL-NEXT: imp +[MyClass class_method_02]
88 ######################## Generate simple_class.s #########################
89 # clang -c simple_class.mm -s -o simple_class.s -target x86_64-apple-macos11 -Oz
91 ######################## simple_class.mm ########################
92 # __attribute__((objc_root_class))
93 # @interface MyClass
94 # - (void)instance_method_00;
95 # - (void)instance_method_01;
96 # - (void)instance_method_02;
97 # + (void)class_method_00;
98 # + (void)class_method_01;
99 # + (void)class_method_02;
100 # @end
102 # @implementation MyClass
103 # - (void)instance_method_00 {}
104 # - (void)instance_method_01 {}
105 # - (void)instance_method_02 {}
106 # + (void)class_method_00 {}
107 # + (void)class_method_01 {}
108 # + (void)class_method_02 {}
109 # @end
111 # void *_objc_empty_cache;
114 #--- objc-macros.s
115 .macro .objc_selector_def name
116 .p2align 2
117 "\name":
118 .cfi_startproc
120 .cfi_endproc
121 .endm
123 #--- simple_class.s
124 .include "objc-macros.s"
126 .section __TEXT,__text,regular,pure_instructions
127 .build_version macos, 11, 0
129 .objc_selector_def "-[MyClass instance_method_00]"
130 .objc_selector_def "-[MyClass instance_method_01]"
131 .objc_selector_def "-[MyClass instance_method_02]"
133 .objc_selector_def "+[MyClass class_method_00]"
134 .objc_selector_def "+[MyClass class_method_01]"
135 .objc_selector_def "+[MyClass class_method_02]"
137 .section __DATA,__objc_data
138 .globl _OBJC_CLASS_$_MyClass
139 .p2align 3, 0x0
140 _OBJC_CLASS_$_MyClass:
141 .quad _OBJC_METACLASS_$_MyClass
142 .quad 0
143 .quad __objc_empty_cache
144 .quad 0
145 .quad __OBJC_CLASS_RO_$_MyClass
147 .globl _OBJC_METACLASS_$_MyClass
148 .p2align 3, 0x0
149 _OBJC_METACLASS_$_MyClass:
150 .quad _OBJC_METACLASS_$_MyClass
151 .quad _OBJC_CLASS_$_MyClass
152 .quad __objc_empty_cache
153 .quad 0
154 .quad __OBJC_METACLASS_RO_$_MyClass
156 .section __TEXT,__objc_classname,cstring_literals
157 L_OBJC_CLASS_NAME_:
158 .asciz "MyClass"
160 .section __TEXT,__objc_methname,cstring_literals
161 L_OBJC_METH_VAR_NAME_:
162 .asciz "class_method_00"
164 .section __TEXT,__objc_methtype,cstring_literals
165 L_OBJC_METH_VAR_TYPE_:
166 .asciz "v16@0:8"
168 .section __TEXT,__objc_methname,cstring_literals
169 L_OBJC_METH_VAR_NAME_.1:
170 .asciz "class_method_01"
172 L_OBJC_METH_VAR_NAME_.2:
173 .asciz "class_method_02"
175 .section __DATA,__objc_const
176 .p2align 3, 0x0
177 __OBJC_$_CLASS_METHODS_MyClass:
178 .long 24
179 .long 3
180 .quad L_OBJC_METH_VAR_NAME_
181 .quad L_OBJC_METH_VAR_TYPE_
182 .quad "+[MyClass class_method_00]"
183 .quad L_OBJC_METH_VAR_NAME_.1
184 .quad L_OBJC_METH_VAR_TYPE_
185 .quad "+[MyClass class_method_01]"
186 .quad L_OBJC_METH_VAR_NAME_.2
187 .quad L_OBJC_METH_VAR_TYPE_
188 .quad "+[MyClass class_method_02]"
190 .p2align 3, 0x0
191 __OBJC_METACLASS_RO_$_MyClass:
192 .long 3
193 .long 40
194 .long 40
195 .space 4
196 .quad 0
197 .quad L_OBJC_CLASS_NAME_
198 .quad __OBJC_$_CLASS_METHODS_MyClass
199 .quad 0
200 .quad 0
201 .quad 0
202 .quad 0
204 .section __TEXT,__objc_methname,cstring_literals
205 L_OBJC_METH_VAR_NAME_.3:
206 .asciz "instance_method_00"
208 L_OBJC_METH_VAR_NAME_.4:
209 .asciz "instance_method_01"
211 L_OBJC_METH_VAR_NAME_.5:
212 .asciz "instance_method_02"
214 .section __DATA,__objc_const
215 .p2align 3, 0x0
216 __OBJC_$_INSTANCE_METHODS_MyClass:
217 .long 24
218 .long 3
219 .quad L_OBJC_METH_VAR_NAME_.3
220 .quad L_OBJC_METH_VAR_TYPE_
221 .quad "-[MyClass instance_method_00]"
222 .quad L_OBJC_METH_VAR_NAME_.4
223 .quad L_OBJC_METH_VAR_TYPE_
224 .quad "-[MyClass instance_method_01]"
225 .quad L_OBJC_METH_VAR_NAME_.5
226 .quad L_OBJC_METH_VAR_TYPE_
227 .quad "-[MyClass instance_method_02]"
229 .p2align 3, 0x0
230 __OBJC_CLASS_RO_$_MyClass:
231 .long 2
232 .long 0
233 .long 0
234 .space 4
235 .quad 0
236 .quad L_OBJC_CLASS_NAME_
237 .quad __OBJC_$_INSTANCE_METHODS_MyClass
238 .quad 0
239 .quad 0
240 .quad 0
241 .quad 0
243 .globl __objc_empty_cache
244 .zerofill __DATA,__common,__objc_empty_cache,8,3
245 .section __DATA,__objc_classlist,regular,no_dead_strip
246 .p2align 3, 0x0
247 l_OBJC_LABEL_CLASS_$:
248 .quad _OBJC_CLASS_$_MyClass
250 .section __DATA,__objc_imageinfo,regular,no_dead_strip
251 L_OBJC_IMAGE_INFO:
252 .long 0
253 .long 64
255 .subsections_via_symbols