3.8.1-25 Add valgrind-3.8.1-s390-STFLE.patch

s390 message-security assist (MSA) instruction extension not implemented.
This commit is contained in:
Mark Wielaard 2013-08-15 12:04:16 +02:00
parent a53deff2af
commit c0730c1d63
2 changed files with 150 additions and 1 deletions

View File

@ -0,0 +1,141 @@
commit d2c954603a211e11c35db7d8b3fdd60675483738
Author: florian <florian@8f6e269a-dfd6-0310-a8e1-e2731360e62c>
Date: Tue Dec 4 04:45:32 2012 +0000
In the past, the implementation of STFLE returned the facilities of the host
machine. This was not consistent in the following sense: Suppose the host
has a facility F installed and this facility implies the availability of an
insn X. Suppose further, that insn X is not supported in valgrind.
An application progrm that tests the availability of insn X by checking
for its associated facility F will fail under valgrind when using X because
valgrind will SIGILL. Not so good.
This patch changes the STFLE behaviour to adjust the facilities of the
virtual machine according to what the set of insns that is actually
supported. It's an approximation, because for some facilities we only
support a subset of the insns enabled by that facility.
Fixes BZ 310931.
git-svn-id: svn://svn.valgrind.org/vex/trunk@2579 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/VEX/priv/guest_s390_helpers.c b/priv/guest_s390_helpers.c
index 8169916..b0c0225 100644
--- a/VEX/priv/guest_s390_helpers.c
+++ b/VEX/priv/guest_s390_helpers.c
@@ -292,6 +292,22 @@ ULong s390x_dirtyhelper_STCKE(ULong *addr) {return 3;}
/*--- Dirty helper for Store Facility instruction ---*/
/*------------------------------------------------------------*/
#if defined(VGA_s390x)
+static void
+s390_set_facility_bit(ULong *addr, UInt bitno, UInt value)
+{
+ addr += bitno / 64;
+ bitno = bitno % 64;
+
+ ULong mask = 1;
+ mask <<= (63 - bitno);
+
+ if (value == 1) {
+ *addr |= mask; // set
+ } else {
+ *addr &= ~mask; // clear
+ }
+}
+
ULong
s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr)
{
@@ -313,9 +329,56 @@ s390x_dirtyhelper_STFLE(VexGuestS390XState *guest_state, ULong *addr)
/* Update guest register 0 with what STFLE set r0 to */
guest_state->guest_r0 = reg0;
+ /* Set default: VM facilities = host facilities */
for (i = 0; i < num_dw; ++i)
addr[i] = hoststfle[i];
+ /* Enumerators for interesting facilities. The value of the enumerator
+ is the number of the facility bit as per POP. */
+ enum {
+ S390_FAC_MSA = 17, // message-security-assist
+ S390_FAC_LDISP = 18, // long displacement
+ S390_FAC_HFPMAS = 20, // HFP multiply-and-add-subtract
+ S390_FAC_EIMM = 21, // extended immediate
+ S390_FAC_HFPUNX = 23, // HFP unnormalized extension
+ S390_FAC_ETF2 = 24, // ETF2-enhancement
+ S390_FAC_PENH = 26, // parsing-enhancement
+ S390_FAC_ETF3 = 30, // ETF3-enhancement
+ S390_FAC_XCPUT = 31, // extract-CPU-time
+ S390_FAC_GIE = 34, // general insn extension
+ S390_FAC_EXEXT = 35, // execute extension
+ S390_FAC_DFP = 42, // decimal floating point
+ S390_FAC_PFPO = 44, // perform floating point operation insn
+ S390_FAC_HIGHW = 45, // high-word extension
+ S390_FAC_DFPZC = 48, // DFP zoned-conversion
+ S390_FAC_MISC = 49, // miscellaneous insn
+ S390_FAC_CTREXE = 50, // constrained transactional execution
+ S390_FAC_TREXE = 73, // transactional execution
+ S390_FAC_MSA4 = 77 // message-security-assist 4
+ };
+
+ /* Now adjust the VM facilities according to what the VM supports */
+ s390_set_facility_bit(addr, S390_FAC_LDISP, 1);
+ s390_set_facility_bit(addr, S390_FAC_EIMM, 1);
+ s390_set_facility_bit(addr, S390_FAC_ETF2, 1);
+ s390_set_facility_bit(addr, S390_FAC_ETF3, 1);
+ s390_set_facility_bit(addr, S390_FAC_GIE, 1);
+ s390_set_facility_bit(addr, S390_FAC_EXEXT, 1);
+ s390_set_facility_bit(addr, S390_FAC_HIGHW, 1);
+
+ s390_set_facility_bit(addr, S390_FAC_HFPMAS, 0);
+ s390_set_facility_bit(addr, S390_FAC_HFPUNX, 0);
+ s390_set_facility_bit(addr, S390_FAC_XCPUT, 0);
+ s390_set_facility_bit(addr, S390_FAC_MSA, 0);
+ s390_set_facility_bit(addr, S390_FAC_PENH, 0);
+ s390_set_facility_bit(addr, S390_FAC_DFP, 0);
+ s390_set_facility_bit(addr, S390_FAC_PFPO, 0);
+ s390_set_facility_bit(addr, S390_FAC_DFPZC, 0);
+ s390_set_facility_bit(addr, S390_FAC_MISC, 0);
+ s390_set_facility_bit(addr, S390_FAC_CTREXE, 0);
+ s390_set_facility_bit(addr, S390_FAC_TREXE, 0);
+ s390_set_facility_bit(addr, S390_FAC_MSA4, 0);
+
return cc;
}
commit a53843d425a9cc64159bd46833e93febb0a8d797
Author: florian <florian@a5019735-40e9-0310-863c-91ae7b9d1cf9>
Date: Tue Dec 4 04:46:52 2012 +0000
Beef up testcase. Announce fix.
Part of fixing BZ 310931.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13150 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/none/tests/s390x/stfle.c b/none/tests/s390x/stfle.c
index 7bfe2d6..6c8007b 100644
--- a/none/tests/s390x/stfle.c
+++ b/none/tests/s390x/stfle.c
@@ -52,5 +52,11 @@ int main()
else
printf("The z/Architecture architectural mode is not installed\n");
+ /* Test #4: Message security assist */
+ if (stfle(dw, 17)) {
+ printf("MSA facility is present\n");
+ } else {
+ printf("No MSA facility available\n");
+ }
return 0;
}
diff --git a/none/tests/s390x/stfle.stdout.exp b/none/tests/s390x/stfle.stdout.exp
index c4653a9..00c2c75 100644
--- a/none/tests/s390x/stfle.stdout.exp
+++ b/none/tests/s390x/stfle.stdout.exp
@@ -6,3 +6,4 @@ STFLE facility is installed
the value of cc is 3 and #double words is 2
the value of cc is 3 and #double words is 2
The z/Architecture architectural mode is installed and active
+No MSA facility available

