linker scripts: add symbols for ROM/RAM boundaries

These symbols have more meaningful names when trying to figure out where
the ROM/RAM starts/ends, rather than relying on e.g. __data_rom_start for
the end of the ROM (__data_rom_start is the beginning of the data in
ROM, thus is not part of the image).

Change-Id: I4aa0354ee414fd0d46d0f40952e091ba090e7bce
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>
This commit is contained in:
Benjamin Walsh 2015-09-16 19:14:40 -04:00 committed by Anas Nashif
commit 09303f7f68
3 changed files with 16 additions and 0 deletions

View file

@ -65,6 +65,8 @@ SECTIONS
{ {
GROUP_START(ROMABLE_REGION) GROUP_START(ROMABLE_REGION)
_image_rom_start = CONFIG_FLASH_BASE_ADDRESS;
SECTION_PROLOGUE(_TEXT_SECTION_NAME,,) SECTION_PROLOGUE(_TEXT_SECTION_NAME,,)
{ {
KEEP(*(.exc_vector_table)) KEEP(*(.exc_vector_table))
@ -133,6 +135,7 @@ SECTIONS
*(".rodata.*") *(".rodata.*")
} GROUP_LINK_IN(ROMABLE_REGION) } GROUP_LINK_IN(ROMABLE_REGION)
_image_rom_end = .;
__data_rom_start = ALIGN(4); /* XIP imaged DATA ROM start addr */ __data_rom_start = ALIGN(4); /* XIP imaged DATA ROM start addr */
GROUP_END(ROMABLE_REGION) GROUP_END(ROMABLE_REGION)
@ -145,6 +148,7 @@ SECTIONS
SECTION_PROLOGUE(_DATA_SECTION_NAME,,) SECTION_PROLOGUE(_DATA_SECTION_NAME,,)
#endif #endif
{ {
_image_ram_start = .;
__data_ram_start = .; __data_ram_start = .;
*(.data) *(.data)
*(".data.*") *(".data.*")
@ -244,6 +248,7 @@ SECTIONS
/* Define linker symbols */ /* Define linker symbols */
_image_ram_end = .;
_end = .; /* end of image */ _end = .; /* end of image */
__bss_num_words = (__bss_end - __bss_start) >> 2; __bss_num_words = (__bss_end - __bss_start) >> 2;

View file

@ -63,8 +63,11 @@ SECTIONS
{ {
GROUP_START(ROMABLE_REGION) GROUP_START(ROMABLE_REGION)
_image_rom_start = PHYS_LOAD_ADDR;
SECTION_PROLOGUE(_TEXT_SECTION_NAME, (OPTIONAL),) SECTION_PROLOGUE(_TEXT_SECTION_NAME, (OPTIONAL),)
{ {
*(.text_start) *(.text_start)
*(".text_start.*") *(".text_start.*")
*(.text) *(.text)
@ -110,6 +113,7 @@ SECTIONS
KEXEC_PGALIGN_PAD(MMU_PAGE_SIZE) KEXEC_PGALIGN_PAD(MMU_PAGE_SIZE)
} GROUP_LINK_IN(ROMABLE_REGION) } GROUP_LINK_IN(ROMABLE_REGION)
_image_rom_end = .;
__data_rom_start = ALIGN(4); /* XIP imaged DATA ROM start addr */ __data_rom_start = ALIGN(4); /* XIP imaged DATA ROM start addr */
GROUP_END(ROMABLE_REGION) GROUP_END(ROMABLE_REGION)
@ -124,6 +128,7 @@ SECTIONS
#endif #endif
{ {
KEXEC_PGALIGN_PAD(MMU_PAGE_SIZE) KEXEC_PGALIGN_PAD(MMU_PAGE_SIZE)
_image_ram_start = .;
__data_ram_start = .; __data_ram_start = .;
*(.data) *(.data)
*(".data.*") *(".data.*")
@ -231,6 +236,7 @@ SECTIONS
} GROUP_LINK_IN(RAM) } GROUP_LINK_IN(RAM)
/* Define linker symbols */ /* Define linker symbols */
_image_ram_end = .;
_end = .; /* end of image */ _end = .; /* end of image */
. = ALIGN(MMU_PAGE_SIZE); . = ALIGN(MMU_PAGE_SIZE);

View file

@ -113,6 +113,11 @@ extern char __data_ram_start[];
extern int __data_num_words[]; extern int __data_num_words[];
#endif #endif
extern char _image_rom_start[];
extern char _image_rom_end[];
extern char _image_ram_start[];
extern char _image_ram_end[];
/* end address of image. */ /* end address of image. */
extern char _end[]; extern char _end[];