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