xref: /llvm-project/compiler-rt/test/orc/TestCases/Darwin/x86-64/objc-protocol-ref.S (revision 0f286f8a3688250b1f4c263836827ad0e2467f82)
1// Test that we register protocol reference metadata. Without registration,
2// protocol pointers will not be uniqued correctly and @protocol(NSObject) will
3// not match the runtime's pointer.
4//
5// RUN: %clang -c -o %t.o %s
6// RUN: %llvm_jitlink -preload libobjc.A.dylib %t.o
7//
8// REQUIRES: jit-compatible-osx-swift-runtime
9
10	.section	__TEXT,__text,regular,pure_instructions
11	.build_version macos, 15, 0	sdk_version 15, 0
12	.globl	_main                           ## -- Begin function main
13	.p2align	4, 0x90
14_main:                                  ## @main
15	.cfi_startproc
16## %bb.0:
17	pushq	%rbp
18	.cfi_def_cfa_offset 16
19	.cfi_offset %rbp, -16
20	movq	%rsp, %rbp
21	.cfi_def_cfa_register %rbp
22	subq	$16, %rsp
23	movl	$0, -4(%rbp)
24	movq	__OBJC_PROTOCOL_REFERENCE_$_NSObject(%rip), %rax
25	movq	%rax, -16(%rbp)                 ## 8-byte Spill
26	leaq	L_.str(%rip), %rdi
27	callq	_objc_getProtocol
28	movq	-16(%rbp), %rdx                 ## 8-byte Reload
29	movq	%rax, %rsi
30	movl	$1, %eax
31	xorl	%ecx, %ecx
32	cmpq	%rsi, %rdx
33	cmovel	%ecx, %eax
34	addq	$16, %rsp
35	popq	%rbp
36	retq
37	.cfi_endproc
38                                        ## -- End function
39	.section	__TEXT,__objc_classname,cstring_literals
40L_OBJC_CLASS_NAME_:                     ## @OBJC_CLASS_NAME_
41	.asciz	"NSObject"
42
43	.private_extern	__OBJC_PROTOCOL_$_NSObject ## @"_OBJC_PROTOCOL_$_NSObject"
44	.section	__DATA,__data
45	.globl	__OBJC_PROTOCOL_$_NSObject
46	.weak_definition	__OBJC_PROTOCOL_$_NSObject
47	.p2align	3, 0x0
48__OBJC_PROTOCOL_$_NSObject:
49	.quad	0
50	.quad	L_OBJC_CLASS_NAME_
51	.quad	0
52	.quad	0
53	.quad	0
54	.quad	0
55	.quad	0
56	.quad	0
57	.long	96                              ## 0x60
58	.long	0                               ## 0x0
59	.quad	0
60	.quad	0
61	.quad	0
62
63	.private_extern	__OBJC_LABEL_PROTOCOL_$_NSObject ## @"_OBJC_LABEL_PROTOCOL_$_NSObject"
64	.section	__DATA,__objc_protolist,coalesced,no_dead_strip
65	.globl	__OBJC_LABEL_PROTOCOL_$_NSObject
66	.weak_definition	__OBJC_LABEL_PROTOCOL_$_NSObject
67	.p2align	3, 0x0
68__OBJC_LABEL_PROTOCOL_$_NSObject:
69	.quad	__OBJC_PROTOCOL_$_NSObject
70
71	.private_extern	__OBJC_PROTOCOL_REFERENCE_$_NSObject ## @"_OBJC_PROTOCOL_REFERENCE_$_NSObject"
72	.section	__DATA,__objc_protorefs,coalesced,no_dead_strip
73	.globl	__OBJC_PROTOCOL_REFERENCE_$_NSObject
74	.weak_definition	__OBJC_PROTOCOL_REFERENCE_$_NSObject
75	.p2align	3, 0x0
76__OBJC_PROTOCOL_REFERENCE_$_NSObject:
77	.quad	__OBJC_PROTOCOL_$_NSObject
78
79	.section	__TEXT,__cstring,cstring_literals
80L_.str:                                 ## @.str
81	.asciz	"NSObject"
82
83	.no_dead_strip	__OBJC_PROTOCOL_$_NSObject
84	.no_dead_strip	__OBJC_LABEL_PROTOCOL_$_NSObject
85	.no_dead_strip	__OBJC_PROTOCOL_REFERENCE_$_NSObject
86	.section	__DATA,__objc_imageinfo,regular,no_dead_strip
87L_OBJC_IMAGE_INFO:
88	.long	0
89	.long	64
90
91.subsections_via_symbols
92