|
From: <sv...@va...> - 2016-10-19 16:08:35
|
Author: sewardj
Date: Wed Oct 19 17:08:25 2016
New Revision: 16077
Log:
Add support for Linux perf-events ioctls. Fixes #368419.
Patch from Keno Fischer (ke...@ju...).
Modified:
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/include/vki/vki-linux.h
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c Wed Oct 19 17:08:25 2016
@@ -5640,6 +5640,10 @@
case VKI_FIONCLEX:
case VKI_TIOCNOTTY:
+ /* linux perf_event ioctls */
+ case VKI_PERF_EVENT_IOC_ENABLE:
+ case VKI_PERF_EVENT_IOC_DISABLE:
+
/* linux/soundcard interface (ALSA) */
case VKI_SNDRV_PCM_IOCTL_HW_FREE:
case VKI_SNDRV_PCM_IOCTL_HWSYNC:
@@ -8496,6 +8500,25 @@
break;
}
+ case VKI_PERF_EVENT_IOC_RESET:
+ case VKI_PERF_EVENT_IOC_REFRESH:
+ case VKI_PERF_EVENT_IOC_SET_OUTPUT:
+ case VKI_PERF_EVENT_IOC_SET_BPF:
+ /* These take scalar arguments, so already handled above */
+ break;
+
+ case VKI_PERF_EVENT_IOC_PERIOD:
+ PRE_MEM_READ("ioctl(VKI_PERF_EVENT_IOC_PERIOD)", (Addr)ARG3, sizeof(__vki_u64));
+ break;
+
+ case VKI_PERF_EVENT_IOC_SET_FILTER:
+ PRE_MEM_RASCIIZ("ioctl(VKI_PERF_EVENT_IOC_SET_FILTER).filter", ARG3);
+ break;
+
+ case VKI_PERF_EVENT_IOC_ID:
+ PRE_MEM_WRITE("ioctl(VKI_PERF_EVENT_IOC_ID)", (Addr)ARG3, sizeof(__vki_u64));
+ break;
+
default:
/* EVIOC* are variable length and return size written on success */
switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
@@ -10388,6 +10411,20 @@
case VKI_TIOCSSERIAL:
break;
+ case VKI_PERF_EVENT_IOC_ENABLE:
+ case VKI_PERF_EVENT_IOC_DISABLE:
+ case VKI_PERF_EVENT_IOC_REFRESH:
+ case VKI_PERF_EVENT_IOC_RESET:
+ case VKI_PERF_EVENT_IOC_PERIOD:
+ case VKI_PERF_EVENT_IOC_SET_OUTPUT:
+ case VKI_PERF_EVENT_IOC_SET_FILTER:
+ case VKI_PERF_EVENT_IOC_SET_BPF:
+ break;
+
+ case VKI_PERF_EVENT_IOC_ID:
+ POST_MEM_WRITE((Addr)ARG3, sizeof(__vki_u64));
+ break;
+
default:
/* EVIOC* are variable length and return size written on success */
switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
Modified: trunk/include/vki/vki-linux.h
==============================================================================
--- trunk/include/vki/vki-linux.h (original)
+++ trunk/include/vki/vki-linux.h Wed Oct 19 17:08:25 2016
@@ -2946,6 +2946,16 @@
};
};
+#define VKI_PERF_EVENT_IOC_ENABLE _VKI_IO ('$', 0)
+#define VKI_PERF_EVENT_IOC_DISABLE _VKI_IO ('$', 1)
+#define VKI_PERF_EVENT_IOC_REFRESH _VKI_IO ('$', 2)
+#define VKI_PERF_EVENT_IOC_RESET _VKI_IO ('$', 3)
+#define VKI_PERF_EVENT_IOC_PERIOD _VKI_IOW('$', 4, __vki_u64)
+#define VKI_PERF_EVENT_IOC_SET_OUTPUT _VKI_IO ('$', 5)
+#define VKI_PERF_EVENT_IOC_SET_FILTER _VKI_IOW('$', 6, char *)
+#define VKI_PERF_EVENT_IOC_ID _VKI_IOR('$', 7, __vki_u64 *)
+#define VKI_PERF_EVENT_IOC_SET_BPF _VKI_IOW('$', 8, __vki_u32)
+
/*--------------------------------------------------------------------*/
// From linux-2.6.32.4/include/linux/getcpu.h
/*--------------------------------------------------------------------*/
|