]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Clean up after m_syscalls changes: reinstate about half the syscalls
authorJulian Seward <jseward@acm.org>
Wed, 8 Jun 2005 23:38:32 +0000 (23:38 +0000)
committerJulian Seward <jseward@acm.org>
Wed, 8 Jun 2005 23:38:32 +0000 (23:38 +0000)
needed to make memcheck/tests/x86/scalar work again.

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

coregrind/m_syscalls/syscalls-generic.c
coregrind/m_syscalls/syscalls-linux.c
coregrind/m_syscalls/syscalls-x86-linux.c

index 2132a21d0f073615145d18d8d28d8bd073768784..25658d8bc753d9dbeca406102a0022f87352fed7 100644 (file)
@@ -1684,12 +1684,12 @@ PRE(sys_ni_syscall)
    SET_STATUS_Failure( VKI_ENOSYS );
 }
 
-//zz PRE(sys_iopl, 0)
-//zz {
-//zz    PRINT("sys_iopl ( %d )", ARG1);
-//zz    PRE_REG_READ1(long, "iopl", unsigned long, level);
-//zz }
-//zz 
+PRE(sys_iopl)
+{
+   PRINT("sys_iopl ( %d )", ARG1);
+   PRE_REG_READ1(long, "iopl", unsigned long, level);
+}
+
 //zz PRE(sys_setxattr, SfMayBlock)
 //zz {
 //zz    PRINT("sys_setxattr ( %p, %p, %p, %llu, %d )",
@@ -1842,16 +1842,16 @@ POST(sys_getxattr)
 //zz    PRE_REG_READ2(long, "fremovexattr", int, fd, char *, name);
 //zz    PRE_MEM_RASCIIZ( "fremovexattr(name)", ARG2 );
 //zz }
-//zz 
-//zz PRE(sys_quotactl, 0)
-//zz {
-//zz    PRINT("sys_quotactl (0x%x, %p, 0x%x, 0x%x )", ARG1,ARG2,ARG3, ARG4);
-//zz    PRE_REG_READ4(long, "quotactl",
-//zz                  unsigned int, cmd, const char *, special, vki_qid_t, id,
-//zz                  void *, addr);
-//zz    PRE_MEM_RASCIIZ( "quotactl(special)", ARG2 );
-//zz }
-//zz 
+
+PRE(sys_quotactl)
+{
+   PRINT("sys_quotactl (0x%x, %p, 0x%x, 0x%x )", ARG1,ARG2,ARG3, ARG4);
+   PRE_REG_READ4(long, "quotactl",
+                 unsigned int, cmd, const char *, special, vki_qid_t, id,
+                 void *, addr);
+   PRE_MEM_RASCIIZ( "quotactl(special)", ARG2 );
+}
+
 //zz // XXX: this wrapper is only suitable for 32-bit platforms
 //zz PRE(sys_lookup_dcookie, 0)
 //zz {
@@ -1875,20 +1875,22 @@ PRE(sys_fsync)
    PRE_REG_READ1(long, "fsync", unsigned int, fd);
 }
 
-//zz PRE(sys_fdatasync, SfMayBlock)
-//zz {
-//zz    PRINT("sys_fdatasync ( %d )", ARG1);
-//zz    PRE_REG_READ1(long, "fdatasync", unsigned int, fd);
-//zz }
-//zz 
-//zz PRE(sys_msync, SfMayBlock)
-//zz {
-//zz    PRINT("sys_msync ( %p, %llu, %d )", ARG1,(ULong)ARG2,ARG3);
-//zz    PRE_REG_READ3(long, "msync",
-//zz                  unsigned long, start, vki_size_t, length, int, flags);
-//zz    PRE_MEM_READ( "msync(start)", ARG1, ARG2 );
-//zz }
-//zz 
+PRE(sys_fdatasync)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_fdatasync ( %d )", ARG1);
+   PRE_REG_READ1(long, "fdatasync", unsigned int, fd);
+}
+
+PRE(sys_msync)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_msync ( %p, %llu, %d )", ARG1,(ULong)ARG2,ARG3);
+   PRE_REG_READ3(long, "msync",
+                 unsigned long, start, vki_size_t, length, int, flags);
+   PRE_MEM_READ( "msync(start)", ARG1, ARG2 );
+}
+
 //zz // Nb: getpmsg() and putpmsg() are special additional syscalls used in early
 //zz // versions of LiS (Linux Streams).  They are not part of the kernel.
 //zz // Therefore, we have to provide this type ourself, rather than getting it
@@ -1951,46 +1953,46 @@ PRE(sys_fsync)
 //zz    if (data && data->len > 0)
 //zz       PRE_MEM_READ( "putpmsg(data)", (Addr)data->buf, data->len);
 //zz }
-//zz 
-//zz PRE(sys_getitimer, 0)
-//zz {
-//zz    PRINT("sys_getitimer ( %d, %p )", ARG1, ARG2);
-//zz    PRE_REG_READ2(long, "getitimer", int, which, struct itimerval *, value);
-//zz    PRE_MEM_WRITE( "getitimer(value)", ARG2, sizeof(struct vki_itimerval) );
-//zz }
-//zz 
-//zz POST(sys_getitimer)
-//zz {
-//zz    if (ARG2 != (Addr)NULL) {
-//zz       POST_MEM_WRITE(ARG2, sizeof(struct vki_itimerval));
-//zz    }
-//zz }
-//zz 
-//zz PRE(sys_setitimer, 0)
-//zz {
-//zz    PRINT("sys_setitimer ( %d, %p, %p )", ARG1,ARG2,ARG3);
-//zz    PRE_REG_READ3(long, "setitimer", 
-//zz                  int, which,
-//zz                  struct itimerval *, value, struct itimerval *, ovalue);
-//zz    if (ARG2 != (Addr)NULL)
-//zz       PRE_MEM_READ( "setitimer(value)", ARG2, sizeof(struct vki_itimerval) );
-//zz    if (ARG3 != (Addr)NULL)
-//zz       PRE_MEM_WRITE( "setitimer(ovalue)", ARG3, sizeof(struct vki_itimerval));
-//zz }
-//zz 
-//zz POST(sys_setitimer)
-//zz {
-//zz    if (ARG3 != (Addr)NULL) {
-//zz       POST_MEM_WRITE(ARG3, sizeof(struct vki_itimerval));
-//zz    }
-//zz }
-//zz 
-//zz PRE(sys_chroot, 0)
-//zz {
-//zz    PRINT("sys_chroot ( %p )", ARG1);
-//zz    PRE_REG_READ1(long, "chroot", const char *, path);
-//zz    PRE_MEM_RASCIIZ( "chroot(path)", ARG1 );
-//zz }
+
+PRE(sys_getitimer)
+{
+   PRINT("sys_getitimer ( %d, %p )", ARG1, ARG2);
+   PRE_REG_READ2(long, "getitimer", int, which, struct itimerval *, value);
+   PRE_MEM_WRITE( "getitimer(value)", ARG2, sizeof(struct vki_itimerval) );
+}
+
+POST(sys_getitimer)
+{
+   if (ARG2 != (Addr)NULL) {
+      POST_MEM_WRITE(ARG2, sizeof(struct vki_itimerval));
+   }
+}
+
+PRE(sys_setitimer)
+{
+   PRINT("sys_setitimer ( %d, %p, %p )", ARG1,ARG2,ARG3);
+   PRE_REG_READ3(long, "setitimer", 
+                 int, which,
+                 struct itimerval *, value, struct itimerval *, ovalue);
+   if (ARG2 != (Addr)NULL)
+      PRE_MEM_READ( "setitimer(value)", ARG2, sizeof(struct vki_itimerval) );
+   if (ARG3 != (Addr)NULL)
+      PRE_MEM_WRITE( "setitimer(ovalue)", ARG3, sizeof(struct vki_itimerval));
+}
+
+POST(sys_setitimer)
+{
+   if (ARG3 != (Addr)NULL) {
+      POST_MEM_WRITE(ARG3, sizeof(struct vki_itimerval));
+   }
+}
+
+PRE(sys_chroot)
+{
+   PRINT("sys_chroot ( %p )", ARG1);
+   PRE_REG_READ1(long, "chroot", const char *, path);
+   PRE_MEM_RASCIIZ( "chroot(path)", ARG1 );
+}
 
 PRE(sys_madvise)
 {
@@ -2037,29 +2039,33 @@ PRE(sys_sched_setscheduler)
                    ARG3, sizeof(struct vki_sched_param));
 }
 
