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) 52*0f2735cdSJens Wiklander #define VCORE_NEX_RW_SZ ((size_t)(__vcore_nex_rw_end - \ 53*0f2735cdSJens Wiklander __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[]; 80889fb568SJerome Forissier extern const uint8_t __text_data_start[]; 81889fb568SJerome 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 1141aae2c8eSJerome Forissier extern const uint8_t __rodata_init_start[]; 1151aae2c8eSJerome Forissier extern const uint8_t __rodata_init_end[]; 1161aae2c8eSJerome Forissier extern const uint8_t __rodata_pageable_start[]; 1171aae2c8eSJerome Forissier extern const uint8_t __rodata_pageable_end[]; 1181aae2c8eSJerome Forissier extern const uint8_t __text_init_start[]; 1191aae2c8eSJerome Forissier extern const uint8_t __text_init_end[]; 1201aae2c8eSJerome Forissier extern const uint8_t __text_pageable_start[]; 1211aae2c8eSJerome Forissier extern const uint8_t __text_pageable_end[]; 1221aae2c8eSJerome Forissier 1234a96f1f5SMarouene Boubakri #define ASAN_SHADOW_PA ((paddr_t)__asan_shadow_start) 1244a96f1f5SMarouene Boubakri #define ASAN_SHADOW_SZ ((size_t)__asan_shadow_size) 1254a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_start[]; 1264a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_end[]; 1274a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_size[]; 1284a96f1f5SMarouene Boubakri 1294a96f1f5SMarouene Boubakri #define ASAN_MAP_PA ((paddr_t)__asan_map_start) 1304a96f1f5SMarouene Boubakri #define ASAN_MAP_SZ ((size_t)__asan_map_size) 1314a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_start[]; 1324a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_end[]; 1334a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_size[]; 1344a96f1f5SMarouene Boubakri 1354a96f1f5SMarouene Boubakri extern const vaddr_t __ctor_list; 1364a96f1f5SMarouene Boubakri extern const vaddr_t __ctor_end; 1374a96f1f5SMarouene Boubakri 1384a96f1f5SMarouene Boubakri /* Generated by core/arch/$(ARCH)/kernel/link.mk */ 1394a96f1f5SMarouene Boubakri extern const char core_v_str[]; 1404a96f1f5SMarouene Boubakri 1414a96f1f5SMarouene Boubakri #endif /*__KERNEL_LINKER_H*/ 1424a96f1f5SMarouene Boubakri 143