qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 00/13] target/arm: Implement v8M stack limit checks


From: Peter Maydell
Subject: [Qemu-devel] [PATCH 00/13] target/arm: Implement v8M stack limit checks
Date: Tue, 2 Oct 2018 17:35:43 +0100

This patchset implements the v8M stack limit checking
feature, which is the last missing piece of the v8M
architectural support.

Note that the stack limit triggers when the SP value
is changed to something below the limit, not when
a load or store is performed below the limit. It's
also done only for certain instructions that update
SP, not for every possible way to change SP. For
loads and stores which do writeback to SP there are
also some rules about what parts of the load/store
are permitted to happen if the check triggers -- we
keep things simple by taking the approach of doing
the check first so that no accesses are done.

We take a straightforward approach to implementing
the checks: generating a call to a helper function
which does the comparison and might raise an exception.
This obviously imposes some overhead for the common
case where the limit isn't being breached, but
generating code for a compare-and-conditionally-call
seemed too tricky to insert into the existing code...

thanks
-- PMM

Peter Maydell (13):
  target/arm: Define new TBFLAG for v8M stack checking
  target/arm: Define new EXCP type for v8M stack overflows
  target/arm: Move v7m_using_psp() to internals.h
  target/arm: Add v8M stack checks on ADD/SUB/MOV of SP
  target/arm: Add some comments in Thumb decode
  target/arm: Add v8M stack checks on exception entry
  target/arm: Add v8M stack limit checks on NS function calls
  target/arm: Add v8M stack checks for LDRD/STRD (imm)
  target/arm: Add v8M stack checks for Thumb2 LDM/STM
  target/arm: Add v8M stack checks for T32 load/store single
  target/arm: Add v8M stack checks for Thumb push/pop
  target/arm: Add v8M stack checks for VLDM/VSTM
  target/arm: Add v8M stack checks for MSR to SP_NS

 target/arm/cpu.h       |   9 ++
 target/arm/helper.h    |   2 +
 target/arm/internals.h |  38 ++++++++
 target/arm/translate.h |   1 +
 target/arm/helper.c    |  99 ++++++++++++++++-----
 target/arm/op_helper.c |  23 ++++-
 target/arm/translate.c | 198 +++++++++++++++++++++++++++++++++++++----
 7 files changed, 330 insertions(+), 40 deletions(-)

-- 
2.19.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]