target/arm: Implement secure function return
commitd02a8698d7ae2bfed3b11fe5b064cb0aa406863b
authorPeter Maydell <peter.maydell@linaro.org>
Mon, 9 Oct 2017 13:48:34 +0000 (9 14:48 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Thu, 12 Oct 2017 12:23:14 +0000 (12 13:23 +0100)
tree8dd870546ced48a474a5d81424da1a01e6e62146
parent3e3fa230e3b8ffe119f14ba57a6bc677a411be57
target/arm: Implement secure function return

Secure function return happens when a non-secure function has been
called using BLXNS and so has a particular magic LR value (either
0xfefffffe or 0xfeffffff). The function return via BX behaves
specially when the new PC value is this magic value, in the same
way that exception returns are handled.

Adjust our BX excret guards so that they recognize the function
return magic number as well, and perform the function-return
unstacking in do_v7m_exception_exit().

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Acked-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 1507556919-24992-5-git-send-email-peter.maydell@linaro.org
target/arm/helper.c
target/arm/internals.h
target/arm/translate.c