diff options
author | Mathieu Chartier <mathieuc@google.com> | 2015-03-13 11:33:37 -0700 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2015-03-13 16:38:25 -0700 |
commit | 12d625f87bcd6c4059a205bb39007a255f57f382 (patch) | |
tree | b69f6f80f56977c176e0c441869d2f1de06ede70 /runtime/thread.cc | |
parent | b871a15f1f662c8efe10d41199180bd00b6decd1 (diff) | |
download | art-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.cc | 14 |
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 |