xref: /linux/arch/arm64/include/asm/compiler.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1689eae42SAmit Daniel Kachhap /* SPDX-License-Identifier: GPL-2.0 */
2689eae42SAmit Daniel Kachhap #ifndef __ASM_COMPILER_H
3689eae42SAmit Daniel Kachhap #define __ASM_COMPILER_H
4689eae42SAmit Daniel Kachhap 
51764c3edSSami Tolvanen #ifdef ARM64_ASM_ARCH
61764c3edSSami Tolvanen #define ARM64_ASM_PREAMBLE ".arch " ARM64_ASM_ARCH "\n"
71764c3edSSami Tolvanen #else
81764c3edSSami Tolvanen #define ARM64_ASM_PREAMBLE
91764c3edSSami Tolvanen #endif
101764c3edSSami Tolvanen 
11*ca708599SMark Rutland #define xpaclri(ptr)							\
12*ca708599SMark Rutland ({									\
13*ca708599SMark Rutland 	register unsigned long __xpaclri_ptr asm("x30") = (ptr);	\
14*ca708599SMark Rutland 									\
15*ca708599SMark Rutland 	asm(								\
16*ca708599SMark Rutland 	ARM64_ASM_PREAMBLE						\
17*ca708599SMark Rutland 	"	hint	#7\n"						\
18*ca708599SMark Rutland 	: "+r" (__xpaclri_ptr));					\
19*ca708599SMark Rutland 									\
20*ca708599SMark Rutland 	__xpaclri_ptr;							\
21*ca708599SMark Rutland })
22689eae42SAmit Daniel Kachhap 
23*ca708599SMark Rutland #ifdef CONFIG_ARM64_PTR_AUTH_KERNEL
24*ca708599SMark Rutland #define ptrauth_strip_kernel_insn_pac(ptr)	xpaclri(ptr)
25*ca708599SMark Rutland #else
26*ca708599SMark Rutland #define ptrauth_strip_kernel_insn_pac(ptr)	(ptr)
27*ca708599SMark Rutland #endif
28*ca708599SMark Rutland 
29*ca708599SMark Rutland #ifdef CONFIG_ARM64_PTR_AUTH
30*ca708599SMark Rutland #define ptrauth_strip_user_insn_pac(ptr)	xpaclri(ptr)
31*ca708599SMark Rutland #else
32*ca708599SMark Rutland #define ptrauth_strip_user_insn_pac(ptr)	(ptr)
33*ca708599SMark Rutland #endif
34*ca708599SMark Rutland 
35*ca708599SMark Rutland #if !defined(CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC)
36689eae42SAmit Daniel Kachhap #define __builtin_return_address(val)					\
37*ca708599SMark Rutland 	(void *)(ptrauth_strip_kernel_insn_pac((unsigned long)__builtin_return_address(val)))
389df3f508SMark Rutland #endif
39689eae42SAmit Daniel Kachhap 
40689eae42SAmit Daniel Kachhap #endif /* __ASM_COMPILER_H */
41