|
From: <sv...@va...> - 2014-03-03 14:13:49
|
Author: dejanj
Date: Mon Mar 3 14:13:37 2014
New Revision: 2832
Log:
mips32: Fix the problem with reading the guest_FCSR register from the wrong guest state.
When Valgrind isn't executed in mode64, register fcsr need to read from the VexGuestMIPS32State.
Modified:
trunk/priv/guest_mips_toIR.c
Modified: trunk/priv/guest_mips_toIR.c
==============================================================================
--- trunk/priv/guest_mips_toIR.c (original)
+++ trunk/priv/guest_mips_toIR.c Mon Mar 3 14:13:37 2014
@@ -1140,7 +1140,10 @@
vex_bzero(&d->fxState, sizeof(d->fxState));
d->fxState[0].fx = Ifx_Read; /* read */
- d->fxState[0].offset = offsetof(VexGuestMIPS64State, guest_FCSR);
+ if (mode64)
+ d->fxState[0].offset = offsetof(VexGuestMIPS64State, guest_FCSR);
+ else
+ d->fxState[0].offset = offsetof(VexGuestMIPS32State, guest_FCSR);
d->fxState[0].size = sizeof(UInt);
d->fxState[1].fx = Ifx_Read; /* read */
d->fxState[1].offset = floatGuestRegOffset(fs);
@@ -1160,7 +1163,10 @@
vex_bzero(&d->fxState, sizeof(d->fxState));
d->fxState[0].fx = Ifx_Read; /* read */
- d->fxState[0].offset = offsetof(VexGuestMIPS64State, guest_FCSR);
+ if (mode64)
+ d->fxState[0].offset = offsetof(VexGuestMIPS64State, guest_FCSR);
+ else
+ d->fxState[0].offset = offsetof(VexGuestMIPS32State, guest_FCSR);
d->fxState[0].size = sizeof(UInt);
d->fxState[1].fx = Ifx_Read; /* read */
d->fxState[1].offset = floatGuestRegOffset(fs);
|