| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- /* 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 */
|