xref: /optee_os/core/include/kernel/linker.h (revision 889fb568a7f1de7807415a33d603165289a005bc)
14a96f1f5SMarouene Boubakri /* SPDX-License-Identifier: BSD-2-Clause */
24a96f1f5SMarouene Boubakri /*
34a96f1f5SMarouene Boubakri  * Copyright (c) 2017, Linaro Limited
44a96f1f5SMarouene Boubakri  */
54a96f1f5SMarouene Boubakri #ifndef __KERNEL_LINKER_H
64a96f1f5SMarouene Boubakri #define __KERNEL_LINKER_H
74a96f1f5SMarouene Boubakri 
84a96f1f5SMarouene Boubakri #include <kernel/dt.h>
94a96f1f5SMarouene Boubakri #include <types_ext.h>
104a96f1f5SMarouene Boubakri 
114a96f1f5SMarouene Boubakri /*
124a96f1f5SMarouene Boubakri  * Symbols exported by the link script.
134a96f1f5SMarouene Boubakri  */
144a96f1f5SMarouene Boubakri 
154a96f1f5SMarouene Boubakri #ifdef __arm__
164a96f1f5SMarouene Boubakri 
174a96f1f5SMarouene Boubakri /*
184a96f1f5SMarouene Boubakri  * These addresses will be the start or end of the exception binary search
194a96f1f5SMarouene Boubakri  * index table (.ARM.exidx section)
204a96f1f5SMarouene Boubakri  */
214a96f1f5SMarouene Boubakri extern const uint8_t __exidx_start[];
224a96f1f5SMarouene Boubakri extern const uint8_t __exidx_end[];
234a96f1f5SMarouene Boubakri extern const uint8_t __extab_start[];
244a96f1f5SMarouene Boubakri extern const uint8_t __extab_end[];
254a96f1f5SMarouene Boubakri 
264a96f1f5SMarouene Boubakri #endif
274a96f1f5SMarouene Boubakri 
284a96f1f5SMarouene Boubakri /*
294a96f1f5SMarouene Boubakri  * Warning! (ASLR) Do not use any of the _SZ_UNSAFE defines or _size[] variables
304a96f1f5SMarouene Boubakri  * below in code that runs after dynamic relocations have been applied. Their
314a96f1f5SMarouene Boubakri  * value could be *wrong* after relocation (for instance Aarch64 GCC 9.2
324a96f1f5SMarouene Boubakri  * generates dynamic relocations for the _size[] symbols, but Clang 11.0.0 does
334a96f1f5SMarouene Boubakri  * not). The _SZ_UNSAFE macros are mostly here for use in register_phys_mem()
344a96f1f5SMarouene Boubakri  * where the _SZ macros would be rejected by the compiler ('initializer element
354a96f1f5SMarouene Boubakri  * is not constant'). Other uses are likely to be incorrect.
364a96f1f5SMarouene Boubakri  */
374a96f1f5SMarouene Boubakri 
384a96f1f5SMarouene Boubakri #define VCORE_UNPG_RX_PA	((unsigned long)__vcore_unpg_rx_start)
394a96f1f5SMarouene Boubakri #define VCORE_UNPG_RX_SZ_UNSAFE	((size_t)__vcore_unpg_rx_size)
404a96f1f5SMarouene Boubakri #define VCORE_UNPG_RX_SZ	((size_t)(__vcore_unpg_rx_end - \
414a96f1f5SMarouene Boubakri 					  __vcore_unpg_rx_start))
424a96f1f5SMarouene Boubakri #define VCORE_UNPG_RO_PA	((unsigned long)__vcore_unpg_ro_start)
434a96f1f5SMarouene Boubakri #define VCORE_UNPG_RO_SZ_UNSAFE	((size_t)__vcore_unpg_ro_size)
444a96f1f5SMarouene Boubakri #define VCORE_UNPG_RO_SZ	((size_t)(__vcore_unpg_ro_end - \
454a96f1f5SMarouene Boubakri 					  __vcore_unpg_ro_start))
464a96f1f5SMarouene Boubakri #define VCORE_UNPG_RW_PA	((unsigned long)__vcore_unpg_rw_start)
474a96f1f5SMarouene Boubakri #define VCORE_UNPG_RW_SZ_UNSAFE	((size_t)__vcore_unpg_rw_size)
484a96f1f5SMarouene Boubakri #define VCORE_UNPG_RW_SZ	((size_t)(__vcore_unpg_rw_end - \
494a96f1f5SMarouene Boubakri 					  __vcore_unpg_rw_start))
504a96f1f5SMarouene Boubakri #define VCORE_NEX_RW_PA	((unsigned long)__vcore_nex_rw_start)
514a96f1f5SMarouene Boubakri #define VCORE_NEX_RW_SZ_UNSAFE	((size_t)__vcore_nex_rw_size)
524a96f1f5SMarouene Boubakri #define VCORE_NEX_RW_SZ	((size_t)__vcore_nex_rw_end - \
534a96f1f5SMarouene Boubakri 					 __vcore_nex_rw_start)
544a96f1f5SMarouene Boubakri #define VCORE_INIT_RX_PA	((unsigned long)__vcore_init_rx_start)
554a96f1f5SMarouene Boubakri #define VCORE_INIT_RX_SZ_UNSAFE	((size_t)__vcore_init_rx_size)
564a96f1f5SMarouene Boubakri #define VCORE_INIT_RX_SZ	((size_t)(__vcore_init_rx_end - \
574a96f1f5SMarouene Boubakri 					  __vcore_init_rx_start))
584a96f1f5SMarouene Boubakri #define VCORE_INIT_RO_PA	((unsigned long)__vcore_init_ro_start)
594a96f1f5SMarouene Boubakri #define VCORE_INIT_RO_SZ_UNSAFE	((size_t)__vcore_init_ro_size)
604a96f1f5SMarouene Boubakri #define VCORE_INIT_RO_SZ	((size_t)(__vcore_init_ro_end - \
614a96f1f5SMarouene Boubakri 					  __vcore_init_ro_start))
624a96f1f5SMarouene Boubakri 
634a96f1f5SMarouene Boubakri #define VCORE_START_VA		((vaddr_t)__text_start)
644a96f1f5SMarouene Boubakri 
654a96f1f5SMarouene Boubakri #define EMIT_SECTION_INFO_SYMBOLS(section_name) \
664a96f1f5SMarouene Boubakri 	extern const uint8_t __vcore_ ## section_name ## _start[]; \
674a96f1f5SMarouene Boubakri 	extern const uint8_t __vcore_ ## section_name ## _end[]; \
684a96f1f5SMarouene Boubakri 	extern const uint8_t __vcore_ ## section_name ## _size[]
694a96f1f5SMarouene Boubakri 
704a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_rx);
714a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_ro);
724a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_rw);
734a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(nex_rw);
744a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(init_ro);
754a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(init_rx);
764a96f1f5SMarouene Boubakri 
774a96f1f5SMarouene Boubakri #undef EMIT_SECTION_INFO_SYMBOLS
784a96f1f5SMarouene Boubakri 
794a96f1f5SMarouene Boubakri extern const uint8_t __text_start[];
80*889fb568SJerome Forissier extern const uint8_t __text_data_start[];
81*889fb568SJerome Forissier extern const uint8_t __text_data_end[];
82d3a996cfSJerome Forissier extern const uint8_t __text_end[];
834a96f1f5SMarouene Boubakri extern const uint8_t __end[];
844a96f1f5SMarouene Boubakri 
854a96f1f5SMarouene Boubakri extern const uint8_t __identity_map_init_start[];
864a96f1f5SMarouene Boubakri extern const uint8_t __identity_map_init_end[];
874a96f1f5SMarouene Boubakri 
884a96f1f5SMarouene Boubakri extern uint8_t __data_start[];
894a96f1f5SMarouene Boubakri extern const uint8_t __data_end[];
904a96f1f5SMarouene Boubakri extern const uint8_t __rodata_start[];
914a96f1f5SMarouene Boubakri extern const uint8_t __rodata_end[];
924a96f1f5SMarouene Boubakri extern const uint8_t __bss_start[];
934a96f1f5SMarouene Boubakri extern const uint8_t __bss_end[];
944a96f1f5SMarouene Boubakri extern const uint8_t __nozi_start[];
954a96f1f5SMarouene Boubakri extern const uint8_t __nozi_end[];
964a96f1f5SMarouene Boubakri extern const uint8_t __nozi_stack_start[];
974a96f1f5SMarouene Boubakri extern const uint8_t __nozi_stack_end[];
984a96f1f5SMarouene Boubakri extern const uint8_t __init_start[];
994a96f1f5SMarouene Boubakri extern const uint8_t __init_end[];
1004a96f1f5SMarouene Boubakri 
1014a96f1f5SMarouene Boubakri extern uint8_t __heap1_start[];
1024a96f1f5SMarouene Boubakri extern const uint8_t __heap1_end[];
1034a96f1f5SMarouene Boubakri extern uint8_t __heap2_start[];
1044a96f1f5SMarouene Boubakri extern const uint8_t __heap2_end[];
1054a96f1f5SMarouene Boubakri 
1064a96f1f5SMarouene Boubakri extern uint8_t __nex_heap_start[];
1074a96f1f5SMarouene Boubakri extern const uint8_t __nex_heap_end[];
1084a96f1f5SMarouene Boubakri 
1094a96f1f5SMarouene Boubakri extern const uint8_t __pageable_part_start[];
1104a96f1f5SMarouene Boubakri extern const uint8_t __pageable_part_end[];
1114a96f1f5SMarouene Boubakri extern const uint8_t __pageable_start[];
1124a96f1f5SMarouene Boubakri extern const uint8_t __pageable_end[];
1134a96f1f5SMarouene Boubakri 
1144a96f1f5SMarouene Boubakri #define ASAN_SHADOW_PA	((paddr_t)__asan_shadow_start)
1154a96f1f5SMarouene Boubakri #define ASAN_SHADOW_SZ	((size_t)__asan_shadow_size)
1164a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_start[];
1174a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_end[];
1184a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_size[];
1194a96f1f5SMarouene Boubakri 
1204a96f1f5SMarouene Boubakri #define ASAN_MAP_PA	((paddr_t)__asan_map_start)
1214a96f1f5SMarouene Boubakri #define ASAN_MAP_SZ	((size_t)__asan_map_size)
1224a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_start[];
1234a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_end[];
1244a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_size[];
1254a96f1f5SMarouene Boubakri 
1264a96f1f5SMarouene Boubakri extern const vaddr_t __ctor_list;
1274a96f1f5SMarouene Boubakri extern const vaddr_t __ctor_end;
1284a96f1f5SMarouene Boubakri 
1294a96f1f5SMarouene Boubakri /* Generated by core/arch/$(ARCH)/kernel/link.mk */
1304a96f1f5SMarouene Boubakri extern const char core_v_str[];
1314a96f1f5SMarouene Boubakri 
1324a96f1f5SMarouene Boubakri #endif /*__KERNEL_LINKER_H*/
1334a96f1f5SMarouene Boubakri 
134