hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/arch/arm64/include/asm/linkage.h
....@@ -4,4 +4,60 @@
44 #define __ALIGN .align 2
55 #define __ALIGN_STR ".align 2"
66
7
+#if defined(CONFIG_ARM64_BTI_KERNEL) && defined(__aarch64__)
8
+
9
+/*
10
+ * Since current versions of gas reject the BTI instruction unless we
11
+ * set the architecture version to v8.5 we use the hint instruction
12
+ * instead.
13
+ */
14
+#define BTI_C hint 34 ;
15
+
16
+/*
17
+ * When using in-kernel BTI we need to ensure that PCS-conformant assembly
18
+ * functions have suitable annotations. Override SYM_FUNC_START to insert
19
+ * a BTI landing pad at the start of everything.
20
+ */
21
+#define SYM_FUNC_START(name) \
22
+ SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN) \
23
+ BTI_C
24
+
25
+#define SYM_FUNC_START_NOALIGN(name) \
26
+ SYM_START(name, SYM_L_GLOBAL, SYM_A_NONE) \
27
+ BTI_C
28
+
29
+#define SYM_FUNC_START_LOCAL(name) \
30
+ SYM_START(name, SYM_L_LOCAL, SYM_A_ALIGN) \
31
+ BTI_C
32
+
33
+#define SYM_FUNC_START_LOCAL_NOALIGN(name) \
34
+ SYM_START(name, SYM_L_LOCAL, SYM_A_NONE) \
35
+ BTI_C
36
+
37
+#define SYM_FUNC_START_WEAK(name) \
38
+ SYM_START(name, SYM_L_WEAK, SYM_A_ALIGN) \
39
+ BTI_C
40
+
41
+#define SYM_FUNC_START_WEAK_NOALIGN(name) \
42
+ SYM_START(name, SYM_L_WEAK, SYM_A_NONE) \
43
+ BTI_C
44
+
45
+#endif
46
+
47
+/*
48
+ * Annotate a function as position independent, i.e., safe to be called before
49
+ * the kernel virtual mapping is activated.
50
+ */
51
+#define SYM_FUNC_START_PI(x) \
52
+ SYM_FUNC_START_ALIAS(__pi_##x); \
53
+ SYM_FUNC_START(x)
54
+
55
+#define SYM_FUNC_START_WEAK_PI(x) \
56
+ SYM_FUNC_START_ALIAS(__pi_##x); \
57
+ SYM_FUNC_START_WEAK(x)
58
+
59
+#define SYM_FUNC_END_PI(x) \
60
+ SYM_FUNC_END(x); \
61
+ SYM_FUNC_END_ALIAS(__pi_##x)
62
+
763 #endif