summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util/statetrace/arch/tracechild_amd64.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/util/statetrace/arch/tracechild_amd64.cc b/util/statetrace/arch/tracechild_amd64.cc
index 222923972..112ee793e 100644
--- a/util/statetrace/arch/tracechild_amd64.cc
+++ b/util/statetrace/arch/tracechild_amd64.cc
@@ -317,7 +317,15 @@ bool AMD64TraceChild::step()
ptrace(PTRACE_POKEDATA, pid, ripAfterSyscall, buf);
}
else
- ptraceSingleStep();
+ {
+ //Get all the way past repe and repne string instructions in one shot.
+ uint64_t newPC, origPC = getPC();
+ do
+ {
+ ptraceSingleStep();
+ newPC = getPC();
+ } while(newPC == origPC);
+ }
}
TraceChild * genTraceChild()