-//zz PRE(sys_mlock, SfMayBlock)
-//zz {
-//zz    PRINT("sys_mlock ( %p, %llu )", ARG1, (ULong)ARG2);
-//zz    PRE_REG_READ2(long, "mlock", unsigned long, addr, vki_size_t, len);
-//zz }
-//zz 
-//zz PRE(sys_munlock, SfMayBlock)
-//zz {
-//zz    PRINT("sys_munlock ( %p, %llu )", ARG1, (ULong)ARG2);
-//zz    PRE_REG_READ2(long, "munlock", unsigned long, addr, vki_size_t, len);
-//zz }
-//zz 
-//zz PRE(sys_mlockall, SfMayBlock)
-//zz {
-//zz    PRINT("sys_mlockall ( %x )", ARG1);
-//zz    PRE_REG_READ1(long, "mlockall", int, flags);
-//zz }
-//zz 
-//zz PRE(sys_munlockall, SfMayBlock)
-//zz {
-//zz    PRINT("sys_munlockall ( )");
-//zz    PRE_REG_READ0(long, "munlockall");
-//zz }
+PRE(sys_mlock)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_mlock ( %p, %llu )", ARG1, (ULong)ARG2);
+   PRE_REG_READ2(long, "mlock", unsigned long, addr, vki_size_t, len);
+}
+
+PRE(sys_munlock)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_munlock ( %p, %llu )", ARG1, (ULong)ARG2);
+   PRE_REG_READ2(long, "munlock", unsigned long, addr, vki_size_t, len);
+}
+
+PRE(sys_mlockall)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_mlockall ( %x )", ARG1);
+   PRE_REG_READ1(long, "mlockall", int, flags);
+}
+
+PRE(sys_munlockall)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_munlockall ( )");
+   PRE_REG_READ0(long, "munlockall");
+}
 
 PRE(sys_sched_get_priority_max)
 {
@@ -2073,24 +2079,24 @@ PRE(sys_sched_get_priority_min)
    PRE_REG_READ1(long, "sched_get_priority_min", int, policy);
 }
 
-//zz PRE(sys_setpriority, 0)
-//zz {
-//zz    PRINT("sys_setpriority ( %d, %d, %d )", ARG1, ARG2, ARG3);
-//zz    PRE_REG_READ3(long, "setpriority", int, which, int, who, int, prio);
-//zz }
-//zz 
-//zz PRE(sys_getpriority, 0)
-//zz {
-//zz    PRINT("sys_getpriority ( %d, %d )", ARG1, ARG2);
-//zz    PRE_REG_READ2(long, "getpriority", int, which, int, who);
-//zz }
-//zz 
-//zz PRE(sys_setregid16, 0)
-//zz {
-//zz    PRINT("sys_setregid16 ( %d, %d )", ARG1, ARG2);
-//zz    PRE_REG_READ2(long, "setregid16", vki_old_gid_t, rgid, vki_old_gid_t, egid);
-//zz }
-//zz 
+PRE(sys_setpriority)
+{
+   PRINT("sys_setpriority ( %d, %d, %d )", ARG1, ARG2, ARG3);
+   PRE_REG_READ3(long, "setpriority", int, which, int, who, int, prio);
+}
+
+PRE(sys_getpriority)
+{
+   PRINT("sys_getpriority ( %d, %d )", ARG1, ARG2);
+   PRE_REG_READ2(long, "getpriority", int, which, int, who);
+}
+
+PRE(sys_setregid16)
+{
+   PRINT("sys_setregid16 ( %d, %d )", ARG1, ARG2);
+   PRE_REG_READ2(long, "setregid16", vki_old_gid_t, rgid, vki_old_gid_t, egid);
+}
+
 //zz // XXX: only for 32-bit archs
 //zz PRE(sys_pwrite64, SfMayBlock)
 //zz {
@@ -2109,19 +2115,19 @@ PRE(sys_sync)
    PRE_REG_READ0(long, "sync");
 }
 
-//zz PRE(sys_fstatfs, 0)
-//zz {
-//zz    PRINT("sys_fstatfs ( %d, %p )",ARG1,ARG2);
-//zz    PRE_REG_READ2(long, "fstatfs",
-//zz                  unsigned int, fd, struct statfs *, buf);
-//zz    PRE_MEM_WRITE( "fstatfs(buf)", ARG2, sizeof(struct vki_statfs) );
-//zz }
-//zz 
-//zz POST(sys_fstatfs)
-//zz {
-//zz    POST_MEM_WRITE( ARG2, sizeof(struct vki_statfs) );
-//zz }
-//zz 
+PRE(sys_fstatfs)
+{
+   PRINT("sys_fstatfs ( %d, %p )",ARG1,ARG2);
+   PRE_REG_READ2(long, "fstatfs",
+                 unsigned int, fd, struct statfs *, buf);
+   PRE_MEM_WRITE( "fstatfs(buf)", ARG2, sizeof(struct vki_statfs) );
+}
+
+POST(sys_fstatfs)
+{
+   POST_MEM_WRITE( ARG2, sizeof(struct vki_statfs) );
+}
+
 //zz PRE(sys_fstatfs64, 0)
 //zz {
 //zz    PRINT("sys_fstatfs64 ( %d, %llu, %p )",ARG1,(ULong)ARG2,ARG3);
@@ -2134,13 +2140,13 @@ PRE(sys_sync)
 //zz {
 //zz    POST_MEM_WRITE( ARG3, ARG2 );
 //zz }
-//zz 
-//zz PRE(sys_getsid, 0)
-//zz {
-//zz    PRINT("sys_getsid ( %d )", ARG1);
-//zz    PRE_REG_READ1(long, "getsid", vki_pid_t, pid);
-//zz }
-//zz 
+
+PRE(sys_getsid)
+{
+   PRINT("sys_getsid ( %d )", ARG1);
+   PRE_REG_READ1(long, "getsid", vki_pid_t, pid);
+}
+
 //zz // XXX: only for 32-bit archs
 //zz PRE(sys_pread64, SfMayBlock)
 //zz {
@@ -2167,21 +2173,24 @@ PRE(sys_mknod)
    PRE_MEM_RASCIIZ( "mknod(pathname)", ARG1 );
 }
 
-//zz PRE(sys_flock, SfMayBlock)
-//zz {
-//zz    PRINT("sys_flock ( %d, %d )", ARG1, ARG2 );
-//zz    PRE_REG_READ2(long, "flock", unsigned int, fd, unsigned int, operation);
-//zz }
-//zz 
-//zz PRE(sys_init_module, SfMayBlock)
-//zz {
-//zz    PRINT("sys_init_module ( %p, %llu, %p )", ARG1, (ULong)ARG2, ARG3 );
-//zz    PRE_REG_READ3(long, "init_module",
-//zz                  void *, umod, unsigned long, len, const char *, uargs);
-//zz    PRE_MEM_READ( "init_module(umod)", ARG1, ARG2 );
-//zz    PRE_MEM_RASCIIZ( "init_module(uargs)", ARG3 );
-//zz }
-//zz 
+PRE(sys_flock)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_flock ( %d, %d )", ARG1, ARG2 );
+   PRE_REG_READ2(long, "flock", unsigned int, fd, unsigned int, operation);
+}
+
+/* This surely isn't remotely generic -- move to linux-specifics? */
+PRE(sys_init_module)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_init_module ( %p, %llu, %p )", ARG1, (ULong)ARG2, ARG3 );
+   PRE_REG_READ3(long, "init_module",
+                 void *, umod, unsigned long, len, const char *, uargs);
+   PRE_MEM_READ( "init_module(umod)", ARG1, ARG2 );
+   PRE_MEM_RASCIIZ( "init_module(uargs)", ARG3 );
+}
+
 //zz PRE(sys_capget, 0)
 //zz {
 //zz    PRINT("sys_capget ( %p, %p )", ARG1, ARG2 );
@@ -2514,91 +2523,92 @@ POST(sys_dup2)
       VG_(record_fd_open)(tid, RES, VG_(resolve_filename)(RES));
 }
 
-//zz PRE(sys_fchdir, 0)
-//zz {
-//zz    PRINT("sys_fchdir ( %d )", ARG1);
-//zz    PRE_REG_READ1(long, "fchdir", unsigned int, fd);
-//zz }
-//zz 
-//zz PRE(sys_fchown16, 0)
-//zz {
-//zz    PRINT("sys_fchown16 ( %d, %d, %d )", ARG1,ARG2,ARG3);
-//zz    PRE_REG_READ3(long, "fchown16",
-//zz                  unsigned int, fd, vki_old_uid_t, owner, vki_old_gid_t, group);
-//zz }
-//zz 
+PRE(sys_fchdir)
+{
+   PRINT("sys_fchdir ( %d )", ARG1);
+   PRE_REG_READ1(long, "fchdir", unsigned int, fd);
+}
+
+PRE(sys_fchown16)
+{
+   PRINT("sys_fchown16 ( %d, %d, %d )", ARG1,ARG2,ARG3);
+   PRE_REG_READ3(long, "fchown16",
+                 unsigned int, fd, vki_old_uid_t, owner, vki_old_gid_t, group);
+}
+
 //zz PRE(sys_fchown, 0)
 //zz {
 //zz    PRINT("sys_fchown ( %d, %d, %d )", ARG1,ARG2,ARG3);
 //zz    PRE_REG_READ3(long, "fchown",
 //zz                  unsigned int, fd, vki_uid_t, owner, vki_gid_t, group);
 //zz }
