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