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