diff --git a/arch/common/ramfunc.ld b/arch/common/ramfunc.ld index 3894dbfef4357..45dea79d6b669 100644 --- a/arch/common/ramfunc.ld +++ b/arch/common/ramfunc.ld @@ -9,6 +9,7 @@ SECTION_DATA_PROLOGUE(.ramfunc,,) { + __ramfunc_region_start = .; MPU_ALIGN(__ramfunc_size); __ramfunc_start = .; *(.ramfunc) diff --git a/cmake/linker_script/arm/linker.cmake b/cmake/linker_script/arm/linker.cmake index 332d44b24359e..ef70b3b44b0db 100644 --- a/cmake/linker_script/arm/linker.cmake +++ b/cmake/linker_script/arm/linker.cmake @@ -144,6 +144,7 @@ endif() include(${COMMON_ZEPHYR_LINKER_DIR}/ram-end.cmake) +zephyr_linker_symbol(SYMBOL __ramfunc_region_start EXPR "(@__ramfunc_start@)") zephyr_linker_symbol(SYMBOL __kernel_ram_start EXPR "(@__bss_start@)") zephyr_linker_symbol(SYMBOL __kernel_ram_end EXPR "(${RAM_ADDR} + ${RAM_SIZE})") zephyr_linker_symbol(SYMBOL __kernel_ram_size EXPR "(@__kernel_ram_end@ - @__bss_start@)") diff --git a/include/zephyr/linker/linker-defs.h b/include/zephyr/linker/linker-defs.h index d860222ffac79..6e3a306831590 100644 --- a/include/zephyr/linker/linker-defs.h +++ b/include/zephyr/linker/linker-defs.h @@ -230,6 +230,7 @@ extern char _nocache_ram_size[]; * section, stored in RAM instead of FLASH. */ #ifdef CONFIG_ARCH_HAS_RAMFUNC_SUPPORT +extern char __ramfunc_region_start[]; extern char __ramfunc_start[]; extern char __ramfunc_end[]; extern char __ramfunc_size[]; diff --git a/kernel/xip.c b/kernel/xip.c index a5752560c853d..f6de78423b17e 100644 --- a/kernel/xip.c +++ b/kernel/xip.c @@ -28,8 +28,8 @@ void z_data_copy(void) z_early_memcpy(&__data_region_start, &__data_region_load_start, __data_region_end - __data_region_start); #ifdef CONFIG_ARCH_HAS_RAMFUNC_SUPPORT - z_early_memcpy(&__ramfunc_start, &__ramfunc_load_start, - (uintptr_t) &__ramfunc_size); + z_early_memcpy(&__ramfunc_region_start, &__ramfunc_load_start, + __ramfunc_end - __ramfunc_region_start); #endif /* CONFIG_ARCH_HAS_RAMFUNC_SUPPORT */ #if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_ccm), okay) z_early_memcpy(&__ccm_data_start, &__ccm_data_rom_start,