/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __ASM_COMPILER_H #define __ASM_COMPILER_H #ifdef ARM64_ASM_ARCH #define ARM64_ASM_PREAMBLE ".arch " ARM64_ASM_ARCH "\n" #else #define ARM64_ASM_PREAMBLE #endif #define xpaclri(ptr) \ ({ \ register unsigned long __xpaclri_ptr asm("x30") = (ptr); \ \ asm( \ ARM64_ASM_PREAMBLE \ " hint #7\n" \ : "+r" (__xpaclri_ptr)); \ \ __xpaclri_ptr; \ }) #ifdef CONFIG_ARM64_PTR_AUTH_KERNEL #define ptrauth_strip_kernel_insn_pac(ptr) xpaclri(ptr) #else #define ptrauth_strip_kernel_insn_pac(ptr) (ptr) #endif #ifdef CONFIG_ARM64_PTR_AUTH #define ptrauth_strip_user_insn_pac(ptr) xpaclri(ptr) #else #define ptrauth_strip_user_insn_pac(ptr) (ptr) #endif #if !defined(CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC) #define __builtin_return_address(val) \ (void *)(ptrauth_strip_kernel_insn_pac((unsigned long)__builtin_return_address(val))) #endif #endif /* __ASM_COMPILER_H */