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