Skip to content

Commit

Permalink
linker: align __data_ram/rom_start/end linker symbol names
Browse files Browse the repository at this point in the history
Cleanup and preparation commit for linker script generator.

Zephyr linker scripts provides start and end symbols for each section,
and sometimes even size and LMA start symbols.

Generally, start and end symbols uses the following pattern, as:
Section name:             foo
Section start symbol:     __foo_start
Section end symbol:       __foo_end

However, this pattern is not followed consistently.
To allow for linker script generation and ensure consistent naming of
symbols then the following pattern is introduced consistently to allow
for cleaner linker script generation.
Section name:             foo
Section start symbol:     __foo_start
Section end symbol:       __foo_end
Section size symbol:      __foo_size
Section LMA start symbol: __foo_load_start

This commit aligns the symbols for _data_ram/rom to other symbols and in
such a way they follow consistent pattern which allows for linker script
and scatter file generation.

The symbols are named according to the section name they describe.
Section name is `data`

A new group named data_region is introduced which instead spans all the
input and output sections that was previously covered by
__data_ram_start, __data_ram_end, and __data_rom_start.

The following symbols are aligned in this commit:
-  __data_ram_start  -> __data_region_start
-  __data_ram_end    -> __data_region_end
-  __data_rom_start  -> __data_region_load_start

The following new symbols are introduced so that the data section is
aligned with other sections:
-  __data_end
-  __data_start
       value identical to __data_region_start but describes start of
       the section.

Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
  • Loading branch information
