Another week, another set of v8M patches. This lot adds: * v8M and security extension changes in exception entry and exit * the Security Attribution Unit * SG and BLXNS instructions * secure function return * and a couple of fixes for bugs in already-in-master changes
Most of this is just plodding through fairly obvious implementation, but the handling of the SG instruction is a bit funky (see commit messages in those patches for detail). This is very nearly enough to get the mbed uvisor example running (on a hacked-up mps2 setup): I think the main missing piece for that is that it expects the banked systick device, which we haven't implemented yet. (There are also various missing things that I don't think the uvisor exercises.) thanks -- PMM Peter Maydell (20): nvic: Clear the vector arrays and prigroup on reset target/arm: Don't switch to target stack early in v7M exception return target/arm: Prepare for CONTROL.SPSEL being nonzero in Handler mode target/arm: Restore security state on exception return target/arm: Restore SPSEL to correct CONTROL register on exception return target/arm: Check for xPSR mismatch usage faults earlier for v8M target/arm: Warn about restoring to unaligned stack target/arm: Don't warn about exception return with PC low bit set for v8M target/arm: Add new-in-v8M SFSR and SFAR target/arm: Update excret sanity checks for v8M target/arm: Add support for restoring v8M additional state context target/arm: Add v8M support to exception entry code nvic: Implement Security Attribution Unit registers target/arm: Implement security attribute lookups for memory accesses target/arm: Fix calculation of secure mm_idx values target/arm: Factor out "get mmuidx for specified security state" target/arm: Implement SG instruction target/arm: Implement BLXNS target/arm: Implement secure function return nvic: Add missing code for writing SHCSR.HARDFAULTPENDED bit target/arm/cpu.h | 60 ++- target/arm/helper.h | 1 + target/arm/internals.h | 23 ++ hw/intc/armv7m_nvic.c | 158 +++++++- target/arm/cpu.c | 27 ++ target/arm/helper.c | 970 ++++++++++++++++++++++++++++++++++++++++++++----- target/arm/machine.c | 16 + target/arm/translate.c | 31 +- 8 files changed, 1181 insertions(+), 105 deletions(-) -- 2.7.4