xref: /optee_os/core/include/keep.h (revision d50fee0321fe6853ac6352cf0fd548666457b407)
11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */
29fa130bfSJens Wiklander /*
39fa130bfSJens Wiklander  * Copyright (c) 2015, Linaro Limited
49fa130bfSJens Wiklander  */
5*d50fee03SEtienne Carriere #ifndef __KEEP_H
6*d50fee03SEtienne Carriere #define __KEEP_H
79fa130bfSJens Wiklander 
8757331fcSJens Wiklander #ifdef __ASSEMBLER__
9d6e86abcSJerome Forissier 
103639b55fSJerome Forissier 	.macro DECLARE_KEEP_PAGER sym
11814fc2e8SJerome Forissier 	.pushsection __keep_meta_vars_pager, "a"
12b5ca97ccSJens Wiklander 	.global ____keep_pager_\sym
13b5ca97ccSJens Wiklander 	____keep_pager_\sym:
14d6e86abcSJerome Forissier 	.long	\sym
15d6e86abcSJerome Forissier 	.popsection
16d6e86abcSJerome Forissier 	.endm
17d6e86abcSJerome Forissier 
183639b55fSJerome Forissier 	.macro DECLARE_KEEP_INIT sym
19814fc2e8SJerome Forissier 	.pushsection __keep_meta_vars_init, "a"
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 
303639b55fSJerome Forissier #define __DECLARE_KEEP_PAGER2(sym, file_id) \
318727ab2eSJens Wiklander 	extern const unsigned long ____keep_pager_##sym; \
328d527cd6SJens Wiklander 	const unsigned long ____keep_pager_##sym##_##file_id  \
3399f278d9SJerome Forissier 		__section("__keep_meta_vars_pager") = (unsigned long)&(sym)
349fa130bfSJens Wiklander 
353639b55fSJerome Forissier #define __DECLARE_KEEP_PAGER1(sym, file_id) __DECLARE_KEEP_PAGER2(sym, file_id)
363639b55fSJerome Forissier #define DECLARE_KEEP_PAGER(sym) __DECLARE_KEEP_PAGER1(sym, __FILE_ID__)
378d527cd6SJens Wiklander 
383639b55fSJerome Forissier #define __DECLARE_KEEP_INIT2(sym, file_id) \
398d527cd6SJens Wiklander 	extern const unsigned long ____keep_init_##sym##file_id; \
408d527cd6SJens Wiklander 	const unsigned long ____keep_init_##sym##_##file_id  \
4199f278d9SJerome Forissier 		__section("__keep_meta_vars_init") = (unsigned long)&(sym)
429fa130bfSJens Wiklander 
433639b55fSJerome Forissier #define __DECLARE_KEEP_INIT1(sym, file_id) __DECLARE_KEEP_INIT2(sym, file_id)
443639b55fSJerome Forissier #define DECLARE_KEEP_INIT(sym) __DECLARE_KEEP_INIT1(sym, __FILE_ID__)
458d527cd6SJens Wiklander 
46757331fcSJens Wiklander #endif /* __ASSEMBLER__ */
47d6e86abcSJerome Forissier 
48*d50fee03SEtienne Carriere #endif /*__KEEP_H*/
49