tejlmand authored and nashif committed Aug 28, 2021
1 parent 626e167 commit 65a2de8
Show file tree
Hide file tree
Showing 12 changed files with 95 additions and 41 deletions.
16 changes: 13 additions & 3 deletions include/arch/arc/v2/linker.ld
Original file line number Diff line number Diff line change
Expand Up @@ -178,10 +178,14 @@ SECTIONS {

#include <linker/common-noinit.ld>

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.*")
Expand All @@ -191,9 +195,14 @@ SECTIONS {
*/
#include <snippets-rwdata.ld>

__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 <linker/common-ram.ld>
#include <linker/kobject-data.ld>
Expand All @@ -209,7 +218,8 @@ SECTIONS {
*/
#include <snippets-data-sections.ld>

__data_ram_end = .;
__data_region_end = .;

MPU_MIN_SIZE_ALIGN
/* Define linker symbols */
_image_ram_end = .;
Expand Down
11 changes: 8 additions & 3 deletions include/arch/arm/aarch32/cortex_a_r/scripts/linker.ld
Original file line number Diff line number Diff line change
Expand Up @@ -278,9 +278,11 @@ SECTIONS

#include <linker/common-noinit.ld>

__data_region_start = .;

SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
{
__data_ram_start = .;
__data_start = .;
*(.data)
*(".data.*")
*(".kernel.*")
Expand All @@ -293,10 +295,13 @@ SECTIONS
#ifdef CONFIG_CODE_DATA_RELOCATION
#include <linker_sram_data_relocate.ld>
#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 <linker/common-ram.ld>
#include <linker/kobject-data.ld>
Expand All @@ -307,7 +312,7 @@ SECTIONS
*/
#include <snippets-data-sections.ld>

__data_ram_end = .;
__data_region_end = .;


/* Define linker symbols */
Expand Down
13 changes: 10 additions & 3 deletions include/arch/arm/aarch32/cortex_m/scripts/linker.ld
Original file line number Diff line number Diff line change
Expand Up @@ -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.*")
Expand All @@ -307,10 +311,13 @@ SECTIONS
#ifdef CONFIG_CODE_DATA_RELOCATION
#include <linker_sram_data_relocate.ld>
#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 <linker/common-ram.ld>
#include <linker/kobject-data.ld>
Expand All @@ -322,7 +329,7 @@ SECTIONS
*/
#include <snippets-data-sections.ld>

__data_ram_end = .;
__data_region_end = .;

#ifndef CONFIG_USERSPACE
SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)
Expand Down
12 changes: 9 additions & 3 deletions include/arch/arm64/scripts/linker.ld
Original file line number Diff line number Diff line change
Expand Up @@ -248,9 +248,11 @@ SECTIONS

#include <linker/common-noinit.ld>

__data_region_start = .;

SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
{
__data_ram_start = .;
__data_start = .;
*(.data)
*(".data.*")
*(".kernel.*")
Expand All @@ -260,9 +262,13 @@ SECTIONS
*/
#include <snippets-rwdata.ld>

__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 <linker/common-ram.ld>
#include <linker/kobject-data.ld>
Expand All @@ -273,7 +279,7 @@ SECTIONS
*/
#include <snippets-data-sections.ld>

__data_ram_end = .;
__data_region_end = .;


/* Define linker symbols */
Expand Down
18 changes: 11 additions & 7 deletions include/arch/nios2/linker.ld
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ SECTIONS
}

GROUP_START(ROMABLE_REGION)
_image_rom_start = _ROM_ADDR;
__rom_region_start = _ROM_ADDR;

SECTION_PROLOGUE(_RESET_SECTION_NAME,,)
{
Expand All @@ -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 <linker/common-rom.ld>

Expand All @@ -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)

Expand All @@ -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.*")
Expand All @@ -191,6 +191,7 @@ SECTIONS

SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
{
__data_start = .;
*(.data)
*(".data.*")

Expand Down Expand Up @@ -223,8 +224,11 @@ SECTIONS
* zephyr_linker_sources() Cmake function.
*/
#include <snippets-ram-sections.ld>
__data_end = .;

} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
__data_size = __data_end - __data_start;
__data_load_start = LOADADDR(_DATA_SECTION_NAME);

#include <linker/cplusplus-ram.ld>

Expand All @@ -233,7 +237,7 @@ SECTIONS
*/
#include <snippets-data-sections.ld>

__data_ram_end = .;
__data_region_end = .;

SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)
{
Expand Down
2 changes: 1 addition & 1 deletion include/arch/posix/linker.ld
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ SECTIONS
*/
#include <snippets-data-sections.ld>

__data_ram_end = .;
__data_region_end = .;

/* Located in generated directory. This file is populated by the
* zephyr_linker_sources() Cmake function.
Expand Down
11 changes: 8 additions & 3 deletions include/arch/riscv/common/linker.ld
Original file line number Diff line number Diff line change
Expand Up @@ -229,11 +229,13 @@ SECTIONS
#include <linker/common-noinit.ld>
#include <linker/cplusplus-ram.ld>

__data_region_start = .;

SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
{
. = ALIGN(4);
/* _image_ram_start = .; */
__data_ram_start = .;
__data_start = .;

*(.data)
*(".data.*")
Expand All @@ -260,10 +262,13 @@ SECTIONS
* zephyr_linker_sources() Cmake function.
*/
#include <snippets-rwdata.ld>
__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 <linker/common-ram.ld>
#include <linker/kobject-data.ld>
Expand All @@ -278,7 +283,7 @@ SECTIONS
*/
#include <snippets-data-sections.ld>

__data_ram_end = .;
__data_region_end = .;

MPU_MIN_SIZE_ALIGN

Expand Down
11 changes: 8 additions & 3 deletions include/arch/sparc/linker.ld
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ SECTIONS

_image_rom_end = .;

__data_rom_start = .;
__data_region_load_start = .;
__data_region_start = .;


SECTION_PROLOGUE(.plt,,)
Expand All @@ -84,7 +85,7 @@ SECTIONS
{
. = ALIGN(8);
_image_ram_start = .;
__data_ram_start = .;
__data_start = .;

*(.data)
*(.data.*)
Expand All @@ -96,7 +97,11 @@ SECTIONS
*/
#include <snippets-rwdata.ld>

__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 <linker/common-ram.ld>

Expand All @@ -110,7 +115,7 @@ SECTIONS
*/
#include <snippets-data-sections.ld>

__data_ram_end = .;
__data_region_end = .;

SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)
{
Expand Down
14 changes: 10 additions & 4 deletions include/arch/x86/ia32/linker.ld
Original file line number Diff line number Diff line change
Expand Up @@ -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.*")
Expand All @@ -462,9 +464,13 @@ SECTIONS
#endif /* !CONFIG_LINKER_USE_PINNED_SECTION */

. = ALIGN(4);
__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 <linker/cplusplus-ram.ld>

Expand All @@ -482,7 +488,7 @@ SECTIONS
#include <snippets-data-sections.ld>

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;
Expand Down Expand Up @@ -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
12 changes: 6 additions & 6 deletions include/linker/linker-defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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
Expand Down
Loading

0 comments on commit 65a2de8

Please sign in to comment.