Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef __ASM_COMPILER_H
3#define __ASM_COMPILER_H
4
5#ifdef ARM64_ASM_ARCH
6#define ARM64_ASM_PREAMBLE ".arch " ARM64_ASM_ARCH "\n"
7#else
8#define ARM64_ASM_PREAMBLE
9#endif
10
11#define xpaclri(ptr) \
12({ \
13 register unsigned long __xpaclri_ptr asm("x30") = (ptr); \
14 \
15 asm( \
16 ARM64_ASM_PREAMBLE \
17 " hint #7\n" \
18 : "+r" (__xpaclri_ptr)); \
19 \
20 __xpaclri_ptr; \
21})
22
23#ifdef CONFIG_ARM64_PTR_AUTH_KERNEL
24#define ptrauth_strip_kernel_insn_pac(ptr) xpaclri(ptr)
25#else
26#define ptrauth_strip_kernel_insn_pac(ptr) (ptr)
27#endif
28
29#ifdef CONFIG_ARM64_PTR_AUTH
30#define ptrauth_strip_user_insn_pac(ptr) xpaclri(ptr)
31#else
32#define ptrauth_strip_user_insn_pac(ptr) (ptr)
33#endif
34
35#if !defined(CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC)
36#define __builtin_return_address(val) \
37 (void *)(ptrauth_strip_kernel_insn_pac((unsigned long)__builtin_return_address(val)))
38#endif
39
40#endif /* __ASM_COMPILER_H */