summaryrefslogtreecommitdiff
path: root/plat/arm
diff options
context:
space:
mode:
authorJeenu Viswambharan <jeenu.viswambharan@arm.com>2016-11-30 15:21:11 +0000
committerJeenu Viswambharan <jeenu.viswambharan@arm.com>2016-12-05 14:55:35 +0000
commita806dad58c4cf752238d7bbffbc9a1ce17f63cea (patch)
tree9981b72bc40a9169972103ca315549d8a35bb052 /plat/arm
parentc59428b1502f37c9b2f551613da1b491c4226d10 (diff)
Define and use no_ret macro where no return is expected
There are many instances in ARM Trusted Firmware where control is transferred to functions from which return isn't expected. Such jumps are made using 'bl' instruction to provide the callee with the location from which it was jumped to. Additionally, debuggers infer the caller by examining where 'lr' register points to. If a 'bl' of the nature described above falls at the end of an assembly function, 'lr' will be left pointing to a location outside of the function range. This misleads the debugger back trace. This patch defines a 'no_ret' macro to be used when jumping to functions from which return isn't expected. The macro ensures to use 'bl' instruction for the jump, and also, for debug builds, places a 'nop' instruction immediately thereafter (unless instructed otherwise) so as to leave 'lr' pointing within the function range. Change-Id: Ib34c69fc09197cfd57bc06e147cc8252910e01b0 Co-authored-by: Douglas Raillard <douglas.raillard@arm.com> Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
Diffstat (limited to 'plat/arm')
-rw-r--r--plat/arm/board/fvp/aarch64/fvp_helpers.S4
-rw-r--r--plat/arm/board/juno/aarch64/juno_helpers.S2
2 files changed, 3 insertions, 3 deletions
diff --git a/plat/arm/board/fvp/aarch64/fvp_helpers.S b/plat/arm/board/fvp/aarch64/fvp_helpers.S
index 6a7ad234..65087058 100644
--- a/plat/arm/board/fvp/aarch64/fvp_helpers.S
+++ b/plat/arm/board/fvp/aarch64/fvp_helpers.S
@@ -111,7 +111,7 @@ secondary_cold_boot_wait:
*/
dsb sy
wfi
- bl plat_panic_handler
+ no_ret plat_panic_handler
#else
mov_imm x0, PLAT_ARM_TRUSTED_MAILBOX_BASE
@@ -182,7 +182,7 @@ warm_reset:
* ---------------------------------------------------------------------
*/
_panic_handler:
- bl plat_panic_handler
+ no_ret plat_panic_handler
endfunc plat_get_my_entrypoint
/* -----------------------------------------------------
diff --git a/plat/arm/board/juno/aarch64/juno_helpers.S b/plat/arm/board/juno/aarch64/juno_helpers.S
index 9291fa4f..ac54ac9b 100644
--- a/plat/arm/board/juno/aarch64/juno_helpers.S
+++ b/plat/arm/board/juno/aarch64/juno_helpers.S
@@ -201,7 +201,7 @@ func plat_reset_handler
JUMP_TO_HANDLER_IF_JUNO_R(2)
/* Board revision is not supported */
- bl plat_panic_handler
+ no_ret plat_panic_handler
endfunc plat_reset_handler