]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Some ioctls don't look at ARG3 at all. Based on patches from Clemens
authorNicholas Nethercote <njn@valgrind.org>
Tue, 14 Jul 2009 00:06:00 +0000 (00:06 +0000)
committerNicholas Nethercote <njn@valgrind.org>
Tue, 14 Jul 2009 00:06:00 +0000 (00:06 +0000)
Ladisch.  Fixes bug 159501.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10441

coregrind/m_syswrap/syswrap-linux.c
include/vki/vki-linux.h

index 95566af0e8436a61e70344427f864f3c3de69e11..a4a291cb2857ef05c15f23e39c30b8c52dcf2aa5 100644 (file)
@@ -3323,6 +3323,40 @@ PRE(sys_ioctl)
    PRE_REG_READ3(long, "ioctl",
                  unsigned int, fd, unsigned int, request, unsigned long, arg);
 
+   // We first handle the ones that don't use ARG3 (even as a
+   // scalar/non-pointer argument).
+   switch (ARG2 /* request */) {
+
+      /* linux/soundcard interface (ALSA) */
+   case VKI_SNDRV_PCM_IOCTL_HW_FREE:
+   case VKI_SNDRV_PCM_IOCTL_HWSYNC:
+   case VKI_SNDRV_PCM_IOCTL_PREPARE:
+   case VKI_SNDRV_PCM_IOCTL_RESET:
+   case VKI_SNDRV_PCM_IOCTL_START:
+   case VKI_SNDRV_PCM_IOCTL_DROP:
+   case VKI_SNDRV_PCM_IOCTL_DRAIN:
+   case VKI_SNDRV_PCM_IOCTL_RESUME:
+   case VKI_SNDRV_PCM_IOCTL_XRUN:
+   case VKI_SNDRV_PCM_IOCTL_UNLINK:
+   case VKI_SNDRV_TIMER_IOCTL_START:
+   case VKI_SNDRV_TIMER_IOCTL_STOP:
+   case VKI_SNDRV_TIMER_IOCTL_CONTINUE:
+   case VKI_SNDRV_TIMER_IOCTL_PAUSE:
+      PRINT("sys_ioctl ( %d, 0x%x )",ARG1,ARG2);
+      PRE_REG_READ2(long, "ioctl",
+                    unsigned int, fd, unsigned int, request);
+      return;
+
+   default:
+      PRINT("sys_ioctl ( %d, 0x%x, %p )",ARG1,ARG2,ARG3);
+      PRE_REG_READ3(long, "ioctl",
+                    unsigned int, fd, unsigned int, request, unsigned long, arg);
+      break;
+   }
+
+   // We now handle those that do look at ARG3 (and unknown ones fall into
+   // this category).  Nb: some of these may well belong in the
+   // doesn't-use-ARG3 switch above.
    switch (ARG2 /* request */) {
    case VKI_TCSETS:
    case VKI_TCSETSW:
@@ -3718,20 +3752,9 @@ PRE(sys_ioctl)
       break;
 
       /* linux/soundcard interface (ALSA) */
-   case VKI_SNDRV_PCM_IOCTL_HW_FREE:
-   case VKI_SNDRV_PCM_IOCTL_HWSYNC:
-   case VKI_SNDRV_PCM_IOCTL_PREPARE:
-   case VKI_SNDRV_PCM_IOCTL_RESET:
-   case VKI_SNDRV_PCM_IOCTL_START:
-   case VKI_SNDRV_PCM_IOCTL_DROP:
-   case VKI_SNDRV_PCM_IOCTL_DRAIN:
-   case VKI_SNDRV_PCM_IOCTL_RESUME:
-   case VKI_SNDRV_PCM_IOCTL_XRUN:
-   case VKI_SNDRV_PCM_IOCTL_UNLINK:
-   case VKI_SNDRV_TIMER_IOCTL_START:
-   case VKI_SNDRV_TIMER_IOCTL_STOP:
-   case VKI_SNDRV_TIMER_IOCTL_CONTINUE:
-   case VKI_SNDRV_TIMER_IOCTL_PAUSE:
+   case VKI_SNDRV_PCM_IOCTL_PAUSE:
+   case VKI_SNDRV_PCM_IOCTL_LINK:
+      /* these just take an int by value */
       break;
 
       /* Real Time Clock (/dev/rtc) ioctls */
index 07fe899d5ba29d663c625e5783e7d3f5be0156b5..d31bd8be20aaa5d4b616ac6f8c82129ee57f921d 100644 (file)
@@ -2134,8 +2134,10 @@ enum {
        VKI_SNDRV_PCM_IOCTL_START = _VKI_IO('A', 0x42),
        VKI_SNDRV_PCM_IOCTL_DROP = _VKI_IO('A', 0x43),
        VKI_SNDRV_PCM_IOCTL_DRAIN = _VKI_IO('A', 0x44),
+       VKI_SNDRV_PCM_IOCTL_PAUSE = _VKI_IOW('A', 0x45, int),
        VKI_SNDRV_PCM_IOCTL_RESUME = _VKI_IO('A', 0x47),
        VKI_SNDRV_PCM_IOCTL_XRUN = _VKI_IO('A', 0x48),
+       VKI_SNDRV_PCM_IOCTL_LINK = _VKI_IOW('A', 0x60, int),
        VKI_SNDRV_PCM_IOCTL_UNLINK = _VKI_IO('A', 0x61),
 };