target/arm: Add armv7m_nvic_set_pending_derived()
commit5ede82b8ccb652382c106d53f656ed67997d76e8
authorPeter Maydell <peter.maydell@linaro.org>
Fri, 9 Feb 2018 10:40:27 +0000 (9 10:40 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Fri, 9 Feb 2018 10:40:27 +0000 (9 10:40 +0000)
tree5cb07376ff9a1fb8f4fde333a8b081cd7ecffd23
parent04bb7fe2bf55bdf66d5b7a5a719b40bbb4048178
target/arm: Add armv7m_nvic_set_pending_derived()

In order to support derived exceptions (exceptions generated in
the course of trying to take an exception), we need to be able
to handle prioritizing whether to take the original exception
or the derived exception.

We do this by introducing a new function
armv7m_nvic_set_pending_derived() which the exception-taking code in
helper.c will call when a derived exception occurs.  Derived
exceptions are dealt with mostly like normal pending exceptions, so
we share the implementation with the armv7m_nvic_set_pending()
function.

Note that the way we structure this is significantly different
from the v8M Arm ARM pseudocode: that does all the prioritization
logic in the DerivedLateArrival() function, whereas we choose to
let the existing "identify highest priority exception" logic
do the prioritization for us. The effect is the same, though.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 1517324542-6607-2-git-send-email-peter.maydell@linaro.org
hw/intc/armv7m_nvic.c
hw/intc/trace-events
target/arm/cpu.h