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

source code of compiler-rt/test/orc/TestCases/Darwin/arm64/objc-nonlazy-class.S