[valgrind] Add valgrind-3.8.0-lzcnt-tzcnt-bugfix.patch (KDE#295808)
Mark Wielaard
mjw at fedoraproject.org
Tue Sep 11 09:52:48 UTC 2012
commit c06a5ebf830fde54c7c9d6722c2e528f455305a4
Author: Mark Wielaard <mjw at redhat.com>
Date: Tue Sep 11 11:23:49 2012 +0200
Add valgrind-3.8.0-lzcnt-tzcnt-bugfix.patch (KDE#295808)
valgrind-3.8.0-lzcnt-tzcnt-bugfix.patch | 66 +++++++++++++++++++++++++++++++
valgrind.spec | 5 ++
2 files changed, 71 insertions(+), 0 deletions(-)
---
diff --git a/valgrind-3.8.0-lzcnt-tzcnt-bugfix.patch b/valgrind-3.8.0-lzcnt-tzcnt-bugfix.patch
new file mode 100644
index 0000000..00d8bf3
--- /dev/null
+++ b/valgrind-3.8.0-lzcnt-tzcnt-bugfix.patch
@@ -0,0 +1,66 @@
+------------------------------------------------------------------------
+r2478 | sewardj | 2012-08-23 22:14:51 +0200 (Thu, 23 Aug 2012) | 4 lines
+
+Fix LZCNT and TZCNT properly. Fixes #295808. (Jakub Jelinek,
+jakub at redhat.com)
+
+
+------------------------------------------------------------------------
+Index: priv/guest_amd64_toIR.c
+===================================================================
+--- valgrind-3.8.0/VEX/priv/guest_amd64_toIR.c (revision 2477)
++++ valgrind-3.8.0/VEX/priv/guest_amd64_toIR.c (revision 2478)
+@@ -20084,13 +20084,16 @@
+ return delta;
+
+ case 0xBC: /* BSF Gv,Ev */
+- if (haveF2orF3(pfx)) goto decode_failure;
++ if (haveF2(pfx)) goto decode_failure;
+ delta = dis_bs_E_G ( vbi, pfx, sz, delta, True );
+ return delta;
+
+ case 0xBD: /* BSR Gv,Ev */
+- if (!haveF2orF3(pfx)) {
+- /* no-F2 no-F3 0F BD = BSR */
++ if (!haveF2orF3(pfx)
++ || (haveF3noF2(pfx)
++ && 0 == (archinfo->hwcaps & VEX_HWCAPS_AMD64_LZCNT))) {
++ /* no-F2 no-F3 0F BD = BSR
++ or F3 0F BD = REP; BSR on older CPUs. */
+ delta = dis_bs_E_G ( vbi, pfx, sz, delta, False );
+ return delta;
+ }
+Index: priv/guest_x86_toIR.c
+===================================================================
+--- valgrind-3.8.0/VEX/priv/guest_x86_toIR.c (revision 2477)
++++ valgrind-3.8.0/VEX/priv/guest_x86_toIR.c (revision 2478)
+@@ -14021,12 +14021,28 @@
+ for the rest, it means REP) */
+ case 0xF3: {
+ Addr32 eip_orig = guest_EIP_bbstart + delta_start;
+- if (sorb != 0) goto decode_failure;
+ abyte = getIByte(delta); delta++;
+
+ if (abyte == 0x66) { sz = 2; abyte = getIByte(delta); delta++; }
+
++ if (sorb != 0 && abyte != 0x0F) goto decode_failure;
++
+ switch (abyte) {
++ case 0x0F:
++ switch (getIByte(delta)) {
++ /* On older CPUs, TZCNT behaves the same as BSF. */
++ case 0xBC: /* REP BSF Gv,Ev */
++ delta = dis_bs_E_G ( sorb, sz, delta + 1, True );
++ break;
++ /* On older CPUs, LZCNT behaves the same as BSR. */
++ case 0xBD: /* REP BSR Gv,Ev */
++ delta = dis_bs_E_G ( sorb, sz, delta + 1, False );
++ break;
++ default:
++ goto decode_failure;
++ }
++ break;
++
+ case 0xA4: sz = 1; /* REP MOVS<sz> */
+ case 0xA5:
+ dis_REP_op ( &dres, X86CondAlways, dis_MOVS, sz, eip_orig,
diff --git a/valgrind.spec b/valgrind.spec
index e7a9051..47a87a4 100644
--- a/valgrind.spec
+++ b/valgrind.spec
@@ -21,6 +21,7 @@ Patch10: valgrind-3.8.0-ldso-supp.patch
Patch11: valgrind-3.8.0-x86-backtrace.patch
Patch12: valgrind-3.8.0-find-buildid.patch
Patch13: valgrind-3.8.0-abbrev-parsing.patch
+Patch14: valgrind-3.8.0-lzcnt-tzcnt-bugfix.patch
Obsoletes: valgrind-callgrind
%ifarch x86_64 ppc64
@@ -113,6 +114,7 @@ for details.
%patch11 -p1
%patch12 -p1
%patch13 -p1
+%patch14 -p1
%build
CC=gcc
@@ -223,6 +225,9 @@ echo ===============END TESTING===============
%endif
%changelog
+* Tue Sep 11 2012 Mark Wielaard <mjw at redhat.com>
+- Add valgrind-3.8.0-lzcnt-tzcnt-bugfix.patch (KDE#295808)
+
* Mon Aug 27 2012 Mark Wielaard <mjw at redhat.com> 3.8.0-5
- Add valgrind-3.8.0-abbrev-parsing.patch for #849783 (KDE#305513).
More information about the scm-commits
mailing list