|
From: <sv...@va...> - 2006-01-19 03:36:18
|
Author: sewardj
Date: 2006-01-19 03:36:13 +0000 (Thu, 19 Jan 2006)
New Revision: 5551
Log:
More syscalls.
Modified:
trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-ppc64-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_syswrap/syswrap-ppc64-linux.c 2006-01-19 03:35:37 U=
TC (rev 5550)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2006-01-19 03:36:13 U=
TC (rev 5551)
@@ -417,7 +417,7 @@
//zz DECL_TEMPLATE(ppc64_linux, sys_stat64);
//zz DECL_TEMPLATE(ppc64_linux, sys_lstat64);
//zz DECL_TEMPLATE(ppc64_linux, sys_fstat64);
-//zz DECL_TEMPLATE(ppc64_linux, sys_ipc);
+DECL_TEMPLATE(ppc64_linux, sys_ipc);
DECL_TEMPLATE(ppc64_linux, sys_clone);
//zz DECL_TEMPLATE(ppc64_linux, sys_sigreturn);
DECL_TEMPLATE(ppc64_linux, sys_rt_sigreturn);
@@ -759,162 +759,162 @@
//zz {
//zz POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
//zz }
-//zz=20
-//zz static Addr deref_Addr ( ThreadId tid, Addr a, Char* s )
-//zz {
-//zz Addr* a_p =3D (Addr*)a;
-//zz PRE_MEM_READ( s, (Addr)a_p, sizeof(Addr) );
-//zz return *a_p;
-//zz }
-//zz=20
-//zz PRE(sys_ipc)
-//zz {
-//zz PRINT("sys_ipc ( %d, %d, %d, %d, %p, %d )", ARG1,ARG2,ARG3,ARG4,A=
RG5,ARG6);
-//zz // XXX: this is simplistic -- some args are not used in all circu=
mstances.
-//zz PRE_REG_READ6(int, "ipc",
-//zz vki_uint, call, int, first, int, second, int, third,
-//zz void *, ptr, long, fifth)
-//zz=20
-//zz switch (ARG1 /* call */) {
-//zz case VKI_SEMOP:
-//zz ML_(generic_PRE_sys_semop)( tid, ARG2, ARG5, ARG3 );
-//zz *flags |=3D SfMayBlock;
-//zz break;
-//zz case VKI_SEMGET:
-//zz break;
-//zz case VKI_SEMCTL:
-//zz {
-//zz UWord arg =3D deref_Addr( tid, ARG5, "semctl(arg)" );
-//zz ML_(generic_PRE_sys_semctl)( tid, ARG2, ARG3, ARG4, arg );
-//zz break;
-//zz }
-//zz case VKI_SEMTIMEDOP:
-//zz ML_(generic_PRE_sys_semtimedop)( tid, ARG2, ARG5, ARG3, ARG6 =
);
-//zz *flags |=3D SfMayBlock;
-//zz break;
-//zz case VKI_MSGSND:
-//zz ML_(linux_PRE_sys_msgsnd)( tid, ARG2, ARG5, ARG3, ARG4 );
-//zz if ((ARG4 & VKI_IPC_NOWAIT) =3D=3D 0)
-//zz *flags |=3D SfMayBlock;
-//zz break;
-//zz case VKI_MSGRCV:
-//zz {
-//zz Addr msgp;
-//zz Word msgtyp;
-//zz=20
-//zz msgp =3D deref_Addr( tid,
-//zz (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
-//zz "msgrcv(msgp)" );
-//zz msgtyp =3D deref_Addr( tid,
-//zz (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp),
-//zz "msgrcv(msgp)" );
-//zz=20
-//zz ML_(linux_PRE_sys_msgrcv)( tid, ARG2, msgp, ARG3, msgtyp, ARG4 );
-//zz=20
-//zz if ((ARG4 & VKI_IPC_NOWAIT) =3D=3D 0)
-//zz *flags |=3D SfMayBlock;
-//zz break;
-//zz }
-//zz case VKI_MSGGET:
-//zz break;
-//zz case VKI_MSGCTL:
-//zz ML_(linux_PRE_sys_msgctl)( tid, ARG2, ARG3, ARG5 );
-//zz break;
-//zz case VKI_SHMAT:
-//zz {
-//zz UWord w;
-//zz PRE_MEM_WRITE( "shmat(raddr)", ARG4, sizeof(Addr) );
-//zz w =3D ML_(generic_PRE_sys_shmat)( tid, ARG2, ARG5, ARG3 );
-//zz if (w =3D=3D 0)
-//zz SET_STATUS_Failure( VKI_EINVAL );
-//zz else
-//zz ARG5 =3D w;
-//zz break;
-//zz }
-//zz case VKI_SHMDT:
-//zz if (!ML_(generic_PRE_sys_shmdt)(tid, ARG5))
-//zz SET_STATUS_Failure( VKI_EINVAL );
-//zz break;
-//zz case VKI_SHMGET:
-//zz break;
-//zz case VKI_SHMCTL: /* IPCOP_shmctl */
-//zz ML_(generic_PRE_sys_shmctl)( tid, ARG2, ARG3, ARG5 );
-//zz break;
-//zz default:
-//zz VG_(message)(Vg_DebugMsg, "FATAL: unhandled syscall(ipc) %d",=
ARG1 );
-//zz VG_(core_panic)("... bye!\n");
-//zz break; /*NOTREACHED*/
-//zz }
-//zz }
-//zz=20
-//zz POST(sys_ipc)
-//zz {
-//zz vg_assert(SUCCESS);
-//zz switch (ARG1 /* call */) {
-//zz case VKI_SEMOP:
-//zz case VKI_SEMGET:
-//zz break;
-//zz case VKI_SEMCTL:
-//zz {
-//zz UWord arg =3D deref_Addr( tid, ARG5, "semctl(arg)" );
-//zz ML_(generic_PRE_sys_semctl)( tid, ARG2, ARG3, ARG4, arg );
-//zz break;
-//zz }
-//zz case VKI_SEMTIMEDOP:
-//zz case VKI_MSGSND:
-//zz break;
-//zz case VKI_MSGRCV:
-//zz {
-//zz Addr msgp;
-//zz Word msgtyp;
-//zz=20
-//zz msgp =3D deref_Addr( tid,
-//zz (Addr) (&((struct vki_ipc_kludge *)ARG5)->=
msgp),
-//zz "msgrcv(msgp)" );
-//zz msgtyp =3D deref_Addr( tid,
-//zz (Addr) (&((struct vki_ipc_kludge *)ARG5)=
->msgtyp),
-//zz "msgrcv(msgp)" );
-//zz=20
-//zz ML_(linux_POST_sys_msgrcv)( tid, RES, ARG2, msgp, ARG3, msgty=
p, ARG4 );
-//zz break;
-//zz }
-//zz case VKI_MSGGET:
-//zz break;
-//zz case VKI_MSGCTL:
-//zz ML_(linux_POST_sys_msgctl)( tid, RES, ARG2, ARG3, ARG5 );
-//zz break;
-//zz case VKI_SHMAT:
-//zz {
-//zz Addr addr;
-//zz=20
-//zz /* force readability. before the syscall it is
-//zz * indeed uninitialized, as can be seen in
-//zz * glibc/sysdeps/unix/sysv/linux/shmat.c */
-//zz POST_MEM_WRITE( ARG4, sizeof( Addr ) );
-//zz=20
-//zz addr =3D deref_Addr ( tid, ARG4, "shmat(addr)" );
-//zz if ( addr > 0 ) {
-//zz ML_(generic_POST_sys_shmat)( tid, addr, ARG2, ARG5, ARG3 );
-//zz }
-//zz break;
-//zz }
-//zz case VKI_SHMDT:
-//zz ML_(generic_POST_sys_shmdt)( tid, RES, ARG5 );
-//zz break;
-//zz case VKI_SHMGET:
-//zz break;
-//zz case VKI_SHMCTL:
-//zz ML_(generic_POST_sys_shmctl)( tid, RES, ARG2, ARG3, ARG5 );
-//zz break;
-//zz default:
-//zz VG_(message)(Vg_DebugMsg,
-//zz "FATAL: unhandled syscall(ipc) %d",
-//zz ARG1 );
-//zz VG_(core_panic)("... bye!\n");
-//zz break; /*NOTREACHED*/
-//zz }
-//zz }
=20
+static Addr deref_Addr ( ThreadId tid, Addr a, Char* s )
+{
+ Addr* a_p =3D (Addr*)a;
+ PRE_MEM_READ( s, (Addr)a_p, sizeof(Addr) );
+ return *a_p;
+}
+
+PRE(sys_ipc)
+{
+ PRINT("sys_ipc ( %d, %d, %d, %d, %p, %d )", ARG1,ARG2,ARG3,ARG4,ARG5,A=
RG6);
+ // XXX: this is simplistic -- some args are not used in all circumstan=
ces.
+ PRE_REG_READ6(int, "ipc",
+ vki_uint, call, int, first, int, second, int, third,
+ void *, ptr, long, fifth)
+
+ switch (ARG1 /* call */) {
+ case VKI_SEMOP:
+ ML_(generic_PRE_sys_semop)( tid, ARG2, ARG5, ARG3 );
+ *flags |=3D SfMayBlock;
+ break;
+ case VKI_SEMGET:
+ break;
+ case VKI_SEMCTL:
+ {
+ UWord arg =3D deref_Addr( tid, ARG5, "semctl(arg)" );
+ ML_(generic_PRE_sys_semctl)( tid, ARG2, ARG3, ARG4, arg );
+ break;
+ }
+ case VKI_SEMTIMEDOP:
+ ML_(generic_PRE_sys_semtimedop)( tid, ARG2, ARG5, ARG3, ARG6 );
+ *flags |=3D SfMayBlock;
+ break;
+ case VKI_MSGSND:
+ ML_(linux_PRE_sys_msgsnd)( tid, ARG2, ARG5, ARG3, ARG4 );
+ if ((ARG4 & VKI_IPC_NOWAIT) =3D=3D 0)
+ *flags |=3D SfMayBlock;
+ break;
+ case VKI_MSGRCV:
+ {
+ Addr msgp;
+ Word msgtyp;
+
+ msgp =3D deref_Addr( tid,
+ (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
+ "msgrcv(msgp)" );
+ msgtyp =3D deref_Addr( tid,
+ (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp),
+ "msgrcv(msgp)" );
+
+ ML_(linux_PRE_sys_msgrcv)( tid, ARG2, msgp, ARG3, msgtyp, ARG4 );
+
+ if ((ARG4 & VKI_IPC_NOWAIT) =3D=3D 0)
+ *flags |=3D SfMayBlock;
+ break;
+ }
+ case VKI_MSGGET:
+ break;
+ case VKI_MSGCTL:
+ ML_(linux_PRE_sys_msgctl)( tid, ARG2, ARG3, ARG5 );
+ break;
+ case VKI_SHMAT:
+ {
+ UWord w;
+ PRE_MEM_WRITE( "shmat(raddr)", ARG4, sizeof(Addr) );
+ w =3D ML_(generic_PRE_sys_shmat)( tid, ARG2, ARG5, ARG3 );
+ if (w =3D=3D 0)
+ SET_STATUS_Failure( VKI_EINVAL );
+ else
+ ARG5 =3D w;
+ break;
+ }
+ case VKI_SHMDT:
+ if (!ML_(generic_PRE_sys_shmdt)(tid, ARG5))
+ SET_STATUS_Failure( VKI_EINVAL );
+ break;
+ case VKI_SHMGET:
+ break;
+ case VKI_SHMCTL: /* IPCOP_shmctl */
+ ML_(generic_PRE_sys_shmctl)( tid, ARG2, ARG3, ARG5 );
+ break;
+ default:
+ VG_(message)(Vg_DebugMsg, "FATAL: unhandled syscall(ipc) %d", ARG1=
);
+ VG_(core_panic)("... bye!\n");
+ break; /*NOTREACHED*/
+ }
+}
+
+POST(sys_ipc)
+{
+ vg_assert(SUCCESS);
+ switch (ARG1 /* call */) {
+ case VKI_SEMOP:
+ case VKI_SEMGET:
+ break;
+ case VKI_SEMCTL:
+ {
+ UWord arg =3D deref_Addr( tid, ARG5, "semctl(arg)" );
+ ML_(generic_PRE_sys_semctl)( tid, ARG2, ARG3, ARG4, arg );
+ break;
+ }
+ case VKI_SEMTIMEDOP:
+ case VKI_MSGSND:
+ break;
+ case VKI_MSGRCV:
+ {
+ Addr msgp;
+ Word msgtyp;
+
+ msgp =3D deref_Addr( tid,
+ (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp)=
,
+ "msgrcv(msgp)" );
+ msgtyp =3D deref_Addr( tid,
+ (Addr) (&((struct vki_ipc_kludge *)ARG5)->msg=
typ),
+ "msgrcv(msgp)" );
+
+ ML_(linux_POST_sys_msgrcv)( tid, RES, ARG2, msgp, ARG3, msgtyp, AR=
G4 );
+ break;
+ }
+ case VKI_MSGGET:
+ break;
+ case VKI_MSGCTL:
+ ML_(linux_POST_sys_msgctl)( tid, RES, ARG2, ARG3, ARG5 );
+ break;
+ case VKI_SHMAT:
+ {
+ Addr addr;
+
+ /* force readability. before the syscall it is
+ * indeed uninitialized, as can be seen in
+ * glibc/sysdeps/unix/sysv/linux/shmat.c */
+ POST_MEM_WRITE( ARG4, sizeof( Addr ) );
+
+ addr =3D deref_Addr ( tid, ARG4, "shmat(addr)" );
+ if ( addr > 0 ) {
+ ML_(generic_POST_sys_shmat)( tid, addr, ARG2, ARG5, ARG3 );
+ }
+ break;
+ }
+ case VKI_SHMDT:
+ ML_(generic_POST_sys_shmdt)( tid, RES, ARG5 );
+ break;
+ case VKI_SHMGET:
+ break;
+ case VKI_SHMCTL:
+ ML_(generic_POST_sys_shmctl)( tid, RES, ARG2, ARG3, ARG5 );
+ break;
+ default:
+ VG_(message)(Vg_DebugMsg,
+ "FATAL: unhandled syscall(ipc) %d",
+ ARG1 );
+ VG_(core_panic)("... bye!\n");
+ break; /*NOTREACHED*/
+ }
+}
+
PRE(sys_clone)
{
UInt cloneflags;
@@ -1283,7 +1283,7 @@
PLAX_(__NR_mmap, sys_mmap), // 90
GENXY(__NR_munmap, sys_munmap), // 91
// _____(__NR_truncate, sys_truncate), // 92
-// _____(__NR_ftruncate, sys_ftruncate), // 93
+ GENX_(__NR_ftruncate, sys_ftruncate), // 93
// _____(__NR_fchmod, sys_fchmod), // 94
=20
// _____(__NR_fchown, sys_fchown), // 95
@@ -1312,7 +1312,7 @@
=20
// _____(__NR_swapoff, sys_swapoff), // 115
// _____(__NR_sysinfo, sys_sysinfo), // 116
-// _____(__NR_ipc, sys_ipc), // 117
+ PLAXY(__NR_ipc, sys_ipc), // 117
// _____(__NR_fsync, sys_fsync), // 118
// _____(__NR_sigreturn, sys_sigreturn), // 119
=20
@@ -1394,7 +1394,7 @@
// _____(__NR_capget, sys_capget), // 183
// _____(__NR_capset, sys_capset), // 184
=20
-// _____(__NR_sigaltstack, sys_sigaltstack), // 185
+ GENXY(__NR_sigaltstack, sys_sigaltstack), // 185
// _____(__NR_sendfile, sys_sendfile), // 186
// _____(__NR_getpmsg, sys_getpmsg), // 187
// _____(__NR_putpmsg, sys_putpmsg), // 188
@@ -1420,7 +1420,7 @@
=20
// _____(__NR_madvise, sys_madvise), // 205
// _____(__NR_mincore, sys_mincore), // 206
-// _____(__NR_gettid, sys_gettid), // 207
+ LINX_(__NR_gettid, sys_gettid), // 207
// _____(__NR_tkill, sys_tkill), // 208
// _____(__NR_setxattr, sys_setxattr), // 209
=20
|