Browse Source
Map the initialization code for BL31 to overlap with the memory required for the secondary cores stack. Once BL31 has been initialized the memory can be remapped to RW data so that it can be used for secondary cores stacks. By moving code from .text to .text.init the size of the BL31 image is decreased by a page. Split arm_common.ld.S into two linker scripts, one for tzc_dram (arm_tzc_dram.ld.S) and one for reclaiming initialization code (arm_reclaim_init.ld.S) so that platforms can chose which memory regions they wish to include. Change-Id: I648e88f3eda1aa71765744cf34343ecda9320b32 Signed-off-by: Daniel Boulby <daniel.boulby@arm.com>pull/1603/head
Daniel Boulby
6 years ago
committed by
Antonio Nino Diaz
9 changed files with 100 additions and 6 deletions
@ -0,0 +1,36 @@ |
|||
/* |
|||
* Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. |
|||
* |
|||
* SPDX-License-Identifier: BSD-3-Clause |
|||
*/ |
|||
#ifndef ARM_RECLAIM_INIT_LD_S |
|||
#define ARM_RECLAIM_INIT_LD_S |
|||
|
|||
SECTIONS |
|||
{ |
|||
.init __STACKS_START__ : { |
|||
. = . + PLATFORM_STACK_SIZE; |
|||
. = ALIGN(PAGE_SIZE); |
|||
__INIT_CODE_START__ = .; |
|||
/* |
|||
* Exclude PSCI initialization functions to ensure the init section |
|||
* does not become larger than the overlaid stack region |
|||
*/ |
|||
*(EXCLUDE_FILE (*psci_setup.o).text.init*) |
|||
__INIT_CODE_UNALIGNED__ = .; |
|||
. = ALIGN(PAGE_SIZE); |
|||
__INIT_CODE_END__ = .; |
|||
} >RAM |
|||
|
|||
#ifdef BL31_PROGBITS_LIMIT |
|||
ASSERT(__INIT_CODE_END__ <= BL31_PROGBITS_LIMIT, |
|||
"BL31 init has exceeded progbits limit.") |
|||
#endif |
|||
|
|||
#if RECLAIM_INIT_CODE |
|||
ASSERT(__INIT_CODE_END__ <= __STACKS_END__, |
|||
"Init code ends past the end of the stacks") |
|||
#endif |
|||
} |
|||
|
|||
#endif /* ARM_RECLAIM_INIT_LD_S */ |
Loading…
Reference in new issue