Merge changes from topic "linker-script" into integration

* changes:
  linker_script: move .data section to bl_common.ld.h
  linker_script: move stacks section to bl_common.ld.h
  bl1: remove '.' from stacks section in linker script
This commit is contained in:
Sandrine Bailleux 2020-04-27 08:45:34 +00:00 committed by TrustedFirmware Code Review
commit 455a6f3b14
9 changed files with 44 additions and 125 deletions

View File

@ -4,6 +4,14 @@
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
*/ */
/*
* The .data section gets copied from ROM to RAM at runtime.
* Its LMA should be 16-byte aligned to allow efficient copying of 16-bytes
* aligned regions in it.
* Its VMA must be page-aligned as it marks the first read/write page.
*/
#define DATA_ALIGN 16
#include <common/bl_common.ld.h> #include <common/bl_common.ld.h>
#include <lib/xlat_tables/xlat_tables_defs.h> #include <lib/xlat_tables/xlat_tables_defs.h>
@ -87,28 +95,11 @@ SECTIONS
ASSERT(BL1_RW_BASE == ALIGN(PAGE_SIZE), ASSERT(BL1_RW_BASE == ALIGN(PAGE_SIZE),
"BL1_RW_BASE address is not aligned on a page boundary.") "BL1_RW_BASE address is not aligned on a page boundary.")
/* DATA_SECTION >RAM AT>ROM
* The .data section gets copied from ROM to RAM at runtime. __DATA_RAM_START__ = __DATA_START__;
* Its LMA should be 16-byte aligned to allow efficient copying of 16-bytes __DATA_RAM_END__ = __DATA_END__;
* aligned regions in it.
* Its VMA must be page-aligned as it marks the first read/write page.
*
* It must be placed at a lower address than the stacks if the stack
* protector is enabled. Alternatively, the .data.stack_protector_canary
* section can be placed independently of the main .data section.
*/
.data . : ALIGN(16) {
__DATA_RAM_START__ = .;
*(SORT_BY_ALIGNMENT(.data*))
__DATA_RAM_END__ = .;
} >RAM AT>ROM
stacks . (NOLOAD) : {
__STACKS_START__ = .;
*(tzfw_normal_stacks)
__STACKS_END__ = .;
} >RAM
STACK_SECTION >RAM
BSS_SECTION >RAM BSS_SECTION >RAM
XLAT_TABLE_SECTION >RAM XLAT_TABLE_SECTION >RAM

View File

@ -77,23 +77,8 @@ SECTIONS
*/ */
__RW_START__ = . ; __RW_START__ = . ;
/* DATA_SECTION >RAM
* .data must be placed at a lower address than the stacks if the stack STACK_SECTION >RAM
* protector is enabled. Alternatively, the .data.stack_protector_canary
* section can be placed independently of the main .data section.
*/
.data . : {
__DATA_START__ = .;
*(SORT_BY_ALIGNMENT(.data*))
__DATA_END__ = .;
} >RAM
stacks (NOLOAD) : {
__STACKS_START__ = .;
*(tzfw_normal_stacks)
__STACKS_END__ = .;
} >RAM
BSS_SECTION >RAM BSS_SECTION >RAM
XLAT_TABLE_SECTION >RAM XLAT_TABLE_SECTION >RAM

View File

@ -101,16 +101,9 @@ SECTIONS
*/ */
__RW_START__ = . ; __RW_START__ = . ;
/* DATA_SECTION >RAM AT>ROM
* .data must be placed at a lower address than the stacks if the stack __DATA_RAM_START__ = __DATA_START__;
* protector is enabled. Alternatively, the .data.stack_protector_canary __DATA_RAM_END__ = __DATA_END__;
* section can be placed independently of the main .data section.
*/
.data . : {
__DATA_RAM_START__ = .;
*(SORT_BY_ALIGNMENT(.data*))
__DATA_RAM_END__ = .;
} >RAM AT>ROM
/* /*
* .rela.dyn needs to come after .data for the read-elf utility to parse * .rela.dyn needs to come after .data for the read-elf utility to parse
@ -123,12 +116,7 @@ SECTIONS
} >RAM } >RAM
__RELA_END__ = .; __RELA_END__ = .;
stacks (NOLOAD) : { STACK_SECTION >RAM
__STACKS_START__ = .;
*(tzfw_normal_stacks)
__STACKS_END__ = .;
} >RAM
BSS_SECTION >RAM BSS_SECTION >RAM
XLAT_TABLE_SECTION >RAM XLAT_TABLE_SECTION >RAM

View File

@ -79,23 +79,8 @@ SECTIONS
*/ */
__RW_START__ = . ; __RW_START__ = . ;
/* DATA_SECTION >RAM
* .data must be placed at a lower address than the stacks if the stack STACK_SECTION >RAM
* protector is enabled. Alternatively, the .data.stack_protector_canary
* section can be placed independently of the main .data section.
*/
.data . : {
__DATA_START__ = .;
*(SORT_BY_ALIGNMENT(.data*))
__DATA_END__ = .;
} >RAM
stacks (NOLOAD) : {
__STACKS_START__ = .;
*(tzfw_normal_stacks)
__STACKS_END__ = .;
} >RAM
BSS_SECTION >RAM BSS_SECTION >RAM
XLAT_TABLE_SECTION >RAM XLAT_TABLE_SECTION >RAM

View File

