summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2015-02-27 02:58:48 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-02-27 02:58:48 +0000
commit242026e246a8b9efe098a0cce008fd525e011e5b (patch)
tree07a9c0f0fe6a3193933f1b3cc7623e7ca82b0023
parent0a575f25c56c8fff485a1dd497ed1efb1b5d3ea9 (diff)
parent28a35887033652f3c1344bc3f46f5a1368023996 (diff)
downloadart-242026e246a8b9efe098a0cce008fd525e011e5b.zip
art-242026e246a8b9efe098a0cce008fd525e011e5b.tar.gz
art-242026e246a8b9efe098a0cce008fd525e011e5b.tar.bz2
Merge "Fix JIT direct call to interpreter bridge"
-rw-r--r--compiler/driver/compiler_driver.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc
index 15b3d08..90e63e9 100644
--- a/compiler/driver/compiler_driver.cc
+++ b/compiler/driver/compiler_driver.cc
@@ -1316,6 +1316,14 @@ void CompilerDriver::GetCodeAndMethodForDirectCall(InvokeType* type, InvokeType
}
}
}
+ if (runtime->UseJit()) {
+ // If we are the JIT, then don't allow a direct call to the interpreter bridge since this will
+ // never be updated even after we compile the method.
+ if (runtime->GetClassLinker()->IsQuickToInterpreterBridge(
+ reinterpret_cast<const void*>(compiler_->GetEntryPointOf(method)))) {
+ use_dex_cache = true;
+ }
+ }
if (method_code_in_boot) {
*stats_flags |= kFlagDirectCallToBoot | kFlagDirectMethodToBoot;
}