aboutsummaryrefslogtreecommitdiff
path: root/bl31/aarch64
diff options
context:
space:
mode:
authorLouis Mayencourt <louis.mayencourt@arm.com>2019-03-22 16:33:23 +0000
committerLouis Mayencourt <louis.mayencourt@arm.com>2019-03-25 10:54:59 +0000
commit330ead806510ed36f440b3b3c93ef67cf12716e0 (patch)
tree45243f4d1a113301503dd0627678c1655e3fa13f /bl31/aarch64
parentcc0dcf428f047454d96461aa06327cfb528e7270 (diff)
downloadtrusted-firmware-a-330ead806510ed36f440b3b3c93ef67cf12716e0.tar.gz
PIE: Fix reloc at the beginning of bl31 entrypoint
The relocation fixup code must be called at the beginning of bl31 entrypoint to ensure that CPU specific reset handlers are fixed up for relocations. Change-Id: Icb04eacb2d4c26c26b08b768d871d2c82777babb Signed-off-by: Louis Mayencourt <louis.mayencourt@arm.com>
Diffstat (limited to 'bl31/aarch64')
-rw-r--r--bl31/aarch64/bl31_entrypoint.S25
1 files changed, 13 insertions, 12 deletions
diff --git a/bl31/aarch64/bl31_entrypoint.S b/bl31/aarch64/bl31_entrypoint.S
index 065edffc7d..f24458c1bb 100644
--- a/bl31/aarch64/bl31_entrypoint.S
+++ b/bl31/aarch64/bl31_entrypoint.S
@@ -23,7 +23,6 @@
*/
func bl31_entrypoint
-#if !RESET_TO_BL31
/* ---------------------------------------------------------------
* Stash the previous bootloader arguments x0 - x3 for later use.
* ---------------------------------------------------------------
@@ -33,6 +32,18 @@ func bl31_entrypoint
mov x22, x2
mov x23, x3
+ /* --------------------------------------------------------------------
+ * If PIE is enabled, fixup the Global descriptor Table and dynamic
+ * relocations
+ * --------------------------------------------------------------------
+ */
+#if ENABLE_PIE
+ mov_imm x0, BL31_BASE
+ mov_imm x1, BL31_LIMIT
+ bl fixup_gdt_reloc
+#endif /* ENABLE_PIE */
+
+#if !RESET_TO_BL31
/* ---------------------------------------------------------------------
* For !RESET_TO_BL31 systems, only the primary CPU ever reaches
* bl31_entrypoint() during the cold boot flow, so the cold/warm boot
@@ -50,6 +61,7 @@ func bl31_entrypoint
_init_c_runtime=1 \
_exception_vectors=runtime_exceptions
#else
+
/* ---------------------------------------------------------------------
* For RESET_TO_BL31 systems which have a programmable reset address,
* bl31_entrypoint() is executed only on the cold boot path so we can
@@ -77,17 +89,6 @@ func bl31_entrypoint
#endif /* RESET_TO_BL31 */
/* --------------------------------------------------------------------
- * If PIE is enabled, fixup the Global descriptor Table and dynamic
- * relocations
- * --------------------------------------------------------------------
- */
-#if ENABLE_PIE
- mov_imm x0, BL31_BASE
- mov_imm x1, BL31_LIMIT
- bl fixup_gdt_reloc
-#endif /* ENABLE_PIE */
-
- /* --------------------------------------------------------------------
* Perform BL31 setup
* --------------------------------------------------------------------
*/