• 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 <bitset>
21 #include <deque>
22 #include <iosfwd>
23 #include <list>
24 #include <memory>
25 #include <setjmp.h>
26 #include <string>
27 
28 #include "arch/context.h"
29 #include "arch/instruction_set.h"
30 #include "atomic.h"
31 #include "base/macros.h"
32 #include "base/mutex.h"
33 #include "entrypoints/interpreter/interpreter_entrypoints.h"
34 #include "entrypoints/jni/jni_entrypoints.h"
35 #include "entrypoints/quick/quick_entrypoints.h"
36 #include "globals.h"
37 #include "handle_scope.h"
38 #include "instrumentation.h"
39 #include "jvalue.h"
40 #include "object_callbacks.h"
41 #include "offsets.h"
42 #include "runtime_stats.h"
43 #include "stack.h"
44 #include "thread_state.h"
45 
46 namespace art {
47 
48 namespace gc {
49 namespace collector {
50   class SemiSpace;
51 }  // namespace collector
52 }  // namespace gc
53 
54 namespace mirror {
55   class Array;
56   class Class;
57   class ClassLoader;
58   class Object;
59   template<class T> class ObjectArray;
60   template<class T> class PrimitiveArray;
61   typedef PrimitiveArray<int32_t> IntArray;
62   class StackTraceElement;
63   class String;
64   class Throwable;
65 }  // namespace mirror
66 
67 namespace verifier {
68 class MethodVerifier;
69 }  // namespace verifier
70 
71 class ArtMethod;
72 class BaseMutex;
73 class ClassLinker;
74 class Closure;
75 class Context;
76 struct DebugInvokeReq;
77 class DeoptimizationReturnValueRecord;
78 class DexFile;
79 class JavaVMExt;
80 struct JNIEnvExt;
81 class Monitor;
82 class Runtime;
83 class ScopedObjectAccessAlreadyRunnable;
84 class ShadowFrame;
85 class SingleStepControl;
86 class StackedShadowFrameRecord;
87 class Thread;
88 class ThreadList;
89 
90 // Thread priorities. These must match the Thread.MIN_PRIORITY,
91 // Thread.NORM_PRIORITY, and Thread.MAX_PRIORITY constants.
92 enum ThreadPriority {
93   kMinThreadPriority = 1,
94   kNormThreadPriority = 5,
95   kMaxThreadPriority = 10,
96 };
97 
98 enum ThreadFlag {
99   kSuspendRequest   = 1,  // If set implies that suspend_count_ > 0 and the Thread should enter the
100                           // safepoint handler.
101   kCheckpointRequest = 2  // Request that the thread do some checkpoint work and then continue.
102 };
103 
104 enum class StackedShadowFrameType {
105   kShadowFrameUnderConstruction,
106   kDeoptimizationShadowFrame
107 };
108 
109 static constexpr size_t kNumRosAllocThreadLocalSizeBrackets = 34;
110 
111 // Thread's stack layout for implicit stack overflow checks:
112 //
113 //   +---------------------+  <- highest address of stack memory
114 //   |                     |
115 //   .                     .  <- SP
116 //   |                     |
117 //   |                     |
118 //   +---------------------+  <- stack_end
119 //   |                     |
120 //   |  Gap                |
121 //   |                     |
122 //   +---------------------+  <- stack_begin
123 //   |                     |
124 //   | Protected region    |
125 //   |                     |
126 //   +---------------------+  <- lowest address of stack memory
127 //
128 // The stack always grows down in memory.  At the lowest address is a region of memory
129 // that is set mprotect(PROT_NONE).  Any attempt to read/write to this region will
130 // result in a segmentation fault signal.  At any point, the thread's SP will be somewhere
131 // between the stack_end and the highest address in stack memory.  An implicit stack
132 // overflow check is a read of memory at a certain offset below the current SP (4K typically).
133 // If the thread's SP is below the stack_end address this will be a read into the protected
134 // region.  If the SP is above the stack_end address, the thread is guaranteed to have
135 // at least 4K of space.  Because stack overflow checks are only performed in generated code,
136 // if the thread makes a call out to a native function (through JNI), that native function
137 // might only have 4K of memory (if the SP is adjacent to stack_end).
138 
139 class Thread {
140  public:
141   // For implicit overflow checks we reserve an extra piece of memory at the bottom
142   // of the stack (lowest memory).  The higher portion of the memory
143   // is protected against reads and the lower is available for use while
144   // throwing the StackOverflow exception.
145   static constexpr size_t kStackOverflowProtectedSize = 4 * KB;
146   static const size_t kStackOverflowImplicitCheckSize;
147 
148   // Creates a new native thread corresponding to the given managed peer.
149   // Used to implement Thread.start.
150   static void CreateNativeThread(JNIEnv* env, jobject peer, size_t stack_size, bool daemon);
151 
152   // Attaches the calling native thread to the runtime, returning the new native peer.
153   // Used to implement JNI AttachCurrentThread and AttachCurrentThreadAsDaemon calls.
154   static Thread* Attach(const char* thread_name, bool as_daemon, jobject thread_group,
155                         bool create_peer);
156 
157   // Reset internal state of child thread after fork.
158   void InitAfterFork();
159 
160   // Get the currently executing thread, frequently referred to as 'self'. This call has reasonably
161   // high cost and so we favor passing self around when possible.
162   // TODO: mark as PURE so the compiler may coalesce and remove?
163   static Thread* Current();
164 
165   // On a runnable thread, check for pending thread suspension request and handle if pending.
166   void AllowThreadSuspension() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
167 
168   // Process pending thread suspension request and handle if pending.
169   void CheckSuspend() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
170 
171   static Thread* FromManagedThread(const ScopedObjectAccessAlreadyRunnable& ts,
172                                    mirror::Object* thread_peer)
173       EXCLUSIVE_LOCKS_REQUIRED(Locks::thread_list_lock_)
174       LOCKS_EXCLUDED(Locks::thread_suspend_count_lock_)
175       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
176   static Thread* FromManagedThread(const ScopedObjectAccessAlreadyRunnable& ts, jobject thread)
177       EXCLUSIVE_LOCKS_REQUIRED(Locks::thread_list_lock_)
178       LOCKS_EXCLUDED(Locks::thread_suspend_count_lock_)
179       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
180 
181   // Translates 172 to pAllocArrayFromCode and so on.
182   template<size_t size_of_pointers>
183   static void DumpThreadOffset(std::ostream& os, uint32_t offset);
184 
185   // Dumps a one-line summary of thread state (used for operator<<).
186   void ShortDump(std::ostream& os) const;
187 
188   // Dumps the detailed thread state and the thread stack (used for SIGQUIT).
189   void Dump(std::ostream& os) const
190       LOCKS_EXCLUDED(Locks::thread_suspend_count_lock_)
191       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
192 
193   void DumpJavaStack(std::ostream& os) const
194       LOCKS_EXCLUDED(Locks::thread_suspend_count_lock_)
195       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
196 
197   // Dumps the SIGQUIT per-thread header. 'thread' can be null for a non-attached thread, in which
198   // case we use 'tid' to identify the thread, and we'll include as much information as we can.
199   static void DumpState(std::ostream& os, const Thread* thread, pid_t tid)
200       LOCKS_EXCLUDED(Locks::thread_suspend_count_lock_)
201       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
202 
GetState()203   ThreadState GetState() const {
204     DCHECK_GE(tls32_.state_and_flags.as_struct.state, kTerminated);
205     DCHECK_LE(tls32_.state_and_flags.as_struct.state, kSuspended);
206     return static_cast<ThreadState>(tls32_.state_and_flags.as_struct.state);
207   }
208 
209   ThreadState SetState(ThreadState new_state);
210 
GetSuspendCount()211   int GetSuspendCount() const EXCLUSIVE_LOCKS_REQUIRED(Locks::thread_suspend_count_lock_) {
212     return tls32_.suspend_count;
213   }
214 
GetDebugSuspendCount()215   int GetDebugSuspendCount() const EXCLUSIVE_LOCKS_REQUIRED(Locks::thread_suspend_count_lock_) {
216     return tls32_.debug_suspend_count;
217   }
218 
IsSuspended()219   bool IsSuspended() const {
220     union StateAndFlags state_and_flags;
221     state_and_flags.as_int = tls32_.state_and_flags.as_int;
222     return state_and_flags.as_struct.state != kRunnable &&
223         (state_and_flags.as_struct.flags & kSuspendRequest) != 0;
224   }
225 
226   void ModifySuspendCount(Thread* self, int delta, bool for_debugger)
227       EXCLUSIVE_LOCKS_REQUIRED(Locks::thread_suspend_count_lock_);
228 
229   bool RequestCheckpoint(Closure* function)
230       EXCLUSIVE_LOCKS_REQUIRED(Locks::thread_suspend_count_lock_);
231 
232   void SetFlipFunction(Closure* function);
233   Closure* GetFlipFunction();
234 
235   // Called when thread detected that the thread_suspend_count_ was non-zero. Gives up share of
236   // mutator_lock_ and waits until it is resumed and thread_suspend_count_ is zero.
237   void FullSuspendCheck()
238       LOCKS_EXCLUDED(Locks::thread_suspend_count_lock_)
239       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
240 
241   // Transition from non-runnable to runnable state acquiring share on mutator_lock_.
242   ThreadState TransitionFromSuspendedToRunnable()
243       LOCKS_EXCLUDED(Locks::thread_suspend_count_lock_)
244       SHARED_LOCK_FUNCTION(Locks::mutator_lock_)
245       ALWAYS_INLINE;
246 
247   // Transition from runnable into a state where mutator privileges are denied. Releases share of
248   // mutator lock.
249   void TransitionFromRunnableToSuspended(ThreadState new_state)
250       LOCKS_EXCLUDED(Locks::thread_suspend_count_lock_)
251       UNLOCK_FUNCTION(Locks::mutator_lock_)
252       ALWAYS_INLINE;
253 
254   // Once called thread suspension will cause an assertion failure.
StartAssertNoThreadSuspension(const char * cause)255   const char* StartAssertNoThreadSuspension(const char* cause) {
256     if (kIsDebugBuild) {
257       CHECK(cause != nullptr);
258       const char* previous_cause = tlsPtr_.last_no_thread_suspension_cause;
259       tls32_.no_thread_suspension++;
260       tlsPtr_.last_no_thread_suspension_cause = cause;
261       return previous_cause;
262     } else {
263       return nullptr;
264     }
265   }
266 
267   // End region where no thread suspension is expected.
EndAssertNoThreadSuspension(const char * old_cause)268   void EndAssertNoThreadSuspension(const char* old_cause) {
269     if (kIsDebugBuild) {
270       CHECK(old_cause != nullptr || tls32_.no_thread_suspension == 1);
271       CHECK_GT(tls32_.no_thread_suspension, 0U);
272       tls32_.no_thread_suspension--;
273       tlsPtr_.last_no_thread_suspension_cause = old_cause;
274     }
275   }
276 
277   void AssertThreadSuspensionIsAllowable(bool check_locks = true) const;
278 
IsDaemon()279   bool IsDaemon() const {
280     return tls32_.daemon;
281   }
282 
283   bool HoldsLock(mirror::Object*) const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
284 
285   /*
286    * Changes the priority of this thread to match that of the java.lang.Thread object.
287    *
288    * We map a priority value from 1-10 to Linux "nice" values, where lower
289    * numbers indicate higher priority.
290    */
291   void SetNativePriority(int newPriority);
292 
293   /*
294    * Returns the thread priority for the current thread by querying the system.
295    * This is useful when attaching a thread through JNI.
296    *
297    * Returns a value from 1 to 10 (compatible with java.lang.Thread values).
298    */
299   static int GetNativePriority();
300 
GetThreadId()301   uint32_t GetThreadId() const {
302     return tls32_.thin_lock_thread_id;
303   }
304 
GetTid()305   pid_t GetTid() const {
306     return tls32_.tid;
307   }
308 
309   // Returns the java.lang.Thread's name, or null if this Thread* doesn't have a peer.
310   mirror::String* GetThreadName(const ScopedObjectAccessAlreadyRunnable& ts) const
311       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
312 
313   // Sets 'name' to the java.lang.Thread's name. This requires no transition to managed code,
314   // allocation, or locking.
315   void GetThreadName(std::string& name) const;
316 
317   // Sets the thread's name.
318   void SetThreadName(const char* name) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
319 
320   // Returns the thread-specific CPU-time clock in microseconds or -1 if unavailable.
321   uint64_t GetCpuMicroTime() const;
322 
GetPeer()323   mirror::Object* GetPeer() const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
324     CHECK(tlsPtr_.jpeer == nullptr);
325     return tlsPtr_.opeer;
326   }
327 
HasPeer()328   bool HasPeer() const {
329     return tlsPtr_.jpeer != nullptr || tlsPtr_.opeer != nullptr;
330   }
331 
GetStats()332   RuntimeStats* GetStats() {
333     return &tls64_.stats;
334   }
335 
336   bool IsStillStarting() const;
337 
IsExceptionPending()338   bool IsExceptionPending() const {
339     return tlsPtr_.exception != nullptr;
340   }
341 
GetException()342   mirror::Throwable* GetException() const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
343     return tlsPtr_.exception;
344   }
345 
346   void AssertPendingException() const;
347   void AssertPendingOOMException() const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
348   void AssertNoPendingException() const;
349   void AssertNoPendingExceptionForNewException(const char* msg) const;
350 
SetException(mirror::Throwable * new_exception)351   void SetException(mirror::Throwable* new_exception)
352       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
353     CHECK(new_exception != nullptr);
354     // TODO: DCHECK(!IsExceptionPending());
355     tlsPtr_.exception = new_exception;
356   }
357 
ClearException()358   void ClearException() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
359     tlsPtr_.exception = nullptr;
360   }
361 
362   // Find catch block and perform long jump to appropriate exception handle
363   NO_RETURN void QuickDeliverException() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
364 
365   Context* GetLongJumpContext();
ReleaseLongJumpContext(Context * context)366   void ReleaseLongJumpContext(Context* context) {
367     if (tlsPtr_.long_jump_context != nullptr) {
368       // Each QuickExceptionHandler gets a long jump context and uses
369       // it for doing the long jump, after finding catch blocks/doing deoptimization.
370       // Both finding catch blocks and deoptimization can trigger another
371       // exception such as a result of class loading. So there can be nested
372       // cases of exception handling and multiple contexts being used.
373       // ReleaseLongJumpContext tries to save the context in tlsPtr_.long_jump_context
374       // for reuse so there is no need to always allocate a new one each time when
375       // getting a context. Since we only keep one context for reuse, delete the
376       // existing one since the passed in context is yet to be used for longjump.
377       delete tlsPtr_.long_jump_context;
378     }
379     tlsPtr_.long_jump_context = context;
380   }
381 
382   // Get the current method and dex pc. If there are errors in retrieving the dex pc, this will
383   // abort the runtime iff abort_on_error is true.
384   ArtMethod* GetCurrentMethod(uint32_t* dex_pc, bool abort_on_error = true) const
385       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
386 
387   // Returns whether the given exception was thrown by the current Java method being executed
388   // (Note that this includes native Java methods).
389   bool IsExceptionThrownByCurrentMethod(mirror::Throwable* exception) const
390       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
391 
SetTopOfStack(ArtMethod ** top_method)392   void SetTopOfStack(ArtMethod** top_method) {
393     tlsPtr_.managed_stack.SetTopQuickFrame(top_method);
394   }
395 
SetTopOfShadowStack(ShadowFrame * top)396   void SetTopOfShadowStack(ShadowFrame* top) {
397     tlsPtr_.managed_stack.SetTopShadowFrame(top);
398   }
399 
HasManagedStack()400   bool HasManagedStack() const {
401     return (tlsPtr_.managed_stack.GetTopQuickFrame() != nullptr) ||
402         (tlsPtr_.managed_stack.GetTopShadowFrame() != nullptr);
403   }
404 
405   // If 'msg' is null, no detail message is set.
406   void ThrowNewException(const char* exception_class_descriptor, const char* msg)
407       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
408 
409   // If 'msg' is null, no detail message is set. An exception must be pending, and will be
410   // used as the new exception's cause.
411   void ThrowNewWrappedException(const char* exception_class_descriptor, const char* msg)
412       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
413 
414   void ThrowNewExceptionF(const char* exception_class_descriptor, const char* fmt, ...)
415       __attribute__((format(printf, 3, 4)))
416       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
417 
418   void ThrowNewExceptionV(const char* exception_class_descriptor, const char* fmt, va_list ap)
419       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
420 
421   // OutOfMemoryError is special, because we need to pre-allocate an instance.
422   // Only the GC should call this.
423   void ThrowOutOfMemoryError(const char* msg) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
424 
425   static void Startup();
426   static void FinishStartup();
427   static void Shutdown();
428 
429   // JNI methods
GetJniEnv()430   JNIEnvExt* GetJniEnv() const {
431     return tlsPtr_.jni_env;
432   }
433 
434   // Convert a jobject into a Object*
435   mirror::Object* DecodeJObject(jobject obj) const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
436 
GetMonitorEnterObject()437   mirror::Object* GetMonitorEnterObject() const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
438     return tlsPtr_.monitor_enter_object;
439   }
440 
SetMonitorEnterObject(mirror::Object * obj)441   void SetMonitorEnterObject(mirror::Object* obj) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
442     tlsPtr_.monitor_enter_object = obj;
443   }
444 
445   // Implements java.lang.Thread.interrupted.
446   bool Interrupted() LOCKS_EXCLUDED(wait_mutex_);
447   // Implements java.lang.Thread.isInterrupted.
448   bool IsInterrupted() LOCKS_EXCLUDED(wait_mutex_);
IsInterruptedLocked()449   bool IsInterruptedLocked() EXCLUSIVE_LOCKS_REQUIRED(wait_mutex_) {
450     return interrupted_;
451   }
452   void Interrupt(Thread* self) LOCKS_EXCLUDED(wait_mutex_);
SetInterruptedLocked(bool i)453   void SetInterruptedLocked(bool i) EXCLUSIVE_LOCKS_REQUIRED(wait_mutex_) {
454     interrupted_ = i;
455   }
456   void Notify() LOCKS_EXCLUDED(wait_mutex_);
457 
458  private:
459   void NotifyLocked(Thread* self) EXCLUSIVE_LOCKS_REQUIRED(wait_mutex_);
460 
461  public:
GetWaitMutex()462   Mutex* GetWaitMutex() const LOCK_RETURNED(wait_mutex_) {
463     return wait_mutex_;
464   }
465 
GetWaitConditionVariable()466   ConditionVariable* GetWaitConditionVariable() const EXCLUSIVE_LOCKS_REQUIRED(wait_mutex_) {
467     return wait_cond_;
468   }
469 
GetWaitMonitor()470   Monitor* GetWaitMonitor() const EXCLUSIVE_LOCKS_REQUIRED(wait_mutex_) {
471     return wait_monitor_;
472   }
473 
SetWaitMonitor(Monitor * mon)474   void SetWaitMonitor(Monitor* mon) EXCLUSIVE_LOCKS_REQUIRED(wait_mutex_) {
475     wait_monitor_ = mon;
476   }
477 
478 
479   // Waiter link-list support.
GetWaitNext()480   Thread* GetWaitNext() const {
481     return tlsPtr_.wait_next;
482   }
483 
SetWaitNext(Thread * next)484   void SetWaitNext(Thread* next) {
485     tlsPtr_.wait_next = next;
486   }
487 
GetClassLoaderOverride()488   jobject GetClassLoaderOverride() {
489     return tlsPtr_.class_loader_override;
490   }
491 
492   void SetClassLoaderOverride(jobject class_loader_override);
493 
494   // Create the internal representation of a stack trace, that is more time
495   // and space efficient to compute than the StackTraceElement[].
496   template<bool kTransactionActive>
497   jobject CreateInternalStackTrace(const ScopedObjectAccessAlreadyRunnable& soa) const
498       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
499 
500   // Convert an internal stack trace representation (returned by CreateInternalStackTrace) to a
501   // StackTraceElement[]. If output_array is null, a new array is created, otherwise as many
502   // frames as will fit are written into the given array. If stack_depth is non-null, it's updated
503   // with the number of valid frames in the returned array.
504   static jobjectArray InternalStackTraceToStackTraceElementArray(
505       const ScopedObjectAccessAlreadyRunnable& soa, jobject internal,
506       jobjectArray output_array = nullptr, int* stack_depth = nullptr)
507       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
508 
509   void VisitRoots(RootVisitor* visitor) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
510 
511   ALWAYS_INLINE void VerifyStack() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
512 
513   //
514   // Offsets of various members of native Thread class, used by compiled code.
515   //
516 
517   template<size_t pointer_size>
ThinLockIdOffset()518   static ThreadOffset<pointer_size> ThinLockIdOffset() {
519     return ThreadOffset<pointer_size>(
520         OFFSETOF_MEMBER(Thread, tls32_) +
521         OFFSETOF_MEMBER(tls_32bit_sized_values, thin_lock_thread_id));
522   }
523 
524   template<size_t pointer_size>
ThreadFlagsOffset()525   static ThreadOffset<pointer_size> ThreadFlagsOffset() {
526     return ThreadOffset<pointer_size>(
527         OFFSETOF_MEMBER(Thread, tls32_) +
528         OFFSETOF_MEMBER(tls_32bit_sized_values, state_and_flags));
529   }
530 
531  private:
532   template<size_t pointer_size>
ThreadOffsetFromTlsPtr(size_t tls_ptr_offset)533   static ThreadOffset<pointer_size> ThreadOffsetFromTlsPtr(size_t tls_ptr_offset) {
534     size_t base = OFFSETOF_MEMBER(Thread, tlsPtr_);
535     size_t scale;
536     size_t shrink;
537     if (pointer_size == sizeof(void*)) {
538       scale = 1;
539       shrink = 1;
540     } else if (pointer_size > sizeof(void*)) {
541       scale = pointer_size / sizeof(void*);
542       shrink = 1;
543     } else {
544       DCHECK_GT(sizeof(void*), pointer_size);
545       scale = 1;
546       shrink = sizeof(void*) / pointer_size;
547     }
548     return ThreadOffset<pointer_size>(base + ((tls_ptr_offset * scale) / shrink));
549   }
550 
551  public:
QuickEntryPointOffsetWithSize(size_t quick_entrypoint_offset,size_t pointer_size)552   static uint32_t QuickEntryPointOffsetWithSize(size_t quick_entrypoint_offset,
553                                                 size_t pointer_size) {
554     DCHECK(pointer_size == 4 || pointer_size == 8) << pointer_size;
555     if (pointer_size == 4) {
556       return QuickEntryPointOffset<4>(quick_entrypoint_offset).Uint32Value();
557     } else {
558       return QuickEntryPointOffset<8>(quick_entrypoint_offset).Uint32Value();
559     }
560   }
561 
562   template<size_t pointer_size>
QuickEntryPointOffset(size_t quick_entrypoint_offset)563   static ThreadOffset<pointer_size> QuickEntryPointOffset(size_t quick_entrypoint_offset) {
564     return ThreadOffsetFromTlsPtr<pointer_size>(
565         OFFSETOF_MEMBER(tls_ptr_sized_values, quick_entrypoints) + quick_entrypoint_offset);
566   }
567 
568   template<size_t pointer_size>
InterpreterEntryPointOffset(size_t interp_entrypoint_offset)569   static ThreadOffset<pointer_size> InterpreterEntryPointOffset(size_t interp_entrypoint_offset) {
570     return ThreadOffsetFromTlsPtr<pointer_size>(
571         OFFSETOF_MEMBER(tls_ptr_sized_values, interpreter_entrypoints) + interp_entrypoint_offset);
572   }
573 
574   template<size_t pointer_size>
JniEntryPointOffset(size_t jni_entrypoint_offset)575   static ThreadOffset<pointer_size> JniEntryPointOffset(size_t jni_entrypoint_offset) {
576     return ThreadOffsetFromTlsPtr<pointer_size>(
577         OFFSETOF_MEMBER(tls_ptr_sized_values, jni_entrypoints) + jni_entrypoint_offset);
578   }
579 
580   template<size_t pointer_size>
SelfOffset()581   static ThreadOffset<pointer_size> SelfOffset() {
582     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values, self));
583   }
584 
585   template<size_t pointer_size>
ExceptionOffset()586   static ThreadOffset<pointer_size> ExceptionOffset() {
587     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values, exception));
588   }
589 
590   template<size_t pointer_size>
PeerOffset()591   static ThreadOffset<pointer_size> PeerOffset() {
592     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values, opeer));
593   }
594 
595 
596   template<size_t pointer_size>
CardTableOffset()597   static ThreadOffset<pointer_size> CardTableOffset() {
598     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values, card_table));
599   }
600 
601   template<size_t pointer_size>
ThreadSuspendTriggerOffset()602   static ThreadOffset<pointer_size> ThreadSuspendTriggerOffset() {
603     return ThreadOffsetFromTlsPtr<pointer_size>(
604         OFFSETOF_MEMBER(tls_ptr_sized_values, suspend_trigger));
605   }
606 
607   template<size_t pointer_size>
ThreadLocalPosOffset()608   static ThreadOffset<pointer_size> ThreadLocalPosOffset() {
609     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values, thread_local_pos));
610   }
611 
612   template<size_t pointer_size>
ThreadLocalEndOffset()613   static ThreadOffset<pointer_size> ThreadLocalEndOffset() {
614     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values, thread_local_end));
615   }
616 
617   template<size_t pointer_size>
ThreadLocalObjectsOffset()618   static ThreadOffset<pointer_size> ThreadLocalObjectsOffset() {
619     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values, thread_local_objects));
620   }
621 
622   // Size of stack less any space reserved for stack overflow
GetStackSize()623   size_t GetStackSize() const {
624     return tlsPtr_.stack_size - (tlsPtr_.stack_end - tlsPtr_.stack_begin);
625   }
626 
GetStackEndForInterpreter(bool implicit_overflow_check)627   uint8_t* GetStackEndForInterpreter(bool implicit_overflow_check) const {
628     if (implicit_overflow_check) {
629       // The interpreter needs the extra overflow bytes that stack_end does
630       // not include.
631       return tlsPtr_.stack_end + GetStackOverflowReservedBytes(kRuntimeISA);
632     } else {
633       return tlsPtr_.stack_end;
634     }
635   }
636 
GetStackEnd()637   uint8_t* GetStackEnd() const {
638     return tlsPtr_.stack_end;
639   }
640 
641   // Set the stack end to that to be used during a stack overflow
642   void SetStackEndForStackOverflow() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
643 
644   // Set the stack end to that to be used during regular execution
ResetDefaultStackEnd()645   void ResetDefaultStackEnd() {
646     // Our stacks grow down, so we want stack_end_ to be near there, but reserving enough room
647     // to throw a StackOverflowError.
648     tlsPtr_.stack_end = tlsPtr_.stack_begin + GetStackOverflowReservedBytes(kRuntimeISA);
649   }
650 
651   // Install the protected region for implicit stack checks.
652   void InstallImplicitProtection();
653 
IsHandlingStackOverflow()654   bool IsHandlingStackOverflow() const {
655     return tlsPtr_.stack_end == tlsPtr_.stack_begin;
656   }
657 
658   template<size_t pointer_size>
StackEndOffset()659   static ThreadOffset<pointer_size> StackEndOffset() {
660     return ThreadOffsetFromTlsPtr<pointer_size>(
661         OFFSETOF_MEMBER(tls_ptr_sized_values, stack_end));
662   }
663 
664   template<size_t pointer_size>
JniEnvOffset()665   static ThreadOffset<pointer_size> JniEnvOffset() {
666     return ThreadOffsetFromTlsPtr<pointer_size>(
667         OFFSETOF_MEMBER(tls_ptr_sized_values, jni_env));
668   }
669 
670   template<size_t pointer_size>
TopOfManagedStackOffset()671   static ThreadOffset<pointer_size> TopOfManagedStackOffset() {
672     return ThreadOffsetFromTlsPtr<pointer_size>(
673         OFFSETOF_MEMBER(tls_ptr_sized_values, managed_stack) +
674         ManagedStack::TopQuickFrameOffset());
675   }
676 
GetManagedStack()677   const ManagedStack* GetManagedStack() const {
678     return &tlsPtr_.managed_stack;
679   }
680 
681   // Linked list recording fragments of managed stack.
PushManagedStackFragment(ManagedStack * fragment)682   void PushManagedStackFragment(ManagedStack* fragment) {
683     tlsPtr_.managed_stack.PushManagedStackFragment(fragment);
684   }
PopManagedStackFragment(const ManagedStack & fragment)685   void PopManagedStackFragment(const ManagedStack& fragment) {
686     tlsPtr_.managed_stack.PopManagedStackFragment(fragment);
687   }
688 
PushShadowFrame(ShadowFrame * new_top_frame)689   ShadowFrame* PushShadowFrame(ShadowFrame* new_top_frame) {
690     return tlsPtr_.managed_stack.PushShadowFrame(new_top_frame);
691   }
692 
PopShadowFrame()693   ShadowFrame* PopShadowFrame() {
694     return tlsPtr_.managed_stack.PopShadowFrame();
695   }
696 
697   template<size_t pointer_size>
TopShadowFrameOffset()698   static ThreadOffset<pointer_size> TopShadowFrameOffset() {
699     return ThreadOffsetFromTlsPtr<pointer_size>(
700         OFFSETOF_MEMBER(tls_ptr_sized_values, managed_stack) +
701         ManagedStack::TopShadowFrameOffset());
702   }
703 
704   // Number of references allocated in JNI ShadowFrames on this thread.
NumJniShadowFrameReferences()705   size_t NumJniShadowFrameReferences() const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
706     return tlsPtr_.managed_stack.NumJniShadowFrameReferences();
707   }
708 
709   // Number of references in handle scope on this thread.
710   size_t NumHandleReferences();
711 
712   // Number of references allocated in handle scopes & JNI shadow frames on this thread.
NumStackReferences()713   size_t NumStackReferences() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
714     return NumHandleReferences() + NumJniShadowFrameReferences();
715   }
716 
717   // Is the given obj in this thread's stack indirect reference table?
718   bool HandleScopeContains(jobject obj) const;
719 
720   void HandleScopeVisitRoots(RootVisitor* visitor, uint32_t thread_id)
721       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
722 
GetTopHandleScope()723   HandleScope* GetTopHandleScope() {
724     return tlsPtr_.top_handle_scope;
725   }
726 
PushHandleScope(HandleScope * handle_scope)727   void PushHandleScope(HandleScope* handle_scope) {
728     DCHECK_EQ(handle_scope->GetLink(), tlsPtr_.top_handle_scope);
729     tlsPtr_.top_handle_scope = handle_scope;
730   }
731 
PopHandleScope()732   HandleScope* PopHandleScope() {
733     HandleScope* handle_scope = tlsPtr_.top_handle_scope;
734     DCHECK(handle_scope != nullptr);
735     tlsPtr_.top_handle_scope = tlsPtr_.top_handle_scope->GetLink();
736     return handle_scope;
737   }
738 
739   template<size_t pointer_size>
TopHandleScopeOffset()740   static ThreadOffset<pointer_size> TopHandleScopeOffset() {
741     return ThreadOffsetFromTlsPtr<pointer_size>(OFFSETOF_MEMBER(tls_ptr_sized_values,
742                                                                 top_handle_scope));
743   }
744 
GetInvokeReq()745   DebugInvokeReq* GetInvokeReq() const {
746     return tlsPtr_.debug_invoke_req;
747   }
748 
GetSingleStepControl()749   SingleStepControl* GetSingleStepControl() const {
750     return tlsPtr_.single_step_control;
751   }
752 
753   // Indicates whether this thread is ready to invoke a method for debugging. This
754   // is only true if the thread has been suspended by a debug event.
IsReadyForDebugInvoke()755   bool IsReadyForDebugInvoke() const {
756     return tls32_.ready_for_debug_invoke;
757   }
758 
SetReadyForDebugInvoke(bool ready)759   void SetReadyForDebugInvoke(bool ready) {
760     tls32_.ready_for_debug_invoke = ready;
761   }
762 
IsDebugMethodEntry()763   bool IsDebugMethodEntry() const {
764     return tls32_.debug_method_entry_;
765   }
766 
SetDebugMethodEntry()767   void SetDebugMethodEntry() {
768     tls32_.debug_method_entry_ = true;
769   }
770 
ClearDebugMethodEntry()771   void ClearDebugMethodEntry() {
772     tls32_.debug_method_entry_ = false;
773   }
774 
775   // Activates single step control for debugging. The thread takes the
776   // ownership of the given SingleStepControl*. It is deleted by a call
777   // to DeactivateSingleStepControl or upon thread destruction.
778   void ActivateSingleStepControl(SingleStepControl* ssc);
779 
780   // Deactivates single step control for debugging.
781   void DeactivateSingleStepControl();
782 
783   // Sets debug invoke request for debugging. When the thread is resumed,
784   // it executes the method described by this request then sends the reply
785   // before suspending itself. The thread takes the ownership of the given
786   // DebugInvokeReq*. It is deleted by a call to ClearDebugInvokeReq.
787   void SetDebugInvokeReq(DebugInvokeReq* req);
788 
789   // Clears debug invoke request for debugging. When the thread completes
790   // method invocation, it deletes its debug invoke request and suspends
791   // itself.
792   void ClearDebugInvokeReq();
793 
794   // Returns the fake exception used to activate deoptimization.
GetDeoptimizationException()795   static mirror::Throwable* GetDeoptimizationException() {
796     return reinterpret_cast<mirror::Throwable*>(-1);
797   }
798 
799   // Currently deoptimization invokes verifier which can trigger class loading
800   // and execute Java code, so there might be nested deoptimizations happening.
801   // We need to save the ongoing deoptimization shadow frames and return
802   // values on stacks.
SetDeoptimizationReturnValue(const JValue & ret_val,bool is_reference)803   void SetDeoptimizationReturnValue(const JValue& ret_val, bool is_reference) {
804     tls64_.deoptimization_return_value.SetJ(ret_val.GetJ());
805     tls32_.deoptimization_return_value_is_reference = is_reference;
806   }
IsDeoptimizationReturnValueReference()807   bool IsDeoptimizationReturnValueReference() {
808     return tls32_.deoptimization_return_value_is_reference;
809   }
ClearDeoptimizationReturnValue()810   void ClearDeoptimizationReturnValue() {
811     tls64_.deoptimization_return_value.SetJ(0);
812     tls32_.deoptimization_return_value_is_reference = false;
813   }
814   void PushAndClearDeoptimizationReturnValue();
815   JValue PopDeoptimizationReturnValue();
816   void PushStackedShadowFrame(ShadowFrame* sf, StackedShadowFrameType type);
817   ShadowFrame* PopStackedShadowFrame(StackedShadowFrameType type);
818 
GetInstrumentationStack()819   std::deque<instrumentation::InstrumentationStackFrame>* GetInstrumentationStack() {
820     return tlsPtr_.instrumentation_stack;
821   }
822 
GetStackTraceSample()823   std::vector<ArtMethod*>* GetStackTraceSample() const {
824     return tlsPtr_.stack_trace_sample;
825   }
826 
SetStackTraceSample(std::vector<ArtMethod * > * sample)827   void SetStackTraceSample(std::vector<ArtMethod*>* sample) {
828     tlsPtr_.stack_trace_sample = sample;
829   }
830 
GetTraceClockBase()831   uint64_t GetTraceClockBase() const {
832     return tls64_.trace_clock_base;
833   }
834 
SetTraceClockBase(uint64_t clock_base)835   void SetTraceClockBase(uint64_t clock_base) {
836     tls64_.trace_clock_base = clock_base;
837   }
838 
GetHeldMutex(LockLevel level)839   BaseMutex* GetHeldMutex(LockLevel level) const {
840     return tlsPtr_.held_mutexes[level];
841   }
842 
SetHeldMutex(LockLevel level,BaseMutex * mutex)843   void SetHeldMutex(LockLevel level, BaseMutex* mutex) {
844     tlsPtr_.held_mutexes[level] = mutex;
845   }
846 
847   void RunCheckpointFunction();
848 
ReadFlag(ThreadFlag flag)849   bool ReadFlag(ThreadFlag flag) const {
850     return (tls32_.state_and_flags.as_struct.flags & flag) != 0;
851   }
852 
TestAllFlags()853   bool TestAllFlags() const {
854     return (tls32_.state_and_flags.as_struct.flags != 0);
855   }
856 
AtomicSetFlag(ThreadFlag flag)857   void AtomicSetFlag(ThreadFlag flag) {
858     tls32_.state_and_flags.as_atomic_int.FetchAndOrSequentiallyConsistent(flag);
859   }
860 
AtomicClearFlag(ThreadFlag flag)861   void AtomicClearFlag(ThreadFlag flag) {
862     tls32_.state_and_flags.as_atomic_int.FetchAndAndSequentiallyConsistent(-1 ^ flag);
863   }
864 
865   void ResetQuickAllocEntryPointsForThread();
866 
867   // Returns the remaining space in the TLAB.
868   size_t TlabSize() const;
869   // Doesn't check that there is room.
870   mirror::Object* AllocTlab(size_t bytes);
871   void SetTlab(uint8_t* start, uint8_t* end);
872   bool HasTlab() const;
GetTlabStart()873   uint8_t* GetTlabStart() {
874     return tlsPtr_.thread_local_start;
875   }
GetTlabPos()876   uint8_t* GetTlabPos() {
877     return tlsPtr_.thread_local_pos;
878   }
879 
880   // Remove the suspend trigger for this thread by making the suspend_trigger_ TLS value
881   // equal to a valid pointer.
882   // TODO: does this need to atomic?  I don't think so.
RemoveSuspendTrigger()883   void RemoveSuspendTrigger() {
884     tlsPtr_.suspend_trigger = reinterpret_cast<uintptr_t*>(&tlsPtr_.suspend_trigger);
885   }
886 
887   // Trigger a suspend check by making the suspend_trigger_ TLS value an invalid pointer.
888   // The next time a suspend check is done, it will load from the value at this address
889   // and trigger a SIGSEGV.
TriggerSuspend()890   void TriggerSuspend() {
891     tlsPtr_.suspend_trigger = nullptr;
892   }
893 
894 
895   // Push an object onto the allocation stack.
896   bool PushOnThreadLocalAllocationStack(mirror::Object* obj)
897       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
898 
899   // Set the thread local allocation pointers to the given pointers.
900   void SetThreadLocalAllocationStack(StackReference<mirror::Object>* start,
901                                      StackReference<mirror::Object>* end);
902 
903   // Resets the thread local allocation pointers.
904   void RevokeThreadLocalAllocationStack();
905 
GetThreadLocalBytesAllocated()906   size_t GetThreadLocalBytesAllocated() const {
907     return tlsPtr_.thread_local_end - tlsPtr_.thread_local_start;
908   }
909 
GetThreadLocalObjectsAllocated()910   size_t GetThreadLocalObjectsAllocated() const {
911     return tlsPtr_.thread_local_objects;
912   }
913 
GetRosAllocRun(size_t index)914   void* GetRosAllocRun(size_t index) const {
915     return tlsPtr_.rosalloc_runs[index];
916   }
917 
SetRosAllocRun(size_t index,void * run)918   void SetRosAllocRun(size_t index, void* run) {
919     tlsPtr_.rosalloc_runs[index] = run;
920   }
921 
922   void ProtectStack();
923   bool UnprotectStack();
924 
NoteSignalBeingHandled()925   void NoteSignalBeingHandled() {
926     if (tls32_.handling_signal_) {
927       LOG(FATAL) << "Detected signal while processing a signal";
928     }
929     tls32_.handling_signal_ = true;
930   }
931 
NoteSignalHandlerDone()932   void NoteSignalHandlerDone() {
933     tls32_.handling_signal_ = false;
934   }
935 
GetNestedSignalState()936   jmp_buf* GetNestedSignalState() {
937     return tlsPtr_.nested_signal_state;
938   }
939 
IsSuspendedAtSuspendCheck()940   bool IsSuspendedAtSuspendCheck() const {
941     return tls32_.suspended_at_suspend_check;
942   }
943 
944   void PushVerifier(verifier::MethodVerifier* verifier);
945   void PopVerifier(verifier::MethodVerifier* verifier);
946 
947   void InitStringEntryPoints();
948 
949  private:
950   explicit Thread(bool daemon);
951   ~Thread() LOCKS_EXCLUDED(Locks::mutator_lock_,
952                            Locks::thread_suspend_count_lock_);
953   void Destroy();
954 
955   void CreatePeer(const char* name, bool as_daemon, jobject thread_group);
956 
957   template<bool kTransactionActive>
958   void InitPeer(ScopedObjectAccess& soa, jboolean thread_is_daemon, jobject thread_group,
959                 jobject thread_name, jint thread_priority)
960       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
961 
962   // Avoid use, callers should use SetState. Used only by SignalCatcher::HandleSigQuit, ~Thread and
963   // Dbg::Disconnected.
SetStateUnsafe(ThreadState new_state)964   ThreadState SetStateUnsafe(ThreadState new_state) {
965     ThreadState old_state = GetState();
966     tls32_.state_and_flags.as_struct.state = new_state;
967     return old_state;
968   }
969 
970   void VerifyStackImpl() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
971 
972   void DumpState(std::ostream& os) const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
973   void DumpStack(std::ostream& os) const
974       LOCKS_EXCLUDED(Locks::thread_suspend_count_lock_)
975       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
976 
977   // Out-of-line conveniences for debugging in gdb.
978   static Thread* CurrentFromGdb();  // Like Thread::Current.
979   // Like Thread::Dump(std::cerr).
980   void DumpFromGdb() const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
981 
982   static void* CreateCallback(void* arg);
983 
984   void HandleUncaughtExceptions(ScopedObjectAccess& soa)
985       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
986   void RemoveFromThreadGroup(ScopedObjectAccess& soa) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
987 
988   // Initialize a thread.
989   //
990   // The third parameter is not mandatory. If given, the thread will use this JNIEnvExt. In case
991   // Init succeeds, this means the thread takes ownership of it. If Init fails, it is the caller's
992   // responsibility to destroy the given JNIEnvExt. If the parameter is null, Init will try to
993   // create a JNIEnvExt on its own (and potentially fail at that stage, indicated by a return value
994   // of false).
995   bool Init(ThreadList*, JavaVMExt*, JNIEnvExt* jni_env_ext = nullptr)
996       EXCLUSIVE_LOCKS_REQUIRED(Locks::runtime_shutdown_lock_);
997   void InitCardTable();
998   void InitCpu();
999   void CleanupCpu();
1000   void InitTlsEntryPoints();
1001   void InitTid();
1002   void InitPthreadKeySelf();
1003   bool InitStackHwm();
1004 
1005   void SetUpAlternateSignalStack();
1006   void TearDownAlternateSignalStack();
1007 
1008   // 32 bits of atomically changed state and flags. Keeping as 32 bits allows and atomic CAS to
1009   // change from being Suspended to Runnable without a suspend request occurring.
1010   union PACKED(4) StateAndFlags {
StateAndFlags()1011     StateAndFlags() {}
1012     struct PACKED(4) {
1013       // Bitfield of flag values. Must be changed atomically so that flag values aren't lost. See
1014       // ThreadFlags for bit field meanings.
1015       volatile uint16_t flags;
1016       // Holds the ThreadState. May be changed non-atomically between Suspended (ie not Runnable)
1017       // transitions. Changing to Runnable requires that the suspend_request be part of the atomic
1018       // operation. If a thread is suspended and a suspend_request is present, a thread may not
1019       // change to Runnable as a GC or other operation is in progress.
1020       volatile uint16_t state;
1021     } as_struct;
1022     AtomicInteger as_atomic_int;
1023     volatile int32_t as_int;
1024 
1025    private:
1026     // gcc does not handle struct with volatile member assignments correctly.
1027     // See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47409
1028     DISALLOW_COPY_AND_ASSIGN(StateAndFlags);
1029   };
1030   static_assert(sizeof(StateAndFlags) == sizeof(int32_t), "Weird state_and_flags size");
1031 
1032   static void ThreadExitCallback(void* arg);
1033 
1034   // Maximum number of checkpoint functions.
1035   static constexpr uint32_t kMaxCheckpoints = 3;
1036 
1037   // Has Thread::Startup been called?
1038   static bool is_started_;
1039 
1040   // TLS key used to retrieve the Thread*.
1041   static pthread_key_t pthread_key_self_;
1042 
1043   // Used to notify threads that they should attempt to resume, they will suspend again if
1044   // their suspend count is > 0.
1045   static ConditionVariable* resume_cond_ GUARDED_BY(Locks::thread_suspend_count_lock_);
1046 
1047   /***********************************************************************************************/
1048   // Thread local storage. Fields are grouped by size to enable 32 <-> 64 searching to account for
1049   // pointer size differences. To encourage shorter encoding, more frequently used values appear
1050   // first if possible.
1051   /***********************************************************************************************/
1052 
1053   struct PACKED(4) tls_32bit_sized_values {
1054     // We have no control over the size of 'bool', but want our boolean fields
1055     // to be 4-byte quantities.
1056     typedef uint32_t bool32_t;
1057 
tls_32bit_sized_valuestls_32bit_sized_values1058     explicit tls_32bit_sized_values(bool is_daemon) :
1059       suspend_count(0), debug_suspend_count(0), thin_lock_thread_id(0), tid(0),
1060       daemon(is_daemon), throwing_OutOfMemoryError(false), no_thread_suspension(0),
1061       thread_exit_check_count(0), handling_signal_(false),
1062       deoptimization_return_value_is_reference(false), suspended_at_suspend_check(false),
1063       ready_for_debug_invoke(false), debug_method_entry_(false) {
1064     }
1065 
1066     union StateAndFlags state_and_flags;
1067     static_assert(sizeof(union StateAndFlags) == sizeof(int32_t),
1068                   "Size of state_and_flags and int32 are different");
1069 
1070     // A non-zero value is used to tell the current thread to enter a safe point
1071     // at the next poll.
1072     int suspend_count GUARDED_BY(Locks::thread_suspend_count_lock_);
1073 
1074     // How much of 'suspend_count_' is by request of the debugger, used to set things right
1075     // when the debugger detaches. Must be <= suspend_count_.
1076     int debug_suspend_count GUARDED_BY(Locks::thread_suspend_count_lock_);
1077 
1078     // Thin lock thread id. This is a small integer used by the thin lock implementation.
1079     // This is not to be confused with the native thread's tid, nor is it the value returned
1080     // by java.lang.Thread.getId --- this is a distinct value, used only for locking. One
1081     // important difference between this id and the ids visible to managed code is that these
1082     // ones get reused (to ensure that they fit in the number of bits available).
1083     uint32_t thin_lock_thread_id;
1084 
1085     // System thread id.
1086     uint32_t tid;
1087 
1088     // Is the thread a daemon?
1089     const bool32_t daemon;
1090 
1091     // A boolean telling us whether we're recursively throwing OOME.
1092     bool32_t throwing_OutOfMemoryError;
1093 
1094     // A positive value implies we're in a region where thread suspension isn't expected.
1095     uint32_t no_thread_suspension;
1096 
1097     // How many times has our pthread key's destructor been called?
1098     uint32_t thread_exit_check_count;
1099 
1100     // True if signal is being handled by this thread.
1101     bool32_t handling_signal_;
1102 
1103     // True if the return value for interpreter after deoptimization is a reference.
1104     // For gc purpose.
1105     bool32_t deoptimization_return_value_is_reference;
1106 
1107     // True if the thread is suspended in FullSuspendCheck(). This is
1108     // used to distinguish runnable threads that are suspended due to
1109     // a normal suspend check from other threads.
1110     bool32_t suspended_at_suspend_check;
1111 
1112     // True if the thread has been suspended by a debugger event. This is
1113     // used to invoke method from the debugger which is only allowed when
1114     // the thread is suspended by an event.
1115     bool32_t ready_for_debug_invoke;
1116 
1117     // True if the thread enters a method. This is used to detect method entry
1118     // event for the debugger.
1119     bool32_t debug_method_entry_;
1120   } tls32_;
1121 
1122   struct PACKED(8) tls_64bit_sized_values {
tls_64bit_sized_valuestls_64bit_sized_values1123     tls_64bit_sized_values() : trace_clock_base(0), deoptimization_return_value() {
1124     }
1125 
1126     // The clock base used for tracing.
1127     uint64_t trace_clock_base;
1128 
1129     // Return value used by deoptimization.
1130     JValue deoptimization_return_value;
1131 
1132     RuntimeStats stats;
1133   } tls64_;
1134 
1135   struct PACKED(4) tls_ptr_sized_values {
tls_ptr_sized_valuestls_ptr_sized_values1136       tls_ptr_sized_values() : card_table(nullptr), exception(nullptr), stack_end(nullptr),
1137       managed_stack(), suspend_trigger(nullptr), jni_env(nullptr), tmp_jni_env(nullptr),
1138       self(nullptr), opeer(nullptr), jpeer(nullptr), stack_begin(nullptr), stack_size(0),
1139       stack_trace_sample(nullptr), wait_next(nullptr), monitor_enter_object(nullptr),
1140       top_handle_scope(nullptr), class_loader_override(nullptr), long_jump_context(nullptr),
1141       instrumentation_stack(nullptr), debug_invoke_req(nullptr), single_step_control(nullptr),
1142       stacked_shadow_frame_record(nullptr), deoptimization_return_value_stack(nullptr),
1143       name(nullptr), pthread_self(0),
1144       last_no_thread_suspension_cause(nullptr), thread_local_start(nullptr),
1145       thread_local_pos(nullptr), thread_local_end(nullptr), thread_local_objects(0),
1146       thread_local_alloc_stack_top(nullptr), thread_local_alloc_stack_end(nullptr),
1147       nested_signal_state(nullptr), flip_function(nullptr), method_verifier(nullptr) {
1148       std::fill(held_mutexes, held_mutexes + kLockLevelCount, nullptr);
1149     }
1150 
1151     // The biased card table, see CardTable for details.
1152     uint8_t* card_table;
1153 
1154     // The pending exception or null.
1155     mirror::Throwable* exception;
1156 
1157     // The end of this thread's stack. This is the lowest safely-addressable address on the stack.
1158     // We leave extra space so there's room for the code that throws StackOverflowError.
1159     uint8_t* stack_end;
1160 
1161     // The top of the managed stack often manipulated directly by compiler generated code.
1162     ManagedStack managed_stack;
1163 
1164     // In certain modes, setting this to 0 will trigger a SEGV and thus a suspend check.  It is
1165     // normally set to the address of itself.
1166     uintptr_t* suspend_trigger;
1167 
1168     // Every thread may have an associated JNI environment
1169     JNIEnvExt* jni_env;
1170 
1171     // Temporary storage to transfer a pre-allocated JNIEnvExt from the creating thread to the
1172     // created thread.
1173     JNIEnvExt* tmp_jni_env;
1174 
1175     // Initialized to "this". On certain architectures (such as x86) reading off of Thread::Current
1176     // is easy but getting the address of Thread::Current is hard. This field can be read off of
1177     // Thread::Current to give the address.
1178     Thread* self;
1179 
1180     // Our managed peer (an instance of java.lang.Thread). The jobject version is used during thread
1181     // start up, until the thread is registered and the local opeer_ is used.
1182     mirror::Object* opeer;
1183     jobject jpeer;
1184 
1185     // The "lowest addressable byte" of the stack.
1186     uint8_t* stack_begin;
1187 
1188     // Size of the stack.
1189     size_t stack_size;
1190 
1191     // Pointer to previous stack trace captured by sampling profiler.
1192     std::vector<ArtMethod*>* stack_trace_sample;
1193 
1194     // The next thread in the wait set this thread is part of or null if not waiting.
1195     Thread* wait_next;
1196 
1197     // If we're blocked in MonitorEnter, this is the object we're trying to lock.
1198     mirror::Object* monitor_enter_object;
1199 
1200     // Top of linked list of handle scopes or null for none.
1201     HandleScope* top_handle_scope;
1202 
1203     // Needed to get the right ClassLoader in JNI_OnLoad, but also
1204     // useful for testing.
1205     jobject class_loader_override;
1206 
1207     // Thread local, lazily allocated, long jump context. Used to deliver exceptions.
1208     Context* long_jump_context;
1209 
1210     // Additional stack used by method instrumentation to store method and return pc values.
1211     // Stored as a pointer since std::deque is not PACKED.
1212     std::deque<instrumentation::InstrumentationStackFrame>* instrumentation_stack;
1213 
1214     // JDWP invoke-during-breakpoint support.
1215     DebugInvokeReq* debug_invoke_req;
1216 
1217     // JDWP single-stepping support.
1218     SingleStepControl* single_step_control;
1219 
1220     // For gc purpose, a shadow frame record stack that keeps track of:
1221     // 1) shadow frames under construction.
1222     // 2) deoptimization shadow frames.
1223     StackedShadowFrameRecord* stacked_shadow_frame_record;
1224 
1225     // Deoptimization return value record stack.
1226     DeoptimizationReturnValueRecord* deoptimization_return_value_stack;
1227 
1228     // A cached copy of the java.lang.Thread's name.
1229     std::string* name;
1230 
1231     // A cached pthread_t for the pthread underlying this Thread*.
1232     pthread_t pthread_self;
1233 
1234     // If no_thread_suspension_ is > 0, what is causing that assertion.
1235     const char* last_no_thread_suspension_cause;
1236 
1237     // Pending checkpoint function or null if non-pending. Installation guarding by
1238     // Locks::thread_suspend_count_lock_.
1239     Closure* checkpoint_functions[kMaxCheckpoints];
1240 
1241     // Entrypoint function pointers.
1242     // TODO: move this to more of a global offset table model to avoid per-thread duplication.
1243     InterpreterEntryPoints interpreter_entrypoints;
1244     JniEntryPoints jni_entrypoints;
1245     QuickEntryPoints quick_entrypoints;
1246 
1247     // Thread-local allocation pointer.
1248     uint8_t* thread_local_start;
1249     uint8_t* thread_local_pos;
1250     uint8_t* thread_local_end;
1251     size_t thread_local_objects;
1252 
1253     // There are RosAlloc::kNumThreadLocalSizeBrackets thread-local size brackets per thread.
1254     void* rosalloc_runs[kNumRosAllocThreadLocalSizeBrackets];
1255 
1256     // Thread-local allocation stack data/routines.
1257     StackReference<mirror::Object>* thread_local_alloc_stack_top;
1258     StackReference<mirror::Object>* thread_local_alloc_stack_end;
1259 
1260     // Support for Mutex lock hierarchy bug detection.
1261     BaseMutex* held_mutexes[kLockLevelCount];
1262 
1263     // Recorded thread state for nested signals.
1264     jmp_buf* nested_signal_state;
1265 
1266     // The function used for thread flip.
1267     Closure* flip_function;
1268 
1269     // Current method verifier, used for root marking.
1270     verifier::MethodVerifier* method_verifier;
1271   } tlsPtr_;
1272 
1273   // Guards the 'interrupted_' and 'wait_monitor_' members.
1274   Mutex* wait_mutex_ DEFAULT_MUTEX_ACQUIRED_AFTER;
1275 
1276   // Condition variable waited upon during a wait.
1277   ConditionVariable* wait_cond_ GUARDED_BY(wait_mutex_);
1278   // Pointer to the monitor lock we're currently waiting on or null if not waiting.
1279   Monitor* wait_monitor_ GUARDED_BY(wait_mutex_);
1280 
1281   // Thread "interrupted" status; stays raised until queried or thrown.
1282   bool interrupted_ GUARDED_BY(wait_mutex_);
1283 
1284   friend class Dbg;  // For SetStateUnsafe.
1285   friend class gc::collector::SemiSpace;  // For getting stack traces.
1286   friend class Runtime;  // For CreatePeer.
1287   friend class QuickExceptionHandler;  // For dumping the stack.
1288   friend class ScopedThreadStateChange;
1289   friend class StubTest;  // For accessing entrypoints.
1290   friend class ThreadList;  // For ~Thread and Destroy.
1291 
1292   friend class EntrypointsOrderTest;  // To test the order of tls entries.
1293 
1294   DISALLOW_COPY_AND_ASSIGN(Thread);
1295 };
1296 
1297 class ScopedAssertNoThreadSuspension {
1298  public:
ScopedAssertNoThreadSuspension(Thread * self,const char * cause)1299   ScopedAssertNoThreadSuspension(Thread* self, const char* cause)
1300       : self_(self), old_cause_(self->StartAssertNoThreadSuspension(cause)) {
1301   }
~ScopedAssertNoThreadSuspension()1302   ~ScopedAssertNoThreadSuspension() {
1303     self_->EndAssertNoThreadSuspension(old_cause_);
1304   }
Self()1305   Thread* Self() {
1306     return self_;
1307   }
1308 
1309  private:
1310   Thread* const self_;
1311   const char* const old_cause_;
1312 };
1313 
1314 class ScopedStackedShadowFramePusher {
1315  public:
ScopedStackedShadowFramePusher(Thread * self,ShadowFrame * sf,StackedShadowFrameType type)1316   ScopedStackedShadowFramePusher(Thread* self, ShadowFrame* sf, StackedShadowFrameType type)
1317     : self_(self), type_(type) {
1318     self_->PushStackedShadowFrame(sf, type);
1319   }
~ScopedStackedShadowFramePusher()1320   ~ScopedStackedShadowFramePusher() {
1321     self_->PopStackedShadowFrame(type_);
1322   }
1323 
1324  private:
1325   Thread* const self_;
1326   const StackedShadowFrameType type_;
1327 
1328   DISALLOW_COPY_AND_ASSIGN(ScopedStackedShadowFramePusher);
1329 };
1330 
1331 std::ostream& operator<<(std::ostream& os, const Thread& thread);
1332 std::ostream& operator<<(std::ostream& os, const StackedShadowFrameType& thread);
1333 
1334 }  // namespace art
1335 
1336 #endif  // ART_RUNTIME_THREAD_H_
1337