216add6
commit 6bb6c8a65a341a67bd059ec6e1c805813eb17264
216add6
Author: Mark Wielaard <mark@klomp.org>
216add6
Date:   Tue Jun 19 18:00:45 2018 +0200
216add6
216add6
    Mask AT_HWCAPS on arm64 to those instructions VEX implements.
216add6
    
216add6
    This patch makes sure that the process running under valgrind only sees
216add6
    the AES, PMULL, SHA1, SHA2, CRC32, FP, and ASIMD features in auxv AT_HWCAPS.
216add6
    
216add6
    https://bugs.kde.org/show_bug.cgi?id=381556
216add6
39ca09a
diff --git a/coregrind/m_initimg/initimg-linux.c b/coregrind/m_initimg/initimg-linux.c
216add6
index 30e1f85..61cc458 100644
39ca09a
--- a/coregrind/m_initimg/initimg-linux.c
39ca09a
+++ b/coregrind/m_initimg/initimg-linux.c
216add6
@@ -703,6 +703,19 @@ Addr setup_client_stack( void*  init_sp,
39ca09a
                   (and anything above) are not supported by Valgrind. */
39ca09a
                auxv->u.a_val &= VKI_HWCAP_S390_TE - 1;
39ca09a
             }
39ca09a
+#           elif defined(VGP_arm64_linux)
39ca09a
+            {
216add6
+               /* Limit the AT_HWCAP to just those features we explicitly
216add6
+		  support in VEX.  */
216add6
+#define ARM64_SUPPORTED_HWCAP (VKI_HWCAP_AES	        \
216add6
+                               | VKI_HWCAP_PMULL        \
216add6
+                               | VKI_HWCAP_SHA1         \
216add6
+                               | VKI_HWCAP_SHA2         \
216add6
+                               | VKI_HWCAP_CRC32        \
216add6
+                               | VKI_HWCAP_FP           \
216add6
+                               | VKI_HWCAP_ASIMD)
216add6
+               auxv->u.a_val &= ARM64_SUPPORTED_HWCAP;
39ca09a
+            }
39ca09a
 #           endif
39ca09a
             break;
39ca09a
 #        if defined(VGP_ppc64be_linux) || defined(VGP_ppc64le_linux)
216add6
diff --git a/include/vki/vki-arm64-linux.h b/include/vki/vki-arm64-linux.h
216add6
index af6b435..54b0428 100644
216add6
--- a/include/vki/vki-arm64-linux.h
216add6
+++ b/include/vki/vki-arm64-linux.h
216add6
@@ -692,6 +692,39 @@ struct vki_shminfo64 {
216add6
 #define VKI_TIOCSSERIAL     0x541F
216add6
 
216add6
 //----------------------------------------------------------------------
216add6
+// From linux-4.17/include/uapi/asm-generic/ioctls.h
216add6
+//----------------------------------------------------------------------
216add6
+
216add6
+#define VKI_HWCAP_FP                (1 << 0)
216add6
+#define VKI_HWCAP_ASIMD             (1 << 1)
216add6
+#define VKI_HWCAP_EVTSTRM           (1 << 2)
216add6
+#define VKI_HWCAP_AES               (1 << 3)
216add6
+#define VKI_HWCAP_PMULL             (1 << 4)
216add6
+#define VKI_HWCAP_SHA1              (1 << 5)
216add6
+#define VKI_HWCAP_SHA2              (1 << 6)
216add6
+#define VKI_HWCAP_CRC32             (1 << 7)
216add6
+#define VKI_HWCAP_ATOMICS           (1 << 8)
216add6
+#define VKI_HWCAP_FPHP              (1 << 9)
216add6
+#define VKI_HWCAP_ASIMDHP           (1 << 10)
216add6
+#define VKI_HWCAP_CPUID             (1 << 11)
216add6
+#define VKI_HWCAP_ASIMDRDM          (1 << 12)
216add6
+#define VKI_HWCAP_JSCVT             (1 << 13)
216add6
+#define VKI_HWCAP_FCMA              (1 << 14)
216add6
+#define VKI_HWCAP_LRCPC             (1 << 15)
216add6
+#define VKI_HWCAP_DCPOP             (1 << 16)
216add6
+#define VKI_HWCAP_SHA3              (1 << 17)
216add6
+#define VKI_HWCAP_SM3               (1 << 18)
216add6
+#define VKI_HWCAP_SM4               (1 << 19)
216add6
+#define VKI_HWCAP_ASIMDDP           (1 << 20)
216add6
+#define VKI_HWCAP_SHA512            (1 << 21)
216add6
+#define VKI_HWCAP_SVE               (1 << 22)
216add6
+#define VKI_HWCAP_ASIMDFHM          (1 << 23)
216add6
+#define VKI_HWCAP_DIT               (1 << 24)
216add6
+#define VKI_HWCAP_USCAT             (1 << 25)
216add6
+#define VKI_HWCAP_ILRCPC            (1 << 26)
216add6
+#define VKI_HWCAP_FLAGM             (1 << 27)
216add6
+
216add6
+//----------------------------------------------------------------------
216add6
 // And that's it!
216add6
 //----------------------------------------------------------------------
216add6