Home | History | Annotate | Download | only in runtime
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef ART_RUNTIME_THREAD_H_
     18 #define ART_RUNTIME_THREAD_H_
     19 
     20 #include <atomic>
     21 #include <bitset>
     22 #include <deque>
     23 #include <iosfwd>
     24 #include <list>
     25 #include <memory>
     26 #include <string>
     27 
     28 #include "base/atomic.h"
     29 #include "base/enums.h"
     30 #include "base/locks.h"
     31 #include "base/macros.h"
     32 #include "base/safe_map.h"
     33 #include "base/value_object.h"
     34 #include "entrypoints/jni/jni_entrypoints.h"
     35 #include "entrypoints/quick/quick_entrypoints.h"
     36 #include "handle_scope.h"
     37 #include "interpreter/interpreter_cache.h"
     38 #include "jvalue.h"
     39 #include "managed_stack.h"
     40 #include "offsets.h"
     41 #include "read_barrier_config.h"
     42 #include "runtime_globals.h"
     43 #include "runtime_stats.h"
     44 #include "suspend_reason.h"
     45 #include "thread_state.h"
     46 
     47 class BacktraceMap;
     48 
     49 namespace art {
     50 
     51 namespace gc {
     52 namespace accounting {
     53 template<class T> class AtomicStack;
     54 }  // namespace accounting
     55 namespace collector {
     56 class SemiSpace;
     57 }  // namespace collector
     58 }  // namespace gc
     59 
     60 namespace instrumentation {
     61 struct InstrumentationStackFrame;
     62 }  // namespace instrumentation
     63 
     64 namespace mirror {
     65 class Array;
     66 class Class;
     67 class ClassLoader;
     68 class Object;
     69 template<class T> class ObjectArray;
     70 template<class T> class PrimitiveArray;
     71 typedef PrimitiveArray<int32_t> IntArray;
     72 class StackTraceElement;
     73 class String;
     74 class Throwable;
     75 }  // namespace mirror
     76 
     77 namespace verifier {
     78 class MethodVerifier;
     79 class VerifierDeps;
     80 }  // namespace verifier
     81 
     82 class ArtMethod;
     83 class BaseMutex;
     84 class ClassLinker;
     85 class Closure;
     86 class Context;
     87 struct DebugInvokeReq;
     88 class DeoptimizationContextRecord;
     89 class DexFile;
     90 class FrameIdToShadowFrame;
     91 class JavaVMExt;
     92 class JNIEnvExt;
     93 class Monitor;
     94 class RootVisitor;
     95 class ScopedObjectAccessAlreadyRunnable;
     96 class ShadowFrame;
     97 class SingleStepControl;
     98 class StackedShadowFrameRecord;
     99 class Thread;
    100 class ThreadList;
    101 enum VisitRootFlags : uint8_t;
    102 
    103 // A piece of data that can be held in the CustomTls. The destructor will be called during thread
    104 // shutdown. The thread the destructor is called on is not necessarily the same thread it was stored
    105 // on.
    106 class TLSData {
    107  public:
    108   virtual ~TLSData() {}
    109 };
    110 
    111 // Thread priorities. These must match the Thread.MIN_PRIORITY,
    112 // Thread.NORM_PRIORITY, and Thread.MAX_PRIORITY constants.
    113 enum ThreadPriority {
    114   kMinThreadPriority = 1,
    115   kNormThreadPriority = 5,
    116   kMaxThreadPriority = 10,
    117 };
    118 
    119 enum ThreadFlag {
    120   kSuspendRequest   = 1,  // If set implies that suspend_count_ > 0 and the Thread should enter the
    121                           // safepoint handler.
    122   kCheckpointRequest = 2,  // Request that the thread do some checkpoint work and then continue.
    123   kEmptyCheckpointRequest = 4,  // Request that the thread do empty checkpoint and then continue.
    124   kActiveSuspendBarrier = 8,  // Register that at least 1 suspend barrier needs to be passed.
    125 };
    126 
    127 enum class StackedShadowFrameType {
    128   kShadowFrameUnderConstruction,
    129   kDeoptimizationShadowFrame,
    130 };
    131 
    132 // The type of method that triggers deoptimization. It contains info on whether
    133 // the deoptimized method should advance dex_pc.
    134 enum class DeoptimizationMethodType {
    135   kKeepDexPc,  // dex pc is required to be kept upon deoptimization.
    136   kDefault     // dex pc may or may not advance depending on other conditions.
    137 };
    138 
    139 // This should match RosAlloc::kNumThreadLocalSizeBrackets.
    140 static constexpr size_t kNumRosAllocThreadLocalSizeBracketsInThread = 16;
    141 
    142 // Thread's stack layout for implicit stack overflow checks:
    143 //
    144 //   +---------------------+  <- highest address of stack memory
    145 //   |                     |
    146 //   .                     .  <- SP
    147 //   |                     |
    148 //   |                     |
    149 //   +---------------------+  <- stack_end
    150 //   |                     |
    151 //   |  Gap                |
    152 //   |                     |
    153 //   +---------------------+  <- stack_begin
    154 //   |                     |
    155 //   | Protected region    |
    156 //   |                     |
    157 //   +---------------------+  <- lowest address of stack memory
    158 //
    159 // The stack always grows down in memory.  At the lowest address is a region of memory
    160 // that is set mprotect(PROT_NONE).  Any attempt to read/write to this region will
    161 // result in a segmentation fault signal.  At any point, the thread's SP will be somewhere
    162 // between the stack_end and the highest address in stack memory.  An implicit stack
    163 // overflow check is a read of memory at a certain offset below the current SP (4K typically).
    164 // If the thread's SP is below the stack_end address this will be a read into the protected
    165 // region.  If the SP is above the stack_end address, the thread is guaranteed to have
    166 // at least 4K of space.  Because stack overflow checks are only performed in generated code,
    167 // if the thread makes a call out to a native function (through JNI), that native function
    168 // might only have 4K of memory (if the SP is adjacent to stack_end).
    169 
    170 class Thread {
    171  public:
    172   static const size_t kStackOverflowImplicitCheckSize;
    173   static constexpr bool kVerifyStack = kIsDebugBuild;
    174 
    175   // Creates a new native thread corresponding to the given managed peer.
    176   // Used to implement Thread.start.
    177   static void CreateNativeThread(JNIEnv* env, jobject peer, size_t stack_size, bool daemon);
    178 
    179   // Attaches the calling native thread to the runtime, returning the new native peer.
    180   // Used to implement JNI AttachCurrentThread and AttachCurrentThreadAsDaemon calls.
    181   static Thread* Attach(const char* thread_name, bool as_daemon, jobject thread_group,
    182                         bool create_peer);
    183   // Attaches the calling native thread to the runtime, returning the new native peer.
    184   static Thread* Attach(const char* thread_name, bool as_daemon, jobject thread_peer);
    185 
    186   // Reset internal state of child thread after fork.
    187   void InitAfterFork();
    188 
    189   // Get the currently executing thread, frequently referred to as 'self'. This call has reasonably
    190   // high cost and so we favor passing self around when possible.
    191   // TODO: mark as PURE so the compiler may coalesce and remove?
    192   static Thread* Current();
    193 
    194   // On a runnable thread, check for pending thread suspension request and handle if pending.
    195   void AllowThreadSuspension() REQUIRES_SHARED(Locks::mutator_lock_);
    196 
    197   // Process pending thread suspension request and handle if pending.
    198   void CheckSuspend() REQUIRES_SHARED(Locks::mutator_lock_);
    199 
    200   // Process a pending empty checkpoint if pending.
    201   void CheckEmptyCheckpointFromWeakRefAccess(BaseMutex* cond_var_mutex);
    202   void CheckEmptyCheckpointFromMutex();
    203 
    204   static Thread* FromManagedThread(const ScopedObjectAccessAlreadyRunnable& ts,
    205                                    ObjPtr<mirror::Object> thread_peer)
    206       REQUIRES(Locks::thread_list_lock_, !Locks::thread_suspend_count_lock_)
    207       REQUIRES_SHARED(Locks::mutator_lock_);
    208   static Thread* FromManagedThread(const ScopedObjectAccessAlreadyRunnable& ts, jobject thread)
    209       REQUIRES(Locks::thread_list_lock_, !Locks::thread_suspend_count_lock_)
    210       REQUIRES_SHARED(Locks::mutator_lock_);
    211 
    212   // Translates 172 to pAllocArrayFromCode and so on.
    213   template<PointerSize size_of_pointers>
    214   static void DumpThreadOffset(std::ostream& os, uint32_t offset);
    215 
    216   // Dumps a one-line summary of thread state (used for operator<<).
    217   void ShortDump(std::ostream& os) const;
    218 
    219   // Dumps the detailed thread state and the thread stack (used for SIGQUIT).
    220   void Dump(std::ostream& os,
    221             bool dump_native_stack = true,
    222             BacktraceMap* backtrace_map = nullptr,
    223             bool force_dump_stack = false) const
    224       REQUIRES_SHARED(Locks::mutator_lock_);
    225 
    226   void DumpJavaStack(std::ostream& os,
    227                      bool check_suspended = true,
    228                      bool dump_locks = true) const
    229       REQUIRES_SHARED(Locks::mutator_lock_);
    230 
    231   // Dumps the SIGQUIT per-thread header. 'thread' can be null for a non-attached thread, in which
    232   // case we use 'tid' to identify the thread, and we'll include as much information as we can.
    233   static void DumpState(std::ostream& os, const Thread* thread, pid_t tid)
    234       REQUIRES_SHARED(Locks::mutator_lock_);
    235 
    236   ThreadState GetState() const {
    237     DCHECK_GE(tls32_.state_and_flags.as_struct.state, kTerminated);
    238     DCHECK_LE(tls32_.state_and_flags.as_struct.state, kSuspended);
    239     return static_cast<ThreadState>(tls32_.state_and_flags.as_struct.state);
    240   }
    241 
    242   ThreadState SetState(ThreadState new_state);
    243 
    244   int GetSuspendCount() const REQUIRES(Locks::thread_suspend_count_lock_) {
    245     return tls32_.suspend_count;
    246   }
    247 
    248   int GetUserCodeSuspendCount() const REQUIRES(Locks::thread_suspend_count_lock_,
    249                                                Locks::user_code_suspension_lock_) {
    250     return tls32_.user_code_suspend_count;
    251   }
    252 
    253   int GetDebugSuspendCount() const REQUIRES(Locks::thread_suspend_count_lock_) {
    254     return tls32_.debug_suspend_count;
    255   }
    256 
    257   bool IsSuspended() const {
    258     union StateAndFlags state_and_flags;
    259     state_and_flags.as_int = tls32_.state_and_flags.as_int;
    260     return state_and_flags.as_struct.state != kRunnable &&
    261         (state_and_flags.as_struct.flags & kSuspendRequest) != 0;
    262   }
    263 
    264   // If delta > 0 and (this != self or suspend_barrier is not null), this function may temporarily
    265   // release thread_suspend_count_lock_ internally.
    266   ALWAYS_INLINE
    267   bool ModifySuspendCount(Thread* self,
    268                           int delta,
    269                           AtomicInteger* suspend_barrier,
    270                           SuspendReason reason)
    271       WARN_UNUSED
    272       REQUIRES(Locks::thread_suspend_count_lock_);
    273 
    274   // Requests a checkpoint closure to run on another thread. The closure will be run when the thread
    275   // gets suspended. This will return true if the closure was added and will (eventually) be
    276   // executed. It returns false otherwise.
    277   //
    278   // Since multiple closures can be queued and some closures can delay other threads from running no
    279   // closure should attempt to suspend another thread while running.
    280   // TODO We should add some debug option that verifies this.
    281   bool RequestCheckpoint(Closure* function)
    282       REQUIRES(Locks::thread_suspend_count_lock_);
    283 
    284   // RequestSynchronousCheckpoint releases the thread_list_lock_ as a part of its execution. This is
    285   // due to the fact that Thread::Current() needs to go to sleep to allow the targeted thread to
    286   // execute the checkpoint for us if it is Runnable. The suspend_state is the state that the thread
    287   // will go into while it is awaiting the checkpoint to be run.
    288   // NB Passing ThreadState::kRunnable may cause the current thread to wait in a condition variable
    289   // while holding the mutator_lock_.  Callers should ensure that this will not cause any problems
    290   // for the closure or the rest of the system.
    291   // NB Since multiple closures can be queued and some closures can delay other threads from running
    292   // no closure should attempt to suspend another thread while running.
    293   bool RequestSynchronousCheckpoint(Closure* function,
    294                                     ThreadState suspend_state = ThreadState::kWaiting)
    295       REQUIRES_SHARED(Locks::mutator_lock_)
    296       RELEASE(Locks::thread_list_lock_)
    297       REQUIRES(!Locks::thread_suspend_count_lock_);
    298 
    299   bool RequestEmptyCheckpoint()
    300       REQUIRES(Locks::thread_suspend_count_lock_);
    301 
    302   void SetFlipFunction(Closure* function);
    303   Closure* GetFlipFunction();
    304 
    305   gc::accounting::AtomicStack<mirror::Object>* GetThreadLocalMarkStack() {
    306     CHECK(kUseReadBarrier);
    307     return tlsPtr_.thread_local_mark_stack;
    308   }
    309   void SetThreadLocalMarkStack(gc::accounting::AtomicStack<mirror::Object>* stack) {
    310     CHECK(kUseReadBarrier);
    311     tlsPtr_.thread_local_mark_stack = stack;
    312   }
    313 
    314   // Called when thread detected that the thread_suspend_count_ was non-zero. Gives up share of
    315   // mutator_lock_ and waits until it is resumed and thread_suspend_count_ is zero.
    316   void FullSuspendCheck()
    317       REQUIRES(!Locks::thread_suspend_count_lock_)
    318       REQUIRES_SHARED(Locks::mutator_lock_);
    319 
    320   // Transition from non-runnable to runnable state acquiring share on mutator_lock_.
    321   ALWAYS_INLINE ThreadState TransitionFromSuspendedToRunnable()
    322       REQUIRES(!Locks::thread_suspend_count_lock_)
    323       SHARED_LOCK_FUNCTION(Locks::mutator_lock_);
    324 
    325   // Transition from runnable into a state where mutator privileges are denied. Releases share of
    326   // mutator lock.
    327   ALWAYS_INLINE void TransitionFromRunnableToSuspended(ThreadState new_state)
    328       REQUIRES(!Locks::thread_suspend_count_lock_, !Roles::uninterruptible_)
    329       UNLOCK_FUNCTION(Locks::mutator_lock_);
    330 
    331   // Once called thread suspension will cause an assertion failure.
    332   const char* StartAssertNoThreadSuspension(const char* cause) ACQUIRE(Roles::uninterruptible_) {
    333     Roles::uninterruptible_.Acquire();  // No-op.
    334     if (kIsDebugBuild) {
    335       CHECK(cause != nullptr);
    336       const char* previous_cause = tlsPtr_.last_no_thread_suspension_cause;
    337       tls32_.no_thread_suspension++;
    338       tlsPtr_.last_no_thread_suspension_cause = cause;
    339       return previous_cause;
    340     } else {
    341       return nullptr;
    342     }
    343   }
    344 
    345   // End region where no thread suspension is expected.
    346   void EndAssertNoThreadSuspension(const char* old_cause) RELEASE(Roles::uninterruptible_) {
    347     if (kIsDebugBuild) {
    348       CHECK(old_cause != nullptr || tls32_.no_thread_suspension == 1);
    349       CHECK_GT(tls32_.no_thread_suspension, 0U);
    350       tls32_.no_thread_suspension--;
    351       tlsPtr_.last_no_thread_suspension_cause = old_cause;
    352     }
    353     Roles::uninterruptible_.Release();  // No-op.
    354   }
    355 
    356   void AssertThreadSuspensionIsAllowable(bool check_locks = true) const;
    357 
    358   // Return true if thread suspension is allowable.
    359   bool IsThreadSuspensionAllowable() const;
    360 
    361   bool IsDaemon() const {
    362     return tls32_.daemon;
    363   }
    364 
    365   size_t NumberOfHeldMutexes() const;
    366 
    367   bool HoldsLock(ObjPtr<mirror::Object> object) const REQUIRES_SHARED(Locks::mutator_lock_);
    368 
    369   /*
    370    * Changes the priority of this thread to match that of the java.lang.Thread object.
    371    *
    372    * We map a priority value from 1-10 to Linux "nice" values, where lower
    373    * numbers indicate higher priority.
    374    */
    375   void SetNativePriority(int newPriority);
    376 
    377   /*
    378    * Returns the thread priority for the current thread by querying the system.
    379    * This is useful when attaching a thread through JNI.
    380    *
    381    * Returns a value from 1 to 10 (compatible with java.lang.Thread values).
    382    */
    383   static int GetNativePriority();
    384 
    385   // Guaranteed to be non-zero.
    386   uint32_t GetThreadId() const {
    387     return tls32_.thin_lock_thread_id;
    388   }
    389 
    390   pid_t GetTid() const {
    391     return tls32_.tid;
    392   }
    393 
    394   // Returns the java.lang.Thread's name, or null if this Thread* doesn't have a peer.
    395   ObjPtr<mirror::String> GetThreadName() const REQUIRES_SHARED(Locks::mutator_lock_);
    396 
    397   // Sets 'name' to the java.lang.Thread's name. This requires no transition to managed code,
    398   // allocation, or locking.
    399   void GetThreadName(std::string& name) const;
    400 
    401   // Sets the thread's name.
    402   void SetThreadName(const char* name) REQUIRES_SHARED(Locks::mutator_lock_);
    403 
    404   // Returns the thread-specific CPU-time clock in microseconds or -1 if unavailable.
    405   uint64_t GetCpuMicroTime() const;
    406 
    407   mirror::Object* GetPeer() const REQUIRES_SHARED(Locks::mutator_lock_) {
    408     DCHECK(Thread::Current() == this) << "Use GetPeerFromOtherThread instead";
    409     CHECK(tlsPtr_.jpeer == nullptr);
    410     return tlsPtr_.opeer;
    411   }
    412   // GetPeer is not safe if called on another thread in the middle of the CC thread flip and
    413   // the thread's stack may have not been flipped yet and peer may be a from-space (stale) ref.
    414   // This function will explicitly mark/forward it.
    415   mirror::Object* GetPeerFromOtherThread() const REQUIRES_SHARED(Locks::mutator_lock_);
    416 
    417   bool HasPeer() const {
    418     return tlsPtr_.jpeer != nullptr || tlsPtr_.opeer != nullptr;
    419   }
    420 
    421   RuntimeStats* GetStats() {
    422     return &tls64_.stats;
    423   }
    424 
    425   bool IsStillStarting() const;
    426 
    427   bool IsExceptionPending() const {
    428     return tlsPtr_.exception != nullptr;
    429   }
    430 
    431   bool IsAsyncExceptionPending() const {
    432     return tlsPtr_.async_exception != nullptr;
    433   }
    434 
    435   mirror::Throwable* GetException() const REQUIRES_SHARED(Locks::mutator_lock_) {
    436     return tlsPtr_.exception;
    437   }
    438 
    439   void AssertPendingException() const;
    440   void AssertPendingOOMException() const REQUIRES_SHARED(Locks::mutator_lock_);
    441   void AssertNoPendingException() const;
    442   void AssertNoPendingExceptionForNewException(const char* msg) const;
    443 
    444   void SetException(ObjPtr<mirror::Throwable> new_exception) REQUIRES_SHARED(Locks::mutator_lock_);
    445 
    446   // Set an exception that is asynchronously thrown from a different thread. This will be checked
    447   // periodically and might overwrite the current 'Exception'. This can only be called from a
    448   // checkpoint.
    449   //
    450   // The caller should also make sure that the thread has been deoptimized so that the exception
    451   // could be detected on back-edges.
    452   void SetAsyncException(ObjPtr<mirror::Throwable> new_exception)
    453       REQUIRES_SHARED(Locks::mutator_lock_);
    454 
    455   void ClearException() REQUIRES_SHARED(Locks::mutator_lock_) {
    456     tlsPtr_.exception = nullptr;
    457   }
    458 
    459   // Move the current async-exception to the main exception. This should be called when the current
    460   // thread is ready to deal with any async exceptions. Returns true if there is an async exception
    461   // that needs to be dealt with, false otherwise.
    462   bool ObserveAsyncException() REQUIRES_SHARED(Locks::mutator_lock_);
    463 
    464   // Find catch block and perform long jump to appropriate exception handle
    465   NO_RETURN void QuickDeliverException() REQUIRES_SHARED(Locks::mutator_lock_);
    466 
    467   Context* GetLongJumpContext();
    468   void ReleaseLongJumpContext(Context* context) {
    469     if (tlsPtr_.long_jump_context != nullptr) {
    470       ReleaseLongJumpContextInternal();
    471     }
    472     tlsPtr_.long_jump_context = context;
    473   }
    474 
    475   // Get the current method and dex pc. If there are errors in retrieving the dex pc, this will
    476   // abort the runtime iff abort_on_error is true.
    477   ArtMethod* GetCurrentMethod(uint32_t* dex_pc,
    478                               bool check_suspended = true,
    479                               bool abort_on_error = true) const
    480       REQUIRES_SHARED(Locks::mutator_lock_);
    481 
    482   // Returns whether the given exception was thrown by the current Java method being executed
    483   // (Note that this includes native Java methods).
    484   bool IsExceptionThrownByCurrentMethod(ObjPtr<mirror::Throwable> exception) const
    485       REQUIRES_SHARED(Locks::mutator_lock_);
    486 
    487   void SetTopOfStack(ArtMethod** top_method) {
    488     tlsPtr_.managed_stack.SetTopQuickFrame(top_method);
    489   }
    490 
    491   void SetTopOfStackTagged(ArtMethod** top_method) {
    492     tlsPtr_.managed_stack.SetTopQuickFrameTagged(top_method);
    493   }
    494 
    495   void SetTopOfShadowStack(ShadowFrame* top) {
    496     tlsPtr_.managed_stack.SetTopShadowFrame(top);
    497   }
    498 
    499   bool HasManagedStack() const {
    500     return tlsPtr_.managed_stack.HasTopQuickFrame() || tlsPtr_.managed_stack.HasTopShadowFrame();
    501   }
    502 
    503   // If 'msg' is null, no detail message is set.
    504   void ThrowNewException(const char* exception_class_descriptor, const char* msg)
    505       REQUIRES_SHARED(Locks::mutator_lock_) REQUIRES(!Roles::uninterruptible_);
    506 
    507   // If 'msg' is null, no detail message is set. An exception must be pending, and will be
    508   // used as the new exception's cause.
    509   void ThrowNewWrappedException(const char* exception_class_descriptor, const char* msg)
    510       REQUIRES_SHARED(Locks::mutator_lock_) REQUIRES(!Roles::uninterruptible_);
    511 
    512   void ThrowNewExceptionF(const char* exception_class_descriptor, const char* fmt, ...)
    513       __attribute__((format(printf, 3, 4)))
    514       REQUIRES_SHARED(Locks::mutator_lock_) REQUIRES(!Roles::uninterruptible_);
    515 
    516   void ThrowNewExceptionV(const char* exception_class_descriptor, const char* fmt, va_list ap)
    517       REQUIRES_SHARED(Locks::mutator_lock_) REQUIRES(!Roles::uninterruptible_);
    518 
    519   // OutOfMemoryError is special, because we need to pre-allocate an instance.
    520   // Only the GC should call this.
    521   void ThrowOutOfMemoryError(const char* msg) REQUIRES_SHARED(Locks::mutator_lock_)
    522       REQUIRES(!Roles::uninterruptible_);
    523 
    524   static void Startup();
    525   static void FinishStartup();
    526   static void Shutdown();
    527 
    528   // Notify this thread's thread-group that this thread has started.
    529   // Note: the given thread-group is used as a fast path and verified in debug build. If the value
    530   //       is null, the thread's thread-group is loaded from the peer.
    531   void NotifyThreadGroup(ScopedObjectAccessAlreadyRunnable& soa, jobject thread_group = nullptr)
    532       REQUIRES_SHARED(Locks::mutator_lock_);
    533 
    534   // JNI methods
    535   JNIEnvExt* GetJniEnv() const {
    536     return tlsPtr_.jni_env;
    537   }
    538 
    539   // Convert a jobject into a Object*
    540   ObjPtr<mirror::Object> DecodeJObject(jobject obj) const REQUIRES_SHARED(Locks::mutator_lock_);
    541   // Checks if the weak global ref has been cleared by the GC without decoding it.
    542   bool IsJWeakCleared(jweak obj) const REQUIRES_SHARED(Locks::mutator_lock_);
    543 
    544   mirror::Object* GetMonitorEnterObject() const REQUIRES_SHARED(Locks::mutator_lock_) {
    545     return tlsPtr_.monitor_enter_object;
    546   }
    547 
    548   void SetMonitorEnterObject(mirror::Object* obj) REQUIRES_SHARED(Locks::mutator_lock_) {
    549     tlsPtr_.monitor_enter_object = obj;
    550   }
    551 
    552   // Implements java.lang.Thread.interrupted.
    553   bool Interrupted();
    554   // Implements java.lang.Thread.isInterrupted.
    555   bool IsInterrupted();
    556   void Interrupt(Thread* self) REQUIRES(!wait_mutex_);
    557   void SetInterrupted(bool i) {
    558     tls32_.interrupted.store(i, std::memory_order_seq_cst);
    559   }
    560   void Notify() REQUIRES(!wait_mutex_);
    561 
    562   ALWAYS_INLINE void PoisonObjectPointers() {
    563     ++poison_object_cookie_;
    564   }
    565 
    566   ALWAYS_INLINE static void PoisonObjectPointersIfDebug();
    567 
    568   ALWAYS_INLINE uintptr_t GetPoisonObjectCookie() const {
    569     return poison_object_cookie_;
    570   }
    571 
    572   // Parking for 0ns of relative time means an untimed park, negative (though
    573   // should be handled in java code) returns immediately
    574   void Park(bool is_absolute, int64_t time) REQUIRES_SHARED(Locks::mutator_lock_);
    575   void Unpark();
    576 
    577  private:
    578   void NotifyLocked(Thread* self) REQUIRES(wait_mutex_);
    579 
    580  public:
    581   Mutex* GetWaitMutex() const LOCK_RETURNED(wait_mutex_) {
    582     return wait_mutex_;
    583   }
    584 
    585   ConditionVariable* GetWaitConditionVariable() const REQUIRES(wait_mutex_) {
    586     return wait_cond_;
    587   }
    588 
    589   Monitor* GetWaitMonitor() const REQUIRES(wait_mutex_) {
    590     return wait_monitor_;
    591   }
    592 
    593   void SetWaitMonitor(Monitor* mon) REQUIRES(wait_mutex_) {
    594     wait_monitor_ = mon;
    595   }
    596 
    597   // Waiter link-list support.
    598   Thread* GetWaitNext() const {
    599     return tlsPtr_.wait_next;
    600   }
    601 
    602   void SetWaitNext(Thread* next) {
    603     tlsPtr_.wait_next = next;
    604   }
    605 
    606   jobject GetClassLoaderOverride() {
    607     return tlsPtr_.class_loader_override;
    608   }
    609 
    610   void SetClassLoaderOverride(jobject class_loader_override);
    611 
    612   // Create the internal representation of a stack trace, that is more time
    613   // and space efficient to compute than the StackTraceElement[].
    614   template<bool kTransactionActive>
    615   jobject CreateInternalStackTrace(const ScopedObjectAccessAlreadyRunnable& soa) const
    616       REQUIRES_SHARED(Locks::mutator_lock_);
    617 
    618   // Convert an internal stack trace representation (returned by CreateInternalStackTrace) to a
    619   // StackTraceElement[]. If output_array is null, a new array is created, otherwise as many
    620   // frames as will fit are written into the given array. If stack_depth is non-null, it's updated
    621   // with the number of valid frames in the returned array.
    622   static jobjectArray InternalStackTraceToStackTraceElementArray(
    623       const ScopedObjectAccessAlreadyRunnable& soa, jobject internal,
    624       jobjectArray output_array = nullptr, int* stack_depth = nullptr)
    625       REQUIRES_SHARED(Locks::mutator_lock_);
    626 
    627   jobjectArray CreateAnnotatedStackTrace(const ScopedObjectAccessAlreadyRunnable& soa) const
    628       REQUIRES_SHARED(Locks::mutator_lock_);
    629 
    630   bool HasDebuggerShadowFrames() const {
    631     return tlsPtr_.frame_id_to_shadow_frame != nullptr;
    632   }
    633 
    634   void VisitRoots(RootVisitor* visitor, VisitRootFlags flags)
    635       REQUIRES_SHARED(Locks::mutator_lock_);
    636 
    637   void VerifyStack() REQUIRES_SHARED(Locks::mutator_lock_) {
    638     if (kVerifyStack) {
    639       VerifyStackImpl();
    640     }
    641   }
    642 
    643   //
    644   // Offsets of various members of native Thread class, used by compiled code.
    645   //
    646 
    647   template<PointerSize pointer_size>
    648   static constexpr ThreadOffset<pointer_size> ThinLockIdOffset() {
    649     return ThreadOffset<pointer_size>(
    650         OFFSETOF_MEMBER(Thread, tls32_) +
    651         OFFSETOF_MEMBER(tls_32bit_sized_values, thin_lock_thread_id));
    652   }
    653 
    654   template<PointerSize pointer_size>
    655   static constexpr ThreadOffset<pointer_size> InterruptedOffset() {
    656     return ThreadOffset<pointer_size>(
    657         OFFSETOF_MEMBER(Thread, tls32_) +
    658         OFFSETOF_MEMBER(tls_32bit_sized_values, interrupted));
    659   }
    660 
    661   template<PointerSize pointer_size>
    662   static constexpr ThreadOffset<pointer_size> ThreadFlagsOffset() {
    663     return ThreadOffset<pointer_size>(
    664         OFFSETOF_MEMBER(Thread, tls32_) +
    665         OFFSETOF_MEMBER(tls_32bit_sized_values, state_and_flags));
    666   }
    667 
    668   template<PointerSize pointer_size>
    669   static constexpr ThreadOffset<pointer_size> UseMterpOffset() {
    670     return ThreadOffset<pointer_size>(
    671         OFFSETOF_MEMBER(Thread, tls32_) +
    672         OFFSETOF_MEMBER(tls_32bit_sized_values, use_mterp));
    673   }
    674 
    675   template<PointerSize pointer_size>
    676   static constexpr ThreadOffset<pointer_size> IsGcMarkingOffset() {
    677     return ThreadOffset<pointer_size>(
    678         OFFSETOF_MEMBER(Thread, tls32_) +
    679         OFFSETOF_MEMBER(tls_32bit_sized_values, is_gc_marking));
    680   }
    681 
    682   static constexpr size_t IsGcMarkingSize() {
    683     return sizeof(tls32_.is_gc_marking);
    684   }
    685 
    686   // Deoptimize the Java stack.
    687   void DeoptimizeWithDeoptimizationException(JValue* result) REQUIRES_SHARED(Locks::mutator_lock_);
    688 
    689  private:
    690   template<PointerSize pointer_size>
    691   static constexpr ThreadOffset<pointer_size> ThreadOffsetFromTlsPtr(size_t tls_ptr_offset) {
    692     size_t base = OFFSETOF_MEMBER(Thread, tlsPtr_);
    693     size_t scale = (pointer_size > kRuntimePointerSize) ?
    694       static_cast<size_t>(pointer_size) / static_cast<size_t>(kRuntimePointerSize) : 1;
    695     size_t shrink = (kRuntimePointerSize > pointer_size) ?
    696       static_cast<size_t>(kRuntimePointerSize) / static_cast<size_t>(pointer_size) : 1;
    697     return ThreadOffset<pointer_size>(base + ((tls_ptr_offset * scale) / shrink));
    698   }
    699 
    700  public:
    701   static uint32_t QuickEntryPointOffsetWithSize(size_t quick_entrypoint_offset,
    702                                                 PointerSize pointer_size) {
    703     if (pointer_size == PointerSize::k32) {
    704       return QuickEntryPointOffset<PointerSize::k32>(quick_entrypoint_offset).
    705           Uint32Value();
    706     } else {
    707       return QuickEntryPointOffset<PointerSize::k64>(quick_entrypoint_offset).
    708           Uint32Value();
    709     }
    710   }
    711 
    712   template<PointerSize pointer_size>
    713   static ThreadOffset<pointer_size> QuickEntryPointOffset(size_t quick_entrypoint_offset) {
    714     return ThreadOffsetFromTlsPtr<pointer_size>(
    715         OFFSETOF_MEMBER(tls_ptr_sized_values, quick_entrypoints) + quick_entrypoint_offset);
    716   }
    717 
    718   template<PointerSize pointer_size>
    719   static ThreadOffset<pointer_size> JniEntryPointOffset(size_t jni_entrypoint_offset) {
    720     return ThreadOffsetFromTlsPtr<pointer_size>(
    721         OFFSETOF_MEMBER(tls_ptr_sized_values, jni_entrypoints) + jni_entrypoint_offset);
    722   }
    723 
    724   // Return the entry point offset integer value for ReadBarrierMarkRegX, where X is `reg`.
    725   template <PointerSize pointer_size>
    726   static int32_t ReadBarrierMarkEntryPointsOffset(size_t reg) {
    727     // The entry point list defines 30 ReadBarrierMarkRegX entry points.
    728     DCHECK_LT(reg, 30u);
    729     // The ReadBarrierMarkRegX entry points are ordered by increasing
    730     // register number in Thread::tls_Ptr_.quick_entrypoints.
    731     return QUICK_ENTRYPOINT_OFFSET(pointer_size, pReadBarrierMarkReg00).Int32Value()
    732         + static_cast<size_t>(pointer_size) * reg;
    733   }
    734 
    735   template<PointerSize pointer_size>
    736   static constexpr ThreadOffset<pointer_size> SelfOffset() {
    737     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values, self));
    738   }
    739 
    740   template<PointerSize pointer_size>
    741   static constexpr ThreadOffset<pointer_size> MterpCurrentIBaseOffset() {
    742     return ThreadOffsetFromTlsPtr<pointer_size>(
    743         OFFSETOF_MEMBER(tls_ptr_sized_values, mterp_current_ibase));
    744   }
    745 
    746   template<PointerSize pointer_size>
    747   static constexpr ThreadOffset<pointer_size> ExceptionOffset() {
    748     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values, exception));
    749   }
    750 
    751   template<PointerSize pointer_size>
    752   static constexpr ThreadOffset<pointer_size> PeerOffset() {
    753     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values, opeer));
    754   }
    755 
    756 
    757   template<PointerSize pointer_size>
    758   static constexpr ThreadOffset<pointer_size> CardTableOffset() {
    759     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values, card_table));
    760   }
    761 
    762   template<PointerSize pointer_size>
    763   static constexpr ThreadOffset<pointer_size> ThreadSuspendTriggerOffset() {
    764     return ThreadOffsetFromTlsPtr<pointer_size>(
    765         OFFSETOF_MEMBER(tls_ptr_sized_values, suspend_trigger));
    766   }
    767 
    768   template<PointerSize pointer_size>
    769   static constexpr ThreadOffset<pointer_size> ThreadLocalPosOffset() {
    770     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values,
    771                                                                 thread_local_pos));
    772   }
    773 
    774   template<PointerSize pointer_size>
    775   static constexpr ThreadOffset<pointer_size> ThreadLocalEndOffset() {
    776     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values,
    777                                                                 thread_local_end));
    778   }
    779 
    780   template<PointerSize pointer_size>
    781   static constexpr ThreadOffset<pointer_size> ThreadLocalObjectsOffset() {
    782     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values,
    783                                                                 thread_local_objects));
    784   }
    785 
    786   template<PointerSize pointer_size>
    787   static constexpr ThreadOffset<pointer_size> RosAllocRunsOffset() {
    788     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values,
    789                                                                 rosalloc_runs));
    790   }
    791 
    792   template<PointerSize pointer_size>
    793   static constexpr ThreadOffset<pointer_size> ThreadLocalAllocStackTopOffset() {
    794     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values,
    795                                                                 thread_local_alloc_stack_top));
    796   }
    797 
    798   template<PointerSize pointer_size>
    799   static constexpr ThreadOffset<pointer_size> ThreadLocalAllocStackEndOffset() {
    800     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values,
    801                                                                 thread_local_alloc_stack_end));
    802   }
    803 
    804   // Size of stack less any space reserved for stack overflow
    805   size_t GetStackSize() const {
    806     return tlsPtr_.stack_size - (tlsPtr_.stack_end - tlsPtr_.stack_begin);
    807   }
    808 
    809   ALWAYS_INLINE uint8_t* GetStackEndForInterpreter(bool implicit_overflow_check) const;
    810 
    811   uint8_t* GetStackEnd() const {
    812     return tlsPtr_.stack_end;
    813   }
    814 
    815   // Set the stack end to that to be used during a stack overflow
    816   void SetStackEndForStackOverflow() REQUIRES_SHARED(Locks::mutator_lock_);
    817 
    818   // Set the stack end to that to be used during regular execution
    819   ALWAYS_INLINE void ResetDefaultStackEnd();
    820 
    821   bool IsHandlingStackOverflow() const {
    822     return tlsPtr_.stack_end == tlsPtr_.stack_begin;
    823   }
    824 
    825   template<PointerSize pointer_size>
    826   static constexpr ThreadOffset<pointer_size> StackEndOffset() {
    827     return ThreadOffsetFromTlsPtr<pointer_size>(
    828         OFFSETOF_MEMBER(tls_ptr_sized_values, stack_end));
    829   }
    830 
    831   template<PointerSize pointer_size>
    832   static constexpr ThreadOffset<pointer_size> JniEnvOffset() {
    833     return ThreadOffsetFromTlsPtr<pointer_size>(
    834         OFFSETOF_MEMBER(tls_ptr_sized_values, jni_env));
    835   }
    836 
    837   template<PointerSize pointer_size>
    838   static constexpr ThreadOffset<pointer_size> TopOfManagedStackOffset() {
    839     return ThreadOffsetFromTlsPtr<pointer_size>(
    840         OFFSETOF_MEMBER(tls_ptr_sized_values, managed_stack) +
    841         ManagedStack::TaggedTopQuickFrameOffset());
    842   }
    843 
    844   const ManagedStack* GetManagedStack() const {
    845     return &tlsPtr_.managed_stack;
    846   }
    847 
    848   // Linked list recording fragments of managed stack.
    849   void PushManagedStackFragment(ManagedStack* fragment) {
    850     tlsPtr_.managed_stack.PushManagedStackFragment(fragment);
    851   }
    852   void PopManagedStackFragment(const ManagedStack& fragment) {
    853     tlsPtr_.managed_stack.PopManagedStackFragment(fragment);
    854   }
    855 
    856   ALWAYS_INLINE ShadowFrame* PushShadowFrame(ShadowFrame* new_top_frame);
    857   ALWAYS_INLINE ShadowFrame* PopShadowFrame();
    858 
    859   template<PointerSize pointer_size>
    860   static constexpr ThreadOffset<pointer_size> TopShadowFrameOffset() {
    861     return ThreadOffsetFromTlsPtr<pointer_size>(
    862         OFFSETOF_MEMBER(tls_ptr_sized_values, managed_stack) +
    863         ManagedStack::TopShadowFrameOffset());
    864   }
    865 
    866   // Is the given obj in this thread's stack indirect reference table?
    867   bool HandleScopeContains(jobject obj) const;
    868 
    869   void HandleScopeVisitRoots(RootVisitor* visitor, pid_t thread_id)
    870       REQUIRES_SHARED(Locks::mutator_lock_);
    871 
    872   BaseHandleScope* GetTopHandleScope() {
    873     return tlsPtr_.top_handle_scope;
    874   }
    875 
    876   void PushHandleScope(BaseHandleScope* handle_scope) {
    877     DCHECK_EQ(handle_scope->GetLink(), tlsPtr_.top_handle_scope);
    878     tlsPtr_.top_handle_scope = handle_scope;
    879   }
    880 
    881   BaseHandleScope* PopHandleScope() {
    882     BaseHandleScope* handle_scope = tlsPtr_.top_handle_scope;
    883     DCHECK(handle_scope != nullptr);
    884     tlsPtr_.top_handle_scope = tlsPtr_.top_handle_scope->GetLink();
    885     return handle_scope;
    886   }
    887 
    888   template<PointerSize pointer_size>
    889   static constexpr ThreadOffset<pointer_size> TopHandleScopeOffset() {
    890     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values,
    891                                                                 top_handle_scope));
    892   }
    893 
    894   DebugInvokeReq* GetInvokeReq() const {
    895     return tlsPtr_.debug_invoke_req;
    896   }
    897 
    898   SingleStepControl* GetSingleStepControl() const {
    899     return tlsPtr_.single_step_control;
    900   }
    901 
    902   // Indicates whether this thread is ready to invoke a method for debugging. This
    903   // is only true if the thread has been suspended by a debug event.
    904   bool IsReadyForDebugInvoke() const {
    905     return tls32_.ready_for_debug_invoke;
    906   }
    907 
    908   void SetReadyForDebugInvoke(bool ready) {
    909     tls32_.ready_for_debug_invoke = ready;
    910   }
    911 
    912   bool IsDebugMethodEntry() const {
    913     return tls32_.debug_method_entry_;
    914   }
    915 
    916   void SetDebugMethodEntry() {
    917     tls32_.debug_method_entry_ = true;
    918   }
    919 
    920   void ClearDebugMethodEntry() {
    921     tls32_.debug_method_entry_ = false;
    922   }
    923 
    924   bool GetIsGcMarking() const {
    925     CHECK(kUseReadBarrier);
    926     return tls32_.is_gc_marking;
    927   }
    928 
    929   void SetIsGcMarkingAndUpdateEntrypoints(bool is_marking);
    930 
    931   bool GetWeakRefAccessEnabled() const {
    932     CHECK(kUseReadBarrier);
    933     return tls32_.weak_ref_access_enabled;
    934   }
    935 
    936   void SetWeakRefAccessEnabled(bool enabled) {
    937     CHECK(kUseReadBarrier);
    938     tls32_.weak_ref_access_enabled = enabled;
    939   }
    940 
    941   uint32_t GetDisableThreadFlipCount() const {
    942     CHECK(kUseReadBarrier);
    943     return tls32_.disable_thread_flip_count;
    944   }
    945 
    946   void IncrementDisableThreadFlipCount() {
    947     CHECK(kUseReadBarrier);
    948     ++tls32_.disable_thread_flip_count;
    949   }
    950 
    951   void DecrementDisableThreadFlipCount() {
    952     CHECK(kUseReadBarrier);
    953     DCHECK_GT(tls32_.disable_thread_flip_count, 0U);
    954     --tls32_.disable_thread_flip_count;
    955   }
    956 
    957   // Returns true if the thread is a runtime thread (eg from a ThreadPool).
    958   bool IsRuntimeThread() const {
    959     return is_runtime_thread_;
    960   }
    961 
    962   void SetIsRuntimeThread(bool is_runtime_thread) {
    963     is_runtime_thread_ = is_runtime_thread;
    964   }
    965 
    966   // Returns true if the thread is allowed to load java classes.
    967   bool CanLoadClasses() const;
    968 
    969   // Activates single step control for debugging. The thread takes the
    970   // ownership of the given SingleStepControl*. It is deleted by a call
    971   // to DeactivateSingleStepControl or upon thread destruction.
    972   void ActivateSingleStepControl(SingleStepControl* ssc);
    973 
    974   // Deactivates single step control for debugging.
    975   void DeactivateSingleStepControl();
    976 
    977   // Sets debug invoke request for debugging. When the thread is resumed,
    978   // it executes the method described by this request then sends the reply
    979   // before suspending itself. The thread takes the ownership of the given
    980   // DebugInvokeReq*. It is deleted by a call to ClearDebugInvokeReq.
    981   void SetDebugInvokeReq(DebugInvokeReq* req);
    982 
    983   // Clears debug invoke request for debugging. When the thread completes
    984   // method invocation, it deletes its debug invoke request and suspends
    985   // itself.
    986   void ClearDebugInvokeReq();
    987 
    988   // Returns the fake exception used to activate deoptimization.
    989   static mirror::Throwable* GetDeoptimizationException() {
    990     // Note that the mirror::Throwable must be aligned to kObjectAlignment or else it cannot be
    991     // represented by ObjPtr.
    992     return reinterpret_cast<mirror::Throwable*>(0x100);
    993   }
    994 
    995   // Currently deoptimization invokes verifier which can trigger class loading
    996   // and execute Java code, so there might be nested deoptimizations happening.
    997   // We need to save the ongoing deoptimization shadow frames and return
    998   // values on stacks.
    999   // 'from_code' denotes whether the deoptimization was explicitly made from
   1000   // compiled code.
   1001   // 'method_type' contains info on whether deoptimization should advance
   1002   // dex_pc.
   1003   void PushDeoptimizationContext(const JValue& return_value,
   1004                                  bool is_reference,
   1005                                  ObjPtr<mirror::Throwable> exception,
   1006                                  bool from_code,
   1007                                  DeoptimizationMethodType method_type)
   1008       REQUIRES_SHARED(Locks::mutator_lock_);
   1009   void PopDeoptimizationContext(JValue* result,
   1010                                 ObjPtr<mirror::Throwable>* exception,
   1011                                 bool* from_code,
   1012                                 DeoptimizationMethodType* method_type)
   1013       REQUIRES_SHARED(Locks::mutator_lock_);
   1014   void AssertHasDeoptimizationContext()
   1015       REQUIRES_SHARED(Locks::mutator_lock_);
   1016   void PushStackedShadowFrame(ShadowFrame* sf, StackedShadowFrameType type);
   1017   ShadowFrame* PopStackedShadowFrame(StackedShadowFrameType type, bool must_be_present = true);
   1018 
   1019   // For debugger, find the shadow frame that corresponds to a frame id.
   1020   // Or return null if there is none.
   1021   ShadowFrame* FindDebuggerShadowFrame(size_t frame_id)
   1022       REQUIRES_SHARED(Locks::mutator_lock_);
   1023   // For debugger, find the bool array that keeps track of the updated vreg set
   1024   // for a frame id.
   1025   bool* GetUpdatedVRegFlags(size_t frame_id) REQUIRES_SHARED(Locks::mutator_lock_);
   1026   // For debugger, find the shadow frame that corresponds to a frame id. If
   1027   // one doesn't exist yet, create one and track it in frame_id_to_shadow_frame.
   1028   ShadowFrame* FindOrCreateDebuggerShadowFrame(size_t frame_id,
   1029                                                uint32_t num_vregs,
   1030                                                ArtMethod* method,
   1031                                                uint32_t dex_pc)
   1032       REQUIRES_SHARED(Locks::mutator_lock_);
   1033 
   1034   // Delete the entry that maps from frame_id to shadow_frame.
   1035   void RemoveDebuggerShadowFrameMapping(size_t frame_id)
   1036       REQUIRES_SHARED(Locks::mutator_lock_);
   1037 
   1038   std::deque<instrumentation::InstrumentationStackFrame>* GetInstrumentationStack() {
   1039     return tlsPtr_.instrumentation_stack;
   1040   }
   1041 
   1042   std::vector<ArtMethod*>* GetStackTraceSample() const {
   1043     DCHECK(!IsAotCompiler());
   1044     return tlsPtr_.deps_or_stack_trace_sample.stack_trace_sample;
   1045   }
   1046 
   1047   void SetStackTraceSample(std::vector<ArtMethod*>* sample) {
   1048     DCHECK(!IsAotCompiler());
   1049     tlsPtr_.deps_or_stack_trace_sample.stack_trace_sample = sample;
   1050   }
   1051 
   1052   verifier::VerifierDeps* GetVerifierDeps() const {
   1053     DCHECK(IsAotCompiler());
   1054     return tlsPtr_.deps_or_stack_trace_sample.verifier_deps;
   1055   }
   1056 
   1057   // It is the responsability of the caller to make sure the verifier_deps
   1058   // entry in the thread is cleared before destruction of the actual VerifierDeps
   1059   // object, or the thread.
   1060   void SetVerifierDeps(verifier::VerifierDeps* verifier_deps) {
   1061     DCHECK(IsAotCompiler());
   1062     DCHECK(verifier_deps == nullptr || tlsPtr_.deps_or_stack_trace_sample.verifier_deps == nullptr);
   1063     tlsPtr_.deps_or_stack_trace_sample.verifier_deps = verifier_deps;
   1064   }
   1065 
   1066   uint64_t GetTraceClockBase() const {
   1067     return tls64_.trace_clock_base;
   1068   }
   1069 
   1070   void SetTraceClockBase(uint64_t clock_base) {
   1071     tls64_.trace_clock_base = clock_base;
   1072   }
   1073 
   1074   BaseMutex* GetHeldMutex(LockLevel level) const {
   1075     return tlsPtr_.held_mutexes[level];
   1076   }
   1077 
   1078   void SetHeldMutex(LockLevel level, BaseMutex* mutex) {
   1079     tlsPtr_.held_mutexes[level] = mutex;
   1080   }
   1081 
   1082   void ClearSuspendBarrier(AtomicInteger* target)
   1083       REQUIRES(Locks::thread_suspend_count_lock_);
   1084 
   1085   bool ReadFlag(ThreadFlag flag) const {
   1086     return (tls32_.state_and_flags.as_struct.flags & flag) != 0;
   1087   }
   1088 
   1089   bool TestAllFlags() const {
   1090     return (tls32_.state_and_flags.as_struct.flags != 0);
   1091   }
   1092 
   1093   void AtomicSetFlag(ThreadFlag flag) {
   1094     tls32_.state_and_flags.as_atomic_int.fetch_or(flag, std::memory_order_seq_cst);
   1095   }
   1096 
   1097   void AtomicClearFlag(ThreadFlag flag) {
   1098     tls32_.state_and_flags.as_atomic_int.fetch_and(-1 ^ flag, std::memory_order_seq_cst);
   1099   }
   1100 
   1101   bool UseMterp() const {
   1102     return tls32_.use_mterp.load();
   1103   }
   1104 
   1105   void ResetQuickAllocEntryPointsForThread(bool is_marking);
   1106 
   1107   // Returns the remaining space in the TLAB.
   1108   size_t TlabSize() const {
   1109     return tlsPtr_.thread_local_end - tlsPtr_.thread_local_pos;
   1110   }
   1111 
   1112   // Returns the remaining space in the TLAB if we were to expand it to maximum capacity.
   1113   size_t TlabRemainingCapacity() const {
   1114     return tlsPtr_.thread_local_limit - tlsPtr_.thread_local_pos;
   1115   }
   1116 
   1117   // Expand the TLAB by a fixed number of bytes. There must be enough capacity to do so.
   1118   void ExpandTlab(size_t bytes) {
   1119     tlsPtr_.thread_local_end += bytes;
   1120     DCHECK_LE(tlsPtr_.thread_local_end, tlsPtr_.thread_local_limit);
   1121   }
   1122 
   1123   // Doesn't check that there is room.
   1124   mirror::Object* AllocTlab(size_t bytes);
   1125   void SetTlab(uint8_t* start, uint8_t* end, uint8_t* limit);
   1126   bool HasTlab() const;
   1127   uint8_t* GetTlabStart() {
   1128     return tlsPtr_.thread_local_start;
   1129   }
   1130   uint8_t* GetTlabPos() {
   1131     return tlsPtr_.thread_local_pos;
   1132   }
   1133 
   1134   // Remove the suspend trigger for this thread by making the suspend_trigger_ TLS value
   1135   // equal to a valid pointer.
   1136   // TODO: does this need to atomic?  I don't think so.
   1137   void RemoveSuspendTrigger() {
   1138     tlsPtr_.suspend_trigger = reinterpret_cast<uintptr_t*>(&tlsPtr_.suspend_trigger);
   1139   }
   1140 
   1141   // Trigger a suspend check by making the suspend_trigger_ TLS value an invalid pointer.
   1142   // The next time a suspend check is done, it will load from the value at this address
   1143   // and trigger a SIGSEGV.
   1144   void TriggerSuspend() {
   1145     tlsPtr_.suspend_trigger = nullptr;
   1146   }
   1147 
   1148 
   1149   // Push an object onto the allocation stack.
   1150   bool PushOnThreadLocalAllocationStack(mirror::Object* obj)
   1151       REQUIRES_SHARED(Locks::mutator_lock_);
   1152 
   1153   // Set the thread local allocation pointers to the given pointers.
   1154   void SetThreadLocalAllocationStack(StackReference<mirror::Object>* start,
   1155                                      StackReference<mirror::Object>* end);
   1156 
   1157   // Resets the thread local allocation pointers.
   1158   void RevokeThreadLocalAllocationStack();
   1159 
   1160   size_t GetThreadLocalBytesAllocated() const {
   1161     return tlsPtr_.thread_local_end - tlsPtr_.thread_local_start;
   1162   }
   1163 
   1164   size_t GetThreadLocalObjectsAllocated() const {
   1165     return tlsPtr_.thread_local_objects;
   1166   }
   1167 
   1168   void* GetRosAllocRun(size_t index) const {
   1169     return tlsPtr_.rosalloc_runs[index];
   1170   }
   1171 
   1172   void SetRosAllocRun(size_t index, void* run) {
   1173     tlsPtr_.rosalloc_runs[index] = run;
   1174   }
   1175 
   1176   bool ProtectStack(bool fatal_on_error = true);
   1177   bool UnprotectStack();
   1178 
   1179   void SetMterpCurrentIBase(void* ibase) {
   1180     tlsPtr_.mterp_current_ibase = ibase;
   1181   }
   1182 
   1183   const void* GetMterpCurrentIBase() const {
   1184     return tlsPtr_.mterp_current_ibase;
   1185   }
   1186 
   1187   bool HandlingSignal() const {
   1188     return tls32_.handling_signal_;
   1189   }
   1190 
   1191   void SetHandlingSignal(bool handling_signal) {
   1192     tls32_.handling_signal_ = handling_signal;
   1193   }
   1194 
   1195   bool IsTransitioningToRunnable() const {
   1196     return tls32_.is_transitioning_to_runnable;
   1197   }
   1198 
   1199   void SetIsTransitioningToRunnable(bool value) {
   1200     tls32_.is_transitioning_to_runnable = value;
   1201   }
   1202 
   1203   uint32_t DecrementForceInterpreterCount() REQUIRES(Locks::thread_list_lock_) {
   1204     return --tls32_.force_interpreter_count;
   1205   }
   1206 
   1207   uint32_t IncrementForceInterpreterCount() REQUIRES(Locks::thread_list_lock_) {
   1208     return ++tls32_.force_interpreter_count;
   1209   }
   1210 
   1211   void SetForceInterpreterCount(uint32_t value) REQUIRES(Locks::thread_list_lock_) {
   1212     tls32_.force_interpreter_count = value;
   1213   }
   1214 
   1215   uint32_t ForceInterpreterCount() const {
   1216     return tls32_.force_interpreter_count;
   1217   }
   1218 
   1219   bool IsForceInterpreter() const {
   1220     return tls32_.force_interpreter_count != 0;
   1221   }
   1222 
   1223   void PushVerifier(verifier::MethodVerifier* verifier);
   1224   void PopVerifier(verifier::MethodVerifier* verifier);
   1225 
   1226   void InitStringEntryPoints();
   1227 
   1228   void ModifyDebugDisallowReadBarrier(int8_t delta) {
   1229     debug_disallow_read_barrier_ += delta;
   1230   }
   1231 
   1232   uint8_t GetDebugDisallowReadBarrierCount() const {
   1233     return debug_disallow_read_barrier_;
   1234   }
   1235 
   1236   // Gets the current TLSData associated with the key or nullptr if there isn't any. Note that users
   1237   // do not gain ownership of TLSData and must synchronize with SetCustomTls themselves to prevent
   1238   // it from being deleted.
   1239   TLSData* GetCustomTLS(const char* key) REQUIRES(!Locks::custom_tls_lock_);
   1240 
   1241   // Sets the tls entry at 'key' to data. The thread takes ownership of the TLSData. The destructor
   1242   // will be run when the thread exits or when SetCustomTLS is called again with the same key.
   1243   void SetCustomTLS(const char* key, TLSData* data) REQUIRES(!Locks::custom_tls_lock_);
   1244 
   1245   // Returns true if the current thread is the jit sensitive thread.
   1246   bool IsJitSensitiveThread() const {
   1247     return this == jit_sensitive_thread_;
   1248   }
   1249 
   1250   bool IsSystemDaemon() const REQUIRES_SHARED(Locks::mutator_lock_);
   1251 
   1252   // Returns true if StrictMode events are traced for the current thread.
   1253   static bool IsSensitiveThread() {
   1254     if (is_sensitive_thread_hook_ != nullptr) {
   1255       return (*is_sensitive_thread_hook_)();
   1256     }
   1257     return false;
   1258   }
   1259 
   1260   // Set to the read barrier marking entrypoints to be non-null.
   1261   void SetReadBarrierEntrypoints();
   1262 
   1263   static jobject CreateCompileTimePeer(JNIEnv* env,
   1264                                        const char* name,
   1265                                        bool as_daemon,
   1266                                        jobject thread_group)
   1267       REQUIRES_SHARED(Locks::mutator_lock_);
   1268 
   1269   ALWAYS_INLINE InterpreterCache* GetInterpreterCache() {
   1270     return &interpreter_cache_;
   1271   }
   1272 
   1273   // Clear all thread-local interpreter caches.
   1274   //
   1275   // Since the caches are keyed by memory pointer to dex instructions, this must be
   1276   // called when any dex code is unloaded (before different code gets loaded at the
   1277   // same memory location).
   1278   //
   1279   // If presence of cache entry implies some pre-conditions, this must also be
   1280   // called if the pre-conditions might no longer hold true.
   1281   static void ClearAllInterpreterCaches();
   1282 
   1283   template<PointerSize pointer_size>
   1284   static constexpr ThreadOffset<pointer_size> InterpreterCacheOffset() {
   1285     return ThreadOffset<pointer_size>(OFFSETOF_MEMBER(Thread, interpreter_cache_));
   1286   }
   1287 
   1288   static constexpr int InterpreterCacheSizeLog2() {
   1289     return WhichPowerOf2(InterpreterCache::kSize);
   1290   }
   1291 
   1292  private:
   1293   explicit Thread(bool daemon);
   1294   ~Thread() REQUIRES(!Locks::mutator_lock_, !Locks::thread_suspend_count_lock_);
   1295   void Destroy();
   1296 
   1297   void NotifyInTheadList()
   1298       REQUIRES_SHARED(Locks::thread_list_lock_);
   1299 
   1300   // Attaches the calling native thread to the runtime, returning the new native peer.
   1301   // Used to implement JNI AttachCurrentThread and AttachCurrentThreadAsDaemon calls.
   1302   template <typename PeerAction>
   1303   static Thread* Attach(const char* thread_name,
   1304                         bool as_daemon,
   1305                         PeerAction p);
   1306 
   1307   void CreatePeer(const char* name, bool as_daemon, jobject thread_group);
   1308 
   1309   template<bool kTransactionActive>
   1310   static void InitPeer(ScopedObjectAccessAlreadyRunnable& soa,
   1311                        ObjPtr<mirror::Object> peer,
   1312                        jboolean thread_is_daemon,
   1313                        jobject thread_group,
   1314                        jobject thread_name,
   1315                        jint thread_priority)
   1316       REQUIRES_SHARED(Locks::mutator_lock_);
   1317 
   1318   // Avoid use, callers should use SetState. Used only by SignalCatcher::HandleSigQuit, ~Thread and
   1319   // Dbg::ManageDeoptimization.
   1320   ThreadState SetStateUnsafe(ThreadState new_state) {
   1321     ThreadState old_state = GetState();
   1322     if (old_state == kRunnable && new_state != kRunnable) {
   1323       // Need to run pending checkpoint and suspend barriers. Run checkpoints in runnable state in
   1324       // case they need to use a ScopedObjectAccess. If we are holding the mutator lock and a SOA
   1325       // attempts to TransitionFromSuspendedToRunnable, it results in a deadlock.
   1326       TransitionToSuspendedAndRunCheckpoints(new_state);
   1327       // Since we transitioned to a suspended state, check the pass barrier requests.
   1328       PassActiveSuspendBarriers();
   1329     } else {
   1330       tls32_.state_and_flags.as_struct.state = new_state;
   1331     }
   1332     return old_state;
   1333   }
   1334 
   1335   void VerifyStackImpl() REQUIRES_SHARED(Locks::mutator_lock_);
   1336 
   1337   void DumpState(std::ostream& os) const REQUIRES_SHARED(Locks::mutator_lock_);
   1338   void DumpStack(std::ostream& os,
   1339                  bool dump_native_stack = true,
   1340                  BacktraceMap* backtrace_map = nullptr,
   1341                  bool force_dump_stack = false) const
   1342       REQUIRES_SHARED(Locks::mutator_lock_);
   1343 
   1344   // Out-of-line conveniences for debugging in gdb.
   1345   static Thread* CurrentFromGdb();  // Like Thread::Current.
   1346   // Like Thread::Dump(std::cerr).
   1347   void DumpFromGdb() const REQUIRES_SHARED(Locks::mutator_lock_);
   1348 
   1349   static void* CreateCallback(void* arg);
   1350 
   1351   void HandleUncaughtExceptions(ScopedObjectAccessAlreadyRunnable& soa)
   1352       REQUIRES_SHARED(Locks::mutator_lock_);
   1353   void RemoveFromThreadGroup(ScopedObjectAccessAlreadyRunnable& soa)
   1354       REQUIRES_SHARED(Locks::mutator_lock_);
   1355 
   1356   // Initialize a thread.
   1357   //
   1358   // The third parameter is not mandatory. If given, the thread will use this JNIEnvExt. In case
   1359   // Init succeeds, this means the thread takes ownership of it. If Init fails, it is the caller's
   1360   // responsibility to destroy the given JNIEnvExt. If the parameter is null, Init will try to
   1361   // create a JNIEnvExt on its own (and potentially fail at that stage, indicated by a return value
   1362   // of false).
   1363   bool Init(ThreadList*, JavaVMExt*, JNIEnvExt* jni_env_ext = nullptr)
   1364       REQUIRES(Locks::runtime_shutdown_lock_);
   1365   void InitCardTable();
   1366   void InitCpu();
   1367   void CleanupCpu();
   1368   void InitTlsEntryPoints();
   1369   void InitTid();
   1370   void InitPthreadKeySelf();
   1371   bool InitStackHwm();
   1372 
   1373   void SetUpAlternateSignalStack();
   1374   void TearDownAlternateSignalStack();
   1375 
   1376   ALWAYS_INLINE void TransitionToSuspendedAndRunCheckpoints(ThreadState new_state)
   1377       REQUIRES(!Locks::thread_suspend_count_lock_, !Roles::uninterruptible_);
   1378 
   1379   ALWAYS_INLINE void PassActiveSuspendBarriers()
   1380       REQUIRES(!Locks::thread_suspend_count_lock_, !Roles::uninterruptible_);
   1381 
   1382   // Registers the current thread as the jit sensitive thread. Should be called just once.
   1383   static void SetJitSensitiveThread() {
   1384     if (jit_sensitive_thread_ == nullptr) {
   1385       jit_sensitive_thread_ = Thread::Current();
   1386     } else {
   1387       LOG(WARNING) << "Attempt to set the sensitive thread twice. Tid:"
   1388           << Thread::Current()->GetTid();
   1389     }
   1390   }
   1391 
   1392   static void SetSensitiveThreadHook(bool (*is_sensitive_thread_hook)()) {
   1393     is_sensitive_thread_hook_ = is_sensitive_thread_hook;
   1394   }
   1395 
   1396   bool ModifySuspendCountInternal(Thread* self,
   1397                                   int delta,
   1398                                   AtomicInteger* suspend_barrier,
   1399                                   SuspendReason reason)
   1400       WARN_UNUSED
   1401       REQUIRES(Locks::thread_suspend_count_lock_);
   1402 
   1403   // Runs a single checkpoint function. If there are no more pending checkpoint functions it will
   1404   // clear the kCheckpointRequest flag. The caller is responsible for calling this in a loop until
   1405   // the kCheckpointRequest flag is cleared.
   1406   void RunCheckpointFunction();
   1407   void RunEmptyCheckpoint();
   1408 
   1409   bool PassActiveSuspendBarriers(Thread* self)
   1410       REQUIRES(!Locks::thread_suspend_count_lock_);
   1411 
   1412   // Install the protected region for implicit stack checks.
   1413   void InstallImplicitProtection();
   1414 
   1415   template <bool kPrecise>
   1416   void VisitRoots(RootVisitor* visitor) REQUIRES_SHARED(Locks::mutator_lock_);
   1417 
   1418   static bool IsAotCompiler();
   1419 
   1420   void ReleaseLongJumpContextInternal();
   1421 
   1422   // 32 bits of atomically changed state and flags. Keeping as 32 bits allows and atomic CAS to
   1423   // change from being Suspended to Runnable without a suspend request occurring.
   1424   union PACKED(4) StateAndFlags {
   1425     StateAndFlags() {}
   1426     struct PACKED(4) {
   1427       // Bitfield of flag values. Must be changed atomically so that flag values aren't lost. See
   1428       // ThreadFlags for bit field meanings.
   1429       volatile uint16_t flags;
   1430       // Holds the ThreadState. May be changed non-atomically between Suspended (ie not Runnable)
   1431       // transitions. Changing to Runnable requires that the suspend_request be part of the atomic
   1432       // operation. If a thread is suspended and a suspend_request is present, a thread may not
   1433       // change to Runnable as a GC or other operation is in progress.
   1434       volatile uint16_t state;
   1435     } as_struct;
   1436     AtomicInteger as_atomic_int;
   1437     volatile int32_t as_int;
   1438 
   1439    private:
   1440     // gcc does not handle struct with volatile member assignments correctly.
   1441     // See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47409
   1442     DISALLOW_COPY_AND_ASSIGN(StateAndFlags);
   1443   };
   1444   static_assert(sizeof(StateAndFlags) == sizeof(int32_t), "Weird state_and_flags size");
   1445 
   1446   static void ThreadExitCallback(void* arg);
   1447 
   1448   // Maximum number of suspend barriers.
   1449   static constexpr uint32_t kMaxSuspendBarriers = 3;
   1450 
   1451   // Has Thread::Startup been called?
   1452   static bool is_started_;
   1453 
   1454   // TLS key used to retrieve the Thread*.
   1455   static pthread_key_t pthread_key_self_;
   1456 
   1457   // Used to notify threads that they should attempt to resume, they will suspend again if
   1458   // their suspend count is > 0.
   1459   static ConditionVariable* resume_cond_ GUARDED_BY(Locks::thread_suspend_count_lock_);
   1460 
   1461   // Hook passed by framework which returns true
   1462   // when StrictMode events are traced for the current thread.
   1463   static bool (*is_sensitive_thread_hook_)();
   1464   // Stores the jit sensitive thread (which for now is the UI thread).
   1465   static Thread* jit_sensitive_thread_;
   1466 
   1467   /***********************************************************************************************/
   1468   // Thread local storage. Fields are grouped by size to enable 32 <-> 64 searching to account for
   1469   // pointer size differences. To encourage shorter encoding, more frequently used values appear
   1470   // first if possible.
   1471   /***********************************************************************************************/
   1472 
   1473   struct PACKED(4) tls_32bit_sized_values {
   1474     // We have no control over the size of 'bool', but want our boolean fields
   1475     // to be 4-byte quantities.
   1476     typedef uint32_t bool32_t;
   1477 
   1478     explicit tls_32bit_sized_values(bool is_daemon) :
   1479       suspend_count(0), debug_suspend_count(0), thin_lock_thread_id(0), tid(0),
   1480       daemon(is_daemon), throwing_OutOfMemoryError(false), no_thread_suspension(0),
   1481       thread_exit_check_count(0), handling_signal_(false),
   1482       is_transitioning_to_runnable(false), ready_for_debug_invoke(false),
   1483       debug_method_entry_(false), is_gc_marking(false), weak_ref_access_enabled(true),
   1484       disable_thread_flip_count(0), user_code_suspend_count(0), force_interpreter_count(0) {
   1485     }
   1486 
   1487     union StateAndFlags state_and_flags;
   1488     static_assert(sizeof(union StateAndFlags) == sizeof(int32_t),
   1489                   "Size of state_and_flags and int32 are different");
   1490 
   1491     // A non-zero value is used to tell the current thread to enter a safe point
   1492     // at the next poll.
   1493     int suspend_count GUARDED_BY(Locks::thread_suspend_count_lock_);
   1494 
   1495     // How much of 'suspend_count_' is by request of the debugger, used to set things right
   1496     // when the debugger detaches. Must be <= suspend_count_.
   1497     int debug_suspend_count GUARDED_BY(Locks::thread_suspend_count_lock_);
   1498 
   1499     // Thin lock thread id. This is a small integer used by the thin lock implementation.
   1500     // This is not to be confused with the native thread's tid, nor is it the value returned
   1501     // by java.lang.Thread.getId --- this is a distinct value, used only for locking. One
   1502     // important difference between this id and the ids visible to managed code is that these
   1503     // ones get reused (to ensure that they fit in the number of bits available).
   1504     uint32_t thin_lock_thread_id;
   1505 
   1506     // System thread id.
   1507     uint32_t tid;
   1508 
   1509     // Is the thread a daemon?
   1510     const bool32_t daemon;
   1511 
   1512     // A boolean telling us whether we're recursively throwing OOME.
   1513     bool32_t throwing_OutOfMemoryError;
   1514 
   1515     // A positive value implies we're in a region where thread suspension isn't expected.
   1516     uint32_t no_thread_suspension;
   1517 
   1518     // How many times has our pthread key's destructor been called?
   1519     uint32_t thread_exit_check_count;
   1520 
   1521     // True if signal is being handled by this thread.
   1522     bool32_t handling_signal_;
   1523 
   1524     // True if the thread is in TransitionFromSuspendedToRunnable(). This is used to distinguish the
   1525     // non-runnable threads (eg. kNative, kWaiting) that are about to transition to runnable from
   1526     // the rest of them.
   1527     bool32_t is_transitioning_to_runnable;
   1528 
   1529     // True if the thread has been suspended by a debugger event. This is
   1530     // used to invoke method from the debugger which is only allowed when
   1531     // the thread is suspended by an event.
   1532     bool32_t ready_for_debug_invoke;
   1533 
   1534     // True if the thread enters a method. This is used to detect method entry
   1535     // event for the debugger.
   1536     bool32_t debug_method_entry_;
   1537 
   1538     // True if the GC is in the marking phase. This is used for the CC collector only. This is
   1539     // thread local so that we can simplify the logic to check for the fast path of read barriers of
   1540     // GC roots.
   1541     bool32_t is_gc_marking;
   1542 
   1543     // Thread "interrupted" status; stays raised until queried or thrown.
   1544     Atomic<bool32_t> interrupted;
   1545 
   1546     AtomicInteger park_state_;
   1547 
   1548     // True if the thread is allowed to access a weak ref (Reference::GetReferent() and system
   1549     // weaks) and to potentially mark an object alive/gray. This is used for concurrent reference
   1550     // processing of the CC collector only. This is thread local so that we can enable/disable weak
   1551     // ref access by using a checkpoint and avoid a race around the time weak ref access gets
   1552     // disabled and concurrent reference processing begins (if weak ref access is disabled during a
   1553     // pause, this is not an issue.) Other collectors use Runtime::DisallowNewSystemWeaks() and
   1554     // ReferenceProcessor::EnableSlowPath().
   1555     bool32_t weak_ref_access_enabled;
   1556 
   1557     // A thread local version of Heap::disable_thread_flip_count_. This keeps track of how many
   1558     // levels of (nested) JNI critical sections the thread is in and is used to detect a nested JNI
   1559     // critical section enter.
   1560     uint32_t disable_thread_flip_count;
   1561 
   1562     // How much of 'suspend_count_' is by request of user code, used to distinguish threads
   1563     // suspended by the runtime from those suspended by user code.
   1564     // This should have GUARDED_BY(Locks::user_code_suspension_lock_) but auto analysis cannot be
   1565     // told that AssertHeld should be good enough.
   1566     int user_code_suspend_count GUARDED_BY(Locks::thread_suspend_count_lock_);
   1567 
   1568     // Count of how many times this thread has been forced to interpreter. If this is not 0 the
   1569     // thread must remain in interpreted code as much as possible.
   1570     uint32_t force_interpreter_count;
   1571 
   1572     // True if everything is in the ideal state for fast interpretation.
   1573     // False if we need to switch to the C++ interpreter to handle special cases.
   1574     std::atomic<bool32_t> use_mterp;
   1575   } tls32_;
   1576 
   1577   struct PACKED(8) tls_64bit_sized_values {
   1578     tls_64bit_sized_values() : trace_clock_base(0) {
   1579     }
   1580 
   1581     // The clock base used for tracing.
   1582     uint64_t trace_clock_base;
   1583 
   1584     RuntimeStats stats;
   1585   } tls64_;
   1586 
   1587   struct PACKED(sizeof(void*)) tls_ptr_sized_values {
   1588       tls_ptr_sized_values() : card_table(nullptr), exception(nullptr), stack_end(nullptr),
   1589       managed_stack(), suspend_trigger(nullptr), jni_env(nullptr), tmp_jni_env(nullptr),
   1590       self(nullptr), opeer(nullptr), jpeer(nullptr), stack_begin(nullptr), stack_size(0),
   1591       deps_or_stack_trace_sample(), wait_next(nullptr), monitor_enter_object(nullptr),
   1592       top_handle_scope(nullptr), class_loader_override(nullptr), long_jump_context(nullptr),
   1593       instrumentation_stack(nullptr), debug_invoke_req(nullptr), single_step_control(nullptr),
   1594       stacked_shadow_frame_record(nullptr), deoptimization_context_stack(nullptr),
   1595       frame_id_to_shadow_frame(nullptr), name(nullptr), pthread_self(0),
   1596       last_no_thread_suspension_cause(nullptr), checkpoint_function(nullptr),
   1597       thread_local_start(nullptr), thread_local_pos(nullptr), thread_local_end(nullptr),
   1598       thread_local_limit(nullptr),
   1599       thread_local_objects(0), mterp_current_ibase(nullptr), thread_local_alloc_stack_top(nullptr),
   1600       thread_local_alloc_stack_end(nullptr),
   1601       flip_function(nullptr), method_verifier(nullptr), thread_local_mark_stack(nullptr),
   1602       async_exception(nullptr) {
   1603       std::fill(held_mutexes, held_mutexes + kLockLevelCount, nullptr);
   1604     }
   1605 
   1606     // The biased card table, see CardTable for details.
   1607     uint8_t* card_table;
   1608 
   1609     // The pending exception or null.
   1610     mirror::Throwable* exception;
   1611 
   1612     // The end of this thread's stack. This is the lowest safely-addressable address on the stack.
   1613     // We leave extra space so there's room for the code that throws StackOverflowError.
   1614     uint8_t* stack_end;
   1615 
   1616     // The top of the managed stack often manipulated directly by compiler generated code.
   1617     ManagedStack managed_stack;
   1618 
   1619     // In certain modes, setting this to 0 will trigger a SEGV and thus a suspend check.  It is
   1620     // normally set to the address of itself.
   1621     uintptr_t* suspend_trigger;
   1622 
   1623     // Every thread may have an associated JNI environment
   1624     JNIEnvExt* jni_env;
   1625 
   1626     // Temporary storage to transfer a pre-allocated JNIEnvExt from the creating thread to the
   1627     // created thread.
   1628     JNIEnvExt* tmp_jni_env;
   1629 
   1630     // Initialized to "this". On certain architectures (such as x86) reading off of Thread::Current
   1631     // is easy but getting the address of Thread::Current is hard. This field can be read off of
   1632     // Thread::Current to give the address.
   1633     Thread* self;
   1634 
   1635     // Our managed peer (an instance of java.lang.Thread). The jobject version is used during thread
   1636     // start up, until the thread is registered and the local opeer_ is used.
   1637     mirror::Object* opeer;
   1638     jobject jpeer;
   1639 
   1640     // The "lowest addressable byte" of the stack.
   1641     uint8_t* stack_begin;
   1642 
   1643     // Size of the stack.
   1644     size_t stack_size;
   1645 
   1646     // Sampling profiler and AOT verification cannot happen on the same run, so we share
   1647     // the same entry for the stack trace and the verifier deps.
   1648     union DepsOrStackTraceSample {
   1649       DepsOrStackTraceSample() {
   1650         verifier_deps = nullptr;
   1651         stack_trace_sample = nullptr;
   1652       }
   1653       // Pointer to previous stack trace captured by sampling profiler.
   1654       std::vector<ArtMethod*>* stack_trace_sample;
   1655       // When doing AOT verification, per-thread VerifierDeps.
   1656       verifier::VerifierDeps* verifier_deps;
   1657     } deps_or_stack_trace_sample;
   1658 
   1659     // The next thread in the wait set this thread is part of or null if not waiting.
   1660     Thread* wait_next;
   1661 
   1662     // If we're blocked in MonitorEnter, this is the object we're trying to lock.
   1663     mirror::Object* monitor_enter_object;
   1664 
   1665     // Top of linked list of handle scopes or null for none.
   1666     BaseHandleScope* top_handle_scope;
   1667 
   1668     // Needed to get the right ClassLoader in JNI_OnLoad, but also
   1669     // useful for testing.
   1670     jobject class_loader_override;
   1671 
   1672     // Thread local, lazily allocated, long jump context. Used to deliver exceptions.
   1673     Context* long_jump_context;
   1674 
   1675     // Additional stack used by method instrumentation to store method and return pc values.
   1676     // Stored as a pointer since std::deque is not PACKED.
   1677     std::deque<instrumentation::InstrumentationStackFrame>* instrumentation_stack;
   1678 
   1679     // JDWP invoke-during-breakpoint support.
   1680     DebugInvokeReq* debug_invoke_req;
   1681 
   1682     // JDWP single-stepping support.
   1683     SingleStepControl* single_step_control;
   1684 
   1685     // For gc purpose, a shadow frame record stack that keeps track of:
   1686     // 1) shadow frames under construction.
   1687     // 2) deoptimization shadow frames.
   1688     StackedShadowFrameRecord* stacked_shadow_frame_record;
   1689 
   1690     // Deoptimization return value record stack.
   1691     DeoptimizationContextRecord* deoptimization_context_stack;
   1692 
   1693     // For debugger, a linked list that keeps the mapping from frame_id to shadow frame.
   1694     // Shadow frames may be created before deoptimization happens so that the debugger can
   1695     // set local values there first.
   1696     FrameIdToShadowFrame* frame_id_to_shadow_frame;
   1697 
   1698     // A cached copy of the java.lang.Thread's name.
   1699     std::string* name;
   1700 
   1701     // A cached pthread_t for the pthread underlying this Thread*.
   1702     pthread_t pthread_self;
   1703 
   1704     // If no_thread_suspension_ is > 0, what is causing that assertion.
   1705     const char* last_no_thread_suspension_cause;
   1706 
   1707     // Pending checkpoint function or null if non-pending. If this checkpoint is set and someone\
   1708     // requests another checkpoint, it goes to the checkpoint overflow list.
   1709     Closure* checkpoint_function GUARDED_BY(Locks::thread_suspend_count_lock_);
   1710 
   1711     // Pending barriers that require passing or NULL if non-pending. Installation guarding by
   1712     // Locks::thread_suspend_count_lock_.
   1713     // They work effectively as art::Barrier, but implemented directly using AtomicInteger and futex
   1714     // to avoid additional cost of a mutex and a condition variable, as used in art::Barrier.
   1715     AtomicInteger* active_suspend_barriers[kMaxSuspendBarriers];
   1716 
   1717     // Thread-local allocation pointer. Moved here to force alignment for thread_local_pos on ARM.
   1718     uint8_t* thread_local_start;
   1719 
   1720     // thread_local_pos and thread_local_end must be consecutive for ldrd and are 8 byte aligned for
   1721     // potentially better performance.
   1722     uint8_t* thread_local_pos;
   1723     uint8_t* thread_local_end;
   1724 
   1725     // Thread local limit is how much we can expand the thread local buffer to, it is greater or
   1726     // equal to thread_local_end.
   1727     uint8_t* thread_local_limit;
   1728 
   1729     size_t thread_local_objects;
   1730 
   1731     // Entrypoint function pointers.
   1732     // TODO: move this to more of a global offset table model to avoid per-thread duplication.
   1733     JniEntryPoints jni_entrypoints;
   1734     QuickEntryPoints quick_entrypoints;
   1735 
   1736     // Mterp jump table base.
   1737     void* mterp_current_ibase;
   1738 
   1739     // There are RosAlloc::kNumThreadLocalSizeBrackets thread-local size brackets per thread.
   1740     void* rosalloc_runs[kNumRosAllocThreadLocalSizeBracketsInThread];
   1741 
   1742     // Thread-local allocation stack data/routines.
   1743     StackReference<mirror::Object>* thread_local_alloc_stack_top;
   1744     StackReference<mirror::Object>* thread_local_alloc_stack_end;
   1745 
   1746     // Support for Mutex lock hierarchy bug detection.
   1747     BaseMutex* held_mutexes[kLockLevelCount];
   1748 
   1749     // The function used for thread flip.
   1750     Closure* flip_function;
   1751 
   1752     // Current method verifier, used for root marking.
   1753     verifier::MethodVerifier* method_verifier;
   1754 
   1755     // Thread-local mark stack for the concurrent copying collector.
   1756     gc::accounting::AtomicStack<mirror::Object>* thread_local_mark_stack;
   1757 
   1758     // The pending async-exception or null.
   1759     mirror::Throwable* async_exception;
   1760   } tlsPtr_;
   1761 
   1762   // Small thread-local cache to be used from the interpreter.
   1763   // It is keyed by dex instruction pointer.
   1764   // The value is opcode-depended (e.g. field offset).
   1765   InterpreterCache interpreter_cache_;
   1766 
   1767   // All fields below this line should not be accessed by native code. This means these fields can
   1768   // be modified, rearranged, added or removed without having to modify asm_support.h
   1769 
   1770   // Guards the 'wait_monitor_' members.
   1771   Mutex* wait_mutex_ DEFAULT_MUTEX_ACQUIRED_AFTER;
   1772 
   1773   // Condition variable waited upon during a wait.
   1774   ConditionVariable* wait_cond_ GUARDED_BY(wait_mutex_);
   1775   // Pointer to the monitor lock we're currently waiting on or null if not waiting.
   1776   Monitor* wait_monitor_ GUARDED_BY(wait_mutex_);
   1777 
   1778   // Debug disable read barrier count, only is checked for debug builds and only in the runtime.
   1779   uint8_t debug_disallow_read_barrier_ = 0;
   1780 
   1781   // Note that it is not in the packed struct, may not be accessed for cross compilation.
   1782   uintptr_t poison_object_cookie_ = 0;
   1783 
   1784   // Pending extra checkpoints if checkpoint_function_ is already used.
   1785   std::list<Closure*> checkpoint_overflow_ GUARDED_BY(Locks::thread_suspend_count_lock_);
   1786 
   1787   // Custom TLS field that can be used by plugins or the runtime. Should not be accessed directly by
   1788   // compiled code or entrypoints.
   1789   SafeMap<std::string, std::unique_ptr<TLSData>> custom_tls_ GUARDED_BY(Locks::custom_tls_lock_);
   1790 
   1791   // True if the thread is some form of runtime thread (ex, GC or JIT).
   1792   bool is_runtime_thread_;
   1793 
   1794   friend class Dbg;  // For SetStateUnsafe.
   1795   friend class gc::collector::SemiSpace;  // For getting stack traces.
   1796   friend class Runtime;  // For CreatePeer.
   1797   friend class QuickExceptionHandler;  // For dumping the stack.
   1798   friend class ScopedThreadStateChange;
   1799   friend class StubTest;  // For accessing entrypoints.
   1800   friend class ThreadList;  // For ~Thread and Destroy.
   1801 
   1802   friend class EntrypointsOrderTest;  // To test the order of tls entries.
   1803 
   1804   DISALLOW_COPY_AND_ASSIGN(Thread);
   1805 };
   1806 
   1807 class SCOPED_CAPABILITY ScopedAssertNoThreadSuspension {
   1808  public:
   1809   ALWAYS_INLINE ScopedAssertNoThreadSuspension(const char* cause,
   1810                                                bool enabled = true)
   1811       ACQUIRE(Roles::uninterruptible_)
   1812       : enabled_(enabled) {
   1813     if (!enabled_) {
   1814       return;
   1815     }
   1816     if (kIsDebugBuild) {
   1817       self_ = Thread::Current();
   1818       old_cause_ = self_->StartAssertNoThreadSuspension(cause);
   1819     } else {
   1820       Roles::uninterruptible_.Acquire();  // No-op.
   1821     }
   1822   }
   1823   ALWAYS_INLINE ~ScopedAssertNoThreadSuspension() RELEASE(Roles::uninterruptible_) {
   1824     if (!enabled_) {
   1825       return;
   1826     }
   1827     if (kIsDebugBuild) {
   1828       self_->EndAssertNoThreadSuspension(old_cause_);
   1829     } else {
   1830       Roles::uninterruptible_.Release();  // No-op.
   1831     }
   1832   }
   1833 
   1834  private:
   1835   Thread* self_;
   1836   const bool enabled_;
   1837   const char* old_cause_;
   1838 };
   1839 
   1840 class ScopedStackedShadowFramePusher {
   1841  public:
   1842   ScopedStackedShadowFramePusher(Thread* self, ShadowFrame* sf, StackedShadowFrameType type)
   1843     : self_(self), type_(type) {
   1844     self_->PushStackedShadowFrame(sf, type);
   1845   }
   1846   ~ScopedStackedShadowFramePusher() {
   1847     self_->PopStackedShadowFrame(type_);
   1848   }
   1849 
   1850  private:
   1851   Thread* const self_;
   1852   const StackedShadowFrameType type_;
   1853 
   1854   DISALLOW_COPY_AND_ASSIGN(ScopedStackedShadowFramePusher);
   1855 };
   1856 
   1857 // Only works for debug builds.
   1858 class ScopedDebugDisallowReadBarriers {
   1859  public:
   1860   explicit ScopedDebugDisallowReadBarriers(Thread* self) : self_(self) {
   1861     self_->ModifyDebugDisallowReadBarrier(1);
   1862   }
   1863   ~ScopedDebugDisallowReadBarriers() {
   1864     self_->ModifyDebugDisallowReadBarrier(-1);
   1865   }
   1866 
   1867  private:
   1868   Thread* const self_;
   1869 };
   1870 
   1871 class ScopedTransitioningToRunnable : public ValueObject {
   1872  public:
   1873   explicit ScopedTransitioningToRunnable(Thread* self)
   1874       : self_(self) {
   1875     DCHECK_EQ(self, Thread::Current());
   1876     if (kUseReadBarrier) {
   1877       self_->SetIsTransitioningToRunnable(true);
   1878     }
   1879   }
   1880 
   1881   ~ScopedTransitioningToRunnable() {
   1882     if (kUseReadBarrier) {
   1883       self_->SetIsTransitioningToRunnable(false);
   1884     }
   1885   }
   1886 
   1887  private:
   1888   Thread* const self_;
   1889 };
   1890 
   1891 class ThreadLifecycleCallback {
   1892  public:
   1893   virtual ~ThreadLifecycleCallback() {}
   1894 
   1895   virtual void ThreadStart(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_) = 0;
   1896   virtual void ThreadDeath(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_) = 0;
   1897 };
   1898 
   1899 std::ostream& operator<<(std::ostream& os, const Thread& thread);
   1900 std::ostream& operator<<(std::ostream& os, const StackedShadowFrameType& thread);
   1901 
   1902 }  // namespace art
   1903 
   1904 #endif  // ART_RUNTIME_THREAD_H_
   1905