xref: /llvm-project/compiler-rt/test/orc/TestCases/Darwin/arm64/objc-protocol-ref.S (revision 0f286f8a3688250b1f4c263836827ad0e2467f82)
1*0f286f8aSBen Langmuir// Test that we register protocol reference metadata. Without registration,
2*0f286f8aSBen Langmuir// protocol pointers will not be uniqued correctly and @protocol(NSObject) will
3*0f286f8aSBen Langmuir// not match the runtime's pointer.
4*0f286f8aSBen Langmuir//
5*0f286f8aSBen Langmuir// RUN: %clang -c -o %t.o %s
6*0f286f8aSBen Langmuir// RUN: %llvm_jitlink -preload libobjc.A.dylib %t.o
7*0f286f8aSBen Langmuir//
8*0f286f8aSBen Langmuir// REQUIRES: jit-compatible-osx-swift-runtime
9*0f286f8aSBen Langmuir
10*0f286f8aSBen Langmuir	.section	__TEXT,__text,regular,pure_instructions
11*0f286f8aSBen Langmuir	.build_version macos, 15, 0	sdk_version 15, 0
12*0f286f8aSBen Langmuir	.globl	_main                           ; -- Begin function main
13*0f286f8aSBen Langmuir	.p2align	2
14*0f286f8aSBen Langmuir_main:                                  ; @main
15*0f286f8aSBen Langmuir	.cfi_startproc
16*0f286f8aSBen Langmuir; %bb.0:
17*0f286f8aSBen Langmuir	sub	sp, sp, #32
18*0f286f8aSBen Langmuir	stp	x29, x30, [sp, #16]             ; 16-byte Folded Spill
19*0f286f8aSBen Langmuir	add	x29, sp, #16
20*0f286f8aSBen Langmuir	.cfi_def_cfa w29, 16
21*0f286f8aSBen Langmuir	.cfi_offset w30, -8
22*0f286f8aSBen Langmuir	.cfi_offset w29, -16
23*0f286f8aSBen Langmuir	stur	wzr, [x29, #-4]
24*0f286f8aSBen Langmuir	adrp	x8, __OBJC_PROTOCOL_REFERENCE_$_NSObject@PAGE
25*0f286f8aSBen Langmuir	ldr	x8, [x8, __OBJC_PROTOCOL_REFERENCE_$_NSObject@PAGEOFF]
26*0f286f8aSBen Langmuir	str	x8, [sp]                        ; 8-byte Folded Spill
27*0f286f8aSBen Langmuir	adrp	x0, l_.str@PAGE
28*0f286f8aSBen Langmuir	add	x0, x0, l_.str@PAGEOFF
29*0f286f8aSBen Langmuir	bl	_objc_getProtocol
30*0f286f8aSBen Langmuir	ldr	x8, [sp]                        ; 8-byte Folded Reload
31*0f286f8aSBen Langmuir	subs	x8, x8, x0
32*0f286f8aSBen Langmuir	cset	w8, eq
33*0f286f8aSBen Langmuir	and	w8, w8, #0x1
34*0f286f8aSBen Langmuir	ands	w8, w8, #0x1
35*0f286f8aSBen Langmuir	cset	w0, eq
36*0f286f8aSBen Langmuir	ldp	x29, x30, [sp, #16]             ; 16-byte Folded Reload
37*0f286f8aSBen Langmuir	add	sp, sp, #32
38*0f286f8aSBen Langmuir	ret
39*0f286f8aSBen Langmuir	.cfi_endproc
40*0f286f8aSBen Langmuir                                        ; -- End function
41*0f286f8aSBen Langmuir	.section	__TEXT,__objc_classname,cstring_literals
42*0f286f8aSBen Langmuirl_OBJC_CLASS_NAME_:                     ; @OBJC_CLASS_NAME_
43*0f286f8aSBen Langmuir	.asciz	"NSObject"
44*0f286f8aSBen Langmuir
45*0f286f8aSBen Langmuir	.private_extern	__OBJC_PROTOCOL_$_NSObject ; @"_OBJC_PROTOCOL_$_NSObject"
46*0f286f8aSBen Langmuir	.section	__DATA,__data
47*0f286f8aSBen Langmuir	.globl	__OBJC_PROTOCOL_$_NSObject
48*0f286f8aSBen Langmuir	.weak_definition	__OBJC_PROTOCOL_$_NSObject
49*0f286f8aSBen Langmuir	.p2align	3, 0x0
50*0f286f8aSBen Langmuir__OBJC_PROTOCOL_$_NSObject:
51*0f286f8aSBen Langmuir	.quad	0
52*0f286f8aSBen Langmuir	.quad	l_OBJC_CLASS_NAME_
53*0f286f8aSBen Langmuir	.quad	0
54*0f286f8aSBen Langmuir	.quad	0
55*0f286f8aSBen Langmuir	.quad	0
56*0f286f8aSBen Langmuir	.quad	0
57*0f286f8aSBen Langmuir	.quad	0
58*0f286f8aSBen Langmuir	.quad	0
59*0f286f8aSBen Langmuir	.long	96                              ; 0x60
60*0f286f8aSBen Langmuir	.long	0                               ; 0x0
61*0f286f8aSBen Langmuir	.quad	0
62*0f286f8aSBen Langmuir	.quad	0
63*0f286f8aSBen Langmuir	.quad	0
64*0f286f8aSBen Langmuir
65*0f286f8aSBen Langmuir	.private_extern	__OBJC_LABEL_PROTOCOL_$_NSObject ; @"_OBJC_LABEL_PROTOCOL_$_NSObject"
66*0f286f8aSBen Langmuir	.section	__DATA,__objc_protolist,coalesced,no_dead_strip
67*0f286f8aSBen Langmuir	.globl	__OBJC_LABEL_PROTOCOL_$_NSObject
68*0f286f8aSBen Langmuir	.weak_definition	__OBJC_LABEL_PROTOCOL_$_NSObject
69*0f286f8aSBen Langmuir	.p2align	3, 0x0
70*0f286f8aSBen Langmuir__OBJC_LABEL_PROTOCOL_$_NSObject:
71*0f286f8aSBen Langmuir	.quad	__OBJC_PROTOCOL_$_NSObject
72*0f286f8aSBen Langmuir
73*0f286f8aSBen Langmuir	.private_extern	__OBJC_PROTOCOL_REFERENCE_$_NSObject ; @"_OBJC_PROTOCOL_REFERENCE_$_NSObject"
74*0f286f8aSBen Langmuir	.section	__DATA,__objc_protorefs,coalesced,no_dead_strip
75*0f286f8aSBen Langmuir	.globl	__OBJC_PROTOCOL_REFERENCE_$_NSObject
76*0f286f8aSBen Langmuir	.weak_definition	__OBJC_PROTOCOL_REFERENCE_$_NSObject
77*0f286f8aSBen Langmuir	.p2align	3, 0x0
78*0f286f8aSBen Langmuir__OBJC_PROTOCOL_REFERENCE_$_NSObject:
79*0f286f8aSBen Langmuir	.quad	__OBJC_PROTOCOL_$_NSObject
80*0f286f8aSBen Langmuir
81*0f286f8aSBen Langmuir	.section	__TEXT,__cstring,cstring_literals
82*0f286f8aSBen Langmuirl_.str:                                 ; @.str
83*0f286f8aSBen Langmuir	.asciz	"NSObject"
84*0f286f8aSBen Langmuir
85*0f286f8aSBen Langmuir	.no_dead_strip	__OBJC_PROTOCOL_$_NSObject
86*0f286f8aSBen Langmuir	.no_dead_strip	__OBJC_LABEL_PROTOCOL_$_NSObject
87*0f286f8aSBen Langmuir	.no_dead_strip	__OBJC_PROTOCOL_REFERENCE_$_NSObject
88*0f286f8aSBen Langmuir	.section	__DATA,__objc_imageinfo,regular,no_dead_strip
89*0f286f8aSBen LangmuirL_OBJC_IMAGE_INFO:
90*0f286f8aSBen Langmuir	.long	0
91*0f286f8aSBen Langmuir	.long	64
92*0f286f8aSBen Langmuir
93*0f286f8aSBen Langmuir.subsections_via_symbols
94