|
[Valgrind-developers] vex: r1605 - in trunk/priv: guest-amd64 guest-generic guest-ppc guest-x86 main
From: <sv...@va...> - 2006-04-30 23:37:38
|
Author: sewardj
Date: 2006-05-01 00:37:32 +0100 (Mon, 01 May 2006)
New Revision: 1605
Log:
Don't use the bits VexArchInfo.hwcaps to distinguish ppc32 and ppc64,
since that doesn't work properly. Instead pass the guest arch around
too. Small change with lots of associated plumbing.
Modified:
trunk/priv/guest-amd64/gdefs.h
trunk/priv/guest-amd64/toIR.c
trunk/priv/guest-generic/bb_to_IR.c
trunk/priv/guest-generic/bb_to_IR.h
trunk/priv/guest-ppc/gdefs.h
trunk/priv/guest-ppc/toIR.c
trunk/priv/guest-x86/gdefs.h
trunk/priv/guest-x86/toIR.c
trunk/priv/main/vex_main.c
Modified: trunk/priv/guest-amd64/gdefs.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
--- trunk/priv/guest-amd64/gdefs.h 2006-04-13 22:06:35 UTC (rev 1604)
+++ trunk/priv/guest-amd64/gdefs.h 2006-04-30 23:37:32 UTC (rev 1605)
@@ -64,6 +64,7 @@
UChar* guest_code,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian );
=20
Modified: trunk/priv/guest-amd64/toIR.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
--- trunk/priv/guest-amd64/toIR.c 2006-04-13 22:06:35 UTC (rev 1604)
+++ trunk/priv/guest-amd64/toIR.c 2006-04-30 23:37:32 UTC (rev 1605)
@@ -13833,12 +13833,14 @@
UChar* guest_code_IN,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian_IN )
{
DisResult dres;
=20
/* Set globals (see top of this file) */
+ vassert(guest_arch =3D=3D VexArchAMD64);
guest_code =3D guest_code_IN;
irbb =3D irbb_IN;
host_is_bigendian =3D host_bigendian_IN;
Modified: trunk/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
--- trunk/priv/guest-generic/bb_to_IR.c 2006-04-13 22:06:35 UTC (rev 1604=
)
+++ trunk/priv/guest-generic/bb_to_IR.c 2006-04-30 23:37:32 UTC (rev 1605=
)
@@ -99,6 +99,7 @@
/*IN*/ Addr64 guest_IP_bbstart,
/*IN*/ Bool (*chase_into_ok)(void*,Addr64),
/*IN*/ Bool host_bigendian,
+ /*IN*/ VexArch arch_guest,
/*IN*/ VexArchInfo* archinfo_guest,
/*IN*/ IRType guest_word_type,
/*IN*/ Bool do_self_check,
@@ -231,6 +232,7 @@
guest_code,
delta,
guest_IP_curr_instr,
+ arch_guest,
archinfo_guest,
host_bigendian );
=20
Modified: trunk/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
--- trunk/priv/guest-generic/bb_to_IR.h 2006-04-13 22:06:35 UTC (rev 1604=
)
+++ trunk/priv/guest-generic/bb_to_IR.h 2006-04-30 23:37:32 UTC (rev 1605=
)
@@ -140,6 +140,7 @@
/*IN*/ Addr64 guest_IP,
=20
/* Info about the guest architecture */
+ /*IN*/ VexArch guest_arch,
/*IN*/ VexArchInfo* archinfo,
=20
/* Is the host bigendian? */
@@ -161,6 +162,7 @@
/*IN*/ Addr64 guest_IP_bbstart,
/*IN*/ Bool (*chase_into_ok)(void*,Addr64),
/*IN*/ Bool host_bigendian,
+ /*IN*/ VexArch arch_guest,
/*IN*/ VexArchInfo* archinfo_guest,
/*IN*/ IRType guest_word_type,
/*IN*/ Bool do_self_check,
Modified: trunk/priv/guest-ppc/gdefs.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
--- trunk/priv/guest-ppc/gdefs.h 2006-04-13 22:06:35 UTC (rev 1604)
+++ trunk/priv/guest-ppc/gdefs.h 2006-04-30 23:37:32 UTC (rev 1605)
@@ -65,6 +65,7 @@
UChar* guest_code,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian );
=20
Modified: trunk/priv/guest-ppc/toIR.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
--- trunk/priv/guest-ppc/toIR.c 2006-04-13 22:06:35 UTC (rev 1604)
+++ trunk/priv/guest-ppc/toIR.c 2006-04-30 23:37:32 UTC (rev 1605)
@@ -9447,39 +9447,34 @@
UChar* guest_code_IN,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian_IN )
{
IRType ty;
DisResult dres;
- Bool is32, is64;
UInt mask32, mask64;
UInt hwcaps_guest =3D archinfo->hwcaps;
=20
+ vassert(guest_arch =3D=3D VexArchPPC32 || guest_arch =3D=3D VexArchPP=
C64);
+
/* global -- ick */
- mode64 =3D False;
+ mode64 =3D guest_arch =3D=3D VexArchPPC64;
+ ty =3D mode64 ? Ity_I64 : Ity_I32;
=20
- /* Figure out whether we're being ppc32 or ppc64 today. */
+ /* do some sanity checks */
mask32 =3D VEX_HWCAPS_PPC32_F | VEX_HWCAPS_PPC32_V
| VEX_HWCAPS_PPC32_FX | VEX_HWCAPS_PPC32_GX;
=20
- is32 =3D (hwcaps_guest & mask32) > 0;
-
mask64 =3D VEX_HWCAPS_PPC64_V
| VEX_HWCAPS_PPC64_FX | VEX_HWCAPS_PPC64_GX;
=20
- is64 =3D (hwcaps_guest & mask64) > 0;
+ if (mode64) {
+ vassert((hwcaps_guest & mask32) =3D=3D 0);
+ } else {
+ vassert((hwcaps_guest & mask64) =3D=3D 0);
+ }
=20
- if (is32 && !is64)
- mode64 =3D False;
- else if (is64 && !is32)
- mode64 =3D True;
- else
- vpanic("distInstr_PPC: illegal subarch");
-
-
- ty =3D mode64 ? Ity_I64 : Ity_I32;
-
/* Set globals (see top of this file) */
guest_code =3D guest_code_IN;
irbb =3D irbb_IN;
Modified: trunk/priv/guest-x86/gdefs.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
--- trunk/priv/guest-x86/gdefs.h 2006-04-13 22:06:35 UTC (rev 1604)
+++ trunk/priv/guest-x86/gdefs.h 2006-04-30 23:37:32 UTC (rev 1605)
@@ -64,6 +64,7 @@
UChar* guest_code,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian );
=20
Modified: trunk/priv/guest-x86/toIR.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
--- trunk/priv/guest-x86/toIR.c 2006-04-13 22:06:35 UTC (rev 1604)
+++ trunk/priv/guest-x86/toIR.c 2006-04-30 23:37:32 UTC (rev 1605)
@@ -12689,12 +12689,14 @@
UChar* guest_code_IN,
Long delta,
Addr64 guest_IP,
+ VexArch guest_arch,
VexArchInfo* archinfo,
Bool host_bigendian_IN )
{
DisResult dres;
=20
/* Set globals (see top of this file) */
+ vassert(guest_arch =3D=3D VexArchX86);
guest_code =3D guest_code_IN;
irbb =3D irbb_IN;
host_is_bigendian =3D host_bigendian_IN;
Modified: trunk/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
--- trunk/priv/main/vex_main.c 2006-04-13 22:06:35 UTC (rev 1604)
+++ trunk/priv/main/vex_main.c 2006-04-30 23:37:32 UTC (rev 1605)
@@ -430,6 +430,7 @@
vta->guest_bytes_addr,
vta->chase_into_ok,
host_is_bigendian,
+ vta->arch_guest,
&vta->archinfo_guest,
guest_word_type,
vta->do_self_check,
|