|
From: <sv...@va...> - 2005-12-07 17:31:53
|
Author: sewardj
Date: 2005-12-07 17:31:42 +0000 (Wed, 07 Dec 2005)
New Revision: 1485
Log:
Change the redirect hacks so as to implement a 1-entry no-redirect
stack, which is the simplest arrangement that makes any sense.
Modified:
branches/FNWRAP/priv/guest-amd64/ghelpers.c
branches/FNWRAP/priv/guest-generic/bb_to_IR.c
branches/FNWRAP/priv/guest-generic/bb_to_IR.h
branches/FNWRAP/priv/guest-ppc32/ghelpers.c
branches/FNWRAP/priv/guest-x86/ghelpers.c
branches/FNWRAP/priv/main/vex_main.c
branches/FNWRAP/pub/libvex.h
branches/FNWRAP/pub/libvex_guest_amd64.h
branches/FNWRAP/pub/libvex_guest_ppc32.h
branches/FNWRAP/pub/libvex_guest_x86.h
Modified: branches/FNWRAP/priv/guest-amd64/ghelpers.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/priv/guest-amd64/ghelpers.c 2005-12-06 19:11:02 UTC (=
rev 1484)
+++ branches/FNWRAP/priv/guest-amd64/ghelpers.c 2005-12-07 17:31:42 UTC (=
rev 1485)
@@ -1930,6 +1930,9 @@
initialise them anyway. */
vex_state->guest_TISTART =3D 0;
vex_state->guest_TILEN =3D 0;
+
+ vex_state->guest_NRFLAG =3D 0;
+ vex_state->guest_NRADDR =3D 0;
}
=20
=20
Modified: branches/FNWRAP/priv/guest-generic/bb_to_IR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/priv/guest-generic/bb_to_IR.c 2005-12-06 19:11:02 UTC=
(rev 1484)
+++ branches/FNWRAP/priv/guest-generic/bb_to_IR.c 2005-12-07 17:31:42 UTC=
(rev 1485)
@@ -57,6 +57,26 @@
static UInt genericg_compute_adler32 ( HWord addr, HWord len );
=20
=20
+/* Small helpers */
+
+static Bool const_False ( Addr64 a ) { return False; }
+
+static IRExpr* mkAnd1 ( IRType ty, IRExpr* x, IRExpr* y )
+{
+ vassert(ty =3D=3D Ity_I32 || ty =3D=3D Ity_I64);
+ return=20
+ ty =3D=3D Ity_I32
+ ? IRExpr_Unop(Iop_32to1,
+ IRExpr_Binop(Iop_And32,
+ IRExpr_Unop(Iop_1Uto32,x),
+ IRExpr_Unop(Iop_1Uto32,y)))
+ : IRExpr_Unop(Iop_64to1,
+ IRExpr_Binop(Iop_And64,
+ IRExpr_Unop(Iop_1Uto64,x),
+ IRExpr_Unop(Iop_1Uto64,y)));
+}
+
+
/* Disassemble a complete basic block, starting at guest_IP_start,=20
returning a new IRBB. The disassembler may chase across basic
block boundaries if it wishes and if chase_into_ok allows it.
@@ -76,8 +96,6 @@
without knowing what it is, those offsets have to passed in.
*/
=20
-static Bool const_False ( Addr64 a ) { return False; }
-
IRBB* bb_to_IR ( /*OUT*/VexGuestExtents* vge,
/*IN*/ DisOneInstrFn dis_instr_fn,
/*IN*/ UChar* guest_code,
@@ -91,7 +109,8 @@
/*IN*/ Bool do_noredir_check,
/*IN*/ Int offB_TISTART,
/*IN*/ Int offB_TILEN,
- /*IN*/ Int offB_NOREDIR )
+ /*IN*/ Int offB_NRFLAG,
+ /*IN*/ Int offB_NRADDR )
{
Long delta;
Int i, n_instrs, first_stmt_idx;
@@ -158,27 +177,47 @@
whether the translation is still valid once we've decided we
should be here. So the noredir check comes first. */
if (do_noredir_check) {
- IRTemp noredir_tmp =3D newIRTemp(irbb->tyenv, guest_word_type);
+ /* Create this:
+ tmp =3D _NRFLAG;
+ _NRFLAG =3D 0;
+ if (tmp !=3D 0 && _NRADDR =3D=3D guest_IP_bbstart_noredir)
+ exit, request noredir xfer to guest_IP_bbstart_noredir
+ _NRFLAG =3D tmp -- restores _NRFLAG to whatever it was
+ */
+ IRTemp tmp =3D newIRTemp(irbb->tyenv, guest_word_type);
IRExpr* zero =3D guest_word_type=3D=3DIty_I32=20
? IRExpr_Const(IRConst_U32(0))=20
: IRExpr_Const(IRConst_U64(0));
+ IROp cmpEQ =3D guest_word_type=3D=3DIty_I32 ? Iop_CmpEQ32 : Iop_Cm=
pEQ64;
IROp cmpNE =3D guest_word_type=3D=3DIty_I32 ? Iop_CmpNE32 : Iop_Cm=
pNE64;
=20
- /* fetch old setting */
+ /* fetch old flag */
addStmtToIRBB( irbb,=20
- IRStmt_Tmp( noredir_tmp,=20
- IRExpr_Get( offB_NOREDIR, guest_word_type)));
- /* zero it */
+ IRStmt_Tmp( tmp,=20
+ IRExpr_Get(offB_NRFLAG, guest_word_type)));
+ /* zero flag */
addStmtToIRBB( irbb,
- IRStmt_Put( offB_NOREDIR, zero ));
- /* exit if it wasn't zero */
+ IRStmt_Put( offB_NRFLAG, zero ));
+ /* exit, maybe */
addStmtToIRBB( irbb,
- IRStmt_Exit( IRExpr_Binop( cmpNE, IRExpr_Tmp(noredir_tmp), zero=
),
- Ijk_NoRedir,
- guest_IP_bbstart_noredir_IRConst ));
+ IRStmt_Exit(=20
+ mkAnd1( guest_word_type,
+ IRExpr_Binop( cmpNE, IRExpr_Tmp(tmp), zero ),
+ IRExpr_Binop(=20
+ cmpEQ,=20
+ IRExpr_Get(offB_NRADDR, guest_word_type),
+ IRExpr_Const(guest_IP_bbstart_noredir_IRConst)
+ )
+ ),
+ Ijk_NoRedir,
+ guest_IP_bbstart_noredir_IRConst=20
+ ));
+ /* if we didn't exit, now need to restore the flag */
+ addStmtToIRBB( irbb,
+ IRStmt_Put( offB_NRFLAG, IRExpr_Tmp(tmp) ));
}
=20
- /* If asked to make a self-checking translation, leave a 5 spaces
+ /* If asked to make a self-checking translation, leave 5 spaces
in which to put the check statements. We'll fill them in later
when we know the length and adler32 of the area to check. */
if (do_self_check) {
Modified: branches/FNWRAP/priv/guest-generic/bb_to_IR.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/priv/guest-generic/bb_to_IR.h 2005-12-06 19:11:02 UTC=
(rev 1484)
+++ branches/FNWRAP/priv/guest-generic/bb_to_IR.h 2005-12-07 17:31:42 UTC=
(rev 1485)
@@ -163,7 +163,8 @@
/*IN*/ Bool do_noredir_check,
/*IN*/ Int offB_TISTART,
/*IN*/ Int offB_TILEN,
- /*IN*/ Int offB_NOREDIR );
+ /*IN*/ Int offB_NRFLAG,
+ /*IN*/ Int offB_NRADDR );
=20
=20
#endif /* ndef GENERIC_BB_TO_IR_H */
Modified: branches/FNWRAP/priv/guest-ppc32/ghelpers.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/priv/guest-ppc32/ghelpers.c 2005-12-06 19:11:02 UTC (=
rev 1484)
+++ branches/FNWRAP/priv/guest-ppc32/ghelpers.c 2005-12-07 17:31:42 UTC (=
rev 1485)
@@ -413,10 +413,13 @@
=20
vex_state->guest_EMWARN =3D EmWarn_NONE;
=20
+ vex_state->guest_RESVN =3D 0;
+
vex_state->guest_TISTART =3D 0;
vex_state->guest_TILEN =3D 0;
=20
- vex_state->guest_RESVN =3D 0;
+ vex_state->guest_NRFLAG =3D 0;
+ vex_state->guest_NRADDR =3D 0;
}
=20
=20
@@ -561,10 +564,13 @@
=20
vex_state->guest_EMWARN =3D EmWarn_NONE;
=20
+ vex_state->guest_RESVN =3D 0;
+
vex_state->guest_TISTART =3D 0;
vex_state->guest_TILEN =3D 0;
=20
- vex_state->guest_RESVN =3D 0;
+ // vex_state->guest_NRFLAG =3D 0;
+ //vex_state->guest_NRADDR =3D 0;
}
=20
=20
Modified: branches/FNWRAP/priv/guest-x86/ghelpers.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/priv/guest-x86/ghelpers.c 2005-12-06 19:11:02 UTC (re=
v 1484)
+++ branches/FNWRAP/priv/guest-x86/ghelpers.c 2005-12-07 17:31:42 UTC (re=
v 1485)
@@ -2226,7 +2226,8 @@
vex_state->guest_TISTART =3D 0;
vex_state->guest_TILEN =3D 0;
=20
- vex_state->guest_NOREDIR =3D 0;
+ vex_state->guest_NRFLAG =3D 0;
+ vex_state->guest_NRADDR =3D 0;
}
=20
=20
Modified: branches/FNWRAP/priv/main/vex_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/priv/main/vex_main.c 2005-12-06 19:11:02 UTC (rev 148=
4)
+++ branches/FNWRAP/priv/main/vex_main.c 2005-12-07 17:31:42 UTC (rev 148=
5)
@@ -237,7 +237,8 @@
HInstrArray* vcode;
HInstrArray* rcode;
Int i, j, k, out_used, guest_sizeB;
- Int offB_TISTART, offB_TILEN, offB_NOREDIR;
+ Int offB_TISTART, offB_TILEN;
+ Int offB_NRFLAG, offB_NRADDR;
UChar insn_bytes[32];
IRType guest_word_type;
IRType host_word_type;
@@ -261,7 +262,8 @@
host_word_type =3D Ity_INVALID;
offB_TISTART =3D 0;
offB_TILEN =3D 0;
- offB_NOREDIR =3D 0;
+ offB_NRFLAG =3D 0;
+ offB_NRADDR =3D 0;
=20
vex_traceflags =3D traceflags;
=20
@@ -345,14 +347,16 @@
guest_layout =3D &x86guest_layout;
offB_TISTART =3D offsetof(VexGuestX86State,guest_TISTART);
offB_TILEN =3D offsetof(VexGuestX86State,guest_TILEN);
- offB_NOREDIR =3D offsetof(VexGuestX86State,guest_NOREDIR);
+ offB_NRFLAG =3D offsetof(VexGuestX86State,guest_NRFLAG);
+ offB_NRADDR =3D offsetof(VexGuestX86State,guest_NRADDR);
vassert(archinfo_guest->subarch =3D=3D VexSubArchX86_sse0
|| archinfo_guest->subarch =3D=3D VexSubArchX86_sse1
|| archinfo_guest->subarch =3D=3D VexSubArchX86_sse2);
vassert(0 =3D=3D sizeof(VexGuestX86State) % 8);
- vassert(sizeof( ((VexGuestX86State*)0)->guest_TISTART ) =3D=3D =
4);
- vassert(sizeof( ((VexGuestX86State*)0)->guest_TILEN ) =3D=3D =
4);
- vassert(sizeof( ((VexGuestX86State*)0)->guest_NOREDIR ) =3D=3D =
4);
+ vassert(sizeof( ((VexGuestX86State*)0)->guest_TISTART) =3D=3D 4=
);
+ vassert(sizeof( ((VexGuestX86State*)0)->guest_TILEN ) =3D=3D 4=
);
+ vassert(sizeof( ((VexGuestX86State*)0)->guest_NRFLAG ) =3D=3D 4=
);
+ vassert(sizeof( ((VexGuestX86State*)0)->guest_NRADDR ) =3D=3D 4=
);
break;
=20
case VexArchAMD64:
@@ -364,12 +368,14 @@
guest_layout =3D &amd64guest_layout;
offB_TISTART =3D offsetof(VexGuestAMD64State,guest_TISTART)=
;
offB_TILEN =3D offsetof(VexGuestAMD64State,guest_TILEN);
- offB_NOREDIR =3D offsetof(VexGuestAMD64State,guest_NOREDIR)=
;
+ offB_NRFLAG =3D offsetof(VexGuestAMD64State,guest_NRFLAG);
+ offB_NRADDR =3D offsetof(VexGuestAMD64State,guest_NRADDR);
vassert(archinfo_guest->subarch =3D=3D VexSubArch_NONE);
vassert(0 =3D=3D sizeof(VexGuestAMD64State) % 8);
vassert(sizeof( ((VexGuestAMD64State*)0)->guest_TISTART ) =3D=3D=
8);
vassert(sizeof( ((VexGuestAMD64State*)0)->guest_TILEN ) =3D=3D=
8);
- vassert(sizeof( ((VexGuestAMD64State*)0)->guest_NOREDIR ) =3D=3D=
8);
+ vassert(sizeof( ((VexGuestAMD64State*)0)->guest_NRFLAG ) =3D=3D=
8);
+ vassert(sizeof( ((VexGuestAMD64State*)0)->guest_NRADDR ) =3D=3D=
8);
break;
=20
case VexArchARM:
@@ -381,7 +387,8 @@
guest_layout =3D &armGuest_layout;
offB_TISTART =3D 0; /* hack ... arm has bitrot */
offB_TILEN =3D 0; /* hack ... arm has bitrot */
- offB_NOREDIR =3D 0; /* hack ... arm has bitrot */
+ offB_NRFLAG =3D 0; /* hack ... arm has bitrot */
+ offB_NRADDR =3D 0; /* hack ... arm has bitrot */
vassert(archinfo_guest->subarch =3D=3D VexSubArchARM_v4);
break;
=20
@@ -394,14 +401,16 @@
guest_layout =3D &ppc32Guest_layout;
offB_TISTART =3D offsetof(VexGuestPPC32State,guest_TISTART)=
;
offB_TILEN =3D offsetof(VexGuestPPC32State,guest_TILEN);
- offB_NOREDIR =3D offsetof(VexGuestPPC32State,guest_NOREDIR)=
;
+ offB_NRFLAG =3D offsetof(VexGuestPPC32State,guest_NRFLAG);
+ offB_NRADDR =3D offsetof(VexGuestPPC32State,guest_NRADDR);
vassert(archinfo_guest->subarch =3D=3D VexSubArchPPC32_I
|| archinfo_guest->subarch =3D=3D VexSubArchPPC32_FI
|| archinfo_guest->subarch =3D=3D VexSubArchPPC32_VFI);
vassert(0 =3D=3D sizeof(VexGuestPPC32State) % 8);
vassert(sizeof( ((VexGuestPPC32State*)0)->guest_TISTART ) =3D=3D=
4);
vassert(sizeof( ((VexGuestPPC32State*)0)->guest_TILEN ) =3D=3D=
4);
- vassert(sizeof( ((VexGuestPPC32State*)0)->guest_NOREDIR ) =3D=3D=
4);
+ vassert(sizeof( ((VexGuestPPC32State*)0)->guest_NRFLAG ) =3D=3D=
4);
+ vassert(sizeof( ((VexGuestPPC32State*)0)->guest_NRADDR ) =3D=3D=
4);
break;
=20
default:
@@ -436,7 +445,8 @@
do_noredir_check,
offB_TISTART,
offB_TILEN,
- offB_NOREDIR );
+ offB_NRFLAG,
+ offB_NRADDR );
=20
vexAllocSanityCheck();
=20
Modified: branches/FNWRAP/pub/libvex.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/pub/libvex.h 2005-12-06 19:11:02 UTC (rev 1484)
+++ branches/FNWRAP/pub/libvex.h 2005-12-07 17:31:42 UTC (rev 1485)
@@ -402,11 +402,12 @@
the despatcher. Both pseudo-regs must have size equal to the guest
word size.
=20
- The architecture must contain a third pseudo-register,
- guest_NOREDIR, which is guest-word-sized. This is tested and
- zeroed at the start of translations of redirected blocks (under
- LibVEX's client's control), and the block immediately exited if it
- is set.
+ The architecture must contain a two more pseudo-registers,
+ guest_NRFLAG and guest_NRADDR, which are both guest-word-sized.
+ These are tested and zeroed at the start of translations of
+ redirected blocks (under LibVEX's client's control). If _NRFLAG is
+ nonzero and _NRADDR equals the unredirected guest address of the
+ block, then _NRFLAG is zeroed, and the block immediately exited.
*/
#endif /* ndef __LIBVEX_H */
=20
Modified: branches/FNWRAP/pub/libvex_guest_amd64.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/pub/libvex_guest_amd64.h 2005-12-06 19:11:02 UTC (rev=
1484)
+++ branches/FNWRAP/pub/libvex_guest_amd64.h 2005-12-07 17:31:42 UTC (rev=
1485)
@@ -146,9 +146,14 @@
ULong guest_TILEN;
=20
/* Affects behaviour on entry to redirected translations: if
- nonzero, will cause an immediate exit and attempt to execute
- the non-redirected version instead. Is almost always zero. */
- ULong guest_NOREDIR;
+ _NRFLAG ("NR", no-redirect) is nonzero and _NRADDR equals the
+ unredirected guest address for this translation, will cause
+ an immediate exit, requesting to execute the unredirected
+ version instead. Such an exit "uses up" the setting, in that
+ _NRFLAG must be reset to zero if the exit occurs, and
+ unchanged if it doesn't. */
+ ULong guest_NRFLAG;
+ ULong guest_NRADDR;
=20
/* Padding to make it have an 8-aligned size */
/* UInt padding; */
Modified: branches/FNWRAP/pub/libvex_guest_ppc32.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/pub/libvex_guest_ppc32.h 2005-12-06 19:11:02 UTC (rev=
1484)
+++ branches/FNWRAP/pub/libvex_guest_ppc32.h 2005-12-07 17:31:42 UTC (rev=
1485)
@@ -208,9 +208,14 @@
/* 952 */ UInt guest_TILEN;
=20
/* Affects behaviour on entry to redirected translations: if
- nonzero, will cause an immediate exit and attempt to execute
- the non-redirected version instead. Is almost always zero. */
- /* 956 */ UInt guest_NOREDIR;
+ _NRFLAG ("NR", no-redirect) is nonzero and _NRADDR equals the
+ unredirected guest address for this translation, will cause
+ an immediate exit, requesting to execute the unredirected
+ version instead. Such an exit "uses up" the setting, in that
+ _NRFLAG must be reset to zero if the exit occurs, and
+ unchanged if it doesn't. */
+ /* 956 */ UInt guest_NRFLAG;
+ /* 960 */ UInt guest_NRADDR;
=20
/* Padding to make it have an 8-aligned size */
UInt padding;
Modified: branches/FNWRAP/pub/libvex_guest_x86.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/FNWRAP/pub/libvex_guest_x86.h 2005-12-06 19:11:02 UTC (rev 1=
484)
+++ branches/FNWRAP/pub/libvex_guest_x86.h 2005-12-07 17:31:42 UTC (rev 1=
485)
@@ -219,12 +219,17 @@
UInt guest_TILEN;
=20
/* Affects behaviour on entry to redirected translations: if
- nonzero, will cause an immediate exit and attempt to execute
- the non-redirected version instead. Is almost always zero. */
- UInt guest_NOREDIR;
+ _NRFLAG ("NR", no-redirect) is nonzero and _NRADDR equals the
+ unredirected guest address for this translation, will cause
+ an immediate exit, requesting to execute the unredirected
+ version instead. Such an exit "uses up" the setting, in that
+ _NRFLAG must be reset to zero if the exit occurs, and
+ unchanged if it doesn't. */
+ UInt guest_NRFLAG;
+ UInt guest_NRADDR;
=20
/* Padding to make it have an 8-aligned size */
- UInt padding;
+ /*UInt padding;*/
}
VexGuestX86State;
=20
|