|
From: <sv...@va...> - 2011-10-20 21:20:40
|
Author: florian
Date: 2011-10-20 22:15:55 +0100 (Thu, 20 Oct 2011)
New Revision: 2222
Log:
Fix timerfd-syscall testcase on s390x.
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 (bor...@de...).
Modified:
trunk/priv/guest_s390_toIR.c
Modified: trunk/priv/guest_s390_toIR.c
===================================================================
--- trunk/priv/guest_s390_toIR.c 2011-10-20 12:41:38 UTC (rev 2221)
+++ trunk/priv/guest_s390_toIR.c 2011-10-20 21:15:55 UTC (rev 2222)
@@ -13209,7 +13209,8 @@
}
}
/* 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;
|