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