cmake: linker: arm: put RAM sections in RAM region

Cleanup RAM layout so that the RAM_REGION is now in the RAM memory
region.  Put .bss in RAM_REGION.

This means we have a proper program header for the RAM region.

As part of this extend zephyr_linker_symbol to allow it to take
an OBJECT paramater to specify the region to associate a symbol to.

Signed-off-by: Kumar Gala <kumar.gala@intel.com>
This commit is contained in:
Kumar Gala 2023-04-28 09:44:59 -05:00 committed by Stephanos Ioannidis
commit f5eada5553
2 changed files with 8 additions and 8 deletions

View file

@ -49,7 +49,7 @@ else()
set(rom_start ${RAM_ADDR}) set(rom_start ${RAM_ADDR})
endif() endif()
zephyr_linker_group(NAME RAM_REGION VMA RAM LMA ROM_REGION) zephyr_linker_group(NAME RAM_REGION VMA RAM LMA RAM)
zephyr_linker_group(NAME TEXT_REGION GROUP ROM_REGION SYMBOL SECTION) zephyr_linker_group(NAME TEXT_REGION GROUP ROM_REGION SYMBOL SECTION)
zephyr_linker_group(NAME RODATA_REGION GROUP ROM_REGION) zephyr_linker_group(NAME RODATA_REGION GROUP ROM_REGION)
zephyr_linker_group(NAME DATA_REGION GROUP RAM_REGION SYMBOL SECTION) zephyr_linker_group(NAME DATA_REGION GROUP RAM_REGION SYMBOL SECTION)
@ -122,7 +122,7 @@ include(${COMMON_ZEPHYR_LINKER_DIR}/common-ram.cmake)
#include(kobject.ld) #include(kobject.ld)
if(NOT CONFIG_USERSPACE) if(NOT CONFIG_USERSPACE)
zephyr_linker_section(NAME .bss VMA RAM LMA FLASH TYPE BSS) zephyr_linker_section(NAME .bss VMA RAM LMA RAM_REGION TYPE BSS)
zephyr_linker_section_configure(SECTION .bss INPUT COMMON) zephyr_linker_section_configure(SECTION .bss INPUT COMMON)
zephyr_linker_section_configure(SECTION .bss INPUT ".kernel_bss.*") zephyr_linker_section_configure(SECTION .bss INPUT ".kernel_bss.*")
# As memory is cleared in words only, it is simpler to ensure the BSS # As memory is cleared in words only, it is simpler to ensure the BSS
@ -135,11 +135,11 @@ if(NOT CONFIG_USERSPACE)
zephyr_linker_section_configure(SECTION .noinit INPUT ".kernel_noinit.*") zephyr_linker_section_configure(SECTION .noinit INPUT ".kernel_noinit.*")
endif() endif()
zephyr_linker_symbol(SYMBOL __kernel_ram_start EXPR "(@__bss_start@)") zephyr_linker_symbol(OBJECT REGION_RAM SYMBOL __kernel_ram_start EXPR "(@__bss_start@)")
zephyr_linker_symbol(SYMBOL __kernel_ram_end EXPR "(${RAM_ADDR} + ${RAM_SIZE})") zephyr_linker_symbol(OBJECT REGION_RAM SYMBOL __kernel_ram_end EXPR "(${RAM_ADDR} + ${RAM_SIZE})")
zephyr_linker_symbol(SYMBOL __kernel_ram_size EXPR "(@__kernel_ram_end@ - @__bss_start@)") zephyr_linker_symbol(OBJECT REGION_RAM SYMBOL __kernel_ram_size EXPR "(@__kernel_ram_end@ - @__bss_start@)")
zephyr_linker_symbol(SYMBOL _image_ram_start EXPR "(${RAM_ADDR})" SUBALIGN 32) # ToDo calculate 32 correctly zephyr_linker_symbol(OBJECT REGION_RAM SYMBOL _image_ram_start EXPR "(${RAM_ADDR})" SUBALIGN 32) # ToDo calculate 32 correctly
zephyr_linker_symbol(SYMBOL ARM_LIB_STACKHEAP EXPR "(${RAM_ADDR} + ${RAM_SIZE})" SIZE -0x1000) zephyr_linker_symbol(OBJECT REGION_RAM SYMBOL ARM_LIB_STACKHEAP EXPR "(${RAM_ADDR} + ${RAM_SIZE})" SIZE -0x1000)
set(VECTOR_ALIGN 4) set(VECTOR_ALIGN 4)
if(CONFIG_CPU_CORTEX_M_HAS_VTOR) if(CONFIG_CPU_CORTEX_M_HAS_VTOR)

View file

@ -4315,7 +4315,7 @@ endfunction()
# zephyr_linker_symbol(SYMBOL bar EXPR "(@foo@ + 1024)") # zephyr_linker_symbol(SYMBOL bar EXPR "(@foo@ + 1024)")
# #
function(zephyr_linker_symbol) function(zephyr_linker_symbol)
set(single_args "EXPR;SYMBOL") set(single_args "EXPR;SYMBOL;OBJECT")
cmake_parse_arguments(SYMBOL "" "${single_args}" "" ${ARGN}) cmake_parse_arguments(SYMBOL "" "${single_args}" "" ${ARGN})
if(SECTION_UNPARSED_ARGUMENTS) if(SECTION_UNPARSED_ARGUMENTS)