xref: /llvm-project/compiler-rt/test/orc/TestCases/Darwin/arm64/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
10	.section	__TEXT,__text,regular,pure_instructions
11	.build_version macos, 15, 0	sdk_version 15, 0
12	.p2align	2                               ; -- Begin function +[C load]
13"+[C load]":                            ; @"\01+[C load]"
14	.cfi_startproc
15; %bb.0:
16	sub	sp, sp, #16
17	.cfi_def_cfa_offset 16
18	str	x0, [sp, #8]
19	str	x1, [sp]
20	adrp	x9, _x@PAGE
21	mov	w8, #7                          ; =0x7
22	str	w8, [x9, _x@PAGEOFF]
23	add	sp, sp, #16
24	ret
25	.cfi_endproc
26                                        ; -- End function
27	.globl	_main                           ; -- Begin function main
28	.p2align	2
29_main:                                  ; @main
30	.cfi_startproc
31; %bb.0:
32	sub	sp, sp, #16
33	.cfi_def_cfa_offset 16
34	str	wzr, [sp, #12]
35	adrp	x8, _x@PAGE
36	ldr	w8, [x8, _x@PAGEOFF]
37	subs	w8, w8, #7
38	cset	w8, eq
39	and	w8, w8, #0x1
40	ands	w8, w8, #0x1
41	cset	w0, eq
42	add	sp, sp, #16
43	ret
44	.cfi_endproc
45                                        ; -- End function
46	.globl	_x                              ; @x
47.zerofill __DATA,__common,_x,4,2
48	.section	__DATA,__objc_data
49	.globl	_OBJC_CLASS_$_C                 ; @"OBJC_CLASS_$_C"
50	.p2align	3, 0x0
51_OBJC_CLASS_$_C:
52	.quad	_OBJC_METACLASS_$_C
53	.quad	0
54	.quad	__objc_empty_cache
55	.quad	0
56	.quad	__OBJC_CLASS_RO_$_C
57
58	.globl	_OBJC_METACLASS_$_C             ; @"OBJC_METACLASS_$_C"
59	.p2align	3, 0x0
60_OBJC_METACLASS_$_C:
61	.quad	_OBJC_METACLASS_$_C
62	.quad	_OBJC_CLASS_$_C
63	.quad	__objc_empty_cache
64	.quad	0
65	.quad	__OBJC_METACLASS_RO_$_C
66
67	.section	__TEXT,__objc_classname,cstring_literals
68l_OBJC_CLASS_NAME_:                     ; @OBJC_CLASS_NAME_
69	.asciz	"C"
70
71	.section	__TEXT,__objc_methname,cstring_literals
72l_OBJC_METH_VAR_NAME_:                  ; @OBJC_METH_VAR_NAME_
73	.asciz	"load"
74
75	.section	__TEXT,__objc_methtype,cstring_literals
76l_OBJC_METH_VAR_TYPE_:                  ; @OBJC_METH_VAR_TYPE_
77	.asciz	"v16@0:8"
78
79	.section	__DATA,__objc_const
80	.p2align	3, 0x0                          ; @"_OBJC_$_CLASS_METHODS_C"
81__OBJC_$_CLASS_METHODS_C:
82	.long	24                              ; 0x18
83	.long	1                               ; 0x1
84	.quad	l_OBJC_METH_VAR_NAME_
85	.quad	l_OBJC_METH_VAR_TYPE_
86	.quad	"+[C load]"
87
88	.p2align	3, 0x0                          ; @"_OBJC_METACLASS_RO_$_C"
89__OBJC_METACLASS_RO_$_C:
90	.long	3                               ; 0x3
91	.long	40                              ; 0x28
92	.long	40                              ; 0x28
93	.space	4
94	.quad	0
95	.quad	l_OBJC_CLASS_NAME_
96	.quad	__OBJC_$_CLASS_METHODS_C
97	.quad	0
98	.quad	0
99	.quad	0
100	.quad	0
101
102	.p2align	3, 0x0                          ; @"_OBJC_CLASS_RO_$_C"
103__OBJC_CLASS_RO_$_C:
104	.long	2                               ; 0x2
105	.long	0                               ; 0x0
106	.long	0                               ; 0x0
107	.space	4
108	.quad	0
109	.quad	l_OBJC_CLASS_NAME_
110	.quad	0
111	.quad	0
112	.quad	0
113	.quad	0
114	.quad	0
115
116	.section	__DATA,__objc_classlist,regular,no_dead_strip
117	.p2align	3, 0x0                          ; @"OBJC_LABEL_CLASS_$"
118l_OBJC_LABEL_CLASS_$:
119	.quad	_OBJC_CLASS_$_C
120
121	.section	__DATA,__objc_nlclslist,regular,no_dead_strip
122	.p2align	3, 0x0                          ; @"OBJC_LABEL_NONLAZY_CLASS_$"
123l_OBJC_LABEL_NONLAZY_CLASS_$:
124	.quad	_OBJC_CLASS_$_C
125
126	.section	__DATA,__objc_imageinfo,regular,no_dead_strip
127L_OBJC_IMAGE_INFO:
128	.long	0
129	.long	64
130
131.subsections_via_symbols
132