1*4a96f1f5SMarouene Boubakri /* SPDX-License-Identifier: BSD-2-Clause */ 2*4a96f1f5SMarouene Boubakri /* 3*4a96f1f5SMarouene Boubakri * Copyright (c) 2017, Linaro Limited 4*4a96f1f5SMarouene Boubakri */ 5*4a96f1f5SMarouene Boubakri #ifndef __KERNEL_LINKER_H 6*4a96f1f5SMarouene Boubakri #define __KERNEL_LINKER_H 7*4a96f1f5SMarouene Boubakri 8*4a96f1f5SMarouene Boubakri #include <kernel/dt.h> 9*4a96f1f5SMarouene Boubakri #include <types_ext.h> 10*4a96f1f5SMarouene Boubakri 11*4a96f1f5SMarouene Boubakri /* 12*4a96f1f5SMarouene Boubakri * Symbols exported by the link script. 13*4a96f1f5SMarouene Boubakri */ 14*4a96f1f5SMarouene Boubakri 15*4a96f1f5SMarouene Boubakri #ifdef __arm__ 16*4a96f1f5SMarouene Boubakri 17*4a96f1f5SMarouene Boubakri /* 18*4a96f1f5SMarouene Boubakri * These addresses will be the start or end of the exception binary search 19*4a96f1f5SMarouene Boubakri * index table (.ARM.exidx section) 20*4a96f1f5SMarouene Boubakri */ 21*4a96f1f5SMarouene Boubakri extern const uint8_t __exidx_start[]; 22*4a96f1f5SMarouene Boubakri extern const uint8_t __exidx_end[]; 23*4a96f1f5SMarouene Boubakri extern const uint8_t __extab_start[]; 24*4a96f1f5SMarouene Boubakri extern const uint8_t __extab_end[]; 25*4a96f1f5SMarouene Boubakri 26*4a96f1f5SMarouene Boubakri #endif 27*4a96f1f5SMarouene Boubakri 28*4a96f1f5SMarouene Boubakri /* 29*4a96f1f5SMarouene Boubakri * Warning! (ASLR) Do not use any of the _SZ_UNSAFE defines or _size[] variables 30*4a96f1f5SMarouene Boubakri * below in code that runs after dynamic relocations have been applied. Their 31*4a96f1f5SMarouene Boubakri * value could be *wrong* after relocation (for instance Aarch64 GCC 9.2 32*4a96f1f5SMarouene Boubakri * generates dynamic relocations for the _size[] symbols, but Clang 11.0.0 does 33*4a96f1f5SMarouene Boubakri * not). The _SZ_UNSAFE macros are mostly here for use in register_phys_mem() 34*4a96f1f5SMarouene Boubakri * where the _SZ macros would be rejected by the compiler ('initializer element 35*4a96f1f5SMarouene Boubakri * is not constant'). Other uses are likely to be incorrect. 36*4a96f1f5SMarouene Boubakri */ 37*4a96f1f5SMarouene Boubakri 38*4a96f1f5SMarouene Boubakri #define VCORE_UNPG_RX_PA ((unsigned long)__vcore_unpg_rx_start) 39*4a96f1f5SMarouene Boubakri #define VCORE_UNPG_RX_SZ_UNSAFE ((size_t)__vcore_unpg_rx_size) 40*4a96f1f5SMarouene Boubakri #define VCORE_UNPG_RX_SZ ((size_t)(__vcore_unpg_rx_end - \ 41*4a96f1f5SMarouene Boubakri __vcore_unpg_rx_start)) 42*4a96f1f5SMarouene Boubakri #define VCORE_UNPG_RO_PA ((unsigned long)__vcore_unpg_ro_start) 43*4a96f1f5SMarouene Boubakri #define VCORE_UNPG_RO_SZ_UNSAFE ((size_t)__vcore_unpg_ro_size) 44*4a96f1f5SMarouene Boubakri #define VCORE_UNPG_RO_SZ ((size_t)(__vcore_unpg_ro_end - \ 45*4a96f1f5SMarouene Boubakri __vcore_unpg_ro_start)) 46*4a96f1f5SMarouene Boubakri #define VCORE_UNPG_RW_PA ((unsigned long)__vcore_unpg_rw_start) 47*4a96f1f5SMarouene Boubakri #define VCORE_UNPG_RW_SZ_UNSAFE ((size_t)__vcore_unpg_rw_size) 48*4a96f1f5SMarouene Boubakri #define VCORE_UNPG_RW_SZ ((size_t)(__vcore_unpg_rw_end - \ 49*4a96f1f5SMarouene Boubakri __vcore_unpg_rw_start)) 50*4a96f1f5SMarouene Boubakri #define VCORE_NEX_RW_PA ((unsigned long)__vcore_nex_rw_start) 51*4a96f1f5SMarouene Boubakri #define VCORE_NEX_RW_SZ_UNSAFE ((size_t)__vcore_nex_rw_size) 52*4a96f1f5SMarouene Boubakri #define VCORE_NEX_RW_SZ ((size_t)__vcore_nex_rw_end - \ 53*4a96f1f5SMarouene Boubakri __vcore_nex_rw_start) 54*4a96f1f5SMarouene Boubakri #define VCORE_INIT_RX_PA ((unsigned long)__vcore_init_rx_start) 55*4a96f1f5SMarouene Boubakri #define VCORE_INIT_RX_SZ_UNSAFE ((size_t)__vcore_init_rx_size) 56*4a96f1f5SMarouene Boubakri #define VCORE_INIT_RX_SZ ((size_t)(__vcore_init_rx_end - \ 57*4a96f1f5SMarouene Boubakri __vcore_init_rx_start)) 58*4a96f1f5SMarouene Boubakri #define VCORE_INIT_RO_PA ((unsigned long)__vcore_init_ro_start) 59*4a96f1f5SMarouene Boubakri #define VCORE_INIT_RO_SZ_UNSAFE ((size_t)__vcore_init_ro_size) 60*4a96f1f5SMarouene Boubakri #define VCORE_INIT_RO_SZ ((size_t)(__vcore_init_ro_end - \ 61*4a96f1f5SMarouene Boubakri __vcore_init_ro_start)) 62*4a96f1f5SMarouene Boubakri 63*4a96f1f5SMarouene Boubakri #define VCORE_START_VA ((vaddr_t)__text_start) 64*4a96f1f5SMarouene Boubakri 65*4a96f1f5SMarouene Boubakri #define EMIT_SECTION_INFO_SYMBOLS(section_name) \ 66*4a96f1f5SMarouene Boubakri extern const uint8_t __vcore_ ## section_name ## _start[]; \ 67*4a96f1f5SMarouene Boubakri extern const uint8_t __vcore_ ## section_name ## _end[]; \ 68*4a96f1f5SMarouene Boubakri extern const uint8_t __vcore_ ## section_name ## _size[] 69*4a96f1f5SMarouene Boubakri 70*4a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_rx); 71*4a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_ro); 72*4a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(unpg_rw); 73*4a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(nex_rw); 74*4a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(init_ro); 75*4a96f1f5SMarouene Boubakri EMIT_SECTION_INFO_SYMBOLS(init_rx); 76*4a96f1f5SMarouene Boubakri 77*4a96f1f5SMarouene Boubakri #undef EMIT_SECTION_INFO_SYMBOLS 78*4a96f1f5SMarouene Boubakri 79*4a96f1f5SMarouene Boubakri extern const uint8_t __text_start[]; 80*4a96f1f5SMarouene Boubakri extern const uint8_t __end[]; 81*4a96f1f5SMarouene Boubakri 82*4a96f1f5SMarouene Boubakri extern const uint8_t __identity_map_init_start[]; 83*4a96f1f5SMarouene Boubakri extern const uint8_t __identity_map_init_end[]; 84*4a96f1f5SMarouene Boubakri 85*4a96f1f5SMarouene Boubakri extern uint8_t __data_start[]; 86*4a96f1f5SMarouene Boubakri extern const uint8_t __data_end[]; 87*4a96f1f5SMarouene Boubakri extern const uint8_t __rodata_start[]; 88*4a96f1f5SMarouene Boubakri extern const uint8_t __rodata_end[]; 89*4a96f1f5SMarouene Boubakri extern const uint8_t __bss_start[]; 90*4a96f1f5SMarouene Boubakri extern const uint8_t __bss_end[]; 91*4a96f1f5SMarouene Boubakri extern const uint8_t __nozi_start[]; 92*4a96f1f5SMarouene Boubakri extern const uint8_t __nozi_end[]; 93*4a96f1f5SMarouene Boubakri extern const uint8_t __nozi_stack_start[]; 94*4a96f1f5SMarouene Boubakri extern const uint8_t __nozi_stack_end[]; 95*4a96f1f5SMarouene Boubakri extern const uint8_t __init_start[]; 96*4a96f1f5SMarouene Boubakri extern const uint8_t __init_end[]; 97*4a96f1f5SMarouene Boubakri 98*4a96f1f5SMarouene Boubakri extern uint8_t __heap1_start[]; 99*4a96f1f5SMarouene Boubakri extern const uint8_t __heap1_end[]; 100*4a96f1f5SMarouene Boubakri extern uint8_t __heap2_start[]; 101*4a96f1f5SMarouene Boubakri extern const uint8_t __heap2_end[]; 102*4a96f1f5SMarouene Boubakri 103*4a96f1f5SMarouene Boubakri extern uint8_t __nex_heap_start[]; 104*4a96f1f5SMarouene Boubakri extern const uint8_t __nex_heap_end[]; 105*4a96f1f5SMarouene Boubakri 106*4a96f1f5SMarouene Boubakri extern const uint8_t __pageable_part_start[]; 107*4a96f1f5SMarouene Boubakri extern const uint8_t __pageable_part_end[]; 108*4a96f1f5SMarouene Boubakri extern const uint8_t __pageable_start[]; 109*4a96f1f5SMarouene Boubakri extern const uint8_t __pageable_end[]; 110*4a96f1f5SMarouene Boubakri 111*4a96f1f5SMarouene Boubakri #define ASAN_SHADOW_PA ((paddr_t)__asan_shadow_start) 112*4a96f1f5SMarouene Boubakri #define ASAN_SHADOW_SZ ((size_t)__asan_shadow_size) 113*4a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_start[]; 114*4a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_end[]; 115*4a96f1f5SMarouene Boubakri extern const uint8_t __asan_shadow_size[]; 116*4a96f1f5SMarouene Boubakri 117*4a96f1f5SMarouene Boubakri #define ASAN_MAP_PA ((paddr_t)__asan_map_start) 118*4a96f1f5SMarouene Boubakri #define ASAN_MAP_SZ ((size_t)__asan_map_size) 119*4a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_start[]; 120*4a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_end[]; 121*4a96f1f5SMarouene Boubakri extern const uint8_t __asan_map_size[]; 122*4a96f1f5SMarouene Boubakri 123*4a96f1f5SMarouene Boubakri extern const vaddr_t __ctor_list; 124*4a96f1f5SMarouene Boubakri extern const vaddr_t __ctor_end; 125*4a96f1f5SMarouene Boubakri 126*4a96f1f5SMarouene Boubakri 127*4a96f1f5SMarouene Boubakri extern const struct dt_driver __rodata_dtdrv_start; 128*4a96f1f5SMarouene Boubakri extern const struct dt_driver __rodata_dtdrv_end; 129*4a96f1f5SMarouene Boubakri 130*4a96f1f5SMarouene Boubakri /* Generated by core/arch/$(ARCH)/kernel/link.mk */ 131*4a96f1f5SMarouene Boubakri extern const char core_v_str[]; 132*4a96f1f5SMarouene Boubakri 133*4a96f1f5SMarouene Boubakri #endif /*__KERNEL_LINKER_H*/ 134*4a96f1f5SMarouene Boubakri 135