Split shadow stack from SIRT.
(cherry picked from commit 4455f868a9a6553827ccbe1d25e29cf528a74422)
Change-Id: I4f467cf5be812c600dc5fdb56a9236fe144bd380
diff --git a/src/thread.h b/src/thread.h
index 8a0c1af..6f91b31 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -50,6 +50,7 @@
class Monitor;
class Object;
class Runtime;
+class ShadowFrame;
class StackIndirectReferenceTable;
class StackTraceElement;
class StaticStorageBase;
@@ -272,6 +273,8 @@
void SirtVisitRoots(Heap::RootVisitor* visitor, void* arg);
+ void ShadowFrameVisitRoots(Heap::RootVisitor* visitor, void* arg);
+
// Convert a jobject into a Object*
Object* DecodeJObject(jobject obj);
@@ -405,6 +408,9 @@
return ThreadOffset(OFFSETOF_MEMBER(Thread, top_of_managed_stack_pc_));
}
+ void PushShadowFrame(ShadowFrame* frame);
+ ShadowFrame* PopShadowFrame();
+
void PushSirt(StackIndirectReferenceTable* sirt);
StackIndirectReferenceTable* PopSirt();
@@ -539,6 +545,10 @@
// Top of linked list of stack indirect reference tables or NULL for none
StackIndirectReferenceTable* top_sirt_;
+ // Top of linked list of shadow stack or NULL for none
+ // Some backend may require shadow frame to ease the GC work.
+ ShadowFrame* top_shadow_frame_;
+
// Every thread may have an associated JNI environment
JNIEnvExt* jni_env_;