This was caused by an interaction of resteering and the infamous
EX insn. This sequence
j someplace
ex ....
with the unconditional jump being subject to restering caused madness.
Such a sequence is found in glibc's syscall.S with the effect that all
system calls > 255 would have run into the same problem as timerfd_*.
Patch by Christian Borntraeger (borntraeger@de.ibm.com).
git-svn-id: svn://svn.valgrind.org/vex/trunk@2222
}
}
/* If next instruction is execute, stop here */
- if (irsb->next == NULL && bytes[insn_length] == 0x44) {
+ if (irsb->next == NULL && dis_res->whatNext == Dis_Continue
+ && bytes[insn_length] == 0x44) {
irsb->next = IRExpr_Const(IRConst_U64(guest_IA_next_instr));
dis_res->whatNext = Dis_StopHere;
dis_res->continueAt = 0;