summaryrefslogtreecommitdiffstats
path: root/runtime/instrumentation.cc
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/instrumentation.cc')
-rw-r--r--runtime/instrumentation.cc14
1 files changed, 12 insertions, 2 deletions
diff --git a/runtime/instrumentation.cc b/runtime/instrumentation.cc
index 9d05169..01ad46d 100644
--- a/runtime/instrumentation.cc
+++ b/runtime/instrumentation.cc
@@ -80,9 +80,19 @@ static void UpdateEntrypoints(mirror::ArtMethod* method, const void* quick_code,
method->ClearIsPortableCompiled();
}
if (!method->IsResolutionMethod()) {
- if (quick_code == GetQuickToInterpreterBridge()) {
- DCHECK(portable_code == GetPortableToInterpreterBridge());
+ if (quick_code == GetQuickToInterpreterBridge() ||
+ (quick_code == GetQuickResolutionTrampoline(Runtime::Current()->GetClassLinker()) &&
+ Runtime::Current()->GetInstrumentation()->IsForcedInterpretOnly()
+ && !method->IsNative() && !method->IsProxyMethod())) {
+ if (kIsDebugBuild) {
+ if (quick_code == GetQuickToInterpreterBridge()) {
+ DCHECK(portable_code == GetPortableToInterpreterBridge());
+ } else if (quick_code == GetQuickResolutionTrampoline(Runtime::Current()->GetClassLinker())) {
+ DCHECK(portable_code == GetPortableResolutionTrampoline(Runtime::Current()->GetClassLinker()));
+ }
+ }
DCHECK(!method->IsNative()) << PrettyMethod(method);
+ DCHECK(!method->IsProxyMethod()) << PrettyMethod(method);
method->SetEntryPointFromInterpreter(art::interpreter::artInterpreterToInterpreterBridge);
} else {
method->SetEntryPointFromInterpreter(art::artInterpreterToCompiledCodeBridge);