12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*
- * 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 */
|