View File

@ -3,7 +3,7 @@
Summary: Tool for finding memory management bugs in programs
Name: %{?scl_prefix}valgrind
Version: 3.8.1
Release: 24%{?dist}
Release: 25%{?dist}
Epoch: 1
License: GPLv2
URL: http://www.valgrind.org/
@ -184,6 +184,9 @@ Patch47: valgrind-3.8.1-initial-power-isa-207.patch
# KDE#323116 Deprecation of some ISA 2.05 POWER6 instructions.
Patch48: valgrind-3.8.1-power-isa-205-deprecation.patch
# KDE#310931 message-security assist instruction extension not implemented
Patch49: valgrind-3.8.1-s390-STFLE.patch
%ifarch x86_64 ppc64
# Ensure glibc{,-devel} is installed for both multilib arches
BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so
@ -332,6 +335,7 @@ touch ./memcheck/tests/linux/getregset.stderr.exp
%patch47 -p1
chmod 755 tests/check_isa-2_07_cap
%patch48 -p1
%patch49 -p1
# These tests go into an endless loop on ARM
# There is a __sync_add_and_fetch in the testcase.
@ -493,6 +497,10 @@ echo ===============END TESTING===============
%endif
%changelog
* Thu Aug 15 2013 Mark Wielaard <mjw@redhat.com> - 3.8.1-25
- Add valgrind-3.8.1-s390-STFLE.patch
s390 message-security assist (MSA) instruction extension not implemented.
* Wed Aug 14 2013 Mark Wielaard <mjw@redhat.com> - 3.8.1-24
- Add valgrind-3.8.1-power-isa-205-deprecation.patch
Deprecation of some ISA 2.05 POWER6 instructions.