• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef __ASM_LINKAGE_H
2 #define __ASM_LINKAGE_H
3 
4 #ifdef __ASSEMBLY__
5 #include <asm/assembler.h>
6 #endif
7 
8 #define __ALIGN		.align 2
9 #define __ALIGN_STR	".align 2"
10 
11 #if defined(CONFIG_ARM64_BTI_KERNEL) && defined(__aarch64__)
12 
13 #define BTI_C bti c ;
14 
15 /*
16  * When using in-kernel BTI we need to ensure that PCS-conformant assembly
17  * functions have suitable annotations.  Override SYM_FUNC_START to insert
18  * a BTI landing pad at the start of everything.
19  */
20 #define SYM_FUNC_START(name)				\
21 	SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)	\
22 	BTI_C
23 
24 #define SYM_FUNC_START_NOALIGN(name)			\
25 	SYM_START(name, SYM_L_GLOBAL, SYM_A_NONE)	\
26 	BTI_C
27 
28 #define SYM_FUNC_START_LOCAL(name)			\
29 	SYM_START(name, SYM_L_LOCAL, SYM_A_ALIGN)	\
30 	BTI_C
31 
32 #define SYM_FUNC_START_LOCAL_NOALIGN(name)		\
33 	SYM_START(name, SYM_L_LOCAL, SYM_A_NONE)	\
34 	BTI_C
35 
36 #define SYM_FUNC_START_WEAK(name)			\
37 	SYM_START(name, SYM_L_WEAK, SYM_A_ALIGN)	\
38 	BTI_C
39 
40 #define SYM_FUNC_START_WEAK_NOALIGN(name)		\
41 	SYM_START(name, SYM_L_WEAK, SYM_A_NONE)		\
42 	BTI_C
43 
44 #endif
45 
46 /*
47  * Annotate a function as position independent, i.e., safe to be called before
48  * the kernel virtual mapping is activated.
49  */
50 #define SYM_FUNC_START_PI(x)			\
51 		SYM_FUNC_START_ALIAS(__pi_##x);	\
52 		SYM_FUNC_START(x)
53 
54 #define SYM_FUNC_START_WEAK_PI(x)		\
55 		SYM_FUNC_START_ALIAS(__pi_##x);	\
56 		SYM_FUNC_START_WEAK(x)
57 
58 #define SYM_FUNC_START_WEAK_ALIAS_PI(x)		\
59 		SYM_FUNC_START_ALIAS(__pi_##x);	\
60 		SYM_START(x, SYM_L_WEAK, SYM_A_ALIGN)
61 
62 #define SYM_FUNC_END_PI(x)			\
63 		SYM_FUNC_END(x);		\
64 		SYM_FUNC_END_ALIAS(__pi_##x)
65 
66 #define SYM_FUNC_END_ALIAS_PI(x)		\
67 		SYM_FUNC_END_ALIAS(x);		\
68 		SYM_FUNC_END_ALIAS(__pi_##x)
69 
70 #endif
71