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>
1 parent c59428b commit a806dad58c4cf752238d7bbffbc9a1ce17f63cea
@Jeenu Viswambharan Jeenu Viswambharan authored on 30 Nov 2016
Showing 19 changed files
View
bl1/aarch64/bl1_exceptions.S
View
bl2/aarch32/bl2_entrypoint.S
View
bl2/aarch64/bl2_entrypoint.S
View
bl2u/aarch64/bl2u_entrypoint.S
View
bl31/aarch64/crash_reporting.S
View
bl31/aarch64/runtime_exceptions.S
View
bl32/tsp/aarch64/tsp_entrypoint.S
View
bl32/tsp/aarch64/tsp_exceptions.S
View
common/aarch32/debug.S
View
common/aarch64/debug.S
View
common/aarch64/early_exceptions.S
View
include/common/aarch32/asm_macros.S
View
include/common/aarch32/el3_common_macros.S
View
include/common/aarch64/asm_macros.S
View
lib/psci/aarch32/psci_helpers.S
View
lib/psci/aarch64/psci_helpers.S
View
plat/arm/board/fvp/aarch64/fvp_helpers.S
View
plat/arm/board/juno/aarch64/juno_helpers.S
View
plat/xilinx/zynqmp/aarch64/zynqmp_helpers.S