diff --git a/valgrind-3.8.1-s390-STFLE.patch b/valgrind-3.8.1-s390-STFLE.patch new file mode 100644 index 0000000..f6408ba --- /dev/null +++ b/valgrind-3.8.1-s390-STFLE.patch @@ -0,0 +1,141 @@ +commit d2c954603a211e11c35db7d8b3fdd60675483738 +Author: florian +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 +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 diff --git a/valgrind.spec b/valgrind.spec index 01ca6bb..6ed5dcf 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -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 - 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 - 3.8.1-24 - Add valgrind-3.8.1-power-isa-205-deprecation.patch Deprecation of some ISA 2.05 POWER6 instructions.