From: Robert Walsh Date: Wed, 27 Apr 2011 19:04:31 +0000 (+0000) Subject: Fix no-arg ioctls on Darwin. X-Git-Tag: svn/VALGRIND_3_7_0~523 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7671cab5c89156b119f6a7e130ea9ce93c7cff0b;p=thirdparty%2Fvalgrind.git Fix no-arg ioctls on Darwin. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11714 --- diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index 0df78a0bed..c1884dfa92 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -690,9 +690,23 @@ void ML_(sync_mappings)(const HChar *when, const HChar *where, Int num) PRE(ioctl) { *flags |= SfMayBlock; - PRINT("ioctl ( %ld, 0x%lx, %#lx )",ARG1,ARG2,ARG3); - PRE_REG_READ3(long, "ioctl", - unsigned int, fd, unsigned int, request, unsigned long, arg); + + /* Handle ioctls that don't take an arg first */ + switch (ARG2 /* request */) { + case VKI_TIOCSCTTY: + case VKI_TIOCEXCL: + case VKI_TIOCPTYGRANT: + case VKI_TIOCPTYUNLK: + case VKI_DTRACEHIOC_REMOVE: + PRINT("ioctl ( %ld, 0x%lx )",ARG1,ARG2); + PRE_REG_READ2(long, "ioctl", + unsigned int, fd, unsigned int, request); + return; + default: + PRINT("ioctl ( %ld, 0x%lx, %#lx )",ARG1,ARG2,ARG3); + PRE_REG_READ3(long, "ioctl", + unsigned int, fd, unsigned int, request, unsigned long, arg); + } switch (ARG2 /* request */) { case VKI_TIOCGWINSZ: @@ -721,9 +735,6 @@ PRE(ioctl) /* Set a process group ID? */ PRE_MEM_WRITE( "ioctl(TIOCGPGRP)", ARG3, sizeof(vki_pid_t) ); break; - case VKI_TIOCSCTTY: - /* Just takes an int value. */ - break; case VKI_FIONBIO: PRE_MEM_READ( "ioctl(FIONBIO)", ARG3, sizeof(int) ); break; @@ -846,7 +857,6 @@ PRE(ioctl) PRE_MEM_WRITE( "ioctl(FIONREAD)", ARG3, sizeof(int) ); break; - case VKI_DTRACEHIOC_REMOVE: case VKI_DTRACEHIOC_ADDDOF: break; @@ -866,9 +876,6 @@ PRE(ioctl) case VKI_TIOCPTYGNAME: PRE_MEM_WRITE( "ioctl(TIOCPTYGNAME)", ARG3, 128 ); break; - case VKI_TIOCPTYGRANT: - case VKI_TIOCPTYUNLK: - break; default: ML_(PRE_unknown_ioctl)(tid, ARG2, ARG3);