|
From: <sv...@va...> - 2005-06-08 01:01:53
|
Author: sewardj
Date: 2005-06-08 02:01:48 +0100 (Wed, 08 Jun 2005)
New Revision: 3851
Modified:
trunk/coregrind/m_syscalls/syscalls-generic.c
trunk/coregrind/m_syscalls/syscalls-linux.c
trunk/coregrind/m_syscalls/syscalls-x86-linux.c
Log:
Clean up after m_syscalls changes: fix more NPTL ish syscalls (x86)
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-08 00:02:49 UTC=
(rev 3850)
+++ trunk/coregrind/m_syscalls/syscalls-generic.c 2005-06-08 01:01:48 UTC=
(rev 3851)
@@ -2713,12 +2713,13 @@
}
}
=20
-//zz PRE(sys_ftruncate, SfMayBlock)
-//zz {
-//zz PRINT("sys_ftruncate ( %d, %lld )", ARG1,(ULong)ARG2);
-//zz PRE_REG_READ2(long, "ftruncate", unsigned int, fd, unsigned long=
, length);
-//zz }
-//zz=20
+PRE(sys_ftruncate)
+{
+ *flags |=3D SfMayBlock;
+ PRINT("sys_ftruncate ( %d, %lld )", ARG1,(ULong)ARG2);
+ PRE_REG_READ2(long, "ftruncate", unsigned int, fd, unsigned long, len=
gth);
+}
+
//zz PRE(sys_truncate, SfMayBlock)
//zz {
//zz PRINT("sys_truncate ( %p(%s), %d )", ARG1,ARG1,ARG2);
@@ -5360,42 +5361,43 @@
//zz {
//zz POST_MEM_WRITE( ARG1, sizeof(vki_sigset_t) ) ;
//zz }
-//zz=20
-//zz PRE(sys_mq_open, 0)
-//zz {
-//zz PRINT("sys_mq_open( %p(%s), %d, %lld, %p )",
-//zz ARG1,ARG1,ARG2,(ULong)ARG3,ARG4);
-//zz PRE_REG_READ4(long, "mq_open",
-//zz const char *, name, int, oflag, vki_mode_t, mode,
-//zz struct mq_attr *, attr);
-//zz PRE_MEM_RASCIIZ( "mq_open(name)", ARG1 );
-//zz if ((ARG2 & VKI_O_CREAT) !=3D 0 && ARG4 !=3D 0) {
-//zz const struct vki_mq_attr *attr =3D (struct vki_mq_attr *)ARG4=
;
-//zz PRE_MEM_READ( "mq_open(attr->mq_maxmsg)",
-//zz (Addr)&attr->mq_maxmsg, sizeof(attr->mq_maxmsg=
) );
-//zz PRE_MEM_READ( "mq_open(attr->mq_msgsize)",
-//zz (Addr)&attr->mq_msgsize, sizeof(attr->mq_msgsi=
ze) );
-//zz }
-//zz }
-//zz=20
-//zz POST(sys_mq_open)
-//zz {
-//zz if (!VG_(fd_allowed)(RES, "mq_open", tid, True)) {
-//zz VG_(close)(RES);
-//zz SET_STATUS_( -VKI_EMFILE );
-//zz } else {
-//zz if (VG_(clo_track_fds))
-//zz VG_(record_fd_open)(tid, RES, VG_(arena_strdup)(VG_AR_CORE=
, (Char*)ARG1));
-//zz }
-//zz }
-//zz=20
-//zz PRE(sys_mq_unlink, 0)
-//zz {
-//zz PRINT("sys_mq_unlink ( %p(%s) )", ARG1,ARG1);
-//zz PRE_REG_READ1(long, "mq_unlink", const char *, name);
-//zz PRE_MEM_RASCIIZ( "mq_unlink(name)", ARG1 );
-//zz }
-//zz=20
+
+PRE(sys_mq_open)
+{
+ PRINT("sys_mq_open( %p(%s), %d, %lld, %p )",
+ ARG1,ARG1,ARG2,(ULong)ARG3,ARG4);
+ PRE_REG_READ4(long, "mq_open",
+ const char *, name, int, oflag, vki_mode_t, mode,
+ struct mq_attr *, attr);
+ PRE_MEM_RASCIIZ( "mq_open(name)", ARG1 );
+ if ((ARG2 & VKI_O_CREAT) !=3D 0 && ARG4 !=3D 0) {
+ const struct vki_mq_attr *attr =3D (struct vki_mq_attr *)ARG4;
+ PRE_MEM_READ( "mq_open(attr->mq_maxmsg)",
+ (Addr)&attr->mq_maxmsg, sizeof(attr->mq_maxmsg) );
+ PRE_MEM_READ( "mq_open(attr->mq_msgsize)",
+ (Addr)&attr->mq_msgsize, sizeof(attr->mq_msgsize) )=
;
+ }
+}
+
+POST(sys_mq_open)
+{
+ vg_assert(SUCCESS);
+ if (!VG_(fd_allowed)(RES, "mq_open", tid, True)) {
+ VG_(close)(RES);
+ SET_STATUS_Failure( VKI_EMFILE );
+ } else {
+ if (VG_(clo_track_fds))
+ VG_(record_fd_open)(tid, RES, VG_(arena_strdup)(VG_AR_CORE, (Ch=
ar*)ARG1));
+ }
+}
+
+PRE(sys_mq_unlink)
+{
+ PRINT("sys_mq_unlink ( %p(%s) )", ARG1,ARG1);
+ PRE_REG_READ1(long, "mq_unlink", const char *, name);
+ PRE_MEM_RASCIIZ( "mq_unlink(name)", ARG1 );
+}
+
//zz PRE(sys_mq_timedsend, SfMayBlock)
//zz {
//zz PRINT("sys_mq_timedsend ( %d, %p, %llu, %d, %p )",
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-08 00:02:49 UTC (=
rev 3850)
+++ trunk/coregrind/m_syscalls/syscalls-linux.c 2005-06-08 01:01:48 UTC (=
rev 3851)
@@ -528,13 +528,13 @@
//zz if (RES > 0)
//zz POST_MEM_WRITE( ARG2, sizeof(struct epoll_event)*RES ) ;
//zz }
-//zz=20
-//zz PRE(sys_gettid, 0)
-//zz {
-//zz PRINT("sys_gettid ()");
-//zz PRE_REG_READ0(long, "gettid");
-//zz }
-//zz=20
+
+PRE(sys_gettid)
+{
+ PRINT("sys_gettid ()");
+ PRE_REG_READ0(long, "gettid");
+}
+
//zz PRE(sys_tkill, Special)
//zz {
//zz /* int tkill(pid_t tid, int sig); */
Modified: trunk/coregrind/m_syscalls/syscalls-x86-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-x86-linux.c 2005-06-08 00:02:49 U=
TC (rev 3850)
+++ trunk/coregrind/m_syscalls/syscalls-x86-linux.c 2005-06-08 01:01:48 U=
TC (rev 3851)
@@ -950,6 +950,7 @@
DECL_TEMPLATE(x86_linux, sys_rt_sigreturn);
DECL_TEMPLATE(x86_linux, sys_modify_ldt);
DECL_TEMPLATE(x86_linux, sys_set_thread_area);
+DECL_TEMPLATE(x86_linux, sys_ptrace);
=20
//zz PRE(old_select, MayBlock)
//zz {
@@ -1216,72 +1217,72 @@
//zz POST_MEM_WRITE( ARG1, sizeof(vki_modify_ldt_t) );
//zz }
//zz }
-//zz=20
-//zz // Parts of this are x86-specific, but the *PEEK* cases are generic=
.
-//zz // XXX: Why is the memory pointed to by ARG3 never checked?
-//zz PRE(sys_ptrace, 0)
-//zz {
-//zz PRINT("sys_ptrace ( %d, %d, %p, %p )", ARG1,ARG2,ARG3,ARG4);
-//zz PRE_REG_READ4(int, "ptrace",=20
-//zz long, request, long, pid, long, addr, long, data);
-//zz switch (ARG1) {
-//zz case VKI_PTRACE_PEEKTEXT:
-//zz case VKI_PTRACE_PEEKDATA:
-//zz case VKI_PTRACE_PEEKUSR:
-//zz PRE_MEM_WRITE( "ptrace(peek)", ARG4,=20
-//zz sizeof (long));
-//zz break;
-//zz case VKI_PTRACE_GETREGS:
-//zz PRE_MEM_WRITE( "ptrace(getregs)", ARG4,=20
-//zz sizeof (struct vki_user_regs_struct));
-//zz break;
-//zz case VKI_PTRACE_GETFPREGS:
-//zz PRE_MEM_WRITE( "ptrace(getfpregs)", ARG4,=20
-//zz sizeof (struct vki_user_i387_struct));
-//zz break;
-//zz case VKI_PTRACE_GETFPXREGS:
-//zz PRE_MEM_WRITE( "ptrace(getfpxregs)", ARG4,=20
-//zz sizeof(struct vki_user_fxsr_struct) );
-//zz break;
-//zz case VKI_PTRACE_SETREGS:
-//zz PRE_MEM_READ( "ptrace(setregs)", ARG4,=20
-//zz sizeof (struct vki_user_regs_struct));
-//zz break;
-//zz case VKI_PTRACE_SETFPREGS:
-//zz PRE_MEM_READ( "ptrace(setfpregs)", ARG4,=20
-//zz sizeof (struct vki_user_i387_struct));
-//zz break;
-//zz case VKI_PTRACE_SETFPXREGS:
-//zz PRE_MEM_READ( "ptrace(setfpxregs)", ARG4,=20
-//zz sizeof(struct vki_user_fxsr_struct) );
-//zz break;
-//zz default:
-//zz break;
-//zz }
-//zz }
-//zz=20
-//zz POST(sys_ptrace)
-//zz {
-//zz switch (ARG1) {
-//zz case VKI_PTRACE_PEEKTEXT:
-//zz case VKI_PTRACE_PEEKDATA:
-//zz case VKI_PTRACE_PEEKUSR:
-//zz POST_MEM_WRITE( ARG4, sizeof (long));
-//zz break;
-//zz case VKI_PTRACE_GETREGS:
-//zz POST_MEM_WRITE( ARG4, sizeof (struct vki_user_regs_struct));
-//zz break;
-//zz case VKI_PTRACE_GETFPREGS:
-//zz POST_MEM_WRITE( ARG4, sizeof (struct vki_user_i387_struct));
-//zz break;
-//zz case VKI_PTRACE_GETFPXREGS:
-//zz POST_MEM_WRITE( ARG4, sizeof(struct vki_user_fxsr_struct) );
-//zz break;
-//zz default:
-//zz break;
-//zz }
-//zz }
=20
+// Parts of this are x86-specific, but the *PEEK* cases are generic.
+// XXX: Why is the memory pointed to by ARG3 never checked?
+PRE(sys_ptrace)
+{
+ PRINT("sys_ptrace ( %d, %d, %p, %p )", ARG1,ARG2,ARG3,ARG4);
+ PRE_REG_READ4(int, "ptrace",=20
+ long, request, long, pid, long, addr, long, data);
+ switch (ARG1) {
+ case VKI_PTRACE_PEEKTEXT:
+ case VKI_PTRACE_PEEKDATA:
+ case VKI_PTRACE_PEEKUSR:
+ PRE_MEM_WRITE( "ptrace(peek)", ARG4,=20
+ sizeof (long));
+ break;
+ case VKI_PTRACE_GETREGS:
+ PRE_MEM_WRITE( "ptrace(getregs)", ARG4,=20
+ sizeof (struct vki_user_regs_struct));
+ break;
+ case VKI_PTRACE_GETFPREGS:
+ PRE_MEM_WRITE( "ptrace(getfpregs)", ARG4,=20
+ sizeof (struct vki_user_i387_struct));
+ break;
+ case VKI_PTRACE_GETFPXREGS:
+ PRE_MEM_WRITE( "ptrace(getfpxregs)", ARG4,=20
+ sizeof(struct vki_user_fxsr_struct) );
+ break;
+ case VKI_PTRACE_SETREGS:
+ PRE_MEM_READ( "ptrace(setregs)", ARG4,=20
+ sizeof (struct vki_user_regs_struct));
+ break;
+ case VKI_PTRACE_SETFPREGS:
+ PRE_MEM_READ( "ptrace(setfpregs)", ARG4,=20
+ sizeof (struct vki_user_i387_struct));
+ break;
+ case VKI_PTRACE_SETFPXREGS:
+ PRE_MEM_READ( "ptrace(setfpxregs)", ARG4,=20
+ sizeof(struct vki_user_fxsr_struct) );
+ break;
+ default:
+ break;
+ }
+}
+
+POST(sys_ptrace)
+{
+ switch (ARG1) {
+ case VKI_PTRACE_PEEKTEXT:
+ case VKI_PTRACE_PEEKDATA:
+ case VKI_PTRACE_PEEKUSR:
+ POST_MEM_WRITE( ARG4, sizeof (long));
+ break;
+ case VKI_PTRACE_GETREGS:
+ POST_MEM_WRITE( ARG4, sizeof (struct vki_user_regs_struct));
+ break;
+ case VKI_PTRACE_GETFPREGS:
+ POST_MEM_WRITE( ARG4, sizeof (struct vki_user_i387_struct));
+ break;
+ case VKI_PTRACE_GETFPXREGS:
+ POST_MEM_WRITE( ARG4, sizeof(struct vki_user_fxsr_struct) );
+ break;
+ default:
+ break;
+ }
+}
+
// XXX: this duplicates a function in coregrind/vg_syscalls.c, yuk
static Addr deref_Addr ( ThreadId tid, Addr a, Char* s )
{
@@ -1945,7 +1946,7 @@
GENX_(__NR_getuid, sys_getuid16), // 24 ## P
//zz=20
//zz // (__NR_stime, sys_stime), // 25 * (SVr4=
,SVID,X/OPEN)
-//zz PLAXY(__NR_ptrace, sys_ptrace), // 26
+ PLAXY(__NR_ptrace, sys_ptrace), // 26
GENX_(__NR_alarm, sys_alarm), // 27
//zz // (__NR_oldfstat, sys_fstat), // 28 * L -- =
obsolete
GENX_(__NR_pause, sys_pause), // 29
@@ -2025,7 +2026,7 @@
PLAX_(__NR_mmap, old_mmap), // 90
GENXY(__NR_munmap, sys_munmap), // 91
//zz GENX_(__NR_truncate, sys_truncate), // 92
-//zz GENX_(__NR_ftruncate, sys_ftruncate), // 93
+ GENX_(__NR_ftruncate, sys_ftruncate), // 93
//zz GENX_(__NR_fchmod, sys_fchmod), // 94
//zz=20
//zz GENX_(__NR_fchown, sys_fchown16), // 95
@@ -2185,8 +2186,8 @@
GENXY(__NR_fcntl64, sys_fcntl64), // 221
GENX_(222, sys_ni_syscall), // 222
GENX_(223, sys_ni_syscall), // 223
-//zz LINX_(__NR_gettid, sys_gettid), // 224
-//zz=20
+ LINX_(__NR_gettid, sys_gettid), // 224
+
//zz // (__NR_readahead, sys_readahead), // 225 */(Lin=
ux?)
//zz GENX_(__NR_setxattr, sys_setxattr), // 226
//zz GENX_(__NR_lsetxattr, sys_lsetxattr), // 227
@@ -2249,8 +2250,8 @@
//zz=20
//zz // (__NR_get_mempolicy, sys_get_mempolicy), // 275 ?/?
//zz // (__NR_set_mempolicy, sys_set_mempolicy), // 276 ?/?
-//zz GENXY(__NR_mq_open, sys_mq_open), // 277
-//zz GENX_(__NR_mq_unlink, sys_mq_unlink), // (mq_open+1=
)
+ GENXY(__NR_mq_open, sys_mq_open), // 277
+ GENX_(__NR_mq_unlink, sys_mq_unlink), // (mq_open+1)
//zz GENX_(__NR_mq_timedsend, sys_mq_timedsend), // (mq_open+2=
)
//zz=20
//zz GENXY(__NR_mq_timedreceive, sys_mq_timedreceive),// (mq_open+3=
)
|