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