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