-//zz 
-//zz PRE(sys_fchmod, 0)
-//zz {
-//zz    PRINT("sys_fchmod ( %d, %d )", ARG1,ARG2);
-//zz    PRE_REG_READ2(long, "fchmod", unsigned int, fildes, vki_mode_t, mode);
-//zz }
-//zz 
-//zz PRE(sys_fcntl, 0)
-//zz {
-//zz    switch (ARG2) {
-//zz    // These ones ignore ARG3.
-//zz    case VKI_F_GETFD:
-//zz    case VKI_F_GETFL:
-//zz    case VKI_F_GETOWN:
-//zz    case VKI_F_SETOWN:
-//zz    case VKI_F_GETSIG:
-//zz    case VKI_F_SETSIG:
-//zz    case VKI_F_GETLEASE:
-//zz       PRINT("sys_fcntl ( %d, %d )", ARG1,ARG2);
-//zz       PRE_REG_READ2(long, "fcntl", unsigned int, fd, unsigned int, cmd);
-//zz       break;
-//zz 
-//zz    // These ones use ARG3 as "arg".
-//zz    case VKI_F_DUPFD:
-//zz    case VKI_F_SETFD:
-//zz    case VKI_F_SETFL:
-//zz    case VKI_F_SETLEASE:
-//zz    case VKI_F_NOTIFY:
-//zz       PRINT("sys_fcntl[ARG3=='arg'] ( %d, %d, %d )", ARG1,ARG2,ARG3);
-//zz       PRE_REG_READ3(long, "fcntl",
-//zz                     unsigned int, fd, unsigned int, cmd, unsigned long, arg);
-//zz       break;
-//zz 
-//zz    // These ones use ARG3 as "lock".
-//zz    case VKI_F_GETLK:
-//zz    case VKI_F_SETLK:
-//zz    case VKI_F_SETLKW:
-//zz #ifndef __amd64__
-//zz    case VKI_F_GETLK64:
-//zz    case VKI_F_SETLK64:
-//zz    case VKI_F_SETLKW64:
-//zz #else
-//zz #endif
-//zz       PRINT("sys_fcntl[ARG3=='lock'] ( %d, %d, %p )", ARG1,ARG2,ARG3);
-//zz       PRE_REG_READ3(long, "fcntl",
-//zz                     unsigned int, fd, unsigned int, cmd,
-//zz                     struct flock64 *, lock);
-//zz       break;
-//zz    }
-//zz 
-//zz    //if (ARG2 == VKI_F_SETLKW)
-//zz    //   tst->sys_flags |= SfMayBlock;
-//zz }
-//zz 
-//zz POST(sys_fcntl)
-//zz {
-//zz    if (ARG2 == VKI_F_DUPFD) {
-//zz       if (!VG_(fd_allowed)(RES, "fcntl(DUPFD)", tid, True)) {
-//zz          VG_(close)(RES);
-//zz          SET_STATUS_( -VKI_EMFILE );
-//zz       } else {
-//zz          if (VG_(clo_track_fds))
-//zz             VG_(record_fd_open)(tid, RES, VG_(resolve_filename)(RES));
-//zz       }
-//zz    }
-//zz }
+
+PRE(sys_fchmod)
+{
+   PRINT("sys_fchmod ( %d, %d )", ARG1,ARG2);
+   PRE_REG_READ2(long, "fchmod", unsigned int, fildes, vki_mode_t, mode);
+}
+
+PRE(sys_fcntl)
+{
+   switch (ARG2) {
+   // These ones ignore ARG3.
+   case VKI_F_GETFD:
+   case VKI_F_GETFL:
+   case VKI_F_GETOWN:
+   case VKI_F_SETOWN:
+   case VKI_F_GETSIG:
+   case VKI_F_SETSIG:
+   case VKI_F_GETLEASE:
+      PRINT("sys_fcntl ( %d, %d )", ARG1,ARG2);
+      PRE_REG_READ2(long, "fcntl", unsigned int, fd, unsigned int, cmd);
+      break;
+
+   // These ones use ARG3 as "arg".
+   case VKI_F_DUPFD:
+   case VKI_F_SETFD:
+   case VKI_F_SETFL:
+   case VKI_F_SETLEASE:
+   case VKI_F_NOTIFY:
+      PRINT("sys_fcntl[ARG3=='arg'] ( %d, %d, %d )", ARG1,ARG2,ARG3);
+      PRE_REG_READ3(long, "fcntl",
+                    unsigned int, fd, unsigned int, cmd, unsigned long, arg);
+      break;
+
+   // These ones use ARG3 as "lock".
+   case VKI_F_GETLK:
+   case VKI_F_SETLK:
+   case VKI_F_SETLKW:
+#  if defined(VGP_amd64_linux)
+   case VKI_F_GETLK64:
+   case VKI_F_SETLK64:
+   case VKI_F_SETLKW64:
+#  else
+#  endif
+      PRINT("sys_fcntl[ARG3=='lock'] ( %d, %d, %p )", ARG1,ARG2,ARG3);
+      PRE_REG_READ3(long, "fcntl",
+                    unsigned int, fd, unsigned int, cmd,
+                    struct flock64 *, lock);
+      break;
+   }
+
+   if (ARG2 == VKI_F_SETLKW)
+      *flags |= SfMayBlock;
+}
+
+POST(sys_fcntl)
+{
+   vg_assert(SUCCESS);
+   if (ARG2 == VKI_F_DUPFD) {
+      if (!VG_(fd_allowed)(RES, "fcntl(DUPFD)", tid, True)) {
+         VG_(close)(RES);
+         SET_STATUS_Failure( VKI_EMFILE );
+      } else {
+         if (VG_(clo_track_fds))
+            VG_(record_fd_open)(tid, RES, VG_(resolve_filename)(RES));
+      }
+   }
+}
 
 // XXX: wrapper only suitable for 32-bit systems
 PRE(sys_fcntl64)
@@ -2667,17 +2677,17 @@ POST(sys_fcntl64)
    }
 }
 
-//zz PRE(sys_newfstat, 0)
-//zz {
-//zz    PRINT("sys_newfstat ( %d, %p )", ARG1,ARG2);
-//zz    PRE_REG_READ2(long, "fstat", unsigned int, fd, struct stat *, buf);
-//zz    PRE_MEM_WRITE( "fstat(buf)", ARG2, sizeof(struct vki_stat) );
-//zz }
-//zz 
-//zz POST(sys_newfstat)
-//zz {
-//zz    POST_MEM_WRITE( ARG2, sizeof(struct vki_stat) );
-//zz }
+PRE(sys_newfstat)
+{
+   PRINT("sys_newfstat ( %d, %p )", ARG1,ARG2);
+   PRE_REG_READ2(long, "fstat", unsigned int, fd, struct stat *, buf);
+   PRE_MEM_WRITE( "fstat(buf)", ARG2, sizeof(struct vki_stat) );
+}
+
+POST(sys_newfstat)
+{
+   POST_MEM_WRITE( ARG2, sizeof(struct vki_stat) );
+}
 
 static vki_sigset_t fork_saved_mask;
 
@@ -2723,14 +2733,15 @@ PRE(sys_ftruncate)
    PRE_REG_READ2(long, "ftruncate", unsigned int, fd, unsigned long, length);
 }
 
-//zz PRE(sys_truncate, SfMayBlock)
-//zz {
-//zz    PRINT("sys_truncate ( %p(%s), %d )", ARG1,ARG1,ARG2);
-//zz    PRE_REG_READ2(long, "truncate", 
-//zz                  const char *, path, unsigned long, length);
-//zz    PRE_MEM_RASCIIZ( "truncate(path)", ARG1 );
-//zz }
-//zz 
+PRE(sys_truncate)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_truncate ( %p(%s), %d )", ARG1,ARG1,ARG2);
+   PRE_REG_READ2(long, "truncate", 
+                 const char *, path, unsigned long, length);
+   PRE_MEM_RASCIIZ( "truncate(path)", ARG1 );
+}
+
 //zz // XXX: this wrapper is only suitable for 32-bit platforms
 //zz PRE(sys_ftruncate64, SfMayBlock)
 //zz {
@@ -2785,19 +2796,20 @@ POST(sys_getdents64)
       POST_MEM_WRITE( ARG2, RES );
 }
 
-//zz PRE(sys_getgroups16, 0)
-//zz {
-//zz    PRINT("sys_getgroups16 ( %d, %p )", ARG1, ARG2);
-//zz    PRE_REG_READ2(long, "getgroups16", int, size, vki_old_gid_t *, list);
-//zz    if (ARG1 > 0)
-//zz       PRE_MEM_WRITE( "getgroups16(list)", ARG2, ARG1 * sizeof(vki_old_gid_t) );
-//zz }
-//zz 
-//zz POST(sys_getgroups16)
-//zz {
-//zz    if (ARG1 > 0 && RES > 0)
-//zz       POST_MEM_WRITE( ARG2, RES * sizeof(vki_old_gid_t) );
-//zz }
+PRE(sys_getgroups16)
+{
+   PRINT("sys_getgroups16 ( %d, %p )", ARG1, ARG2);
+   PRE_REG_READ2(long, "getgroups16", int, size, vki_old_gid_t *, list);
+   if (ARG1 > 0)
+      PRE_MEM_WRITE( "getgroups16(list)", ARG2, ARG1 * sizeof(vki_old_gid_t) );
+}
+
+POST(sys_getgroups16)
+{
+   vg_assert(SUCCESS);
+   if (ARG1 > 0 && RES > 0)
+      POST_MEM_WRITE( ARG2, RES * sizeof(vki_old_gid_t) );
+}
 
 PRE(sys_getgroups)
 {
@@ -2842,11 +2854,11 @@ PRE(sys_geteuid)
    PRE_REG_READ0(long, "geteuid");
 }
 
