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