@ -114,16 +114,7 @@ SECTIONS
*/ */
__RW_START__ = . ; __RW_START__ = . ;
/* DATA_SECTION >RAM
* .data must be placed at a lower address than the stacks if the stack
* protector is enabled. Alternatively, the .data.stack_protector_canary
* section can be placed independently of the main .data section.
*/
.data . : {
__DATA_START__ = .;
*(SORT_BY_ALIGNMENT(.data*))
__DATA_END__ = .;
} >RAM
/* /*
* .rela.dyn needs to come after .data for the read-elf utility to parse * .rela.dyn needs to come after .data for the read-elf utility to parse
@ -158,12 +149,7 @@ SECTIONS
__NOBITS_START__ = .; __NOBITS_START__ = .;
#endif #endif
stacks (NOLOAD) : { STACK_SECTION >NOBITS
__STACKS_START__ = .;
*(tzfw_normal_stacks)
__STACKS_END__ = .;
} >NOBITS
BSS_SECTION >NOBITS BSS_SECTION >NOBITS
XLAT_TABLE_SECTION >NOBITS XLAT_TABLE_SECTION >NOBITS

View File

@ -91,22 +91,13 @@ SECTIONS
*/ */
__RW_START__ = . ; __RW_START__ = . ;
.data . : { DATA_SECTION >RAM
__DATA_START__ = .;
*(.data*)
__DATA_END__ = .;
} >RAM
#ifdef BL32_PROGBITS_LIMIT #ifdef BL32_PROGBITS_LIMIT
ASSERT(. <= BL32_PROGBITS_LIMIT, "BL32 progbits has exceeded its limit.") ASSERT(. <= BL32_PROGBITS_LIMIT, "BL32 progbits has exceeded its limit.")
#endif #endif
stacks (NOLOAD) : { STACK_SECTION >RAM
__STACKS_START__ = .;
*(tzfw_normal_stacks)
__STACKS_END__ = .;
} >RAM
BSS_SECTION >RAM BSS_SECTION >RAM
XLAT_TABLE_SECTION >RAM XLAT_TABLE_SECTION >RAM

View File

@ -70,11 +70,7 @@ SECTIONS
*/ */
__RW_START__ = . ; __RW_START__ = . ;
.data . : { DATA_SECTION >RAM
__DATA_START__ = .;
*(.data*)
__DATA_END__ = .;
} >RAM
/* /*
* .rela.dyn needs to come after .data for the read-elf utility to parse * .rela.dyn needs to come after .data for the read-elf utility to parse
@ -91,12 +87,7 @@ SECTIONS
ASSERT(. <= TSP_PROGBITS_LIMIT, "TSP progbits has exceeded its limit.") ASSERT(. <= TSP_PROGBITS_LIMIT, "TSP progbits has exceeded its limit.")
#endif #endif
stacks (NOLOAD) : { STACK_SECTION >RAM
__STACKS_START__ = .;
*(tzfw_normal_stacks)
__STACKS_END__ = .;
} >RAM
BSS_SECTION >RAM BSS_SECTION >RAM
XLAT_TABLE_SECTION >RAM XLAT_TABLE_SECTION >RAM

View File

@ -17,6 +17,10 @@
#define BSS_ALIGN 8 #define BSS_ALIGN 8
#endif #endif
#ifndef DATA_ALIGN
#define DATA_ALIGN 1
#endif
#define CPU_OPS \ #define CPU_OPS \
. = ALIGN(STRUCT_ALIGN); \ . = ALIGN(STRUCT_ALIGN); \
__CPU_OPS_START__ = .; \ __CPU_OPS_START__ = .; \
@ -85,6 +89,18 @@
GOT \ GOT \
BASE_XLAT_TABLE_RO BASE_XLAT_TABLE_RO
/*
* .data must be placed at a lower address than the stacks if the stack
* protector is enabled. Alternatively, the .data.stack_protector_canary
* section can be placed independently of the main .data section.
*/
#define DATA_SECTION \
.data . : ALIGN(DATA_ALIGN) { \
__DATA_START__ = .; \
*(SORT_BY_ALIGNMENT(.data*)) \
__DATA_END__ = .; \
}
#define STACK_SECTION \ #define STACK_SECTION \
stacks (NOLOAD) : { \ stacks (NOLOAD) : { \
__STACKS_START__ = .; \ __STACKS_START__ = .; \

View File

@ -59,27 +59,13 @@ SECTIONS
*/ */
__RW_START__ = . ; __RW_START__ = . ;
/* DATA_SECTION >RAM
* .data must be placed at a lower address than the stacks if the stack
* protector is enabled. Alternatively, the .data.stack_protector_canary
* section can be placed independently of the main .data section.
*/
.data . : {
__DATA_START__ = .;
*(.data*)
__DATA_END__ = .;
} >RAM
#ifdef BL31_PROGBITS_LIMIT #ifdef BL31_PROGBITS_LIMIT
ASSERT(. <= BL31_PROGBITS_LIMIT, "BL3-1 progbits has exceeded its limit.") ASSERT(. <= BL31_PROGBITS_LIMIT, "BL3-1 progbits has exceeded its limit.")
#endif #endif
stacks (NOLOAD) : { STACK_SECTION >RAM
__STACKS_START__ = .;
*(tzfw_normal_stacks)
__STACKS_END__ = .;
} >RAM
BSS_SECTION >RAM BSS_SECTION >RAM
__RW_END__ = __BSS_END__; __RW_END__ = __BSS_END__;