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