3.15.0-8 - Add valgrind-3.15.0-avx-rdrand-f16c.patch
This commit is contained in:
parent
cf1bb94572
commit
97686e1c98
95
valgrind-3.15.0-avx-rdrand-f16c.patch
Normal file
95
valgrind-3.15.0-avx-rdrand-f16c.patch
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
commit 791fe5ecf909d573bcbf353b677b9404f9da0ed4
|
||||||
|
Author: Mark Wielaard <mark@klomp.org>
|
||||||
|
Date: Mon May 27 22:19:27 2019 +0200
|
||||||
|
|
||||||
|
Expose rdrand and f16c through cpuid also if the host only has avx.
|
||||||
|
|
||||||
|
The amd64 CPUID dirtyhelpers are mostly static since they emulate some
|
||||||
|
existing CPU "family". The avx2 ("i7-4910MQ") CPUID variant however
|
||||||
|
can "dynamicly" enable rdrand and/or f16c if the host supports them.
|
||||||
|
Do the same for the avx_and_cx16 ("i5-2300") CPUID variant.
|
||||||
|
|
||||||
|
https://bugs.kde.org/show_bug.cgi?id=408009
|
||||||
|
|
||||||
|
diff --git a/VEX/priv/guest_amd64_defs.h b/VEX/priv/guest_amd64_defs.h
|
||||||
|
index 4f34b41..a5de527 100644
|
||||||
|
--- a/VEX/priv/guest_amd64_defs.h
|
||||||
|
+++ b/VEX/priv/guest_amd64_defs.h
|
||||||
|
@@ -165,7 +165,9 @@ extern void amd64g_dirtyhelper_storeF80le ( Addr/*addr*/, ULong/*data*/ );
|
||||||
|
extern void amd64g_dirtyhelper_CPUID_baseline ( VexGuestAMD64State* st );
|
||||||
|
extern void amd64g_dirtyhelper_CPUID_sse3_and_cx16 ( VexGuestAMD64State* st );
|
||||||
|
extern void amd64g_dirtyhelper_CPUID_sse42_and_cx16 ( VexGuestAMD64State* st );
|
||||||
|
-extern void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st );
|
||||||
|
+extern void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st,
|
||||||
|
+ ULong hasF16C,
|
||||||
|
+ ULong hasRDRAND );
|
||||||
|
extern void amd64g_dirtyhelper_CPUID_avx2 ( VexGuestAMD64State* st,
|
||||||
|
ULong hasF16C, ULong hasRDRAND );
|
||||||
|
|
||||||
|
diff --git a/VEX/priv/guest_amd64_helpers.c b/VEX/priv/guest_amd64_helpers.c
|
||||||
|
index e4cf7e2..182bae0 100644
|
||||||
|
--- a/VEX/priv/guest_amd64_helpers.c
|
||||||
|
+++ b/VEX/priv/guest_amd64_helpers.c
|
||||||
|
@@ -3141,8 +3141,11 @@ void amd64g_dirtyhelper_CPUID_sse42_and_cx16 ( VexGuestAMD64State* st )
|
||||||
|
address sizes : 36 bits physical, 48 bits virtual
|
||||||
|
power management:
|
||||||
|
*/
|
||||||
|
-void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st )
|
||||||
|
+void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st,
|
||||||
|
+ ULong hasF16C, ULong hasRDRAND )
|
||||||
|
{
|
||||||
|
+ vassert((hasF16C >> 1) == 0ULL);
|
||||||
|
+ vassert((hasRDRAND >> 1) == 0ULL);
|
||||||
|
# define SET_ABCD(_a,_b,_c,_d) \
|
||||||
|
do { st->guest_RAX = (ULong)(_a); \
|
||||||
|
st->guest_RBX = (ULong)(_b); \
|
||||||
|
@@ -3157,9 +3160,14 @@ void amd64g_dirtyhelper_CPUID_avx_and_cx16 ( VexGuestAMD64State* st )
|
||||||
|
case 0x00000000:
|
||||||
|
SET_ABCD(0x0000000d, 0x756e6547, 0x6c65746e, 0x49656e69);
|
||||||
|
break;
|
||||||
|
- case 0x00000001:
|
||||||
|
- SET_ABCD(0x000206a7, 0x00100800, 0x1f9ae3bf, 0xbfebfbff);
|
||||||
|
+ case 0x00000001: {
|
||||||
|
+ // As a baseline, advertise neither F16C (ecx:29) nor RDRAND (ecx:30),
|
||||||
|
+ // but patch in support for them as directed by the caller.
|
||||||
|
+ UInt ecx_extra
|
||||||
|
+ = (hasF16C ? (1U << 29) : 0) | (hasRDRAND ? (1U << 30) : 0);
|
||||||
|
+ SET_ABCD(0x000206a7, 0x00100800, (0x1f9ae3bf | ecx_extra), 0xbfebfbff);
|
||||||
|
break;
|
||||||
|
+ }
|
||||||
|
case 0x00000002:
|
||||||
|
SET_ABCD(0x76035a01, 0x00f0b0ff, 0x00000000, 0x00ca0000);
|
||||||
|
break;
|
||||||
|
diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c
|
||||||
|
index 56e992c..96dee38 100644
|
||||||
|
--- a/VEX/priv/guest_amd64_toIR.c
|
||||||
|
+++ b/VEX/priv/guest_amd64_toIR.c
|
||||||
|
@@ -22007,7 +22007,8 @@ Long dis_ESC_0F (
|
||||||
|
|
||||||
|
vassert(fName); vassert(fAddr);
|
||||||
|
IRExpr** args = NULL;
|
||||||
|
- if (fAddr == &amd64g_dirtyhelper_CPUID_avx2) {
|
||||||
|
+ if (fAddr == &amd64g_dirtyhelper_CPUID_avx2
|
||||||
|
+ || fAddr == &amd64g_dirtyhelper_CPUID_avx_and_cx16) {
|
||||||
|
Bool hasF16C = (archinfo->hwcaps & VEX_HWCAPS_AMD64_F16C) != 0;
|
||||||
|
Bool hasRDRAND = (archinfo->hwcaps & VEX_HWCAPS_AMD64_RDRAND) != 0;
|
||||||
|
args = mkIRExprVec_3(IRExpr_GSPTR(),
|
||||||
|
diff --git a/coregrind/m_machine.c b/coregrind/m_machine.c
|
||||||
|
index 3536e57..56a28d1 100644
|
||||||
|
--- a/coregrind/m_machine.c
|
||||||
|
+++ b/coregrind/m_machine.c
|
||||||
|
@@ -1076,10 +1076,10 @@ Bool VG_(machine_get_hwcaps)( void )
|
||||||
|
have_avx2 = (ebx & (1<<5)) != 0; /* True => have AVX2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* Sanity check for RDRAND and F16C. These don't actually *need* AVX2, but
|
||||||
|
- it's convenient to restrict them to the AVX2 case since the simulated
|
||||||
|
- CPUID we'll offer them on has AVX2 as a base. */
|
||||||
|
- if (!have_avx2) {
|
||||||
|
+ /* Sanity check for RDRAND and F16C. These don't actually *need* AVX, but
|
||||||
|
+ it's convenient to restrict them to the AVX case since the simulated
|
||||||
|
+ CPUID we'll offer them on has AVX as a base. */
|
||||||
|
+ if (!have_avx) {
|
||||||
|
have_f16c = False;
|
||||||
|
have_rdrand = False;
|
||||||
|
}
|
@ -3,7 +3,7 @@
|
|||||||
Summary: Tool for finding memory management bugs in programs
|
Summary: Tool for finding memory management bugs in programs
|
||||||
Name: %{?scl_prefix}valgrind
|
Name: %{?scl_prefix}valgrind
|
||||||
Version: 3.15.0
|
Version: 3.15.0
|
||||||
Release: 7%{?dist}
|
Release: 8%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
URL: http://www.valgrind.org/
|
URL: http://www.valgrind.org/
|
||||||
@ -118,6 +118,9 @@ Patch13: valgrind-3.15.0-s390x-wrap-drd.patch
|
|||||||
# Add some -Wl,z,now.
|
# Add some -Wl,z,now.
|
||||||
Patch14: valgrind-3.15.0-some-Wl-z-now.patch
|
Patch14: valgrind-3.15.0-some-Wl-z-now.patch
|
||||||
|
|
||||||
|
# KDE#408009 Expose rdrand and f16c even on avx if host cpu supports them
|
||||||
|
Patch15: valgrind-3.15.0-avx-rdrand-f16c.patch
|
||||||
|
|
||||||
BuildRequires: glibc-devel
|
BuildRequires: glibc-devel
|
||||||
|
|
||||||
%if %{build_openmpi}
|
%if %{build_openmpi}
|
||||||
@ -258,6 +261,7 @@ Valgrind User Manual for details.
|
|||||||
%patch12 -p1
|
%patch12 -p1
|
||||||
%patch13 -p1
|
%patch13 -p1
|
||||||
%patch14 -p1
|
%patch14 -p1
|
||||||
|
%patch15 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
|
||||||
@ -478,8 +482,9 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Fri May 24 2019 Mark Wielaard <mjw@fedoraproject.org>
|
* Tue May 28 2019 Mark Wielaard <mjw@fedoraproject.org> - 3.15.0-8
|
||||||
- Update valgrind-3.15.0-copy_file_range.patch.
|
- Update valgrind-3.15.0-copy_file_range.patch.
|
||||||
|
- Add valgrind-3.15.0-avx-rdrand-f16c.patch.
|
||||||
|
|
||||||
* Fri May 24 2019 Mark Wielaard <mjw@fedoraproject.org> - 3.15.0-7
|
* Fri May 24 2019 Mark Wielaard <mjw@fedoraproject.org> - 3.15.0-7
|
||||||
- Update valgrind-3.15.0-some-stack-protector.patch to include getoff.
|
- Update valgrind-3.15.0-some-stack-protector.patch to include getoff.
|
||||||
|
Loading…
Reference in New Issue
Block a user