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