summaryrefslogtreecommitdiffstats
path: root/runtime/interpreter
diff options
context:
space:
mode:
authorSebastien Hertz <shertz@google.com>2015-03-24 14:12:35 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-03-24 14:12:35 +0000
commitaf87659f462ac650009fce295097cae3dabce171 (patch)
treef203c9eed1543f6393175b2431ac6b43deb1b43c /runtime/interpreter
parent94ead7673f90a8199d926fe161d7d021202f0aa7 (diff)
parenteb07669e9784ccb41d75df180727e57fc4520e28 (diff)
downloadart-af87659f462ac650009fce295097cae3dabce171.tar.gz
art-af87659f462ac650009fce295097cae3dabce171.tar.bz2
art-af87659f462ac650009fce295097cae3dabce171.zip
Merge "JDWP: Optimized single step during debugging"
Diffstat (limited to 'runtime/interpreter')
-rw-r--r--runtime/interpreter/interpreter_common.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/runtime/interpreter/interpreter_common.cc b/runtime/interpreter/interpreter_common.cc
index 26ab602dc1..a3ab026ba8 100644
--- a/runtime/interpreter/interpreter_common.cc
+++ b/runtime/interpreter/interpreter_common.cc
@@ -18,6 +18,7 @@
#include <cmath>
+#include "debugger.h"
#include "mirror/array-inl.h"
#include "unstarted_runtime.h"
@@ -616,8 +617,14 @@ bool DoCall(ArtMethod* called_method, Thread* self, ShadowFrame& shadow_frame,
<< PrettyMethod(new_shadow_frame->GetMethod());
UNREACHABLE();
}
- (new_shadow_frame->GetMethod()->GetEntryPointFromInterpreter())(self, code_item,
- new_shadow_frame, result);
+ // Force the use of interpreter when it is required by the debugger.
+ mirror::EntryPointFromInterpreter* entry;
+ if (UNLIKELY(Dbg::IsForcedInterpreterNeededForCalling(self, new_shadow_frame->GetMethod()))) {
+ entry = &art::artInterpreterToInterpreterBridge;
+ } else {
+ entry = new_shadow_frame->GetMethod()->GetEntryPointFromInterpreter();
+ }
+ entry(self, code_item, new_shadow_frame, result);
} else {
UnstartedRuntimeInvoke(self, code_item, new_shadow_frame, result, first_dest_reg);
}