summaryrefslogtreecommitdiffstats
path: root/runtime/thread.cc
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2015-03-13 11:33:37 -0700
committerMathieu Chartier <mathieuc@google.com>2015-03-13 16:38:25 -0700
commit12d625f87bcd6c4059a205bb39007a255f57f382 (patch)
treeb69f6f80f56977c176e0c441869d2f1de06ede70 /runtime/thread.cc
parentb871a15f1f662c8efe10d41199180bd00b6decd1 (diff)
downloadart-12d625f87bcd6c4059a205bb39007a255f57f382.tar.gz
art-12d625f87bcd6c4059a205bb39007a255f57f382.tar.bz2
art-12d625f87bcd6c4059a205bb39007a255f57f382.zip
Change method verifiers to be thread local roots
Bug: 10921004 Change-Id: I3a1425d76cd380587ba67ef6d5ec1227564e55bf
Diffstat (limited to 'runtime/thread.cc')
-rw-r--r--runtime/thread.cc14
1 files changed, 14 insertions, 0 deletions
diff --git a/runtime/thread.cc b/runtime/thread.cc
index 8e98d530a9..affb6cd747 100644
--- a/runtime/thread.cc
+++ b/runtime/thread.cc
@@ -70,6 +70,7 @@
#include "thread-inl.h"
#include "utils.h"
#include "verifier/dex_gc_map.h"
+#include "verifier/method_verifier.h"
#include "verify_object-inl.h"
#include "vmap_table.h"
#include "well_known_classes.h"
@@ -2296,6 +2297,9 @@ void Thread::VisitRoots(RootCallback* visitor, void* arg) {
mapper.VisitShadowFrame(shadow_frame);
}
}
+ if (tlsPtr_.method_verifier != nullptr) {
+ tlsPtr_.method_verifier->VisitRoots(visitor, arg, RootInfo(kRootNativeStack, thread_id));
+ }
// Visit roots on this thread's stack
Context* context = GetLongJumpContext();
RootCallbackVisitor visitor_to_callback(visitor, arg, thread_id);
@@ -2417,4 +2421,14 @@ void Thread::ClearDebugInvokeReq() {
tlsPtr_.debug_invoke_req = nullptr;
}
+void Thread::SetVerifier(verifier::MethodVerifier* verifier) {
+ CHECK(tlsPtr_.method_verifier == nullptr);
+ tlsPtr_.method_verifier = verifier;
+}
+
+void Thread::ClearVerifier(verifier::MethodVerifier* verifier) {
+ CHECK_EQ(tlsPtr_.method_verifier, verifier);
+ tlsPtr_.method_verifier = nullptr;
+}
+
} // namespace art