• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
~TLSData()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 
GetState()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 
GetSuspendCount()244   int GetSuspendCount() const REQUIRES(Locks::thread_suspend_count_lock_) {
245     return tls32_.suspend_count;
246   }
247 
GetUserCodeSuspendCount()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 
GetDebugSuspendCount()253   int GetDebugSuspendCount() const REQUIRES(Locks::thread_suspend_count_lock_) {
254     return tls32_.debug_suspend_count;
255   }
256 
IsSuspended()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 
GetThreadLocalMarkStack()305   gc::accounting::AtomicStack<mirror::Object>* GetThreadLocalMarkStack() {
306     CHECK(kUseReadBarrier);
307     return tlsPtr_.thread_local_mark_stack;
308   }
SetThreadLocalMarkStack(gc::accounting::AtomicStack<mirror::Object> * stack)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.
StartAssertNoThreadSuspension(const char * cause)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.
EndAssertNoThreadSuspension(const char * old_cause)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 
IsDaemon()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.
GetThreadId()386   uint32_t GetThreadId() const {
387     return tls32_.thin_lock_thread_id;
388   }
389 
GetTid()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 
GetPeer()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 
HasPeer()417   bool HasPeer() const {
418     return tlsPtr_.jpeer != nullptr || tlsPtr_.opeer != nullptr;
419   }
420 
GetStats()421   RuntimeStats* GetStats() {
422     return &tls64_.stats;
423   }
424 
425   bool IsStillStarting() const;
426 
IsExceptionPending()427   bool IsExceptionPending() const {
428     return tlsPtr_.exception != nullptr;
429   }
430 
IsAsyncExceptionPending()431   bool IsAsyncExceptionPending() const {
432     return tlsPtr_.async_exception != nullptr;
433   }
434 
GetException()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 
ClearException()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();
ReleaseLongJumpContext(Context * context)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 
SetTopOfStack(ArtMethod ** top_method)487   void SetTopOfStack(ArtMethod** top_method) {
488     tlsPtr_.managed_stack.SetTopQuickFrame(top_method);
489   }
490 
SetTopOfStackTagged(ArtMethod ** top_method)491   void SetTopOfStackTagged(ArtMethod** top_method) {
492     tlsPtr_.managed_stack.SetTopQuickFrameTagged(top_method);
493   }
494 
SetTopOfShadowStack(ShadowFrame * top)495   void SetTopOfShadowStack(ShadowFrame* top) {
496     tlsPtr_.managed_stack.SetTopShadowFrame(top);
497   }
498 
HasManagedStack()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
GetJniEnv()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 
GetMonitorEnterObject()544   mirror::Object* GetMonitorEnterObject() const REQUIRES_SHARED(Locks::mutator_lock_) {
545     return tlsPtr_.monitor_enter_object;
546   }
547 
SetMonitorEnterObject(mirror::Object * obj)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_);
SetInterrupted(bool i)557   void SetInterrupted(bool i) {
558     tls32_.interrupted.store(i, std::memory_order_seq_cst);
559   }
560   void Notify() REQUIRES(!wait_mutex_);
561 
PoisonObjectPointers()562   ALWAYS_INLINE void PoisonObjectPointers() {
563     ++poison_object_cookie_;
564   }
565 
566   ALWAYS_INLINE static void PoisonObjectPointersIfDebug();
567 
GetPoisonObjectCookie()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:
GetWaitMutex()581   Mutex* GetWaitMutex() const LOCK_RETURNED(wait_mutex_) {
582     return wait_mutex_;
583   }
584 
GetWaitConditionVariable()585   ConditionVariable* GetWaitConditionVariable() const REQUIRES(wait_mutex_) {
586     return wait_cond_;
587   }
588 
GetWaitMonitor()589   Monitor* GetWaitMonitor() const REQUIRES(wait_mutex_) {
590     return wait_monitor_;
591   }
592 
SetWaitMonitor(Monitor * mon)593   void SetWaitMonitor(Monitor* mon) REQUIRES(wait_mutex_) {
594     wait_monitor_ = mon;
595   }
596 
597   // Waiter link-list support.
GetWaitNext()598   Thread* GetWaitNext() const {
599     return tlsPtr_.wait_next;
600   }
601 
SetWaitNext(Thread * next)602   void SetWaitNext(Thread* next) {
603     tlsPtr_.wait_next = next;
604   }
605 
GetClassLoaderOverride()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 
HasDebuggerShadowFrames()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 
VerifyStack()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>
ThinLockIdOffset()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>
InterruptedOffset()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>
ThreadFlagsOffset()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>
UseMterpOffset()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>
IsGcMarkingOffset()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 
IsGcMarkingSize()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>
ThreadOffsetFromTlsPtr(size_t tls_ptr_offset)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:
QuickEntryPointOffsetWithSize(size_t quick_entrypoint_offset,PointerSize pointer_size)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>
QuickEntryPointOffset(size_t quick_entrypoint_offset)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>
JniEntryPointOffset(size_t jni_entrypoint_offset)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>
ReadBarrierMarkEntryPointsOffset(size_t reg)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>
SelfOffset()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>
MterpCurrentIBaseOffset()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>
ExceptionOffset()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>
PeerOffset()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>
CardTableOffset()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>
ThreadSuspendTriggerOffset()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>
ThreadLocalPosOffset()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>
ThreadLocalEndOffset()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>
ThreadLocalObjectsOffset()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>
RosAllocRunsOffset()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>
ThreadLocalAllocStackTopOffset()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>
ThreadLocalAllocStackEndOffset()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
GetStackSize()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 
GetStackEnd()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 
IsHandlingStackOverflow()821   bool IsHandlingStackOverflow() const {
822     return tlsPtr_.stack_end == tlsPtr_.stack_begin;
823   }
824 
825   template<PointerSize pointer_size>
StackEndOffset()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>
JniEnvOffset()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>
TopOfManagedStackOffset()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 
GetManagedStack()844   const ManagedStack* GetManagedStack() const {
845     return &tlsPtr_.managed_stack;
846   }
847 
848   // Linked list recording fragments of managed stack.
PushManagedStackFragment(ManagedStack * fragment)849   void PushManagedStackFragment(ManagedStack* fragment) {
850     tlsPtr_.managed_stack.PushManagedStackFragment(fragment);
851   }
PopManagedStackFragment(const ManagedStack & fragment)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>
TopShadowFrameOffset()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 
GetTopHandleScope()872   BaseHandleScope* GetTopHandleScope() {
873     return tlsPtr_.top_handle_scope;
874   }
875 
PushHandleScope(BaseHandleScope * handle_scope)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 
PopHandleScope()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>
TopHandleScopeOffset()889   static constexpr ThreadOffset<pointer_size> TopHandleScopeOffset() {
890     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values,
891                                                                 top_handle_scope));
892   }
893 
GetInvokeReq()894   DebugInvokeReq* GetInvokeReq() const {
895     return tlsPtr_.debug_invoke_req;
896   }
897 
GetSingleStepControl()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.
IsReadyForDebugInvoke()904   bool IsReadyForDebugInvoke() const {
905     return tls32_.ready_for_debug_invoke;
906   }
907 
SetReadyForDebugInvoke(bool ready)908   void SetReadyForDebugInvoke(bool ready) {
909     tls32_.ready_for_debug_invoke = ready;
910   }
911 
IsDebugMethodEntry()912   bool IsDebugMethodEntry() const {
913     return tls32_.debug_method_entry_;
914   }
915 
SetDebugMethodEntry()916   void SetDebugMethodEntry() {
917     tls32_.debug_method_entry_ = true;
918   }
919 
ClearDebugMethodEntry()920   void ClearDebugMethodEntry() {
921     tls32_.debug_method_entry_ = false;
922   }
923 
GetIsGcMarking()924   bool GetIsGcMarking() const {
925     CHECK(kUseReadBarrier);
926     return tls32_.is_gc_marking;
927   }
928 
929   void SetIsGcMarkingAndUpdateEntrypoints(bool is_marking);
930 
GetWeakRefAccessEnabled()931   bool GetWeakRefAccessEnabled() const {
932     CHECK(kUseReadBarrier);
933     return tls32_.weak_ref_access_enabled;
934   }
935 
SetWeakRefAccessEnabled(bool enabled)936   void SetWeakRefAccessEnabled(bool enabled) {
937     CHECK(kUseReadBarrier);
938     tls32_.weak_ref_access_enabled = enabled;
939   }
940 
GetDisableThreadFlipCount()941   uint32_t GetDisableThreadFlipCount() const {
942     CHECK(kUseReadBarrier);
943     return tls32_.disable_thread_flip_count;
944   }
945 
IncrementDisableThreadFlipCount()946   void IncrementDisableThreadFlipCount() {
947     CHECK(kUseReadBarrier);
948     ++tls32_.disable_thread_flip_count;
949   }
950 
DecrementDisableThreadFlipCount()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).
IsRuntimeThread()958   bool IsRuntimeThread() const {
959     return is_runtime_thread_;
960   }
961 
SetIsRuntimeThread(bool is_runtime_thread)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.
GetDeoptimizationException()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 
GetInstrumentationStack()1038   std::deque<instrumentation::InstrumentationStackFrame>* GetInstrumentationStack() {
1039     return tlsPtr_.instrumentation_stack;
1040   }
1041 
GetStackTraceSample()1042   std::vector<ArtMethod*>* GetStackTraceSample() const {
1043     DCHECK(!IsAotCompiler());
1044     return tlsPtr_.deps_or_stack_trace_sample.stack_trace_sample;
1045   }
1046 
SetStackTraceSample(std::vector<ArtMethod * > * sample)1047   void SetStackTraceSample(std::vector<ArtMethod*>* sample) {
1048     DCHECK(!IsAotCompiler());
1049     tlsPtr_.deps_or_stack_trace_sample.stack_trace_sample = sample;
1050   }
1051 
GetVerifierDeps()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.
SetVerifierDeps(verifier::VerifierDeps * verifier_deps)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 
GetTraceClockBase()1066   uint64_t GetTraceClockBase() const {
1067     return tls64_.trace_clock_base;
1068   }
1069 
SetTraceClockBase(uint64_t clock_base)1070   void SetTraceClockBase(uint64_t clock_base) {
1071     tls64_.trace_clock_base = clock_base;
1072   }
1073 
GetHeldMutex(LockLevel level)1074   BaseMutex* GetHeldMutex(LockLevel level) const {
1075     return tlsPtr_.held_mutexes[level];
1076   }
1077 
SetHeldMutex(LockLevel level,BaseMutex * mutex)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 
ReadFlag(ThreadFlag flag)1085   bool ReadFlag(ThreadFlag flag) const {
1086     return (tls32_.state_and_flags.as_struct.flags & flag) != 0;
1087   }
1088 
TestAllFlags()1089   bool TestAllFlags() const {
1090     return (tls32_.state_and_flags.as_struct.flags != 0);
1091   }
1092 
AtomicSetFlag(ThreadFlag flag)1093   void AtomicSetFlag(ThreadFlag flag) {
1094     tls32_.state_and_flags.as_atomic_int.fetch_or(flag, std::memory_order_seq_cst);
1095   }
1096 
AtomicClearFlag(ThreadFlag flag)1097   void AtomicClearFlag(ThreadFlag flag) {
1098     tls32_.state_and_flags.as_atomic_int.fetch_and(-1 ^ flag, std::memory_order_seq_cst);
1099   }
1100 
UseMterp()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.
TlabSize()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.
TlabRemainingCapacity()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.
ExpandTlab(size_t bytes)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;
GetTlabStart()1127   uint8_t* GetTlabStart() {
1128     return tlsPtr_.thread_local_start;
1129   }
GetTlabPos()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.
RemoveSuspendTrigger()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.
TriggerSuspend()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 
GetThreadLocalBytesAllocated()1160   size_t GetThreadLocalBytesAllocated() const {
1161     return tlsPtr_.thread_local_end - tlsPtr_.thread_local_start;
1162   }
1163 
GetThreadLocalObjectsAllocated()1164   size_t GetThreadLocalObjectsAllocated() const {
1165     return tlsPtr_.thread_local_objects;
1166   }
1167 
GetRosAllocRun(size_t index)1168   void* GetRosAllocRun(size_t index) const {
1169     return tlsPtr_.rosalloc_runs[index];
1170   }
1171 
SetRosAllocRun(size_t index,void * run)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 
SetMterpCurrentIBase(void * ibase)1179   void SetMterpCurrentIBase(void* ibase) {
1180     tlsPtr_.mterp_current_ibase = ibase;
1181   }
1182 
GetMterpCurrentIBase()1183   const void* GetMterpCurrentIBase() const {
1184     return tlsPtr_.mterp_current_ibase;
1185   }
1186 
HandlingSignal()1187   bool HandlingSignal() const {
1188     return tls32_.handling_signal_;
1189   }
1190 
SetHandlingSignal(bool handling_signal)1191   void SetHandlingSignal(bool handling_signal) {
1192     tls32_.handling_signal_ = handling_signal;
1193   }
1194 
IsTransitioningToRunnable()1195   bool IsTransitioningToRunnable() const {
1196     return tls32_.is_transitioning_to_runnable;
1197   }
1198 
SetIsTransitioningToRunnable(bool value)1199   void SetIsTransitioningToRunnable(bool value) {
1200     tls32_.is_transitioning_to_runnable = value;
1201   }
1202 
DecrementForceInterpreterCount()1203   uint32_t DecrementForceInterpreterCount() REQUIRES(Locks::thread_list_lock_) {
1204     return --tls32_.force_interpreter_count;
1205   }
1206 
IncrementForceInterpreterCount()1207   uint32_t IncrementForceInterpreterCount() REQUIRES(Locks::thread_list_lock_) {
1208     return ++tls32_.force_interpreter_count;
1209   }
1210 
SetForceInterpreterCount(uint32_t value)1211   void SetForceInterpreterCount(uint32_t value) REQUIRES(Locks::thread_list_lock_) {
1212     tls32_.force_interpreter_count = value;
1213   }
1214 
ForceInterpreterCount()1215   uint32_t ForceInterpreterCount() const {
1216     return tls32_.force_interpreter_count;
1217   }
1218 
IsForceInterpreter()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 
ModifyDebugDisallowReadBarrier(int8_t delta)1228   void ModifyDebugDisallowReadBarrier(int8_t delta) {
1229     debug_disallow_read_barrier_ += delta;
1230   }
1231 
GetDebugDisallowReadBarrierCount()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.
IsJitSensitiveThread()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.
IsSensitiveThread()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 
GetInterpreterCache()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>
InterpreterCacheOffset()1284   static constexpr ThreadOffset<pointer_size> InterpreterCacheOffset() {
1285     return ThreadOffset<pointer_size>(OFFSETOF_MEMBER(Thread, interpreter_cache_));
1286   }
1287 
InterpreterCacheSizeLog2()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.
SetStateUnsafe(ThreadState new_state)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.
SetJitSensitiveThread()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 
SetSensitiveThreadHook(bool (* is_sensitive_thread_hook)())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 {
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 
tls_32bit_sized_valuestls_32bit_sized_values1478     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 {
tls_64bit_sized_valuestls_64bit_sized_values1578     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 
PACKED(sizeof (void *))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)
ACQUIRE(Roles::uninterruptible_)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   }
~ScopedAssertNoThreadSuspension()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:
ScopedStackedShadowFramePusher(Thread * self,ShadowFrame * sf,StackedShadowFrameType type)1842   ScopedStackedShadowFramePusher(Thread* self, ShadowFrame* sf, StackedShadowFrameType type)
1843     : self_(self), type_(type) {
1844     self_->PushStackedShadowFrame(sf, type);
1845   }
~ScopedStackedShadowFramePusher()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:
ScopedDebugDisallowReadBarriers(Thread * self)1860   explicit ScopedDebugDisallowReadBarriers(Thread* self) : self_(self) {
1861     self_->ModifyDebugDisallowReadBarrier(1);
1862   }
~ScopedDebugDisallowReadBarriers()1863   ~ScopedDebugDisallowReadBarriers() {
1864     self_->ModifyDebugDisallowReadBarrier(-1);
1865   }
1866 
1867  private:
1868   Thread* const self_;
1869 };
1870 
1871 class ScopedTransitioningToRunnable : public ValueObject {
1872  public:
ScopedTransitioningToRunnable(Thread * self)1873   explicit ScopedTransitioningToRunnable(Thread* self)
1874       : self_(self) {
1875     DCHECK_EQ(self, Thread::Current());
1876     if (kUseReadBarrier) {
1877       self_->SetIsTransitioningToRunnable(true);
1878     }
1879   }
1880 
~ScopedTransitioningToRunnable()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:
~ThreadLifecycleCallback()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