PRE_REG_READ1(long, "iopl", unsigned long, level);
}
-//zz PRE(sys_setxattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_setxattr ( %p, %p, %p, %llu, %d )",
-//zz ARG1, ARG2, ARG3, (ULong)ARG4, ARG5);
-//zz PRE_REG_READ5(long, "setxattr",
-//zz char *, path, char *, name,
-//zz void *, value, vki_size_t, size, int, flags);
-//zz PRE_MEM_RASCIIZ( "setxattr(path)", ARG1 );
-//zz PRE_MEM_RASCIIZ( "setxattr(name)", ARG2 );
-//zz PRE_MEM_READ( "setxattr(value)", ARG3, ARG4 );
-//zz }
-//zz
-//zz PRE(sys_lsetxattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_lsetxattr ( %p, %p, %p, %llu, %d )",
-//zz ARG1, ARG2, ARG3, (ULong)ARG4, ARG5);
-//zz PRE_REG_READ5(long, "lsetxattr",
-//zz char *, path, char *, name,
-//zz void *, value, vki_size_t, size, int, flags);
-//zz PRE_MEM_RASCIIZ( "lsetxattr(path)", ARG1 );
-//zz PRE_MEM_RASCIIZ( "lsetxattr(name)", ARG2 );
-//zz PRE_MEM_READ( "lsetxattr(value)", ARG3, ARG4 );
-//zz }
-//zz
-//zz PRE(sys_fsetxattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_fsetxattr ( %d, %p, %p, %llu, %d )",
-//zz ARG1, ARG2, ARG3, (ULong)ARG4, ARG5);
-//zz PRE_REG_READ5(long, "fsetxattr",
-//zz int, fd, char *, name, void *, value,
-//zz vki_size_t, size, int, flags);
-//zz PRE_MEM_RASCIIZ( "fsetxattr(name)", ARG2 );
-//zz PRE_MEM_READ( "fsetxattr(value)", ARG3, ARG4 );
-//zz }
+PRE(sys_setxattr)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_setxattr ( %p, %p, %p, %llu, %d )",
+ ARG1, ARG2, ARG3, (ULong)ARG4, ARG5);
+ PRE_REG_READ5(long, "setxattr",
+ char *, path, char *, name,
+ void *, value, vki_size_t, size, int, flags);
+ PRE_MEM_RASCIIZ( "setxattr(path)", ARG1 );
+ PRE_MEM_RASCIIZ( "setxattr(name)", ARG2 );
+ PRE_MEM_READ( "setxattr(value)", ARG3, ARG4 );
+}
+
+PRE(sys_lsetxattr)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_lsetxattr ( %p, %p, %p, %llu, %d )",
+ ARG1, ARG2, ARG3, (ULong)ARG4, ARG5);
+ PRE_REG_READ5(long, "lsetxattr",
+ char *, path, char *, name,
+ void *, value, vki_size_t, size, int, flags);
+ PRE_MEM_RASCIIZ( "lsetxattr(path)", ARG1 );
+ PRE_MEM_RASCIIZ( "lsetxattr(name)", ARG2 );
+ PRE_MEM_READ( "lsetxattr(value)", ARG3, ARG4 );
+}
+
+PRE(sys_fsetxattr)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_fsetxattr ( %d, %p, %p, %llu, %d )",
+ ARG1, ARG2, ARG3, (ULong)ARG4, ARG5);
+ PRE_REG_READ5(long, "fsetxattr",
+ int, fd, char *, name, void *, value,
+ vki_size_t, size, int, flags);
+ PRE_MEM_RASCIIZ( "fsetxattr(name)", ARG2 );
+ PRE_MEM_READ( "fsetxattr(value)", ARG3, ARG4 );
+}
PRE(sys_getxattr)
{
PRE_MEM_RASCIIZ( "getxattr(name)", ARG2 );
PRE_MEM_WRITE( "getxattr(value)", ARG3, ARG4 );
}
-
POST(sys_getxattr)
{
vg_assert(SUCCESS);
}
}
-//zz PRE(sys_lgetxattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_lgetxattr ( %p, %p, %p, %llu )", ARG1,ARG2,ARG3, (ULong)ARG4);
-//zz PRE_REG_READ4(ssize_t, "lgetxattr",
-//zz char *, path, char *, name, void *, value, vki_size_t, size);
-//zz PRE_MEM_RASCIIZ( "lgetxattr(path)", ARG1 );
-//zz PRE_MEM_RASCIIZ( "lgetxattr(name)", ARG2 );
-//zz PRE_MEM_WRITE( "lgetxattr(value)", ARG3, ARG4 );
-//zz }
-//zz
-//zz POST(sys_lgetxattr)
-//zz {
-//zz if (RES > 0 && ARG3 != (Addr)NULL) {
-//zz POST_MEM_WRITE( ARG3, RES );
-//zz }
-//zz }
-//zz
-//zz PRE(sys_fgetxattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_fgetxattr ( %d, %p, %p, %llu )", ARG1, ARG2, ARG3, (ULong)ARG4);
-//zz PRE_REG_READ4(ssize_t, "fgetxattr",
-//zz int, fd, char *, name, void *, value, vki_size_t, size);
-//zz PRE_MEM_RASCIIZ( "fgetxattr(name)", ARG2 );
-//zz PRE_MEM_WRITE( "fgetxattr(value)", ARG3, ARG4 );
-//zz }
-//zz
-//zz POST(sys_fgetxattr)
-//zz {
-//zz if (RES > 0 && ARG3 != (Addr)NULL)
-//zz POST_MEM_WRITE( ARG3, RES );
-//zz }
-//zz
-//zz PRE(sys_listxattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_listxattr ( %p, %p, %llu )", ARG1, ARG2, (ULong)ARG3);
-//zz PRE_REG_READ3(ssize_t, "listxattr",
-//zz char *, path, char *, list, vki_size_t, size);
-//zz PRE_MEM_RASCIIZ( "listxattr(path)", ARG1 );
-//zz PRE_MEM_WRITE( "listxattr(list)", ARG2, ARG3 );
-//zz }
-//zz
-//zz POST(sys_listxattr)
-//zz {
-//zz if (RES > 0 && ARG2 != (Addr)NULL)
-//zz POST_MEM_WRITE( ARG2, RES );
-//zz }
-//zz
-//zz PRE(sys_llistxattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_llistxattr ( %p, %p, %llu )", ARG1, ARG2, (ULong)ARG3);
-//zz PRE_REG_READ3(ssize_t, "llistxattr",
-//zz char *, path, char *, list, vki_size_t, size);
-//zz PRE_MEM_RASCIIZ( "llistxattr(path)", ARG1 );
-//zz PRE_MEM_WRITE( "llistxattr(list)", ARG2, ARG3 );
-//zz }
-//zz
-//zz POST(sys_llistxattr)
-//zz {
-//zz if (RES > 0 && ARG2 != (Addr)NULL)
-//zz POST_MEM_WRITE( ARG2, RES );
-//zz }
-//zz
-//zz PRE(sys_flistxattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_flistxattr ( %d, %p, %llu )", ARG1, ARG2, (ULong)ARG3);
-//zz PRE_REG_READ3(ssize_t, "flistxattr",
-//zz int, fd, char *, list, vki_size_t, size);
-//zz PRE_MEM_WRITE( "flistxattr(list)", ARG2, ARG3 );
-//zz }
-//zz
-//zz POST(sys_flistxattr)
-//zz {
-//zz if (RES > 0 && ARG2 != (Addr)NULL)
-//zz POST_MEM_WRITE( ARG2, RES );
-//zz }
-//zz
-//zz PRE(sys_removexattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_removexattr ( %p, %p )", ARG1, ARG2);
-//zz PRE_REG_READ2(long, "removexattr", char *, path, char *, name);
-//zz PRE_MEM_RASCIIZ( "removexattr(path)", ARG1 );
-//zz PRE_MEM_RASCIIZ( "removexattr(name)", ARG2 );
-//zz }
-//zz
-//zz PRE(sys_lremovexattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_lremovexattr ( %p, %p )", ARG1, ARG2);
-//zz PRE_REG_READ2(long, "lremovexattr", char *, path, char *, name);
-//zz PRE_MEM_RASCIIZ( "lremovexattr(path)", ARG1 );
-//zz PRE_MEM_RASCIIZ( "lremovexattr(name)", ARG2 );
-//zz }
-//zz
-//zz PRE(sys_fremovexattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_fremovexattr ( %d, %p )", ARG1, ARG2);
-//zz PRE_REG_READ2(long, "fremovexattr", int, fd, char *, name);
-//zz PRE_MEM_RASCIIZ( "fremovexattr(name)", ARG2 );
-//zz }
+PRE(sys_lgetxattr)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_lgetxattr ( %p, %p, %p, %llu )", ARG1,ARG2,ARG3, (ULong)ARG4);
+ PRE_REG_READ4(ssize_t, "lgetxattr",
+ char *, path, char *, name, void *, value, vki_size_t, size);
+ PRE_MEM_RASCIIZ( "lgetxattr(path)", ARG1 );
+ PRE_MEM_RASCIIZ( "lgetxattr(name)", ARG2 );
+ PRE_MEM_WRITE( "lgetxattr(value)", ARG3, ARG4 );
+}
+POST(sys_lgetxattr)
+{
+ vg_assert(SUCCESS);
+ if (RES > 0 && ARG3 != (Addr)NULL) {
+ POST_MEM_WRITE( ARG3, RES );
+ }
+}
+
+PRE(sys_fgetxattr)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_fgetxattr ( %d, %p, %p, %llu )", ARG1, ARG2, ARG3, (ULong)ARG4);
+ PRE_REG_READ4(ssize_t, "fgetxattr",
+ int, fd, char *, name, void *, value, vki_size_t, size);
+ PRE_MEM_RASCIIZ( "fgetxattr(name)", ARG2 );
+ PRE_MEM_WRITE( "fgetxattr(value)", ARG3, ARG4 );
+}
+POST(sys_fgetxattr)
+{
+ if (RES > 0 && ARG3 != (Addr)NULL)
+ POST_MEM_WRITE( ARG3, RES );
+}
+
+PRE(sys_listxattr)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_listxattr ( %p, %p, %llu )", ARG1, ARG2, (ULong)ARG3);
+ PRE_REG_READ3(ssize_t, "listxattr",
+ char *, path, char *, list, vki_size_t, size);
+ PRE_MEM_RASCIIZ( "listxattr(path)", ARG1 );
+ PRE_MEM_WRITE( "listxattr(list)", ARG2, ARG3 );
+}
+POST(sys_listxattr)
+{
+ if (RES > 0 && ARG2 != (Addr)NULL)
+ POST_MEM_WRITE( ARG2, RES );
+}
+
+PRE(sys_llistxattr)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_llistxattr ( %p, %p, %llu )", ARG1, ARG2, (ULong)ARG3);
+ PRE_REG_READ3(ssize_t, "llistxattr",
+ char *, path, char *, list, vki_size_t, size);
+ PRE_MEM_RASCIIZ( "llistxattr(path)", ARG1 );
+ PRE_MEM_WRITE( "llistxattr(list)", ARG2, ARG3 );
+}
+POST(sys_llistxattr)
+{
+ if (RES > 0 && ARG2 != (Addr)NULL)
+ POST_MEM_WRITE( ARG2, RES );
+}
+
+PRE(sys_flistxattr)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_flistxattr ( %d, %p, %llu )", ARG1, ARG2, (ULong)ARG3);
+ PRE_REG_READ3(ssize_t, "flistxattr",
+ int, fd, char *, list, vki_size_t, size);
+ PRE_MEM_WRITE( "flistxattr(list)", ARG2, ARG3 );
+}
+POST(sys_flistxattr)
+{
+ if (RES > 0 && ARG2 != (Addr)NULL)
+ POST_MEM_WRITE( ARG2, RES );
+}
+
+PRE(sys_removexattr)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_removexattr ( %p, %p )", ARG1, ARG2);
+ PRE_REG_READ2(long, "removexattr", char *, path, char *, name);
+ PRE_MEM_RASCIIZ( "removexattr(path)", ARG1 );
+ PRE_MEM_RASCIIZ( "removexattr(name)", ARG2 );
+}
+
+PRE(sys_lremovexattr)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_lremovexattr ( %p, %p )", ARG1, ARG2);
+ PRE_REG_READ2(long, "lremovexattr", char *, path, char *, name);
+ PRE_MEM_RASCIIZ( "lremovexattr(path)", ARG1 );
+ PRE_MEM_RASCIIZ( "lremovexattr(name)", ARG2 );
+}
+
+PRE(sys_fremovexattr)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_fremovexattr ( %d, %p )", ARG1, ARG2);
+ PRE_REG_READ2(long, "fremovexattr", int, fd, char *, name);
+ PRE_MEM_RASCIIZ( "fremovexattr(name)", ARG2 );
+}
PRE(sys_quotactl)
{
PRE_MEM_RASCIIZ( "quotactl(special)", ARG2 );
}
-//zz // XXX: this wrapper is only suitable for 32-bit platforms
-//zz PRE(sys_lookup_dcookie, 0)
-//zz {
-//zz PRINT("sys_lookup_dcookie (0x%llx, %p, %d)", LOHI64(ARG1,ARG2), ARG3, ARG4);
-//zz PRE_REG_READ4(long, "lookup_dcookie",
-//zz vki_u32, cookie_low32, vki_u32, cookie_high32,
-//zz char *, buf, vki_size_t, len);
-//zz PRE_MEM_WRITE( "lookup_dcookie(buf)", ARG3, ARG4);
-//zz }
-//zz
-//zz POST(sys_lookup_dcookie)
-//zz {
-//zz if (ARG3 != (Addr)NULL)
-//zz POST_MEM_WRITE( ARG3, RES);
-//zz }
+// XXX: this wrapper is only suitable for 32-bit platforms
+#if defined(VGP_x86_linux)
+PRE(sys_lookup_dcookie)
+{
+ PRINT("sys_lookup_dcookie (0x%llx, %p, %d)", LOHI64(ARG1,ARG2), ARG3, ARG4);
+ PRE_REG_READ4(long, "lookup_dcookie",
+ vki_u32, cookie_low32, vki_u32, cookie_high32,
+ char *, buf, vki_size_t, len);
+ PRE_MEM_WRITE( "lookup_dcookie(buf)", ARG3, ARG4);
+}
+POST(sys_lookup_dcookie)
+{
+ vg_assert(SUCCESS);
+ if (ARG3 != (Addr)NULL)
+ POST_MEM_WRITE( ARG3, RES);
+}
+#endif
PRE(sys_fsync)
{
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
-//zz // from the kernel sources.
-//zz struct vki_pmsg_strbuf {
-//zz int maxlen; /* no. of bytes in buffer */
-//zz int len; /* no. of bytes returned */
-//zz vki_caddr_t buf; /* pointer to data */
-//zz };
-//zz
-//zz PRE(sys_getpmsg, SfMayBlock)
-//zz {
-//zz /* LiS getpmsg from http://www.gcom.com/home/linux/lis/ */
-//zz struct vki_pmsg_strbuf *ctrl;
-//zz struct vki_pmsg_strbuf *data;
-//zz PRINT("sys_getpmsg ( %d, %p, %p, %p, %p )", ARG1,ARG2,ARG3,ARG4,ARG5);
-//zz PRE_REG_READ5(int, "getpmsg",
-//zz int, fd, struct strbuf *, ctrl, struct strbuf *, data,
-//zz int *, bandp, int *, flagsp);
-//zz ctrl = (struct vki_pmsg_strbuf *)ARG2;
-//zz data = (struct vki_pmsg_strbuf *)ARG3;
-//zz if (ctrl && ctrl->maxlen > 0)
-//zz PRE_MEM_WRITE( "getpmsg(ctrl)", (Addr)ctrl->buf, ctrl->maxlen);
-//zz if (data && data->maxlen > 0)
-//zz PRE_MEM_WRITE( "getpmsg(data)", (Addr)data->buf, data->maxlen);
-//zz if (ARG4)
-//zz PRE_MEM_WRITE( "getpmsg(bandp)", (Addr)ARG4, sizeof(int));
-//zz if (ARG5)
-//zz PRE_MEM_WRITE( "getpmsg(flagsp)", (Addr)ARG5, sizeof(int));
-//zz }
-//zz
-//zz POST(sys_getpmsg)
-//zz {
-//zz struct vki_pmsg_strbuf *ctrl;
-//zz struct vki_pmsg_strbuf *data;
-//zz
-//zz ctrl = (struct vki_pmsg_strbuf *)ARG2;
-//zz data = (struct vki_pmsg_strbuf *)ARG3;
-//zz if (RES == 0 && ctrl && ctrl->len > 0) {
-//zz POST_MEM_WRITE( (Addr)ctrl->buf, ctrl->len);
-//zz }
-//zz if (RES == 0 && data && data->len > 0) {
-//zz POST_MEM_WRITE( (Addr)data->buf, data->len);
-//zz }
-//zz }
-//zz
-//zz PRE(sys_putpmsg, SfMayBlock)
-//zz {
-//zz /* LiS putpmsg from http://www.gcom.com/home/linux/lis/ */
-//zz struct vki_pmsg_strbuf *ctrl;
-//zz struct vki_pmsg_strbuf *data;
-//zz PRINT("sys_putpmsg ( %d, %p, %p, %d, %d )", ARG1,ARG2,ARG3,ARG4,ARG5);
-//zz PRE_REG_READ5(int, "putpmsg",
-//zz int, fd, struct strbuf *, ctrl, struct strbuf *, data,
-//zz int, band, int, flags);
-//zz ctrl = (struct vki_pmsg_strbuf *)ARG2;
-//zz data = (struct vki_pmsg_strbuf *)ARG3;
-//zz if (ctrl && ctrl->len > 0)
-//zz PRE_MEM_READ( "putpmsg(ctrl)", (Addr)ctrl->buf, ctrl->len);
-//zz if (data && data->len > 0)
-//zz PRE_MEM_READ( "putpmsg(data)", (Addr)data->buf, data->len);
-//zz }
+// Nb: getpmsg() and putpmsg() are special additional syscalls used in early
+// versions of LiS (Linux Streams). They are not part of the kernel.
+// Therefore, we have to provide this type ourself, rather than getting it
+// from the kernel sources.
+struct vki_pmsg_strbuf {
+ int maxlen; /* no. of bytes in buffer */
+ int len; /* no. of bytes returned */
+ vki_caddr_t buf; /* pointer to data */
+};
+PRE(sys_getpmsg)
+{
+ /* LiS getpmsg from http://www.gcom.com/home/linux/lis/ */
+ struct vki_pmsg_strbuf *ctrl;
+ struct vki_pmsg_strbuf *data;
+ *flags |= SfMayBlock;
+ PRINT("sys_getpmsg ( %d, %p, %p, %p, %p )", ARG1,ARG2,ARG3,ARG4,ARG5);
+ PRE_REG_READ5(int, "getpmsg",
+ int, fd, struct strbuf *, ctrl, struct strbuf *, data,
+ int *, bandp, int *, flagsp);
+ ctrl = (struct vki_pmsg_strbuf *)ARG2;
+ data = (struct vki_pmsg_strbuf *)ARG3;
+ if (ctrl && ctrl->maxlen > 0)
+ PRE_MEM_WRITE( "getpmsg(ctrl)", (Addr)ctrl->buf, ctrl->maxlen);
+ if (data && data->maxlen > 0)
+ PRE_MEM_WRITE( "getpmsg(data)", (Addr)data->buf, data->maxlen);
+ if (ARG4)
+ PRE_MEM_WRITE( "getpmsg(bandp)", (Addr)ARG4, sizeof(int));
+ if (ARG5)
+ PRE_MEM_WRITE( "getpmsg(flagsp)", (Addr)ARG5, sizeof(int));
+}
+POST(sys_getpmsg)
+{
+ struct vki_pmsg_strbuf *ctrl;
+ struct vki_pmsg_strbuf *data;
+ vg_assert(SUCCESS);
+ ctrl = (struct vki_pmsg_strbuf *)ARG2;
+ data = (struct vki_pmsg_strbuf *)ARG3;
+ if (RES == 0 && ctrl && ctrl->len > 0) {
+ POST_MEM_WRITE( (Addr)ctrl->buf, ctrl->len);
+ }
+ if (RES == 0 && data && data->len > 0) {
+ POST_MEM_WRITE( (Addr)data->buf, data->len);
+ }
+}
+
+PRE(sys_putpmsg)
+{
+ /* LiS putpmsg from http://www.gcom.com/home/linux/lis/ */
+ struct vki_pmsg_strbuf *ctrl;
+ struct vki_pmsg_strbuf *data;
+ *flags |= SfMayBlock;
+ PRINT("sys_putpmsg ( %d, %p, %p, %d, %d )", ARG1,ARG2,ARG3,ARG4,ARG5);
+ PRE_REG_READ5(int, "putpmsg",
+ int, fd, struct strbuf *, ctrl, struct strbuf *, data,
+ int, band, int, flags);
+ ctrl = (struct vki_pmsg_strbuf *)ARG2;
+ data = (struct vki_pmsg_strbuf *)ARG3;
+ if (ctrl && ctrl->len > 0)
+ PRE_MEM_READ( "putpmsg(ctrl)", (Addr)ctrl->buf, ctrl->len);
+ if (data && data->len > 0)
+ PRE_MEM_READ( "putpmsg(data)", (Addr)data->buf, data->len);
+}
PRE(sys_getitimer)
{
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) {
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 {
-//zz PRINT("sys_pwrite64 ( %d, %p, %llu, %lld )",
-//zz ARG1, ARG2, (ULong)ARG3, LOHI64(ARG4,ARG5));
-//zz PRE_REG_READ5(ssize_t, "pwrite64",
-//zz unsigned int, fd, const char *, buf, vki_size_t, count,
-//zz vki_u32, offset_low32, vki_u32, offset_high32);
-//zz PRE_MEM_READ( "pwrite64(buf)", ARG2, ARG3 );
-//zz }
+// XXX: only for 32-bit archs
+#if defined(VGP_x86_linux)
+PRE(sys_pwrite64)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_pwrite64 ( %d, %p, %llu, %lld )",
+ ARG1, ARG2, (ULong)ARG3, LOHI64(ARG4,ARG5));
+ PRE_REG_READ5(ssize_t, "pwrite64",
+ unsigned int, fd, const char *, buf, vki_size_t, count,
+ vki_u32, offset_low32, vki_u32, offset_high32);
+ PRE_MEM_READ( "pwrite64(buf)", ARG2, ARG3 );
+}
+#endif
PRE(sys_sync)
{
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);
-//zz PRE_REG_READ3(long, "fstatfs64",
-//zz unsigned int, fd, vki_size_t, size, struct statfs64 *, buf);
-//zz PRE_MEM_WRITE( "fstatfs64(buf)", ARG3, ARG2 );
-//zz }
-//zz
-//zz POST(sys_fstatfs64)
-//zz {
-//zz POST_MEM_WRITE( ARG3, ARG2 );
-//zz }
+PRE(sys_fstatfs64)
+{
+ PRINT("sys_fstatfs64 ( %d, %llu, %p )",ARG1,(ULong)ARG2,ARG3);
+ PRE_REG_READ3(long, "fstatfs64",
+ unsigned int, fd, vki_size_t, size, struct statfs64 *, buf);
+ PRE_MEM_WRITE( "fstatfs64(buf)", ARG3, ARG2 );
+}
+POST(sys_fstatfs64)
+{
+ POST_MEM_WRITE( ARG3, ARG2 );
+}
PRE(sys_getsid)
{
PRE_MEM_RASCIIZ( "init_module(uargs)", ARG3 );
}
-//zz PRE(sys_capget, 0)
-//zz {
-//zz PRINT("sys_capget ( %p, %p )", ARG1, ARG2 );
-//zz PRE_REG_READ2(long, "capget",
-//zz vki_cap_user_header_t, header, vki_cap_user_data_t, data);
-//zz PRE_MEM_READ( "capget(header)", ARG1,
-//zz sizeof(struct __vki_user_cap_header_struct) );
-//zz PRE_MEM_WRITE( "capget(data)", ARG2,
-//zz sizeof(struct __vki_user_cap_data_struct) );
-//zz }
-//zz
-//zz POST(sys_capget)
-//zz {
-//zz if (ARG2 != (Addr)NULL)
-//zz POST_MEM_WRITE( ARG2, sizeof(struct __vki_user_cap_data_struct) );
-//zz }
-//zz
-//zz PRE(sys_capset, 0)
-//zz {
-//zz PRINT("sys_capset ( %p, %p )", ARG1, ARG2 );
-//zz PRE_REG_READ2(long, "capset",
-//zz vki_cap_user_header_t, header,
-//zz const vki_cap_user_data_t, data);
-//zz PRE_MEM_READ( "capset(header)",
-//zz ARG1, sizeof(struct __vki_user_cap_header_struct) );
-//zz PRE_MEM_READ( "capset(data)",
-//zz ARG2, sizeof(struct __vki_user_cap_data_struct) );
-//zz }
+PRE(sys_capget)
+{
+ PRINT("sys_capget ( %p, %p )", ARG1, ARG2 );
+ PRE_REG_READ2(long, "capget",
+ vki_cap_user_header_t, header, vki_cap_user_data_t, data);
+ PRE_MEM_READ( "capget(header)", ARG1,
+ sizeof(struct __vki_user_cap_header_struct) );
+ PRE_MEM_WRITE( "capget(data)", ARG2,
+ sizeof(struct __vki_user_cap_data_struct) );
+}
+POST(sys_capget)
+{
+ if (ARG2 != (Addr)NULL)
+ POST_MEM_WRITE( ARG2, sizeof(struct __vki_user_cap_data_struct) );
+}
+
+PRE(sys_capset)
+{
+ PRINT("sys_capset ( %p, %p )", ARG1, ARG2 );
+ PRE_REG_READ2(long, "capset",
+ vki_cap_user_header_t, header,
+ const vki_cap_user_data_t, data);
+ PRE_MEM_READ( "capset(header)",
+ ARG1, sizeof(struct __vki_user_cap_header_struct) );
+ PRE_MEM_READ( "capset(data)",
+ ARG2, sizeof(struct __vki_user_cap_data_struct) );
+}
// Pre_read a char** argument.
static void pre_argv_envp(Addr a, ThreadId tid, Char* s1, Char* s2)
PRE_MEM_RASCIIZ( "chmod(path)", ARG1 );
}
-//zz PRE(sys_chown16, 0)
-//zz {
-//zz PRINT("sys_chown16 ( %p, 0x%x, 0x%x )", ARG1,ARG2,ARG3);
-//zz PRE_REG_READ3(long, "chown16",
-//zz const char *, path,
-//zz vki_old_uid_t, owner, vki_old_gid_t, group);
-//zz PRE_MEM_RASCIIZ( "chown16(path)", ARG1 );
-//zz }
-//zz
-//zz PRE(sys_chown, 0)
-//zz {
-//zz /* int chown(const char *path, uid_t owner, gid_t group); */
-//zz PRINT("sys_chown ( %p, 0x%x, 0x%x )", ARG1,ARG2,ARG3);
-//zz PRE_REG_READ3(long, "chown",
-//zz const char *, path, vki_uid_t, owner, vki_gid_t, group);
-//zz PRE_MEM_RASCIIZ( "chown(path)", ARG1 );
-//zz }
-//zz
-//zz PRE(sys_lchown, 0)
-//zz {
-//zz PRINT("sys_lchown ( %p, 0x%x, 0x%x )", ARG1,ARG2,ARG3);
-//zz PRE_REG_READ3(long, "lchown",
-//zz const char *, path, vki_uid_t, owner, vki_gid_t, group);
-//zz PRE_MEM_RASCIIZ( "lchown(path)", ARG1 );
-//zz }
+PRE(sys_chown16)
+{
+ PRINT("sys_chown16 ( %p, 0x%x, 0x%x )", ARG1,ARG2,ARG3);
+ PRE_REG_READ3(long, "chown16",
+ const char *, path,
+ vki_old_uid_t, owner, vki_old_gid_t, group);
+ PRE_MEM_RASCIIZ( "chown16(path)", ARG1 );
+}
+
+PRE(sys_chown)
+{
+ /* int chown(const char *path, uid_t owner, gid_t group); */
+ PRINT("sys_chown ( %p, 0x%x, 0x%x )", ARG1,ARG2,ARG3);
+ PRE_REG_READ3(long, "chown",
+ const char *, path, vki_uid_t, owner, vki_gid_t, group);
+ PRE_MEM_RASCIIZ( "chown(path)", ARG1 );
+}
+
+PRE(sys_lchown)
+{
+ PRINT("sys_lchown ( %p, 0x%x, 0x%x )", ARG1,ARG2,ARG3);
+ PRE_REG_READ3(long, "lchown",
+ const char *, path, vki_uid_t, owner, vki_gid_t, group);
+ PRE_MEM_RASCIIZ( "lchown(path)", ARG1 );
+}
PRE(sys_close)
{
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 }
+PRE(sys_fchown)
+{
+ PRINT("sys_fchown ( %d, %d, %d )", ARG1,ARG2,ARG3);
+ PRE_REG_READ3(long, "fchown",
+ unsigned int, fd, vki_uid_t, owner, vki_gid_t, group);
+}
PRE(sys_fchmod)
{
PRE_MEM_RASCIIZ( "truncate(path)", ARG1 );
}
-//zz // XXX: this wrapper is only suitable for 32-bit platforms
-//zz PRE(sys_ftruncate64, SfMayBlock)
-//zz {
-//zz PRINT("sys_ftruncate64 ( %d, %lld )", ARG1, LOHI64(ARG2,ARG3));
-//zz PRE_REG_READ3(long, "ftruncate64",
-//zz unsigned int, fd,
-//zz vki_u32, length_low32, vki_u32, length_high32);
-//zz }
-//zz
-//zz // XXX: this wrapper is only suitable for 32-bit platforms
-//zz PRE(sys_truncate64, SfMayBlock)
-//zz {
-//zz PRINT("sys_truncate64 ( %p, %lld )", ARG1, LOHI64(ARG2, ARG3));
-//zz PRE_REG_READ3(long, "truncate64",
-//zz const char *, path,
-//zz vki_u32, length_low32, vki_u32, length_high32);
-//zz PRE_MEM_RASCIIZ( "truncate64(path)", ARG1 );
-//zz }
-//zz
+// XXX: this wrapper is only suitable for 32-bit platforms
+#if defined(VGP_x86_linux)
+PRE(sys_ftruncate64)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_ftruncate64 ( %d, %lld )", ARG1, LOHI64(ARG2,ARG3));
+ PRE_REG_READ3(long, "ftruncate64",
+ unsigned int, fd,
+ vki_u32, length_low32, vki_u32, length_high32);
+}
+#endif
+
+// XXX: this wrapper is only suitable for 32-bit platforms
+#if defined(VGP_x86_linux)
+PRE(sys_truncate64)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_truncate64 ( %p, %lld )", ARG1, LOHI64(ARG2, ARG3));
+ PRE_REG_READ3(long, "truncate64",
+ const char *, path,
+ vki_u32, length_low32, vki_u32, length_high32);
+ PRE_MEM_RASCIIZ( "truncate64(path)", ARG1 );
+}
+#endif
PRE(sys_getdents)
{
VG_TRACK( die_mem_munmap, a, len );
}
-//zz PRE(sys_mincore, 0)
-//zz {
-//zz PRINT("sys_mincore ( %p, %llu, %p )", ARG1,(ULong)ARG2,ARG3);
-//zz PRE_REG_READ3(long, "mincore",
-//zz unsigned long, start, vki_size_t, length,
-//zz unsigned char *, vec);
-//zz PRE_MEM_WRITE( "mincore(vec)", ARG3, (ARG2 + 4096 - 1) / 4096);
-//zz }
-//zz
-//zz POST(sys_mincore)
-//zz {
-//zz POST_MEM_WRITE( ARG3, (ARG2 + 4096 - 1) / 4096 );
-//zz }
+PRE(sys_mincore)
+{
+ PRINT("sys_mincore ( %p, %llu, %p )", ARG1,(ULong)ARG2,ARG3);
+ PRE_REG_READ3(long, "mincore",
+ unsigned long, start, vki_size_t, length,
+ unsigned char *, vec);
+ PRE_MEM_WRITE( "mincore(vec)", ARG3, (ARG2 + 4096 - 1) / 4096);
+}
+POST(sys_mincore)
+{
+ POST_MEM_WRITE( ARG3, (ARG2 + 4096 - 1) / 4096 );
+}
PRE(sys_nanosleep)
{
PRE_MEM_RASCIIZ( "rmdir(pathname)", ARG1 );
}
-//zz PRE(sys_sched_setparam, 0)
-//zz {
-//zz PRINT("sched_setparam ( %d, %p )", ARG1, ARG2 );
-//zz PRE_REG_READ2(long, "sched_setparam",
-//zz vki_pid_t, pid, struct sched_param *, p);
-//zz PRE_MEM_READ( "sched_setparam(p)", ARG2, sizeof(struct vki_sched_param) );
-//zz }
-//zz
-//zz POST(sys_sched_setparam)
-//zz {
-//zz POST_MEM_WRITE( ARG2, sizeof(struct vki_sched_param) );
-//zz }
+PRE(sys_sched_setparam)
+{
+ PRINT("sched_setparam ( %d, %p )", ARG1, ARG2 );
+ PRE_REG_READ2(long, "sched_setparam",
+ vki_pid_t, pid, struct sched_param *, p);
+ PRE_MEM_READ( "sched_setparam(p)", ARG2, sizeof(struct vki_sched_param) );
+}
+POST(sys_sched_setparam)
+{
+ POST_MEM_WRITE( ARG2, sizeof(struct vki_sched_param) );
+}
PRE(sys_sched_getparam)
{
PRE_REG_READ1(long, "setgid16", vki_old_gid_t, gid);
}
-//zz PRE(sys_setgid, 0)
-//zz {
-//zz PRINT("sys_setgid ( %d )", ARG1);
-//zz PRE_REG_READ1(long, "setgid", vki_gid_t, gid);
-//zz }
+PRE(sys_setgid)
+{
+ PRINT("sys_setgid ( %d )", ARG1);
+ PRE_REG_READ1(long, "setgid", vki_gid_t, gid);
+}
PRE(sys_setsid)
{
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);
-//zz PRE_REG_READ2(long, "setgroups", int, size, vki_gid_t *, list);
-//zz if (ARG1 > 0)
-//zz PRE_MEM_READ( "setgroups(list)", ARG2, ARG1 * sizeof(vki_gid_t) );
-//zz }
+PRE(sys_setgroups)
+{
+ PRINT("setgroups ( %llu, %p )", (ULong)ARG1, ARG2);
+ PRE_REG_READ2(long, "setgroups", int, size, vki_gid_t *, list);
+ if (ARG1 > 0)
+ PRE_MEM_READ( "setgroups(list)", ARG2, ARG1 * sizeof(vki_gid_t) );
+}
PRE(sys_setpgid)
{
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);
-//zz PRE_REG_READ2(long, "setreuid", vki_uid_t, ruid, vki_uid_t, euid);
-//zz }
+PRE(sys_setreuid)
+{
+ PRINT("sys_setreuid ( 0x%x, 0x%x )", ARG1, ARG2);
+ PRE_REG_READ2(long, "setreuid", vki_uid_t, ruid, vki_uid_t, euid);
+}
PRE(sys_setrlimit)
{
PRE_REG_READ1(long, "setuid16", vki_old_uid_t, uid);
}
-//zz PRE(sys_setuid, 0)
-//zz {
-//zz PRINT("sys_setuid ( %d )", ARG1);
-//zz PRE_REG_READ1(long, "setuid", vki_uid_t, uid);
-//zz }
+PRE(sys_setuid)
+{
+ PRINT("sys_setuid ( %d )", ARG1);
+ PRE_REG_READ1(long, "setuid", vki_uid_t, uid);
+}
PRE(sys_newstat)
{
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);
-//zz PRE_REG_READ3(long, "statfs64",
-//zz const char *, path, vki_size_t, size, struct statfs64 *, buf);
-//zz PRE_MEM_RASCIIZ( "statfs64(path)", ARG1 );
-//zz PRE_MEM_WRITE( "statfs64(buf)", ARG3, ARG2 );
-//zz }
-//zz
-//zz POST(sys_statfs64)
-//zz {
-//zz POST_MEM_WRITE( ARG3, ARG2 );
-//zz }
+PRE(sys_statfs64)
+{
+ PRINT("sys_statfs64 ( %p, %llu, %p )",ARG1,(ULong)ARG2,ARG3);
+ PRE_REG_READ3(long, "statfs64",
+ const char *, path, vki_size_t, size, struct statfs64 *, buf);
+ PRE_MEM_RASCIIZ( "statfs64(path)", ARG1 );
+ PRE_MEM_WRITE( "statfs64(buf)", ARG3, ARG2 );
+}
+POST(sys_statfs64)
+{
+ POST_MEM_WRITE( ARG3, ARG2 );
+}
PRE(sys_symlink)
{
}
}
-//zz PRE(sys_utimes, 0)
-//zz {
-//zz PRINT("sys_utimes ( %p, %p )", ARG1,ARG2);
-//zz PRE_REG_READ2(long, "utimes", char *, filename, struct timeval *, tvp);
-//zz PRE_MEM_RASCIIZ( "utimes(filename)", ARG1 );
-//zz if (ARG2 != 0)
-//zz PRE_MEM_READ( "utimes(tvp)", ARG2, sizeof(struct vki_timeval) );
-//zz }
-//zz
-//zz PRE(sys_sched_setaffinity, 0)
-//zz {
-//zz PRINT("sched_setaffinity ( %d, %d, %p )", ARG1, ARG2, ARG3);
-//zz PRE_REG_READ3(long, "sched_setaffinity",
-//zz vki_pid_t, pid, unsigned int, len, unsigned long *, mask);
-//zz PRE_MEM_READ( "sched_setaffinity(mask)", ARG3, ARG2);
-//zz }
-//zz
-//zz PRE(sys_sched_getaffinity, 0)
-//zz {
-//zz PRINT("sched_getaffinity ( %d, %d, %p )", ARG1, ARG2, ARG3);
-//zz PRE_REG_READ3(long, "sched_getaffinity",
-//zz vki_pid_t, pid, unsigned int, len, unsigned long *, mask);
-//zz PRE_MEM_WRITE( "sched_getaffinity(mask)", ARG3, ARG2);
-//zz }
-//zz
-//zz POST(sys_sched_getaffinity)
-//zz {
-//zz POST_MEM_WRITE(ARG3, ARG2);
-//zz }
+PRE(sys_utimes)
+{
+ PRINT("sys_utimes ( %p, %p )", ARG1,ARG2);
+ PRE_REG_READ2(long, "utimes", char *, filename, struct timeval *, tvp);
+ PRE_MEM_RASCIIZ( "utimes(filename)", ARG1 );
+ if (ARG2 != 0)
+ PRE_MEM_READ( "utimes(tvp)", ARG2, sizeof(struct vki_timeval) );
+}
+
+PRE(sys_sched_setaffinity)
+{
+ PRINT("sched_setaffinity ( %d, %d, %p )", ARG1, ARG2, ARG3);
+ PRE_REG_READ3(long, "sched_setaffinity",
+ vki_pid_t, pid, unsigned int, len, unsigned long *, mask);
+ PRE_MEM_READ( "sched_setaffinity(mask)", ARG3, ARG2);
+}
+
+PRE(sys_sched_getaffinity)
+{
+ PRINT("sched_getaffinity ( %d, %d, %p )", ARG1, ARG2, ARG3);
+ PRE_REG_READ3(long, "sched_getaffinity",
+ vki_pid_t, pid, unsigned int, len, unsigned long *, mask);
+ PRE_MEM_WRITE( "sched_getaffinity(mask)", ARG3, ARG2);
+}
+POST(sys_sched_getaffinity)
+{
+ POST_MEM_WRITE(ARG3, ARG2);
+}
PRE(sys_acct)
{
POST_MEM_WRITE( ARG2, sizeof(vki_siginfo_t) );
}
-//zz PRE(sys_rt_sigqueueinfo, 0)
-//zz {
-//zz PRINT("sys_rt_sigqueueinfo(%d, %d, %p)", ARG1, ARG2, ARG3);
-//zz PRE_REG_READ3(long, "rt_sigqueueinfo",
-//zz int, pid, int, sig, vki_siginfo_t *, uinfo);
-//zz if (ARG2 != 0)
-//zz PRE_MEM_READ( "rt_sigqueueinfo(uinfo)", ARG3, sizeof(vki_siginfo_t) );
-//zz }
-//zz
-//zz POST(sys_rt_sigqueueinfo)
-//zz {
-//zz PRINT("sys_rt_sigqueueinfo(%d, %d, %p)", ARG1, ARG2, ARG3);
-//zz PRE_REG_READ3(long, "rt_sigqueueinfo",
-//zz int, pid, int, sig, vki_siginfo_t *, uinfo);
-//zz if (ARG2 != 0)
-//zz PRE_MEM_READ( "rt_sigqueueinfo(uinfo)", ARG3, sizeof(vki_siginfo_t) );
-//zz if (!VG_(client_signal_OK)(ARG2))
-//zz SET_STATUS_( -VKI_EINVAL );
-//zz }
+PRE(sys_rt_sigqueueinfo)
+{
+ PRINT("sys_rt_sigqueueinfo(%d, %d, %p)", ARG1, ARG2, ARG3);
+ PRE_REG_READ3(long, "rt_sigqueueinfo",
+ int, pid, int, sig, vki_siginfo_t *, uinfo);
+ if (ARG2 != 0)
+ PRE_MEM_READ( "rt_sigqueueinfo(uinfo)", ARG3, sizeof(vki_siginfo_t) );
+}
+POST(sys_rt_sigqueueinfo)
+{
+ if (!VG_(client_signal_OK)(ARG2))
+ SET_STATUS_Failure( VKI_EINVAL );
+}
// XXX: x86-specific
PRE(sys_sigaltstack)
(vki_stack_t*)ARG2)
);
}
-
POST(sys_sigaltstack)
{
vg_assert(SUCCESS);
(struct vki_sigaction *)ARG3)
);
}
-
POST(sys_rt_sigaction)
{
vg_assert(SUCCESS);
POST_MEM_WRITE( ARG1, sizeof(vki_old_sigset_t) ) ;
}
-//zz PRE(sys_rt_sigpending, 0)
-//zz {
-//zz PRINT( "sys_rt_sigpending ( %p )", ARG1 );
-//zz PRE_REG_READ2(long, "rt_sigpending",
-//zz vki_sigset_t *, set, vki_size_t, sigsetsize);
-//zz PRE_MEM_WRITE( "rt_sigpending(set)", ARG1, sizeof(vki_sigset_t));
-//zz }
-//zz
-//zz POST(sys_rt_sigpending)
-//zz {
-//zz POST_MEM_WRITE( ARG1, sizeof(vki_sigset_t) ) ;
-//zz }
+PRE(sys_rt_sigpending)
+{
+ PRINT( "sys_rt_sigpending ( %p )", ARG1 );
+ PRE_REG_READ2(long, "rt_sigpending",
+ vki_sigset_t *, set, vki_size_t, sigsetsize);
+ PRE_MEM_WRITE( "rt_sigpending(set)", ARG1, sizeof(vki_sigset_t));
+}
+POST(sys_rt_sigpending)
+{
+ POST_MEM_WRITE( ARG1, sizeof(vki_sigset_t) ) ;
+}
PRE(sys_mq_open)
{
POST_MEM_WRITE( ARG3, sizeof(struct vki_mq_attr) );
}
-//zz PRE(sys_timer_create, 0)
-//zz {
-//zz PRINT("sys_timer_create( %d, %p, %p )", ARG1,ARG2,ARG3);
-//zz PRE_REG_READ3(long, "timer_create",
-//zz vki_clockid_t, clockid, struct sigevent *, evp,
-//zz vki_timer_t *, timerid);
-//zz if (ARG2 != 0)
-//zz PRE_MEM_READ( "timer_create(evp)", ARG2, sizeof(struct vki_sigevent) );
-//zz PRE_MEM_WRITE( "timer_create(timerid)", ARG3, sizeof(vki_timer_t) );
-//zz }
-//zz
-//zz POST(sys_timer_create)
-//zz {
-//zz POST_MEM_WRITE( ARG3, sizeof(vki_timer_t) );
-//zz }
-//zz
-//zz PRE(sys_timer_settime, 0)
-//zz {
-//zz PRINT("sys_timer_settime( %lld, %d, %p, %p )", (ULong)ARG1,ARG2,ARG3,ARG4);
-//zz PRE_REG_READ4(long, "timer_settime",
-//zz vki_timer_t, timerid, int, flags,
-//zz const struct itimerspec *, value,
-//zz struct itimerspec *, ovalue);
-//zz PRE_MEM_READ( "timer_settime(value)", ARG3,
-//zz sizeof(struct vki_itimerspec) );
-//zz if (ARG4 != 0)
-//zz PRE_MEM_WRITE( "timer_settime(ovalue)", ARG4,
-//zz sizeof(struct vki_itimerspec) );
-//zz }
-//zz
-//zz POST(sys_timer_settime)
-//zz {
-//zz if (ARG4 != 0)
-//zz POST_MEM_WRITE( ARG4, sizeof(struct vki_itimerspec) );
-//zz }
-//zz
-//zz PRE(sys_timer_gettime, 0)
-//zz {
-//zz PRINT("sys_timer_gettime( %lld, %p )", (ULong)ARG1,ARG2);
-//zz PRE_REG_READ2(long, "timer_gettime",
-//zz vki_timer_t, timerid, struct itimerspec *, value);
-//zz PRE_MEM_WRITE( "timer_gettime(value)", ARG2,
-//zz sizeof(struct vki_itimerspec));
-//zz }
-//zz
-//zz POST(sys_timer_gettime)
-//zz {
-//zz POST_MEM_WRITE( ARG2, sizeof(struct vki_itimerspec) );
-//zz }
-//zz
-//zz PRE(sys_timer_getoverrun, 0)
-//zz {
-//zz PRINT("sys_timer_getoverrun( %p )", ARG1);
-//zz PRE_REG_READ1(long, "timer_getoverrun", vki_timer_t, timerid);
-//zz }
-//zz
-//zz PRE(sys_timer_delete, 0)
-//zz {
-//zz PRINT("sys_timer_delete( %p )", ARG1);
-//zz PRE_REG_READ1(long, "timer_delete", vki_timer_t, timerid);
-//zz }
-//zz
-//zz PRE(sys_clock_settime, 0)
-//zz {
-//zz PRINT("sys_clock_settime( %d, %p )", ARG1,ARG2);
-//zz PRE_REG_READ2(long, "clock_settime",
-//zz vki_clockid_t, clk_id, const struct timespec *, tp);
-//zz PRE_MEM_READ( "clock_settime(tp)", ARG2, sizeof(struct vki_timespec) );
-//zz }
+PRE(sys_timer_create)
+{
+ PRINT("sys_timer_create( %d, %p, %p )", ARG1,ARG2,ARG3);
+ PRE_REG_READ3(long, "timer_create",
+ vki_clockid_t, clockid, struct sigevent *, evp,
+ vki_timer_t *, timerid);
+ if (ARG2 != 0)
+ PRE_MEM_READ( "timer_create(evp)", ARG2, sizeof(struct vki_sigevent) );
+ PRE_MEM_WRITE( "timer_create(timerid)", ARG3, sizeof(vki_timer_t) );
+}
+POST(sys_timer_create)
+{
+ POST_MEM_WRITE( ARG3, sizeof(vki_timer_t) );
+}
+
+PRE(sys_timer_settime)
+{
+ PRINT("sys_timer_settime( %lld, %d, %p, %p )", (ULong)ARG1,ARG2,ARG3,ARG4);
+ PRE_REG_READ4(long, "timer_settime",
+ vki_timer_t, timerid, int, flags,
+ const struct itimerspec *, value,
+ struct itimerspec *, ovalue);
+ PRE_MEM_READ( "timer_settime(value)", ARG3,
+ sizeof(struct vki_itimerspec) );
+ if (ARG4 != 0)
+ PRE_MEM_WRITE( "timer_settime(ovalue)", ARG4,
+ sizeof(struct vki_itimerspec) );
+}
+POST(sys_timer_settime)
+{
+ if (ARG4 != 0)
+ POST_MEM_WRITE( ARG4, sizeof(struct vki_itimerspec) );
+}
+
+PRE(sys_timer_gettime)
+{
+ PRINT("sys_timer_gettime( %lld, %p )", (ULong)ARG1,ARG2);
+ PRE_REG_READ2(long, "timer_gettime",
+ vki_timer_t, timerid, struct itimerspec *, value);
+ PRE_MEM_WRITE( "timer_gettime(value)", ARG2,
+ sizeof(struct vki_itimerspec));
+}
+POST(sys_timer_gettime)
+{
+ POST_MEM_WRITE( ARG2, sizeof(struct vki_itimerspec) );
+}
+
+PRE(sys_timer_getoverrun)
+{
+ PRINT("sys_timer_getoverrun( %p )", ARG1);
+ PRE_REG_READ1(long, "timer_getoverrun", vki_timer_t, timerid);
+}
+
+PRE(sys_timer_delete)
+{
+ PRINT("sys_timer_delete( %p )", ARG1);
+ PRE_REG_READ1(long, "timer_delete", vki_timer_t, timerid);
+}
+
+PRE(sys_clock_settime)
+{
+ PRINT("sys_clock_settime( %d, %p )", ARG1,ARG2);
+ PRE_REG_READ2(long, "clock_settime",
+ vki_clockid_t, clk_id, const struct timespec *, tp);
+ PRE_MEM_READ( "clock_settime(tp)", ARG2, sizeof(struct vki_timespec) );
+}
PRE(sys_clock_gettime)
{
vki_clockid_t, clk_id, struct timespec *, tp);
PRE_MEM_WRITE( "clock_gettime(tp)", ARG2, sizeof(struct vki_timespec) );
}
-
POST(sys_clock_gettime)
{
POST_MEM_WRITE( ARG2, sizeof(struct vki_timespec) );
}
-//zz PRE(sys_clock_getres, 0)
-//zz {
-//zz PRINT("sys_clock_getres( %d, %p )" , ARG1,ARG2);
-//zz // Nb: we can't use "RES" as the param name because that's a macro
-//zz // defined above!
-//zz PRE_REG_READ2(long, "clock_getres",
-//zz vki_clockid_t, clk_id, struct timespec *, res);
-//zz PRE_MEM_WRITE( "clock_getres(res)", ARG2, sizeof(struct vki_timespec) );
-//zz }
-//zz
-//zz POST(sys_clock_getres)
-//zz {
-//zz POST_MEM_WRITE( ARG2, sizeof(struct vki_timespec) );
-//zz }
+PRE(sys_clock_getres)
+{
+ PRINT("sys_clock_getres( %d, %p )" , ARG1,ARG2);
+ // Nb: we can't use "RES" as the param name because that's a macro
+ // defined above!
+ PRE_REG_READ2(long, "clock_getres",
+ vki_clockid_t, clk_id, struct timespec *, res);
+ PRE_MEM_WRITE( "clock_getres(res)", ARG2, sizeof(struct vki_timespec) );
+}
+POST(sys_clock_getres)
+{
+ POST_MEM_WRITE( ARG2, sizeof(struct vki_timespec) );
+}
+#undef PRE
+#undef POST
/*--------------------------------------------------------------------*/
/*--- end syscalls-generic.c ---*/
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 }
+PRE(sys_setfsuid)
+{
+ PRINT("sys_setfsuid ( %d )", ARG1);
+ PRE_REG_READ1(long, "setfsuid", vki_uid_t, uid);
+}
PRE(sys_setfsgid16)
{
PRE_REG_READ1(long, "setfsgid16", vki_old_gid_t, gid);
}
-//zz PRE(sys_setfsgid, 0)
-//zz {
-//zz PRINT("sys_setfsgid ( %d )", ARG1);
-//zz PRE_REG_READ1(long, "setfsgid", vki_gid_t, gid);
-//zz }
-//zz
-//zz PRE(sys_setresuid16, 0)
-//zz {
-//zz PRINT("sys_setresuid16 ( %d, %d, %d )", ARG1, ARG2, ARG3);
-//zz PRE_REG_READ3(long, "setresuid16",
-//zz vki_old_uid_t, ruid, vki_old_uid_t, euid, vki_old_uid_t, suid);
-//zz }
-//zz
-//zz PRE(sys_setresuid, 0)
-//zz {
-//zz PRINT("sys_setresuid ( %d, %d, %d )", ARG1, ARG2, ARG3);
-//zz PRE_REG_READ3(long, "setresuid",
-//zz vki_uid_t, ruid, vki_uid_t, euid, vki_uid_t, suid);
-//zz }
-//zz
-//zz PRE(sys_getresuid16, 0)
-//zz {
-//zz PRINT("sys_getresuid16 ( %p, %p, %p )", ARG1,ARG2,ARG3);
-//zz PRE_REG_READ3(long, "getresuid16",
-//zz vki_old_uid_t *, ruid, vki_old_uid_t *, euid,
-//zz vki_old_uid_t *, suid);
-//zz PRE_MEM_WRITE( "getresuid16(ruid)", ARG1, sizeof(vki_old_uid_t) );
-//zz PRE_MEM_WRITE( "getresuid16(euid)", ARG2, sizeof(vki_old_uid_t) );
-//zz PRE_MEM_WRITE( "getresuid16(suid)", ARG3, sizeof(vki_old_uid_t) );
-//zz }
-//zz
-//zz POST(sys_getresuid16)
-//zz {
-//zz if (RES == 0) {
-//zz POST_MEM_WRITE( ARG1, sizeof(vki_old_uid_t) );
-//zz POST_MEM_WRITE( ARG2, sizeof(vki_old_uid_t) );
-//zz POST_MEM_WRITE( ARG3, sizeof(vki_old_uid_t) );
-//zz }
-//zz }
+PRE(sys_setfsgid)
+{
+ PRINT("sys_setfsgid ( %d )", ARG1);
+ PRE_REG_READ1(long, "setfsgid", vki_gid_t, gid);
+}
+
+PRE(sys_setresuid16)
+{
+ PRINT("sys_setresuid16 ( %d, %d, %d )", ARG1, ARG2, ARG3);
+ PRE_REG_READ3(long, "setresuid16",
+ vki_old_uid_t, ruid, vki_old_uid_t, euid, vki_old_uid_t, suid);
+}
+
+PRE(sys_setresuid)
+{
+ PRINT("sys_setresuid ( %d, %d, %d )", ARG1, ARG2, ARG3);
+ PRE_REG_READ3(long, "setresuid",
+ vki_uid_t, ruid, vki_uid_t, euid, vki_uid_t, suid);
+}
+
+PRE(sys_getresuid16)
+{
+ PRINT("sys_getresuid16 ( %p, %p, %p )", ARG1,ARG2,ARG3);
+ PRE_REG_READ3(long, "getresuid16",
+ vki_old_uid_t *, ruid, vki_old_uid_t *, euid,
+ vki_old_uid_t *, suid);
+ PRE_MEM_WRITE( "getresuid16(ruid)", ARG1, sizeof(vki_old_uid_t) );
+ PRE_MEM_WRITE( "getresuid16(euid)", ARG2, sizeof(vki_old_uid_t) );
+ PRE_MEM_WRITE( "getresuid16(suid)", ARG3, sizeof(vki_old_uid_t) );
+}
+POST(sys_getresuid16)
+{
+ vg_assert(SUCCESS);
+ if (RES == 0) {
+ POST_MEM_WRITE( ARG1, sizeof(vki_old_uid_t) );
+ POST_MEM_WRITE( ARG2, sizeof(vki_old_uid_t) );
+ POST_MEM_WRITE( ARG3, sizeof(vki_old_uid_t) );
+ }
+}
PRE(sys_getresuid)
{
PRE_MEM_WRITE( "getresuid(euid)", ARG2, sizeof(vki_uid_t) );
PRE_MEM_WRITE( "getresuid(suid)", ARG3, sizeof(vki_uid_t) );
}
-
POST(sys_getresuid)
{
vg_assert(SUCCESS);
}
}
-//zz PRE(sys_setresgid16, 0)
-//zz {
-//zz PRINT("sys_setresgid16 ( %d, %d, %d )", ARG1, ARG2, ARG3);
-//zz PRE_REG_READ3(long, "setresgid16",
-//zz vki_old_gid_t, rgid, vki_old_gid_t, egid, vki_old_gid_t, sgid);
-//zz }
-//zz
-//zz PRE(sys_setresgid, 0)
-//zz {
-//zz PRINT("sys_setresgid ( %d, %d, %d )", ARG1, ARG2, ARG3);
-//zz PRE_REG_READ3(long, "setresgid",
-//zz vki_gid_t, rgid, vki_gid_t, egid, vki_gid_t, sgid);
-//zz }
-//zz
-//zz PRE(sys_getresgid16, 0)
-//zz {
-//zz PRINT("sys_getresgid16 ( %p, %p, %p )", ARG1,ARG2,ARG3);
-//zz PRE_REG_READ3(long, "getresgid16",
-//zz vki_old_gid_t *, rgid, vki_old_gid_t *, egid,
-//zz vki_old_gid_t *, sgid);
-//zz PRE_MEM_WRITE( "getresgid16(rgid)", ARG1, sizeof(vki_old_gid_t) );
-//zz PRE_MEM_WRITE( "getresgid16(egid)", ARG2, sizeof(vki_old_gid_t) );
-//zz PRE_MEM_WRITE( "getresgid16(sgid)", ARG3, sizeof(vki_old_gid_t) );
-//zz }
-//zz
-//zz POST(sys_getresgid16)
-//zz {
-//zz if (RES == 0) {
-//zz POST_MEM_WRITE( ARG1, sizeof(vki_old_gid_t) );
-//zz POST_MEM_WRITE( ARG2, sizeof(vki_old_gid_t) );
-//zz POST_MEM_WRITE( ARG3, sizeof(vki_old_gid_t) );
-//zz }
-//zz }
+PRE(sys_setresgid16)
+{
+ PRINT("sys_setresgid16 ( %d, %d, %d )", ARG1, ARG2, ARG3);
+ PRE_REG_READ3(long, "setresgid16",
+ vki_old_gid_t, rgid,
+ vki_old_gid_t, egid, vki_old_gid_t, sgid);
+}
+
+PRE(sys_setresgid)
+{
+ PRINT("sys_setresgid ( %d, %d, %d )", ARG1, ARG2, ARG3);
+ PRE_REG_READ3(long, "setresgid",
+ vki_gid_t, rgid, vki_gid_t, egid, vki_gid_t, sgid);
+}
+
+PRE(sys_getresgid16)
+{
+ PRINT("sys_getresgid16 ( %p, %p, %p )", ARG1,ARG2,ARG3);
+ PRE_REG_READ3(long, "getresgid16",
+ vki_old_gid_t *, rgid, vki_old_gid_t *, egid,
+ vki_old_gid_t *, sgid);
+ PRE_MEM_WRITE( "getresgid16(rgid)", ARG1, sizeof(vki_old_gid_t) );
+ PRE_MEM_WRITE( "getresgid16(egid)", ARG2, sizeof(vki_old_gid_t) );
+ PRE_MEM_WRITE( "getresgid16(sgid)", ARG3, sizeof(vki_old_gid_t) );
+}
+POST(sys_getresgid16)
+{
+ vg_assert(SUCCESS);
+ if (RES == 0) {
+ POST_MEM_WRITE( ARG1, sizeof(vki_old_gid_t) );
+ POST_MEM_WRITE( ARG2, sizeof(vki_old_gid_t) );
+ POST_MEM_WRITE( ARG3, sizeof(vki_old_gid_t) );
+ }
+}
PRE(sys_getresgid)
{
PRE(sys_sysctl)
{
- struct __vki_sysctl_args *argz;
+ struct __vki_sysctl_args *args;
PRINT("sys_sysctl ( %p )", ARG1 );
- argz = (struct __vki_sysctl_args *)ARG1;
- PRE_REG_READ1(long, "sysctl", struct __sysctl_args *, argz);
+ args = (struct __vki_sysctl_args *)ARG1;
+ PRE_REG_READ1(long, "sysctl", struct __sysctl_args *, args);
PRE_MEM_WRITE( "sysctl(args)", ARG1, sizeof(struct __vki_sysctl_args) );
if (!VG_(is_addressable)(ARG1, sizeof(struct __vki_sysctl_args), VKI_PROT_READ)) {
SET_STATUS_Failure( VKI_EFAULT );
return;
}
- PRE_MEM_READ("sysctl(name)", (Addr)argz->name, argz->nlen * sizeof(*argz->name));
- if (argz->newval != NULL)
- PRE_MEM_READ("sysctl(newval)", (Addr)argz->newval, argz->newlen);
- if (argz->oldlenp != NULL) {
- PRE_MEM_READ("sysctl(oldlenp)", (Addr)argz->oldlenp, sizeof(*argz->oldlenp));
- PRE_MEM_WRITE("sysctl(oldval)", (Addr)argz->oldval, *argz->oldlenp);
+ PRE_MEM_READ("sysctl(name)", (Addr)args->name, args->nlen * sizeof(*args->name));
+ if (args->newval != NULL)
+ PRE_MEM_READ("sysctl(newval)", (Addr)args->newval, args->newlen);
+ if (args->oldlenp != NULL) {
+ PRE_MEM_READ("sysctl(oldlenp)", (Addr)args->oldlenp, sizeof(*args->oldlenp));
+ PRE_MEM_WRITE("sysctl(oldval)", (Addr)args->oldval, *args->oldlenp);
}
}
POST(sys_sysctl)
{
- struct __vki_sysctl_args *argz;
- argz = (struct __vki_sysctl_args *)ARG1;
- if (argz->oldlenp != NULL) {
- POST_MEM_WRITE((Addr)argz->oldlenp, sizeof(*argz->oldlenp));
- POST_MEM_WRITE((Addr)argz->oldval, 1 + *argz->oldlenp);
+ struct __vki_sysctl_args *args;
+ args = (struct __vki_sysctl_args *)ARG1;
+ if (args->oldlenp != NULL) {
+ POST_MEM_WRITE((Addr)args->oldlenp, sizeof(*args->oldlenp));
+ POST_MEM_WRITE((Addr)args->oldval, 1 + *args->oldlenp);
}
}
-//zz PRE(sys_prctl, MayBlock)
-//zz {
-//zz PRINT( "prctl ( %d, %d, %d, %d, %d )", ARG1, ARG2, ARG3, ARG4, ARG5 );
-//zz // XXX: too simplistic, often not all args are used
-//zz // Nb: can't use "ARG2".."ARG5" here because that's our own macro...
-//zz PRE_REG_READ5(long, "prctl",
-//zz int, option, unsigned long, arg2, unsigned long, arg3,
-//zz unsigned long, arg4, unsigned long, arg5);
-//zz // XXX: totally wrong... we need to look at the 'option' arg, and do
-//zz // PRE_MEM_READs/PRE_MEM_WRITEs as necessary...
-//zz }
-//zz
-//zz PRE(sys_sendfile, MayBlock)
-//zz {
-//zz PRINT("sys_sendfile ( %d, %d, %p, %llu )", ARG1,ARG2,ARG3,(ULong)ARG4);
-//zz PRE_REG_READ4(ssize_t, "sendfile",
-//zz int, out_fd, int, in_fd, vki_off_t *, offset,
-//zz vki_size_t, count);
-//zz if (ARG3 != 0)
-//zz PRE_MEM_WRITE( "sendfile(offset)", ARG3, sizeof(vki_off_t) );
-//zz }
-//zz
-//zz POST(sys_sendfile)
-//zz {
-//zz POST_MEM_WRITE( ARG3, sizeof( vki_off_t ) );
-//zz }
-//zz
-//zz PRE(sys_sendfile64, MayBlock)
-//zz {
-//zz PRINT("sendfile64 ( %d, %d, %p, %llu )",ARG1,ARG2,ARG3,(ULong)ARG4);
-//zz PRE_REG_READ4(ssize_t, "sendfile64",
-//zz int, out_fd, int, in_fd, vki_loff_t *, offset,
-//zz vki_size_t, count);
-//zz if (ARG3 != 0)
-//zz PRE_MEM_WRITE( "sendfile64(offset)", ARG3, sizeof(vki_loff_t) );
-//zz }
-//zz
-//zz POST(sys_sendfile64)
-//zz {
-//zz if (ARG3 != 0 ) {
-//zz POST_MEM_WRITE( ARG3, sizeof(vki_loff_t) );
-//zz }
-//zz }
+PRE(sys_prctl)
+{
+ *flags |= SfMayBlock;
+ PRINT( "prctl ( %d, %d, %d, %d, %d )", ARG1, ARG2, ARG3, ARG4, ARG5 );
+ // XXX: too simplistic, often not all args are used
+ // Nb: can't use "ARG2".."ARG5" here because that's our own macro...
+ PRE_REG_READ5(long, "prctl",
+ int, option, unsigned long, arg2, unsigned long, arg3,
+ unsigned long, arg4, unsigned long, arg5);
+ // XXX: totally wrong... we need to look at the 'option' arg, and do
+ // PRE_MEM_READs/PRE_MEM_WRITEs as necessary...
+}
+
+PRE(sys_sendfile)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_sendfile ( %d, %d, %p, %llu )", ARG1,ARG2,ARG3,(ULong)ARG4);
+ PRE_REG_READ4(ssize_t, "sendfile",
+ int, out_fd, int, in_fd, vki_off_t *, offset,
+ vki_size_t, count);
+ if (ARG3 != 0)
+ PRE_MEM_WRITE( "sendfile(offset)", ARG3, sizeof(vki_off_t) );
+}
+POST(sys_sendfile)
+{
+ if (ARG3 != 0 ) {
+ POST_MEM_WRITE( ARG3, sizeof( vki_off_t ) );
+ }
+}
+
+PRE(sys_sendfile64)
+{
+ *flags |= SfMayBlock;
+ PRINT("sendfile64 ( %d, %d, %p, %llu )",ARG1,ARG2,ARG3,(ULong)ARG4);
+ PRE_REG_READ4(ssize_t, "sendfile64",
+ int, out_fd, int, in_fd, vki_loff_t *, offset,
+ vki_size_t, count);
+ if (ARG3 != 0)
+ PRE_MEM_WRITE( "sendfile64(offset)", ARG3, sizeof(vki_loff_t) );
+}
+POST(sys_sendfile64)
+{
+ if (ARG3 != 0 ) {
+ POST_MEM_WRITE( ARG3, sizeof(vki_loff_t) );
+ }
+}
PRE(sys_futex)
{
}
}
-//zz PRE(sys_epoll_create, 0)
-//zz {
-//zz PRINT("sys_epoll_create ( %d )", ARG1);
-//zz PRE_REG_READ1(long, "epoll_create", int, size);
-//zz }
-//zz
-//zz POST(sys_epoll_create)
-//zz {
-//zz if (!VG_(fd_allowed)(RES, "epoll_create", 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, NULL);
-//zz }
-//zz }
-//zz
-//zz PRE(sys_epoll_ctl, 0)
-//zz {
-//zz static const char* epoll_ctl_s[3] = {
-//zz "EPOLL_CTL_ADD",
-//zz "EPOLL_CTL_DEL",
-//zz "EPOLL_CTL_MOD"
-//zz };
-//zz PRINT("sys_epoll_ctl ( %d, %s, %d, %p )",
-//zz ARG1, ( ARG2<3 ? epoll_ctl_s[ARG2] : "?" ), ARG3, ARG4);
-//zz PRE_REG_READ4(long, "epoll_ctl",
-//zz int, epfd, int, op, int, fd, struct epoll_event *, event);
-//zz PRE_MEM_READ( "epoll_ctl(event)", ARG4, sizeof(struct epoll_event) );
-//zz }
-//zz
-//zz PRE(sys_epoll_wait, MayBlock)
-//zz {
-//zz PRINT("sys_epoll_wait ( %d, %p, %d, %d )", ARG1, ARG2, ARG3, ARG4);
-//zz PRE_REG_READ4(long, "epoll_wait",
-//zz int, epfd, struct epoll_event *, events,
-//zz int, maxevents, int, timeout);
-//zz PRE_MEM_WRITE( "epoll_wait(events)", ARG2, sizeof(struct epoll_event)*ARG3);
-//zz }
-//zz
-//zz POST(sys_epoll_wait)
-//zz {
-//zz if (RES > 0)
-//zz POST_MEM_WRITE( ARG2, sizeof(struct epoll_event)*RES ) ;
-//zz }
+PRE(sys_epoll_create)
+{
+ PRINT("sys_epoll_create ( %d )", ARG1);
+ PRE_REG_READ1(long, "epoll_create", int, size);
+}
+POST(sys_epoll_create)
+{
+ vg_assert(SUCCESS);
+ if (!VG_(fd_allowed)(RES, "epoll_create", tid, True)) {
+ VG_(close)(RES);
+ SET_STATUS_Failure( VKI_EMFILE );
+ } else {
+ if (VG_(clo_track_fds))
+ VG_(record_fd_open) (tid, RES, NULL);
+ }
+}
+
+PRE(sys_epoll_ctl)
+{
+ static const HChar* epoll_ctl_s[3] = {
+ "EPOLL_CTL_ADD",
+ "EPOLL_CTL_DEL",
+ "EPOLL_CTL_MOD"
+ };
+ PRINT("sys_epoll_ctl ( %d, %s, %d, %p )",
+ ARG1, ( ARG2<3 ? epoll_ctl_s[ARG2] : "?" ), ARG3, ARG4);
+ PRE_REG_READ4(long, "epoll_ctl",
+ int, epfd, int, op, int, fd, struct epoll_event *, event);
+ PRE_MEM_READ( "epoll_ctl(event)", ARG4, sizeof(struct epoll_event) );
+}
+
+PRE(sys_epoll_wait)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_epoll_wait ( %d, %p, %d, %d )", ARG1, ARG2, ARG3, ARG4);
+ PRE_REG_READ4(long, "epoll_wait",
+ int, epfd, struct epoll_event *, events,
+ int, maxevents, int, timeout);
+ PRE_MEM_WRITE( "epoll_wait(events)", ARG2, sizeof(struct epoll_event)*ARG3);
+}
+POST(sys_epoll_wait)
+{
+ vg_assert(SUCCESS);
+ if (RES > 0)
+ POST_MEM_WRITE( ARG2, sizeof(struct epoll_event)*RES ) ;
+}
PRE(sys_gettid)
{
//zz PRE_REG_READ4(long, "fadvise64_64",
//zz int, fd, vki_loff_t, offset, vki_loff_t, len, int, advice)
//zz }
-//zz
-//zz // Nb: this wrapper is "Special" because we have to pad/unpad memory around
-//zz // the syscall itself, and this allows us to control exactly the code that
-//zz // gets run while the padding is in place.
-//zz PRE(sys_io_setup, Special)
-//zz {
-//zz SizeT size;
-//zz Addr addr;
-//zz
-//zz PRINT("sys_io_setup ( %u, %p )", ARG1,ARG2);
-//zz PRE_REG_READ2(long, "io_setup",
-//zz unsigned, nr_events, vki_aio_context_t *, ctxp);
-//zz PRE_MEM_WRITE( "io_setup(ctxp)", ARG2, sizeof(vki_aio_context_t) );
-//zz
-//zz size = VG_PGROUNDUP(sizeof(struct vki_aio_ring) +
-//zz ARG1*sizeof(struct vki_io_event));
-//zz addr = VG_(find_map_space)(0, size, True);
-//zz
-//zz if (addr == 0) {
-//zz SET_STATUS_( -VKI_ENOMEM );
-//zz return;
-//zz }
-//zz
-//zz VG_(map_segment)(addr, size, VKI_PROT_READ|VKI_PROT_WRITE, SF_FIXED);
-//zz
-//zz VG_(pad_address_space)(0);
-//zz SET_STATUS_( VG_(do_syscall2)(SYSNO, ARG1, ARG2) );
-//zz VG_(unpad_address_space)(0);
-//zz
-//zz if (RES == 0) {
-//zz struct vki_aio_ring *r = *(struct vki_aio_ring **)ARG2;
-//zz
-//zz vg_assert(addr == (Addr)r);
-//zz vg_assert(VG_(valid_client_addr)(addr, size, tid, "io_setup"));
-//zz
-//zz VG_TRACK( new_mem_mmap, addr, size, True, True, False );
-//zz POST_MEM_WRITE( ARG2, sizeof(vki_aio_context_t) );
-//zz }
-//zz else {
-//zz VG_(unmap_range)(addr, size);
-//zz }
-//zz }
-//zz
-//zz // Nb: This wrapper is "Special" because we need 'size' to do the unmap
-//zz // after the syscall. We must get 'size' from the aio_ring structure,
-//zz // before the syscall, while the aio_ring structure still exists. (And we
-//zz // know that we must look at the aio_ring structure because Tom inspected the
-//zz // kernel and glibc sources to see what they do, yuk.)
-//zz //
-//zz // XXX This segment can be implicitly unmapped when aio
-//zz // file-descriptors are closed...
-//zz PRE(sys_io_destroy, Special)
-//zz {
-//zz Segment *s = VG_(find_segment)(ARG1);
-//zz struct vki_aio_ring *r;
-//zz SizeT size;
-//zz
-//zz PRINT("sys_io_destroy ( %llu )", (ULong)ARG1);
-//zz PRE_REG_READ1(long, "io_destroy", vki_aio_context_t, ctx);
-//zz
-//zz // If we are going to seg fault (due to a bogus ARG1) do it as late as
-//zz // possible...
-//zz r = *(struct vki_aio_ring **)ARG1;
-//zz size = VG_PGROUNDUP(sizeof(struct vki_aio_ring) +
-//zz r->nr*sizeof(struct vki_io_event));
-//zz
-//zz SET_STATUS_( VG_(do_syscall1)(SYSNO, ARG1) );
-//zz
-//zz if (RES == 0 && s != NULL) {
-//zz VG_TRACK( die_mem_munmap, ARG1, size );
-//zz VG_(unmap_range)(ARG1, size);
-//zz }
-//zz }
-//zz
-//zz PRE(sys_io_getevents, MayBlock)
-//zz {
-//zz PRINT("sys_io_getevents ( %llu, %lld, %lld, %p, %p )",
-//zz (ULong)ARG1,(Long)ARG2,(Long)ARG3,ARG4,ARG5);
-//zz PRE_REG_READ5(long, "io_getevents",
-//zz vki_aio_context_t, ctx_id, long, min_nr, long, nr,
-//zz struct io_event *, events,
-//zz struct timespec *, timeout);
-//zz if (ARG3 > 0)
-//zz PRE_MEM_WRITE( "io_getevents(events)",
-//zz ARG4, sizeof(struct vki_io_event)*ARG3 );
-//zz if (ARG5 != 0)
-//zz PRE_MEM_READ( "io_getevents(timeout)",
-//zz ARG5, sizeof(struct vki_timespec));
-//zz }
-//zz
-//zz POST(sys_io_getevents)
-//zz {
-//zz int i;
-//zz
-//zz if (RES > 0) {
-//zz POST_MEM_WRITE( ARG4, sizeof(struct vki_io_event)*RES );
-//zz for (i = 0; i < RES; i++) {
-//zz const struct vki_io_event *vev = ((struct vki_io_event *)ARG4) + i;
-//zz const struct vki_iocb *cb = (struct vki_iocb *)(Addr)vev->obj;
-//zz
-//zz switch (cb->aio_lio_opcode) {
-//zz case VKI_IOCB_CMD_PREAD:
-//zz if (vev->result > 0)
-//zz POST_MEM_WRITE( cb->aio_buf, vev->result );
-//zz break;
-//zz
-//zz case VKI_IOCB_CMD_PWRITE:
-//zz break;
-//zz
-//zz default:
-//zz VG_(message)(Vg_DebugMsg,"Warning: unhandled io_getevents opcode: %u\n",cb->aio_lio_opcode);
-//zz break;
-//zz }
-//zz }
-//zz }
-//zz }
-//zz
-//zz PRE(sys_io_submit, 0)
-//zz {
-//zz int i;
-//zz
-//zz PRINT("sys_io_submit( %llu, %lld, %p )", (ULong)ARG1,(Long)ARG2,ARG3);
-//zz PRE_REG_READ3(long, "io_submit",
-//zz vki_aio_context_t, ctx_id, long, nr,
-//zz struct iocb **, iocbpp);
-//zz PRE_MEM_READ( "io_submit(iocbpp)", ARG3, ARG2*sizeof(struct vki_iocb *) );
-//zz if (ARG3 != 0) {
-//zz for (i = 0; i < ARG2; i++) {
-//zz struct vki_iocb *cb = ((struct vki_iocb **)ARG3)[i];
-//zz PRE_MEM_READ( "io_submit(iocb)", (Addr)cb, sizeof(struct vki_iocb) );
-//zz switch (cb->aio_lio_opcode) {
-//zz case VKI_IOCB_CMD_PREAD:
-//zz PRE_MEM_WRITE( "io_submit(PREAD)", cb->aio_buf, cb->aio_nbytes );
-//zz break;
-//zz
-//zz case VKI_IOCB_CMD_PWRITE:
-//zz PRE_MEM_READ( "io_submit(PWRITE)", cb->aio_buf, cb->aio_nbytes );
-//zz break;
-//zz
-//zz default:
-//zz VG_(message)(Vg_DebugMsg,"Warning: unhandled io_submit opcode: %u\n",
-//zz cb->aio_lio_opcode);
-//zz break;
-//zz }
-//zz }
-//zz }
-//zz }
-//zz
-//zz PRE(sys_io_cancel, 0)
-//zz {
-//zz PRINT("sys_io_cancel( %llu, %p, %p )", (ULong)ARG1,ARG2,ARG3);
-//zz PRE_REG_READ3(long, "io_cancel",
-//zz vki_aio_context_t, ctx_id, struct iocb *, iocb,
-//zz struct io_event *, result);
-//zz PRE_MEM_READ( "io_cancel(iocb)", ARG2, sizeof(struct vki_iocb) );
-//zz PRE_MEM_WRITE( "io_cancel(result)", ARG3, sizeof(struct vki_io_event) );
-//zz }
-//zz
-//zz POST(sys_io_cancel)
-//zz {
-//zz POST_MEM_WRITE( ARG3, sizeof(struct vki_io_event) );
-//zz }
-//zz
-//zz #undef PRE
-//zz #undef POST
+
+// Nb: this wrapper has to pad/unpad memory around the syscall itself,
+// and this allows us to control exactly the code that gets run while
+// the padding is in place.
+PRE(sys_io_setup)
+{
+ SizeT size;
+ Addr addr;
+
+ PRINT("sys_io_setup ( %u, %p )", ARG1,ARG2);
+ PRE_REG_READ2(long, "io_setup",
+ unsigned, nr_events, vki_aio_context_t *, ctxp);
+ PRE_MEM_WRITE( "io_setup(ctxp)", ARG2, sizeof(vki_aio_context_t) );
+
+ size = VG_PGROUNDUP(sizeof(struct vki_aio_ring) +
+ ARG1*sizeof(struct vki_io_event));
+ addr = VG_(find_map_space)(0, size, True);
+
+ if (addr == 0) {
+ SET_STATUS_Failure( VKI_ENOMEM );
+ return;
+ }
+
+ VG_(map_segment)(addr, size, VKI_PROT_READ|VKI_PROT_WRITE, SF_FIXED);
+
+ VG_(pad_address_space)(0);
+ SET_STATUS_from_SysRes( VG_(do_syscall2)(SYSNO, ARG1, ARG2) );
+ VG_(unpad_address_space)(0);
+
+ if (SUCCESS && RES == 0) {
+ struct vki_aio_ring *r = *(struct vki_aio_ring **)ARG2;
+
+ vg_assert(addr == (Addr)r);
+ vg_assert(VG_(valid_client_addr)(addr, size, tid, "io_setup"));
+
+ VG_TRACK( new_mem_mmap, addr, size, True, True, False );
+ POST_MEM_WRITE( ARG2, sizeof(vki_aio_context_t) );
+ }
+ else {
+ VG_(unmap_range)(addr, size);
+ }
+}
+
+// Nb: This wrapper is "Special" because we need 'size' to do the unmap
+// after the syscall. We must get 'size' from the aio_ring structure,
+// before the syscall, while the aio_ring structure still exists. (And we
+// know that we must look at the aio_ring structure because Tom inspected the
+// kernel and glibc sources to see what they do, yuk.)
+//
+// XXX This segment can be implicitly unmapped when aio
+// file-descriptors are closed...
+PRE(sys_io_destroy)
+{
+ Segment *s = VG_(find_segment)(ARG1);
+ struct vki_aio_ring *r;
+ SizeT size;
+
+ PRINT("sys_io_destroy ( %llu )", (ULong)ARG1);
+ PRE_REG_READ1(long, "io_destroy", vki_aio_context_t, ctx);
+
+ // If we are going to seg fault (due to a bogus ARG1) do it as late as
+ // possible...
+ r = *(struct vki_aio_ring **)ARG1;
+ size = VG_PGROUNDUP(sizeof(struct vki_aio_ring) +
+ r->nr*sizeof(struct vki_io_event));
+
+ SET_STATUS_from_SysRes( VG_(do_syscall1)(SYSNO, ARG1) );
+
+ if (SUCCESS && RES == 0 && s != NULL) {
+ VG_TRACK( die_mem_munmap, ARG1, size );
+ VG_(unmap_range)(ARG1, size);
+ }
+}
+
+PRE(sys_io_getevents)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_io_getevents ( %llu, %lld, %lld, %p, %p )",
+ (ULong)ARG1,(Long)ARG2,(Long)ARG3,ARG4,ARG5);
+ PRE_REG_READ5(long, "io_getevents",
+ vki_aio_context_t, ctx_id, long, min_nr, long, nr,
+ struct io_event *, events,
+ struct timespec *, timeout);
+ if (ARG3 > 0)
+ PRE_MEM_WRITE( "io_getevents(events)",
+ ARG4, sizeof(struct vki_io_event)*ARG3 );
+ if (ARG5 != 0)
+ PRE_MEM_READ( "io_getevents(timeout)",
+ ARG5, sizeof(struct vki_timespec));
+}
+POST(sys_io_getevents)
+{
+ Int i;
+ vg_assert(SUCCESS);
+ if (RES > 0) {
+ POST_MEM_WRITE( ARG4, sizeof(struct vki_io_event)*RES );
+ for (i = 0; i < RES; i++) {
+ const struct vki_io_event *vev = ((struct vki_io_event *)ARG4) + i;
+ const struct vki_iocb *cb = (struct vki_iocb *)(Addr)vev->obj;
+
+ switch (cb->aio_lio_opcode) {
+ case VKI_IOCB_CMD_PREAD:
+ if (vev->result > 0)
+ POST_MEM_WRITE( cb->aio_buf, vev->result );
+ break;
+
+ case VKI_IOCB_CMD_PWRITE:
+ break;
+
+ default:
+ VG_(message)(Vg_DebugMsg,
+ "Warning: unhandled io_getevents opcode: %u\n",
+ cb->aio_lio_opcode);
+ break;
+ }
+ }
+ }
+}
+
+PRE(sys_io_submit)
+{
+ Int i;
+
+ PRINT("sys_io_submit( %llu, %lld, %p )", (ULong)ARG1,(Long)ARG2,ARG3);
+ PRE_REG_READ3(long, "io_submit",
+ vki_aio_context_t, ctx_id, long, nr,
+ struct iocb **, iocbpp);
+ PRE_MEM_READ( "io_submit(iocbpp)", ARG3, ARG2*sizeof(struct vki_iocb *) );
+ if (ARG3 != 0) {
+ for (i = 0; i < ARG2; i++) {
+ struct vki_iocb *cb = ((struct vki_iocb **)ARG3)[i];
+ PRE_MEM_READ( "io_submit(iocb)", (Addr)cb, sizeof(struct vki_iocb) );
+ switch (cb->aio_lio_opcode) {
+ case VKI_IOCB_CMD_PREAD:
+ PRE_MEM_WRITE( "io_submit(PREAD)", cb->aio_buf, cb->aio_nbytes );
+ break;
+
+ case VKI_IOCB_CMD_PWRITE:
+ PRE_MEM_READ( "io_submit(PWRITE)", cb->aio_buf, cb->aio_nbytes );
+ break;
+
+ default:
+ VG_(message)(Vg_DebugMsg,"Warning: unhandled io_submit opcode: %u\n",
+ cb->aio_lio_opcode);
+ break;
+ }
+ }
+ }
+}
+
+PRE(sys_io_cancel)
+{
+ PRINT("sys_io_cancel( %llu, %p, %p )", (ULong)ARG1,ARG2,ARG3);
+ PRE_REG_READ3(long, "io_cancel",
+ vki_aio_context_t, ctx_id, struct iocb *, iocb,
+ struct io_event *, result);
+ PRE_MEM_READ( "io_cancel(iocb)", ARG2, sizeof(struct vki_iocb) );
+ PRE_MEM_WRITE( "io_cancel(result)", ARG3, sizeof(struct vki_io_event) );
+}
+
+POST(sys_io_cancel)
+{
+ POST_MEM_WRITE( ARG3, sizeof(struct vki_io_event) );
+}
+
+#undef PRE
+#undef POST
/*--------------------------------------------------------------------*/
/*--- end ---*/
}
-//zz static Int sys_get_thread_area ( ThreadId tid, vki_modify_ldt_t* info )
-//zz {
-//zz Int idx;
-//zz VexGuestX86SegDescr* gdt;
-//zz
-//zz vg_assert(sizeof(HWord) == sizeof(VexGuestX86SegDescr*));
-//zz vg_assert(8 == sizeof(VexGuestX86SegDescr));
-//zz
-//zz if (info == NULL)
-//zz return -VKI_EFAULT;
-//zz
-//zz idx = info->entry_number;
-//zz
-//zz if (idx < 0 || idx >= VEX_GUEST_X86_GDT_NENT)
-//zz return -VKI_EINVAL;
-//zz
-//zz gdt = (VexGuestX86SegDescr*)VG_(threads)[tid].arch.vex.guest_GDT;
-//zz
-//zz /* If the thread doesn't have a GDT, allocate it now. */
-//zz if (!gdt) {
-//zz gdt = alloc_zeroed_x86_GDT();
-//zz VG_(threads)[tid].arch.vex.guest_GDT = (HWord)gdt;
-//zz }
-//zz
-//zz info->base_addr = ( gdt[idx].LdtEnt.Bits.BaseHi << 24 ) |
-//zz ( gdt[idx].LdtEnt.Bits.BaseMid << 16 ) |
-//zz gdt[idx].LdtEnt.Bits.BaseLow;
-//zz info->limit = ( gdt[idx].LdtEnt.Bits.LimitHi << 16 ) |
-//zz gdt[idx].LdtEnt.Bits.LimitLow;
-//zz info->seg_32bit = gdt[idx].LdtEnt.Bits.Default_Big;
-//zz info->contents = ( gdt[idx].LdtEnt.Bits.Type >> 2 ) & 0x3;
-//zz info->read_exec_only = ( gdt[idx].LdtEnt.Bits.Type & 0x1 ) ^ 0x1;
-//zz info->limit_in_pages = gdt[idx].LdtEnt.Bits.Granularity;
-//zz info->seg_not_present = gdt[idx].LdtEnt.Bits.Pres ^ 0x1;
-//zz info->useable = gdt[idx].LdtEnt.Bits.Sys;
-//zz info->reserved = 0;
-//zz
-//zz return 0;
-//zz }
+static SysRes sys_get_thread_area ( ThreadId tid, vki_modify_ldt_t* info )
+{
+ Int idx;
+ VexGuestX86SegDescr* gdt;
+
+ vg_assert(sizeof(HWord) == sizeof(VexGuestX86SegDescr*));
+ vg_assert(8 == sizeof(VexGuestX86SegDescr));
+
+ if (info == NULL)
+ return VG_(mk_SysRes_Error)( VKI_EFAULT );
+
+ idx = info->entry_number;
+
+ if (idx < 0 || idx >= VEX_GUEST_X86_GDT_NENT)
+ return VG_(mk_SysRes_Error)( VKI_EINVAL );
+
+ gdt = (VexGuestX86SegDescr*)VG_(threads)[tid].arch.vex.guest_GDT;
+
+ /* If the thread doesn't have a GDT, allocate it now. */
+ if (!gdt) {
+ gdt = alloc_zeroed_x86_GDT();
+ VG_(threads)[tid].arch.vex.guest_GDT = (HWord)gdt;
+ }
+
+ info->base_addr = ( gdt[idx].LdtEnt.Bits.BaseHi << 24 ) |
+ ( gdt[idx].LdtEnt.Bits.BaseMid << 16 ) |
+ gdt[idx].LdtEnt.Bits.BaseLow;
+ info->limit = ( gdt[idx].LdtEnt.Bits.LimitHi << 16 ) |
+ gdt[idx].LdtEnt.Bits.LimitLow;
+ info->seg_32bit = gdt[idx].LdtEnt.Bits.Default_Big;
+ info->contents = ( gdt[idx].LdtEnt.Bits.Type >> 2 ) & 0x3;
+ info->read_exec_only = ( gdt[idx].LdtEnt.Bits.Type & 0x1 ) ^ 0x1;
+ info->limit_in_pages = gdt[idx].LdtEnt.Bits.Granularity;
+ info->seg_not_present = gdt[idx].LdtEnt.Bits.Pres ^ 0x1;
+ info->useable = gdt[idx].LdtEnt.Bits.Sys;
+ info->reserved = 0;
+
+ return VG_(mk_SysRes_Error)( 0 );
+}
/* ---------------------------------------------------------------------
More thread stuff
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_get_thread_area);
DECL_TEMPLATE(x86_linux, sys_ptrace);
DECL_TEMPLATE(x86_linux, sys_sigaction);
DECL_TEMPLATE(x86_linux, old_select);
SET_STATUS_from_SysRes( sys_set_thread_area( tid, (void *)ARG1 ) );
}
-//zz PRE(sys_get_thread_area, Special)
-//zz {
-//zz PRINT("sys_get_thread_area ( %p )", ARG1);
-//zz PRE_REG_READ1(int, "get_thread_area", struct user_desc *, u_info)
-//zz PRE_MEM_WRITE( "get_thread_area(u_info)", ARG1, sizeof(vki_modify_ldt_t) );
-//zz
-//zz /* "do" the syscall ourselves; the kernel never sees it */
-//zz SET_STATUS_( sys_get_thread_area( tid, (void *)ARG1 ) );
-//zz
-//zz if (!VG_(is_kerror)(RES)) {
-//zz POST_MEM_WRITE( ARG1, sizeof(vki_modify_ldt_t) );
-//zz }
-//zz }
+PRE(sys_get_thread_area)
+{
+ PRINT("sys_get_thread_area ( %p )", ARG1);
+ PRE_REG_READ1(int, "get_thread_area", struct user_desc *, u_info)
+ PRE_MEM_WRITE( "get_thread_area(u_info)", ARG1, sizeof(vki_modify_ldt_t) );
+
+ /* "do" the syscall ourselves; the kernel never sees it */
+ SET_STATUS_from_SysRes( sys_get_thread_area( tid, (void *)ARG1 ) );
+
+ if (SUCCESS) {
+ POST_MEM_WRITE( ARG1, sizeof(vki_modify_ldt_t) );
+ }
+}
// Parts of this are x86-specific, but the *PEEK* cases are generic.
// XXX: Why is the memory pointed to by ARG3 never checked?
}; */
UWord a1, a2, a3, a4, a5, a6;
- UWord* arg_block = (UWord*)ARG1;
- PRE_REG_READ1(long, "old_mmap", struct mmap_arg_struct *, ARG1);
- PRE_MEM_READ( "old_mmap(args)", (Addr)arg_block, 6*sizeof(UWord) );
+ UWord* args = (UWord*)ARG1;
+ PRE_REG_READ1(long, "old_mmap", struct mmap_arg_struct *, args);
+ PRE_MEM_READ( "old_mmap(args)", (Addr)args, 6*sizeof(UWord) );
- a1 = arg_block[0];
- a2 = arg_block[1];
- a3 = arg_block[2];
- a4 = arg_block[3];
- a5 = arg_block[4];
- a6 = arg_block[5];
+ a1 = args[0];
+ a2 = args[1];
+ a3 = args[2];
+ a4 = args[3];
+ a5 = args[4];
+ a6 = args[5];
PRINT("old_mmap ( %p, %llu, %d, %d, %d, %d )",
a1, (ULong)a2, a3, a4, a5, a6 );
if (0)
VG_(printf)("old_mmap( %p, fixed %d ) -> %s(%p)\n",
- arg_block[0],
- arg_block[3]&VKI_MAP_FIXED,
+ args[0],
+ args[3]&VKI_MAP_FIXED,
FAILURE ? "Fail" : "Success", RES_unchecked);
/* Stay sane */
- if (SUCCESS && (arg_block[3] & VKI_MAP_FIXED))
- vg_assert(RES == arg_block[0]);
+ if (SUCCESS && (args[3] & VKI_MAP_FIXED))
+ vg_assert(RES == args[0]);
}
// XXX: lstat64/fstat64/stat64 are generic, but not necessarily
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_setparam, sys_sched_setparam), // 154
+
GENXY(__NR_sched_getparam, sys_sched_getparam), // 155
GENX_(__NR_sched_setscheduler, sys_sched_setscheduler), // 156
GENX_(__NR_sched_getscheduler, sys_sched_getscheduler), // 157
//zz // (__NR_sched_rr_get_interval, sys_sched_rr_get_interval), // 161 */*
GENXY(__NR_nanosleep, sys_nanosleep), // 162
GENX_(__NR_mremap, sys_mremap), // 163
-//zz LINX_(__NR_setresuid, sys_setresuid16), // 164
-//zz
-//zz LINXY(__NR_getresuid, sys_getresuid16), // 165
+ LINX_(__NR_setresuid, sys_setresuid16), // 164
+
+ LINXY(__NR_getresuid, sys_getresuid16), // 165
//zz // (__NR_vm86, sys_vm86), // 166 x86/Linux-only
GENX_(__NR_query_module, sys_ni_syscall), // 167
GENXY(__NR_poll, sys_poll), // 168
//zz // (__NR_nfsservctl, sys_nfsservctl), // 169 */Linux
//zz
-//zz LINX_(__NR_setresgid, sys_setresgid16), // 170
-//zz LINXY(__NR_getresgid, sys_getresgid16), // 171
-//zz LINX_(__NR_prctl, sys_prctl), // 172
+ LINX_(__NR_setresgid, sys_setresgid16), // 170
+ LINXY(__NR_getresgid, sys_getresgid16), // 171
+ LINX_(__NR_prctl, sys_prctl), // 172
PLAX_(__NR_rt_sigreturn, sys_rt_sigreturn), // 173 x86/Linux only?
GENXY(__NR_rt_sigaction, sys_rt_sigaction), // 174
GENXY(__NR_rt_sigprocmask, sys_rt_sigprocmask), // 175
-//zz GENXY(__NR_rt_sigpending, sys_rt_sigpending), // 176
+ GENXY(__NR_rt_sigpending, sys_rt_sigpending), // 176
GENXY(__NR_rt_sigtimedwait, sys_rt_sigtimedwait),// 177
-//zz GENXY(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo),// 178
+ GENXY(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo),// 178
GENX_(__NR_rt_sigsuspend, sys_rt_sigsuspend), // 179
-//zz
-//zz GENXY(__NR_pread64, sys_pread64), // 180
-//zz GENX_(__NR_pwrite64, sys_pwrite64), // 181
-//zz GENX_(__NR_chown, sys_chown16), // 182
+
+ GENXY(__NR_pread64, sys_pread64), // 180
+ GENX_(__NR_pwrite64, sys_pwrite64), // 181
+ GENX_(__NR_chown, sys_chown16), // 182
GENXY(__NR_getcwd, sys_getcwd), // 183
-//zz GENXY(__NR_capget, sys_capget), // 184
-//zz
-//zz GENX_(__NR_capset, sys_capset), // 185
+ GENXY(__NR_capget, sys_capget), // 184
+
+ GENX_(__NR_capset, sys_capset), // 185
GENXY(__NR_sigaltstack, sys_sigaltstack), // 186
-//zz LINXY(__NR_sendfile, sys_sendfile), // 187
-//zz GENXY(__NR_getpmsg, sys_getpmsg), // 188
-//zz GENX_(__NR_putpmsg, sys_putpmsg), // 189
+ LINXY(__NR_sendfile, sys_sendfile), // 187
+ GENXY(__NR_getpmsg, sys_getpmsg), // 188
+ GENX_(__NR_putpmsg, sys_putpmsg), // 189
// Nb: we treat vfork as fork
GENX_(__NR_vfork, sys_fork), // 190
GENXY(__NR_ugetrlimit, sys_getrlimit), // 191
GENXY(__NR_mmap2, sys_mmap2), // 192
-//zz GENX_(__NR_truncate64, sys_truncate64), // 193
-//zz GENX_(__NR_ftruncate64, sys_ftruncate64), // 194
-//zz
+ GENX_(__NR_truncate64, sys_truncate64), // 193
+ GENX_(__NR_ftruncate64, sys_ftruncate64), // 194
+
PLAXY(__NR_stat64, sys_stat64), // 195
PLAXY(__NR_lstat64, sys_lstat64), // 196
PLAXY(__NR_fstat64, sys_fstat64), // 197
-//zz GENX_(__NR_lchown32, sys_lchown), // 198
+ GENX_(__NR_lchown32, sys_lchown), // 198
GENX_(__NR_getuid32, sys_getuid), // 199
GENX_(__NR_getgid32, sys_getgid), // 200
GENX_(__NR_geteuid32, sys_geteuid), // 201
GENX_(__NR_getegid32, sys_getegid), // 202
-//zz GENX_(__NR_setreuid32, sys_setreuid), // 203
-//zz GENX_(__NR_setregid32, sys_setregid), // 204
+ GENX_(__NR_setreuid32, sys_setreuid), // 203
+ GENX_(__NR_setregid32, sys_setregid), // 204
GENXY(__NR_getgroups32, sys_getgroups), // 205
-//zz GENX_(__NR_setgroups32, sys_setgroups), // 206
-//zz GENX_(__NR_fchown32, sys_fchown), // 207
-//zz LINX_(__NR_setresuid32, sys_setresuid), // 208
+ GENX_(__NR_setgroups32, sys_setgroups), // 206
+ GENX_(__NR_fchown32, sys_fchown), // 207
+ LINX_(__NR_setresuid32, sys_setresuid), // 208
LINXY(__NR_getresuid32, sys_getresuid), // 209
-//zz LINX_(__NR_setresgid32, sys_setresgid), // 210
+ LINX_(__NR_setresgid32, sys_setresgid), // 210
LINXY(__NR_getresgid32, sys_getresgid), // 211
-//zz GENX_(__NR_chown32, sys_chown), // 212
-//zz GENX_(__NR_setuid32, sys_setuid), // 213
-//zz GENX_(__NR_setgid32, sys_setgid), // 214
-//zz
-//zz LINX_(__NR_setfsuid32, sys_setfsuid), // 215
-//zz LINX_(__NR_setfsgid32, sys_setfsgid), // 216
+ GENX_(__NR_chown32, sys_chown), // 212
+ GENX_(__NR_setuid32, sys_setuid), // 213
+ GENX_(__NR_setgid32, sys_setgid), // 214
+
+ LINX_(__NR_setfsuid32, sys_setfsuid), // 215
+ LINX_(__NR_setfsgid32, sys_setfsgid), // 216
//zz // (__NR_pivot_root, sys_pivot_root), // 217 */Linux
-//zz GENXY(__NR_mincore, sys_mincore), // 218
+ GENXY(__NR_mincore, sys_mincore), // 218
GENX_(__NR_madvise, sys_madvise), // 219
GENXY(__NR_getdents64, sys_getdents64), // 220
LINX_(__NR_gettid, sys_gettid), // 224
//zz // (__NR_readahead, sys_readahead), // 225 */(Linux?)
-//zz GENX_(__NR_setxattr, sys_setxattr), // 226
-//zz GENX_(__NR_lsetxattr, sys_lsetxattr), // 227
-//zz GENX_(__NR_fsetxattr, sys_fsetxattr), // 228
+ GENX_(__NR_setxattr, sys_setxattr), // 226
+ GENX_(__NR_lsetxattr, sys_lsetxattr), // 227
+ GENX_(__NR_fsetxattr, sys_fsetxattr), // 228
GENXY(__NR_getxattr, sys_getxattr), // 229
-//zz
-//zz GENXY(__NR_lgetxattr, sys_lgetxattr), // 230
-//zz GENXY(__NR_fgetxattr, sys_fgetxattr), // 231
-//zz GENXY(__NR_listxattr, sys_listxattr), // 232
-//zz GENXY(__NR_llistxattr, sys_llistxattr), // 233
-//zz GENXY(__NR_flistxattr, sys_flistxattr), // 234
-//zz
-//zz GENX_(__NR_removexattr, sys_removexattr), // 235
-//zz GENX_(__NR_lremovexattr, sys_lremovexattr), // 236
-//zz GENX_(__NR_fremovexattr, sys_fremovexattr), // 237
+
+ GENXY(__NR_lgetxattr, sys_lgetxattr), // 230
+ GENXY(__NR_fgetxattr, sys_fgetxattr), // 231
+ GENXY(__NR_listxattr, sys_listxattr), // 232
+ GENXY(__NR_llistxattr, sys_llistxattr), // 233
+ GENXY(__NR_flistxattr, sys_flistxattr), // 234
+
+ GENX_(__NR_removexattr, sys_removexattr), // 235
+ GENX_(__NR_lremovexattr, sys_lremovexattr), // 236
+ GENX_(__NR_fremovexattr, sys_fremovexattr), // 237
//zz LINX_(__NR_tkill, sys_tkill), // 238 */Linux
-//zz LINXY(__NR_sendfile64, sys_sendfile64), // 239
-//zz
+ LINXY(__NR_sendfile64, sys_sendfile64), // 239
+
LINXY(__NR_futex, sys_futex), // 240
-//zz GENX_(__NR_sched_setaffinity, sys_sched_setaffinity), // 241
-//zz GENXY(__NR_sched_getaffinity, sys_sched_getaffinity), // 242
+ GENX_(__NR_sched_setaffinity, sys_sched_setaffinity), // 241
+ GENXY(__NR_sched_getaffinity, sys_sched_getaffinity), // 242
PLAX_(__NR_set_thread_area, sys_set_thread_area), // 243
-//zz PLAX_(__NR_get_thread_area, sys_get_thread_area), // 244
-//zz
-//zz LINX_(__NR_io_setup, sys_io_setup), // 245
-//zz LINX_(__NR_io_destroy, sys_io_destroy), // 246
-//zz LINXY(__NR_io_getevents, sys_io_getevents), // 247
-//zz LINX_(__NR_io_submit, sys_io_submit), // 248
-//zz LINXY(__NR_io_cancel, sys_io_cancel), // 249
-//zz
+ PLAX_(__NR_get_thread_area, sys_get_thread_area), // 244
+
+ LINX_(__NR_io_setup, sys_io_setup), // 245
+ LINX_(__NR_io_destroy, sys_io_destroy), // 246
+ LINXY(__NR_io_getevents, sys_io_getevents), // 247
+ LINX_(__NR_io_submit, sys_io_submit), // 248
+ LINXY(__NR_io_cancel, sys_io_cancel), // 249
+
//zz LINX_(__NR_fadvise64, sys_fadvise64), // 250 */(Linux?)
GENX_(251, sys_ni_syscall), // 251
LINX_(__NR_exit_group, sys_exit_group), // 252
-//zz GENXY(__NR_lookup_dcookie, sys_lookup_dcookie), // 253
-//zz LINXY(__NR_epoll_create, sys_epoll_create), // 254
-//zz
-//zz LINX_(__NR_epoll_ctl, sys_epoll_ctl), // 255
-//zz LINXY(__NR_epoll_wait, sys_epoll_wait), // 256
+ GENXY(__NR_lookup_dcookie, sys_lookup_dcookie), // 253
+ LINXY(__NR_epoll_create, sys_epoll_create), // 254
+
+ LINX_(__NR_epoll_ctl, sys_epoll_ctl), // 255
+ LINXY(__NR_epoll_wait, sys_epoll_wait), // 256
//zz // (__NR_remap_file_pages, sys_remap_file_pages), // 257 */Linux
LINX_(__NR_set_tid_address, sys_set_tid_address), // 258
-//zz GENXY(__NR_timer_create, sys_timer_create), // 259
-//zz
-//zz GENXY(__NR_timer_settime, sys_timer_settime), // (timer_create+1)
-//zz GENXY(__NR_timer_gettime, sys_timer_gettime), // (timer_create+2)
-//zz GENX_(__NR_timer_getoverrun, sys_timer_getoverrun),//(timer_create+3)
-//zz GENX_(__NR_timer_delete, sys_timer_delete), // (timer_create+4)
-//zz GENX_(__NR_clock_settime, sys_clock_settime), // (timer_create+5)
-//zz
+ GENXY(__NR_timer_create, sys_timer_create), // 259
+
+ GENXY(__NR_timer_settime, sys_timer_settime), // (timer_create+1)
+ GENXY(__NR_timer_gettime, sys_timer_gettime), // (timer_create+2)
+ GENX_(__NR_timer_getoverrun, sys_timer_getoverrun),//(timer_create+3)
+ GENX_(__NR_timer_delete, sys_timer_delete), // (timer_create+4)
+ GENX_(__NR_clock_settime, sys_clock_settime), // (timer_create+5)
+
GENXY(__NR_clock_gettime, sys_clock_gettime), // (timer_create+6)
-//zz GENXY(__NR_clock_getres, sys_clock_getres), // (timer_create+7)
+ GENXY(__NR_clock_getres, sys_clock_getres), // (timer_create+7)
//zz // (__NR_clock_nanosleep, sys_clock_nanosleep),// (timer_create+8) */*
-//zz GENXY(__NR_statfs64, sys_statfs64), // 268
-//zz GENXY(__NR_fstatfs64, sys_fstatfs64), // 269
-//zz
+ GENXY(__NR_statfs64, sys_statfs64), // 268
+ GENXY(__NR_fstatfs64, sys_fstatfs64), // 269
+
LINX_(__NR_tgkill, sys_tgkill), // 270 */Linux
-//zz GENX_(__NR_utimes, sys_utimes), // 271
+ GENX_(__NR_utimes, sys_utimes), // 271
//zz LINX_(__NR_fadvise64_64, sys_fadvise64_64), // 272 */(Linux?)
GENX_(__NR_vserver, sys_ni_syscall), // 273
//zz // (__NR_mbind, sys_mbind), // 274 ?/?