xref: /llvm-project/compiler-rt/test/orc/TestCases/Darwin/x86-64/objc-nonlazy-class.S (revision 0f286f8a3688250b1f4c263836827ad0e2467f82)
1// Test that we register non-lazy classes by ensuring a +load is called even if
2// the class is never referenced.
3//
4// RUN: %clang -c -o %t.o %s
5// RUN: %llvm_jitlink -preload libobjc.A.dylib %t.o
6//
7// REQUIRES: jit-compatible-osx-swift-runtime
8
9	.section	__TEXT,__text,regular,pure_instructions
10	.build_version macos, 15, 0	sdk_version 15, 0
11	.p2align	4, 0x90                         ## -- Begin function +[C load]
12"+[C load]":                            ## @"\01+[C load]"
13	.cfi_startproc
14## %bb.0:
15	pushq	%rbp
16	.cfi_def_cfa_offset 16
17	.cfi_offset %rbp, -16
18	movq	%rsp, %rbp
19	.cfi_def_cfa_register %rbp
20	movq	%rdi, -8(%rbp)
21	movq	%rsi, -16(%rbp)
22	movl	$7, _x(%rip)
23	popq	%rbp
24	retq
25	.cfi_endproc
26                                        ## -- End function
27	.globl	_main                           ## -- Begin function main
28	.p2align	4, 0x90
29_main:                                  ## @main
30	.cfi_startproc
31## %bb.0:
32	pushq	%rbp
33	.cfi_def_cfa_offset 16
34	.cfi_offset %rbp, -16
35	movq	%rsp, %rbp
36	.cfi_def_cfa_register %rbp
37	movl	$0, -4(%rbp)
38	movl	_x(%rip), %edx
39	movl	$1, %eax
40	xorl	%ecx, %ecx
41	cmpl	$7, %edx
42	cmovel	%ecx, %eax
43	popq	%rbp
44	retq
45	.cfi_endproc
46                                        ## -- End function
47	.globl	_x                              ## @x
48.zerofill __DATA,__common,_x,4,2
49	.section	__DATA,__objc_data
50	.globl	_OBJC_CLASS_$_C                 ## @"OBJC_CLASS_$_C"
51	.p2align	3, 0x0
52_OBJC_CLASS_$_C:
53	.quad	_OBJC_METACLASS_$_C
54	.quad	0
55	.quad	__objc_empty_cache
56	.quad	0
57	.quad	__OBJC_CLASS_RO_$_C
58
59	.globl	_OBJC_METACLASS_$_C             ## @"OBJC_METACLASS_$_C"
60	.p2align	3, 0x0
61_OBJC_METACLASS_$_C:
62	.quad	_OBJC_METACLASS_$_C
63	.quad	_OBJC_CLASS_$_C
64	.quad	__objc_empty_cache
65	.quad	0
66	.quad	__OBJC_METACLASS_RO_$_C
67
68	.section	__TEXT,__objc_classname,cstring_literals
69L_OBJC_CLASS_NAME_:                     ## @OBJC_CLASS_NAME_
70	.asciz	"C"
71
72	.section	__TEXT,__objc_methname,cstring_literals
73L_OBJC_METH_VAR_NAME_:                  ## @OBJC_METH_VAR_NAME_
74	.asciz	"load"
75
76	.section	__TEXT,__objc_methtype,cstring_literals
77L_OBJC_METH_VAR_TYPE_:                  ## @OBJC_METH_VAR_TYPE_
78	.asciz	"v16@0:8"
79
80	.section	__DATA,__objc_const
81	.p2align	3, 0x0                          ## @"_OBJC_$_CLASS_METHODS_C"
82__OBJC_$_CLASS_METHODS_C:
83	.long	24                              ## 0x18
84	.long	1                               ## 0x1
85	.quad	L_OBJC_METH_VAR_NAME_
86	.quad	L_OBJC_METH_VAR_TYPE_
87	.quad	"+[C load]"
88
89	.p2align	3, 0x0                          ## @"_OBJC_METACLASS_RO_$_C"
90__OBJC_METACLASS_RO_$_C:
91	.long	3                               ## 0x3
92	.long	40                              ## 0x28
93	.long	40                              ## 0x28
94	.space	4
95	.quad	0
96	.quad	L_OBJC_CLASS_NAME_
97	.quad	__OBJC_$_CLASS_METHODS_C
98	.quad	0
99	.quad	0
100	.quad	0
101	.quad	0
102
103	.p2align	3, 0x0                          ## @"_OBJC_CLASS_RO_$_C"
104__OBJC_CLASS_RO_$_C:
105	.long	2                               ## 0x2
106	.long	0                               ## 0x0
107	.long	0                               ## 0x0
108	.space	4
109	.quad	0
110	.quad	L_OBJC_CLASS_NAME_
111	.quad	0
112	.quad	0
113	.quad	0
114	.quad	0
115	.quad	0
116
117	.section	__DATA,__objc_classlist,regular,no_dead_strip
118	.p2align	3, 0x0                          ## @"OBJC_LABEL_CLASS_$"
119l_OBJC_LABEL_CLASS_$:
120	.quad	_OBJC_CLASS_$_C
121
122	.section	__DATA,__objc_nlclslist,regular,no_dead_strip
123	.p2align	3, 0x0                          ## @"OBJC_LABEL_NONLAZY_CLASS_$"
124l_OBJC_LABEL_NONLAZY_CLASS_$:
125	.quad	_OBJC_CLASS_$_C
126
127	.section	__DATA,__objc_imageinfo,regular,no_dead_strip
128L_OBJC_IMAGE_INFO:
129	.long	0
130	.long	64
131
132.subsections_via_symbols
133