diff options
author | Dave Allison <dallison@google.com> | 2014-03-27 15:10:22 -0700 |
---|---|---|
committer | Dave Allison <dallison@google.com> | 2014-03-31 18:04:08 -0700 |
commit | f943914730db8ad2ff03d49a2cacd31885d08fd7 (patch) | |
tree | 885a781e5f8bd852e2c1615108ae7b17576a6567 /runtime/stack.h | |
parent | cfd5acf281b0c509f86b13d73c6a8dfa3ea9922c (diff) | |
download | art-f943914730db8ad2ff03d49a2cacd31885d08fd7.tar.gz art-f943914730db8ad2ff03d49a2cacd31885d08fd7.tar.bz2 art-f943914730db8ad2ff03d49a2cacd31885d08fd7.zip |
Implement implicit stack overflow checks
This also fixes some failing run tests due to missing
null pointer markers.
The implementation of the implicit stack overflow checks introduces
the ability to have a gap in the stack that is skipped during
stack walk backs. This gap is protected against read/write and
is used to trigger a SIGSEGV at function entry if the stack
will overflow.
Change-Id: I0c3e214c8b87dc250cf886472c6d327b5d58653e
Diffstat (limited to 'runtime/stack.h')
-rw-r--r-- | runtime/stack.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/runtime/stack.h b/runtime/stack.h index 4ee5de1d89..ab903d6404 100644 --- a/runtime/stack.h +++ b/runtime/stack.h @@ -100,6 +100,14 @@ enum VRegBaseRegNum : int { kVRegNonSpecialTempBaseReg = -3, }; +// Special object used to mark the gap in the stack placed when a stack +// overflow fault occurs during implicit stack checking. This is not +// a real object - it is used simply as a valid address to which a +// mirror::ArtMethod* can be compared during a stack walk. It is inserted +// into the stack during the stack overflow signal handling to mark the gap +// in which the memory is protected against read and write. +extern void* stack_overflow_gap_marker; + // A reference from the shadow stack to a MirrorType object within the Java heap. template<class MirrorType> class MANAGED StackReference : public mirror::ObjectReference<false, MirrorType> { |