PIE: Use PC relative adrp/adr for symbol reference
authorSoby Mathew <soby.mathew@arm.com>
Fri, 12 Oct 2018 15:40:28 +0000 (16:40 +0100)
committerSoby Mathew <soby.mathew@arm.com>
Mon, 29 Oct 2018 09:54:31 +0000 (09:54 +0000)
commitf1722b693d363cc6a2b624d59f0442bf845baf62
tree2b8a412e48830f66641cecdb308a152db268a60f
parent3bd17c0fef46a7cd894974ac4c996801458f6d09
PIE: Use PC relative adrp/adr for symbol reference

This patch fixes up the AArch64 assembly code to use
adrp/adr instructions instead of ldr instruction for
reference to symbols. This allows these assembly
sequences to be Position Independant. Note that the
the reference to sizes have been replaced with
calculation of size at runtime. This is because size
is a constant value and does not depend on execution
address and using PC relative instructions for loading
them makes them relative to execution address. Also
we cannot use `ldr` instruction to load size as it
generates a dynamic relocation entry which must *not*
be fixed up and it is difficult for a dynamic loader
to differentiate which entries need to be skipped.

Change-Id: I8bf4ed5c58a9703629e5498a27624500ef40a836
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
bl2/aarch64/bl2_entrypoint.S
include/common/aarch64/asm_macros.S
include/common/aarch64/el3_common_macros.S
include/lib/pmf/pmf_asm_macros.S
lib/romlib/init.s
lib/xlat_tables_v2/aarch64/enable_mmu.S