59 lines
1.7 KiB
Plaintext
59 lines
1.7 KiB
Plaintext
/*
|
|
* Copyright (c) 2017,2021 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifdef CONFIG_USERSPACE
|
|
#ifdef CONFIG_GEN_PRIV_STACKS
|
|
SECTION_DATA_PROLOGUE(priv_stacks_noinit,,)
|
|
{
|
|
z_priv_stacks_ram_start = .;
|
|
|
|
/* During LINKER_KOBJECT_PREBUILT and LINKER_ZEPHYR_PREBUILT,
|
|
* space needs to be reserved for the rodata that will be
|
|
* produced by gperf during the final stages of linking.
|
|
* The alignment and size are produced by
|
|
* scripts/gen_kobject_placeholders.py. These are here
|
|
* so the addresses to kobjects would remain the same
|
|
* during the final stages of linking (LINKER_ZEPHYR_FINAL).
|
|
*/
|
|
|
|
#if defined(LINKER_ZEPHYR_PREBUILT)
|
|
#include <linker-kobject-prebuilt-priv-stacks.h>
|
|
#ifdef KOBJECT_PRIV_STACKS_ALIGN
|
|
. = ALIGN(KOBJECT_PRIV_STACKS_ALIGN);
|
|
. = . + KOBJECT_PRIV_STACKS_SZ;
|
|
#endif
|
|
#endif /* LINKER_ZEPHYR_PREBUILT */
|
|
|
|
#if defined(LINKER_ZEPHYR_FINAL)
|
|
#include <linker-kobject-prebuilt-priv-stacks.h>
|
|
#ifdef KOBJECT_PRIV_STACKS_ALIGN
|
|
. = ALIGN(KOBJECT_PRIV_STACKS_ALIGN);
|
|
#endif
|
|
*(".priv_stacks.noinit")
|
|
#endif /* LINKER_ZEPHYR_FINAL */
|
|
|
|
z_priv_stacks_ram_end = .;
|
|
|
|
#if defined(LINKER_ZEPHYR_FINAL)
|
|
#ifdef KOBJECT_PRIV_STACKS_ALIGN
|
|
z_priv_stacks_ram_used = z_priv_stacks_ram_end - z_priv_stacks_ram_start;
|
|
|
|
ASSERT(z_priv_stacks_ram_used <= KOBJECT_PRIV_STACKS_SZ,
|
|
"scripts/gen_kobject_placeholders.py did not reserve enough space \
|
|
for priviledged stacks."
|
|
);
|
|
|
|
/* Padding is needed to preserve kobject addresses
|
|
* if we have reserved more space than needed.
|
|
*/
|
|
. = MAX(., z_priv_stacks_ram_start + KOBJECT_PRIV_STACKS_SZ);
|
|
#endif /* KOBJECT_PRIV_STACKS_ALIGN */
|
|
#endif /* LINKER_ZEPHYR_FINAL */
|
|
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
#endif /* CONFIG_GEN_PRIV_STACKS */
|
|
#endif /* CONFIG_USERSPACE */
|