xref: /llvm-project/compiler-rt/test/orc/TestCases/Darwin/x86-64/trivial-objc-methods.S (revision 22267f6f8c183653ff81c62d7d0b0abb4a6eeeef)
1// RUN: %clang -c -o %t %s
2// RUN: %llvm_jitlink -preload libobjc.A.dylib %t
3//
4// REQUIRES: jit-compatible-osx-swift-runtime
5//
6// Test that Objective-C class and instance methods work.
7
8	.section	__TEXT,__text,regular,pure_instructions
9	.build_version macos, 11, 0	sdk_version 11, 5
10	.p2align	4, 0x90
11"-[ZeroGen objZero]":
12	pushq	%rbp
13	movq	%rsp, %rbp
14	xorl	%eax, %eax
15	popq	%rbp
16	retq
17
18	.p2align	4, 0x90
19"+[ZeroGen classZero]":
20	pushq	%rbp
21	movq	%rsp, %rbp
22	xorl	%eax, %eax
23	popq	%rbp
24	retq
25
26	.globl	_main
27	.p2align	4, 0x90
28_main:
29	pushq	%rbp
30	movq	%rsp, %rbp
31	movq	_OBJC_CLASSLIST_REFERENCES_$_(%rip), %rdi
32	callq	_objc_alloc_init
33	movq	_OBJC_SELECTOR_REFERENCES_(%rip), %rsi
34	movq	%rax, %rdi
35	callq	*_objc_msgSend@GOTPCREL(%rip)
36	testl	%eax, %eax
37	jne	LBB2_3
38
39	movq	_OBJC_CLASSLIST_REFERENCES_$_(%rip), %rdi
40	movq	_OBJC_SELECTOR_REFERENCES_.2(%rip), %rsi
41	callq	*_objc_msgSend@GOTPCREL(%rip)
42	testl	%eax, %eax
43	je	LBB2_2
44LBB2_3:
45	movl	$1, %eax
46	popq	%rbp
47	retq
48LBB2_2:
49	xorl	%eax, %eax
50	popq	%rbp
51	retq
52
53	.section	__TEXT,__objc_classname,cstring_literals
54L_OBJC_CLASS_NAME_:
55	.asciz	"ZeroGen"
56
57	.section	__TEXT,__objc_methname,cstring_literals
58L_OBJC_METH_VAR_NAME_:
59	.asciz	"classZero"
60
61	.section	__TEXT,__objc_methtype,cstring_literals
62L_OBJC_METH_VAR_TYPE_:
63	.asciz	"i16@0:8"
64
65	.section	__DATA,__objc_const
66	.p2align	3
67__OBJC_$_CLASS_METHODS_ZeroGen:
68	.long	24
69	.long	1
70	.quad	L_OBJC_METH_VAR_NAME_
71	.quad	L_OBJC_METH_VAR_TYPE_
72	.quad	"+[ZeroGen classZero]"
73
74	.p2align	3
75__OBJC_METACLASS_RO_$_ZeroGen:
76	.long	1
77	.long	40
78	.long	40
79	.space	4
80	.quad	0
81	.quad	L_OBJC_CLASS_NAME_
82	.quad	__OBJC_$_CLASS_METHODS_ZeroGen
83	.quad	0
84	.quad	0
85	.quad	0
86	.quad	0
87
88	.section	__DATA,__objc_data
89	.globl	_OBJC_METACLASS_$_ZeroGen
90	.p2align	3
91_OBJC_METACLASS_$_ZeroGen:
92	.quad	_OBJC_METACLASS_$_NSObject
93	.quad	_OBJC_METACLASS_$_NSObject
94	.quad	__objc_empty_cache
95	.quad	0
96	.quad	__OBJC_METACLASS_RO_$_ZeroGen
97
98	.section	__TEXT,__objc_methname,cstring_literals
99L_OBJC_METH_VAR_NAME_.1:
100	.asciz	"objZero"
101
102	.section	__DATA,__objc_const
103	.p2align	3
104__OBJC_$_INSTANCE_METHODS_ZeroGen:
105	.long	24
106	.long	1
107	.quad	L_OBJC_METH_VAR_NAME_.1
108	.quad	L_OBJC_METH_VAR_TYPE_
109	.quad	"-[ZeroGen objZero]"
110
111	.p2align	3
112__OBJC_CLASS_RO_$_ZeroGen:
113	.long	0
114	.long	8
115	.long	8
116	.space	4
117	.quad	0
118	.quad	L_OBJC_CLASS_NAME_
119	.quad	__OBJC_$_INSTANCE_METHODS_ZeroGen
120	.quad	0
121	.quad	0
122	.quad	0
123	.quad	0
124
125	.section	__DATA,__objc_data
126	.globl	_OBJC_CLASS_$_ZeroGen
127	.p2align	3
128_OBJC_CLASS_$_ZeroGen:
129	.quad	_OBJC_METACLASS_$_ZeroGen
130	.quad	_OBJC_CLASS_$_NSObject
131	.quad	__objc_empty_cache
132	.quad	0
133	.quad	__OBJC_CLASS_RO_$_ZeroGen
134
135	.section	__DATA,__objc_classrefs,regular,no_dead_strip
136	.p2align	3
137_OBJC_CLASSLIST_REFERENCES_$_:
138	.quad	_OBJC_CLASS_$_ZeroGen
139
140	.section	__DATA,__objc_selrefs,literal_pointers,no_dead_strip
141	.p2align	3
142_OBJC_SELECTOR_REFERENCES_:
143	.quad	L_OBJC_METH_VAR_NAME_.1
144
145	.p2align	3
146_OBJC_SELECTOR_REFERENCES_.2:
147	.quad	L_OBJC_METH_VAR_NAME_
148
149	.section	__DATA,__objc_classlist,regular,no_dead_strip
150	.p2align	3
151L_OBJC_LABEL_CLASS_$:
152	.quad	_OBJC_CLASS_$_ZeroGen
153
154	.section	__DATA,__objc_imageinfo,regular,no_dead_strip
155L_OBJC_IMAGE_INFO:
156	.long	0
157	.long	64
158
159.subsections_via_symbols
160