Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#ifndef __ASM_LINKAGE_H
2#define __ASM_LINKAGE_H
3
4#define __ALIGN .align 2
5#define __ALIGN_STR ".align 2"
6
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
63#endif