-//zz PRE(sys_getegid16, 0)
-//zz {
-//zz    PRINT("sys_getegid16 ( )");
-//zz    PRE_REG_READ0(long, "getegid16");
-//zz }
+PRE(sys_getegid16)
+{
+   PRINT("sys_getegid16 ( )");
+   PRE_REG_READ0(long, "getegid16");
+}
 
 PRE(sys_getegid)
 {
@@ -2872,11 +2884,11 @@ PRE(sys_getpid)
    PRE_REG_READ0(long, "getpid");
 }
 
-//zz PRE(sys_getpgid, 0)
-//zz {
-//zz    PRINT("sys_getpgid ( %d )", ARG1);
-//zz    PRE_REG_READ1(long, "getpgid", vki_pid_t, pid);
-//zz }
+PRE(sys_getpgid)
+{
+   PRINT("sys_getpgid ( %d )", ARG1);
+   PRE_REG_READ1(long, "getpgid", vki_pid_t, pid);
+}
 
 PRE(sys_getpgrp)
 {
@@ -2910,18 +2922,18 @@ static void common_post_getrlimit(ThreadId tid, UWord a1, UWord a2)
     }
 }
 
-//zz PRE(sys_old_getrlimit, 0)
-//zz {
-//zz    PRINT("sys_old_getrlimit ( %d, %p )", ARG1,ARG2);
-//zz    PRE_REG_READ2(long, "old_getrlimit",
-//zz                  unsigned int, resource, struct rlimit *, rlim);
-//zz    PRE_MEM_WRITE( "old_getrlimit(rlim)", ARG2, sizeof(struct vki_rlimit) );
-//zz }
-//zz 
-//zz POST(sys_old_getrlimit)
-//zz {
-//zz    common_post_getrlimit(tid, ARG1, ARG2);
-//zz }
+PRE(sys_old_getrlimit)
+{
+   PRINT("sys_old_getrlimit ( %d, %p )", ARG1,ARG2);
+   PRE_REG_READ2(long, "old_getrlimit",
+                 unsigned int, resource, struct rlimit *, rlim);
+   PRE_MEM_WRITE( "old_getrlimit(rlim)", ARG2, sizeof(struct vki_rlimit) );
+}
+
+POST(sys_old_getrlimit)
+{
+   common_post_getrlimit(tid, ARG1, ARG2);
+}
 
 PRE(sys_getrlimit)
 {
@@ -2936,19 +2948,20 @@ POST(sys_getrlimit)
    common_post_getrlimit(tid, ARG1, ARG2);
 }
 
-//zz PRE(sys_getrusage, 0)
-//zz {
-//zz    /* int getrusage (int who, struct rusage *usage); */
-//zz    PRINT("sys_getrusage ( %d, %p )", ARG1,ARG2);
-//zz    PRE_REG_READ2(long, "getrusage", int, who, struct rusage *, usage);
-//zz    PRE_MEM_WRITE( "getrusage(usage)", ARG2, sizeof(struct vki_rusage) );
-//zz }
-//zz 
-//zz POST(sys_getrusage)
-//zz {
-//zz    if (RES == 0)
-//zz       POST_MEM_WRITE( ARG2, sizeof(struct vki_rusage) );
-//zz }
+PRE(sys_getrusage)
+{
+   /* int getrusage (int who, struct rusage *usage); */
+   PRINT("sys_getrusage ( %d, %p )", ARG1,ARG2);
+   PRE_REG_READ2(long, "getrusage", int, who, struct rusage *, usage);
+   PRE_MEM_WRITE( "getrusage(usage)", ARG2, sizeof(struct vki_rusage) );
+}
+
+POST(sys_getrusage)
+{
+   vg_assert(SUCCESS);
+   if (RES == 0)
+      POST_MEM_WRITE( ARG2, sizeof(struct vki_rusage) );
+}
 
 PRE(sys_gettimeofday)
 {
@@ -2970,17 +2983,17 @@ POST(sys_gettimeofday)
    }
 }
 
-//zz PRE(sys_settimeofday, 0)
-//zz {
-//zz    PRINT("sys_settimeofday ( %p, %p )", ARG1,ARG2);
-//zz    PRE_REG_READ2(long, "settimeofday",
-//zz                  struct timeval *, tv, struct timezone *, tz);
-//zz    PRE_MEM_READ( "settimeofday(tv)", ARG1, sizeof(struct vki_timeval) );
-//zz    if (ARG2 != 0) {
-//zz       PRE_MEM_READ( "settimeofday(tz)", ARG2, sizeof(struct vki_timezone) );
-//zz       /* maybe should warn if tz->tz_dsttime is non-zero? */
-//zz    }
-//zz }
+PRE(sys_settimeofday)
+{
+   PRINT("sys_settimeofday ( %p, %p )", ARG1,ARG2);
+   PRE_REG_READ2(long, "settimeofday",
+                 struct timeval *, tv, struct timezone *, tz);
+   PRE_MEM_READ( "settimeofday(tv)", ARG1, sizeof(struct vki_timeval) );
+   if (ARG2 != 0) {
+      PRE_MEM_READ( "settimeofday(tz)", ARG2, sizeof(struct vki_timezone) );
+      /* maybe should warn if tz->tz_dsttime is non-zero? */
+   }
+}
 
 PRE(sys_getuid16)
 {
@@ -4359,20 +4372,21 @@ PRE(sys_lseek)
                  unsigned int, fd, vki_off_t, offset, unsigned int, whence);
 }
 
