All in all this makes cmake linker generator able to work for at least
most of the kernel tests and samples, on cortex m4.
Make the cmake linker generator have a file-structure more similar to
the ld-skeletons.
Add or edit groups, sections and logic to make the generator reflect
what the ld-skeletons do, esp. for kobjects and APP_SMEM, nonint and
some other details are also effected.
Use the new zephyr_linker_include_generated() and
zephyr_linker_include_var() functions to to handle
${DEVICE_API_LINKER_SECTIONS_CMAKE}, the kobject-prebuilt-*.h files and
APP_SMEM partition. Essentially the output from gen_app_partitions.py,
gen_kobject_placeholders.py.
Add ALIGN_WITH_INPUT on sections being put into DATA_REGION. This makes
the init layout work for ld.
This leverages the updates in gen_app_partitions.py to generate its
output as cmake linker generator sections too, and puts them into a
group defined in linker.cmake
Setup generator variables for alignment of APP_SMEM. Note that this does
not yet handle MPU_ALIGN which depends on the size of the section...
Fix broken k_object_assignment iterable section
Signed-off-by: Björn Bergman <bjorn.bergman@iar.com>
60 lines
2.0 KiB
CMake
60 lines
2.0 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
# The contents of this file is based on include/zephyr/linker/kobject-data.ld
|
|
# Please keep in sync
|
|
|
|
if(CONFIG_USERSPACE)
|
|
|
|
zephyr_linker_section(NAME kobject_data GROUP ${K_OBJECTS_GROUP} ALIGN_WITH_INPUT NOINPUT)
|
|
|
|
zephyr_linker_section_configure(
|
|
SECTION kobject_data
|
|
SYMBOLS z_kobject_data_begin
|
|
)
|
|
|
|
if(CONFIG_DYNAMIC_OBJECTS)
|
|
# generated by gperf, this avoids errors for the first build.
|
|
# Also, we dont have KOBJECT_DATA_SZ for the first build
|
|
zephyr_linker_section_configure(
|
|
SECTION kobject_data
|
|
SYMBOLS _thread_idx_map
|
|
MIN_SIZE ${CONFIG_MAX_THREAD_BYTES}
|
|
PASS NOT LINKER_ZEPHYR_PREBUILT LINKER_ZEPHYR_FINAL
|
|
)
|
|
zephyr_linker_section_configure(
|
|
SECTION kobject_data
|
|
SYMBOLS _kobject_data_area_start _kobject_data_area_end
|
|
PASS NOT LINKER_ZEPHYR_PREBUILT LINKER_ZEPHYR_FINAL
|
|
)
|
|
endif()
|
|
|
|
# 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/build/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(CONFIG_DYNAMIC_OBJECTS)
|
|
# in LINKER_ZEPHYR_PREBUILT there is no object file defining _thread_idx_map
|
|
# so we must have a synthetic one. Note that the size is not set here,
|
|
# since the space is provided in the section below:
|
|
zephyr_linker_section_configure(
|
|
SECTION kobject_data
|
|
SYMBOLS _thread_idx_map
|
|
PASS LINKER_ZEPHYR_PREBUILT
|
|
)
|
|
endif()
|
|
|
|
zephyr_linker_section_configure(
|
|
SECTION kobject_data
|
|
INPUT
|
|
".kobject_data.data*"
|
|
".kobject_data.sdata*"
|
|
PASS LINKER_ZEPHYR_PREBUILT LINKER_ZEPHYR_FINAL
|
|
ALIGN @KOBJECT_DATA_ALIGN,undef:4@
|
|
MIN_SIZE @KOBJECT_DATA_SZ@
|
|
MAX_SIZE @KOBJECT_DATA_SZ@
|
|
SYMBOLS _kobject_data_area_start _kobject_data_area_end
|
|
)
|
|
endif()
|