|
From: <sv...@va...> - 2005-06-10 10:27:59
|
Author: sewardj
Date: 2005-06-10 11:27:55 +0100 (Fri, 10 Jun 2005)
New Revision: 3867
Log:
Clean up after m_syscalls changes: reinstate enough syscalls that
memcheck/tests/x86/scalar works again.
Modified:
trunk/coregrind/m_syscalls/priv_types_n_macros.h
trunk/coregrind/m_syscalls/syscalls-generic.c
trunk/coregrind/m_syscalls/syscalls-linux.c
trunk/coregrind/m_syscalls/syscalls-x86-linux.c
Modified: trunk/coregrind/m_syscalls/priv_types_n_macros.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syscalls/priv_types_n_macros.h 2005-06-10 10:25:02 =
UTC (rev 3866)
+++ trunk/coregrind/m_syscalls/priv_types_n_macros.h 2005-06-10 10:27:55 =
UTC (rev 3867)
@@ -83,11 +83,10 @@
SyscallArgLayout;
=20
/* Flags describing syscall wrappers */
-#define SfMayBlock (1 << 1) /* may block =
*/
-#define SfPostOnFail (1 << 2) /* call POST() function on failure =
*/
-/* #define SfPadAddr (1 << 3) */ /* pad+unpad address space around sysca=
ll */
-#define SfPollAfter (1 << 4) /* poll for signals on completion =
*/
-#define SfYieldAfter (1 << 5) /* yield on completion =
*/
+#define SfMayBlock (1 << 1) /* may block */
+#define SfPostOnFail (1 << 2) /* call POST() function on failure */
+#define SfPollAfter (1 << 3) /* poll for signals on completion */
+#define SfYieldAfter (1 << 4) /* yield on completion */
=20
=20
/* ---------------------------------------------------------------------
@@ -143,13 +142,18 @@
=20
You should create corresponding global declarations using
DECL_TEMPLATE (indirectly) below. =20
+
+ Note. The silly name "arrghs" is used rather than just "args"
+ because a few wrappers declare the name "args" themselves, and
+ renaming those decls can change the name that comes out in error
+ messages (on scalar arg checks). Hence rename this instead.
*/
=20
#define DEFN_PRE_TEMPLATE(auxstr, name) \
void vgSysWrap_##auxstr##_##name##_before \
( ThreadId tid, \
SyscallArgLayout* layout, \
- /*MOD*/SyscallArgs* args, \
+ /*MOD*/SyscallArgs* arrghs, \
/*OUT*/SyscallStatus* status, \
/*OUT*/UWord* flags \
)
@@ -157,7 +161,7 @@
#define DEFN_POST_TEMPLATE(auxstr, name) \
void vgSysWrap_##auxstr##_##name##_after \
( ThreadId tid, \
- SyscallArgs* args, \
+ SyscallArgs* arrghs, \
SyscallStatus* status \
)
=20
@@ -171,14 +175,14 @@
void vgSysWrap_##auxstr##_##name##_before \
( ThreadId tid, \
SyscallArgLayout* layout, \
- /*MOD*/SyscallArgs* args, \
+ /*MOD*/SyscallArgs* arrghs, \
/*OUT*/SyscallStatus* status, \
/*OUT*/UWord* flags \
); \
extern \
void vgSysWrap_##auxstr##_##name##_after \
( ThreadId tid, \
- SyscallArgs* args, \
+ SyscallArgs* arrghs, \
SyscallStatus* status \
);
=20
@@ -213,13 +217,13 @@
=20
/* Reference to the syscall's arguments -- the ones which the
pre-wrapper may have modified, not the original copy. */
-#define SYSNO (args->sysno)
-#define ARG1 (args->arg1)
-#define ARG2 (args->arg2)
-#define ARG3 (args->arg3)
-#define ARG4 (args->arg4)
-#define ARG5 (args->arg5)
-#define ARG6 (args->arg6)
+#define SYSNO (arrghs->sysno)
+#define ARG1 (arrghs->arg1)
+#define ARG2 (arrghs->arg2)
+#define ARG3 (arrghs->arg3)
+#define ARG4 (arrghs->arg4)
+#define ARG5 (arrghs->arg5)
+#define ARG6 (arrghs->arg6)
=20
/* Reference to the syscall's current result status/value. Note that
=20
Modified: trunk/coregrind/m_syscalls/syscalls-generic.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syscalls/syscalls-generic.c 2005-06-10 10:25:02 UTC=
(rev 3866)
+++ trunk/coregrind/m_syscalls/syscalls-generic.c 2005-06-10 10:27:55 UTC=
(rev 3867)
@@ -1690,41 +1690,44 @@
PRE_REG_READ1(long, "iopl", unsigned long, level);
}
=20
-//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=20
-//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=20
-//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 |=3D 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 );
+}
=20
+PRE(sys_lsetxattr)
+{
+ *flags |=3D 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 |=3D 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)
{
*flags |=3D SfMayBlock;
@@ -1735,7 +1738,6 @@
PRE_MEM_RASCIIZ( "getxattr(name)", ARG2 );
PRE_MEM_WRITE( "getxattr(value)", ARG3, ARG4 );
}
-
POST(sys_getxattr)
{
vg_assert(SUCCESS);
@@ -1744,105 +1746,109 @@
}
}
=20
-//zz PRE(sys_lgetxattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_lgetxattr ( %p, %p, %p, %llu )", ARG1,ARG2,ARG3, (ULo=
ng)ARG4);
-//zz PRE_REG_READ4(ssize_t, "lgetxattr",
-//zz char *, path, char *, name, void *, value, vki_siz=
e_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=20
-//zz POST(sys_lgetxattr)
-//zz {
-//zz if (RES > 0 && ARG3 !=3D (Addr)NULL) {
-//zz POST_MEM_WRITE( ARG3, RES );
-//zz }
-//zz }
-//zz=20
-//zz PRE(sys_fgetxattr, SfMayBlock)
-//zz {
-//zz PRINT("sys_fgetxattr ( %d, %p, %p, %llu )", ARG1, ARG2, ARG3, (U=
Long)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=20
-//zz POST(sys_fgetxattr)
-//zz {
-//zz if (RES > 0 && ARG3 !=3D (Addr)NULL)
-//zz POST_MEM_WRITE( ARG3, RES );
-//zz }
-//zz=20
-//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=20
-//zz POST(sys_listxattr)
-//zz {
-//zz if (RES > 0 && ARG2 !=3D (Addr)NULL)
-//zz POST_MEM_WRITE( ARG2, RES );
-//zz }
-//zz=20
-//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=20
-//zz POST(sys_llistxattr)
-//zz {
-//zz if (RES > 0 && ARG2 !=3D (Addr)NULL)
-//zz POST_MEM_WRITE( ARG2, RES );
-//zz }
-//zz=20
-//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=20
-//zz POST(sys_flistxattr)
-//zz {
-//zz if (RES > 0 && ARG2 !=3D (Addr)NULL)
-//zz POST_MEM_WRITE( ARG2, RES );
-//zz }
-//zz=20
-//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=20
-//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=20
-//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 |=3D SfMayBlock;
+ PRINT("sys_lgetxattr ( %p, %p, %p, %llu )", ARG1,ARG2,ARG3, (ULong)AR=
G4);
+ 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 !=3D (Addr)NULL) {
+ POST_MEM_WRITE( ARG3, RES );
+ }
+}
=20
+PRE(sys_fgetxattr)
+{
+ *flags |=3D 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 !=3D (Addr)NULL)
+ POST_MEM_WRITE( ARG3, RES );
+}
+
+PRE(sys_listxattr)
+{
+ *flags |=3D 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 !=3D (Addr)NULL)
+ POST_MEM_WRITE( ARG2, RES );
+}
+
+PRE(sys_llistxattr)
+{
+ *flags |=3D 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 !=3D (Addr)NULL)
+ POST_MEM_WRITE( ARG2, RES );
+}
+
+PRE(sys_flistxattr)
+{
+ *flags |=3D 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 !=3D (Addr)NULL)
+ POST_MEM_WRITE( ARG2, RES );
+}
+
+PRE(sys_removexattr)
+{
+ *flags |=3D 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 |=3D 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 |=3D 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)
{
PRINT("sys_quotactl (0x%x, %p, 0x%x, 0x%x )", ARG1,ARG2,ARG3, ARG4);
@@ -1852,21 +1858,23 @@
PRE_MEM_RASCIIZ( "quotactl(special)", ARG2 );
}
=20
-//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=20
-//zz POST(sys_lookup_dcookie)
-//zz {
-//zz if (ARG3 !=3D (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 !=3D (Addr)NULL)
+ POST_MEM_WRITE( ARG3, RES);
+}
+#endif
=20
PRE(sys_fsync)
{
@@ -1891,76 +1899,75 @@
PRE_MEM_READ( "msync(start)", ARG1, ARG2 );
}
=20
-//zz // Nb: getpmsg() and putpmsg() are special additional syscalls used=
in early
-//zz // versions of LiS (Linux Streams). They are not part of the kerne=
l.
-//zz // Therefore, we have to provide this type ourself, rather than get=
ting 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=20
-//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 *, d=
ata,=20
-//zz int *, bandp, int *, flagsp);
-//zz ctrl =3D (struct vki_pmsg_strbuf *)ARG2;
-//zz data =3D (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=20
-//zz POST(sys_getpmsg)
-//zz {
-//zz struct vki_pmsg_strbuf *ctrl;
-//zz struct vki_pmsg_strbuf *data;
-//zz=20
-//zz ctrl =3D (struct vki_pmsg_strbuf *)ARG2;
-//zz data =3D (struct vki_pmsg_strbuf *)ARG3;
-//zz if (RES =3D=3D 0 && ctrl && ctrl->len > 0) {
-//zz POST_MEM_WRITE( (Addr)ctrl->buf, ctrl->len);
-//zz }
-//zz if (RES =3D=3D 0 && data && data->len > 0) {
-//zz POST_MEM_WRITE( (Addr)data->buf, data->len);
-//zz }
-//zz }
-//zz=20
-//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 *, d=
ata,=20
-//zz int, band, int, flags);
-//zz ctrl =3D (struct vki_pmsg_strbuf *)ARG2;
-//zz data =3D (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 e=
arly
+// 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 |=3D 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,=20
+ int *, bandp, int *, flagsp);
+ ctrl =3D (struct vki_pmsg_strbuf *)ARG2;
+ data =3D (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 =3D (struct vki_pmsg_strbuf *)ARG2;
+ data =3D (struct vki_pmsg_strbuf *)ARG3;
+ if (RES =3D=3D 0 && ctrl && ctrl->len > 0) {
+ POST_MEM_WRITE( (Addr)ctrl->buf, ctrl->len);
+ }
+ if (RES =3D=3D 0 && data && data->len > 0) {
+ POST_MEM_WRITE( (Addr)data->buf, data->len);
+ }
+}
=20
+PRE(sys_putpmsg)
+{
+ /* LiS putpmsg from http://www.gcom.com/home/linux/lis/ */
+ struct vki_pmsg_strbuf *ctrl;
+ struct vki_pmsg_strbuf *data;
+ *flags |=3D 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,=20
+ int, band, int, flags);
+ ctrl =3D (struct vki_pmsg_strbuf *)ARG2;
+ data =3D (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)
{
PRINT("sys_getitimer ( %d, %p )", ARG1, ARG2);
PRE_REG_READ2(long, "getitimer", int, which, struct itimerval *, valu=
e);
PRE_MEM_WRITE( "getitimer(value)", ARG2, sizeof(struct vki_itimerval)=
);
}
-
POST(sys_getitimer)
{
if (ARG2 !=3D (Addr)NULL) {
@@ -2097,16 +2104,19 @@
PRE_REG_READ2(long, "setregid16", vki_old_gid_t, rgid, vki_old_gid_t,=
egid);
}
=20
-//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, c=
ount,
-//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 |=3D 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
=20
PRE(sys_sync)
{
@@ -2128,18 +2138,17 @@
POST_MEM_WRITE( ARG2, sizeof(struct vki_statfs) );
}
=20
-//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 statfs6=
4 *, buf);
-//zz PRE_MEM_WRITE( "fstatfs64(buf)", ARG3, ARG2 );
-//zz }
-//zz=20
-//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 );
+}
=20
PRE(sys_getsid)
{
@@ -2194,35 +2203,34 @@
PRE_MEM_RASCIIZ( "init_module(uargs)", ARG3 );
}
=20
-//zz PRE(sys_capget, 0)
-//zz {
-//zz PRINT("sys_capget ( %p, %p )", ARG1, ARG2 );
-//zz PRE_REG_READ2(long, "capget",=20
-//zz vki_cap_user_header_t, header, vki_cap_user_data_t=
, data);
-//zz PRE_MEM_READ( "capget(header)", ARG1,=20
-//zz sizeof(struct __vki_user_cap_header_struct) );
-//zz PRE_MEM_WRITE( "capget(data)", ARG2,=20
-//zz sizeof(struct __vki_user_cap_data_struct) );
-//zz }
-//zz=20
-//zz POST(sys_capget)
-//zz {
-//zz if (ARG2 !=3D (Addr)NULL)
-//zz POST_MEM_WRITE( ARG2, sizeof(struct __vki_user_cap_data_struc=
t) );
-//zz }
-//zz=20
-//zz PRE(sys_capset, 0)
-//zz {
-//zz PRINT("sys_capset ( %p, %p )", ARG1, ARG2 );
-//zz PRE_REG_READ2(long, "capset",=20
-//zz vki_cap_user_header_t, header,
-//zz const vki_cap_user_data_t, data);
-//zz PRE_MEM_READ( "capset(header)",=20
-//zz ARG1, sizeof(struct __vki_user_cap_header_struct)=
);
-//zz PRE_MEM_READ( "capset(data)",=20
-//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",=20
+ vki_cap_user_header_t, header, vki_cap_user_data_t, dat=
a);
+ PRE_MEM_READ( "capget(header)", ARG1,=20
+ sizeof(struct __vki_user_cap_header_struct) );
+ PRE_MEM_WRITE( "capget(data)", ARG2,=20
+ sizeof(struct __vki_user_cap_data_struct) );
+}
+POST(sys_capget)
+{
+ if (ARG2 !=3D (Addr)NULL)
+ POST_MEM_WRITE( ARG2, sizeof(struct __vki_user_cap_data_struct) );
+}
=20
+PRE(sys_capset)
+{
+ PRINT("sys_capset ( %p, %p )", ARG1, ARG2 );
+ PRE_REG_READ2(long, "capset",=20
+ vki_cap_user_header_t, header,
+ const vki_cap_user_data_t, data);
+ PRE_MEM_READ( "capset(header)",=20
+ ARG1, sizeof(struct __vki_user_cap_header_struct) );
+ PRE_MEM_READ( "capset(data)",=20
+ 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)
{
@@ -2452,32 +2460,32 @@
PRE_MEM_RASCIIZ( "chmod(path)", ARG1 );
}
=20
-//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=20
-//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, g=
roup);
-//zz PRE_MEM_RASCIIZ( "chown(path)", ARG1 );
-//zz }
-//zz=20
-//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, g=
roup);
-//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 );
+}
=20
+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)
{
PRINT("sys_close ( %d )", ARG1);
@@ -2539,12 +2547,12 @@
unsigned int, fd, vki_old_uid_t, owner, vki_old_gid_t, =
group);
}
=20
-//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, gro=
up);
-//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);
+}
=20
PRE(sys_fchmod)
{
@@ -2745,26 +2753,31 @@
PRE_MEM_RASCIIZ( "truncate(path)", ARG1 );
}
=20
-//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=20
-//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=20
+// XXX: this wrapper is only suitable for 32-bit platforms
+#if defined(VGP_x86_linux)
+PRE(sys_ftruncate64)
+{
+ *flags |=3D 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
=20
+// XXX: this wrapper is only suitable for 32-bit platforms
+#if defined(VGP_x86_linux)
+PRE(sys_truncate64)
+{
+ *flags |=3D 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)
{
*flags |=3D SfMayBlock;
@@ -4495,19 +4508,18 @@
VG_TRACK( die_mem_munmap, a, len );
}
=20
-//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=20
-//zz POST(sys_mincore)
-//zz {
-//zz POST_MEM_WRITE( ARG3, (ARG2 + 4096 - 1) / 4096 ); =20
-//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 ); =20
+}
=20
PRE(sys_nanosleep)
{
@@ -4764,18 +4776,17 @@
PRE_MEM_RASCIIZ( "rmdir(pathname)", ARG1 );
}
=20
-//zz PRE(sys_sched_setparam, 0)
-//zz {
-//zz PRINT("sched_setparam ( %d, %p )", ARG1, ARG2 );
-//zz PRE_REG_READ2(long, "sched_setparam",=20
-//zz vki_pid_t, pid, struct sched_param *, p);
-//zz PRE_MEM_READ( "sched_setparam(p)", ARG2, sizeof(struct vki_sched=
_param) );
-//zz }
-//zz=20
-//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",=20
+ vki_pid_t, pid, struct sched_param *, p);
+ PRE_MEM_READ( "sched_setparam(p)", ARG2, sizeof(struct vki_sched_para=
m) );
+}
+POST(sys_sched_setparam)
+{
+ POST_MEM_WRITE( ARG2, sizeof(struct vki_sched_param) );
+}
=20
PRE(sys_sched_getparam)
{
@@ -4817,11 +4828,11 @@
PRE_REG_READ1(long, "setgid16", vki_old_gid_t, gid);
}
=20
-//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);
+}
=20
PRE(sys_setsid)
{
@@ -4837,13 +4848,13 @@
PRE_MEM_READ( "setgroups16(list)", ARG2, ARG1 * sizeof(vki_old_gid=
_t) );
}
=20
-//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) );
+}
=20
PRE(sys_setpgid)
{
@@ -4863,11 +4874,11 @@
PRE_REG_READ2(long, "setreuid16", vki_old_uid_t, ruid, vki_old_uid_t,=
euid);
}
=20
-//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);
+}
=20
PRE(sys_setrlimit)
{
@@ -4915,11 +4926,11 @@
PRE_REG_READ1(long, "setuid16", vki_old_uid_t, uid);
}
=20
-//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);
+}
=20
PRE(sys_newstat)
{
@@ -4941,25 +4952,23 @@
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) );
}
=20
-//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 statf=
s64 *, buf);
-//zz PRE_MEM_RASCIIZ( "statfs64(path)", ARG1 );
-//zz PRE_MEM_WRITE( "statfs64(buf)", ARG3, ARG2 );
-//zz }
-//zz=20
-//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 );
+}
=20
PRE(sys_symlink)
{
@@ -5102,36 +5111,35 @@
}
}
=20
-//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 !=3D 0)
-//zz PRE_MEM_READ( "utimes(tvp)", ARG2, sizeof(struct vki_timeval)=
);
-//zz }
-//zz=20
-//zz PRE(sys_sched_setaffinity, 0)
-//zz {
-//zz PRINT("sched_setaffinity ( %d, %d, %p )", ARG1, ARG2, ARG3);
-//zz PRE_REG_READ3(long, "sched_setaffinity",=20
-//zz vki_pid_t, pid, unsigned int, len, unsigned long *=
, mask);
-//zz PRE_MEM_READ( "sched_setaffinity(mask)", ARG3, ARG2);
-//zz }
-//zz=20
-//zz PRE(sys_sched_getaffinity, 0)
-//zz {
-//zz PRINT("sched_getaffinity ( %d, %d, %p )", ARG1, ARG2, ARG3);
-//zz PRE_REG_READ3(long, "sched_getaffinity",=20
-//zz vki_pid_t, pid, unsigned int, len, unsigned long *=
, mask);
-//zz PRE_MEM_WRITE( "sched_getaffinity(mask)", ARG3, ARG2);
-//zz }
-//zz=20
-//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 !=3D 0)
+ PRE_MEM_READ( "utimes(tvp)", ARG2, sizeof(struct vki_timeval) );
+}
=20
+PRE(sys_sched_setaffinity)
+{
+ PRINT("sched_setaffinity ( %d, %d, %p )", ARG1, ARG2, ARG3);
+ PRE_REG_READ3(long, "sched_setaffinity",=20
+ vki_pid_t, pid, unsigned int, len, unsigned long *, mas=
k);
+ 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",=20
+ vki_pid_t, pid, unsigned int, len, unsigned long *, mas=
k);
+ PRE_MEM_WRITE( "sched_getaffinity(mask)", ARG3, ARG2);
+}
+POST(sys_sched_getaffinity)
+{
+ POST_MEM_WRITE(ARG3, ARG2);
+}
+
PRE(sys_acct)
{
PRINT("sys_acct ( %p )", ARG1);
@@ -5203,25 +5211,19 @@
POST_MEM_WRITE( ARG2, sizeof(vki_siginfo_t) );
}
=20
-//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",=20
-//zz int, pid, int, sig, vki_siginfo_t *, uinfo);
-//zz if (ARG2 !=3D 0)
-//zz PRE_MEM_READ( "rt_sigqueueinfo(uinfo)", ARG3, sizeof(vki_sigi=
nfo_t) );
-//zz }
-//zz=20
-//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 !=3D 0)
-//zz PRE_MEM_READ( "rt_sigqueueinfo(uinfo)", ARG3, sizeof(vki_sigi=
nfo_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",=20
+ int, pid, int, sig, vki_siginfo_t *, uinfo);
+ if (ARG2 !=3D 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 );
+}
=20
// XXX: x86-specific
PRE(sys_sigaltstack)
@@ -5242,7 +5244,6 @@
(vki_stack_t*)ARG2)
);
}
-
POST(sys_sigaltstack)
{
vg_assert(SUCCESS);
@@ -5272,7 +5273,6 @@
(struct vki_sigaction *)ARG3)
);
}
-
POST(sys_rt_sigaction)
{
vg_assert(SUCCESS);
@@ -5375,18 +5375,17 @@
POST_MEM_WRITE( ARG1, sizeof(vki_old_sigset_t) ) ;
}
=20
-//zz PRE(sys_rt_sigpending, 0)
-//zz {
-//zz PRINT( "sys_rt_sigpending ( %p )", ARG1 );
-//zz PRE_REG_READ2(long, "rt_sigpending",=20
-//zz vki_sigset_t *, set, vki_size_t, sigsetsize);
-//zz PRE_MEM_WRITE( "rt_sigpending(set)", ARG1, sizeof(vki_sigset_t))=
;
-//zz }
-//zz=20
-//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",=20
+ 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) ) ;
+}
=20
PRE(sys_mq_open)
{
@@ -5509,76 +5508,73 @@
POST_MEM_WRITE( ARG3, sizeof(struct vki_mq_attr) );
}
=20
-//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 !=3D 0)
-//zz PRE_MEM_READ( "timer_create(evp)", ARG2, sizeof(struct vki_si=
gevent) );
-//zz PRE_MEM_WRITE( "timer_create(timerid)", ARG3, sizeof(vki_timer_t=
) );
-//zz }
-//zz=20
-//zz POST(sys_timer_create)
-//zz {
-//zz POST_MEM_WRITE( ARG3, sizeof(vki_timer_t) );
-//zz }
-//zz=20
-//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",=20
-//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 !=3D 0)
-//zz PRE_MEM_WRITE( "timer_settime(ovalue)", ARG4,
-//zz sizeof(struct vki_itimerspec) );
-//zz }
-//zz=20
-//zz POST(sys_timer_settime)
-//zz {
-//zz if (ARG4 !=3D 0)
-//zz POST_MEM_WRITE( ARG4, sizeof(struct vki_itimerspec) );
-//zz }
-//zz=20
-//zz PRE(sys_timer_gettime, 0)
-//zz {
-//zz PRINT("sys_timer_gettime( %lld, %p )", (ULong)ARG1,ARG2);
-//zz PRE_REG_READ2(long, "timer_gettime",=20
-//zz vki_timer_t, timerid, struct itimerspec *, value);
-//zz PRE_MEM_WRITE( "timer_gettime(value)", ARG2,
-//zz sizeof(struct vki_itimerspec));
-//zz }
-//zz=20
-//zz POST(sys_timer_gettime)
-//zz {
-//zz POST_MEM_WRITE( ARG2, sizeof(struct vki_itimerspec) );
-//zz }
-//zz=20
-//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=20
-//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=20
-//zz PRE(sys_clock_settime, 0)
-//zz {
-//zz PRINT("sys_clock_settime( %d, %p )", ARG1,ARG2);
-//zz PRE_REG_READ2(long, "clock_settime",=20
-//zz vki_clockid_t, clk_id, const struct timespec *, tp=
);
-//zz PRE_MEM_READ( "clock_settime(tp)", ARG2, sizeof(struct vki_times=
pec) );
-//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 !=3D 0)
+ PRE_MEM_READ( "timer_create(evp)", ARG2, sizeof(struct vki_sigeven=
t) );
+ PRE_MEM_WRITE( "timer_create(timerid)", ARG3, sizeof(vki_timer_t) );
+}
+POST(sys_timer_create)
+{
+ POST_MEM_WRITE( ARG3, sizeof(vki_timer_t) );
+}
=20
+PRE(sys_timer_settime)
+{
+ PRINT("sys_timer_settime( %lld, %d, %p, %p )", (ULong)ARG1,ARG2,ARG3,=
ARG4);
+ PRE_REG_READ4(long, "timer_settime",=20
+ 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 !=3D 0)
+ PRE_MEM_WRITE( "timer_settime(ovalue)", ARG4,
+ sizeof(struct vki_itimerspec) );
+}
+POST(sys_timer_settime)
+{
+ if (ARG4 !=3D 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",=20
+ 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",=20
+ vki_clockid_t, clk_id, const struct timespec *, tp);
+ PRE_MEM_READ( "clock_settime(tp)", ARG2, sizeof(struct vki_timespec) =
);
+}
+
PRE(sys_clock_gettime)
{
PRINT("sys_clock_gettime( %d, %p )" , ARG1,ARG2);
@@ -5586,27 +5582,27 @@
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) );
}
=20
-//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 mac=
ro
-//zz // defined above!
-//zz PRE_REG_READ2(long, "clock_getres",=20
-//zz vki_clockid_t, clk_id, struct timespec *, res);
-//zz PRE_MEM_WRITE( "clock_getres(res)", ARG2, sizeof(struct vki_time=
spec) );
-//zz }
-//zz=20
-//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",=20
+ 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) );
+}
=20
+#undef PRE
+#undef POST
=20
/*--------------------------------------------------------------------*/
/*--- end syscalls-generic.c ---*/
Modified: trunk/coregrind/m_syscalls/syscalls-linux.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_syscalls/syscalls-linux.c 2005-06-10 10:25:02 UTC (=
rev 3866)
+++ trunk/coregrind/m_syscalls/syscalls-linux.c 2005-06-10 10:27:55 UTC (=
rev 3867)
@@ -169,11 +169,11 @@
PRE_REG_READ1(long, "setfsuid16", vki_old_uid_t, uid);
}
=20
-//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);
+}
=20
PRE(sys_setfsgid16)
{
@@ -181,46 +181,46 @@
PRE_REG_READ1(long, "setfsgid16", vki_old_gid_t, gid);
}
=20
-//zz PRE(sys_setfsgid, 0)
-//zz {
-//zz PRINT("sys_setfsgid ( %d )", ARG1);
-//zz PRE_REG_READ1(long, "setfsgid", vki_gid_t, gid);
-//zz }
-//zz=20
-//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=20
-//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=20
-//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=20
-//zz POST(sys_getresuid16)
-//zz {
-//zz if (RES =3D=3D 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);
+}
=20
+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 =3D=3D 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)
{
PRINT("sys_getresuid ( %p, %p, %p )", ARG1,ARG2,ARG3);
@@ -230,7 +230,6 @@
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);
@@ -241,40 +240,41 @@
}
}
=20
-//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=20
-//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=20
-//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=20
-//zz POST(sys_getresgid16)
-//zz {
-//zz if (RES =3D=3D 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,=20
+ vki_old_gid_t, egid, vki_old_gid_t, sgid);
+}
=20
+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 =3D=3D 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)
{
PRINT("sys_getresgid ( %p, %p, %p )", ARG1,ARG2,ARG3);
@@ -355,79 +355,82 @@
=20
PRE(sys_sysctl)
{
- struct __vki_sysctl_args *argz;
+ struct __vki_sysctl_args *args;
PRINT("sys_sysctl ( %p )", ARG1 );
- argz =3D (struct __vki_sysctl_args *)ARG1;
- PRE_REG_READ1(long, "sysctl", struct __sysctl_args *, argz);
+ args =3D (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;
}
=20
- PRE_MEM_READ("sysctl(name)", (Addr)argz->name, argz->nlen * sizeof(*a=
rgz->name));
- if (argz->newval !=3D NULL)
- PRE_MEM_READ("sysctl(newval)", (Addr)argz->newval, argz->newlen);
- if (argz->oldlenp !=3D 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(*a=
rgs->name));
+ if (args->newval !=3D NULL)
+ PRE_MEM_READ("sysctl(newval)", (Addr)args->newval, args->newlen);
+ if (args->oldlenp !=3D NULL) {
+ PRE_MEM_READ("sysctl(oldlenp)", (Addr)args->oldlenp, sizeof(*args-=
>oldlenp));
+ PRE_MEM_WRITE("sysctl(oldval)", (Addr)args->oldval, *args->oldlenp=
);
}
}
=20
POST(sys_sysctl)
{
- struct __vki_sysctl_args *argz;
- argz =3D (struct __vki_sysctl_args *)ARG1;
- if (argz->oldlenp !=3D 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 =3D (struct __vki_sysctl_args *)ARG1;
+ if (args->oldlenp !=3D NULL) {
+ POST_MEM_WRITE((Addr)args->oldlenp, sizeof(*args->oldlenp));
+ POST_MEM_WRITE((Addr)args->oldval, 1 + *args->oldlenp);
}
}
=20
-//zz PRE(sys_prctl, MayBlock)
-//zz {
-//zz PRINT( "prctl ( %d, %d, %d, %d, %d )", ARG1, ARG2, ARG3, ARG4, A=
RG5 );
-//zz // XXX: too simplistic, often not all args are used
-//zz // Nb: can't use "ARG2".."ARG5" here because that's our own macr=
o...
-//zz PRE_REG_READ5(long, "prctl",
-//zz int, option, unsigned long, arg2, unsigned long, a=
rg3,
-//zz unsigned long, arg4, unsigned long, arg5);
-//zz // XXX: totally wrong... we need to look at the 'option' arg, an=
d do
-//zz // PRE_MEM_READs/PRE_MEM_WRITEs as necessary...
-//zz }
-//zz=20
-//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 !=3D 0)
-//zz PRE_MEM_WRITE( "sendfile(offset)", ARG3, sizeof(vki_off_t) );
-//zz }
-//zz=20
-//zz POST(sys_sendfile)
-//zz {
-//zz POST_MEM_WRITE( ARG3, sizeof( vki_off_t ) );
-//zz }
-//zz=20
-//zz PRE(sys_sendfile64, MayBlock)
-//zz {
-//zz PRINT("sendfile64 ( %d, %d, %p, %llu )",ARG1,ARG2,ARG3,(ULong)AR=
G4);
-//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 !=3D 0)
-//zz PRE_MEM_WRITE( "sendfile64(offset)", ARG3, sizeof(vki_loff_t)=
);
-//zz }
-//zz=20
-//zz POST(sys_sendfile64)
-//zz {
-//zz if (ARG3 !=3D 0 ) {
-//zz POST_MEM_WRITE( ARG3, sizeof(vki_loff_t) );
-//zz }
-//zz }
+PRE(sys_prctl)
+{
+ *flags |=3D 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...
+}
=20
+PRE(sys_sendfile)
+{
+ *flags |=3D 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 !=3D 0)
+ PRE_MEM_WRITE( "sendfile(offset)", ARG3, sizeof(vki_off_t) );
+}
+POST(sys_sendfile)
+{
+ if (ARG3 !=3D 0 ) {
+ POST_MEM_WRITE( ARG3, sizeof( vki_off_t ) );
+ }
+}
+
+PRE(sys_sendfile64)
+{
+ *flags |=3D 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 !=3D 0)
+ PRE_MEM_WRITE( "sendfile64(offset)", ARG3, sizeof(vki_loff_t) );
+}
+POST(sys_sendfile64)
+{
+ if (ARG3 !=3D 0 ) {
+ POST_MEM_WRITE( ARG3, sizeof(vki_loff_t) );
+ }
+}
+
PRE(sys_futex)
{
/*=20
@@ -486,52 +489,53 @@
}
}
=20
-//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=20
-//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=20
-//zz PRE(sys_epoll_ctl, 0)
-//zz {
-//zz static const char* epoll_ctl_s[3] =3D {
-//zz "EPOLL_CTL_ADD",
-//zz "EPOLL_CTL_DEL",
-//zz "EPOLL_CTL_MOD"
-//zz };
-//zz PRINT("sys_epoll_ctl ( %d, %s, %d, %p )",=20
-//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_even=
t) );
-//zz }
-//zz=20
-//zz PRE(sys_epoll_wait, MayBlock)
-//zz {
-//zz PRINT("sys_epoll_wait ( %d, %p, %d, %d )", ARG1, ARG2, ARG3, ARG=
4);
-//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_e=
vent)*ARG3);
-//zz }
-//zz=20
-//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);
+ }
+}
=20
+PRE(sys_epoll_ctl)
+{
+ static const HChar* epoll_ctl_s[3] =3D {
+ "EPOLL_CTL_ADD",
+ "EPOLL_CTL_DEL",
+ "EPOLL_CTL_MOD"
+ };
+ PRINT("sys_epoll_ctl ( %d, %s, %d, %p )",=20
+ ARG1, ( ARG2<3 ? epoll_ctl_s[ARG2] : "?" ), ARG3, ARG4);
+ PRE_REG_READ4(long, "epoll_ctl",
+ int, epfd, int, op, int, fd, struct epoll_event *, even=
t);
+ PRE_MEM_READ( "epoll_ctl(event)", ARG4, sizeof(struct epoll_event) );
+}
+
+PRE(sys_epoll_wait)
+{
+ *flags |=3D 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)
{
PRINT("sys_gettid ()");
@@ -606,172 +610,174 @@
//zz PRE_REG_READ4(long, "fadvise64_64",
//zz int, fd, vki_loff_t, offset, vki_loff_t, len, int,=
advice)
//zz }
-//zz=20
-//zz // Nb: this wrapper is "Special" because we have to pad/unpad memor=
y around
-//zz // the syscall itself, and this allows us to control exactly the co=
de that
-//zz // gets run while the padding is in place.
-//zz PRE(sys_io_setup, Special)
-//zz {
-//zz SizeT size;
-//zz Addr addr;
-//zz=20
-//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 =20
-//zz size =3D VG_PGROUNDUP(sizeof(struct vki_aio_ring) +
-//z...
[truncated message content] |