xref: /optee_os/core/include/keep.h (revision 99f278d96236dda13de5df858e07f8a24b92d6dc)
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 
8757331fcSJens Wiklander #ifdef __ASSEMBLER__
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 
308d527cd6SJens Wiklander #define __KEEP_PAGER2(sym, file_id) \
318727ab2eSJens Wiklander 	extern const unsigned long ____keep_pager_##sym; \
328d527cd6SJens Wiklander 	const unsigned long ____keep_pager_##sym##_##file_id  \
33*99f278d9SJerome Forissier 		__section("__keep_meta_vars_pager") = (unsigned long)&(sym)
349fa130bfSJens Wiklander 
358d527cd6SJens Wiklander #define __KEEP_PAGER1(sym, file_id)	__KEEP_PAGER2(sym, file_id)
368d527cd6SJens Wiklander #define KEEP_PAGER(sym)			__KEEP_PAGER1(sym, __FILE_ID__)
378d527cd6SJens Wiklander 
388d527cd6SJens Wiklander #define __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  \
41*99f278d9SJerome Forissier 		__section("__keep_meta_vars_init") = (unsigned long)&(sym)
429fa130bfSJens Wiklander 
438d527cd6SJens Wiklander #define __KEEP_INIT1(sym, file_id)	__KEEP_INIT2(sym, file_id)
448d527cd6SJens Wiklander #define KEEP_INIT(sym)			__KEEP_INIT1(sym, __FILE_ID__)
458d527cd6SJens Wiklander 
46757331fcSJens Wiklander #endif /* __ASSEMBLER__ */
47d6e86abcSJerome Forissier 
489fa130bfSJens Wiklander #endif /*KEEP_H*/
49