xref: /optee_os/core/include/keep.h (revision 8d527cd6cc479ecb815addb644e130a9f5e27228)
11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */
29fa130bfSJens Wiklander /*
39fa130bfSJens Wiklander  * Copyright (c) 2015, Linaro Limited
49fa130bfSJens Wiklander  */
59fa130bfSJens Wiklander #ifndef KEEP_H
69fa130bfSJens Wiklander #define KEEP_H
79fa130bfSJens Wiklander 
8d6e86abcSJerome Forissier #ifdef ASM
9d6e86abcSJerome Forissier 
10d6e86abcSJerome Forissier 	.macro KEEP_PAGER sym
11d6e86abcSJerome Forissier 	.pushsection __keep_meta_vars_pager
12b5ca97ccSJens Wiklander 	.global ____keep_pager_\sym
13b5ca97ccSJens Wiklander 	____keep_pager_\sym:
14d6e86abcSJerome Forissier 	.long	\sym
15d6e86abcSJerome Forissier 	.popsection
16d6e86abcSJerome Forissier 	.endm
17d6e86abcSJerome Forissier 
18d6e86abcSJerome Forissier 	.macro KEEP_INIT sym
19d6e86abcSJerome Forissier 	.pushsection __keep_meta_vars_init
20b5ca97ccSJens Wiklander 	.global ____keep_init_\sym
21b5ca97ccSJens Wiklander 	____keep_init_\sym:
22d6e86abcSJerome Forissier 	.long	\sym
23d6e86abcSJerome Forissier 	.popsection
24d6e86abcSJerome Forissier 	.endm
25d6e86abcSJerome Forissier 
26d6e86abcSJerome Forissier #else
27d6e86abcSJerome Forissier 
289fa130bfSJens Wiklander #include <compiler.h>
299fa130bfSJens Wiklander 
30*8d527cd6SJens Wiklander #define __KEEP_PAGER2(sym, file_id) \
318727ab2eSJens Wiklander 	extern const unsigned long ____keep_pager_##sym; \
32*8d527cd6SJens Wiklander 	const unsigned long ____keep_pager_##sym##_##file_id  \
339fa130bfSJens Wiklander 		__section("__keep_meta_vars_pager") = (unsigned long)&sym
349fa130bfSJens Wiklander 
35*8d527cd6SJens Wiklander #define __KEEP_PAGER1(sym, file_id)	__KEEP_PAGER2(sym, file_id)
36*8d527cd6SJens Wiklander #define KEEP_PAGER(sym)			__KEEP_PAGER1(sym, __FILE_ID__)
37*8d527cd6SJens Wiklander 
38*8d527cd6SJens Wiklander #define __KEEP_INIT2(sym, file_id) \
39*8d527cd6SJens Wiklander 	extern const unsigned long ____keep_init_##sym##file_id; \
40*8d527cd6SJens Wiklander 	const unsigned long ____keep_init_##sym##_##file_id  \
419fa130bfSJens Wiklander 		__section("__keep_meta_vars_init") = (unsigned long)&sym
429fa130bfSJens Wiklander 
43*8d527cd6SJens Wiklander #define __KEEP_INIT1(sym, file_id)	__KEEP_INIT2(sym, file_id)
44*8d527cd6SJens Wiklander #define KEEP_INIT(sym)			__KEEP_INIT1(sym, __FILE_ID__)
45*8d527cd6SJens Wiklander 
46d6e86abcSJerome Forissier #endif /* ASM */
47d6e86abcSJerome Forissier 
489fa130bfSJens Wiklander #endif /*KEEP_H*/
49