-//zz PRE(sys_newlstat, 0)
-//zz {
-//zz    PRINT("sys_newlstat ( %p(%s), %p )", ARG1,ARG1,ARG2);
-//zz    PRE_REG_READ2(long, "lstat", char *, file_name, struct stat *, buf);
-//zz    PRE_MEM_RASCIIZ( "lstat(file_name)", ARG1 );
-//zz    PRE_MEM_WRITE( "lstat(buf)", ARG2, sizeof(struct vki_stat) );
-//zz }
-//zz 
-//zz POST(sys_newlstat)
-//zz {
-//zz    if (RES == 0) {
-//zz       POST_MEM_WRITE( ARG2, sizeof(struct vki_stat) );
-//zz    }
-//zz }
+PRE(sys_newlstat)
+{
+   PRINT("sys_newlstat ( %p(%s), %p )", ARG1,ARG1,ARG2);
+   PRE_REG_READ2(long, "lstat", char *, file_name, struct stat *, buf);
+   PRE_MEM_RASCIIZ( "lstat(file_name)", ARG1 );
+   PRE_MEM_WRITE( "lstat(buf)", ARG2, sizeof(struct vki_stat) );
+}
+
+POST(sys_newlstat)
+{
+   vg_assert(SUCCESS);
+   if (RES == 0) {
+      POST_MEM_WRITE( ARG2, sizeof(struct vki_stat) );
+   }
+}
 
 PRE(sys_mkdir)
 {
@@ -4805,21 +4819,21 @@ PRE(sys_setgid16)
 //zz    PRINT("sys_setgid ( %d )", ARG1);
 //zz    PRE_REG_READ1(long, "setgid", vki_gid_t, gid);
 //zz }
-//zz 
-//zz PRE(sys_setsid, 0)
-//zz {
-//zz    PRINT("sys_setsid ( )");
-//zz    PRE_REG_READ0(long, "setsid");
-//zz }
-//zz 
-//zz PRE(sys_setgroups16, 0)
-//zz {
-//zz    PRINT("sys_setgroups16 ( %llu, %p )", (ULong)ARG1, ARG2);
-//zz    PRE_REG_READ2(long, "setgroups16", int, size, vki_old_gid_t *, list);
-//zz    if (ARG1 > 0)
-//zz       PRE_MEM_READ( "setgroups16(list)", ARG2, ARG1 * sizeof(vki_old_gid_t) );
-//zz }
-//zz 
+
+PRE(sys_setsid)
+{
+   PRINT("sys_setsid ( )");
+   PRE_REG_READ0(long, "setsid");
+}
+
+PRE(sys_setgroups16)
+{
+   PRINT("sys_setgroups16 ( %llu, %p )", (ULong)ARG1, ARG2);
+   PRE_REG_READ2(long, "setgroups16", int, size, vki_old_gid_t *, list);
+   if (ARG1 > 0)
+      PRE_MEM_READ( "setgroups16(list)", ARG2, ARG1 * sizeof(vki_old_gid_t) );
+}
+
 //zz PRE(sys_setgroups, 0)
 //zz {
 //zz    PRINT("setgroups ( %llu, %p )", (ULong)ARG1, ARG2);
@@ -4827,25 +4841,25 @@ PRE(sys_setgid16)
 //zz    if (ARG1 > 0)
 //zz       PRE_MEM_READ( "setgroups(list)", ARG2, ARG1 * sizeof(vki_gid_t) );
 //zz }
-//zz 
-//zz PRE(sys_setpgid, 0)
-//zz {
-//zz    PRINT("setpgid ( %d, %d )", ARG1, ARG2);
-//zz    PRE_REG_READ2(long, "setpgid", vki_pid_t, pid, vki_pid_t, pgid);
-//zz }
-//zz 
-//zz PRE(sys_setregid, 0)
-//zz {
-//zz    PRINT("sys_setregid ( %d, %d )", ARG1, ARG2);
-//zz    PRE_REG_READ2(long, "setregid", vki_gid_t, rgid, vki_gid_t, egid);
-//zz }
-//zz 
-//zz PRE(sys_setreuid16, 0)
-//zz {
-//zz    PRINT("setreuid16 ( 0x%x, 0x%x )", ARG1, ARG2);
-//zz    PRE_REG_READ2(long, "setreuid16", vki_old_uid_t, ruid, vki_old_uid_t, euid);
-//zz }
-//zz 
+
+PRE(sys_setpgid)
+{
+   PRINT("setpgid ( %d, %d )", ARG1, ARG2);
+   PRE_REG_READ2(long, "setpgid", vki_pid_t, pid, vki_pid_t, pgid);
+}
+
+PRE(sys_setregid)
+{
+   PRINT("sys_setregid ( %d, %d )", ARG1, ARG2);
+   PRE_REG_READ2(long, "setregid", vki_gid_t, rgid, vki_gid_t, egid);
+}
+
+PRE(sys_setreuid16)
+{
+   PRINT("setreuid16 ( 0x%x, 0x%x )", ARG1, ARG2);
+   PRE_REG_READ2(long, "setreuid16", vki_old_uid_t, ruid, vki_old_uid_t, euid);
+}
+
 //zz PRE(sys_setreuid, 0)
 //zz {
 //zz    PRINT("sys_setreuid ( 0x%x, 0x%x )", ARG1, ARG2);
@@ -4904,32 +4918,32 @@ PRE(sys_setuid16)
 //zz    PRE_REG_READ1(long, "setuid", vki_uid_t, uid);
 //zz }
 
-//zz PRE(sys_newstat, 0)
-//zz {
-//zz    PRINT("sys_newstat ( %p(%s), %p )", ARG1,ARG1,ARG2);
-//zz    PRE_REG_READ2(long, "stat", char *, file_name, struct stat *, buf);
-//zz    PRE_MEM_RASCIIZ( "stat(file_name)", ARG1 );
-//zz    PRE_MEM_WRITE( "stat(buf)", ARG2, sizeof(struct vki_stat) );
-//zz }
-//zz 
-//zz POST(sys_newstat)
-//zz {
-//zz    POST_MEM_WRITE( ARG2, sizeof(struct vki_stat) );
-//zz }
-//zz 
-//zz PRE(sys_statfs, 0)
-//zz {
-//zz    PRINT("sys_statfs ( %p, %p )",ARG1,ARG2);
-//zz    PRE_REG_READ2(long, "statfs", const char *, path, struct statfs *, buf);
-//zz    PRE_MEM_RASCIIZ( "statfs(path)", ARG1 );
-//zz    PRE_MEM_WRITE( "statfs(buf)", ARG2, sizeof(struct vki_statfs) );
-//zz }
-//zz 
-//zz POST(sys_statfs)
-//zz {
-//zz    POST_MEM_WRITE( ARG2, sizeof(struct vki_statfs) );
-//zz }
-//zz 
+PRE(sys_newstat)
+{
+   PRINT("sys_newstat ( %p(%s), %p )", ARG1,ARG1,ARG2);
+   PRE_REG_READ2(long, "stat", char *, file_name, struct stat *, buf);
+   PRE_MEM_RASCIIZ( "stat(file_name)", ARG1 );
+   PRE_MEM_WRITE( "stat(buf)", ARG2, sizeof(struct vki_stat) );
+}
+
+POST(sys_newstat)
+{
+   POST_MEM_WRITE( ARG2, sizeof(struct vki_stat) );
+}
+
+PRE(sys_statfs)
+{
+   PRINT("sys_statfs ( %p, %p )",ARG1,ARG2);
+   PRE_REG_READ2(long, "statfs", const char *, path, struct statfs *, buf);
+   PRE_MEM_RASCIIZ( "statfs(path)", ARG1 );
+   PRE_MEM_WRITE( "statfs(buf)", ARG2, sizeof(struct vki_statfs) );
+}
+
+POST(sys_statfs)
+{
+   POST_MEM_WRITE( ARG2, sizeof(struct vki_statfs) );
+}
+
 //zz PRE(sys_statfs64, 0)
 //zz {
 //zz    PRINT("sys_statfs64 ( %p, %llu, %p )",ARG1,(ULong)ARG2,ARG3);
@@ -5114,13 +5128,13 @@ PRE(sys_writev)
 //zz {
 //zz    POST_MEM_WRITE(ARG3, ARG2);
 //zz }
-//zz 
-//zz PRE(sys_acct, 0)
-//zz {
-//zz    PRINT("sys_acct ( %p )", ARG1);
-//zz    PRE_REG_READ1(long, "acct", const char *, filename);
-//zz    PRE_MEM_RASCIIZ( "acct(filename)", ARG1 );
-//zz }
+
+PRE(sys_acct)
+{
+   PRINT("sys_acct ( %p )", ARG1);
+   PRE_REG_READ1(long, "acct", const char *, filename);
+   PRE_MEM_RASCIIZ( "acct(filename)", ARG1 );
+}
 
 PRE(sys_pause)
 {
@@ -5346,18 +5360,18 @@ POST(sys_rt_sigprocmask)
       POST_MEM_WRITE( ARG3, sizeof(vki_sigset_t));
 }
 
-//zz PRE(sys_sigpending, 0)
-//zz {
-//zz    PRINT( "sys_sigpending ( %p )", ARG1 );
-//zz    PRE_REG_READ1(long, "sigpending", vki_old_sigset_t *, set);
-//zz    PRE_MEM_WRITE( "sigpending(set)", ARG1, sizeof(vki_old_sigset_t));
-//zz }
-//zz 
-//zz POST(sys_sigpending)
-//zz {
-//zz    POST_MEM_WRITE( ARG1, sizeof(vki_old_sigset_t) ) ;
-//zz }
-//zz 
+PRE(sys_sigpending)
+{
+   PRINT( "sys_sigpending ( %p )", ARG1 );
+   PRE_REG_READ1(long, "sigpending", vki_old_sigset_t *, set);
+   PRE_MEM_WRITE( "sigpending(set)", ARG1, sizeof(vki_old_sigset_t));
+}
+
+POST(sys_sigpending)
+{
+   POST_MEM_WRITE( ARG1, sizeof(vki_old_sigset_t) ) ;
+}
+
 //zz PRE(sys_rt_sigpending, 0)
 //zz {
 //zz    PRINT( "sys_rt_sigpending ( %p )", ARG1 );
index 0b0e77fbbbe42eed77e3773b8710ba0b8e6cbcf1..2b8f726b157dd47083d9a357a2d0b6c12ce6b864 100644 (file)
@@ -162,25 +162,25 @@ POST(sys_llseek)
 //zz {
 //zz    POST_MEM_WRITE( ARG1, sizeof(struct vki_timex) );
 //zz }
-//zz 
-//zz PRE(sys_setfsuid16, 0)
-//zz {
-//zz    PRINT("sys_setfsuid16 ( %d )", ARG1);
-//zz    PRE_REG_READ1(long, "setfsuid16", vki_old_uid_t, uid);
-//zz }
-//zz 
+
+PRE(sys_setfsuid16)
+{
+   PRINT("sys_setfsuid16 ( %d )", ARG1);
+   PRE_REG_READ1(long, "setfsuid16", vki_old_uid_t, uid);
+}
+
 //zz PRE(sys_setfsuid, 0)
 //zz {
 //zz    PRINT("sys_setfsuid ( %d )", ARG1);
 //zz    PRE_REG_READ1(long, "setfsuid", vki_uid_t, uid);
 //zz }
-//zz 
-//zz PRE(sys_setfsgid16, 0)
-//zz {
-//zz    PRINT("sys_setfsgid16 ( %d )", ARG1);
-//zz    PRE_REG_READ1(long, "setfsgid16", vki_old_gid_t, gid);
-//zz }
-//zz 
+
+PRE(sys_setfsgid16)
+{
+   PRINT("sys_setfsgid16 ( %d )", ARG1);
+   PRE_REG_READ1(long, "setfsgid16", vki_old_gid_t, gid);
+}
+
 //zz PRE(sys_setfsgid, 0)
 //zz {
 //zz    PRINT("sys_setfsgid ( %d )", ARG1);
@@ -295,62 +295,63 @@ POST(sys_getresgid)
    }
 }
 
