xref: /openbmc/linux/arch/arm64/include/asm/linkage.h (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
1aeed41a9SMarc Zyngier #ifndef __ASM_LINKAGE_H
2aeed41a9SMarc Zyngier #define __ASM_LINKAGE_H
3aeed41a9SMarc Zyngier 
4dd73d18eSCatalin Marinas #ifdef __ASSEMBLY__
5dd73d18eSCatalin Marinas #include <asm/assembler.h>
6dd73d18eSCatalin Marinas #endif
7dd73d18eSCatalin Marinas 
8*47a15aa5SMark Rutland #define __ALIGN		.balign CONFIG_FUNCTION_ALIGNMENT
9*47a15aa5SMark Rutland #define __ALIGN_STR	".balign " #CONFIG_FUNCTION_ALIGNMENT
10aeed41a9SMarc Zyngier 
11714a8d02SMark Brown /*
12481ee45cSMark Brown  * When using in-kernel BTI we need to ensure that PCS-conformant
13481ee45cSMark Brown  * assembly functions have suitable annotations.  Override
14481ee45cSMark Brown  * SYM_FUNC_START to insert a BTI landing pad at the start of
15481ee45cSMark Brown  * everything, the override is done unconditionally so we're more
16481ee45cSMark Brown  * likely to notice any drift from the overridden definitions.
17714a8d02SMark Brown  */
18714a8d02SMark Brown #define SYM_FUNC_START(name)				\
19714a8d02SMark Brown 	SYM_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)	\
20742a15b1SMark Brown 	bti c ;
21714a8d02SMark Brown 
22714a8d02SMark Brown #define SYM_FUNC_START_NOALIGN(name)			\
23714a8d02SMark Brown 	SYM_START(name, SYM_L_GLOBAL, SYM_A_NONE)	\
24742a15b1SMark Brown 	bti c ;
25714a8d02SMark Brown 
26714a8d02SMark Brown #define SYM_FUNC_START_LOCAL(name)			\
27714a8d02SMark Brown 	SYM_START(name, SYM_L_LOCAL, SYM_A_ALIGN)	\
28742a15b1SMark Brown 	bti c ;
29714a8d02SMark Brown 
30714a8d02SMark Brown #define SYM_FUNC_START_LOCAL_NOALIGN(name)		\
31714a8d02SMark Brown 	SYM_START(name, SYM_L_LOCAL, SYM_A_NONE)	\
32742a15b1SMark Brown 	bti c ;
33714a8d02SMark Brown 
34714a8d02SMark Brown #define SYM_FUNC_START_WEAK(name)			\
35714a8d02SMark Brown 	SYM_START(name, SYM_L_WEAK, SYM_A_ALIGN)	\
36742a15b1SMark Brown 	bti c ;
37714a8d02SMark Brown 
38714a8d02SMark Brown #define SYM_FUNC_START_WEAK_NOALIGN(name)		\
39714a8d02SMark Brown 	SYM_START(name, SYM_L_WEAK, SYM_A_NONE)		\
40742a15b1SMark Brown 	bti c ;
41714a8d02SMark Brown 
42c50d3285SSami Tolvanen #define SYM_TYPED_FUNC_START(name)				\
43c50d3285SSami Tolvanen 	SYM_TYPED_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)	\
44c50d3285SSami Tolvanen 	bti c ;
45c50d3285SSami Tolvanen 
46aeed41a9SMarc Zyngier #endif
47