xref: /optee_os/core/include/keep.h (revision 817466cb476de705a8e3dabe1ef165fe27a18c2f)
1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*
3  * Copyright (c) 2015, Linaro Limited
4  */
5 #ifndef KEEP_H
6 #define KEEP_H
7 
8 #ifdef ASM
9 
10 	.macro KEEP_PAGER sym
11 	.pushsection __keep_meta_vars_pager
12 	.global ____keep_pager_\sym
13 	____keep_pager_\sym:
14 	.long	\sym
15 	.popsection
16 	.endm
17 
18 	.macro KEEP_INIT sym
19 	.pushsection __keep_meta_vars_init
20 	.global ____keep_init_\sym
21 	____keep_init_\sym:
22 	.long	\sym
23 	.popsection
24 	.endm
25 
26 #else
27 
28 #include <compiler.h>
29 
30 #define KEEP_PAGER(sym) \
31 	extern const unsigned long ____keep_pager_##sym; \
32 	const unsigned long ____keep_pager_##sym  \
33 		__section("__keep_meta_vars_pager") = (unsigned long)&sym
34 
35 #define KEEP_INIT(sym) \
36 	extern const unsigned long ____keep_init_##sym; \
37 	const unsigned long ____keep_init_##sym  \
38 		__section("__keep_meta_vars_init") = (unsigned long)&sym
39 
40 #endif /* ASM */
41 
42 #endif /*KEEP_H*/
43