|
From: <sv...@va...> - 2013-05-31 15:42:04
|
florian 2013-05-31 16:41:55 +0100 (Fri, 31 May 2013)
New Revision: 2724
Log:
s390x: Make the CC_DEP1 field appear completely initialised when
writing a 32-bit floating point value into it.
Patch by Maran Pakkirisamy (ma...@li...).
Part of fixing BZ 307113.
Modified files:
trunk/priv/guest_s390_toIR.c
Modified: trunk/priv/guest_s390_toIR.c (+16 -0)
===================================================================
--- trunk/priv/guest_s390_toIR.c 2013-05-31 16:09:56 +01:00 (rev 2723)
+++ trunk/priv/guest_s390_toIR.c 2013-05-31 16:41:55 +01:00 (rev 2724)
@@ -632,6 +632,14 @@
{
IRExpr *op, *dep1, *dep2, *ndep;
+ /* Make the CC_DEP1 slot appear completely defined.
+ Otherwise, assigning a 32-bit value will cause memcheck
+ to trigger an undefinedness error.
+ */
+ if (sizeofIRType(typeOfIRTemp(irsb->tyenv, d1)) == 4) {
+ UInt dep1_off = S390X_GUEST_OFFSET(guest_CC_DEP1);
+ stmt(IRStmt_Put(dep1_off, mkU64(0)));
+ }
op = mkU64(opc);
dep1 = mkexpr(d1);
dep2 = mkU64(0);
@@ -648,6 +656,14 @@
{
IRExpr *op, *dep1, *dep2, *ndep;
+ /* Make the CC_DEP1 slot appear completely defined.
+ Otherwise, assigning a 32-bit value will cause memcheck
+ to trigger an undefinedness error.
+ */
+ if (sizeofIRType(typeOfIRTemp(irsb->tyenv, d1)) == 4) {
+ UInt dep1_off = S390X_GUEST_OFFSET(guest_CC_DEP1);
+ stmt(IRStmt_Put(dep1_off, mkU64(0)));
+ }
op = mkU64(opc);
dep1 = mkexpr(d1);
dep2 = s390_cc_widen(d2, False);
|