1/* 2 * Copyright (c) 2017,2021 Intel Corporation 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7/* Please keep in sync with cmake/linker_script/common/kobject-data.cmake */ 8 9#ifdef CONFIG_USERSPACE 10 11 PLACE_SYMBOL_HERE(z_kobject_data_begin); 12 SECTION_DATA_PROLOGUE(kobject_data,,) 13 { 14 15#if !defined(LINKER_ZEPHYR_PREBUILT) && \ 16 !defined(LINKER_ZEPHYR_FINAL) 17 18#ifdef CONFIG_DYNAMIC_OBJECTS 19 PROVIDE(_thread_idx_map = .); 20 . = . + CONFIG_MAX_THREAD_BYTES; 21#endif 22 23#endif /* !LINKER_ZEPHYR_PREBUILT && !LINKER_ZEPHYR_FINAL */ 24 25 /* During LINKER_KOBJECT_PREBUILT and LINKER_ZEPHYR_PREBUILT, 26 * space needs to be reserved for the rodata that will be 27 * produced by gperf during the final stages of linking. 28 * The alignment and size are produced by 29 * scripts/build/gen_kobject_placeholders.py. These are here 30 * so the addresses to kobjects would remain the same 31 * during the final stages of linking (LINKER_ZEPHYR_FINAL). 32 */ 33 34#if defined(LINKER_ZEPHYR_PREBUILT) 35#include <zephyr/linker-kobject-prebuilt-data.h> 36 37#ifdef CONFIG_DYNAMIC_OBJECTS 38 /* This is produced by gperf. Put a place holder here 39 * to avoid compilation error. 40 */ 41 PROVIDE(_thread_idx_map = .); 42#endif 43#ifdef KOBJECT_DATA_ALIGN 44 . = ALIGN(KOBJECT_DATA_ALIGN); 45 . = . + KOBJECT_DATA_SZ; 46#endif 47#endif /* LINKER_ZEPHYR_PREBUILT */ 48 49#if defined(LINKER_ZEPHYR_FINAL) 50#include <zephyr/linker-kobject-prebuilt-data.h> 51#ifdef KOBJECT_DATA_ALIGN 52 . = ALIGN(KOBJECT_DATA_ALIGN); 53 54 PLACE_SYMBOL_HERE(_kobject_data_area_start); 55#endif 56 57 *(".kobject_data.data*") 58 *(".kobject_data.sdata*") 59 60#ifdef KOBJECT_DATA_ALIGN 61 PLACE_SYMBOL_HERE(_kobject_data_area_end); 62 _kobject_data_area_used = _kobject_data_area_end - _kobject_data_area_start; 63 64 ASSERT(_kobject_data_area_used <= KOBJECT_DATA_SZ, 65"scripts/build/gen_kobject_placeholders.py did not reserve enough space \ 66for kobject data." 67 ); 68 69 /* Padding is needed to preserve kobject addresses 70 * if we have reserved more space than needed. 71 */ 72 . = MAX(., _kobject_data_area_start + KOBJECT_DATA_SZ); 73#endif /* KOBJECT_DATA_ALIGN */ 74#endif /* LINKER_ZEPHYR_FINAL */ 75 76 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) 77 78#endif /* CONFIG_USERSPACE */ 79