mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-30 07:39:24 +00:00
BL2_AT_EL3: add PIE support
This implementation simply mimics that of BL31. I did not implement the ENABLE_PIE support for BL2_IN_XIP_MEM=1 case. It would make the linker script a bit uglier. Change-Id: If3215abd99f2758dfb232e44b50320d04eba808b Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
This commit is contained in:
parent
511046eaa2
commit
69af7fcf99
4 changed files with 51 additions and 2 deletions
6
Makefile
6
Makefile
|
@ -464,6 +464,12 @@ else
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(ENABLE_PIE),1)
|
ifeq ($(ENABLE_PIE),1)
|
||||||
|
ifeq ($(BL2_AT_EL3),1)
|
||||||
|
ifneq ($(BL2_IN_XIP_MEM),1)
|
||||||
|
BL2_CFLAGS += -fpie
|
||||||
|
BL2_LDFLAGS += $(PIE_LDFLAGS)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
BL31_CFLAGS += -fpie
|
BL31_CFLAGS += -fpie
|
||||||
BL31_LDFLAGS += $(PIE_LDFLAGS)
|
BL31_LDFLAGS += $(PIE_LDFLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <platform_def.h>
|
||||||
|
|
||||||
#include <arch.h>
|
#include <arch.h>
|
||||||
#include <asm_macros.S>
|
#include <asm_macros.S>
|
||||||
#include <common/bl_common.h>
|
#include <common/bl_common.h>
|
||||||
|
@ -13,6 +15,12 @@
|
||||||
.globl bl2_el3_run_image
|
.globl bl2_el3_run_image
|
||||||
.globl bl2_run_next_image
|
.globl bl2_run_next_image
|
||||||
|
|
||||||
|
#if BL2_IN_XIP_MEM
|
||||||
|
#define FIXUP_SIZE 0
|
||||||
|
#else
|
||||||
|
#define FIXUP_SIZE ((BL2_LIMIT) - (BL2_BASE))
|
||||||
|
#endif
|
||||||
|
|
||||||
func bl2_entrypoint
|
func bl2_entrypoint
|
||||||
/* Save arguments x0-x3 from previous Boot loader */
|
/* Save arguments x0-x3 from previous Boot loader */
|
||||||
mov x20, x0
|
mov x20, x0
|
||||||
|
@ -27,7 +35,7 @@ func bl2_entrypoint
|
||||||
_init_memory=1 \
|
_init_memory=1 \
|
||||||
_init_c_runtime=1 \
|
_init_c_runtime=1 \
|
||||||
_exception_vectors=bl2_el3_exceptions \
|
_exception_vectors=bl2_el3_exceptions \
|
||||||
_pie_fixup_size=0
|
_pie_fixup_size=FIXUP_SIZE
|
||||||
|
|
||||||
/* ---------------------------------------------
|
/* ---------------------------------------------
|
||||||
* Restore parameters of boot rom
|
* Restore parameters of boot rom
|
||||||
|
|
|
@ -69,6 +69,16 @@ SECTIONS
|
||||||
KEEP(*(cpu_ops))
|
KEEP(*(cpu_ops))
|
||||||
__CPU_OPS_END__ = .;
|
__CPU_OPS_END__ = .;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keep the .got section in the RO section as it is patched
|
||||||
|
* prior to enabling the MMU and having the .got in RO is better for
|
||||||
|
* security. GOT is a table of addresses so ensure 8-byte alignment.
|
||||||
|
*/
|
||||||
|
. = ALIGN(8);
|
||||||
|
__GOT_START__ = .;
|
||||||
|
*(.got)
|
||||||
|
__GOT_END__ = .;
|
||||||
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
. = ALIGN(PAGE_SIZE);
|
||||||
__RODATA_END__ = .;
|
__RODATA_END__ = .;
|
||||||
} >ROM
|
} >ROM
|
||||||
|
@ -100,6 +110,16 @@ SECTIONS
|
||||||
KEEP(*(.img_parser_lib_descs))
|
KEEP(*(.img_parser_lib_descs))
|
||||||
__PARSER_LIB_DESCS_END__ = .;
|
__PARSER_LIB_DESCS_END__ = .;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keep the .got section in the RO section as it is patched
|
||||||
|
* prior to enabling the MMU and having the .got in RO is better for
|
||||||
|
* security. GOT is a table of addresses so ensure 8-byte alignment.
|
||||||
|
*/
|
||||||
|
. = ALIGN(8);
|
||||||
|
__GOT_START__ = .;
|
||||||
|
*(.got)
|
||||||
|
__GOT_END__ = .;
|
||||||
|
|
||||||
*(.vectors)
|
*(.vectors)
|
||||||
__RO_END_UNALIGNED__ = .;
|
__RO_END_UNALIGNED__ = .;
|
||||||
/*
|
/*
|
||||||
|
@ -139,6 +159,17 @@ SECTIONS
|
||||||
__DATA_RAM_END__ = .;
|
__DATA_RAM_END__ = .;
|
||||||
} >RAM AT>ROM
|
} >RAM AT>ROM
|
||||||
|
|
||||||
|
/*
|
||||||
|
* .rela.dyn needs to come after .data for the read-elf utility to parse
|
||||||
|
* this section correctly. Ensure 8-byte alignment so that the fields of
|
||||||
|
* RELA data structure are aligned.
|
||||||
|
*/
|
||||||
|
. = ALIGN(8);
|
||||||
|
__RELA_START__ = .;
|
||||||
|
.rela.dyn . : {
|
||||||
|
} >RAM
|
||||||
|
__RELA_END__ = .;
|
||||||
|
|
||||||
stacks (NOLOAD) : {
|
stacks (NOLOAD) : {
|
||||||
__STACKS_START__ = .;
|
__STACKS_START__ = .;
|
||||||
*(tzfw_normal_stacks)
|
*(tzfw_normal_stacks)
|
||||||
|
@ -195,6 +226,10 @@ SECTIONS
|
||||||
__RW_END__ = .;
|
__RW_END__ = .;
|
||||||
__BL2_END__ = .;
|
__BL2_END__ = .;
|
||||||
|
|
||||||
|
/DISCARD/ : {
|
||||||
|
*(.dynsym .dynstr .hash .gnu.hash)
|
||||||
|
}
|
||||||
|
|
||||||
#if BL2_IN_XIP_MEM
|
#if BL2_IN_XIP_MEM
|
||||||
__BL2_RAM_START__ = ADDR(.data);
|
__BL2_RAM_START__ = ADDR(.data);
|
||||||
__BL2_RAM_END__ = .;
|
__BL2_RAM_END__ = .;
|
||||||
|
|
|
@ -213,7 +213,7 @@ Common build options
|
||||||
|
|
||||||
- ``ENABLE_PIE``: Boolean option to enable Position Independent Executable(PIE)
|
- ``ENABLE_PIE``: Boolean option to enable Position Independent Executable(PIE)
|
||||||
support within generic code in TF-A. This option is currently only supported
|
support within generic code in TF-A. This option is currently only supported
|
||||||
in BL31. Default is 0.
|
in BL2_AT_EL3 and BL31. Default is 0.
|
||||||
|
|
||||||
- ``ENABLE_PMF``: Boolean option to enable support for optional Performance
|
- ``ENABLE_PMF``: Boolean option to enable support for optional Performance
|
||||||
Measurement Framework(PMF). Default is 0.
|
Measurement Framework(PMF). Default is 0.
|
||||||
|
|
Loading…
Add table
Reference in a new issue