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#include "thread.h" 18 19#if !defined(__APPLE__) 20#include <sched.h> 21#endif 22 23#include <pthread.h> 24#include <signal.h> 25#include <sys/resource.h> 26#include <sys/time.h> 27 28#include <algorithm> 29#include <bitset> 30#include <cerrno> 31#include <iostream> 32#include <list> 33#include <sstream> 34 35#include "android-base/stringprintf.h" 36 37#include "arch/context.h" 38#include "art_field-inl.h" 39#include "art_method-inl.h" 40#include "base/bit_utils.h" 41#include "base/memory_tool.h" 42#include "base/mutex.h" 43#include "base/timing_logger.h" 44#include "base/to_str.h" 45#include "base/systrace.h" 46#include "class_linker-inl.h" 47#include "debugger.h" 48#include "dex_file-inl.h" 49#include "dex_file_annotations.h" 50#include "entrypoints/entrypoint_utils.h" 51#include "entrypoints/quick/quick_alloc_entrypoints.h" 52#include "gc/accounting/card_table-inl.h" 53#include "gc/accounting/heap_bitmap-inl.h" 54#include "gc/allocator/rosalloc.h" 55#include "gc/heap.h" 56#include "gc/space/space-inl.h" 57#include "handle_scope-inl.h" 58#include "indirect_reference_table-inl.h" 59#include "java_vm_ext.h" 60#include "jni_internal.h" 61#include "mirror/class_loader.h" 62#include "mirror/class-inl.h" 63#include "mirror/object_array-inl.h" 64#include "mirror/stack_trace_element.h" 65#include "monitor.h" 66#include "native_stack_dump.h" 67#include "nth_caller_visitor.h" 68#include "oat_quick_method_header.h" 69#include "obj_ptr-inl.h" 70#include "object_lock.h" 71#include "quick_exception_handler.h" 72#include "quick/quick_method_frame_info.h" 73#include "read_barrier-inl.h" 74#include "reflection.h" 75#include "runtime.h" 76#include "runtime_callbacks.h" 77#include "scoped_thread_state_change-inl.h" 78#include "ScopedLocalRef.h" 79#include "ScopedUtfChars.h" 80#include "stack.h" 81#include "stack_map.h" 82#include "thread_list.h" 83#include "thread-inl.h" 84#include "utils.h" 85#include "verifier/method_verifier.h" 86#include "verify_object.h" 87#include "well_known_classes.h" 88#include "interpreter/interpreter.h" 89 90#if ART_USE_FUTEXES 91#include "linux/futex.h" 92#include "sys/syscall.h" 93#ifndef SYS_futex 94#define SYS_futex __NR_futex 95#endif 96#endif // ART_USE_FUTEXES 97 98namespace art { 99 100using android::base::StringAppendV; 101using android::base::StringPrintf; 102 103extern "C" NO_RETURN void artDeoptimize(Thread* self); 104 105bool Thread::is_started_ = false; 106pthread_key_t Thread::pthread_key_self_; 107ConditionVariable* Thread::resume_cond_ = nullptr; 108const size_t Thread::kStackOverflowImplicitCheckSize = GetStackOverflowReservedBytes(kRuntimeISA); 109bool (*Thread::is_sensitive_thread_hook_)() = nullptr; 110Thread* Thread::jit_sensitive_thread_ = nullptr; 111 112static constexpr bool kVerifyImageObjectsMarked = kIsDebugBuild; 113 114// For implicit overflow checks we reserve an extra piece of memory at the bottom 115// of the stack (lowest memory). The higher portion of the memory 116// is protected against reads and the lower is available for use while 117// throwing the StackOverflow exception. 118constexpr size_t kStackOverflowProtectedSize = 4 * kMemoryToolStackGuardSizeScale * KB; 119 120static const char* kThreadNameDuringStartup = "<native thread without managed peer>"; 121 122void Thread::InitCardTable() { 123 tlsPtr_.card_table = Runtime::Current()->GetHeap()->GetCardTable()->GetBiasedBegin(); 124} 125 126static void UnimplementedEntryPoint() { 127 UNIMPLEMENTED(FATAL); 128} 129 130void InitEntryPoints(JniEntryPoints* jpoints, QuickEntryPoints* qpoints); 131void UpdateReadBarrierEntrypoints(QuickEntryPoints* qpoints, bool is_marking); 132 133void Thread::SetIsGcMarkingAndUpdateEntrypoints(bool is_marking) { 134 CHECK(kUseReadBarrier); 135 tls32_.is_gc_marking = is_marking; 136 UpdateReadBarrierEntrypoints(&tlsPtr_.quick_entrypoints, is_marking); 137 ResetQuickAllocEntryPointsForThread(is_marking); 138} 139 140void Thread::InitTlsEntryPoints() { 141 // Insert a placeholder so we can easily tell if we call an unimplemented entry point. 142 uintptr_t* begin = reinterpret_cast<uintptr_t*>(&tlsPtr_.jni_entrypoints); 143 uintptr_t* end = reinterpret_cast<uintptr_t*>( 144 reinterpret_cast<uint8_t*>(&tlsPtr_.quick_entrypoints) + sizeof(tlsPtr_.quick_entrypoints)); 145 for (uintptr_t* it = begin; it != end; ++it) { 146 *it = reinterpret_cast<uintptr_t>(UnimplementedEntryPoint); 147 } 148 InitEntryPoints(&tlsPtr_.jni_entrypoints, &tlsPtr_.quick_entrypoints); 149} 150 151void Thread::ResetQuickAllocEntryPointsForThread(bool is_marking) { 152 if (kUseReadBarrier && kRuntimeISA != kX86_64) { 153 // Allocation entrypoint switching is currently only implemented for X86_64. 154 is_marking = true; 155 } 156 ResetQuickAllocEntryPoints(&tlsPtr_.quick_entrypoints, is_marking); 157} 158 159class DeoptimizationContextRecord { 160 public: 161 DeoptimizationContextRecord(const JValue& ret_val, 162 bool is_reference, 163 bool from_code, 164 ObjPtr<mirror::Throwable> pending_exception, 165 DeoptimizationContextRecord* link) 166 : ret_val_(ret_val), 167 is_reference_(is_reference), 168 from_code_(from_code), 169 pending_exception_(pending_exception.Ptr()), 170 link_(link) {} 171 172 JValue GetReturnValue() const { return ret_val_; } 173 bool IsReference() const { return is_reference_; } 174 bool GetFromCode() const { return from_code_; } 175 ObjPtr<mirror::Throwable> GetPendingException() const { return pending_exception_; } 176 DeoptimizationContextRecord* GetLink() const { return link_; } 177 mirror::Object** GetReturnValueAsGCRoot() { 178 DCHECK(is_reference_); 179 return ret_val_.GetGCRoot(); 180 } 181 mirror::Object** GetPendingExceptionAsGCRoot() { 182 return reinterpret_cast<mirror::Object**>(&pending_exception_); 183 } 184 185 private: 186 // The value returned by the method at the top of the stack before deoptimization. 187 JValue ret_val_; 188 189 // Indicates whether the returned value is a reference. If so, the GC will visit it. 190 const bool is_reference_; 191 192 // Whether the context was created from an explicit deoptimization in the code. 193 const bool from_code_; 194 195 // The exception that was pending before deoptimization (or null if there was no pending 196 // exception). 197 mirror::Throwable* pending_exception_; 198 199 // A link to the previous DeoptimizationContextRecord. 200 DeoptimizationContextRecord* const link_; 201 202 DISALLOW_COPY_AND_ASSIGN(DeoptimizationContextRecord); 203}; 204 205class StackedShadowFrameRecord { 206 public: 207 StackedShadowFrameRecord(ShadowFrame* shadow_frame, 208 StackedShadowFrameType type, 209 StackedShadowFrameRecord* link) 210 : shadow_frame_(shadow_frame), 211 type_(type), 212 link_(link) {} 213 214 ShadowFrame* GetShadowFrame() const { return shadow_frame_; } 215 StackedShadowFrameType GetType() const { return type_; } 216 StackedShadowFrameRecord* GetLink() const { return link_; } 217 218 private: 219 ShadowFrame* const shadow_frame_; 220 const StackedShadowFrameType type_; 221 StackedShadowFrameRecord* const link_; 222 223 DISALLOW_COPY_AND_ASSIGN(StackedShadowFrameRecord); 224}; 225 226void Thread::PushDeoptimizationContext(const JValue& return_value, 227 bool is_reference, 228 bool from_code, 229 ObjPtr<mirror::Throwable> exception) { 230 DeoptimizationContextRecord* record = new DeoptimizationContextRecord( 231 return_value, 232 is_reference, 233 from_code, 234 exception, 235 tlsPtr_.deoptimization_context_stack); 236 tlsPtr_.deoptimization_context_stack = record; 237} 238 239void Thread::PopDeoptimizationContext(JValue* result, 240 ObjPtr<mirror::Throwable>* exception, 241 bool* from_code) { 242 AssertHasDeoptimizationContext(); 243 DeoptimizationContextRecord* record = tlsPtr_.deoptimization_context_stack; 244 tlsPtr_.deoptimization_context_stack = record->GetLink(); 245 result->SetJ(record->GetReturnValue().GetJ()); 246 *exception = record->GetPendingException(); 247 *from_code = record->GetFromCode(); 248 delete record; 249} 250 251void Thread::AssertHasDeoptimizationContext() { 252 CHECK(tlsPtr_.deoptimization_context_stack != nullptr) 253 << "No deoptimization context for thread " << *this; 254} 255 256void Thread::PushStackedShadowFrame(ShadowFrame* sf, StackedShadowFrameType type) { 257 StackedShadowFrameRecord* record = new StackedShadowFrameRecord( 258 sf, type, tlsPtr_.stacked_shadow_frame_record); 259 tlsPtr_.stacked_shadow_frame_record = record; 260} 261 262ShadowFrame* Thread::PopStackedShadowFrame(StackedShadowFrameType type, bool must_be_present) { 263 StackedShadowFrameRecord* record = tlsPtr_.stacked_shadow_frame_record; 264 if (must_be_present) { 265 DCHECK(record != nullptr); 266 } else { 267 if (record == nullptr || record->GetType() != type) { 268 return nullptr; 269 } 270 } 271 tlsPtr_.stacked_shadow_frame_record = record->GetLink(); 272 ShadowFrame* shadow_frame = record->GetShadowFrame(); 273 delete record; 274 return shadow_frame; 275} 276 277class FrameIdToShadowFrame { 278 public: 279 static FrameIdToShadowFrame* Create(size_t frame_id, 280 ShadowFrame* shadow_frame, 281 FrameIdToShadowFrame* next, 282 size_t num_vregs) { 283 // Append a bool array at the end to keep track of what vregs are updated by the debugger. 284 uint8_t* memory = new uint8_t[sizeof(FrameIdToShadowFrame) + sizeof(bool) * num_vregs]; 285 return new (memory) FrameIdToShadowFrame(frame_id, shadow_frame, next); 286 } 287 288 static void Delete(FrameIdToShadowFrame* f) { 289 uint8_t* memory = reinterpret_cast<uint8_t*>(f); 290 delete[] memory; 291 } 292 293 size_t GetFrameId() const { return frame_id_; } 294 ShadowFrame* GetShadowFrame() const { return shadow_frame_; } 295 FrameIdToShadowFrame* GetNext() const { return next_; } 296 void SetNext(FrameIdToShadowFrame* next) { next_ = next; } 297 bool* GetUpdatedVRegFlags() { 298 return updated_vreg_flags_; 299 } 300 301 private: 302 FrameIdToShadowFrame(size_t frame_id, 303 ShadowFrame* shadow_frame, 304 FrameIdToShadowFrame* next) 305 : frame_id_(frame_id), 306 shadow_frame_(shadow_frame), 307 next_(next) {} 308 309 const size_t frame_id_; 310 ShadowFrame* const shadow_frame_; 311 FrameIdToShadowFrame* next_; 312 bool updated_vreg_flags_[0]; 313 314 DISALLOW_COPY_AND_ASSIGN(FrameIdToShadowFrame); 315}; 316 317static FrameIdToShadowFrame* FindFrameIdToShadowFrame(FrameIdToShadowFrame* head, 318 size_t frame_id) { 319 FrameIdToShadowFrame* found = nullptr; 320 for (FrameIdToShadowFrame* record = head; record != nullptr; record = record->GetNext()) { 321 if (record->GetFrameId() == frame_id) { 322 if (kIsDebugBuild) { 323 // Sanity check we have at most one record for this frame. 324 CHECK(found == nullptr) << "Multiple records for the frame " << frame_id; 325 found = record; 326 } else { 327 return record; 328 } 329 } 330 } 331 return found; 332} 333 334ShadowFrame* Thread::FindDebuggerShadowFrame(size_t frame_id) { 335 FrameIdToShadowFrame* record = FindFrameIdToShadowFrame( 336 tlsPtr_.frame_id_to_shadow_frame, frame_id); 337 if (record != nullptr) { 338 return record->GetShadowFrame(); 339 } 340 return nullptr; 341} 342 343// Must only be called when FindDebuggerShadowFrame(frame_id) returns non-nullptr. 344bool* Thread::GetUpdatedVRegFlags(size_t frame_id) { 345 FrameIdToShadowFrame* record = FindFrameIdToShadowFrame( 346 tlsPtr_.frame_id_to_shadow_frame, frame_id); 347 CHECK(record != nullptr); 348 return record->GetUpdatedVRegFlags(); 349} 350 351ShadowFrame* Thread::FindOrCreateDebuggerShadowFrame(size_t frame_id, 352 uint32_t num_vregs, 353 ArtMethod* method, 354 uint32_t dex_pc) { 355 ShadowFrame* shadow_frame = FindDebuggerShadowFrame(frame_id); 356 if (shadow_frame != nullptr) { 357 return shadow_frame; 358 } 359 VLOG(deopt) << "Create pre-deopted ShadowFrame for " << ArtMethod::PrettyMethod(method); 360 shadow_frame = ShadowFrame::CreateDeoptimizedFrame(num_vregs, nullptr, method, dex_pc); 361 FrameIdToShadowFrame* record = FrameIdToShadowFrame::Create(frame_id, 362 shadow_frame, 363 tlsPtr_.frame_id_to_shadow_frame, 364 num_vregs); 365 for (uint32_t i = 0; i < num_vregs; i++) { 366 // Do this to clear all references for root visitors. 367 shadow_frame->SetVRegReference(i, nullptr); 368 // This flag will be changed to true if the debugger modifies the value. 369 record->GetUpdatedVRegFlags()[i] = false; 370 } 371 tlsPtr_.frame_id_to_shadow_frame = record; 372 return shadow_frame; 373} 374 375void Thread::RemoveDebuggerShadowFrameMapping(size_t frame_id) { 376 FrameIdToShadowFrame* head = tlsPtr_.frame_id_to_shadow_frame; 377 if (head->GetFrameId() == frame_id) { 378 tlsPtr_.frame_id_to_shadow_frame = head->GetNext(); 379 FrameIdToShadowFrame::Delete(head); 380 return; 381 } 382 FrameIdToShadowFrame* prev = head; 383 for (FrameIdToShadowFrame* record = head->GetNext(); 384 record != nullptr; 385 prev = record, record = record->GetNext()) { 386 if (record->GetFrameId() == frame_id) { 387 prev->SetNext(record->GetNext()); 388 FrameIdToShadowFrame::Delete(record); 389 return; 390 } 391 } 392 LOG(FATAL) << "No shadow frame for frame " << frame_id; 393 UNREACHABLE(); 394} 395 396void Thread::InitTid() { 397 tls32_.tid = ::art::GetTid(); 398} 399 400void Thread::InitAfterFork() { 401 // One thread (us) survived the fork, but we have a new tid so we need to 402 // update the value stashed in this Thread*. 403 InitTid(); 404} 405 406void* Thread::CreateCallback(void* arg) { 407 Thread* self = reinterpret_cast<Thread*>(arg); 408 Runtime* runtime = Runtime::Current(); 409 if (runtime == nullptr) { 410 LOG(ERROR) << "Thread attaching to non-existent runtime: " << *self; 411 return nullptr; 412 } 413 { 414 // TODO: pass self to MutexLock - requires self to equal Thread::Current(), which is only true 415 // after self->Init(). 416 MutexLock mu(nullptr, *Locks::runtime_shutdown_lock_); 417 // Check that if we got here we cannot be shutting down (as shutdown should never have started 418 // while threads are being born). 419 CHECK(!runtime->IsShuttingDownLocked()); 420 // Note: given that the JNIEnv is created in the parent thread, the only failure point here is 421 // a mess in InitStackHwm. We do not have a reasonable way to recover from that, so abort 422 // the runtime in such a case. In case this ever changes, we need to make sure here to 423 // delete the tmp_jni_env, as we own it at this point. 424 CHECK(self->Init(runtime->GetThreadList(), runtime->GetJavaVM(), self->tlsPtr_.tmp_jni_env)); 425 self->tlsPtr_.tmp_jni_env = nullptr; 426 Runtime::Current()->EndThreadBirth(); 427 } 428 { 429 ScopedObjectAccess soa(self); 430 self->InitStringEntryPoints(); 431 432 // Copy peer into self, deleting global reference when done. 433 CHECK(self->tlsPtr_.jpeer != nullptr); 434 self->tlsPtr_.opeer = soa.Decode<mirror::Object>(self->tlsPtr_.jpeer).Ptr(); 435 self->GetJniEnv()->DeleteGlobalRef(self->tlsPtr_.jpeer); 436 self->tlsPtr_.jpeer = nullptr; 437 self->SetThreadName(self->GetThreadName()->ToModifiedUtf8().c_str()); 438 439 ArtField* priorityField = jni::DecodeArtField(WellKnownClasses::java_lang_Thread_priority); 440 self->SetNativePriority(priorityField->GetInt(self->tlsPtr_.opeer)); 441 442 runtime->GetRuntimeCallbacks()->ThreadStart(self); 443 444 // Invoke the 'run' method of our java.lang.Thread. 445 ObjPtr<mirror::Object> receiver = self->tlsPtr_.opeer; 446 jmethodID mid = WellKnownClasses::java_lang_Thread_run; 447 ScopedLocalRef<jobject> ref(soa.Env(), soa.AddLocalReference<jobject>(receiver)); 448 InvokeVirtualOrInterfaceWithJValues(soa, ref.get(), mid, nullptr); 449 } 450 // Detach and delete self. 451 Runtime::Current()->GetThreadList()->Unregister(self); 452 453 return nullptr; 454} 455 456Thread* Thread::FromManagedThread(const ScopedObjectAccessAlreadyRunnable& soa, 457 ObjPtr<mirror::Object> thread_peer) { 458 ArtField* f = jni::DecodeArtField(WellKnownClasses::java_lang_Thread_nativePeer); 459 Thread* result = reinterpret_cast<Thread*>(static_cast<uintptr_t>(f->GetLong(thread_peer))); 460 // Sanity check that if we have a result it is either suspended or we hold the thread_list_lock_ 461 // to stop it from going away. 462 if (kIsDebugBuild) { 463 MutexLock mu(soa.Self(), *Locks::thread_suspend_count_lock_); 464 if (result != nullptr && !result->IsSuspended()) { 465 Locks::thread_list_lock_->AssertHeld(soa.Self()); 466 } 467 } 468 return result; 469} 470 471Thread* Thread::FromManagedThread(const ScopedObjectAccessAlreadyRunnable& soa, 472 jobject java_thread) { 473 return FromManagedThread(soa, soa.Decode<mirror::Object>(java_thread).Ptr()); 474} 475 476static size_t FixStackSize(size_t stack_size) { 477 // A stack size of zero means "use the default". 478 if (stack_size == 0) { 479 stack_size = Runtime::Current()->GetDefaultStackSize(); 480 } 481 482 // Dalvik used the bionic pthread default stack size for native threads, 483 // so include that here to support apps that expect large native stacks. 484 stack_size += 1 * MB; 485 486 // It's not possible to request a stack smaller than the system-defined PTHREAD_STACK_MIN. 487 if (stack_size < PTHREAD_STACK_MIN) { 488 stack_size = PTHREAD_STACK_MIN; 489 } 490 491 if (Runtime::Current()->ExplicitStackOverflowChecks()) { 492 // It's likely that callers are trying to ensure they have at least a certain amount of 493 // stack space, so we should add our reserved space on top of what they requested, rather 494 // than implicitly take it away from them. 495 stack_size += GetStackOverflowReservedBytes(kRuntimeISA); 496 } else { 497 // If we are going to use implicit stack checks, allocate space for the protected 498 // region at the bottom of the stack. 499 stack_size += Thread::kStackOverflowImplicitCheckSize + 500 GetStackOverflowReservedBytes(kRuntimeISA); 501 } 502 503 // Some systems require the stack size to be a multiple of the system page size, so round up. 504 stack_size = RoundUp(stack_size, kPageSize); 505 506 return stack_size; 507} 508 509// Return the nearest page-aligned address below the current stack top. 510NO_INLINE 511static uint8_t* FindStackTop() { 512 return reinterpret_cast<uint8_t*>( 513 AlignDown(__builtin_frame_address(0), kPageSize)); 514} 515 516// Install a protected region in the stack. This is used to trigger a SIGSEGV if a stack 517// overflow is detected. It is located right below the stack_begin_. 518ATTRIBUTE_NO_SANITIZE_ADDRESS 519void Thread::InstallImplicitProtection() { 520 uint8_t* pregion = tlsPtr_.stack_begin - kStackOverflowProtectedSize; 521 // Page containing current top of stack. 522 uint8_t* stack_top = FindStackTop(); 523 524 // Try to directly protect the stack. 525 VLOG(threads) << "installing stack protected region at " << std::hex << 526 static_cast<void*>(pregion) << " to " << 527 static_cast<void*>(pregion + kStackOverflowProtectedSize - 1); 528 if (ProtectStack(/* fatal_on_error */ false)) { 529 // Tell the kernel that we won't be needing these pages any more. 530 // NB. madvise will probably write zeroes into the memory (on linux it does). 531 uint32_t unwanted_size = stack_top - pregion - kPageSize; 532 madvise(pregion, unwanted_size, MADV_DONTNEED); 533 return; 534 } 535 536 // There is a little complexity here that deserves a special mention. On some 537 // architectures, the stack is created using a VM_GROWSDOWN flag 538 // to prevent memory being allocated when it's not needed. This flag makes the 539 // kernel only allocate memory for the stack by growing down in memory. Because we 540 // want to put an mprotected region far away from that at the stack top, we need 541 // to make sure the pages for the stack are mapped in before we call mprotect. 542 // 543 // The failed mprotect in UnprotectStack is an indication of a thread with VM_GROWSDOWN 544 // with a non-mapped stack (usually only the main thread). 545 // 546 // We map in the stack by reading every page from the stack bottom (highest address) 547 // to the stack top. (We then madvise this away.) This must be done by reading from the 548 // current stack pointer downwards. Any access more than a page below the current SP 549 // might cause a segv. 550 // TODO: This comment may be out of date. It seems possible to speed this up. As 551 // this is normally done once in the zygote on startup, ignore for now. 552 // 553 // AddressSanitizer does not like the part of this functions that reads every stack page. 554 // Looks a lot like an out-of-bounds access. 555 556 // (Defensively) first remove the protection on the protected region as will want to read 557 // and write it. Ignore errors. 558 UnprotectStack(); 559 560 VLOG(threads) << "Need to map in stack for thread at " << std::hex << 561 static_cast<void*>(pregion); 562 563 // Read every page from the high address to the low. 564 volatile uint8_t dont_optimize_this; 565 UNUSED(dont_optimize_this); 566 for (uint8_t* p = stack_top; p >= pregion; p -= kPageSize) { 567 dont_optimize_this = *p; 568 } 569 570 VLOG(threads) << "(again) installing stack protected region at " << std::hex << 571 static_cast<void*>(pregion) << " to " << 572 static_cast<void*>(pregion + kStackOverflowProtectedSize - 1); 573 574 // Protect the bottom of the stack to prevent read/write to it. 575 ProtectStack(/* fatal_on_error */ true); 576 577 // Tell the kernel that we won't be needing these pages any more. 578 // NB. madvise will probably write zeroes into the memory (on linux it does). 579 uint32_t unwanted_size = stack_top - pregion - kPageSize; 580 madvise(pregion, unwanted_size, MADV_DONTNEED); 581} 582 583void Thread::CreateNativeThread(JNIEnv* env, jobject java_peer, size_t stack_size, bool is_daemon) { 584 CHECK(java_peer != nullptr); 585 Thread* self = static_cast<JNIEnvExt*>(env)->self; 586 587 if (VLOG_IS_ON(threads)) { 588 ScopedObjectAccess soa(env); 589 590 ArtField* f = jni::DecodeArtField(WellKnownClasses::java_lang_Thread_name); 591 ObjPtr<mirror::String> java_name = 592 f->GetObject(soa.Decode<mirror::Object>(java_peer))->AsString(); 593 std::string thread_name; 594 if (java_name != nullptr) { 595 thread_name = java_name->ToModifiedUtf8(); 596 } else { 597 thread_name = "(Unnamed)"; 598 } 599 600 VLOG(threads) << "Creating native thread for " << thread_name; 601 self->Dump(LOG_STREAM(INFO)); 602 } 603 604 Runtime* runtime = Runtime::Current(); 605 606 // Atomically start the birth of the thread ensuring the runtime isn't shutting down. 607 bool thread_start_during_shutdown = false; 608 { 609 MutexLock mu(self, *Locks::runtime_shutdown_lock_); 610 if (runtime->IsShuttingDownLocked()) { 611 thread_start_during_shutdown = true; 612 } else { 613 runtime->StartThreadBirth(); 614 } 615 } 616 if (thread_start_during_shutdown) { 617 ScopedLocalRef<jclass> error_class(env, env->FindClass("java/lang/InternalError")); 618 env->ThrowNew(error_class.get(), "Thread starting during runtime shutdown"); 619 return; 620 } 621 622 Thread* child_thread = new Thread(is_daemon); 623 // Use global JNI ref to hold peer live while child thread starts. 624 child_thread->tlsPtr_.jpeer = env->NewGlobalRef(java_peer); 625 stack_size = FixStackSize(stack_size); 626 627 // Thread.start is synchronized, so we know that nativePeer is 0, and know that we're not racing to 628 // assign it. 629 env->SetLongField(java_peer, WellKnownClasses::java_lang_Thread_nativePeer, 630 reinterpret_cast<jlong>(child_thread)); 631 632 // Try to allocate a JNIEnvExt for the thread. We do this here as we might be out of memory and 633 // do not have a good way to report this on the child's side. 634 std::string error_msg; 635 std::unique_ptr<JNIEnvExt> child_jni_env_ext( 636 JNIEnvExt::Create(child_thread, Runtime::Current()->GetJavaVM(), &error_msg)); 637 638 int pthread_create_result = 0; 639 if (child_jni_env_ext.get() != nullptr) { 640 pthread_t new_pthread; 641 pthread_attr_t attr; 642 child_thread->tlsPtr_.tmp_jni_env = child_jni_env_ext.get(); 643 CHECK_PTHREAD_CALL(pthread_attr_init, (&attr), "new thread"); 644 CHECK_PTHREAD_CALL(pthread_attr_setdetachstate, (&attr, PTHREAD_CREATE_DETACHED), 645 "PTHREAD_CREATE_DETACHED"); 646 CHECK_PTHREAD_CALL(pthread_attr_setstacksize, (&attr, stack_size), stack_size); 647 pthread_create_result = pthread_create(&new_pthread, 648 &attr, 649 Thread::CreateCallback, 650 child_thread); 651 CHECK_PTHREAD_CALL(pthread_attr_destroy, (&attr), "new thread"); 652 653 if (pthread_create_result == 0) { 654 // pthread_create started the new thread. The child is now responsible for managing the 655 // JNIEnvExt we created. 656 // Note: we can't check for tmp_jni_env == nullptr, as that would require synchronization 657 // between the threads. 658 child_jni_env_ext.release(); 659 return; 660 } 661 } 662 663 // Either JNIEnvExt::Create or pthread_create(3) failed, so clean up. 664 { 665 MutexLock mu(self, *Locks::runtime_shutdown_lock_); 666 runtime->EndThreadBirth(); 667 } 668 // Manually delete the global reference since Thread::Init will not have been run. 669 env->DeleteGlobalRef(child_thread->tlsPtr_.jpeer); 670 child_thread->tlsPtr_.jpeer = nullptr; 671 delete child_thread; 672 child_thread = nullptr; 673 // TODO: remove from thread group? 674 env->SetLongField(java_peer, WellKnownClasses::java_lang_Thread_nativePeer, 0); 675 { 676 std::string msg(child_jni_env_ext.get() == nullptr ? 677 StringPrintf("Could not allocate JNI Env: %s", error_msg.c_str()) : 678 StringPrintf("pthread_create (%s stack) failed: %s", 679 PrettySize(stack_size).c_str(), strerror(pthread_create_result))); 680 ScopedObjectAccess soa(env); 681 soa.Self()->ThrowOutOfMemoryError(msg.c_str()); 682 } 683} 684 685bool Thread::Init(ThreadList* thread_list, JavaVMExt* java_vm, JNIEnvExt* jni_env_ext) { 686 // This function does all the initialization that must be run by the native thread it applies to. 687 // (When we create a new thread from managed code, we allocate the Thread* in Thread::Create so 688 // we can handshake with the corresponding native thread when it's ready.) Check this native 689 // thread hasn't been through here already... 690 CHECK(Thread::Current() == nullptr); 691 692 // Set pthread_self_ ahead of pthread_setspecific, that makes Thread::Current function, this 693 // avoids pthread_self_ ever being invalid when discovered from Thread::Current(). 694 tlsPtr_.pthread_self = pthread_self(); 695 CHECK(is_started_); 696 697 SetUpAlternateSignalStack(); 698 if (!InitStackHwm()) { 699 return false; 700 } 701 InitCpu(); 702 InitTlsEntryPoints(); 703 RemoveSuspendTrigger(); 704 InitCardTable(); 705 InitTid(); 706 interpreter::InitInterpreterTls(this); 707 708#ifdef ART_TARGET_ANDROID 709 __get_tls()[TLS_SLOT_ART_THREAD_SELF] = this; 710#else 711 CHECK_PTHREAD_CALL(pthread_setspecific, (Thread::pthread_key_self_, this), "attach self"); 712#endif 713 DCHECK_EQ(Thread::Current(), this); 714 715 tls32_.thin_lock_thread_id = thread_list->AllocThreadId(this); 716 717 if (jni_env_ext != nullptr) { 718 DCHECK_EQ(jni_env_ext->vm, java_vm); 719 DCHECK_EQ(jni_env_ext->self, this); 720 tlsPtr_.jni_env = jni_env_ext; 721 } else { 722 std::string error_msg; 723 tlsPtr_.jni_env = JNIEnvExt::Create(this, java_vm, &error_msg); 724 if (tlsPtr_.jni_env == nullptr) { 725 LOG(ERROR) << "Failed to create JNIEnvExt: " << error_msg; 726 return false; 727 } 728 } 729 730 thread_list->Register(this); 731 return true; 732} 733 734template <typename PeerAction> 735Thread* Thread::Attach(const char* thread_name, bool as_daemon, PeerAction peer_action) { 736 Runtime* runtime = Runtime::Current(); 737 if (runtime == nullptr) { 738 LOG(ERROR) << "Thread attaching to non-existent runtime: " << thread_name; 739 return nullptr; 740 } 741 Thread* self; 742 { 743 MutexLock mu(nullptr, *Locks::runtime_shutdown_lock_); 744 if (runtime->IsShuttingDownLocked()) { 745 LOG(WARNING) << "Thread attaching while runtime is shutting down: " << thread_name; 746 return nullptr; 747 } else { 748 Runtime::Current()->StartThreadBirth(); 749 self = new Thread(as_daemon); 750 bool init_success = self->Init(runtime->GetThreadList(), runtime->GetJavaVM()); 751 Runtime::Current()->EndThreadBirth(); 752 if (!init_success) { 753 delete self; 754 return nullptr; 755 } 756 } 757 } 758 759 self->InitStringEntryPoints(); 760 761 CHECK_NE(self->GetState(), kRunnable); 762 self->SetState(kNative); 763 764 // Run the action that is acting on the peer. 765 if (!peer_action(self)) { 766 runtime->GetThreadList()->Unregister(self); 767 // Unregister deletes self, no need to do this here. 768 return nullptr; 769 } 770 771 if (VLOG_IS_ON(threads)) { 772 if (thread_name != nullptr) { 773 VLOG(threads) << "Attaching thread " << thread_name; 774 } else { 775 VLOG(threads) << "Attaching unnamed thread."; 776 } 777 ScopedObjectAccess soa(self); 778 self->Dump(LOG_STREAM(INFO)); 779 } 780 781 { 782 ScopedObjectAccess soa(self); 783 runtime->GetRuntimeCallbacks()->ThreadStart(self); 784 } 785 786 return self; 787} 788 789Thread* Thread::Attach(const char* thread_name, 790 bool as_daemon, 791 jobject thread_group, 792 bool create_peer) { 793 auto create_peer_action = [&](Thread* self) { 794 // If we're the main thread, ClassLinker won't be created until after we're attached, 795 // so that thread needs a two-stage attach. Regular threads don't need this hack. 796 // In the compiler, all threads need this hack, because no-one's going to be getting 797 // a native peer! 798 if (create_peer) { 799 self->CreatePeer(thread_name, as_daemon, thread_group); 800 if (self->IsExceptionPending()) { 801 // We cannot keep the exception around, as we're deleting self. Try to be helpful and log it. 802 { 803 ScopedObjectAccess soa(self); 804 LOG(ERROR) << "Exception creating thread peer:"; 805 LOG(ERROR) << self->GetException()->Dump(); 806 self->ClearException(); 807 } 808 return false; 809 } 810 } else { 811 // These aren't necessary, but they improve diagnostics for unit tests & command-line tools. 812 if (thread_name != nullptr) { 813 self->tlsPtr_.name->assign(thread_name); 814 ::art::SetThreadName(thread_name); 815 } else if (self->GetJniEnv()->check_jni) { 816 LOG(WARNING) << *Thread::Current() << " attached without supplying a name"; 817 } 818 } 819 return true; 820 }; 821 return Attach(thread_name, as_daemon, create_peer_action); 822} 823 824Thread* Thread::Attach(const char* thread_name, bool as_daemon, jobject thread_peer) { 825 auto set_peer_action = [&](Thread* self) { 826 // Install the given peer. 827 { 828 DCHECK(self == Thread::Current()); 829 ScopedObjectAccess soa(self); 830 self->tlsPtr_.opeer = soa.Decode<mirror::Object>(thread_peer).Ptr(); 831 } 832 self->GetJniEnv()->SetLongField(thread_peer, 833 WellKnownClasses::java_lang_Thread_nativePeer, 834 reinterpret_cast<jlong>(self)); 835 return true; 836 }; 837 return Attach(thread_name, as_daemon, set_peer_action); 838} 839 840void Thread::CreatePeer(const char* name, bool as_daemon, jobject thread_group) { 841 Runtime* runtime = Runtime::Current(); 842 CHECK(runtime->IsStarted()); 843 JNIEnv* env = tlsPtr_.jni_env; 844 845 if (thread_group == nullptr) { 846 thread_group = runtime->GetMainThreadGroup(); 847 } 848 ScopedLocalRef<jobject> thread_name(env, env->NewStringUTF(name)); 849 // Add missing null check in case of OOM b/18297817 850 if (name != nullptr && thread_name.get() == nullptr) { 851 CHECK(IsExceptionPending()); 852 return; 853 } 854 jint thread_priority = GetNativePriority(); 855 jboolean thread_is_daemon = as_daemon; 856 857 ScopedLocalRef<jobject> peer(env, env->AllocObject(WellKnownClasses::java_lang_Thread)); 858 if (peer.get() == nullptr) { 859 CHECK(IsExceptionPending()); 860 return; 861 } 862 { 863 ScopedObjectAccess soa(this); 864 tlsPtr_.opeer = soa.Decode<mirror::Object>(peer.get()).Ptr(); 865 } 866 env->CallNonvirtualVoidMethod(peer.get(), 867 WellKnownClasses::java_lang_Thread, 868 WellKnownClasses::java_lang_Thread_init, 869 thread_group, thread_name.get(), thread_priority, thread_is_daemon); 870 if (IsExceptionPending()) { 871 return; 872 } 873 874 Thread* self = this; 875 DCHECK_EQ(self, Thread::Current()); 876 env->SetLongField(peer.get(), WellKnownClasses::java_lang_Thread_nativePeer, 877 reinterpret_cast<jlong>(self)); 878 879 ScopedObjectAccess soa(self); 880 StackHandleScope<1> hs(self); 881 MutableHandle<mirror::String> peer_thread_name(hs.NewHandle(GetThreadName())); 882 if (peer_thread_name == nullptr) { 883 // The Thread constructor should have set the Thread.name to a 884 // non-null value. However, because we can run without code 885 // available (in the compiler, in tests), we manually assign the 886 // fields the constructor should have set. 887 if (runtime->IsActiveTransaction()) { 888 InitPeer<true>(soa, 889 tlsPtr_.opeer, 890 thread_is_daemon, 891 thread_group, 892 thread_name.get(), 893 thread_priority); 894 } else { 895 InitPeer<false>(soa, 896 tlsPtr_.opeer, 897 thread_is_daemon, 898 thread_group, 899 thread_name.get(), 900 thread_priority); 901 } 902 peer_thread_name.Assign(GetThreadName()); 903 } 904 // 'thread_name' may have been null, so don't trust 'peer_thread_name' to be non-null. 905 if (peer_thread_name != nullptr) { 906 SetThreadName(peer_thread_name->ToModifiedUtf8().c_str()); 907 } 908} 909 910jobject Thread::CreateCompileTimePeer(JNIEnv* env, 911 const char* name, 912 bool as_daemon, 913 jobject thread_group) { 914 Runtime* runtime = Runtime::Current(); 915 CHECK(!runtime->IsStarted()); 916 917 if (thread_group == nullptr) { 918 thread_group = runtime->GetMainThreadGroup(); 919 } 920 ScopedLocalRef<jobject> thread_name(env, env->NewStringUTF(name)); 921 // Add missing null check in case of OOM b/18297817 922 if (name != nullptr && thread_name.get() == nullptr) { 923 CHECK(Thread::Current()->IsExceptionPending()); 924 return nullptr; 925 } 926 jint thread_priority = GetNativePriority(); 927 jboolean thread_is_daemon = as_daemon; 928 929 ScopedLocalRef<jobject> peer(env, env->AllocObject(WellKnownClasses::java_lang_Thread)); 930 if (peer.get() == nullptr) { 931 CHECK(Thread::Current()->IsExceptionPending()); 932 return nullptr; 933 } 934 935 // We cannot call Thread.init, as it will recursively ask for currentThread. 936 937 // The Thread constructor should have set the Thread.name to a 938 // non-null value. However, because we can run without code 939 // available (in the compiler, in tests), we manually assign the 940 // fields the constructor should have set. 941 ScopedObjectAccessUnchecked soa(Thread::Current()); 942 if (runtime->IsActiveTransaction()) { 943 InitPeer<true>(soa, 944 soa.Decode<mirror::Object>(peer.get()), 945 thread_is_daemon, 946 thread_group, 947 thread_name.get(), 948 thread_priority); 949 } else { 950 InitPeer<false>(soa, 951 soa.Decode<mirror::Object>(peer.get()), 952 thread_is_daemon, 953 thread_group, 954 thread_name.get(), 955 thread_priority); 956 } 957 958 return peer.release(); 959} 960 961template<bool kTransactionActive> 962void Thread::InitPeer(ScopedObjectAccessAlreadyRunnable& soa, 963 ObjPtr<mirror::Object> peer, 964 jboolean thread_is_daemon, 965 jobject thread_group, 966 jobject thread_name, 967 jint thread_priority) { 968 jni::DecodeArtField(WellKnownClasses::java_lang_Thread_daemon)-> 969 SetBoolean<kTransactionActive>(peer, thread_is_daemon); 970 jni::DecodeArtField(WellKnownClasses::java_lang_Thread_group)-> 971 SetObject<kTransactionActive>(peer, soa.Decode<mirror::Object>(thread_group)); 972 jni::DecodeArtField(WellKnownClasses::java_lang_Thread_name)-> 973 SetObject<kTransactionActive>(peer, soa.Decode<mirror::Object>(thread_name)); 974 jni::DecodeArtField(WellKnownClasses::java_lang_Thread_priority)-> 975 SetInt<kTransactionActive>(peer, thread_priority); 976} 977 978void Thread::SetThreadName(const char* name) { 979 tlsPtr_.name->assign(name); 980 ::art::SetThreadName(name); 981 Dbg::DdmSendThreadNotification(this, CHUNK_TYPE("THNM")); 982} 983 984static void GetThreadStack(pthread_t thread, 985 void** stack_base, 986 size_t* stack_size, 987 size_t* guard_size) { 988#if defined(__APPLE__) 989 *stack_size = pthread_get_stacksize_np(thread); 990 void* stack_addr = pthread_get_stackaddr_np(thread); 991 992 // Check whether stack_addr is the base or end of the stack. 993 // (On Mac OS 10.7, it's the end.) 994 int stack_variable; 995 if (stack_addr > &stack_variable) { 996 *stack_base = reinterpret_cast<uint8_t*>(stack_addr) - *stack_size; 997 } else { 998 *stack_base = stack_addr; 999 } 1000 1001 // This is wrong, but there doesn't seem to be a way to get the actual value on the Mac. 1002 pthread_attr_t attributes; 1003 CHECK_PTHREAD_CALL(pthread_attr_init, (&attributes), __FUNCTION__); 1004 CHECK_PTHREAD_CALL(pthread_attr_getguardsize, (&attributes, guard_size), __FUNCTION__); 1005 CHECK_PTHREAD_CALL(pthread_attr_destroy, (&attributes), __FUNCTION__); 1006#else 1007 pthread_attr_t attributes; 1008 CHECK_PTHREAD_CALL(pthread_getattr_np, (thread, &attributes), __FUNCTION__); 1009 CHECK_PTHREAD_CALL(pthread_attr_getstack, (&attributes, stack_base, stack_size), __FUNCTION__); 1010 CHECK_PTHREAD_CALL(pthread_attr_getguardsize, (&attributes, guard_size), __FUNCTION__); 1011 CHECK_PTHREAD_CALL(pthread_attr_destroy, (&attributes), __FUNCTION__); 1012 1013#if defined(__GLIBC__) 1014 // If we're the main thread, check whether we were run with an unlimited stack. In that case, 1015 // glibc will have reported a 2GB stack for our 32-bit process, and our stack overflow detection 1016 // will be broken because we'll die long before we get close to 2GB. 1017 bool is_main_thread = (::art::GetTid() == getpid()); 1018 if (is_main_thread) { 1019 rlimit stack_limit; 1020 if (getrlimit(RLIMIT_STACK, &stack_limit) == -1) { 1021 PLOG(FATAL) << "getrlimit(RLIMIT_STACK) failed"; 1022 } 1023 if (stack_limit.rlim_cur == RLIM_INFINITY) { 1024 size_t old_stack_size = *stack_size; 1025 1026 // Use the kernel default limit as our size, and adjust the base to match. 1027 *stack_size = 8 * MB; 1028 *stack_base = reinterpret_cast<uint8_t*>(*stack_base) + (old_stack_size - *stack_size); 1029 1030 VLOG(threads) << "Limiting unlimited stack (reported as " << PrettySize(old_stack_size) << ")" 1031 << " to " << PrettySize(*stack_size) 1032 << " with base " << *stack_base; 1033 } 1034 } 1035#endif 1036 1037#endif 1038} 1039 1040bool Thread::InitStackHwm() { 1041 void* read_stack_base; 1042 size_t read_stack_size; 1043 size_t read_guard_size; 1044 GetThreadStack(tlsPtr_.pthread_self, &read_stack_base, &read_stack_size, &read_guard_size); 1045 1046 tlsPtr_.stack_begin = reinterpret_cast<uint8_t*>(read_stack_base); 1047 tlsPtr_.stack_size = read_stack_size; 1048 1049 // The minimum stack size we can cope with is the overflow reserved bytes (typically 1050 // 8K) + the protected region size (4K) + another page (4K). Typically this will 1051 // be 8+4+4 = 16K. The thread won't be able to do much with this stack even the GC takes 1052 // between 8K and 12K. 1053 uint32_t min_stack = GetStackOverflowReservedBytes(kRuntimeISA) + kStackOverflowProtectedSize 1054 + 4 * KB; 1055 if (read_stack_size <= min_stack) { 1056 // Note, as we know the stack is small, avoid operations that could use a lot of stack. 1057 LogHelper::LogLineLowStack(__PRETTY_FUNCTION__, 1058 __LINE__, 1059 ::android::base::ERROR, 1060 "Attempt to attach a thread with a too-small stack"); 1061 return false; 1062 } 1063 1064 // This is included in the SIGQUIT output, but it's useful here for thread debugging. 1065 VLOG(threads) << StringPrintf("Native stack is at %p (%s with %s guard)", 1066 read_stack_base, 1067 PrettySize(read_stack_size).c_str(), 1068 PrettySize(read_guard_size).c_str()); 1069 1070 // Set stack_end_ to the bottom of the stack saving space of stack overflows 1071 1072 Runtime* runtime = Runtime::Current(); 1073 bool implicit_stack_check = !runtime->ExplicitStackOverflowChecks() && !runtime->IsAotCompiler(); 1074 1075 // Valgrind on arm doesn't give the right values here. Do not install the guard page, and 1076 // effectively disable stack overflow checks (we'll get segfaults, potentially) by setting 1077 // stack_begin to 0. 1078 const bool valgrind_on_arm = 1079 (kRuntimeISA == kArm || kRuntimeISA == kArm64) && 1080 kMemoryToolIsValgrind && 1081 RUNNING_ON_MEMORY_TOOL != 0; 1082 if (valgrind_on_arm) { 1083 tlsPtr_.stack_begin = nullptr; 1084 } 1085 1086 ResetDefaultStackEnd(); 1087 1088 // Install the protected region if we are doing implicit overflow checks. 1089 if (implicit_stack_check && !valgrind_on_arm) { 1090 // The thread might have protected region at the bottom. We need 1091 // to install our own region so we need to move the limits 1092 // of the stack to make room for it. 1093 1094 tlsPtr_.stack_begin += read_guard_size + kStackOverflowProtectedSize; 1095 tlsPtr_.stack_end += read_guard_size + kStackOverflowProtectedSize; 1096 tlsPtr_.stack_size -= read_guard_size; 1097 1098 InstallImplicitProtection(); 1099 } 1100 1101 // Sanity check. 1102 CHECK_GT(FindStackTop(), reinterpret_cast<void*>(tlsPtr_.stack_end)); 1103 1104 return true; 1105} 1106 1107void Thread::ShortDump(std::ostream& os) const { 1108 os << "Thread["; 1109 if (GetThreadId() != 0) { 1110 // If we're in kStarting, we won't have a thin lock id or tid yet. 1111 os << GetThreadId() 1112 << ",tid=" << GetTid() << ','; 1113 } 1114 os << GetState() 1115 << ",Thread*=" << this 1116 << ",peer=" << tlsPtr_.opeer 1117 << ",\"" << (tlsPtr_.name != nullptr ? *tlsPtr_.name : "null") << "\"" 1118 << "]"; 1119} 1120 1121void Thread::Dump(std::ostream& os, bool dump_native_stack, BacktraceMap* backtrace_map, 1122 bool force_dump_stack) const { 1123 DumpState(os); 1124 DumpStack(os, dump_native_stack, backtrace_map, force_dump_stack); 1125} 1126 1127mirror::String* Thread::GetThreadName() const { 1128 ArtField* f = jni::DecodeArtField(WellKnownClasses::java_lang_Thread_name); 1129 if (tlsPtr_.opeer == nullptr) { 1130 return nullptr; 1131 } 1132 ObjPtr<mirror::Object> name = f->GetObject(tlsPtr_.opeer); 1133 return name == nullptr ? nullptr : name->AsString(); 1134} 1135 1136void Thread::GetThreadName(std::string& name) const { 1137 name.assign(*tlsPtr_.name); 1138} 1139 1140uint64_t Thread::GetCpuMicroTime() const { 1141#if defined(__linux__) 1142 clockid_t cpu_clock_id; 1143 pthread_getcpuclockid(tlsPtr_.pthread_self, &cpu_clock_id); 1144 timespec now; 1145 clock_gettime(cpu_clock_id, &now); 1146 return static_cast<uint64_t>(now.tv_sec) * UINT64_C(1000000) + now.tv_nsec / UINT64_C(1000); 1147#else // __APPLE__ 1148 UNIMPLEMENTED(WARNING); 1149 return -1; 1150#endif 1151} 1152 1153// Attempt to rectify locks so that we dump thread list with required locks before exiting. 1154static void UnsafeLogFatalForSuspendCount(Thread* self, Thread* thread) NO_THREAD_SAFETY_ANALYSIS { 1155 LOG(ERROR) << *thread << " suspend count already zero."; 1156 Locks::thread_suspend_count_lock_->Unlock(self); 1157 if (!Locks::mutator_lock_->IsSharedHeld(self)) { 1158 Locks::mutator_lock_->SharedTryLock(self); 1159 if (!Locks::mutator_lock_->IsSharedHeld(self)) { 1160 LOG(WARNING) << "Dumping thread list without holding mutator_lock_"; 1161 } 1162 } 1163 if (!Locks::thread_list_lock_->IsExclusiveHeld(self)) { 1164 Locks::thread_list_lock_->TryLock(self); 1165 if (!Locks::thread_list_lock_->IsExclusiveHeld(self)) { 1166 LOG(WARNING) << "Dumping thread list without holding thread_list_lock_"; 1167 } 1168 } 1169 std::ostringstream ss; 1170 Runtime::Current()->GetThreadList()->Dump(ss); 1171 LOG(FATAL) << ss.str(); 1172} 1173 1174bool Thread::ModifySuspendCountInternal(Thread* self, 1175 int delta, 1176 AtomicInteger* suspend_barrier, 1177 bool for_debugger) { 1178 if (kIsDebugBuild) { 1179 DCHECK(delta == -1 || delta == +1 || delta == -tls32_.debug_suspend_count) 1180 << delta << " " << tls32_.debug_suspend_count << " " << this; 1181 DCHECK_GE(tls32_.suspend_count, tls32_.debug_suspend_count) << this; 1182 Locks::thread_suspend_count_lock_->AssertHeld(self); 1183 if (this != self && !IsSuspended()) { 1184 Locks::thread_list_lock_->AssertHeld(self); 1185 } 1186 } 1187 if (UNLIKELY(delta < 0 && tls32_.suspend_count <= 0)) { 1188 UnsafeLogFatalForSuspendCount(self, this); 1189 return false; 1190 } 1191 1192 if (kUseReadBarrier && delta > 0 && this != self && tlsPtr_.flip_function != nullptr) { 1193 // Force retry of a suspend request if it's in the middle of a thread flip to avoid a 1194 // deadlock. b/31683379. 1195 return false; 1196 } 1197 1198 uint16_t flags = kSuspendRequest; 1199 if (delta > 0 && suspend_barrier != nullptr) { 1200 uint32_t available_barrier = kMaxSuspendBarriers; 1201 for (uint32_t i = 0; i < kMaxSuspendBarriers; ++i) { 1202 if (tlsPtr_.active_suspend_barriers[i] == nullptr) { 1203 available_barrier = i; 1204 break; 1205 } 1206 } 1207 if (available_barrier == kMaxSuspendBarriers) { 1208 // No barrier spaces available, we can't add another. 1209 return false; 1210 } 1211 tlsPtr_.active_suspend_barriers[available_barrier] = suspend_barrier; 1212 flags |= kActiveSuspendBarrier; 1213 } 1214 1215 tls32_.suspend_count += delta; 1216 if (for_debugger) { 1217 tls32_.debug_suspend_count += delta; 1218 } 1219 1220 if (tls32_.suspend_count == 0) { 1221 AtomicClearFlag(kSuspendRequest); 1222 } else { 1223 // Two bits might be set simultaneously. 1224 tls32_.state_and_flags.as_atomic_int.FetchAndOrSequentiallyConsistent(flags); 1225 TriggerSuspend(); 1226 } 1227 return true; 1228} 1229 1230bool Thread::PassActiveSuspendBarriers(Thread* self) { 1231 // Grab the suspend_count lock and copy the current set of 1232 // barriers. Then clear the list and the flag. The ModifySuspendCount 1233 // function requires the lock so we prevent a race between setting 1234 // the kActiveSuspendBarrier flag and clearing it. 1235 AtomicInteger* pass_barriers[kMaxSuspendBarriers]; 1236 { 1237 MutexLock mu(self, *Locks::thread_suspend_count_lock_); 1238 if (!ReadFlag(kActiveSuspendBarrier)) { 1239 // quick exit test: the barriers have already been claimed - this is 1240 // possible as there may be a race to claim and it doesn't matter 1241 // who wins. 1242 // All of the callers of this function (except the SuspendAllInternal) 1243 // will first test the kActiveSuspendBarrier flag without lock. Here 1244 // double-check whether the barrier has been passed with the 1245 // suspend_count lock. 1246 return false; 1247 } 1248 1249 for (uint32_t i = 0; i < kMaxSuspendBarriers; ++i) { 1250 pass_barriers[i] = tlsPtr_.active_suspend_barriers[i]; 1251 tlsPtr_.active_suspend_barriers[i] = nullptr; 1252 } 1253 AtomicClearFlag(kActiveSuspendBarrier); 1254 } 1255 1256 uint32_t barrier_count = 0; 1257 for (uint32_t i = 0; i < kMaxSuspendBarriers; i++) { 1258 AtomicInteger* pending_threads = pass_barriers[i]; 1259 if (pending_threads != nullptr) { 1260 bool done = false; 1261 do { 1262 int32_t cur_val = pending_threads->LoadRelaxed(); 1263 CHECK_GT(cur_val, 0) << "Unexpected value for PassActiveSuspendBarriers(): " << cur_val; 1264 // Reduce value by 1. 1265 done = pending_threads->CompareExchangeWeakRelaxed(cur_val, cur_val - 1); 1266#if ART_USE_FUTEXES 1267 if (done && (cur_val - 1) == 0) { // Weak CAS may fail spuriously. 1268 futex(pending_threads->Address(), FUTEX_WAKE, -1, nullptr, nullptr, 0); 1269 } 1270#endif 1271 } while (!done); 1272 ++barrier_count; 1273 } 1274 } 1275 CHECK_GT(barrier_count, 0U); 1276 return true; 1277} 1278 1279void Thread::ClearSuspendBarrier(AtomicInteger* target) { 1280 CHECK(ReadFlag(kActiveSuspendBarrier)); 1281 bool clear_flag = true; 1282 for (uint32_t i = 0; i < kMaxSuspendBarriers; ++i) { 1283 AtomicInteger* ptr = tlsPtr_.active_suspend_barriers[i]; 1284 if (ptr == target) { 1285 tlsPtr_.active_suspend_barriers[i] = nullptr; 1286 } else if (ptr != nullptr) { 1287 clear_flag = false; 1288 } 1289 } 1290 if (LIKELY(clear_flag)) { 1291 AtomicClearFlag(kActiveSuspendBarrier); 1292 } 1293} 1294 1295void Thread::RunCheckpointFunction() { 1296 bool done = false; 1297 do { 1298 // Grab the suspend_count lock and copy the checkpoints one by one. When the last checkpoint is 1299 // copied, clear the list and the flag. The RequestCheckpoint function will also grab this lock 1300 // to prevent a race between setting the kCheckpointRequest flag and clearing it. 1301 Closure* checkpoint = nullptr; 1302 { 1303 MutexLock mu(this, *Locks::thread_suspend_count_lock_); 1304 if (tlsPtr_.checkpoint_function != nullptr) { 1305 checkpoint = tlsPtr_.checkpoint_function; 1306 if (!checkpoint_overflow_.empty()) { 1307 // Overflow list not empty, copy the first one out and continue. 1308 tlsPtr_.checkpoint_function = checkpoint_overflow_.front(); 1309 checkpoint_overflow_.pop_front(); 1310 } else { 1311 // No overflow checkpoints, this means that we are on the last pending checkpoint. 1312 tlsPtr_.checkpoint_function = nullptr; 1313 AtomicClearFlag(kCheckpointRequest); 1314 done = true; 1315 } 1316 } else { 1317 LOG(FATAL) << "Checkpoint flag set without pending checkpoint"; 1318 } 1319 } 1320 1321 // Outside the lock, run the checkpoint functions that we collected. 1322 ScopedTrace trace("Run checkpoint function"); 1323 DCHECK(checkpoint != nullptr); 1324 checkpoint->Run(this); 1325 } while (!done); 1326} 1327 1328void Thread::RunEmptyCheckpoint() { 1329 DCHECK_EQ(Thread::Current(), this); 1330 AtomicClearFlag(kEmptyCheckpointRequest); 1331 Runtime::Current()->GetThreadList()->EmptyCheckpointBarrier()->Pass(this); 1332} 1333 1334bool Thread::RequestCheckpoint(Closure* function) { 1335 union StateAndFlags old_state_and_flags; 1336 old_state_and_flags.as_int = tls32_.state_and_flags.as_int; 1337 if (old_state_and_flags.as_struct.state != kRunnable) { 1338 return false; // Fail, thread is suspended and so can't run a checkpoint. 1339 } 1340 1341 // We must be runnable to request a checkpoint. 1342 DCHECK_EQ(old_state_and_flags.as_struct.state, kRunnable); 1343 union StateAndFlags new_state_and_flags; 1344 new_state_and_flags.as_int = old_state_and_flags.as_int; 1345 new_state_and_flags.as_struct.flags |= kCheckpointRequest; 1346 bool success = tls32_.state_and_flags.as_atomic_int.CompareExchangeStrongSequentiallyConsistent( 1347 old_state_and_flags.as_int, new_state_and_flags.as_int); 1348 if (success) { 1349 // Succeeded setting checkpoint flag, now insert the actual checkpoint. 1350 if (tlsPtr_.checkpoint_function == nullptr) { 1351 tlsPtr_.checkpoint_function = function; 1352 } else { 1353 checkpoint_overflow_.push_back(function); 1354 } 1355 CHECK_EQ(ReadFlag(kCheckpointRequest), true); 1356 TriggerSuspend(); 1357 } 1358 return success; 1359} 1360 1361bool Thread::RequestEmptyCheckpoint() { 1362 union StateAndFlags old_state_and_flags; 1363 old_state_and_flags.as_int = tls32_.state_and_flags.as_int; 1364 if (old_state_and_flags.as_struct.state != kRunnable) { 1365 // If it's not runnable, we don't need to do anything because it won't be in the middle of a 1366 // heap access (eg. the read barrier). 1367 return false; 1368 } 1369 1370 // We must be runnable to request a checkpoint. 1371 DCHECK_EQ(old_state_and_flags.as_struct.state, kRunnable); 1372 union StateAndFlags new_state_and_flags; 1373 new_state_and_flags.as_int = old_state_and_flags.as_int; 1374 new_state_and_flags.as_struct.flags |= kEmptyCheckpointRequest; 1375 bool success = tls32_.state_and_flags.as_atomic_int.CompareExchangeStrongSequentiallyConsistent( 1376 old_state_and_flags.as_int, new_state_and_flags.as_int); 1377 if (success) { 1378 TriggerSuspend(); 1379 } 1380 return success; 1381} 1382 1383class BarrierClosure : public Closure { 1384 public: 1385 explicit BarrierClosure(Closure* wrapped) : wrapped_(wrapped), barrier_(0) {} 1386 1387 void Run(Thread* self) OVERRIDE { 1388 wrapped_->Run(self); 1389 barrier_.Pass(self); 1390 } 1391 1392 void Wait(Thread* self) { 1393 barrier_.Increment(self, 1); 1394 } 1395 1396 private: 1397 Closure* wrapped_; 1398 Barrier barrier_; 1399}; 1400 1401void Thread::RequestSynchronousCheckpoint(Closure* function) { 1402 if (this == Thread::Current()) { 1403 // Asked to run on this thread. Just run. 1404 function->Run(this); 1405 return; 1406 } 1407 Thread* self = Thread::Current(); 1408 1409 // The current thread is not this thread. 1410 1411 for (;;) { 1412 // If this thread is runnable, try to schedule a checkpoint. Do some gymnastics to not hold the 1413 // suspend-count lock for too long. 1414 if (GetState() == ThreadState::kRunnable) { 1415 BarrierClosure barrier_closure(function); 1416 bool installed = false; 1417 { 1418 MutexLock mu(self, *Locks::thread_suspend_count_lock_); 1419 installed = RequestCheckpoint(&barrier_closure); 1420 } 1421 if (installed) { 1422 barrier_closure.Wait(self); 1423 return; 1424 } 1425 // Fall-through. 1426 } 1427 1428 // This thread is not runnable, make sure we stay suspended, then run the checkpoint. 1429 // Note: ModifySuspendCountInternal also expects the thread_list_lock to be held in 1430 // certain situations. 1431 { 1432 MutexLock mu(self, *Locks::thread_list_lock_); 1433 MutexLock mu2(self, *Locks::thread_suspend_count_lock_); 1434 1435 if (!ModifySuspendCount(self, +1, nullptr, false)) { 1436 // Just retry the loop. 1437 sched_yield(); 1438 continue; 1439 } 1440 } 1441 1442 while (GetState() == ThreadState::kRunnable) { 1443 // We became runnable again. Wait till the suspend triggered in ModifySuspendCount 1444 // moves us to suspended. 1445 sched_yield(); 1446 } 1447 1448 function->Run(this); 1449 1450 { 1451 MutexLock mu(self, *Locks::thread_list_lock_); 1452 MutexLock mu2(self, *Locks::thread_suspend_count_lock_); 1453 1454 DCHECK_NE(GetState(), ThreadState::kRunnable); 1455 bool updated = ModifySuspendCount(self, -1, nullptr, false); 1456 DCHECK(updated); 1457 } 1458 1459 return; // We're done, break out of the loop. 1460 } 1461} 1462 1463Closure* Thread::GetFlipFunction() { 1464 Atomic<Closure*>* atomic_func = reinterpret_cast<Atomic<Closure*>*>(&tlsPtr_.flip_function); 1465 Closure* func; 1466 do { 1467 func = atomic_func->LoadRelaxed(); 1468 if (func == nullptr) { 1469 return nullptr; 1470 } 1471 } while (!atomic_func->CompareExchangeWeakSequentiallyConsistent(func, nullptr)); 1472 DCHECK(func != nullptr); 1473 return func; 1474} 1475 1476void Thread::SetFlipFunction(Closure* function) { 1477 CHECK(function != nullptr); 1478 Atomic<Closure*>* atomic_func = reinterpret_cast<Atomic<Closure*>*>(&tlsPtr_.flip_function); 1479 atomic_func->StoreSequentiallyConsistent(function); 1480} 1481 1482void Thread::FullSuspendCheck() { 1483 ScopedTrace trace(__FUNCTION__); 1484 VLOG(threads) << this << " self-suspending"; 1485 // Make thread appear suspended to other threads, release mutator_lock_. 1486 // Transition to suspended and back to runnable, re-acquire share on mutator_lock_. 1487 ScopedThreadSuspension(this, kSuspended); 1488 VLOG(threads) << this << " self-reviving"; 1489} 1490 1491static std::string GetSchedulerGroupName(pid_t tid) { 1492 // /proc/<pid>/cgroup looks like this: 1493 // 2:devices:/ 1494 // 1:cpuacct,cpu:/ 1495 // We want the third field from the line whose second field contains the "cpu" token. 1496 std::string cgroup_file; 1497 if (!ReadFileToString(StringPrintf("/proc/self/task/%d/cgroup", tid), &cgroup_file)) { 1498 return ""; 1499 } 1500 std::vector<std::string> cgroup_lines; 1501 Split(cgroup_file, '\n', &cgroup_lines); 1502 for (size_t i = 0; i < cgroup_lines.size(); ++i) { 1503 std::vector<std::string> cgroup_fields; 1504 Split(cgroup_lines[i], ':', &cgroup_fields); 1505 std::vector<std::string> cgroups; 1506 Split(cgroup_fields[1], ',', &cgroups); 1507 for (size_t j = 0; j < cgroups.size(); ++j) { 1508 if (cgroups[j] == "cpu") { 1509 return cgroup_fields[2].substr(1); // Skip the leading slash. 1510 } 1511 } 1512 } 1513 return ""; 1514} 1515 1516 1517void Thread::DumpState(std::ostream& os, const Thread* thread, pid_t tid) { 1518 std::string group_name; 1519 int priority; 1520 bool is_daemon = false; 1521 Thread* self = Thread::Current(); 1522 1523 // If flip_function is not null, it means we have run a checkpoint 1524 // before the thread wakes up to execute the flip function and the 1525 // thread roots haven't been forwarded. So the following access to 1526 // the roots (opeer or methods in the frames) would be bad. Run it 1527 // here. TODO: clean up. 1528 if (thread != nullptr) { 1529 ScopedObjectAccessUnchecked soa(self); 1530 Thread* this_thread = const_cast<Thread*>(thread); 1531 Closure* flip_func = this_thread->GetFlipFunction(); 1532 if (flip_func != nullptr) { 1533 flip_func->Run(this_thread); 1534 } 1535 } 1536 1537 // Don't do this if we are aborting since the GC may have all the threads suspended. This will 1538 // cause ScopedObjectAccessUnchecked to deadlock. 1539 if (gAborting == 0 && self != nullptr && thread != nullptr && thread->tlsPtr_.opeer != nullptr) { 1540 ScopedObjectAccessUnchecked soa(self); 1541 priority = jni::DecodeArtField(WellKnownClasses::java_lang_Thread_priority) 1542 ->GetInt(thread->tlsPtr_.opeer); 1543 is_daemon = jni::DecodeArtField(WellKnownClasses::java_lang_Thread_daemon) 1544 ->GetBoolean(thread->tlsPtr_.opeer); 1545 1546 ObjPtr<mirror::Object> thread_group = 1547 jni::DecodeArtField(WellKnownClasses::java_lang_Thread_group) 1548 ->GetObject(thread->tlsPtr_.opeer); 1549 1550 if (thread_group != nullptr) { 1551 ArtField* group_name_field = 1552 jni::DecodeArtField(WellKnownClasses::java_lang_ThreadGroup_name); 1553 ObjPtr<mirror::String> group_name_string = 1554 group_name_field->GetObject(thread_group)->AsString(); 1555 group_name = (group_name_string != nullptr) ? group_name_string->ToModifiedUtf8() : "<null>"; 1556 } 1557 } else { 1558 priority = GetNativePriority(); 1559 } 1560 1561 std::string scheduler_group_name(GetSchedulerGroupName(tid)); 1562 if (scheduler_group_name.empty()) { 1563 scheduler_group_name = "default"; 1564 } 1565 1566 if (thread != nullptr) { 1567 os << '"' << *thread->tlsPtr_.name << '"'; 1568 if (is_daemon) { 1569 os << " daemon"; 1570 } 1571 os << " prio=" << priority 1572 << " tid=" << thread->GetThreadId() 1573 << " " << thread->GetState(); 1574 if (thread->IsStillStarting()) { 1575 os << " (still starting up)"; 1576 } 1577 os << "\n"; 1578 } else { 1579 os << '"' << ::art::GetThreadName(tid) << '"' 1580 << " prio=" << priority 1581 << " (not attached)\n"; 1582 } 1583 1584 if (thread != nullptr) { 1585 MutexLock mu(self, *Locks::thread_suspend_count_lock_); 1586 os << " | group=\"" << group_name << "\"" 1587 << " sCount=" << thread->tls32_.suspend_count 1588 << " dsCount=" << thread->tls32_.debug_suspend_count 1589 << " flags=" << thread->tls32_.state_and_flags.as_struct.flags 1590 << " obj=" << reinterpret_cast<void*>(thread->tlsPtr_.opeer) 1591 << " self=" << reinterpret_cast<const void*>(thread) << "\n"; 1592 } 1593 1594 os << " | sysTid=" << tid 1595 << " nice=" << getpriority(PRIO_PROCESS, tid) 1596 << " cgrp=" << scheduler_group_name; 1597 if (thread != nullptr) { 1598 int policy; 1599 sched_param sp; 1600#if !defined(__APPLE__) 1601 // b/36445592 Don't use pthread_getschedparam since pthread may have exited. 1602 policy = sched_getscheduler(tid); 1603 if (policy == -1) { 1604 PLOG(WARNING) << "sched_getscheduler(" << tid << ")"; 1605 } 1606 int sched_getparam_result = sched_getparam(tid, &sp); 1607 if (sched_getparam_result == -1) { 1608 PLOG(WARNING) << "sched_getparam(" << tid << ", &sp)"; 1609 sp.sched_priority = -1; 1610 } 1611#else 1612 CHECK_PTHREAD_CALL(pthread_getschedparam, (thread->tlsPtr_.pthread_self, &policy, &sp), 1613 __FUNCTION__); 1614#endif 1615 os << " sched=" << policy << "/" << sp.sched_priority 1616 << " handle=" << reinterpret_cast<void*>(thread->tlsPtr_.pthread_self); 1617 } 1618 os << "\n"; 1619 1620 // Grab the scheduler stats for this thread. 1621 std::string scheduler_stats; 1622 if (ReadFileToString(StringPrintf("/proc/self/task/%d/schedstat", tid), &scheduler_stats)) { 1623 scheduler_stats.resize(scheduler_stats.size() - 1); // Lose the trailing '\n'. 1624 } else { 1625 scheduler_stats = "0 0 0"; 1626 } 1627 1628 char native_thread_state = '?'; 1629 int utime = 0; 1630 int stime = 0; 1631 int task_cpu = 0; 1632 GetTaskStats(tid, &native_thread_state, &utime, &stime, &task_cpu); 1633 1634 os << " | state=" << native_thread_state 1635 << " schedstat=( " << scheduler_stats << " )" 1636 << " utm=" << utime 1637 << " stm=" << stime 1638 << " core=" << task_cpu 1639 << " HZ=" << sysconf(_SC_CLK_TCK) << "\n"; 1640 if (thread != nullptr) { 1641 os << " | stack=" << reinterpret_cast<void*>(thread->tlsPtr_.stack_begin) << "-" 1642 << reinterpret_cast<void*>(thread->tlsPtr_.stack_end) << " stackSize=" 1643 << PrettySize(thread->tlsPtr_.stack_size) << "\n"; 1644 // Dump the held mutexes. 1645 os << " | held mutexes="; 1646 for (size_t i = 0; i < kLockLevelCount; ++i) { 1647 if (i != kMonitorLock) { 1648 BaseMutex* mutex = thread->GetHeldMutex(static_cast<LockLevel>(i)); 1649 if (mutex != nullptr) { 1650 os << " \"" << mutex->GetName() << "\""; 1651 if (mutex->IsReaderWriterMutex()) { 1652 ReaderWriterMutex* rw_mutex = down_cast<ReaderWriterMutex*>(mutex); 1653 if (rw_mutex->GetExclusiveOwnerTid() == static_cast<uint64_t>(tid)) { 1654 os << "(exclusive held)"; 1655 } else { 1656 os << "(shared held)"; 1657 } 1658 } 1659 } 1660 } 1661 } 1662 os << "\n"; 1663 } 1664} 1665 1666void Thread::DumpState(std::ostream& os) const { 1667 Thread::DumpState(os, this, GetTid()); 1668} 1669 1670struct StackDumpVisitor : public StackVisitor { 1671 StackDumpVisitor(std::ostream& os_in, 1672 Thread* thread_in, 1673 Context* context, 1674 bool can_allocate_in, 1675 bool check_suspended = true, 1676 bool dump_locks_in = true) 1677 REQUIRES_SHARED(Locks::mutator_lock_) 1678 : StackVisitor(thread_in, 1679 context, 1680 StackVisitor::StackWalkKind::kIncludeInlinedFrames, 1681 check_suspended), 1682 os(os_in), 1683 can_allocate(can_allocate_in), 1684 last_method(nullptr), 1685 last_line_number(0), 1686 repetition_count(0), 1687 frame_count(0), 1688 dump_locks(dump_locks_in) {} 1689 1690 virtual ~StackDumpVisitor() { 1691 if (frame_count == 0) { 1692 os << " (no managed stack frames)\n"; 1693 } 1694 } 1695 1696 bool VisitFrame() REQUIRES_SHARED(Locks::mutator_lock_) { 1697 ArtMethod* m = GetMethod(); 1698 if (m->IsRuntimeMethod()) { 1699 return true; 1700 } 1701 m = m->GetInterfaceMethodIfProxy(kRuntimePointerSize); 1702 const int kMaxRepetition = 3; 1703 ObjPtr<mirror::Class> c = m->GetDeclaringClass(); 1704 ObjPtr<mirror::DexCache> dex_cache = c->GetDexCache(); 1705 int line_number = -1; 1706 if (dex_cache != nullptr) { // be tolerant of bad input 1707 const DexFile* dex_file = dex_cache->GetDexFile(); 1708 line_number = annotations::GetLineNumFromPC(dex_file, m, GetDexPc(false)); 1709 } 1710 if (line_number == last_line_number && last_method == m) { 1711 ++repetition_count; 1712 } else { 1713 if (repetition_count >= kMaxRepetition) { 1714 os << " ... repeated " << (repetition_count - kMaxRepetition) << " times\n"; 1715 } 1716 repetition_count = 0; 1717 last_line_number = line_number; 1718 last_method = m; 1719 } 1720 if (repetition_count < kMaxRepetition) { 1721 os << " at " << m->PrettyMethod(false); 1722 if (m->IsNative()) { 1723 os << "(Native method)"; 1724 } else { 1725 const char* source_file(m->GetDeclaringClassSourceFile()); 1726 os << "(" << (source_file != nullptr ? source_file : "unavailable") 1727 << ":" << line_number << ")"; 1728 } 1729 os << "\n"; 1730 if (frame_count == 0) { 1731 Monitor::DescribeWait(os, GetThread()); 1732 } 1733 if (can_allocate && dump_locks) { 1734 // Visit locks, but do not abort on errors. This would trigger a nested abort. 1735 // Skip visiting locks if dump_locks is false as it would cause a bad_mutexes_held in 1736 // RegTypeCache::RegTypeCache due to thread_list_lock. 1737 Monitor::VisitLocks(this, DumpLockedObject, &os, false); 1738 } 1739 } 1740 1741 ++frame_count; 1742 return true; 1743 } 1744 1745 static void DumpLockedObject(mirror::Object* o, void* context) 1746 REQUIRES_SHARED(Locks::mutator_lock_) { 1747 std::ostream& os = *reinterpret_cast<std::ostream*>(context); 1748 os << " - locked "; 1749 if (o == nullptr) { 1750 os << "an unknown object"; 1751 } else { 1752 if (kUseReadBarrier && Thread::Current()->GetIsGcMarking()) { 1753 // We may call Thread::Dump() in the middle of the CC thread flip and this thread's stack 1754 // may have not been flipped yet and "o" may be a from-space (stale) ref, in which case the 1755 // IdentityHashCode call below will crash. So explicitly mark/forward it here. 1756 o = ReadBarrier::Mark(o); 1757 } 1758 if ((o->GetLockWord(false).GetState() == LockWord::kThinLocked) && 1759 Locks::mutator_lock_->IsExclusiveHeld(Thread::Current())) { 1760 // Getting the identity hashcode here would result in lock inflation and suspension of the 1761 // current thread, which isn't safe if this is the only runnable thread. 1762 os << StringPrintf("<@addr=0x%" PRIxPTR "> (a %s)", reinterpret_cast<intptr_t>(o), 1763 o->PrettyTypeOf().c_str()); 1764 } else { 1765 // IdentityHashCode can cause thread suspension, which would invalidate o if it moved. So 1766 // we get the pretty type beofre we call IdentityHashCode. 1767 const std::string pretty_type(o->PrettyTypeOf()); 1768 os << StringPrintf("<0x%08x> (a %s)", o->IdentityHashCode(), pretty_type.c_str()); 1769 } 1770 } 1771 os << "\n"; 1772 } 1773 1774 std::ostream& os; 1775 const bool can_allocate; 1776 ArtMethod* last_method; 1777 int last_line_number; 1778 int repetition_count; 1779 int frame_count; 1780 const bool dump_locks; 1781}; 1782 1783static bool ShouldShowNativeStack(const Thread* thread) 1784 REQUIRES_SHARED(Locks::mutator_lock_) { 1785 ThreadState state = thread->GetState(); 1786 1787 // In native code somewhere in the VM (one of the kWaitingFor* states)? That's interesting. 1788 if (state > kWaiting && state < kStarting) { 1789 return true; 1790 } 1791 1792 // In an Object.wait variant or Thread.sleep? That's not interesting. 1793 if (state == kTimedWaiting || state == kSleeping || state == kWaiting) { 1794 return false; 1795 } 1796 1797 // Threads with no managed stack frames should be shown. 1798 const ManagedStack* managed_stack = thread->GetManagedStack(); 1799 if (managed_stack == nullptr || (managed_stack->GetTopQuickFrame() == nullptr && 1800 managed_stack->GetTopShadowFrame() == nullptr)) { 1801 return true; 1802 } 1803 1804 // In some other native method? That's interesting. 1805 // We don't just check kNative because native methods will be in state kSuspended if they're 1806 // calling back into the VM, or kBlocked if they're blocked on a monitor, or one of the 1807 // thread-startup states if it's early enough in their life cycle (http://b/7432159). 1808 ArtMethod* current_method = thread->GetCurrentMethod(nullptr); 1809 return current_method != nullptr && current_method->IsNative(); 1810} 1811 1812void Thread::DumpJavaStack(std::ostream& os, bool check_suspended, bool dump_locks) const { 1813 // If flip_function is not null, it means we have run a checkpoint 1814 // before the thread wakes up to execute the flip function and the 1815 // thread roots haven't been forwarded. So the following access to 1816 // the roots (locks or methods in the frames) would be bad. Run it 1817 // here. TODO: clean up. 1818 { 1819 Thread* this_thread = const_cast<Thread*>(this); 1820 Closure* flip_func = this_thread->GetFlipFunction(); 1821 if (flip_func != nullptr) { 1822 flip_func->Run(this_thread); 1823 } 1824 } 1825 1826 // Dumping the Java stack involves the verifier for locks. The verifier operates under the 1827 // assumption that there is no exception pending on entry. Thus, stash any pending exception. 1828 // Thread::Current() instead of this in case a thread is dumping the stack of another suspended 1829 // thread. 1830 StackHandleScope<1> scope(Thread::Current()); 1831 Handle<mirror::Throwable> exc; 1832 bool have_exception = false; 1833 if (IsExceptionPending()) { 1834 exc = scope.NewHandle(GetException()); 1835 const_cast<Thread*>(this)->ClearException(); 1836 have_exception = true; 1837 } 1838 1839 std::unique_ptr<Context> context(Context::Create()); 1840 StackDumpVisitor dumper(os, const_cast<Thread*>(this), context.get(), 1841 !tls32_.throwing_OutOfMemoryError, check_suspended, dump_locks); 1842 dumper.WalkStack(); 1843 1844 if (have_exception) { 1845 const_cast<Thread*>(this)->SetException(exc.Get()); 1846 } 1847} 1848 1849void Thread::DumpStack(std::ostream& os, 1850 bool dump_native_stack, 1851 BacktraceMap* backtrace_map, 1852 bool force_dump_stack) const { 1853 // TODO: we call this code when dying but may not have suspended the thread ourself. The 1854 // IsSuspended check is therefore racy with the use for dumping (normally we inhibit 1855 // the race with the thread_suspend_count_lock_). 1856 bool dump_for_abort = (gAborting > 0); 1857 bool safe_to_dump = (this == Thread::Current() || IsSuspended()); 1858 if (!kIsDebugBuild) { 1859 // We always want to dump the stack for an abort, however, there is no point dumping another 1860 // thread's stack in debug builds where we'll hit the not suspended check in the stack walk. 1861 safe_to_dump = (safe_to_dump || dump_for_abort); 1862 } 1863 if (safe_to_dump || force_dump_stack) { 1864 // If we're currently in native code, dump that stack before dumping the managed stack. 1865 if (dump_native_stack && (dump_for_abort || force_dump_stack || ShouldShowNativeStack(this))) { 1866 DumpKernelStack(os, GetTid(), " kernel: ", false); 1867 ArtMethod* method = 1868 GetCurrentMethod(nullptr, 1869 /*check_suspended*/ !force_dump_stack, 1870 /*abort_on_error*/ !(dump_for_abort || force_dump_stack)); 1871 DumpNativeStack(os, GetTid(), backtrace_map, " native: ", method); 1872 } 1873 DumpJavaStack(os, 1874 /*check_suspended*/ !force_dump_stack, 1875 /*dump_locks*/ !force_dump_stack); 1876 } else { 1877 os << "Not able to dump stack of thread that isn't suspended"; 1878 } 1879} 1880 1881void Thread::ThreadExitCallback(void* arg) { 1882 Thread* self = reinterpret_cast<Thread*>(arg); 1883 if (self->tls32_.thread_exit_check_count == 0) { 1884 LOG(WARNING) << "Native thread exiting without having called DetachCurrentThread (maybe it's " 1885 "going to use a pthread_key_create destructor?): " << *self; 1886 CHECK(is_started_); 1887#ifdef ART_TARGET_ANDROID 1888 __get_tls()[TLS_SLOT_ART_THREAD_SELF] = self; 1889#else 1890 CHECK_PTHREAD_CALL(pthread_setspecific, (Thread::pthread_key_self_, self), "reattach self"); 1891#endif 1892 self->tls32_.thread_exit_check_count = 1; 1893 } else { 1894 LOG(FATAL) << "Native thread exited without calling DetachCurrentThread: " << *self; 1895 } 1896} 1897 1898void Thread::Startup() { 1899 CHECK(!is_started_); 1900 is_started_ = true; 1901 { 1902 // MutexLock to keep annotalysis happy. 1903 // 1904 // Note we use null for the thread because Thread::Current can 1905 // return garbage since (is_started_ == true) and 1906 // Thread::pthread_key_self_ is not yet initialized. 1907 // This was seen on glibc. 1908 MutexLock mu(nullptr, *Locks::thread_suspend_count_lock_); 1909 resume_cond_ = new ConditionVariable("Thread resumption condition variable", 1910 *Locks::thread_suspend_count_lock_); 1911 } 1912 1913 // Allocate a TLS slot. 1914 CHECK_PTHREAD_CALL(pthread_key_create, (&Thread::pthread_key_self_, Thread::ThreadExitCallback), 1915 "self key"); 1916 1917 // Double-check the TLS slot allocation. 1918 if (pthread_getspecific(pthread_key_self_) != nullptr) { 1919 LOG(FATAL) << "Newly-created pthread TLS slot is not nullptr"; 1920 } 1921} 1922 1923void Thread::FinishStartup() { 1924 Runtime* runtime = Runtime::Current(); 1925 CHECK(runtime->IsStarted()); 1926 1927 // Finish attaching the main thread. 1928 ScopedObjectAccess soa(Thread::Current()); 1929 Thread::Current()->CreatePeer("main", false, runtime->GetMainThreadGroup()); 1930 Thread::Current()->AssertNoPendingException(); 1931 1932 Runtime::Current()->GetClassLinker()->RunRootClinits(); 1933 1934 // The thread counts as started from now on. We need to add it to the ThreadGroup. For regular 1935 // threads, this is done in Thread.start() on the Java side. 1936 { 1937 // This is only ever done once. There's no benefit in caching the method. 1938 jmethodID thread_group_add = soa.Env()->GetMethodID(WellKnownClasses::java_lang_ThreadGroup, 1939 "add", 1940 "(Ljava/lang/Thread;)V"); 1941 CHECK(thread_group_add != nullptr); 1942 ScopedLocalRef<jobject> thread_jobject( 1943 soa.Env(), soa.Env()->AddLocalReference<jobject>(Thread::Current()->GetPeer())); 1944 soa.Env()->CallNonvirtualVoidMethod(runtime->GetMainThreadGroup(), 1945 WellKnownClasses::java_lang_ThreadGroup, 1946 thread_group_add, 1947 thread_jobject.get()); 1948 Thread::Current()->AssertNoPendingException(); 1949 } 1950} 1951 1952void Thread::Shutdown() { 1953 CHECK(is_started_); 1954 is_started_ = false; 1955 CHECK_PTHREAD_CALL(pthread_key_delete, (Thread::pthread_key_self_), "self key"); 1956 MutexLock mu(Thread::Current(), *Locks::thread_suspend_count_lock_); 1957 if (resume_cond_ != nullptr) { 1958 delete resume_cond_; 1959 resume_cond_ = nullptr; 1960 } 1961} 1962 1963Thread::Thread(bool daemon) 1964 : tls32_(daemon), 1965 wait_monitor_(nullptr), 1966 interrupted_(false), 1967 custom_tls_(nullptr), 1968 can_call_into_java_(true) { 1969 wait_mutex_ = new Mutex("a thread wait mutex"); 1970 wait_cond_ = new ConditionVariable("a thread wait condition variable", *wait_mutex_); 1971 tlsPtr_.instrumentation_stack = new std::deque<instrumentation::InstrumentationStackFrame>; 1972 tlsPtr_.name = new std::string(kThreadNameDuringStartup); 1973 1974 static_assert((sizeof(Thread) % 4) == 0U, 1975 "art::Thread has a size which is not a multiple of 4."); 1976 tls32_.state_and_flags.as_struct.flags = 0; 1977 tls32_.state_and_flags.as_struct.state = kNative; 1978 memset(&tlsPtr_.held_mutexes[0], 0, sizeof(tlsPtr_.held_mutexes)); 1979 std::fill(tlsPtr_.rosalloc_runs, 1980 tlsPtr_.rosalloc_runs + kNumRosAllocThreadLocalSizeBracketsInThread, 1981 gc::allocator::RosAlloc::GetDedicatedFullRun()); 1982 tlsPtr_.checkpoint_function = nullptr; 1983 for (uint32_t i = 0; i < kMaxSuspendBarriers; ++i) { 1984 tlsPtr_.active_suspend_barriers[i] = nullptr; 1985 } 1986 tlsPtr_.flip_function = nullptr; 1987 tlsPtr_.thread_local_mark_stack = nullptr; 1988 tls32_.is_transitioning_to_runnable = false; 1989} 1990 1991bool Thread::IsStillStarting() const { 1992 // You might think you can check whether the state is kStarting, but for much of thread startup, 1993 // the thread is in kNative; it might also be in kVmWait. 1994 // You might think you can check whether the peer is null, but the peer is actually created and 1995 // assigned fairly early on, and needs to be. 1996 // It turns out that the last thing to change is the thread name; that's a good proxy for "has 1997 // this thread _ever_ entered kRunnable". 1998 return (tlsPtr_.jpeer == nullptr && tlsPtr_.opeer == nullptr) || 1999 (*tlsPtr_.name == kThreadNameDuringStartup); 2000} 2001 2002void Thread::AssertPendingException() const { 2003 CHECK(IsExceptionPending()) << "Pending exception expected."; 2004} 2005 2006void Thread::AssertPendingOOMException() const { 2007 AssertPendingException(); 2008 auto* e = GetException(); 2009 CHECK_EQ(e->GetClass(), DecodeJObject(WellKnownClasses::java_lang_OutOfMemoryError)->AsClass()) 2010 << e->Dump(); 2011} 2012 2013void Thread::AssertNoPendingException() const { 2014 if (UNLIKELY(IsExceptionPending())) { 2015 ScopedObjectAccess soa(Thread::Current()); 2016 LOG(FATAL) << "No pending exception expected: " << GetException()->Dump(); 2017 } 2018} 2019 2020void Thread::AssertNoPendingExceptionForNewException(const char* msg) const { 2021 if (UNLIKELY(IsExceptionPending())) { 2022 ScopedObjectAccess soa(Thread::Current()); 2023 LOG(FATAL) << "Throwing new exception '" << msg << "' with unexpected pending exception: " 2024 << GetException()->Dump(); 2025 } 2026} 2027 2028class MonitorExitVisitor : public SingleRootVisitor { 2029 public: 2030 explicit MonitorExitVisitor(Thread* self) : self_(self) { } 2031 2032 // NO_THREAD_SAFETY_ANALYSIS due to MonitorExit. 2033 void VisitRoot(mirror::Object* entered_monitor, const RootInfo& info ATTRIBUTE_UNUSED) 2034 OVERRIDE NO_THREAD_SAFETY_ANALYSIS { 2035 if (self_->HoldsLock(entered_monitor)) { 2036 LOG(WARNING) << "Calling MonitorExit on object " 2037 << entered_monitor << " (" << entered_monitor->PrettyTypeOf() << ")" 2038 << " left locked by native thread " 2039 << *Thread::Current() << " which is detaching"; 2040 entered_monitor->MonitorExit(self_); 2041 } 2042 } 2043 2044 private: 2045 Thread* const self_; 2046}; 2047 2048void Thread::Destroy() { 2049 Thread* self = this; 2050 DCHECK_EQ(self, Thread::Current()); 2051 2052 if (tlsPtr_.jni_env != nullptr) { 2053 { 2054 ScopedObjectAccess soa(self); 2055 MonitorExitVisitor visitor(self); 2056 // On thread detach, all monitors entered with JNI MonitorEnter are automatically exited. 2057 tlsPtr_.jni_env->monitors.VisitRoots(&visitor, RootInfo(kRootVMInternal)); 2058 } 2059 // Release locally held global references which releasing may require the mutator lock. 2060 if (tlsPtr_.jpeer != nullptr) { 2061 // If pthread_create fails we don't have a jni env here. 2062 tlsPtr_.jni_env->DeleteGlobalRef(tlsPtr_.jpeer); 2063 tlsPtr_.jpeer = nullptr; 2064 } 2065 if (tlsPtr_.class_loader_override != nullptr) { 2066 tlsPtr_.jni_env->DeleteGlobalRef(tlsPtr_.class_loader_override); 2067 tlsPtr_.class_loader_override = nullptr; 2068 } 2069 } 2070 2071 if (tlsPtr_.opeer != nullptr) { 2072 ScopedObjectAccess soa(self); 2073 // We may need to call user-supplied managed code, do this before final clean-up. 2074 HandleUncaughtExceptions(soa); 2075 RemoveFromThreadGroup(soa); 2076 2077 // this.nativePeer = 0; 2078 if (Runtime::Current()->IsActiveTransaction()) { 2079 jni::DecodeArtField(WellKnownClasses::java_lang_Thread_nativePeer) 2080 ->SetLong<true>(tlsPtr_.opeer, 0); 2081 } else { 2082 jni::DecodeArtField(WellKnownClasses::java_lang_Thread_nativePeer) 2083 ->SetLong<false>(tlsPtr_.opeer, 0); 2084 } 2085 Runtime* runtime = Runtime::Current(); 2086 if (runtime != nullptr) { 2087 runtime->GetRuntimeCallbacks()->ThreadDeath(self); 2088 } 2089 2090 2091 // Thread.join() is implemented as an Object.wait() on the Thread.lock object. Signal anyone 2092 // who is waiting. 2093 ObjPtr<mirror::Object> lock = 2094 jni::DecodeArtField(WellKnownClasses::java_lang_Thread_lock)->GetObject(tlsPtr_.opeer); 2095 // (This conditional is only needed for tests, where Thread.lock won't have been set.) 2096 if (lock != nullptr) { 2097 StackHandleScope<1> hs(self); 2098 Handle<mirror::Object> h_obj(hs.NewHandle(lock)); 2099 ObjectLock<mirror::Object> locker(self, h_obj); 2100 locker.NotifyAll(); 2101 } 2102 tlsPtr_.opeer = nullptr; 2103 } 2104 2105 { 2106 ScopedObjectAccess soa(self); 2107 Runtime::Current()->GetHeap()->RevokeThreadLocalBuffers(this); 2108 if (kUseReadBarrier) { 2109 Runtime::Current()->GetHeap()->ConcurrentCopyingCollector()->RevokeThreadLocalMarkStack(this); 2110 } 2111 } 2112} 2113 2114Thread::~Thread() { 2115 CHECK(tlsPtr_.class_loader_override == nullptr); 2116 CHECK(tlsPtr_.jpeer == nullptr); 2117 CHECK(tlsPtr_.opeer == nullptr); 2118 bool initialized = (tlsPtr_.jni_env != nullptr); // Did Thread::Init run? 2119 if (initialized) { 2120 delete tlsPtr_.jni_env; 2121 tlsPtr_.jni_env = nullptr; 2122 } 2123 CHECK_NE(GetState(), kRunnable); 2124 CHECK(!ReadFlag(kCheckpointRequest)); 2125 CHECK(!ReadFlag(kEmptyCheckpointRequest)); 2126 CHECK(tlsPtr_.checkpoint_function == nullptr); 2127 CHECK_EQ(checkpoint_overflow_.size(), 0u); 2128 CHECK(tlsPtr_.flip_function == nullptr); 2129 CHECK_EQ(tls32_.is_transitioning_to_runnable, false); 2130 2131 // Make sure we processed all deoptimization requests. 2132 CHECK(tlsPtr_.deoptimization_context_stack == nullptr) << "Missed deoptimization"; 2133 CHECK(tlsPtr_.frame_id_to_shadow_frame == nullptr) << 2134 "Not all deoptimized frames have been consumed by the debugger."; 2135 2136 // We may be deleting a still born thread. 2137 SetStateUnsafe(kTerminated); 2138 2139 delete wait_cond_; 2140 delete wait_mutex_; 2141 2142 if (tlsPtr_.long_jump_context != nullptr) { 2143 delete tlsPtr_.long_jump_context; 2144 } 2145 2146 if (initialized) { 2147 CleanupCpu(); 2148 } 2149 2150 if (tlsPtr_.single_step_control != nullptr) { 2151 delete tlsPtr_.single_step_control; 2152 } 2153 delete tlsPtr_.instrumentation_stack; 2154 delete tlsPtr_.name; 2155 delete tlsPtr_.deps_or_stack_trace_sample.stack_trace_sample; 2156 2157 Runtime::Current()->GetHeap()->AssertThreadLocalBuffersAreRevoked(this); 2158 2159 TearDownAlternateSignalStack(); 2160} 2161 2162void Thread::HandleUncaughtExceptions(ScopedObjectAccess& soa) { 2163 if (!IsExceptionPending()) { 2164 return; 2165 } 2166 ScopedLocalRef<jobject> peer(tlsPtr_.jni_env, soa.AddLocalReference<jobject>(tlsPtr_.opeer)); 2167 ScopedThreadStateChange tsc(this, kNative); 2168 2169 // Get and clear the exception. 2170 ScopedLocalRef<jthrowable> exception(tlsPtr_.jni_env, tlsPtr_.jni_env->ExceptionOccurred()); 2171 tlsPtr_.jni_env->ExceptionClear(); 2172 2173 // Call the Thread instance's dispatchUncaughtException(Throwable) 2174 tlsPtr_.jni_env->CallVoidMethod(peer.get(), 2175 WellKnownClasses::java_lang_Thread_dispatchUncaughtException, 2176 exception.get()); 2177 2178 // If the dispatchUncaughtException threw, clear that exception too. 2179 tlsPtr_.jni_env->ExceptionClear(); 2180} 2181 2182void Thread::RemoveFromThreadGroup(ScopedObjectAccess& soa) { 2183 // this.group.removeThread(this); 2184 // group can be null if we're in the compiler or a test. 2185 ObjPtr<mirror::Object> ogroup = jni::DecodeArtField(WellKnownClasses::java_lang_Thread_group) 2186 ->GetObject(tlsPtr_.opeer); 2187 if (ogroup != nullptr) { 2188 ScopedLocalRef<jobject> group(soa.Env(), soa.AddLocalReference<jobject>(ogroup)); 2189 ScopedLocalRef<jobject> peer(soa.Env(), soa.AddLocalReference<jobject>(tlsPtr_.opeer)); 2190 ScopedThreadStateChange tsc(soa.Self(), kNative); 2191 tlsPtr_.jni_env->CallVoidMethod(group.get(), 2192 WellKnownClasses::java_lang_ThreadGroup_removeThread, 2193 peer.get()); 2194 } 2195} 2196 2197bool Thread::HandleScopeContains(jobject obj) const { 2198 StackReference<mirror::Object>* hs_entry = 2199 reinterpret_cast<StackReference<mirror::Object>*>(obj); 2200 for (BaseHandleScope* cur = tlsPtr_.top_handle_scope; cur!= nullptr; cur = cur->GetLink()) { 2201 if (cur->Contains(hs_entry)) { 2202 return true; 2203 } 2204 } 2205 // JNI code invoked from portable code uses shadow frames rather than the handle scope. 2206 return tlsPtr_.managed_stack.ShadowFramesContain(hs_entry); 2207} 2208 2209void Thread::HandleScopeVisitRoots(RootVisitor* visitor, uint32_t thread_id) { 2210 BufferedRootVisitor<kDefaultBufferedRootCount> buffered_visitor( 2211 visitor, RootInfo(kRootNativeStack, thread_id)); 2212 for (BaseHandleScope* cur = tlsPtr_.top_handle_scope; cur; cur = cur->GetLink()) { 2213 cur->VisitRoots(buffered_visitor); 2214 } 2215} 2216 2217ObjPtr<mirror::Object> Thread::DecodeJObject(jobject obj) const { 2218 if (obj == nullptr) { 2219 return nullptr; 2220 } 2221 IndirectRef ref = reinterpret_cast<IndirectRef>(obj); 2222 IndirectRefKind kind = IndirectReferenceTable::GetIndirectRefKind(ref); 2223 ObjPtr<mirror::Object> result; 2224 bool expect_null = false; 2225 // The "kinds" below are sorted by the frequency we expect to encounter them. 2226 if (kind == kLocal) { 2227 IndirectReferenceTable& locals = tlsPtr_.jni_env->locals; 2228 // Local references do not need a read barrier. 2229 result = locals.Get<kWithoutReadBarrier>(ref); 2230 } else if (kind == kHandleScopeOrInvalid) { 2231 // TODO: make stack indirect reference table lookup more efficient. 2232 // Check if this is a local reference in the handle scope. 2233 if (LIKELY(HandleScopeContains(obj))) { 2234 // Read from handle scope. 2235 result = reinterpret_cast<StackReference<mirror::Object>*>(obj)->AsMirrorPtr(); 2236 VerifyObject(result); 2237 } else { 2238 tlsPtr_.jni_env->vm->JniAbortF(nullptr, "use of invalid jobject %p", obj); 2239 expect_null = true; 2240 result = nullptr; 2241 } 2242 } else if (kind == kGlobal) { 2243 result = tlsPtr_.jni_env->vm->DecodeGlobal(ref); 2244 } else { 2245 DCHECK_EQ(kind, kWeakGlobal); 2246 result = tlsPtr_.jni_env->vm->DecodeWeakGlobal(const_cast<Thread*>(this), ref); 2247 if (Runtime::Current()->IsClearedJniWeakGlobal(result)) { 2248 // This is a special case where it's okay to return null. 2249 expect_null = true; 2250 result = nullptr; 2251 } 2252 } 2253 2254 if (UNLIKELY(!expect_null && result == nullptr)) { 2255 tlsPtr_.jni_env->vm->JniAbortF(nullptr, "use of deleted %s %p", 2256 ToStr<IndirectRefKind>(kind).c_str(), obj); 2257 } 2258 return result; 2259} 2260 2261bool Thread::IsJWeakCleared(jweak obj) const { 2262 CHECK(obj != nullptr); 2263 IndirectRef ref = reinterpret_cast<IndirectRef>(obj); 2264 IndirectRefKind kind = IndirectReferenceTable::GetIndirectRefKind(ref); 2265 CHECK_EQ(kind, kWeakGlobal); 2266 return tlsPtr_.jni_env->vm->IsWeakGlobalCleared(const_cast<Thread*>(this), ref); 2267} 2268 2269// Implements java.lang.Thread.interrupted. 2270bool Thread::Interrupted() { 2271 MutexLock mu(Thread::Current(), *wait_mutex_); 2272 bool interrupted = IsInterruptedLocked(); 2273 SetInterruptedLocked(false); 2274 return interrupted; 2275} 2276 2277// Implements java.lang.Thread.isInterrupted. 2278bool Thread::IsInterrupted() { 2279 MutexLock mu(Thread::Current(), *wait_mutex_); 2280 return IsInterruptedLocked(); 2281} 2282 2283void Thread::Interrupt(Thread* self) { 2284 MutexLock mu(self, *wait_mutex_); 2285 if (interrupted_) { 2286 return; 2287 } 2288 interrupted_ = true; 2289 NotifyLocked(self); 2290} 2291 2292void Thread::Notify() { 2293 Thread* self = Thread::Current(); 2294 MutexLock mu(self, *wait_mutex_); 2295 NotifyLocked(self); 2296} 2297 2298void Thread::NotifyLocked(Thread* self) { 2299 if (wait_monitor_ != nullptr) { 2300 wait_cond_->Signal(self); 2301 } 2302} 2303 2304void Thread::SetClassLoaderOverride(jobject class_loader_override) { 2305 if (tlsPtr_.class_loader_override != nullptr) { 2306 GetJniEnv()->DeleteGlobalRef(tlsPtr_.class_loader_override); 2307 } 2308 tlsPtr_.class_loader_override = GetJniEnv()->NewGlobalRef(class_loader_override); 2309} 2310 2311using ArtMethodDexPcPair = std::pair<ArtMethod*, uint32_t>; 2312 2313// Counts the stack trace depth and also fetches the first max_saved_frames frames. 2314class FetchStackTraceVisitor : public StackVisitor { 2315 public: 2316 explicit FetchStackTraceVisitor(Thread* thread, 2317 ArtMethodDexPcPair* saved_frames = nullptr, 2318 size_t max_saved_frames = 0) 2319 REQUIRES_SHARED(Locks::mutator_lock_) 2320 : StackVisitor(thread, nullptr, StackVisitor::StackWalkKind::kIncludeInlinedFrames), 2321 saved_frames_(saved_frames), 2322 max_saved_frames_(max_saved_frames) {} 2323 2324 bool VisitFrame() REQUIRES_SHARED(Locks::mutator_lock_) { 2325 // We want to skip frames up to and including the exception's constructor. 2326 // Note we also skip the frame if it doesn't have a method (namely the callee 2327 // save frame) 2328 ArtMethod* m = GetMethod(); 2329 if (skipping_ && !m->IsRuntimeMethod() && 2330 !mirror::Throwable::GetJavaLangThrowable()->IsAssignableFrom(m->GetDeclaringClass())) { 2331 skipping_ = false; 2332 } 2333 if (!skipping_) { 2334 if (!m->IsRuntimeMethod()) { // Ignore runtime frames (in particular callee save). 2335 if (depth_ < max_saved_frames_) { 2336 saved_frames_[depth_].first = m; 2337 saved_frames_[depth_].second = m->IsProxyMethod() ? DexFile::kDexNoIndex : GetDexPc(); 2338 } 2339 ++depth_; 2340 } 2341 } else { 2342 ++skip_depth_; 2343 } 2344 return true; 2345 } 2346 2347 uint32_t GetDepth() const { 2348 return depth_; 2349 } 2350 2351 uint32_t GetSkipDepth() const { 2352 return skip_depth_; 2353 } 2354 2355 private: 2356 uint32_t depth_ = 0; 2357 uint32_t skip_depth_ = 0; 2358 bool skipping_ = true; 2359 ArtMethodDexPcPair* saved_frames_; 2360 const size_t max_saved_frames_; 2361 2362 DISALLOW_COPY_AND_ASSIGN(FetchStackTraceVisitor); 2363}; 2364 2365template<bool kTransactionActive> 2366class BuildInternalStackTraceVisitor : public StackVisitor { 2367 public: 2368 BuildInternalStackTraceVisitor(Thread* self, Thread* thread, int skip_depth) 2369 : StackVisitor(thread, nullptr, StackVisitor::StackWalkKind::kIncludeInlinedFrames), 2370 self_(self), 2371 skip_depth_(skip_depth), 2372 pointer_size_(Runtime::Current()->GetClassLinker()->GetImagePointerSize()) {} 2373 2374 bool Init(int depth) REQUIRES_SHARED(Locks::mutator_lock_) ACQUIRE(Roles::uninterruptible_) { 2375 // Allocate method trace as an object array where the first element is a pointer array that 2376 // contains the ArtMethod pointers and dex PCs. The rest of the elements are the declaring 2377 // class of the ArtMethod pointers. 2378 ClassLinker* class_linker = Runtime::Current()->GetClassLinker(); 2379 StackHandleScope<1> hs(self_); 2380 ObjPtr<mirror::Class> array_class = class_linker->GetClassRoot(ClassLinker::kObjectArrayClass); 2381 // The first element is the methods and dex pc array, the other elements are declaring classes 2382 // for the methods to ensure classes in the stack trace don't get unloaded. 2383 Handle<mirror::ObjectArray<mirror::Object>> trace( 2384 hs.NewHandle( 2385 mirror::ObjectArray<mirror::Object>::Alloc(hs.Self(), array_class, depth + 1))); 2386 if (trace == nullptr) { 2387 // Acquire uninterruptible_ in all paths. 2388 self_->StartAssertNoThreadSuspension("Building internal stack trace"); 2389 self_->AssertPendingOOMException(); 2390 return false; 2391 } 2392 ObjPtr<mirror::PointerArray> methods_and_pcs = 2393 class_linker->AllocPointerArray(self_, depth * 2); 2394 const char* last_no_suspend_cause = 2395 self_->StartAssertNoThreadSuspension("Building internal stack trace"); 2396 if (methods_and_pcs == nullptr) { 2397 self_->AssertPendingOOMException(); 2398 return false; 2399 } 2400 trace->Set(0, methods_and_pcs); 2401 trace_ = trace.Get(); 2402 // If We are called from native, use non-transactional mode. 2403 CHECK(last_no_suspend_cause == nullptr) << last_no_suspend_cause; 2404 return true; 2405 } 2406 2407 virtual ~BuildInternalStackTraceVisitor() RELEASE(Roles::uninterruptible_) { 2408 self_->EndAssertNoThreadSuspension(nullptr); 2409 } 2410 2411 bool VisitFrame() REQUIRES_SHARED(Locks::mutator_lock_) { 2412 if (trace_ == nullptr) { 2413 return true; // We're probably trying to fillInStackTrace for an OutOfMemoryError. 2414 } 2415 if (skip_depth_ > 0) { 2416 skip_depth_--; 2417 return true; 2418 } 2419 ArtMethod* m = GetMethod(); 2420 if (m->IsRuntimeMethod()) { 2421 return true; // Ignore runtime frames (in particular callee save). 2422 } 2423 AddFrame(m, m->IsProxyMethod() ? DexFile::kDexNoIndex : GetDexPc()); 2424 return true; 2425 } 2426 2427 void AddFrame(ArtMethod* method, uint32_t dex_pc) REQUIRES_SHARED(Locks::mutator_lock_) { 2428 ObjPtr<mirror::PointerArray> trace_methods_and_pcs = GetTraceMethodsAndPCs(); 2429 trace_methods_and_pcs->SetElementPtrSize<kTransactionActive>(count_, method, pointer_size_); 2430 trace_methods_and_pcs->SetElementPtrSize<kTransactionActive>( 2431 trace_methods_and_pcs->GetLength() / 2 + count_, 2432 dex_pc, 2433 pointer_size_); 2434 // Save the declaring class of the method to ensure that the declaring classes of the methods 2435 // do not get unloaded while the stack trace is live. 2436 trace_->Set(count_ + 1, method->GetDeclaringClass()); 2437 ++count_; 2438 } 2439 2440 ObjPtr<mirror::PointerArray> GetTraceMethodsAndPCs() const REQUIRES_SHARED(Locks::mutator_lock_) { 2441 return ObjPtr<mirror::PointerArray>::DownCast(MakeObjPtr(trace_->Get(0))); 2442 } 2443 2444 mirror::ObjectArray<mirror::Object>* GetInternalStackTrace() const { 2445 return trace_; 2446 } 2447 2448 private: 2449 Thread* const self_; 2450 // How many more frames to skip. 2451 int32_t skip_depth_; 2452 // Current position down stack trace. 2453 uint32_t count_ = 0; 2454 // An object array where the first element is a pointer array that contains the ArtMethod 2455 // pointers on the stack and dex PCs. The rest of the elements are the declaring 2456 // class of the ArtMethod pointers. trace_[i+1] contains the declaring class of the ArtMethod of 2457 // the i'th frame. 2458 mirror::ObjectArray<mirror::Object>* trace_ = nullptr; 2459 // For cross compilation. 2460 const PointerSize pointer_size_; 2461 2462 DISALLOW_COPY_AND_ASSIGN(BuildInternalStackTraceVisitor); 2463}; 2464 2465template<bool kTransactionActive> 2466jobject Thread::CreateInternalStackTrace(const ScopedObjectAccessAlreadyRunnable& soa) const { 2467 // Compute depth of stack, save frames if possible to avoid needing to recompute many. 2468 constexpr size_t kMaxSavedFrames = 256; 2469 std::unique_ptr<ArtMethodDexPcPair[]> saved_frames(new ArtMethodDexPcPair[kMaxSavedFrames]); 2470 FetchStackTraceVisitor count_visitor(const_cast<Thread*>(this), 2471 &saved_frames[0], 2472 kMaxSavedFrames); 2473 count_visitor.WalkStack(); 2474 const uint32_t depth = count_visitor.GetDepth(); 2475 const uint32_t skip_depth = count_visitor.GetSkipDepth(); 2476 2477 // Build internal stack trace. 2478 BuildInternalStackTraceVisitor<kTransactionActive> build_trace_visitor(soa.Self(), 2479 const_cast<Thread*>(this), 2480 skip_depth); 2481 if (!build_trace_visitor.Init(depth)) { 2482 return nullptr; // Allocation failed. 2483 } 2484 // If we saved all of the frames we don't even need to do the actual stack walk. This is faster 2485 // than doing the stack walk twice. 2486 if (depth < kMaxSavedFrames) { 2487 for (size_t i = 0; i < depth; ++i) { 2488 build_trace_visitor.AddFrame(saved_frames[i].first, saved_frames[i].second); 2489 } 2490 } else { 2491 build_trace_visitor.WalkStack(); 2492 } 2493 2494 mirror::ObjectArray<mirror::Object>* trace = build_trace_visitor.GetInternalStackTrace(); 2495 if (kIsDebugBuild) { 2496 ObjPtr<mirror::PointerArray> trace_methods = build_trace_visitor.GetTraceMethodsAndPCs(); 2497 // Second half of trace_methods is dex PCs. 2498 for (uint32_t i = 0; i < static_cast<uint32_t>(trace_methods->GetLength() / 2); ++i) { 2499 auto* method = trace_methods->GetElementPtrSize<ArtMethod*>( 2500 i, Runtime::Current()->GetClassLinker()->GetImagePointerSize()); 2501 CHECK(method != nullptr); 2502 } 2503 } 2504 return soa.AddLocalReference<jobject>(trace); 2505} 2506template jobject Thread::CreateInternalStackTrace<false>( 2507 const ScopedObjectAccessAlreadyRunnable& soa) const; 2508template jobject Thread::CreateInternalStackTrace<true>( 2509 const ScopedObjectAccessAlreadyRunnable& soa) const; 2510 2511bool Thread::IsExceptionThrownByCurrentMethod(ObjPtr<mirror::Throwable> exception) const { 2512 // Only count the depth since we do not pass a stack frame array as an argument. 2513 FetchStackTraceVisitor count_visitor(const_cast<Thread*>(this)); 2514 count_visitor.WalkStack(); 2515 return count_visitor.GetDepth() == static_cast<uint32_t>(exception->GetStackDepth()); 2516} 2517 2518jobjectArray Thread::InternalStackTraceToStackTraceElementArray( 2519 const ScopedObjectAccessAlreadyRunnable& soa, 2520 jobject internal, 2521 jobjectArray output_array, 2522 int* stack_depth) { 2523 // Decode the internal stack trace into the depth, method trace and PC trace. 2524 // Subtract one for the methods and PC trace. 2525 int32_t depth = soa.Decode<mirror::Array>(internal)->GetLength() - 1; 2526 DCHECK_GE(depth, 0); 2527 2528 ClassLinker* const class_linker = Runtime::Current()->GetClassLinker(); 2529 2530 jobjectArray result; 2531 2532 if (output_array != nullptr) { 2533 // Reuse the array we were given. 2534 result = output_array; 2535 // ...adjusting the number of frames we'll write to not exceed the array length. 2536 const int32_t traces_length = 2537 soa.Decode<mirror::ObjectArray<mirror::StackTraceElement>>(result)->GetLength(); 2538 depth = std::min(depth, traces_length); 2539 } else { 2540 // Create java_trace array and place in local reference table 2541 mirror::ObjectArray<mirror::StackTraceElement>* java_traces = 2542 class_linker->AllocStackTraceElementArray(soa.Self(), depth); 2543 if (java_traces == nullptr) { 2544 return nullptr; 2545 } 2546 result = soa.AddLocalReference<jobjectArray>(java_traces); 2547 } 2548 2549 if (stack_depth != nullptr) { 2550 *stack_depth = depth; 2551 } 2552 2553 for (int32_t i = 0; i < depth; ++i) { 2554 ObjPtr<mirror::ObjectArray<mirror::Object>> decoded_traces = 2555 soa.Decode<mirror::Object>(internal)->AsObjectArray<mirror::Object>(); 2556 // Methods and dex PC trace is element 0. 2557 DCHECK(decoded_traces->Get(0)->IsIntArray() || decoded_traces->Get(0)->IsLongArray()); 2558 ObjPtr<mirror::PointerArray> const method_trace = 2559 ObjPtr<mirror::PointerArray>::DownCast(MakeObjPtr(decoded_traces->Get(0))); 2560 // Prepare parameters for StackTraceElement(String cls, String method, String file, int line) 2561 ArtMethod* method = method_trace->GetElementPtrSize<ArtMethod*>(i, kRuntimePointerSize); 2562 uint32_t dex_pc = method_trace->GetElementPtrSize<uint32_t>( 2563 i + method_trace->GetLength() / 2, kRuntimePointerSize); 2564 int32_t line_number; 2565 StackHandleScope<3> hs(soa.Self()); 2566 auto class_name_object(hs.NewHandle<mirror::String>(nullptr)); 2567 auto source_name_object(hs.NewHandle<mirror::String>(nullptr)); 2568 if (method->IsProxyMethod()) { 2569 line_number = -1; 2570 class_name_object.Assign(method->GetDeclaringClass()->GetName()); 2571 // source_name_object intentionally left null for proxy methods 2572 } else { 2573 line_number = method->GetLineNumFromDexPC(dex_pc); 2574 // Allocate element, potentially triggering GC 2575 // TODO: reuse class_name_object via Class::name_? 2576 const char* descriptor = method->GetDeclaringClassDescriptor(); 2577 CHECK(descriptor != nullptr); 2578 std::string class_name(PrettyDescriptor(descriptor)); 2579 class_name_object.Assign( 2580 mirror::String::AllocFromModifiedUtf8(soa.Self(), class_name.c_str())); 2581 if (class_name_object == nullptr) { 2582 soa.Self()->AssertPendingOOMException(); 2583 return nullptr; 2584 } 2585 const char* source_file = method->GetDeclaringClassSourceFile(); 2586 if (line_number == -1) { 2587 // Make the line_number field of StackTraceElement hold the dex pc. 2588 // source_name_object is intentionally left null if we failed to map the dex pc to 2589 // a line number (most probably because there is no debug info). See b/30183883. 2590 line_number = dex_pc; 2591 } else { 2592 if (source_file != nullptr) { 2593 source_name_object.Assign(mirror::String::AllocFromModifiedUtf8(soa.Self(), source_file)); 2594 if (source_name_object == nullptr) { 2595 soa.Self()->AssertPendingOOMException(); 2596 return nullptr; 2597 } 2598 } 2599 } 2600 } 2601 const char* method_name = method->GetInterfaceMethodIfProxy(kRuntimePointerSize)->GetName(); 2602 CHECK(method_name != nullptr); 2603 Handle<mirror::String> method_name_object( 2604 hs.NewHandle(mirror::String::AllocFromModifiedUtf8(soa.Self(), method_name))); 2605 if (method_name_object == nullptr) { 2606 return nullptr; 2607 } 2608 ObjPtr<mirror::StackTraceElement> obj = mirror::StackTraceElement::Alloc(soa.Self(), 2609 class_name_object, 2610 method_name_object, 2611 source_name_object, 2612 line_number); 2613 if (obj == nullptr) { 2614 return nullptr; 2615 } 2616 // We are called from native: use non-transactional mode. 2617 soa.Decode<mirror::ObjectArray<mirror::StackTraceElement>>(result)->Set<false>(i, obj); 2618 } 2619 return result; 2620} 2621 2622void Thread::ThrowNewExceptionF(const char* exception_class_descriptor, const char* fmt, ...) { 2623 va_list args; 2624 va_start(args, fmt); 2625 ThrowNewExceptionV(exception_class_descriptor, fmt, args); 2626 va_end(args); 2627} 2628 2629void Thread::ThrowNewExceptionV(const char* exception_class_descriptor, 2630 const char* fmt, va_list ap) { 2631 std::string msg; 2632 StringAppendV(&msg, fmt, ap); 2633 ThrowNewException(exception_class_descriptor, msg.c_str()); 2634} 2635 2636void Thread::ThrowNewException(const char* exception_class_descriptor, 2637 const char* msg) { 2638 // Callers should either clear or call ThrowNewWrappedException. 2639 AssertNoPendingExceptionForNewException(msg); 2640 ThrowNewWrappedException(exception_class_descriptor, msg); 2641} 2642 2643static ObjPtr<mirror::ClassLoader> GetCurrentClassLoader(Thread* self) 2644 REQUIRES_SHARED(Locks::mutator_lock_) { 2645 ArtMethod* method = self->GetCurrentMethod(nullptr); 2646 return method != nullptr 2647 ? method->GetDeclaringClass()->GetClassLoader() 2648 : nullptr; 2649} 2650 2651void Thread::ThrowNewWrappedException(const char* exception_class_descriptor, 2652 const char* msg) { 2653 DCHECK_EQ(this, Thread::Current()); 2654 ScopedObjectAccessUnchecked soa(this); 2655 StackHandleScope<3> hs(soa.Self()); 2656 Handle<mirror::ClassLoader> class_loader(hs.NewHandle(GetCurrentClassLoader(soa.Self()))); 2657 ScopedLocalRef<jobject> cause(GetJniEnv(), soa.AddLocalReference<jobject>(GetException())); 2658 ClearException(); 2659 Runtime* runtime = Runtime::Current(); 2660 auto* cl = runtime->GetClassLinker(); 2661 Handle<mirror::Class> exception_class( 2662 hs.NewHandle(cl->FindClass(this, exception_class_descriptor, class_loader))); 2663 if (UNLIKELY(exception_class == nullptr)) { 2664 CHECK(IsExceptionPending()); 2665 LOG(ERROR) << "No exception class " << PrettyDescriptor(exception_class_descriptor); 2666 return; 2667 } 2668 2669 if (UNLIKELY(!runtime->GetClassLinker()->EnsureInitialized(soa.Self(), exception_class, true, 2670 true))) { 2671 DCHECK(IsExceptionPending()); 2672 return; 2673 } 2674 DCHECK(!runtime->IsStarted() || exception_class->IsThrowableClass()); 2675 Handle<mirror::Throwable> exception( 2676 hs.NewHandle(ObjPtr<mirror::Throwable>::DownCast(exception_class->AllocObject(this)))); 2677 2678 // If we couldn't allocate the exception, throw the pre-allocated out of memory exception. 2679 if (exception == nullptr) { 2680 SetException(Runtime::Current()->GetPreAllocatedOutOfMemoryError()); 2681 return; 2682 } 2683 2684 // Choose an appropriate constructor and set up the arguments. 2685 const char* signature; 2686 ScopedLocalRef<jstring> msg_string(GetJniEnv(), nullptr); 2687 if (msg != nullptr) { 2688 // Ensure we remember this and the method over the String allocation. 2689 msg_string.reset( 2690 soa.AddLocalReference<jstring>(mirror::String::AllocFromModifiedUtf8(this, msg))); 2691 if (UNLIKELY(msg_string.get() == nullptr)) { 2692 CHECK(IsExceptionPending()); // OOME. 2693 return; 2694 } 2695 if (cause.get() == nullptr) { 2696 signature = "(Ljava/lang/String;)V"; 2697 } else { 2698 signature = "(Ljava/lang/String;Ljava/lang/Throwable;)V"; 2699 } 2700 } else { 2701 if (cause.get() == nullptr) { 2702 signature = "()V"; 2703 } else { 2704 signature = "(Ljava/lang/Throwable;)V"; 2705 } 2706 } 2707 ArtMethod* exception_init_method = 2708 exception_class->FindDeclaredDirectMethod("<init>", signature, cl->GetImagePointerSize()); 2709 2710 CHECK(exception_init_method != nullptr) << "No <init>" << signature << " in " 2711 << PrettyDescriptor(exception_class_descriptor); 2712 2713 if (UNLIKELY(!runtime->IsStarted())) { 2714 // Something is trying to throw an exception without a started runtime, which is the common 2715 // case in the compiler. We won't be able to invoke the constructor of the exception, so set 2716 // the exception fields directly. 2717 if (msg != nullptr) { 2718 exception->SetDetailMessage(DecodeJObject(msg_string.get())->AsString()); 2719 } 2720 if (cause.get() != nullptr) { 2721 exception->SetCause(DecodeJObject(cause.get())->AsThrowable()); 2722 } 2723 ScopedLocalRef<jobject> trace(GetJniEnv(), 2724 Runtime::Current()->IsActiveTransaction() 2725 ? CreateInternalStackTrace<true>(soa) 2726 : CreateInternalStackTrace<false>(soa)); 2727 if (trace.get() != nullptr) { 2728 exception->SetStackState(DecodeJObject(trace.get()).Ptr()); 2729 } 2730 SetException(exception.Get()); 2731 } else { 2732 jvalue jv_args[2]; 2733 size_t i = 0; 2734 2735 if (msg != nullptr) { 2736 jv_args[i].l = msg_string.get(); 2737 ++i; 2738 } 2739 if (cause.get() != nullptr) { 2740 jv_args[i].l = cause.get(); 2741 ++i; 2742 } 2743 ScopedLocalRef<jobject> ref(soa.Env(), soa.AddLocalReference<jobject>(exception.Get())); 2744 InvokeWithJValues(soa, ref.get(), jni::EncodeArtMethod(exception_init_method), jv_args); 2745 if (LIKELY(!IsExceptionPending())) { 2746 SetException(exception.Get()); 2747 } 2748 } 2749} 2750 2751void Thread::ThrowOutOfMemoryError(const char* msg) { 2752 LOG(WARNING) << StringPrintf("Throwing OutOfMemoryError \"%s\"%s", 2753 msg, (tls32_.throwing_OutOfMemoryError ? " (recursive case)" : "")); 2754 if (!tls32_.throwing_OutOfMemoryError) { 2755 tls32_.throwing_OutOfMemoryError = true; 2756 ThrowNewException("Ljava/lang/OutOfMemoryError;", msg); 2757 tls32_.throwing_OutOfMemoryError = false; 2758 } else { 2759 Dump(LOG_STREAM(WARNING)); // The pre-allocated OOME has no stack, so help out and log one. 2760 SetException(Runtime::Current()->GetPreAllocatedOutOfMemoryError()); 2761 } 2762} 2763 2764Thread* Thread::CurrentFromGdb() { 2765 return Thread::Current(); 2766} 2767 2768void Thread::DumpFromGdb() const { 2769 std::ostringstream ss; 2770 Dump(ss); 2771 std::string str(ss.str()); 2772 // log to stderr for debugging command line processes 2773 std::cerr << str; 2774#ifdef ART_TARGET_ANDROID 2775 // log to logcat for debugging frameworks processes 2776 LOG(INFO) << str; 2777#endif 2778} 2779 2780// Explicitly instantiate 32 and 64bit thread offset dumping support. 2781template 2782void Thread::DumpThreadOffset<PointerSize::k32>(std::ostream& os, uint32_t offset); 2783template 2784void Thread::DumpThreadOffset<PointerSize::k64>(std::ostream& os, uint32_t offset); 2785 2786template<PointerSize ptr_size> 2787void Thread::DumpThreadOffset(std::ostream& os, uint32_t offset) { 2788#define DO_THREAD_OFFSET(x, y) \ 2789 if (offset == (x).Uint32Value()) { \ 2790 os << (y); \ 2791 return; \ 2792 } 2793 DO_THREAD_OFFSET(ThreadFlagsOffset<ptr_size>(), "state_and_flags") 2794 DO_THREAD_OFFSET(CardTableOffset<ptr_size>(), "card_table") 2795 DO_THREAD_OFFSET(ExceptionOffset<ptr_size>(), "exception") 2796 DO_THREAD_OFFSET(PeerOffset<ptr_size>(), "peer"); 2797 DO_THREAD_OFFSET(JniEnvOffset<ptr_size>(), "jni_env") 2798 DO_THREAD_OFFSET(SelfOffset<ptr_size>(), "self") 2799 DO_THREAD_OFFSET(StackEndOffset<ptr_size>(), "stack_end") 2800 DO_THREAD_OFFSET(ThinLockIdOffset<ptr_size>(), "thin_lock_thread_id") 2801 DO_THREAD_OFFSET(TopOfManagedStackOffset<ptr_size>(), "top_quick_frame_method") 2802 DO_THREAD_OFFSET(TopShadowFrameOffset<ptr_size>(), "top_shadow_frame") 2803 DO_THREAD_OFFSET(TopHandleScopeOffset<ptr_size>(), "top_handle_scope") 2804 DO_THREAD_OFFSET(ThreadSuspendTriggerOffset<ptr_size>(), "suspend_trigger") 2805#undef DO_THREAD_OFFSET 2806 2807#define JNI_ENTRY_POINT_INFO(x) \ 2808 if (JNI_ENTRYPOINT_OFFSET(ptr_size, x).Uint32Value() == offset) { \ 2809 os << #x; \ 2810 return; \ 2811 } 2812 JNI_ENTRY_POINT_INFO(pDlsymLookup) 2813#undef JNI_ENTRY_POINT_INFO 2814 2815#define QUICK_ENTRY_POINT_INFO(x) \ 2816 if (QUICK_ENTRYPOINT_OFFSET(ptr_size, x).Uint32Value() == offset) { \ 2817 os << #x; \ 2818 return; \ 2819 } 2820 QUICK_ENTRY_POINT_INFO(pAllocArrayResolved) 2821 QUICK_ENTRY_POINT_INFO(pAllocArrayResolved8) 2822 QUICK_ENTRY_POINT_INFO(pAllocArrayResolved16) 2823 QUICK_ENTRY_POINT_INFO(pAllocArrayResolved32) 2824 QUICK_ENTRY_POINT_INFO(pAllocArrayResolved64) 2825 QUICK_ENTRY_POINT_INFO(pAllocObjectResolved) 2826 QUICK_ENTRY_POINT_INFO(pAllocObjectInitialized) 2827 QUICK_ENTRY_POINT_INFO(pAllocObjectWithChecks) 2828 QUICK_ENTRY_POINT_INFO(pAllocStringFromBytes) 2829 QUICK_ENTRY_POINT_INFO(pAllocStringFromChars) 2830 QUICK_ENTRY_POINT_INFO(pAllocStringFromString) 2831 QUICK_ENTRY_POINT_INFO(pInstanceofNonTrivial) 2832 QUICK_ENTRY_POINT_INFO(pCheckInstanceOf) 2833 QUICK_ENTRY_POINT_INFO(pInitializeStaticStorage) 2834 QUICK_ENTRY_POINT_INFO(pInitializeTypeAndVerifyAccess) 2835 QUICK_ENTRY_POINT_INFO(pInitializeType) 2836 QUICK_ENTRY_POINT_INFO(pResolveString) 2837 QUICK_ENTRY_POINT_INFO(pSet8Instance) 2838 QUICK_ENTRY_POINT_INFO(pSet8Static) 2839 QUICK_ENTRY_POINT_INFO(pSet16Instance) 2840 QUICK_ENTRY_POINT_INFO(pSet16Static) 2841 QUICK_ENTRY_POINT_INFO(pSet32Instance) 2842 QUICK_ENTRY_POINT_INFO(pSet32Static) 2843 QUICK_ENTRY_POINT_INFO(pSet64Instance) 2844 QUICK_ENTRY_POINT_INFO(pSet64Static) 2845 QUICK_ENTRY_POINT_INFO(pSetObjInstance) 2846 QUICK_ENTRY_POINT_INFO(pSetObjStatic) 2847 QUICK_ENTRY_POINT_INFO(pGetByteInstance) 2848 QUICK_ENTRY_POINT_INFO(pGetBooleanInstance) 2849 QUICK_ENTRY_POINT_INFO(pGetByteStatic) 2850 QUICK_ENTRY_POINT_INFO(pGetBooleanStatic) 2851 QUICK_ENTRY_POINT_INFO(pGetShortInstance) 2852 QUICK_ENTRY_POINT_INFO(pGetCharInstance) 2853 QUICK_ENTRY_POINT_INFO(pGetShortStatic) 2854 QUICK_ENTRY_POINT_INFO(pGetCharStatic) 2855 QUICK_ENTRY_POINT_INFO(pGet32Instance) 2856 QUICK_ENTRY_POINT_INFO(pGet32Static) 2857 QUICK_ENTRY_POINT_INFO(pGet64Instance) 2858 QUICK_ENTRY_POINT_INFO(pGet64Static) 2859 QUICK_ENTRY_POINT_INFO(pGetObjInstance) 2860 QUICK_ENTRY_POINT_INFO(pGetObjStatic) 2861 QUICK_ENTRY_POINT_INFO(pAputObject) 2862 QUICK_ENTRY_POINT_INFO(pJniMethodStart) 2863 QUICK_ENTRY_POINT_INFO(pJniMethodStartSynchronized) 2864 QUICK_ENTRY_POINT_INFO(pJniMethodEnd) 2865 QUICK_ENTRY_POINT_INFO(pJniMethodEndSynchronized) 2866 QUICK_ENTRY_POINT_INFO(pJniMethodEndWithReference) 2867 QUICK_ENTRY_POINT_INFO(pJniMethodEndWithReferenceSynchronized) 2868 QUICK_ENTRY_POINT_INFO(pQuickGenericJniTrampoline) 2869 QUICK_ENTRY_POINT_INFO(pLockObject) 2870 QUICK_ENTRY_POINT_INFO(pUnlockObject) 2871 QUICK_ENTRY_POINT_INFO(pCmpgDouble) 2872 QUICK_ENTRY_POINT_INFO(pCmpgFloat) 2873 QUICK_ENTRY_POINT_INFO(pCmplDouble) 2874 QUICK_ENTRY_POINT_INFO(pCmplFloat) 2875 QUICK_ENTRY_POINT_INFO(pCos) 2876 QUICK_ENTRY_POINT_INFO(pSin) 2877 QUICK_ENTRY_POINT_INFO(pAcos) 2878 QUICK_ENTRY_POINT_INFO(pAsin) 2879 QUICK_ENTRY_POINT_INFO(pAtan) 2880 QUICK_ENTRY_POINT_INFO(pAtan2) 2881 QUICK_ENTRY_POINT_INFO(pCbrt) 2882 QUICK_ENTRY_POINT_INFO(pCosh) 2883 QUICK_ENTRY_POINT_INFO(pExp) 2884 QUICK_ENTRY_POINT_INFO(pExpm1) 2885 QUICK_ENTRY_POINT_INFO(pHypot) 2886 QUICK_ENTRY_POINT_INFO(pLog) 2887 QUICK_ENTRY_POINT_INFO(pLog10) 2888 QUICK_ENTRY_POINT_INFO(pNextAfter) 2889 QUICK_ENTRY_POINT_INFO(pSinh) 2890 QUICK_ENTRY_POINT_INFO(pTan) 2891 QUICK_ENTRY_POINT_INFO(pTanh) 2892 QUICK_ENTRY_POINT_INFO(pFmod) 2893 QUICK_ENTRY_POINT_INFO(pL2d) 2894 QUICK_ENTRY_POINT_INFO(pFmodf) 2895 QUICK_ENTRY_POINT_INFO(pL2f) 2896 QUICK_ENTRY_POINT_INFO(pD2iz) 2897 QUICK_ENTRY_POINT_INFO(pF2iz) 2898 QUICK_ENTRY_POINT_INFO(pIdivmod) 2899 QUICK_ENTRY_POINT_INFO(pD2l) 2900 QUICK_ENTRY_POINT_INFO(pF2l) 2901 QUICK_ENTRY_POINT_INFO(pLdiv) 2902 QUICK_ENTRY_POINT_INFO(pLmod) 2903 QUICK_ENTRY_POINT_INFO(pLmul) 2904 QUICK_ENTRY_POINT_INFO(pShlLong) 2905 QUICK_ENTRY_POINT_INFO(pShrLong) 2906 QUICK_ENTRY_POINT_INFO(pUshrLong) 2907 QUICK_ENTRY_POINT_INFO(pIndexOf) 2908 QUICK_ENTRY_POINT_INFO(pStringCompareTo) 2909 QUICK_ENTRY_POINT_INFO(pMemcpy) 2910 QUICK_ENTRY_POINT_INFO(pQuickImtConflictTrampoline) 2911 QUICK_ENTRY_POINT_INFO(pQuickResolutionTrampoline) 2912 QUICK_ENTRY_POINT_INFO(pQuickToInterpreterBridge) 2913 QUICK_ENTRY_POINT_INFO(pInvokeDirectTrampolineWithAccessCheck) 2914 QUICK_ENTRY_POINT_INFO(pInvokeInterfaceTrampolineWithAccessCheck) 2915 QUICK_ENTRY_POINT_INFO(pInvokeStaticTrampolineWithAccessCheck) 2916 QUICK_ENTRY_POINT_INFO(pInvokeSuperTrampolineWithAccessCheck) 2917 QUICK_ENTRY_POINT_INFO(pInvokeVirtualTrampolineWithAccessCheck) 2918 QUICK_ENTRY_POINT_INFO(pInvokePolymorphic) 2919 QUICK_ENTRY_POINT_INFO(pTestSuspend) 2920 QUICK_ENTRY_POINT_INFO(pDeliverException) 2921 QUICK_ENTRY_POINT_INFO(pThrowArrayBounds) 2922 QUICK_ENTRY_POINT_INFO(pThrowDivZero) 2923 QUICK_ENTRY_POINT_INFO(pThrowNullPointer) 2924 QUICK_ENTRY_POINT_INFO(pThrowStackOverflow) 2925 QUICK_ENTRY_POINT_INFO(pDeoptimize) 2926 QUICK_ENTRY_POINT_INFO(pA64Load) 2927 QUICK_ENTRY_POINT_INFO(pA64Store) 2928 QUICK_ENTRY_POINT_INFO(pNewEmptyString) 2929 QUICK_ENTRY_POINT_INFO(pNewStringFromBytes_B) 2930 QUICK_ENTRY_POINT_INFO(pNewStringFromBytes_BI) 2931 QUICK_ENTRY_POINT_INFO(pNewStringFromBytes_BII) 2932 QUICK_ENTRY_POINT_INFO(pNewStringFromBytes_BIII) 2933 QUICK_ENTRY_POINT_INFO(pNewStringFromBytes_BIIString) 2934 QUICK_ENTRY_POINT_INFO(pNewStringFromBytes_BString) 2935 QUICK_ENTRY_POINT_INFO(pNewStringFromBytes_BIICharset) 2936 QUICK_ENTRY_POINT_INFO(pNewStringFromBytes_BCharset) 2937 QUICK_ENTRY_POINT_INFO(pNewStringFromChars_C) 2938 QUICK_ENTRY_POINT_INFO(pNewStringFromChars_CII) 2939 QUICK_ENTRY_POINT_INFO(pNewStringFromChars_IIC) 2940 QUICK_ENTRY_POINT_INFO(pNewStringFromCodePoints) 2941 QUICK_ENTRY_POINT_INFO(pNewStringFromString) 2942 QUICK_ENTRY_POINT_INFO(pNewStringFromStringBuffer) 2943 QUICK_ENTRY_POINT_INFO(pNewStringFromStringBuilder) 2944 QUICK_ENTRY_POINT_INFO(pReadBarrierJni) 2945 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg00) 2946 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg01) 2947 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg02) 2948 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg03) 2949 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg04) 2950 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg05) 2951 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg06) 2952 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg07) 2953 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg08) 2954 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg09) 2955 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg10) 2956 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg11) 2957 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg12) 2958 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg13) 2959 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg14) 2960 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg15) 2961 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg16) 2962 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg17) 2963 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg18) 2964 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg19) 2965 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg20) 2966 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg21) 2967 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg22) 2968 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg23) 2969 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg24) 2970 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg25) 2971 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg26) 2972 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg27) 2973 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg28) 2974 QUICK_ENTRY_POINT_INFO(pReadBarrierMarkReg29) 2975 QUICK_ENTRY_POINT_INFO(pReadBarrierSlow) 2976 QUICK_ENTRY_POINT_INFO(pReadBarrierForRootSlow) 2977 2978 QUICK_ENTRY_POINT_INFO(pJniMethodFastStart) 2979 QUICK_ENTRY_POINT_INFO(pJniMethodFastEnd) 2980#undef QUICK_ENTRY_POINT_INFO 2981 2982 os << offset; 2983} 2984 2985void Thread::QuickDeliverException() { 2986 // Get exception from thread. 2987 ObjPtr<mirror::Throwable> exception = GetException(); 2988 CHECK(exception != nullptr); 2989 if (exception == GetDeoptimizationException()) { 2990 artDeoptimize(this); 2991 UNREACHABLE(); 2992 } 2993 2994 // This is a real exception: let the instrumentation know about it. 2995 instrumentation::Instrumentation* instrumentation = Runtime::Current()->GetInstrumentation(); 2996 if (instrumentation->HasExceptionCaughtListeners() && 2997 IsExceptionThrownByCurrentMethod(exception)) { 2998 // Instrumentation may cause GC so keep the exception object safe. 2999 StackHandleScope<1> hs(this); 3000 HandleWrapperObjPtr<mirror::Throwable> h_exception(hs.NewHandleWrapper(&exception)); 3001 instrumentation->ExceptionCaughtEvent(this, exception.Ptr()); 3002 } 3003 // Does instrumentation need to deoptimize the stack? 3004 // Note: we do this *after* reporting the exception to instrumentation in case it 3005 // now requires deoptimization. It may happen if a debugger is attached and requests 3006 // new events (single-step, breakpoint, ...) when the exception is reported. 3007 if (Dbg::IsForcedInterpreterNeededForException(this)) { 3008 NthCallerVisitor visitor(this, 0, false); 3009 visitor.WalkStack(); 3010 if (Runtime::Current()->IsAsyncDeoptimizeable(visitor.caller_pc)) { 3011 // Save the exception into the deoptimization context so it can be restored 3012 // before entering the interpreter. 3013 PushDeoptimizationContext( 3014 JValue(), /*is_reference */ false, /* from_code */ false, exception); 3015 artDeoptimize(this); 3016 UNREACHABLE(); 3017 } else { 3018 LOG(WARNING) << "Got a deoptimization request on un-deoptimizable method " 3019 << visitor.caller->PrettyMethod(); 3020 } 3021 } 3022 3023 // Don't leave exception visible while we try to find the handler, which may cause class 3024 // resolution. 3025 ClearException(); 3026 QuickExceptionHandler exception_handler(this, false); 3027 exception_handler.FindCatch(exception); 3028 exception_handler.UpdateInstrumentationStack(); 3029 exception_handler.DoLongJump(); 3030} 3031 3032Context* Thread::GetLongJumpContext() { 3033 Context* result = tlsPtr_.long_jump_context; 3034 if (result == nullptr) { 3035 result = Context::Create(); 3036 } else { 3037 tlsPtr_.long_jump_context = nullptr; // Avoid context being shared. 3038 result->Reset(); 3039 } 3040 return result; 3041} 3042 3043// Note: this visitor may return with a method set, but dex_pc_ being DexFile:kDexNoIndex. This is 3044// so we don't abort in a special situation (thinlocked monitor) when dumping the Java stack. 3045struct CurrentMethodVisitor FINAL : public StackVisitor { 3046 CurrentMethodVisitor(Thread* thread, Context* context, bool check_suspended, bool abort_on_error) 3047 REQUIRES_SHARED(Locks::mutator_lock_) 3048 : StackVisitor(thread, 3049 context, 3050 StackVisitor::StackWalkKind::kIncludeInlinedFrames, 3051 check_suspended), 3052 this_object_(nullptr), 3053 method_(nullptr), 3054 dex_pc_(0), 3055 abort_on_error_(abort_on_error) {} 3056 bool VisitFrame() OVERRIDE REQUIRES_SHARED(Locks::mutator_lock_) { 3057 ArtMethod* m = GetMethod(); 3058 if (m->IsRuntimeMethod()) { 3059 // Continue if this is a runtime method. 3060 return true; 3061 } 3062 if (context_ != nullptr) { 3063 this_object_ = GetThisObject(); 3064 } 3065 method_ = m; 3066 dex_pc_ = GetDexPc(abort_on_error_); 3067 return false; 3068 } 3069 ObjPtr<mirror::Object> this_object_; 3070 ArtMethod* method_; 3071 uint32_t dex_pc_; 3072 const bool abort_on_error_; 3073}; 3074 3075ArtMethod* Thread::GetCurrentMethod(uint32_t* dex_pc, 3076 bool check_suspended, 3077 bool abort_on_error) const { 3078 CurrentMethodVisitor visitor(const_cast<Thread*>(this), 3079 nullptr, 3080 check_suspended, 3081 abort_on_error); 3082 visitor.WalkStack(false); 3083 if (dex_pc != nullptr) { 3084 *dex_pc = visitor.dex_pc_; 3085 } 3086 return visitor.method_; 3087} 3088 3089bool Thread::HoldsLock(ObjPtr<mirror::Object> object) const { 3090 return object != nullptr && object->GetLockOwnerThreadId() == GetThreadId(); 3091} 3092 3093// RootVisitor parameters are: (const Object* obj, size_t vreg, const StackVisitor* visitor). 3094template <typename RootVisitor, bool kPrecise = false> 3095class ReferenceMapVisitor : public StackVisitor { 3096 public: 3097 ReferenceMapVisitor(Thread* thread, Context* context, RootVisitor& visitor) 3098 REQUIRES_SHARED(Locks::mutator_lock_) 3099 // We are visiting the references in compiled frames, so we do not need 3100 // to know the inlined frames. 3101 : StackVisitor(thread, context, StackVisitor::StackWalkKind::kSkipInlinedFrames), 3102 visitor_(visitor) {} 3103 3104 bool VisitFrame() REQUIRES_SHARED(Locks::mutator_lock_) { 3105 if (false) { 3106 LOG(INFO) << "Visiting stack roots in " << ArtMethod::PrettyMethod(GetMethod()) 3107 << StringPrintf("@ PC:%04x", GetDexPc()); 3108 } 3109 ShadowFrame* shadow_frame = GetCurrentShadowFrame(); 3110 if (shadow_frame != nullptr) { 3111 VisitShadowFrame(shadow_frame); 3112 } else { 3113 VisitQuickFrame(); 3114 } 3115 return true; 3116 } 3117 3118 void VisitShadowFrame(ShadowFrame* shadow_frame) REQUIRES_SHARED(Locks::mutator_lock_) { 3119 ArtMethod* m = shadow_frame->GetMethod(); 3120 VisitDeclaringClass(m); 3121 DCHECK(m != nullptr); 3122 size_t num_regs = shadow_frame->NumberOfVRegs(); 3123 DCHECK(m->IsNative() || shadow_frame->HasReferenceArray()); 3124 // handle scope for JNI or References for interpreter. 3125 for (size_t reg = 0; reg < num_regs; ++reg) { 3126 mirror::Object* ref = shadow_frame->GetVRegReference(reg); 3127 if (ref != nullptr) { 3128 mirror::Object* new_ref = ref; 3129 visitor_(&new_ref, reg, this); 3130 if (new_ref != ref) { 3131 shadow_frame->SetVRegReference(reg, new_ref); 3132 } 3133 } 3134 } 3135 // Mark lock count map required for structured locking checks. 3136 shadow_frame->GetLockCountData().VisitMonitors(visitor_, -1, this); 3137 } 3138 3139 private: 3140 // Visiting the declaring class is necessary so that we don't unload the class of a method that 3141 // is executing. We need to ensure that the code stays mapped. NO_THREAD_SAFETY_ANALYSIS since 3142 // the threads do not all hold the heap bitmap lock for parallel GC. 3143 void VisitDeclaringClass(ArtMethod* method) 3144 REQUIRES_SHARED(Locks::mutator_lock_) 3145 NO_THREAD_SAFETY_ANALYSIS { 3146 ObjPtr<mirror::Class> klass = method->GetDeclaringClassUnchecked<kWithoutReadBarrier>(); 3147 // klass can be null for runtime methods. 3148 if (klass != nullptr) { 3149 if (kVerifyImageObjectsMarked) { 3150 gc::Heap* const heap = Runtime::Current()->GetHeap(); 3151 gc::space::ContinuousSpace* space = heap->FindContinuousSpaceFromObject(klass, 3152 /*fail_ok*/true); 3153 if (space != nullptr && space->IsImageSpace()) { 3154 bool failed = false; 3155 if (!space->GetLiveBitmap()->Test(klass.Ptr())) { 3156 failed = true; 3157 LOG(FATAL_WITHOUT_ABORT) << "Unmarked object in image " << *space; 3158 } else if (!heap->GetLiveBitmap()->Test(klass.Ptr())) { 3159 failed = true; 3160 LOG(FATAL_WITHOUT_ABORT) << "Unmarked object in image through live bitmap " << *space; 3161 } 3162 if (failed) { 3163 GetThread()->Dump(LOG_STREAM(FATAL_WITHOUT_ABORT)); 3164 space->AsImageSpace()->DumpSections(LOG_STREAM(FATAL_WITHOUT_ABORT)); 3165 LOG(FATAL_WITHOUT_ABORT) << "Method@" << method->GetDexMethodIndex() << ":" << method 3166 << " klass@" << klass.Ptr(); 3167 // Pretty info last in case it crashes. 3168 LOG(FATAL) << "Method " << method->PrettyMethod() << " klass " 3169 << klass->PrettyClass(); 3170 } 3171 } 3172 } 3173 mirror::Object* new_ref = klass.Ptr(); 3174 visitor_(&new_ref, -1, this); 3175 if (new_ref != klass) { 3176 method->CASDeclaringClass(klass.Ptr(), new_ref->AsClass()); 3177 } 3178 } 3179 } 3180 3181 template <typename T> 3182 ALWAYS_INLINE 3183 inline void VisitQuickFrameWithVregCallback() REQUIRES_SHARED(Locks::mutator_lock_) { 3184 ArtMethod** cur_quick_frame = GetCurrentQuickFrame(); 3185 DCHECK(cur_quick_frame != nullptr); 3186 ArtMethod* m = *cur_quick_frame; 3187 VisitDeclaringClass(m); 3188 3189 // Process register map (which native and runtime methods don't have) 3190 if (!m->IsNative() && !m->IsRuntimeMethod() && (!m->IsProxyMethod() || m->IsConstructor())) { 3191 const OatQuickMethodHeader* method_header = GetCurrentOatQuickMethodHeader(); 3192 DCHECK(method_header->IsOptimized()); 3193 auto* vreg_base = reinterpret_cast<StackReference<mirror::Object>*>( 3194 reinterpret_cast<uintptr_t>(cur_quick_frame)); 3195 uintptr_t native_pc_offset = method_header->NativeQuickPcOffset(GetCurrentQuickFramePc()); 3196 CodeInfo code_info = method_header->GetOptimizedCodeInfo(); 3197 CodeInfoEncoding encoding = code_info.ExtractEncoding(); 3198 StackMap map = code_info.GetStackMapForNativePcOffset(native_pc_offset, encoding); 3199 DCHECK(map.IsValid()); 3200 3201 T vreg_info(m, code_info, encoding, map, visitor_); 3202 3203 // Visit stack entries that hold pointers. 3204 const size_t number_of_bits = code_info.GetNumberOfStackMaskBits(encoding); 3205 BitMemoryRegion stack_mask = code_info.GetStackMaskOf(encoding, map); 3206 for (size_t i = 0; i < number_of_bits; ++i) { 3207 if (stack_mask.LoadBit(i)) { 3208 auto* ref_addr = vreg_base + i; 3209 mirror::Object* ref = ref_addr->AsMirrorPtr(); 3210 if (ref != nullptr) { 3211 mirror::Object* new_ref = ref; 3212 vreg_info.VisitStack(&new_ref, i, this); 3213 if (ref != new_ref) { 3214 ref_addr->Assign(new_ref); 3215 } 3216 } 3217 } 3218 } 3219 // Visit callee-save registers that hold pointers. 3220 uint32_t register_mask = code_info.GetRegisterMaskOf(encoding, map); 3221 for (size_t i = 0; i < BitSizeOf<uint32_t>(); ++i) { 3222 if (register_mask & (1 << i)) { 3223 mirror::Object** ref_addr = reinterpret_cast<mirror::Object**>(GetGPRAddress(i)); 3224 if (kIsDebugBuild && ref_addr == nullptr) { 3225 std::string thread_name; 3226 GetThread()->GetThreadName(thread_name); 3227 LOG(FATAL_WITHOUT_ABORT) << "On thread " << thread_name; 3228 DescribeStack(GetThread()); 3229 LOG(FATAL) << "Found an unsaved callee-save register " << i << " (null GPRAddress) " 3230 << "set in register_mask=" << register_mask << " at " << DescribeLocation(); 3231 } 3232 if (*ref_addr != nullptr) { 3233 vreg_info.VisitRegister(ref_addr, i, this); 3234 } 3235 } 3236 } 3237 } 3238 } 3239 3240 void VisitQuickFrame() REQUIRES_SHARED(Locks::mutator_lock_) { 3241 if (kPrecise) { 3242 VisitQuickFramePrecise(); 3243 } else { 3244 VisitQuickFrameNonPrecise(); 3245 } 3246 } 3247 3248 void VisitQuickFrameNonPrecise() REQUIRES_SHARED(Locks::mutator_lock_) { 3249 struct UndefinedVRegInfo { 3250 UndefinedVRegInfo(ArtMethod* method ATTRIBUTE_UNUSED, 3251 const CodeInfo& code_info ATTRIBUTE_UNUSED, 3252 const CodeInfoEncoding& encoding ATTRIBUTE_UNUSED, 3253 const StackMap& map ATTRIBUTE_UNUSED, 3254 RootVisitor& _visitor) 3255 : visitor(_visitor) { 3256 } 3257 3258 ALWAYS_INLINE 3259 void VisitStack(mirror::Object** ref, 3260 size_t stack_index ATTRIBUTE_UNUSED, 3261 const StackVisitor* stack_visitor) 3262 REQUIRES_SHARED(Locks::mutator_lock_) { 3263 visitor(ref, -1, stack_visitor); 3264 } 3265 3266 ALWAYS_INLINE 3267 void VisitRegister(mirror::Object** ref, 3268 size_t register_index ATTRIBUTE_UNUSED, 3269 const StackVisitor* stack_visitor) 3270 REQUIRES_SHARED(Locks::mutator_lock_) { 3271 visitor(ref, -1, stack_visitor); 3272 } 3273 3274 RootVisitor& visitor; 3275 }; 3276 VisitQuickFrameWithVregCallback<UndefinedVRegInfo>(); 3277 } 3278 3279 void VisitQuickFramePrecise() REQUIRES_SHARED(Locks::mutator_lock_) { 3280 struct StackMapVRegInfo { 3281 StackMapVRegInfo(ArtMethod* method, 3282 const CodeInfo& _code_info, 3283 const CodeInfoEncoding& _encoding, 3284 const StackMap& map, 3285 RootVisitor& _visitor) 3286 : number_of_dex_registers(method->GetCodeItem()->registers_size_), 3287 code_info(_code_info), 3288 encoding(_encoding), 3289 dex_register_map(code_info.GetDexRegisterMapOf(map, 3290 encoding, 3291 number_of_dex_registers)), 3292 visitor(_visitor) { 3293 } 3294 3295 // TODO: If necessary, we should consider caching a reverse map instead of the linear 3296 // lookups for each location. 3297 void FindWithType(const size_t index, 3298 const DexRegisterLocation::Kind kind, 3299 mirror::Object** ref, 3300 const StackVisitor* stack_visitor) 3301 REQUIRES_SHARED(Locks::mutator_lock_) { 3302 bool found = false; 3303 for (size_t dex_reg = 0; dex_reg != number_of_dex_registers; ++dex_reg) { 3304 DexRegisterLocation location = dex_register_map.GetDexRegisterLocation( 3305 dex_reg, number_of_dex_registers, code_info, encoding); 3306 if (location.GetKind() == kind && static_cast<size_t>(location.GetValue()) == index) { 3307 visitor(ref, dex_reg, stack_visitor); 3308 found = true; 3309 } 3310 } 3311 3312 if (!found) { 3313 // If nothing found, report with -1. 3314 visitor(ref, -1, stack_visitor); 3315 } 3316 } 3317 3318 void VisitStack(mirror::Object** ref, size_t stack_index, const StackVisitor* stack_visitor) 3319 REQUIRES_SHARED(Locks::mutator_lock_) { 3320 const size_t stack_offset = stack_index * kFrameSlotSize; 3321 FindWithType(stack_offset, 3322 DexRegisterLocation::Kind::kInStack, 3323 ref, 3324 stack_visitor); 3325 } 3326 3327 void VisitRegister(mirror::Object** ref, 3328 size_t register_index, 3329 const StackVisitor* stack_visitor) 3330 REQUIRES_SHARED(Locks::mutator_lock_) { 3331 FindWithType(register_index, 3332 DexRegisterLocation::Kind::kInRegister, 3333 ref, 3334 stack_visitor); 3335 } 3336 3337 size_t number_of_dex_registers; 3338 const CodeInfo& code_info; 3339 const CodeInfoEncoding& encoding; 3340 DexRegisterMap dex_register_map; 3341 RootVisitor& visitor; 3342 }; 3343 VisitQuickFrameWithVregCallback<StackMapVRegInfo>(); 3344 } 3345 3346 // Visitor for when we visit a root. 3347 RootVisitor& visitor_; 3348}; 3349 3350class RootCallbackVisitor { 3351 public: 3352 RootCallbackVisitor(RootVisitor* visitor, uint32_t tid) : visitor_(visitor), tid_(tid) {} 3353 3354 void operator()(mirror::Object** obj, size_t vreg, const StackVisitor* stack_visitor) const 3355 REQUIRES_SHARED(Locks::mutator_lock_) { 3356 visitor_->VisitRoot(obj, JavaFrameRootInfo(tid_, stack_visitor, vreg)); 3357 } 3358 3359 private: 3360 RootVisitor* const visitor_; 3361 const uint32_t tid_; 3362}; 3363 3364template <bool kPrecise> 3365void Thread::VisitRoots(RootVisitor* visitor) { 3366 const uint32_t thread_id = GetThreadId(); 3367 visitor->VisitRootIfNonNull(&tlsPtr_.opeer, RootInfo(kRootThreadObject, thread_id)); 3368 if (tlsPtr_.exception != nullptr && tlsPtr_.exception != GetDeoptimizationException()) { 3369 visitor->VisitRoot(reinterpret_cast<mirror::Object**>(&tlsPtr_.exception), 3370 RootInfo(kRootNativeStack, thread_id)); 3371 } 3372 visitor->VisitRootIfNonNull(&tlsPtr_.monitor_enter_object, RootInfo(kRootNativeStack, thread_id)); 3373 tlsPtr_.jni_env->locals.VisitRoots(visitor, RootInfo(kRootJNILocal, thread_id)); 3374 tlsPtr_.jni_env->monitors.VisitRoots(visitor, RootInfo(kRootJNIMonitor, thread_id)); 3375 HandleScopeVisitRoots(visitor, thread_id); 3376 if (tlsPtr_.debug_invoke_req != nullptr) { 3377 tlsPtr_.debug_invoke_req->VisitRoots(visitor, RootInfo(kRootDebugger, thread_id)); 3378 } 3379 // Visit roots for deoptimization. 3380 if (tlsPtr_.stacked_shadow_frame_record != nullptr) { 3381 RootCallbackVisitor visitor_to_callback(visitor, thread_id); 3382 ReferenceMapVisitor<RootCallbackVisitor, kPrecise> mapper(this, nullptr, visitor_to_callback); 3383 for (StackedShadowFrameRecord* record = tlsPtr_.stacked_shadow_frame_record; 3384 record != nullptr; 3385 record = record->GetLink()) { 3386 for (ShadowFrame* shadow_frame = record->GetShadowFrame(); 3387 shadow_frame != nullptr; 3388 shadow_frame = shadow_frame->GetLink()) { 3389 mapper.VisitShadowFrame(shadow_frame); 3390 } 3391 } 3392 } 3393 for (DeoptimizationContextRecord* record = tlsPtr_.deoptimization_context_stack; 3394 record != nullptr; 3395 record = record->GetLink()) { 3396 if (record->IsReference()) { 3397 visitor->VisitRootIfNonNull(record->GetReturnValueAsGCRoot(), 3398 RootInfo(kRootThreadObject, thread_id)); 3399 } 3400 visitor->VisitRootIfNonNull(record->GetPendingExceptionAsGCRoot(), 3401 RootInfo(kRootThreadObject, thread_id)); 3402 } 3403 if (tlsPtr_.frame_id_to_shadow_frame != nullptr) { 3404 RootCallbackVisitor visitor_to_callback(visitor, thread_id); 3405 ReferenceMapVisitor<RootCallbackVisitor, kPrecise> mapper(this, nullptr, visitor_to_callback); 3406 for (FrameIdToShadowFrame* record = tlsPtr_.frame_id_to_shadow_frame; 3407 record != nullptr; 3408 record = record->GetNext()) { 3409 mapper.VisitShadowFrame(record->GetShadowFrame()); 3410 } 3411 } 3412 for (auto* verifier = tlsPtr_.method_verifier; verifier != nullptr; verifier = verifier->link_) { 3413 verifier->VisitRoots(visitor, RootInfo(kRootNativeStack, thread_id)); 3414 } 3415 // Visit roots on this thread's stack 3416 Context* context = GetLongJumpContext(); 3417 RootCallbackVisitor visitor_to_callback(visitor, thread_id); 3418 ReferenceMapVisitor<RootCallbackVisitor, kPrecise> mapper(this, context, visitor_to_callback); 3419 mapper.template WalkStack<StackVisitor::CountTransitions::kNo>(false); 3420 ReleaseLongJumpContext(context); 3421 for (instrumentation::InstrumentationStackFrame& frame : *GetInstrumentationStack()) { 3422 visitor->VisitRootIfNonNull(&frame.this_object_, RootInfo(kRootVMInternal, thread_id)); 3423 } 3424} 3425 3426void Thread::VisitRoots(RootVisitor* visitor, VisitRootFlags flags) { 3427 if ((flags & VisitRootFlags::kVisitRootFlagPrecise) != 0) { 3428 VisitRoots<true>(visitor); 3429 } else { 3430 VisitRoots<false>(visitor); 3431 } 3432} 3433 3434class VerifyRootVisitor : public SingleRootVisitor { 3435 public: 3436 void VisitRoot(mirror::Object* root, const RootInfo& info ATTRIBUTE_UNUSED) 3437 OVERRIDE REQUIRES_SHARED(Locks::mutator_lock_) { 3438 VerifyObject(root); 3439 } 3440}; 3441 3442void Thread::VerifyStackImpl() { 3443 VerifyRootVisitor visitor; 3444 std::unique_ptr<Context> context(Context::Create()); 3445 RootCallbackVisitor visitor_to_callback(&visitor, GetThreadId()); 3446 ReferenceMapVisitor<RootCallbackVisitor> mapper(this, context.get(), visitor_to_callback); 3447 mapper.WalkStack(); 3448} 3449 3450// Set the stack end to that to be used during a stack overflow 3451void Thread::SetStackEndForStackOverflow() { 3452 // During stack overflow we allow use of the full stack. 3453 if (tlsPtr_.stack_end == tlsPtr_.stack_begin) { 3454 // However, we seem to have already extended to use the full stack. 3455 LOG(ERROR) << "Need to increase kStackOverflowReservedBytes (currently " 3456 << GetStackOverflowReservedBytes(kRuntimeISA) << ")?"; 3457 DumpStack(LOG_STREAM(ERROR)); 3458 LOG(FATAL) << "Recursive stack overflow."; 3459 } 3460 3461 tlsPtr_.stack_end = tlsPtr_.stack_begin; 3462 3463 // Remove the stack overflow protection if is it set up. 3464 bool implicit_stack_check = !Runtime::Current()->ExplicitStackOverflowChecks(); 3465 if (implicit_stack_check) { 3466 if (!UnprotectStack()) { 3467 LOG(ERROR) << "Unable to remove stack protection for stack overflow"; 3468 } 3469 } 3470} 3471 3472void Thread::SetTlab(uint8_t* start, uint8_t* end, uint8_t* limit) { 3473 DCHECK_LE(start, end); 3474 DCHECK_LE(end, limit); 3475 tlsPtr_.thread_local_start = start; 3476 tlsPtr_.thread_local_pos = tlsPtr_.thread_local_start; 3477 tlsPtr_.thread_local_end = end; 3478 tlsPtr_.thread_local_limit = limit; 3479 tlsPtr_.thread_local_objects = 0; 3480} 3481 3482bool Thread::HasTlab() const { 3483 bool has_tlab = tlsPtr_.thread_local_pos != nullptr; 3484 if (has_tlab) { 3485 DCHECK(tlsPtr_.thread_local_start != nullptr && tlsPtr_.thread_local_end != nullptr); 3486 } else { 3487 DCHECK(tlsPtr_.thread_local_start == nullptr && tlsPtr_.thread_local_end == nullptr); 3488 } 3489 return has_tlab; 3490} 3491 3492std::ostream& operator<<(std::ostream& os, const Thread& thread) { 3493 thread.ShortDump(os); 3494 return os; 3495} 3496 3497bool Thread::ProtectStack(bool fatal_on_error) { 3498 void* pregion = tlsPtr_.stack_begin - kStackOverflowProtectedSize; 3499 VLOG(threads) << "Protecting stack at " << pregion; 3500 if (mprotect(pregion, kStackOverflowProtectedSize, PROT_NONE) == -1) { 3501 if (fatal_on_error) { 3502 LOG(FATAL) << "Unable to create protected region in stack for implicit overflow check. " 3503 "Reason: " 3504 << strerror(errno) << " size: " << kStackOverflowProtectedSize; 3505 } 3506 return false; 3507 } 3508 return true; 3509} 3510 3511bool Thread::UnprotectStack() { 3512 void* pregion = tlsPtr_.stack_begin - kStackOverflowProtectedSize; 3513 VLOG(threads) << "Unprotecting stack at " << pregion; 3514 return mprotect(pregion, kStackOverflowProtectedSize, PROT_READ|PROT_WRITE) == 0; 3515} 3516 3517void Thread::ActivateSingleStepControl(SingleStepControl* ssc) { 3518 CHECK(Dbg::IsDebuggerActive()); 3519 CHECK(GetSingleStepControl() == nullptr) << "Single step already active in thread " << *this; 3520 CHECK(ssc != nullptr); 3521 tlsPtr_.single_step_control = ssc; 3522} 3523 3524void Thread::DeactivateSingleStepControl() { 3525 CHECK(Dbg::IsDebuggerActive()); 3526 CHECK(GetSingleStepControl() != nullptr) << "Single step not active in thread " << *this; 3527 SingleStepControl* ssc = GetSingleStepControl(); 3528 tlsPtr_.single_step_control = nullptr; 3529 delete ssc; 3530} 3531 3532void Thread::SetDebugInvokeReq(DebugInvokeReq* req) { 3533 CHECK(Dbg::IsDebuggerActive()); 3534 CHECK(GetInvokeReq() == nullptr) << "Debug invoke req already active in thread " << *this; 3535 CHECK(Thread::Current() != this) << "Debug invoke can't be dispatched by the thread itself"; 3536 CHECK(req != nullptr); 3537 tlsPtr_.debug_invoke_req = req; 3538} 3539 3540void Thread::ClearDebugInvokeReq() { 3541 CHECK(GetInvokeReq() != nullptr) << "Debug invoke req not active in thread " << *this; 3542 CHECK(Thread::Current() == this) << "Debug invoke must be finished by the thread itself"; 3543 DebugInvokeReq* req = tlsPtr_.debug_invoke_req; 3544 tlsPtr_.debug_invoke_req = nullptr; 3545 delete req; 3546} 3547 3548void Thread::PushVerifier(verifier::MethodVerifier* verifier) { 3549 verifier->link_ = tlsPtr_.method_verifier; 3550 tlsPtr_.method_verifier = verifier; 3551} 3552 3553void Thread::PopVerifier(verifier::MethodVerifier* verifier) { 3554 CHECK_EQ(tlsPtr_.method_verifier, verifier); 3555 tlsPtr_.method_verifier = verifier->link_; 3556} 3557 3558size_t Thread::NumberOfHeldMutexes() const { 3559 size_t count = 0; 3560 for (BaseMutex* mu : tlsPtr_.held_mutexes) { 3561 count += mu != nullptr ? 1 : 0; 3562 } 3563 return count; 3564} 3565 3566void Thread::DeoptimizeWithDeoptimizationException(JValue* result) { 3567 DCHECK_EQ(GetException(), Thread::GetDeoptimizationException()); 3568 ClearException(); 3569 ShadowFrame* shadow_frame = 3570 PopStackedShadowFrame(StackedShadowFrameType::kDeoptimizationShadowFrame); 3571 ObjPtr<mirror::Throwable> pending_exception; 3572 bool from_code = false; 3573 PopDeoptimizationContext(result, &pending_exception, &from_code); 3574 SetTopOfStack(nullptr); 3575 SetTopOfShadowStack(shadow_frame); 3576 3577 // Restore the exception that was pending before deoptimization then interpret the 3578 // deoptimized frames. 3579 if (pending_exception != nullptr) { 3580 SetException(pending_exception); 3581 } 3582 interpreter::EnterInterpreterFromDeoptimize(this, shadow_frame, from_code, result); 3583} 3584 3585void Thread::SetException(ObjPtr<mirror::Throwable> new_exception) { 3586 CHECK(new_exception != nullptr); 3587 // TODO: DCHECK(!IsExceptionPending()); 3588 tlsPtr_.exception = new_exception.Ptr(); 3589} 3590 3591bool Thread::IsAotCompiler() { 3592 return Runtime::Current()->IsAotCompiler(); 3593} 3594 3595mirror::Object* Thread::GetPeerFromOtherThread() const { 3596 DCHECK(tlsPtr_.jpeer == nullptr); 3597 mirror::Object* peer = tlsPtr_.opeer; 3598 if (kUseReadBarrier && Current()->GetIsGcMarking()) { 3599 // We may call Thread::Dump() in the middle of the CC thread flip and this thread's stack 3600 // may have not been flipped yet and peer may be a from-space (stale) ref. So explicitly 3601 // mark/forward it here. 3602 peer = art::ReadBarrier::Mark(peer); 3603 } 3604 return peer; 3605} 3606 3607} // namespace art 3608