3.16.1-8 - Update valgrind-3.16.1-s390x-z14-vector.patch

This commit is contained in:
Mark Wielaard 2020-12-03 18:14:35 +01:00
parent de58b8982b
commit 3e351e4f33
2 changed files with 83 additions and 33 deletions

View File

@ -1,7 +1,16 @@
diff --git a/VEX/priv/guest_s390_defs.h b/VEX/priv/guest_s390_defs.h
index 9f93cff19..ea878d8af 100644
index 9f93cff19..905429015 100644
--- a/VEX/priv/guest_s390_defs.h
+++ b/VEX/priv/guest_s390_defs.h
@@ -8,7 +8,7 @@
This file is part of Valgrind, a dynamic binary instrumentation
framework.
- Copyright IBM Corp. 2010-2017
+ Copyright IBM Corp. 2010-2020
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -263,26 +263,27 @@ extern ULong last_execute_target;
before S390_VEC_OP_LAST. */
typedef enum {
@ -51,9 +60,18 @@ index 9f93cff19..ea878d8af 100644
/* Arguments of s390x_dirtyhelper_vec_op(...) which are packed into one
diff --git a/VEX/priv/guest_s390_helpers.c b/VEX/priv/guest_s390_helpers.c
index a470d9f8d..b9c0514ba 100644
index a470d9f8d..b71b621ae 100644
--- a/VEX/priv/guest_s390_helpers.c
+++ b/VEX/priv/guest_s390_helpers.c
@@ -8,7 +8,7 @@
This file is part of Valgrind, a dynamic binary instrumentation
framework.
- Copyright IBM Corp. 2010-2017
+ Copyright IBM Corp. 2010-2020
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -314,20 +314,11 @@ ULong s390x_dirtyhelper_STCKE(ULong *addr) {return 3;}
/*--- Dirty helper for Store Facility instruction ---*/
/*------------------------------------------------------------*/
@ -79,14 +97,15 @@ index a470d9f8d..b9c0514ba 100644
}
ULong
@@ -336,6 +327,76 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr)
@@ -336,6 +327,77 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr)
ULong hoststfle[S390_NUM_FACILITY_DW], cc, num_dw, i;
register ULong reg0 asm("0") = guest_state->guest_r0 & 0xF; /* r0[56:63] */
+ /* Restrict to facilities that we know about and assume to be compatible with
+ Valgrind. Of course, in this way we may reject features that Valgrind is
+ not really involved in (and thus would be compatible), but quering for
+ such features doesn't seem like a typical use case. */
+ /* Restrict to facilities that we know about and that we assume to be
+ compatible with Valgrind. Of course, in this way we may reject features
+ that Valgrind is not really involved in (and thus would be compatible
+ with), but quering for such features doesn't seem like a typical use
+ case. */
+ ULong accepted_facility[S390_NUM_FACILITY_DW] = {
+ /* === 0 .. 63 === */
+ (s390_stfle_range(0, 16)
@ -156,7 +175,7 @@ index a470d9f8d..b9c0514ba 100644
/* We cannot store more than S390_NUM_FACILITY_DW
(and it makes not much sense to do so anyhow) */
if (reg0 > S390_NUM_FACILITY_DW - 1)
@@ -351,35 +412,9 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr)
@@ -351,35 +413,9 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr)
/* Update guest register 0 with what STFLE set r0 to */
guest_state->guest_r0 = reg0;
@ -194,7 +213,7 @@ index a470d9f8d..b9c0514ba 100644
return cc;
}
@@ -2500,25 +2535,26 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state,
@@ -2500,25 +2536,26 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state,
vassert(d->op > S390_VEC_OP_INVALID && d->op < S390_VEC_OP_LAST);
static const UChar opcodes[][2] = {
{0x00, 0x00}, /* invalid */
@ -240,7 +259,7 @@ index a470d9f8d..b9c0514ba 100644
};
union {
@@ -2612,6 +2648,7 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state,
@@ -2612,6 +2649,7 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state,
case S390_VEC_OP_VGFMA:
case S390_VEC_OP_VMAH:
case S390_VEC_OP_VMALH:
@ -248,7 +267,7 @@ index a470d9f8d..b9c0514ba 100644
the_insn.VRRd.v1 = 1;
the_insn.VRRd.v2 = 2;
the_insn.VRRd.v3 = 3;
@@ -2621,9 +2658,9 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state,
@@ -2621,9 +2659,9 @@ s390x_dirtyhelper_vec_op(VexGuestS390XState *guest_state,
the_insn.VRRd.m6 = d->m5;
break;
@ -262,7 +281,7 @@ index a470d9f8d..b9c0514ba 100644
the_insn.VRRc.v2 = 2;
the_insn.VRRc.v3 = 3;
diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c
index c27a8d3fe..d4f428c24 100644
index c27a8d3fe..5f2c5ce98 100644
--- a/VEX/priv/guest_s390_toIR.c
+++ b/VEX/priv/guest_s390_toIR.c
@@ -8,7 +8,7 @@
@ -691,7 +710,7 @@ index c27a8d3fe..d4f428c24 100644
return "vpopct";
}
@@ -18335,12 +18516,52 @@ s390_irgen_VMALH(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5)
@@ -18335,12 +18516,53 @@ s390_irgen_VMALH(UChar v1, UChar v2, UChar v3, UChar v4, UChar m5)
return "vmalh";
}
@ -704,12 +723,13 @@ index c27a8d3fe..d4f428c24 100644
+ IRTemp cc = newTemp(Ity_I64);
+
+ s390x_vec_op_details_t details = { .serialized = 0ULL };
+ details.op = S390_VEC_OP_VMALH;
+ details.op = S390_VEC_OP_VMSL;
+ details.v1 = v1;
+ details.v2 = v2;
+ details.v3 = v3;
+ details.v4 = v4;
+ details.m4 = m5;
+ details.m5 = m6;
+
+ d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op",
+ &s390x_dirtyhelper_vec_op,
@ -746,7 +766,7 @@ index c27a8d3fe..d4f428c24 100644
/* For Iop_F32toF64 we do this:
f32[0] -> f64[0]
@@ -18353,14 +18574,21 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType,
@@ -18353,14 +18575,21 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType,
The magic below with scaling factors is used to achieve the logic
described above.
*/
@ -774,7 +794,7 @@ index c27a8d3fe..d4f428c24 100644
result = binop(op,
mkexpr(encode_bfp_rounding_mode(m5)),
argument);
@@ -18369,10 +18597,6 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType,
@@ -18369,10 +18598,6 @@ s390_vector_fp_convert(IROp op, IRType fromType, IRType toType,
}
put_vr(v1, toType, i * destinationIndexScaleFactor, result);
}
@ -785,7 +805,7 @@ index c27a8d3fe..d4f428c24 100644
}
static const HChar *
@@ -18380,12 +18604,8 @@ s390_irgen_VCDG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
@@ -18380,12 +18605,8 @@ s390_irgen_VCDG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
{
s390_insn_assert("vcdg", m3 == 3);
@ -800,7 +820,7 @@ index c27a8d3fe..d4f428c24 100644
return "vcdg";
}
@@ -18395,12 +18615,8 @@ s390_irgen_VCDLG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
@@ -18395,12 +18616,8 @@ s390_irgen_VCDLG(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
{
s390_insn_assert("vcdlg", m3 == 3);
@ -815,7 +835,7 @@ index c27a8d3fe..d4f428c24 100644
return "vcdlg";
}
@@ -18410,12 +18626,8 @@ s390_irgen_VCGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
@@ -18410,12 +18627,8 @@ s390_irgen_VCGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
{
s390_insn_assert("vcgd", m3 == 3);
@ -830,7 +850,7 @@ index c27a8d3fe..d4f428c24 100644
return "vcgd";
}
@@ -18425,12 +18637,8 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
@@ -18425,12 +18638,8 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
{
s390_insn_assert("vclgd", m3 == 3);
@ -845,7 +865,7 @@ index c27a8d3fe..d4f428c24 100644
return "vclgd";
}
@@ -18438,246 +18646,262 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
@@ -18438,246 +18647,262 @@ s390_irgen_VCLGD(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
static const HChar *
s390_irgen_VFI(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
{
@ -1259,7 +1279,7 @@ index c27a8d3fe..d4f428c24 100644
IRTemp cc_s390 = newTemp(Ity_I32);
assign(cc_s390, convert_vex_bfpcc_to_s390(cc_vex));
@@ -18695,213 +18919,253 @@ s390_irgen_WFK(UChar v1, UChar v2, UChar m3, UChar m4)
@@ -18695,213 +18920,253 @@ s390_irgen_WFK(UChar v1, UChar v2, UChar m3, UChar m4)
}
static const HChar *
@ -1662,7 +1682,7 @@ index c27a8d3fe..d4f428c24 100644
}
/* New insns are added here.
@@ -20489,11 +20753,23 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
@@ -20489,11 +20754,23 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
RXY_dl2(ovl),
RXY_dh2(ovl)); goto ok;
case 0xe60000000034ULL: /* VPKZ */ goto unimplemented;
@ -1690,7 +1710,7 @@ index c27a8d3fe..d4f428c24 100644
case 0xe60000000049ULL: /* VLIP */ goto unimplemented;
case 0xe60000000050ULL: /* VCVB */ goto unimplemented;
case 0xe60000000052ULL: /* VCVBG */ goto unimplemented;
@@ -20691,12 +20967,18 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
@@ -20691,12 +20968,18 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
case 0xe7000000006bULL: s390_format_VRR_VVV(s390_irgen_VNO, VRR_v1(ovl),
VRR_v2(ovl), VRR_r3(ovl),
VRR_rxb(ovl)); goto ok;
@ -1712,7 +1732,7 @@ index c27a8d3fe..d4f428c24 100644
case 0xe70000000070ULL: s390_format_VRR_VVVM(s390_irgen_VESLV, VRR_v1(ovl),
VRR_v2(ovl), VRR_r3(ovl),
VRR_m4(ovl), VRR_rxb(ovl)); goto ok;
@@ -20749,7 +21031,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
@@ -20749,7 +21032,9 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
case 0xe70000000084ULL: s390_format_VRR_VVVM(s390_irgen_VPDI, VRR_v1(ovl),
VRR_v2(ovl), VRR_r3(ovl),
VRR_m4(ovl), VRR_rxb(ovl)); goto ok;
@ -1723,7 +1743,7 @@ index c27a8d3fe..d4f428c24 100644
case 0xe7000000008aULL: s390_format_VRR_VVVVMM(s390_irgen_VSTRC, VRRd_v1(ovl),
VRRd_v2(ovl), VRRd_v3(ovl),
VRRd_v4(ovl), VRRd_m5(ovl),
@@ -20780,8 +21064,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
@@ -20780,8 +21065,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
case 0xe70000000097ULL: s390_format_VRR_VVVMM(s390_irgen_VPKS, VRR_v1(ovl),
VRR_v2(ovl), VRR_r3(ovl),
VRR_m4(ovl), VRR_m5(ovl), VRR_rxb(ovl)); goto ok;
@ -1742,7 +1762,7 @@ index c27a8d3fe..d4f428c24 100644
case 0xe700000000a1ULL: s390_format_VRR_VVVM(s390_irgen_VMLH, VRR_v1(ovl),
VRR_v2(ovl), VRR_r3(ovl),
VRR_m4(ovl), VRR_rxb(ovl)); goto ok;
@@ -20834,7 +21126,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
@@ -20834,7 +21127,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
case 0xe700000000b4ULL: s390_format_VRR_VVVM(s390_irgen_VGFM, VRR_v1(ovl),
VRR_v2(ovl), VRR_r3(ovl),
VRR_m4(ovl), VRR_rxb(ovl)); goto ok;
@ -1755,7 +1775,7 @@ index c27a8d3fe..d4f428c24 100644
case 0xe700000000b9ULL: s390_format_VRRd_VVVVM(s390_irgen_VACCC, VRRd_v1(ovl),
VRRd_v2(ovl), VRRd_v3(ovl),
VRRd_v4(ovl), VRRd_m5(ovl),
@@ -20871,11 +21167,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
@@ -20871,11 +21168,11 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
VRRa_v2(ovl), VRRa_m3(ovl),
VRRa_m4(ovl), VRRa_m5(ovl),
VRRa_rxb(ovl)); goto ok;
@ -1769,7 +1789,7 @@ index c27a8d3fe..d4f428c24 100644
VRRa_v2(ovl), VRRa_m3(ovl),
VRRa_m4(ovl), VRRa_m5(ovl),
VRRa_rxb(ovl)); goto ok;
@@ -20956,8 +21252,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
@@ -20956,8 +21253,16 @@ s390_decode_6byte_and_irgen(const UChar *bytes)
VRRa_m3(ovl), VRRa_m4(ovl),
VRRa_m5(ovl),
VRRa_rxb(ovl)); goto ok;
@ -1789,9 +1809,18 @@ index c27a8d3fe..d4f428c24 100644
VRR_v2(ovl), VRR_r3(ovl),
VRR_m4(ovl), VRR_rxb(ovl)); goto ok;
diff --git a/VEX/priv/host_s390_defs.c b/VEX/priv/host_s390_defs.c
index 3b6121fec..a59db6578 100644
index 3b6121fec..8762975b2 100644
--- a/VEX/priv/host_s390_defs.c
+++ b/VEX/priv/host_s390_defs.c
@@ -8,7 +8,7 @@
This file is part of Valgrind, a dynamic binary instrumentation
framework.
- Copyright IBM Corp. 2010-2017
+ Copyright IBM Corp. 2010-2020
Copyright (C) 2012-2017 Florian Krohm (britzel@acm.org)
This program is free software; you can redistribute it and/or
@@ -684,6 +684,8 @@ s390_insn* genMove_S390(HReg from, HReg to, Bool mode64)
switch (hregClass(from)) {
case HRcInt64:
@ -1845,9 +1874,18 @@ index 3b6121fec..a59db6578 100644
UChar v2 = hregNumber(insn->variant.unop.src.variant.reg);
return s390_emit_VFSQ(buf, v1, v2, s390_getM_from_size(insn->size), 0);
diff --git a/VEX/priv/host_s390_defs.h b/VEX/priv/host_s390_defs.h
index 3f6473e10..46d8e1f12 100644
index 3f6473e10..9b69f4d38 100644
--- a/VEX/priv/host_s390_defs.h
+++ b/VEX/priv/host_s390_defs.h
@@ -8,7 +8,7 @@
This file is part of Valgrind, a dynamic binary instrumentation
framework.
- Copyright IBM Corp. 2010-2017
+ Copyright IBM Corp. 2010-2020
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -205,6 +205,7 @@ typedef enum {
S390_VEC_COUNT_ONES,
S390_VEC_FLOAT_NEG,
@ -1866,9 +1904,18 @@ index 3f6473e10..46d8e1f12 100644
/*---------------------------------------------------------------*/
diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c
index 134f3eb6f..58f70ff4e 100644
index 134f3eb6f..2f9854038 100644
--- a/VEX/priv/host_s390_isel.c
+++ b/VEX/priv/host_s390_isel.c
@@ -8,7 +8,7 @@
This file is part of Valgrind, a dynamic binary instrumentation
framework.
- Copyright IBM Corp. 2010-2017
+ Copyright IBM Corp. 2010-2020
Copyright (C) 2012-2017 Florian Krohm (britzel@acm.org)
This program is free software; you can redistribute it and/or
@@ -2362,9 +2362,10 @@ s390_isel_float128_expr_wrk(HReg *dst_hi, HReg *dst_lo, ISelEnv *env,
case Iop_NegF128:
if (left->tag == Iex_Unop &&

View File

@ -3,7 +3,7 @@
Summary: Tool for finding memory management bugs in programs
Name: %{?scl_prefix}valgrind
Version: 3.16.1
Release: 7%{?dist}
Release: 8%{?dist}
Epoch: 1
License: GPLv2+
URL: http://www.valgrind.org/
@ -491,6 +491,9 @@ fi
%endif
%changelog
* Thu Dec 3 2020 Mark Wielaard <mjw@fedoraproject.org> - 3.16.1-8
- Update valgrind-3.16.1-s390x-z14-vector.patch
* Thu Dec 3 2020 Mark Wielaard <mjw@fedoraproject.org> - 3.16.1-7
- Add valgrind-3.16.1-pthread-intercept.patch
- Add valgrind-3.16.1-s390_emit_load_mem.patch