-//zz PRE(sys_ioperm, 0)
-//zz {
-//zz    PRINT("sys_ioperm ( %d, %d, %d )", ARG1, ARG2, ARG3 );
-//zz    PRE_REG_READ3(long, "ioperm",
-//zz                  unsigned long, from, unsigned long, num, int, turn_on);
-//zz }
-//zz 
-//zz PRE(sys_syslog, MayBlock)
-//zz {
-//zz    PRINT("sys_syslog (%d, %p, %d)", ARG1,ARG2,ARG3);
-//zz    PRE_REG_READ3(long, "syslog", int, type, char *, bufp, int, len);
-//zz    switch (ARG1) {
-//zz    // The kernel uses magic numbers here, rather than named constants,
-//zz    // therefore so do we.
-//zz    case 2: case 3: case 4:
-//zz       PRE_MEM_WRITE( "syslog(bufp)", ARG2, ARG3);
-//zz       break;
-//zz    default: 
-//zz       break;
-//zz    }
-//zz }
-//zz 
-//zz POST(sys_syslog)
-//zz {
-//zz    switch (ARG1) {
-//zz    case 2: case 3: case 4:
-//zz       POST_MEM_WRITE( ARG2, ARG3 );
-//zz       break;
-//zz    default:
-//zz       break;
-//zz    }
-//zz }
-//zz 
-//zz PRE(sys_vhangup, 0)
-//zz {
-//zz    PRINT("sys_vhangup ( )");
-//zz    PRE_REG_READ0(long, "vhangup");
-//zz }
-//zz 
-//zz PRE(sys_sysinfo, 0)
-//zz {
-//zz    PRINT("sys_sysinfo ( %p )",ARG1);
-//zz    PRE_REG_READ1(long, "sysinfo", struct sysinfo *, info);
-//zz    PRE_MEM_WRITE( "sysinfo(info)", ARG1, sizeof(struct vki_sysinfo) );
-//zz }
-//zz 
-//zz POST(sys_sysinfo)
-//zz {
-//zz    POST_MEM_WRITE( ARG1, sizeof(struct vki_sysinfo) );
-//zz }
-//zz 
-//zz PRE(sys_personality, 0)
-//zz {
-//zz    PRINT("sys_personality ( %llu )", (ULong)ARG1);
-//zz    PRE_REG_READ1(long, "personality", vki_u_long, persona);
-//zz }
+PRE(sys_ioperm)
+{
+   PRINT("sys_ioperm ( %d, %d, %d )", ARG1, ARG2, ARG3 );
+   PRE_REG_READ3(long, "ioperm",
+                 unsigned long, from, unsigned long, num, int, turn_on);
+}
+
+PRE(sys_syslog)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_syslog (%d, %p, %d)", ARG1,ARG2,ARG3);
+   PRE_REG_READ3(long, "syslog", int, type, char *, bufp, int, len);
+   switch (ARG1) {
+   // The kernel uses magic numbers here, rather than named constants,
+   // therefore so do we.
+   case 2: case 3: case 4:
+      PRE_MEM_WRITE( "syslog(bufp)", ARG2, ARG3);
+      break;
+   default: 
+      break;
+   }
+}
+
+POST(sys_syslog)
+{
+   switch (ARG1) {
+   case 2: case 3: case 4:
+      POST_MEM_WRITE( ARG2, ARG3 );
+      break;
+   default:
+      break;
+   }
+}
+
+PRE(sys_vhangup)
+{
+   PRINT("sys_vhangup ( )");
+   PRE_REG_READ0(long, "vhangup");
+}
+
+PRE(sys_sysinfo)
+{
+   PRINT("sys_sysinfo ( %p )",ARG1);
+   PRE_REG_READ1(long, "sysinfo", struct sysinfo *, info);
+   PRE_MEM_WRITE( "sysinfo(info)", ARG1, sizeof(struct vki_sysinfo) );
+}
+
+POST(sys_sysinfo)
+{
+   POST_MEM_WRITE( ARG1, sizeof(struct vki_sysinfo) );
+}
+
+PRE(sys_personality)
+{
+   PRINT("sys_personality ( %llu )", (ULong)ARG1);
+   PRE_REG_READ1(long, "personality", vki_u_long, persona);
+}
 
 PRE(sys_sysctl)
 {
index 7a4c1129e35aaae2beb1804080aeed372faa6416..53395beb1dd5469877202258e74e3ee53d50048d 100644 (file)
@@ -951,39 +951,41 @@ DECL_TEMPLATE(x86_linux, sys_rt_sigreturn);
 DECL_TEMPLATE(x86_linux, sys_modify_ldt);
 DECL_TEMPLATE(x86_linux, sys_set_thread_area);
 DECL_TEMPLATE(x86_linux, sys_ptrace);
+DECL_TEMPLATE(x86_linux, sys_sigaction);
+DECL_TEMPLATE(x86_linux, old_select);
 
-//zz PRE(old_select, MayBlock)
-//zz {
-//zz    /* struct sel_arg_struct {
-//zz       unsigned long n;
-//zz       fd_set *inp, *outp, *exp;
-//zz       struct timeval *tvp;
-//zz       };
-//zz    */
-//zz    PRE_REG_READ1(long, "old_select", struct sel_arg_struct *, args);
-//zz    PRE_MEM_READ( "old_select(args)", ARG1, 5*sizeof(UWord) );
-//zz 
-//zz    {
-//zz       UInt* arg_struct = (UInt*)ARG1;
-//zz       UInt a1, a2, a3, a4, a5;
-//zz 
-//zz       a1 = arg_struct[0];
-//zz       a2 = arg_struct[1];
-//zz       a3 = arg_struct[2];
-//zz       a4 = arg_struct[3];
-//zz       a5 = arg_struct[4];
-//zz 
-//zz       PRINT("old_select ( %d, %p, %p, %p, %p )", a1,a2,a3,a4,a5);
-//zz       if (a2 != (Addr)NULL)
-//zz          PRE_MEM_READ( "old_select(readfds)",   a2, a1/8 /* __FD_SETSIZE/8 */ );
-//zz       if (a3 != (Addr)NULL)
-//zz          PRE_MEM_READ( "old_select(writefds)",  a3, a1/8 /* __FD_SETSIZE/8 */ );
-//zz       if (a4 != (Addr)NULL)
-//zz          PRE_MEM_READ( "old_select(exceptfds)", a4, a1/8 /* __FD_SETSIZE/8 */ );
-//zz       if (a5 != (Addr)NULL)
-//zz          PRE_MEM_READ( "old_select(timeout)", a5, sizeof(struct vki_timeval) );
-//zz    }
-//zz }
+PRE(old_select)
+{
+   /* struct sel_arg_struct {
+      unsigned long n;
+      fd_set *inp, *outp, *exp;
+      struct timeval *tvp;
+      };
+   */
+   PRE_REG_READ1(long, "old_select", struct sel_arg_struct *, args);
+   PRE_MEM_READ( "old_select(args)", ARG1, 5*sizeof(UWord) );
+   *flags |= SfMayBlock;
+   {
+      UInt* arg_struct = (UInt*)ARG1;
+      UInt a1, a2, a3, a4, a5;
+
+      a1 = arg_struct[0];
+      a2 = arg_struct[1];
+      a3 = arg_struct[2];
+      a4 = arg_struct[3];
+      a5 = arg_struct[4];
+
+      PRINT("old_select ( %d, %p, %p, %p, %p )", a1,a2,a3,a4,a5);
+      if (a2 != (Addr)NULL)
+         PRE_MEM_READ( "old_select(readfds)",   a2, a1/8 /* __FD_SETSIZE/8 */ );
+      if (a3 != (Addr)NULL)
+         PRE_MEM_READ( "old_select(writefds)",  a3, a1/8 /* __FD_SETSIZE/8 */ );
+      if (a4 != (Addr)NULL)
+         PRE_MEM_READ( "old_select(exceptfds)", a4, a1/8 /* __FD_SETSIZE/8 */ );
+      if (a5 != (Addr)NULL)
+         PRE_MEM_READ( "old_select(timeout)", a5, sizeof(struct vki_timeval) );
+   }
+}
 
 PRE(sys_clone)
 {
@@ -1820,81 +1822,69 @@ POST(sys_socketcall)
 #  undef ARG2_5
 }
 
-//zz // jrs 20050207: this is from the svn branch
-//zz //PRE(sys_sigaction, Special)
-//zz //{
-//zz //   PRINT("sys_sigaction ( %d, %p, %p )", ARG1,ARG2,ARG3);
-//zz //   PRE_REG_READ3(int, "sigaction",
-//zz //                 int, signum, const struct old_sigaction *, act,
-//zz //                 struct old_sigaction *, oldact)
-//zz //   if (ARG2 != 0)
-//zz //      PRE_MEM_READ( "sigaction(act)", ARG2, sizeof(struct vki_old_sigaction));
-//zz //   if (ARG3 != 0)
-//zz //      PRE_MEM_WRITE( "sigaction(oldact)", ARG3, sizeof(struct vki_old_sigaction));
-//zz //
-//zz //   VG_(do_sys_sigaction)(tid);
-//zz //}
-//zz 
-//zz /* Convert from non-RT to RT sigset_t's */
-//zz static void convert_sigset_to_rt(const vki_old_sigset_t *oldset, vki_sigset_t *set)
-//zz {
-//zz    VG_(sigemptyset)(set);
-//zz    set->sig[0] = *oldset;
-//zz }
-//zz PRE(sys_sigaction, Special)
-//zz {
-//zz    struct vki_sigaction new, old;
-//zz    struct vki_sigaction *newp, *oldp;
-//zz 
-//zz    PRINT("sys_sigaction ( %d, %p, %p )", ARG1,ARG2,ARG3);
-//zz    PRE_REG_READ3(int, "sigaction",
-//zz                  int, signum, const struct old_sigaction *, act,
-//zz                  struct old_sigaction *, oldact);
-//zz 
-//zz    newp = oldp = NULL;
-//zz 
-//zz    if (ARG2 != 0)
-//zz       PRE_MEM_READ( "sigaction(act)", ARG2, sizeof(struct vki_old_sigaction));
-//zz 
-//zz    if (ARG3 != 0) {
-//zz       PRE_MEM_WRITE( "sigaction(oldact)", ARG3, sizeof(struct vki_old_sigaction));
-//zz       oldp = &old;
-//zz    }
-//zz 
-//zz    //jrs 20050207: what?!  how can this make any sense?
-//zz    //if (VG_(is_kerror)(SYSRES))
-//zz    //   return;
-//zz 
-//zz    if (ARG2 != 0) {
-//zz       struct vki_old_sigaction *oldnew = (struct vki_old_sigaction *)ARG2;
-//zz 
-//zz       new.ksa_handler = oldnew->ksa_handler;
-//zz       new.sa_flags = oldnew->sa_flags;
-//zz       new.sa_restorer = oldnew->sa_restorer;
-//zz       convert_sigset_to_rt(&oldnew->sa_mask, &new.sa_mask);
-//zz       newp = &new;
-//zz    }
-//zz 
-//zz    SET_STATUS_( VG_(do_sys_sigaction)(ARG1, newp, oldp) );
-//zz 
-//zz    if (ARG3 != 0 && RES == 0) {
-//zz       struct vki_old_sigaction *oldold = (struct vki_old_sigaction *)ARG3;
-//zz 
-//zz       oldold->ksa_handler = oldp->ksa_handler;
-//zz       oldold->sa_flags = oldp->sa_flags;
-//zz       oldold->sa_restorer = oldp->sa_restorer;
-//zz       oldold->sa_mask = oldp->sa_mask.sig[0];
-//zz    }
-//zz }
-//zz 
-//zz POST(sys_sigaction)
-//zz {
-//zz    if (RES == 0 && ARG3 != 0)
-//zz       POST_MEM_WRITE( ARG3, sizeof(struct vki_old_sigaction));
-//zz }
-//zz 
-//zz #undef PRE
-//zz #undef POST
+/* Convert from non-RT to RT sigset_t's */
+static 
+void convert_sigset_to_rt(const vki_old_sigset_t *oldset, vki_sigset_t *set)
+{
+   VG_(sigemptyset)(set);
+   set->sig[0] = *oldset;
+}
+PRE(sys_sigaction)
+{
+   struct vki_sigaction new, old;
+   struct vki_sigaction *newp, *oldp;
+
+   PRINT("sys_sigaction ( %d, %p, %p )", ARG1,ARG2,ARG3);
+   PRE_REG_READ3(int, "sigaction",
+                 int, signum, const struct old_sigaction *, act,
+                 struct old_sigaction *, oldact);
+
+   newp = oldp = NULL;
+
+   if (ARG2 != 0)
+      PRE_MEM_READ( "sigaction(act)", ARG2, sizeof(struct vki_old_sigaction));
+
+   if (ARG3 != 0) {
+      PRE_MEM_WRITE( "sigaction(oldact)", ARG3, sizeof(struct vki_old_sigaction));
+      oldp = &old;
+   }
+
+   //jrs 20050207: what?!  how can this make any sense?
+   //if (VG_(is_kerror)(SYSRES))
+   //   return;
+
+   if (ARG2 != 0) {
+      struct vki_old_sigaction *oldnew = (struct vki_old_sigaction *)ARG2;
+
+      new.ksa_handler = oldnew->ksa_handler;
+      new.sa_flags = oldnew->sa_flags;
+      new.sa_restorer = oldnew->sa_restorer;
+      convert_sigset_to_rt(&oldnew->sa_mask, &new.sa_mask);
+      newp = &new;
+   }
+
+   SET_STATUS_from_SysRes( VG_(do_sys_sigaction)(ARG1, newp, oldp) );
+
+   if (ARG3 != 0 && SUCCESS && RES == 0) {
+      struct vki_old_sigaction *oldold = (struct vki_old_sigaction *)ARG3;
+
+      oldold->ksa_handler = oldp->ksa_handler;
+      oldold->sa_flags = oldp->sa_flags;
+      oldold->sa_restorer = oldp->sa_restorer;
+      oldold->sa_mask = oldp->sa_mask.sig[0];
+   }
+}
+
+POST(sys_sigaction)
+{
+   vg_assert(SUCCESS);
+   if (RES == 0 && ARG3 != 0)
+      POST_MEM_WRITE( ARG3, sizeof(struct vki_old_sigaction));
+}
+
+#undef PRE
+#undef POST
+
 
 /* ---------------------------------------------------------------------
    The x86/Linux syscall table
@@ -1974,46 +1964,46 @@ const SyscallTableEntry VGP_(syscall_table)[] = {
    GENX_(__NR_getgid,            sys_getgid16),       // 47
 //zz    //   (__NR_signal,            sys_signal),         // 48 */* (ANSI C)
    GENX_(__NR_geteuid,           sys_geteuid16),      // 49
-//zz 
-//zz    GENX_(__NR_getegid,           sys_getegid16),      // 50
-//zz    GENX_(__NR_acct,              sys_acct),           // 51
-//zz    LINX_(__NR_umount2,           sys_umount),         // 52
+
+   GENX_(__NR_getegid,           sys_getegid16),      // 50
+   GENX_(__NR_acct,              sys_acct),           // 51
+   LINX_(__NR_umount2,           sys_umount),         // 52
    GENX_(__NR_lock,              sys_ni_syscall),     // 53
    GENXY(__NR_ioctl,             sys_ioctl),          // 54
-//zz 
-//zz    GENXY(__NR_fcntl,             sys_fcntl),          // 55
+
+   GENXY(__NR_fcntl,             sys_fcntl),          // 55
    GENX_(__NR_mpx,               sys_ni_syscall),     // 56
-//zz    GENX_(__NR_setpgid,           sys_setpgid),        // 57
+   GENX_(__NR_setpgid,           sys_setpgid),        // 57
    GENX_(__NR_ulimit,            sys_ni_syscall),     // 58
 //zz    //   (__NR_oldolduname,       sys_olduname),       // 59 Linux -- obsolete
 //zz 
    GENX_(__NR_umask,             sys_umask),          // 60
-//zz    GENX_(__NR_chroot,            sys_chroot),         // 61
+   GENX_(__NR_chroot,            sys_chroot),         // 61
 //zz    //   (__NR_ustat,             sys_ustat)           // 62 SVr4 -- deprecated
    GENXY(__NR_dup2,              sys_dup2),           // 63
    GENX_(__NR_getppid,           sys_getppid),        // 64
 
    GENX_(__NR_getpgrp,           sys_getpgrp),        // 65
-//zz    GENX_(__NR_setsid,            sys_setsid),         // 66
-//zz    PLAXY(__NR_sigaction,         sys_sigaction),      // 67
+   GENX_(__NR_setsid,            sys_setsid),         // 66
+   PLAXY(__NR_sigaction,         sys_sigaction),      // 67
 //zz    //   (__NR_sgetmask,          sys_sgetmask),       // 68 */* (ANSI C)
 //zz    //   (__NR_ssetmask,          sys_ssetmask),       // 69 */* (ANSI C)
 //zz 
-//zz    GENX_(__NR_setreuid,          sys_setreuid16),     // 70
-//zz    GENX_(__NR_setregid,          sys_setregid16),     // 71
+   GENX_(__NR_setreuid,          sys_setreuid16),     // 70
+   GENX_(__NR_setregid,          sys_setregid16),     // 71
 //zz    GENX_(__NR_sigsuspend,        sys_sigsuspend),     // 72
-//zz    GENXY(__NR_sigpending,        sys_sigpending),     // 73
+   GENXY(__NR_sigpending,        sys_sigpending),     // 73
 //zz    //   (__NR_sethostname,       sys_sethostname),    // 74 */*
 //zz 
    GENX_(__NR_setrlimit,         sys_setrlimit),      // 75
-//zz    GENXY(__NR_getrlimit,         sys_old_getrlimit),  // 76
-//zz    GENXY(__NR_getrusage,         sys_getrusage),      // 77
+   GENXY(__NR_getrlimit,         sys_old_getrlimit),  // 76
+   GENXY(__NR_getrusage,         sys_getrusage),      // 77
    GENXY(__NR_gettimeofday,      sys_gettimeofday),   // 78
-//zz    GENX_(__NR_settimeofday,      sys_settimeofday),   // 79
-//zz 
-//zz    GENXY(__NR_getgroups,         sys_getgroups16),    // 80
-//zz    GENX_(__NR_setgroups,         sys_setgroups16),    // 81
-//zz    PLAX_(__NR_select,            old_select),         // 82
+   GENX_(__NR_settimeofday,      sys_settimeofday),   // 79
+
+   GENXY(__NR_getgroups,         sys_getgroups16),    // 80
+   GENX_(__NR_setgroups,         sys_setgroups16),    // 81
+   PLAX_(__NR_select,            old_select),         // 82
    GENX_(__NR_symlink,           sys_symlink),        // 83
 //zz    //   (__NR_oldlstat,          sys_lstat),          // 84 -- obsolete
 //zz 
@@ -2025,36 +2015,36 @@ const SyscallTableEntry VGP_(syscall_table)[] = {
 //zz 
    PLAX_(__NR_mmap,              old_mmap),           // 90
    GENXY(__NR_munmap,            sys_munmap),         // 91
-//zz    GENX_(__NR_truncate,          sys_truncate),       // 92
+   GENX_(__NR_truncate,          sys_truncate),       // 92
    GENX_(__NR_ftruncate,         sys_ftruncate),      // 93
-//zz    GENX_(__NR_fchmod,            sys_fchmod),         // 94
-//zz 
-//zz    GENX_(__NR_fchown,            sys_fchown16),       // 95
-//zz    GENX_(__NR_getpriority,       sys_getpriority),    // 96
-//zz    GENX_(__NR_setpriority,       sys_setpriority),    // 97
+   GENX_(__NR_fchmod,            sys_fchmod),         // 94
+
+   GENX_(__NR_fchown,            sys_fchown16),       // 95
+   GENX_(__NR_getpriority,       sys_getpriority),    // 96
+   GENX_(__NR_setpriority,       sys_setpriority),    // 97
    GENX_(__NR_profil,            sys_ni_syscall),     // 98
-//zz    GENXY(__NR_statfs,            sys_statfs),         // 99
-//zz 
-//zz    GENXY(__NR_fstatfs,           sys_fstatfs),        // 100
-//zz    LINX_(__NR_ioperm,            sys_ioperm),         // 101
+   GENXY(__NR_statfs,            sys_statfs),         // 99
+
+   GENXY(__NR_fstatfs,           sys_fstatfs),        // 100
+   LINX_(__NR_ioperm,            sys_ioperm),         // 101
    PLAXY(__NR_socketcall,        sys_socketcall),     // 102 x86/Linux-only
-//zz    LINXY(__NR_syslog,            sys_syslog),         // 103
-//zz    GENXY(__NR_setitimer,         sys_setitimer),      // 104
-//zz 
-//zz    GENXY(__NR_getitimer,         sys_getitimer),      // 105
-//zz    GENXY(__NR_stat,              sys_newstat),        // 106
-//zz    GENXY(__NR_lstat,             sys_newlstat),       // 107
-//zz    GENXY(__NR_fstat,             sys_newfstat),       // 108
+   LINXY(__NR_syslog,            sys_syslog),         // 103
+   GENXY(__NR_setitimer,         sys_setitimer),      // 104
+
+   GENXY(__NR_getitimer,         sys_getitimer),      // 105
+   GENXY(__NR_stat,              sys_newstat),        // 106
+   GENXY(__NR_lstat,             sys_newlstat),       // 107
+   GENXY(__NR_fstat,             sys_newfstat),       // 108
 //zz    //   (__NR_olduname,          sys_uname),          // 109 -- obsolete
 //zz 
-//zz    GENX_(__NR_iopl,              sys_iopl),           // 110
-//zz    LINX_(__NR_vhangup,           sys_vhangup),        // 111
+   GENX_(__NR_iopl,              sys_iopl),           // 110
+   LINX_(__NR_vhangup,           sys_vhangup),        // 111
    GENX_(__NR_idle,              sys_ni_syscall),     // 112
 //zz    //   (__NR_vm86old,           sys_vm86old),        // 113 x86/Linux-only
    GENXY(__NR_wait4,             sys_wait4),          // 114
 //zz 
 //zz    //   (__NR_swapoff,           sys_swapoff),        // 115 */Linux 
-//zz    LINXY(__NR_sysinfo,           sys_sysinfo),        // 116
+   LINXY(__NR_sysinfo,           sys_sysinfo),        // 116
    PLAXY(__NR_ipc,               sys_ipc),            // 117
    GENX_(__NR_fsync,             sys_fsync),          // 118
    PLAX_(__NR_sigreturn,         sys_sigreturn),      // 119 ?/Linux
@@ -2069,38 +2059,38 @@ const SyscallTableEntry VGP_(syscall_table)[] = {
    GENXY(__NR_sigprocmask,       sys_sigprocmask),    // 126
 //zz    // Nb: create_module() was removed 2.4-->2.6
    GENX_(__NR_create_module,     sys_ni_syscall),     // 127
-//zz    GENX_(__NR_init_module,       sys_init_module),    // 128
+   GENX_(__NR_init_module,       sys_init_module),    // 128
 //zz    //   (__NR_delete_module,     sys_delete_module),  // 129 (*/Linux)?
 //zz 
 //zz    // Nb: get_kernel_syms() was removed 2.4-->2.6
    GENX_(__NR_get_kernel_syms,   sys_ni_syscall),     // 130
-//zz    GENX_(__NR_quotactl,          sys_quotactl),       // 131
-//zz    GENX_(__NR_getpgid,           sys_getpgid),        // 132
-//zz    GENX_(__NR_fchdir,            sys_fchdir),         // 133
+   GENX_(__NR_quotactl,          sys_quotactl),       // 131
+   GENX_(__NR_getpgid,           sys_getpgid),        // 132
+   GENX_(__NR_fchdir,            sys_fchdir),         // 133
 //zz    //   (__NR_bdflush,           sys_bdflush),        // 134 */Linux
 //zz 
 //zz    //   (__NR_sysfs,             sys_sysfs),          // 135 SVr4
-//zz    LINX_(__NR_personality,       sys_personality),    // 136
+   LINX_(__NR_personality,       sys_personality),    // 136
    GENX_(__NR_afs_syscall,       sys_ni_syscall),     // 137
-//zz    LINX_(__NR_setfsuid,          sys_setfsuid16),     // 138
-//zz    LINX_(__NR_setfsgid,          sys_setfsgid16),     // 139
-//zz 
+   LINX_(__NR_setfsuid,          sys_setfsuid16),     // 138
+   LINX_(__NR_setfsgid,          sys_setfsgid16),     // 139
    LINXY(__NR__llseek,           sys_llseek),         // 140
    GENXY(__NR_getdents,          sys_getdents),       // 141
    GENX_(__NR__newselect,        sys_select),         // 142
-//zz    GENX_(__NR_flock,             sys_flock),          // 143
-//zz    GENX_(__NR_msync,             sys_msync),          // 144
-//zz 
+   GENX_(__NR_flock,             sys_flock),          // 143
+   GENX_(__NR_msync,             sys_msync),          // 144
+
    GENXY(__NR_readv,             sys_readv),          // 145
    GENX_(__NR_writev,            sys_writev),         // 146
-//zz    GENX_(__NR_getsid,            sys_getsid),         // 147
-//zz    GENX_(__NR_fdatasync,         sys_fdatasync),      // 148
+   GENX_(__NR_getsid,            sys_getsid),         // 147
+   GENX_(__NR_fdatasync,         sys_fdatasync),      // 148
    LINXY(__NR__sysctl,           sys_sysctl),         // 149
-//zz 
-//zz    GENX_(__NR_mlock,             sys_mlock),          // 150
-//zz    GENX_(__NR_munlock,           sys_munlock),        // 151
-//zz    GENX_(__NR_mlockall,          sys_mlockall),       // 152
-//zz    GENX_(__NR_munlockall,        sys_munlockall),     // 153
+
+   GENX_(__NR_mlock,             sys_mlock),          // 150
+   GENX_(__NR_munlock,           sys_munlock),        // 151
+   GENX_(__NR_mlockall,          sys_mlockall),       // 152
+   GENX_(__NR_munlockall,        sys_munlockall),     // 153
 //zz    GENXY(__NR_sched_setparam,    sys_sched_setparam), // 154
 //zz 
    GENXY(__NR_sched_getparam,         sys_sched_getparam),        // 155