xref: /optee_os/core/include/kernel/linker.h (revision a5ac48d613cfc1ad60ddf7a3e23fef218528fa2f)
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 
150b00e98dSJerome Forissier #ifdef ARM32
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 #define VCORE_UNPG_RX_PA	((unsigned long)__vcore_unpg_rx_start)
294a96f1f5SMarouene Boubakri #define VCORE_UNPG_RX_SZ	((size_t)(__vcore_unpg_rx_end - \
304a96f1f5SMarouene Boubakri 					  __vcore_unpg_rx_start))
314a96f1f5SMarouene Boubakri #define VCORE_UNPG_RO_PA	((unsigned long)__vcore_unpg_ro_start)
324a96f1f5SMarouene Boubakri #define VCORE_UNPG_RO_SZ	((size_t)(__vcore_unpg_ro_end - \
334a96f1f5SMarouene Boubakri 					  __vcore_unpg_ro_start))
344a96f1f5SMarouene Boubakri #define VCORE_UNPG_RW_PA	((unsigned long)__vcore_unpg_rw_start)
354a96f1f5SMarouene Boubakri #define VCORE_UNPG_RW_SZ	((size_t)(__vcore_unpg_rw_end - \
364a96f1f5SMarouene Boubakri 					  __vcore_unpg_rw_start))
374a96f1f5SMarouene Boubakri #define VCORE_NEX_RW_PA	((unsigned long)__vcore_nex_rw_start)
380f2735cdSJens Wiklander #define VCORE_NEX_RW_SZ	((size_t)(__vcore_nex_rw_end - \
390f2735cdSJens Wiklander 					 __vcore_nex_rw_start))
404a96f1f5SMarouene Boubakri #define VCORE_INIT_RX_PA	((unsigned long)__vcore_init_rx_start)
414a96f1f5SMarouene Boubakri #define VCORE_INIT_RX_SZ	((size_t)(__vcore_init_rx_end - \
424a96f1f5SMarouene Boubakri 					  __vcore_init_rx_start))
434a96f1f5SMarouene Boubakri #define VCORE_INIT_RO_PA	((unsigned long)__vcore_init_ro_start)
444a96f1f5SMarouene Boubakri #define VCORE_INIT_RO_SZ	((size_t)(__vcore_init_ro_end - \
454a96f1f5SMarouene Boubakri 					  __vcore_init_ro_start))
464a96f1f5SMarouene Boubakri 
474a96f1f5SMarouene Boubakri #define VCORE_START_VA		((vaddr_t)__text_start)
484a96f1f5SMarouene Boubakri 
49*a5ac48d6SJens Wiklander #ifndef CFG_WITH_PAGER
50*a5ac48d6SJens Wiklander #define VCORE_FREE_PA		((unsigned long)__vcore_free_start)
51*a5ac48d6SJens Wiklander #define VCORE_FREE_SZ		((size_t)(__vcore_free_end - \
52*a5ac48d6SJens Wiklander 					  __vcore_free_start))
53*a5ac48d6SJens Wiklander #define VCORE_FREE_END_PA	((unsigned long)__vcore_free_end)
54*a5ac48d6SJens Wiklander #else
55*a5ac48d6SJens Wiklander /* No VCORE_FREE range in pager configuration since it uses all memory */
56*a5ac48d6SJens Wiklander #define VCORE_FREE_PA		PADDR_MAX
57*a5ac48d6SJens Wiklander #define VCORE_FREE_SZ		0
58*a5ac48d6SJens Wiklander #define VCORE_FREE_END_PA	PADDR_MAX
59*a5ac48d6SJens Wiklander #endif
60*a5ac48d6SJens Wiklander 
614a96f1f5SMarouene Boubakri #define EMIT_SECTION_INFO_SYMBOLS(section_name) \
624a96f1f5SMarouene Boubakri 	extern const uint8_t __vcore_ ## section_name ## _start[]; \
634a96f1f5SMarouene Boubakri 	extern const uint8_t __vcore_ ## section_name ## _end[]; \
644a96f1f5SMarouene Boubakri 	extern const uint8_t __vcore_ ## section_name ## _size[]
654a96f1f5SMarouene Boubakri 
664a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_rx);
674a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_ro);
684a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_rw);
694a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(nex_rw);
704a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(init_ro);
714a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(init_rx);
72*a5ac48d6SJens Wiklander EMIT_SECTION_INFO_SYMBOLS(free);
734a96f1f5SMarouene Boubakri 
744a96f1f5SMarouene Boubakri #undef EMIT_SECTION_INFO_SYMBOLS
754a96f1f5SMarouene Boubakri 
764a96f1f5SMarouene Boubakri extern const uint8_t __text_start[];
77889fb568SJerome Forissier extern const uint8_t __text_data_start[];
78889fb568SJerome Forissier extern const uint8_t __text_data_end[];
79d3a996cfSJerome Forissier extern const uint8_t __text_end[];
804a96f1f5SMarouene Boubakri extern const uint8_t __end[];
814a96f1f5SMarouene Boubakri 
824a96f1f5SMarouene Boubakri extern const uint8_t __identity_map_init_start[];
834a96f1f5SMarouene Boubakri extern const uint8_t __identity_map_init_end[];
844a96f1f5SMarouene Boubakri 
854a96f1f5SMarouene Boubakri extern uint8_t __data_start[];
864a96f1f5SMarouene Boubakri extern const uint8_t __data_end[];
874a96f1f5SMarouene Boubakri extern const uint8_t __rodata_start[];
884a96f1f5SMarouene Boubakri extern const uint8_t __rodata_end[];
894a96f1f5SMarouene Boubakri extern const uint8_t __bss_start[];
904a96f1f5SMarouene Boubakri extern const uint8_t __bss_end[];
914a96f1f5SMarouene Boubakri extern const uint8_t __nozi_start[];
924a96f1f5SMarouene Boubakri extern const uint8_t __nozi_end[];
934a96f1f5SMarouene Boubakri extern const uint8_t __nozi_stack_start[];
944a96f1f5SMarouene Boubakri extern const uint8_t __nozi_stack_end[];
954a96f1f5SMarouene Boubakri extern const uint8_t __init_start[];
964a96f1f5SMarouene Boubakri extern const uint8_t __init_end[];
974a96f1f5SMarouene Boubakri 
984a96f1f5SMarouene Boubakri extern uint8_t __heap1_start[];
994a96f1f5SMarouene Boubakri extern const uint8_t __heap1_end[];
1004a96f1f5SMarouene Boubakri extern uint8_t __heap2_start[];
1014a96f1f5SMarouene Boubakri extern const uint8_t __heap2_end[];
1024a96f1f5SMarouene Boubakri 
1034a96f1f5SMarouene Boubakri extern uint8_t __nex_heap_start[];
1044a96f1f5SMarouene Boubakri extern const uint8_t __nex_heap_end[];
1054a96f1f5SMarouene Boubakri 
1064a96f1f5SMarouene Boubakri extern const uint8_t __pageable_part_start[];
1074a96f1f5SMarouene Boubakri extern const uint8_t __pageable_part_end[];
1084a96f1f5SMarouene Boubakri extern const uint8_t __pageable_start[];
1094a96f1f5SMarouene Boubakri extern const uint8_t __pageable_end[];
1104a96f1f5SMarouene Boubakri 
1111aae2c8eSJerome Forissier extern const uint8_t __rodata_init_start[];
1121aae2c8eSJerome Forissier extern const uint8_t __rodata_init_end[];
1131aae2c8eSJerome Forissier extern const uint8_t __rodata_pageable_start[];
1141aae2c8eSJerome Forissier extern const uint8_t __rodata_pageable_end[];
1151aae2c8eSJerome Forissier extern const uint8_t __text_init_start[];
1161aae2c8eSJerome Forissier extern const uint8_t __text_init_end[];
1171aae2c8eSJerome Forissier extern const uint8_t __text_pageable_start[];
1181aae2c8eSJerome Forissier extern const uint8_t __text_pageable_end[];
1191aae2c8eSJerome Forissier 
120ff843c89SJens Wiklander #define ASAN_SHADOW_PA	((paddr_t)(vaddr_t)__asan_shadow_start)
1214a96f1f5SMarouene Boubakri #define ASAN_SHADOW_SZ	((size_t)__asan_shadow_size)
1224a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_start[];
1234a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_end[];
1244a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_size[];
1254a96f1f5SMarouene Boubakri 
126ff843c89SJens Wiklander #define ASAN_MAP_PA	((paddr_t)(vaddr_t)__asan_map_start)
1274a96f1f5SMarouene Boubakri #define ASAN_MAP_SZ	((size_t)__asan_map_size)
1284a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_start[];
1294a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_end[];
1304a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_size[];
1314a96f1f5SMarouene Boubakri 
1324a96f1f5SMarouene Boubakri extern const vaddr_t __ctor_list;
1334a96f1f5SMarouene Boubakri extern const vaddr_t __ctor_end;
1344a96f1f5SMarouene Boubakri 
1354a96f1f5SMarouene Boubakri /* Generated by core/arch/$(ARCH)/kernel/link.mk */
1364a96f1f5SMarouene Boubakri extern const char core_v_str[];
1374a96f1f5SMarouene Boubakri 
1384a96f1f5SMarouene Boubakri #endif /*__KERNEL_LINKER_H*/
1394a96f1f5SMarouene Boubakri 
140