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

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