ART: Relax CurrentMethodVisitor requirements on GetDexPC

In case we want to dump a Java stack after an unhandled fault, in
case we hold a thinlocked monitor, that monitor might get inflated.
That can cause an abort as we may not have enough/correct information
for the state at the bottom-most call.

Relax GetDexPc in the CurrentMethodVisitor to not abort when it cannot
find a dex pc. Instead, let the caller handle such a case. This CL
allows the locking_dex_pc_ in Monitor to be DexFile::kDexNoIndex,
which avoids the above abort.

Bug: 16352802, 16556938
Change-Id: I3adf89b2d8f018a0c3e3abdd26e542f46ee59eef
diff --git a/runtime/thread.cc b/runtime/thread.cc
index f888029..cfa2290 100644
--- a/runtime/thread.cc
+++ b/runtime/thread.cc
@@ -1970,6 +1970,8 @@
   return result;
 }
 
+// Note: this visitor may return with a method set, but dex_pc_ being DexFile:kDexNoIndex. This is
+//       so we don't abort in a special situation (thinlocked monitor) when dumping the Java stack.
 struct CurrentMethodVisitor FINAL : public StackVisitor {
   CurrentMethodVisitor(Thread* thread, Context* context)
       SHARED_LOCKS_REQUIRED(Locks::mutator_lock_)
@@ -1984,7 +1986,7 @@
       this_object_ = GetThisObject();
     }
     method_ = m;
-    dex_pc_ = GetDexPc();
+    dex_pc_ = GetDexPc(false);  // We may not have a valid PC. Let the caller deal with it.
     return false;
   }
   mirror::Object* this_object_;
@@ -2005,6 +2007,7 @@
   Context* context = GetLongJumpContext();
   CurrentMethodVisitor visitor(this, context);
   visitor.WalkStack(false);
+  CHECK_NE(visitor.dex_pc_, DexFile::kDexNoIndex);  // TODO: Can we relax this?
   ReleaseLongJumpContext(context);
   return ThrowLocation(visitor.this_object_, visitor.method_, visitor.dex_pc_);
 }