xref: /optee_os/core/include/kernel/linker.h (revision 0b00e98db651f940077788ed916142d48016d3fa)
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 
15*0b00e98dSJerome 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 
494a96f1f5SMarouene Boubakri #define EMIT_SECTION_INFO_SYMBOLS(section_name) \
504a96f1f5SMarouene Boubakri 	extern const uint8_t __vcore_ ## section_name ## _start[]; \
514a96f1f5SMarouene Boubakri 	extern const uint8_t __vcore_ ## section_name ## _end[]; \
524a96f1f5SMarouene Boubakri 	extern const uint8_t __vcore_ ## section_name ## _size[]
534a96f1f5SMarouene Boubakri 
544a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_rx);
554a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_ro);
564a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_rw);
574a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(nex_rw);
584a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(init_ro);
594a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(init_rx);
604a96f1f5SMarouene Boubakri 
614a96f1f5SMarouene Boubakri #undef EMIT_SECTION_INFO_SYMBOLS
624a96f1f5SMarouene Boubakri 
634a96f1f5SMarouene Boubakri extern const uint8_t __text_start[];
64889fb568SJerome Forissier extern const uint8_t __text_data_start[];
65889fb568SJerome Forissier extern const uint8_t __text_data_end[];
66d3a996cfSJerome Forissier extern const uint8_t __text_end[];
674a96f1f5SMarouene Boubakri extern const uint8_t __end[];
684a96f1f5SMarouene Boubakri 
694a96f1f5SMarouene Boubakri extern const uint8_t __identity_map_init_start[];
704a96f1f5SMarouene Boubakri extern const uint8_t __identity_map_init_end[];
714a96f1f5SMarouene Boubakri 
724a96f1f5SMarouene Boubakri extern uint8_t __data_start[];
734a96f1f5SMarouene Boubakri extern const uint8_t __data_end[];
744a96f1f5SMarouene Boubakri extern const uint8_t __rodata_start[];
754a96f1f5SMarouene Boubakri extern const uint8_t __rodata_end[];
764a96f1f5SMarouene Boubakri extern const uint8_t __bss_start[];
774a96f1f5SMarouene Boubakri extern const uint8_t __bss_end[];
784a96f1f5SMarouene Boubakri extern const uint8_t __nozi_start[];
794a96f1f5SMarouene Boubakri extern const uint8_t __nozi_end[];
804a96f1f5SMarouene Boubakri extern const uint8_t __nozi_stack_start[];
814a96f1f5SMarouene Boubakri extern const uint8_t __nozi_stack_end[];
824a96f1f5SMarouene Boubakri extern const uint8_t __init_start[];
834a96f1f5SMarouene Boubakri extern const uint8_t __init_end[];
844a96f1f5SMarouene Boubakri 
854a96f1f5SMarouene Boubakri extern uint8_t __heap1_start[];
864a96f1f5SMarouene Boubakri extern const uint8_t __heap1_end[];
874a96f1f5SMarouene Boubakri extern uint8_t __heap2_start[];
884a96f1f5SMarouene Boubakri extern const uint8_t __heap2_end[];
894a96f1f5SMarouene Boubakri 
904a96f1f5SMarouene Boubakri extern uint8_t __nex_heap_start[];
914a96f1f5SMarouene Boubakri extern const uint8_t __nex_heap_end[];
924a96f1f5SMarouene Boubakri 
934a96f1f5SMarouene Boubakri extern const uint8_t __pageable_part_start[];
944a96f1f5SMarouene Boubakri extern const uint8_t __pageable_part_end[];
954a96f1f5SMarouene Boubakri extern const uint8_t __pageable_start[];
964a96f1f5SMarouene Boubakri extern const uint8_t __pageable_end[];
974a96f1f5SMarouene Boubakri 
981aae2c8eSJerome Forissier extern const uint8_t __rodata_init_start[];
991aae2c8eSJerome Forissier extern const uint8_t __rodata_init_end[];
1001aae2c8eSJerome Forissier extern const uint8_t __rodata_pageable_start[];
1011aae2c8eSJerome Forissier extern const uint8_t __rodata_pageable_end[];
1021aae2c8eSJerome Forissier extern const uint8_t __text_init_start[];
1031aae2c8eSJerome Forissier extern const uint8_t __text_init_end[];
1041aae2c8eSJerome Forissier extern const uint8_t __text_pageable_start[];
1051aae2c8eSJerome Forissier extern const uint8_t __text_pageable_end[];
1061aae2c8eSJerome Forissier 
107ff843c89SJens Wiklander #define ASAN_SHADOW_PA	((paddr_t)(vaddr_t)__asan_shadow_start)
1084a96f1f5SMarouene Boubakri #define ASAN_SHADOW_SZ	((size_t)__asan_shadow_size)
1094a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_start[];
1104a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_end[];
1114a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_size[];
1124a96f1f5SMarouene Boubakri 
113ff843c89SJens Wiklander #define ASAN_MAP_PA	((paddr_t)(vaddr_t)__asan_map_start)
1144a96f1f5SMarouene Boubakri #define ASAN_MAP_SZ	((size_t)__asan_map_size)
1154a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_start[];
1164a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_end[];
1174a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_size[];
1184a96f1f5SMarouene Boubakri 
1194a96f1f5SMarouene Boubakri extern const vaddr_t __ctor_list;
1204a96f1f5SMarouene Boubakri extern const vaddr_t __ctor_end;
1214a96f1f5SMarouene Boubakri 
1224a96f1f5SMarouene Boubakri /* Generated by core/arch/$(ARCH)/kernel/link.mk */
1234a96f1f5SMarouene Boubakri extern const char core_v_str[];
1244a96f1f5SMarouene Boubakri 
1254a96f1f5SMarouene Boubakri #endif /*__KERNEL_LINKER_H*/
1264a96f1f5SMarouene Boubakri 
127