| // RUN: %clang -c -o %t %s |
| // RUN: %llvm_jitlink -dlopen libobjc.A.dylib %t |
| // |
| // Test that Objective-C class and instance methods work. |
| |
| .section __TEXT,__text,regular,pure_instructions |
| .build_version macos, 11, 0 sdk_version 11, 5 |
| .p2align 4, 0x90 |
| "-[ZeroGen objZero]": |
| pushq %rbp |
| movq %rsp, %rbp |
| xorl %eax, %eax |
| popq %rbp |
| retq |
| |
| .p2align 4, 0x90 |
| "+[ZeroGen classZero]": |
| pushq %rbp |
| movq %rsp, %rbp |
| xorl %eax, %eax |
| popq %rbp |
| retq |
| |
| .globl _main |
| .p2align 4, 0x90 |
| _main: |
| pushq %rbp |
| movq %rsp, %rbp |
| movq _OBJC_CLASSLIST_REFERENCES_$_(%rip), %rdi |
| callq _objc_alloc_init |
| movq _OBJC_SELECTOR_REFERENCES_(%rip), %rsi |
| movq %rax, %rdi |
| callq *_objc_msgSend@GOTPCREL(%rip) |
| testl %eax, %eax |
| jne LBB2_3 |
| |
| movq _OBJC_CLASSLIST_REFERENCES_$_(%rip), %rdi |
| movq _OBJC_SELECTOR_REFERENCES_.2(%rip), %rsi |
| callq *_objc_msgSend@GOTPCREL(%rip) |
| testl %eax, %eax |
| je LBB2_2 |
| LBB2_3: |
| movl $1, %eax |
| popq %rbp |
| retq |
| LBB2_2: |
| xorl %eax, %eax |
| popq %rbp |
| retq |
| |
| .section __TEXT,__objc_classname,cstring_literals |
| L_OBJC_CLASS_NAME_: |
| .asciz "ZeroGen" |
| |
| .section __TEXT,__objc_methname,cstring_literals |
| L_OBJC_METH_VAR_NAME_: |
| .asciz "classZero" |
| |
| .section __TEXT,__objc_methtype,cstring_literals |
| L_OBJC_METH_VAR_TYPE_: |
| .asciz "i16@0:8" |
| |
| .section __DATA,__objc_const |
| .p2align 3 |
| __OBJC_$_CLASS_METHODS_ZeroGen: |
| .long 24 |
| .long 1 |
| .quad L_OBJC_METH_VAR_NAME_ |
| .quad L_OBJC_METH_VAR_TYPE_ |
| .quad "+[ZeroGen classZero]" |
| |
| .p2align 3 |
| __OBJC_METACLASS_RO_$_ZeroGen: |
| .long 1 |
| .long 40 |
| .long 40 |
| .space 4 |
| .quad 0 |
| .quad L_OBJC_CLASS_NAME_ |
| .quad __OBJC_$_CLASS_METHODS_ZeroGen |
| .quad 0 |
| .quad 0 |
| .quad 0 |
| .quad 0 |
| |
| .section __DATA,__objc_data |
| .globl _OBJC_METACLASS_$_ZeroGen |
| .p2align 3 |
| _OBJC_METACLASS_$_ZeroGen: |
| .quad _OBJC_METACLASS_$_NSObject |
| .quad _OBJC_METACLASS_$_NSObject |
| .quad __objc_empty_cache |
| .quad 0 |
| .quad __OBJC_METACLASS_RO_$_ZeroGen |
| |
| .section __TEXT,__objc_methname,cstring_literals |
| L_OBJC_METH_VAR_NAME_.1: |
| .asciz "objZero" |
| |
| .section __DATA,__objc_const |
| .p2align 3 |
| __OBJC_$_INSTANCE_METHODS_ZeroGen: |
| .long 24 |
| .long 1 |
| .quad L_OBJC_METH_VAR_NAME_.1 |
| .quad L_OBJC_METH_VAR_TYPE_ |
| .quad "-[ZeroGen objZero]" |
| |
| .p2align 3 |
| __OBJC_CLASS_RO_$_ZeroGen: |
| .long 0 |
| .long 8 |
| .long 8 |
| .space 4 |
| .quad 0 |
| .quad L_OBJC_CLASS_NAME_ |
| .quad __OBJC_$_INSTANCE_METHODS_ZeroGen |
| .quad 0 |
| .quad 0 |
| .quad 0 |
| .quad 0 |
| |
| .section __DATA,__objc_data |
| .globl _OBJC_CLASS_$_ZeroGen |
| .p2align 3 |
| _OBJC_CLASS_$_ZeroGen: |
| .quad _OBJC_METACLASS_$_ZeroGen |
| .quad _OBJC_CLASS_$_NSObject |
| .quad __objc_empty_cache |
| .quad 0 |
| .quad __OBJC_CLASS_RO_$_ZeroGen |
| |
| .section __DATA,__objc_classrefs,regular,no_dead_strip |
| .p2align 3 |
| _OBJC_CLASSLIST_REFERENCES_$_: |
| .quad _OBJC_CLASS_$_ZeroGen |
| |
| .section __DATA,__objc_selrefs,literal_pointers,no_dead_strip |
| .p2align 3 |
| _OBJC_SELECTOR_REFERENCES_: |
| .quad L_OBJC_METH_VAR_NAME_.1 |
| |
| .p2align 3 |
| _OBJC_SELECTOR_REFERENCES_.2: |
| .quad L_OBJC_METH_VAR_NAME_ |
| |
| .section __DATA,__objc_classlist,regular,no_dead_strip |
| .p2align 3 |
| L_OBJC_LABEL_CLASS_$: |
| .quad _OBJC_CLASS_$_ZeroGen |
| |
| .section __DATA,__objc_imageinfo,regular,no_dead_strip |
| L_OBJC_IMAGE_INFO: |
| .long 0 |
| .long 64 |
| |
| .subsections_via_symbols |