Enter interpreter stub.

Untested code that when set as the code for a AbstractMethod* will force the
next invocation of the Method to transition into the interpreter.

Change-Id: I557bca3a2caf4a78551b39aa5ac4ffb4c486105b
diff --git a/src/interpreter/interpreter.cc b/src/interpreter/interpreter.cc
index 3b041c8..d816830 100644
--- a/src/interpreter/interpreter.cc
+++ b/src/interpreter/interpreter.cc
@@ -1811,7 +1811,7 @@
   // Set up shadow frame with matching number of reference slots to vregs.
   ShadowFrame* last_shadow_frame = self->GetManagedStack()->GetTopShadowFrame();
   UniquePtr<ShadowFrame> shadow_frame(ShadowFrame::Create(num_regs,
-                                                          (last_shadow_frame == NULL) ? NULL : last_shadow_frame->GetLink(),
+                                                          last_shadow_frame,
                                                           method, 0));
   self->PushShadowFrame(shadow_frame.get());
   size_t cur_reg = num_regs - num_ins;
@@ -1870,5 +1870,11 @@
   return Execute(self, mh, code_item, shadow_frame, ret_val);
 }
 
+JValue EnterInterpreterFromStub(Thread* self, MethodHelper& mh, const DexFile::CodeItem* code_item,
+                                ShadowFrame& shadow_frame)
+    SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
+  return Execute(self, mh, code_item, shadow_frame, JValue());
+}
+
 }  // namespace interpreter
 }  // namespace art