|
From: <sv...@va...> - 2011-08-01 22:12:43
|
Author: florian
Date: 2011-08-01 23:07:51 +0100 (Mon, 01 Aug 2011)
New Revision: 2187
Log:
For a special opcode the address of the next insn was
not computed correctly. It would point to an insn in
the middle of the the pattern that identifies a special opcode.
That didn't hurt much but was confusing. Now fixed.
Modified:
trunk/priv/guest_s390_toIR.c
Modified: trunk/priv/guest_s390_toIR.c
===================================================================
--- trunk/priv/guest_s390_toIR.c 2011-07-30 20:09:28 UTC (rev 2186)
+++ trunk/priv/guest_s390_toIR.c 2011-08-01 22:07:51 UTC (rev 2187)
@@ -12943,9 +12943,12 @@
/* Handle special instruction that follows that preamble. */
if (0) vex_printf("special function handling...\n");
- bytes += S390_SPECIAL_OP_PREAMBLE_SIZE;
- status = s390_decode_special_and_irgen(bytes);
- insn_length = S390_SPECIAL_OP_SIZE;
+
+ insn_length = S390_SPECIAL_OP_PREAMBLE_SIZE + S390_SPECIAL_OP_SIZE;
+ guest_IA_next_instr = guest_IA_curr_instr + insn_length;
+
+ status =
+ s390_decode_special_and_irgen(bytes + S390_SPECIAL_OP_PREAMBLE_SIZE);
} else {
/* Handle normal instructions. */
switch (insn_length) {
|