hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/arch/arm64/include/asm/compiler.h
....@@ -1,30 +1,26 @@
1
-/*
2
- * Based on arch/arm/include/asm/compiler.h
3
- *
4
- * Copyright (C) 2012 ARM Ltd.
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License version 2 as
8
- * published by the Free Software Foundation.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU General Public License
16
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
17
- */
1
+/* SPDX-License-Identifier: GPL-2.0 */
182 #ifndef __ASM_COMPILER_H
193 #define __ASM_COMPILER_H
204
21
-/*
22
- * This is used to ensure the compiler did actually allocate the register we
23
- * asked it for some inline assembly sequences. Apparently we can't trust the
24
- * compiler from one version to another so a bit of paranoia won't hurt. This
25
- * string is meant to be concatenated with the inline asm string and will
26
- * cause compilation to stop on mismatch. (for details, see gcc PR 15089)
27
- */
28
-#define __asmeq(x, y) ".ifnc " x "," y " ; .err ; .endif\n\t"
5
+#ifdef ARM64_ASM_ARCH
6
+#define ARM64_ASM_PREAMBLE ".arch " ARM64_ASM_ARCH "\n"
7
+#else
8
+#define ARM64_ASM_PREAMBLE
9
+#endif
2910
30
-#endif /* __ASM_COMPILER_H */
11
+/*
12
+ * The EL0/EL1 pointer bits used by a pointer authentication code.
13
+ * This is dependent on TBI0/TBI1 being enabled, or bits 63:56 would also apply.
14
+ */
15
+#define ptrauth_user_pac_mask() GENMASK_ULL(54, vabits_actual)
16
+#define ptrauth_kernel_pac_mask() GENMASK_ULL(63, vabits_actual)
17
+
18
+/* Valid for EL0 TTBR0 and EL1 TTBR1 instruction pointers */
19
+#define ptrauth_clear_pac(ptr) \
20
+ ((ptr & BIT_ULL(55)) ? (ptr | ptrauth_kernel_pac_mask()) : \
21
+ (ptr & ~ptrauth_user_pac_mask()))
22
+
23
+#define __builtin_return_address(val) \
24
+ (void *)(ptrauth_clear_pac((unsigned long)__builtin_return_address(val)))
25
+
26
+#endif /* __ASM_COMPILER_H */