diff --git a/include/arch/arc/v2/linker.ld b/include/arch/arc/v2/linker.ld index 18ffade96ac..248521957bd 100644 --- a/include/arch/arc/v2/linker.ld +++ b/include/arch/arc/v2/linker.ld @@ -178,10 +178,14 @@ SECTIONS { #include + GROUP_START(DATA_REGION) + + __data_region_start = .; + SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,) { /* when XIP, .text is in ROM, but vector table must be at start of .data */ - __data_ram_start = .; + __data_start = .; *(".data") *(".data.*") *(".kernel.*") @@ -191,9 +195,14 @@ SECTIONS { */ #include + __data_end = .; + } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) - __data_rom_start = LOADADDR(_DATA_SECTION_NAME); + __data_size = __data_end - __data_start; + __data_load_start = LOADADDR(_DATA_SECTION_NAME); + + __data_region_load_start = LOADADDR(_DATA_SECTION_NAME); #include #include @@ -209,7 +218,8 @@ SECTIONS { */ #include - __data_ram_end = .; + __data_region_end = .; + MPU_MIN_SIZE_ALIGN /* Define linker symbols */ _image_ram_end = .; diff --git a/include/arch/arm/aarch32/cortex_a_r/scripts/linker.ld b/include/arch/arm/aarch32/cortex_a_r/scripts/linker.ld index 9b628593527..255f2dd3950 100644 --- a/include/arch/arm/aarch32/cortex_a_r/scripts/linker.ld +++ b/include/arch/arm/aarch32/cortex_a_r/scripts/linker.ld @@ -278,9 +278,11 @@ SECTIONS #include + __data_region_start = .; + SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,) { - __data_ram_start = .; + __data_start = .; *(.data) *(".data.*") *(".kernel.*") @@ -293,10 +295,13 @@ SECTIONS #ifdef CONFIG_CODE_DATA_RELOCATION #include #endif + __data_end = .; } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) + __data_size = __data_end - __data_start; + __data_load_start = LOADADDR(_DATA_SECTION_NAME); - __data_rom_start = LOADADDR(_DATA_SECTION_NAME); + __data_region_load_start = LOADADDR(_DATA_SECTION_NAME); #include #include @@ -307,7 +312,7 @@ SECTIONS */ #include - __data_ram_end = .; + __data_region_end = .; /* Define linker symbols */ diff --git a/include/arch/arm/aarch32/cortex_m/scripts/linker.ld b/include/arch/arm/aarch32/cortex_m/scripts/linker.ld index 9d2044ac4d8..543b5a8142f 100644 --- a/include/arch/arm/aarch32/cortex_m/scripts/linker.ld +++ b/include/arch/arm/aarch32/cortex_m/scripts/linker.ld @@ -292,9 +292,13 @@ SECTIONS #endif /* CONFIG_USERSPACE */ + GROUP_START(DATA_REGION) + + __data_region_start = .; + SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,) { - __data_ram_start = .; + __data_start = .; *(.data) *(".data.*") *(".kernel.*") @@ -307,10 +311,13 @@ SECTIONS #ifdef CONFIG_CODE_DATA_RELOCATION #include #endif + __data_end = .; } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) + __data_size = __data_end - __data_start; + __data_load_start = LOADADDR(_DATA_SECTION_NAME); - __data_rom_start = LOADADDR(_DATA_SECTION_NAME); + __data_region_load_start = LOADADDR(_DATA_SECTION_NAME); #include #include @@ -322,7 +329,7 @@ SECTIONS */ #include - __data_ram_end = .; + __data_region_end = .; #ifndef CONFIG_USERSPACE SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),) diff --git a/include/arch/arm64/scripts/linker.ld b/include/arch/arm64/scripts/linker.ld index bf8ddb07ae6..573aee7dee3 100644 --- a/include/arch/arm64/scripts/linker.ld +++ b/include/arch/arm64/scripts/linker.ld @@ -248,9 +248,11 @@ SECTIONS #include + __data_region_start = .; + SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,) { - __data_ram_start = .; + __data_start = .; *(.data) *(".data.*") *(".kernel.*") @@ -260,9 +262,13 @@ SECTIONS */ #include - } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) + __data_end = .; - __data_rom_start = LOADADDR(_DATA_SECTION_NAME); + } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) + __data_size = __data_end - __data_start; + __data_load_start = LOADADDR(_DATA_SECTION_NAME); + + __data_region_load_start = LOADADDR(_DATA_SECTION_NAME); #include #include @@ -273,7 +279,7 @@ SECTIONS */ #include - __data_ram_end = .; + __data_region_end = .; /* Define linker symbols */ diff --git a/include/arch/nios2/linker.ld b/include/arch/nios2/linker.ld index 70a3cc7f01d..d54dc2defd3 100644 --- a/include/arch/nios2/linker.ld +++ b/include/arch/nios2/linker.ld @@ -97,7 +97,7 @@ SECTIONS } GROUP_START(ROMABLE_REGION) - _image_rom_start = _ROM_ADDR; + __rom_region_start = _ROM_ADDR; SECTION_PROLOGUE(_RESET_SECTION_NAME,,) { @@ -119,21 +119,21 @@ SECTIONS * we are going to waste flash space? */ . = ALT_CPU_RESET_ADDR; - _image_text_start = .; + __text_region_start = .; *(.text) *(".text.*") *(.gnu.linkonce.t.*) } GROUP_LINK_IN(ROMABLE_REGION) - _image_text_end = .; + __text_region_end = .; #if defined(CONFIG_GP_ALL_DATA) _gp = ABSOLUTE(. + 0x8000); PROVIDE(gp = _gp); #endif - _image_rodata_start = .; + __rodata_region_start = .; #include @@ -159,7 +159,7 @@ SECTIONS _image_rodata_size = _image_rodata_end - _image_rodata_start; _image_rom_end = .; - __data_rom_start = ALIGN(4); /* XIP imaged DATA ROM start addr */ + __data_region_load_start = ALIGN(4); /* XIP imaged DATA ROM start addr */ GROUP_END(ROMABLE_REGION) @@ -175,7 +175,7 @@ SECTIONS SECTION_DATA_PROLOGUE(_EXCEPTION_SECTION_NAME,,) { _image_ram_start = .; - __data_ram_start = .; + __data_region_start = .; KEEP(*(".exception.entry.*")) *(".exception.other.*") @@ -191,6 +191,7 @@ SECTIONS SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,) { + __data_start = .; *(.data) *(".data.*") @@ -223,8 +224,11 @@ SECTIONS * zephyr_linker_sources() Cmake function. */ #include + __data_end = .; } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) + __data_size = __data_end - __data_start; + __data_load_start = LOADADDR(_DATA_SECTION_NAME); #include @@ -233,7 +237,7 @@ SECTIONS */ #include - __data_ram_end = .; + __data_region_end = .; SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),) { diff --git a/include/arch/posix/linker.ld b/include/arch/posix/linker.ld index 3cc2d44069f..d56260e76af 100644 --- a/include/arch/posix/linker.ld +++ b/include/arch/posix/linker.ld @@ -53,7 +53,7 @@ SECTIONS */ #include - __data_ram_end = .; +__data_region_end = .; /* Located in generated directory. This file is populated by the * zephyr_linker_sources() Cmake function. diff --git a/include/arch/riscv/common/linker.ld b/include/arch/riscv/common/linker.ld index bc3475e321d..7ac29711074 100644 --- a/include/arch/riscv/common/linker.ld +++ b/include/arch/riscv/common/linker.ld @@ -229,11 +229,13 @@ SECTIONS #include #include + __data_region_start = .; + SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,) { . = ALIGN(4); /* _image_ram_start = .; */ - __data_ram_start = .; + __data_start = .; *(.data) *(".data.*") @@ -260,10 +262,13 @@ SECTIONS * zephyr_linker_sources() Cmake function. */ #include + __data_end = .; } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) + __data_size = __data_end - __data_start; + __data_load_start = LOADADDR(_DATA_SECTION_NAME); - __data_rom_start = LOADADDR(_DATA_SECTION_NAME); + __data_region_load_start = LOADADDR(_DATA_SECTION_NAME); #include #include @@ -278,7 +283,7 @@ SECTIONS */ #include - __data_ram_end = .; + __data_region_end = .; MPU_MIN_SIZE_ALIGN diff --git a/include/arch/sparc/linker.ld b/include/arch/sparc/linker.ld index 217f2d08b6e..1bb491ee8dc 100644 --- a/include/arch/sparc/linker.ld +++ b/include/arch/sparc/linker.ld @@ -67,7 +67,8 @@ SECTIONS _image_rom_end = .; - __data_rom_start = .; + __data_region_load_start = .; + __data_region_start = .; SECTION_PROLOGUE(.plt,,) @@ -84,7 +85,7 @@ SECTIONS { . = ALIGN(8); _image_ram_start = .; - __data_ram_start = .; + __data_start = .; *(.data) *(.data.*) @@ -96,7 +97,11 @@ SECTIONS */ #include + __data_end = .; + } GROUP_DATA_LINK_IN(REGION_DATA_VMA, REGION_DATA_LMA) + __data_size = __data_end - __data_start; + __data_load_start = LOADADDR(_DATA_SECTION_NAME); #include @@ -110,7 +115,7 @@ SECTIONS */ #include - __data_ram_end = .; + __data_region_end = .; SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),) { diff --git a/include/arch/x86/ia32/linker.ld b/include/arch/x86/ia32/linker.ld index 6550a29a45f..7b2a6342bc3 100644 --- a/include/arch/x86/ia32/linker.ld +++ b/include/arch/x86/ia32/linker.ld @@ -437,10 +437,12 @@ SECTIONS MMU_PAGE_ALIGN_PERM + SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,) { - __data_ram_start = .; + __data_region_start = .; + __data_start = .; *(.data) *(".data.*") @@ -462,9 +464,13 @@ SECTIONS #endif /* !CONFIG_LINKER_USE_PINNED_SECTION */ . = ALIGN(4); - } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) + __data_end = .; - __data_rom_start = LOADADDR(_DATA_SECTION_NAME); + } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) + __data_size = __data_end - __data_start; + __data_load_start = LOADADDR(_DATA_SECTION_NAME); + + __data_region_load_start = LOADADDR(_DATA_SECTION_NAME); #include @@ -482,7 +488,7 @@ SECTIONS #include MMU_PAGE_ALIGN - __data_ram_end = .; + __data_region_end = .; /* All unused memory also owned by the kernel for heaps */ __kernel_ram_end = KERNEL_BASE_ADDR + KERNEL_RAM_SIZE; @@ -536,6 +542,6 @@ SECTIONS * to 3 extra bytes copied in next section (BSS). At run time, the XIP copy * is done first followed by clearing the BSS section. */ -__data_size = (__data_ram_end - __data_ram_start); +__data_size = (__data_region_end - __data_region_start); __data_num_words = (__data_size + 3) >> 2; #endif diff --git a/include/linker/linker-defs.h b/include/linker/linker-defs.h index 7efab81f38c..d28f3c39c9b 100644 --- a/include/linker/linker-defs.h +++ b/include/linker/linker-defs.h @@ -172,9 +172,9 @@ GDATA(__bss_start) GDATA(__bss_num_words) #ifdef CONFIG_XIP -GDATA(__data_rom_start) -GDATA(__data_ram_start) -GDATA(__data_num_words) +GDATA(__data_region_load_start) +GDATA(__data_region_start) +GDATA(__data_region_num_words) #endif #else /* ! _ASMLANGUAGE */ @@ -224,9 +224,9 @@ extern char __bss_end[]; /* Used by z_data_copy() or arch-specific implementation */ #ifdef CONFIG_XIP -extern char __data_rom_start[]; -extern char __data_ram_start[]; -extern char __data_ram_end[]; +extern char __data_region_load_start[]; +extern char __data_region_start[]; +extern char __data_region_end[]; #endif /* CONFIG_XIP */ #ifdef CONFIG_MMU diff --git a/kernel/xip.c b/kernel/xip.c index c59edc456aa..0498ae6bcd8 100644 --- a/kernel/xip.c +++ b/kernel/xip.c @@ -25,8 +25,8 @@ extern volatile uintptr_t __stack_chk_guard; */ void z_data_copy(void) { - (void)memcpy(&__data_ram_start, &__data_rom_start, - __data_ram_end - __data_ram_start); + (void)memcpy(&__data_region_start, &__data_region_load_start, + __data_region_end - __data_region_start); #ifdef CONFIG_ARCH_HAS_RAMFUNC_SUPPORT (void)memcpy(&_ramfunc_ram_start, &_ramfunc_rom_start, (uintptr_t) &_ramfunc_ram_size); diff --git a/soc/riscv/openisa_rv32m1/linker.ld b/soc/riscv/openisa_rv32m1/linker.ld index c46f6df67d1..fea4cd13902 100644 --- a/soc/riscv/openisa_rv32m1/linker.ld +++ b/soc/riscv/openisa_rv32m1/linker.ld @@ -159,11 +159,13 @@ SECTIONS GROUP_START(RAM) + __data_region_start = .; + SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,) { . = ALIGN(4); _image_ram_start = .; - __data_ram_start = .; + __data_start = .; *(.data) *(.data.*) @@ -178,7 +180,11 @@ SECTIONS */ #include + __data_end = .; + } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) + __data_size = __data_end - __data_start; + __data_load_start = LOADADDR(_DATA_SECTION_NAME); #include #include @@ -188,8 +194,8 @@ SECTIONS */ #include - __data_ram_end = .; - __data_rom_start = LOADADDR(_DATA_SECTION_NAME); + __data_region_end = .; + __data_region_load_start = LOADADDR(_DATA_SECTION_NAME); SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),) {