diff options
author | Ben Cheng <bccheng@android.com> | 2011-10-27 18:42:33 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-10-27 18:42:33 -0700 |
commit | b7b9b2ac7fa1dda807fdadaff80784786aa536e2 (patch) | |
tree | 0f42926e2e540d9707475ca9fbf110009ab61ad4 /vm/interp | |
parent | b1212301d5cffc06907211d243a21d50c4419dc9 (diff) | |
parent | 0c0624bfad83503547b0226bd2dfac055782582a (diff) | |
download | android_dalvik-b7b9b2ac7fa1dda807fdadaff80784786aa536e2.tar.gz android_dalvik-b7b9b2ac7fa1dda807fdadaff80784786aa536e2.tar.bz2 android_dalvik-b7b9b2ac7fa1dda807fdadaff80784786aa536e2.zip |
Merge "Fix single-stepping resume mode in the interpreter."
Diffstat (limited to 'vm/interp')
-rw-r--r-- | vm/interp/Interp.cpp | 3 | ||||
-rw-r--r-- | vm/interp/Jit.cpp | 7 |
2 files changed, 8 insertions, 2 deletions
diff --git a/vm/interp/Interp.cpp b/vm/interp/Interp.cpp index 41633534c..62d4469fc 100644 --- a/vm/interp/Interp.cpp +++ b/vm/interp/Interp.cpp @@ -1839,6 +1839,9 @@ void dvmCheckBefore(const u2 *pc, u4 *fp, Thread* self) // Doesn't return dvmAbort(); } + // In case resume is blocked by non-zero breakFlags, clear + // jitResumeNPC here. + self->jitResumeNPC = NULL; self->jitResumeDPC = NULL; self->inJitCodeCache = NULL; #endif diff --git a/vm/interp/Jit.cpp b/vm/interp/Jit.cpp index d4c5a796e..494aae1a9 100644 --- a/vm/interp/Jit.cpp +++ b/vm/interp/Jit.cpp @@ -976,9 +976,12 @@ void dvmCheckJit(const u2* pc, Thread* self) if (allDone) { dvmDisableSubMode(self, kSubModeJitTraceBuild); if (stayOneMoreInst) { + // Clear jitResumeNPC explicitly since we know we don't need it + // here. + self->jitResumeNPC = NULL; // Keep going in single-step mode for at least one more inst - assert(self->jitResumeNPC == NULL); - self->singleStepCount = MIN(1, self->singleStepCount); + if (self->singleStepCount == 0) + self->singleStepCount = 1; dvmEnableSubMode(self, kSubModeCountedStep); } } |