mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-19 02:54:24 +00:00
feat(plat/arm): enable PIE when RESET_TO_SP_MIN=1
For Arm platforms PIE is enabled when RESET_TO_BL31=1 in aarch64 mode on
the similar lines enable PIE when RESET_TO_SP_MIN=1 in aarch32 mode.
The underlying changes for enabling PIE in aarch32 is submitted in
commit 4324a14bf
Signed-off-by: Manish Pandey <manish.pandey2@arm.com>
Change-Id: Ib8bb860198b3f97cdc91005503a3184d63e15469
This commit is contained in:
parent
a5394205e9
commit
7285fd5f9a
5 changed files with 23 additions and 11 deletions
|
@ -526,8 +526,8 @@ with 8 CPUs using the AArch64 build of TF-A.
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
- If Position Independent Executable (PIE) support is enabled for BL31
|
- Position Independent Executable (PIE) support is enabled in this
|
||||||
in this config, it can be loaded at any valid address for execution.
|
config allowing BL31 to be loaded at any valid address for execution.
|
||||||
|
|
||||||
- Since a FIP is not loaded when using BL31 as reset entrypoint, the
|
- Since a FIP is not loaded when using BL31 as reset entrypoint, the
|
||||||
``--data="<path-to><bl31|bl32|bl33-binary>"@<base-address-of-binary>``
|
``--data="<path-to><bl31|bl32|bl33-binary>"@<base-address-of-binary>``
|
||||||
|
@ -588,8 +588,8 @@ with 8 CPUs using the AArch32 build of TF-A.
|
||||||
--data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000
|
--data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The load address of ``<bl32-binary>`` depends on the value ``BL32_BASE``.
|
Position Independent Executable (PIE) support is enabled in this
|
||||||
It should match the address programmed into the RVBAR register as well.
|
config allowing SP_MIN to be loaded at any valid address for execution.
|
||||||
|
|
||||||
Running on the Cortex-A57-A53 Base FVP with reset to BL31 entrypoint
|
Running on the Cortex-A57-A53 Base FVP with reset to BL31 entrypoint
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
@ -465,12 +465,16 @@
|
||||||
* BL32 specific defines for EL3 runtime in AArch32 mode
|
* BL32 specific defines for EL3 runtime in AArch32 mode
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
# if RESET_TO_SP_MIN && !JUNO_AARCH32_EL3_RUNTIME
|
# if RESET_TO_SP_MIN && !JUNO_AARCH32_EL3_RUNTIME
|
||||||
|
/* Ensure Position Independent support (PIE) is enabled for this config.*/
|
||||||
|
# if !ENABLE_PIE
|
||||||
|
# error "BL32 must be a PIE if RESET_TO_SP_MIN=1."
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
* SP_MIN is the only BL image in SRAM. Allocate the whole of SRAM (excluding
|
* Since this is PIE, we can define BL32_BASE to 0x0 since this macro is solely
|
||||||
* the page reserved for fw_configs) to BL32
|
* used for building BL32 and not used for loading BL32.
|
||||||
*/
|
*/
|
||||||
# define BL32_BASE ARM_FW_CONFIGS_LIMIT
|
# define BL32_BASE 0x0
|
||||||
# define BL32_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
|
# define BL32_LIMIT PLAT_ARM_MAX_BL32_SIZE
|
||||||
# else
|
# else
|
||||||
/* Put BL32 below BL2 in the Trusted SRAM.*/
|
/* Put BL32 below BL2 in the Trusted SRAM.*/
|
||||||
# define BL32_BASE ((ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)\
|
# define BL32_BASE ((ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)\
|
||||||
|
|
|
@ -150,12 +150,18 @@
|
||||||
#endif /* RESET_TO_BL31 */
|
#endif /* RESET_TO_BL31 */
|
||||||
|
|
||||||
#ifndef __aarch64__
|
#ifndef __aarch64__
|
||||||
|
#if RESET_TO_SP_MIN
|
||||||
|
/* Size of Trusted SRAM - the first 4KB of shared memory */
|
||||||
|
#define PLAT_ARM_MAX_BL32_SIZE (PLAT_ARM_TRUSTED_SRAM_SIZE - \
|
||||||
|
ARM_SHARED_RAM_SIZE)
|
||||||
|
#else
|
||||||
/*
|
/*
|
||||||
* Since BL32 NOBITS overlays BL2 and BL1-RW, PLAT_ARM_MAX_BL32_SIZE is
|
* Since BL32 NOBITS overlays BL2 and BL1-RW, PLAT_ARM_MAX_BL32_SIZE is
|
||||||
* calculated using the current SP_MIN PROGBITS debug size plus the sizes of
|
* calculated using the current SP_MIN PROGBITS debug size plus the sizes of
|
||||||
* BL2 and BL1-RW
|
* BL2 and BL1-RW
|
||||||
*/
|
*/
|
||||||
# define PLAT_ARM_MAX_BL32_SIZE UL(0x3B000)
|
# define PLAT_ARM_MAX_BL32_SIZE UL(0x3B000)
|
||||||
|
#endif /* RESET_TO_SP_MIN */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -154,8 +154,8 @@ ARM_CRYPTOCELL_INTEG := 0
|
||||||
$(eval $(call assert_boolean,ARM_CRYPTOCELL_INTEG))
|
$(eval $(call assert_boolean,ARM_CRYPTOCELL_INTEG))
|
||||||
$(eval $(call add_define,ARM_CRYPTOCELL_INTEG))
|
$(eval $(call add_define,ARM_CRYPTOCELL_INTEG))
|
||||||
|
|
||||||
# Enable PIE support for RESET_TO_BL31 case
|
# Enable PIE support for RESET_TO_BL31/RESET_TO_SP_MIN case
|
||||||
ifeq (${RESET_TO_BL31},1)
|
ifneq ($(filter 1,${RESET_TO_BL31} ${RESET_TO_SP_MIN}),)
|
||||||
ENABLE_PIE := 1
|
ENABLE_PIE := 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,9 @@ static entry_point_info_t bl33_image_ep_info;
|
||||||
* Check that BL32_BASE is above ARM_FW_CONFIG_LIMIT. The reserved page
|
* Check that BL32_BASE is above ARM_FW_CONFIG_LIMIT. The reserved page
|
||||||
* is required for SOC_FW_CONFIG/TOS_FW_CONFIG passed from BL2.
|
* is required for SOC_FW_CONFIG/TOS_FW_CONFIG passed from BL2.
|
||||||
*/
|
*/
|
||||||
|
#if !RESET_TO_SP_MIN
|
||||||
CASSERT(BL32_BASE >= ARM_FW_CONFIG_LIMIT, assert_bl32_base_overflows);
|
CASSERT(BL32_BASE >= ARM_FW_CONFIG_LIMIT, assert_bl32_base_overflows);
|
||||||
|
#endif
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Return a pointer to the 'entry_point_info' structure of the next image for the
|
* Return a pointer to the 'entry_point_info' structure of the next image for the
|
||||||
|
|
Loading…
Add table
Reference in a new issue