diff options
Diffstat (limited to 'runtime/entrypoints/interpreter/interpreter_entrypoints.cc')
-rw-r--r-- | runtime/entrypoints/interpreter/interpreter_entrypoints.cc | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/runtime/entrypoints/interpreter/interpreter_entrypoints.cc b/runtime/entrypoints/interpreter/interpreter_entrypoints.cc index 3f02ec7f73..f2e2bf7aa9 100644 --- a/runtime/entrypoints/interpreter/interpreter_entrypoints.cc +++ b/runtime/entrypoints/interpreter/interpreter_entrypoints.cc @@ -25,6 +25,7 @@ namespace art { +// TODO: Make the MethodHelper here be compaction safe. extern "C" void artInterpreterToCompiledCodeBridge(Thread* self, MethodHelper& mh, const DexFile::CodeItem* code_item, ShadowFrame* shadow_frame, JValue* result) { @@ -43,6 +44,8 @@ extern "C" void artInterpreterToCompiledCodeBridge(Thread* self, MethodHelper& m } self->PopShadowFrame(); CHECK(h_class->IsInitializing()); + // Reload from shadow frame in case the method moved, this is faster than adding a handle. + method = shadow_frame->GetMethod(); } } uint16_t arg_offset = (code_item == NULL) ? 0 : code_item->registers_size_ - code_item->ins_size_; |