|
From: <sv...@va...> - 2012-10-21 20:21:26
|
philippe 2012-10-21 21:21:17 +0100 (Sun, 21 Oct 2012)
New Revision: 13076
Log:
restructure code for future fixing of 123837 (semctl GETVAL false positive)
Regrouped identical code (except for indentation)
from syswrap-ppc64-linux.c, syswrap-ppc32-linux.c,syswrap-mips32-linux.c
syswrap-x86-linux.c, syswrap-s390x-linux.c
into
syswrap-linux.c
(compiled/regtested on x86, amd64, ppc64, mips32, s390x)
Modified files:
trunk/coregrind/m_syswrap/priv_syswrap-linux.h
trunk/coregrind/m_syswrap/syswrap-generic.c
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/coregrind/m_syswrap/syswrap-mips32-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c
trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c
trunk/coregrind/m_syswrap/syswrap-s390x-linux.c
trunk/coregrind/m_syswrap/syswrap-x86-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-x86-linux.c (+1 -155)
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2012-10-21 20:58:04 +01:00 (rev 13075)
+++ trunk/coregrind/m_syswrap/syswrap-x86-linux.c 2012-10-21 21:21:17 +01:00 (rev 13076)
@@ -800,7 +800,6 @@
DECL_TEMPLATE(x86_linux, old_mmap);
DECL_TEMPLATE(x86_linux, sys_mmap2);
DECL_TEMPLATE(x86_linux, sys_sigreturn);
-DECL_TEMPLATE(x86_linux, sys_ipc);
DECL_TEMPLATE(x86_linux, sys_rt_sigreturn);
DECL_TEMPLATE(x86_linux, sys_modify_ldt);
DECL_TEMPLATE(x86_linux, sys_set_thread_area);
@@ -1177,159 +1176,6 @@
}
}
-static Addr deref_Addr ( ThreadId tid, Addr a, Char* s )
-{
- Addr* a_p = (Addr*)a;
- PRE_MEM_READ( s, (Addr)a_p, sizeof(Addr) );
- return *a_p;
-}
-
-PRE(sys_ipc)
-{
- PRINT("sys_ipc ( %ld, %ld, %ld, %ld, %#lx, %ld )", ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
- // XXX: this is simplistic -- some args are not used in all circumstances.
- 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 |= SfMayBlock;
- break;
- case VKI_SEMGET:
- break;
- case VKI_SEMCTL:
- {
- UWord arg = 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 |= SfMayBlock;
- break;
- case VKI_MSGSND:
- ML_(linux_PRE_sys_msgsnd)( tid, ARG2, ARG5, ARG3, ARG4 );
- if ((ARG4 & VKI_IPC_NOWAIT) == 0)
- *flags |= SfMayBlock;
- break;
- case VKI_MSGRCV:
- {
- Addr msgp;
- Word msgtyp;
-
- msgp = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
- "msgrcv(msgp)" );
- msgtyp = 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) == 0)
- *flags |= 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 = ML_(generic_PRE_sys_shmat)( tid, ARG2, ARG5, ARG3 );
- if (w == 0)
- SET_STATUS_Failure( VKI_EINVAL );
- else
- ARG5 = 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) %ld\n", 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 = 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 = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
- "msgrcv(msgp)" );
- msgtyp = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp),
- "msgrcv(msgp)" );
-
- ML_(linux_POST_sys_msgrcv)( tid, RES, ARG2, msgp, ARG3, msgtyp, ARG4 );
- 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 = deref_Addr ( tid, ARG4, "shmat(addr)" );
- 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) %ld\n",
- ARG1 );
- VG_(core_panic)("... bye!\n");
- break; /*NOTREACHED*/
- }
-}
-
PRE(old_mmap)
{
/* struct mmap_arg_struct {
@@ -1954,7 +1800,7 @@
//zz
//zz // (__NR_swapoff, sys_swapoff), // 115 */Linux
LINXY(__NR_sysinfo, sys_sysinfo), // 116
- PLAXY(__NR_ipc, sys_ipc), // 117
+ LINXY(__NR_ipc, sys_ipc), // 117
GENX_(__NR_fsync, sys_fsync), // 118
PLAX_(__NR_sigreturn, sys_sigreturn), // 119 ?/Linux
Modified: trunk/coregrind/m_syswrap/syswrap-generic.c (+0 -1)
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-generic.c 2012-10-21 20:58:04 +01:00 (rev 13075)
+++ trunk/coregrind/m_syswrap/syswrap-generic.c 2012-10-21 21:21:17 +01:00 (rev 13076)
@@ -1935,7 +1935,6 @@
}
}
-
/* ---------------------------------------------------------------------
Generic handler for mmap
------------------------------------------------------------------ */
Modified: trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c (+1 -154)
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2012-10-21 20:58:04 +01:00 (rev 13075)
+++ trunk/coregrind/m_syswrap/syswrap-ppc64-linux.c 2012-10-21 21:21:17 +01:00 (rev 13076)
@@ -445,7 +445,6 @@
//zz DECL_TEMPLATE(ppc64_linux, sys_stat64);
//zz DECL_TEMPLATE(ppc64_linux, sys_lstat64);
//zz DECL_TEMPLATE(ppc64_linux, sys_fstat64);
-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);
@@ -797,159 +796,7 @@
//zz POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
//zz }
-static Addr deref_Addr ( ThreadId tid, Addr a, Char* s )
-{
- Addr* a_p = (Addr*)a;
- PRE_MEM_READ( s, (Addr)a_p, sizeof(Addr) );
- return *a_p;
-}
-PRE(sys_ipc)
-{
- PRINT("sys_ipc ( %ld, %ld, %ld, %ld, %#lx, %ld )", ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
- // XXX: this is simplistic -- some args are not used in all circumstances.
- 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 |= SfMayBlock;
- break;
- case VKI_SEMGET:
- break;
- case VKI_SEMCTL:
- {
- UWord arg = 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 |= SfMayBlock;
- break;
- case VKI_MSGSND:
- ML_(linux_PRE_sys_msgsnd)( tid, ARG2, ARG5, ARG3, ARG4 );
- if ((ARG4 & VKI_IPC_NOWAIT) == 0)
- *flags |= SfMayBlock;
- break;
- case VKI_MSGRCV:
- {
- Addr msgp;
- Word msgtyp;
-
- msgp = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
- "msgrcv(msgp)" );
- msgtyp = 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) == 0)
- *flags |= 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 = ML_(generic_PRE_sys_shmat)( tid, ARG2, ARG5, ARG3 );
- if (w == 0)
- SET_STATUS_Failure( VKI_EINVAL );
- else
- ARG5 = 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) %ld\n", 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 = 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 = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
- "msgrcv(msgp)" );
- msgtyp = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp),
- "msgrcv(msgp)" );
-
- ML_(linux_POST_sys_msgrcv)( tid, RES, ARG2, msgp, ARG3, msgtyp, ARG4 );
- 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 = deref_Addr ( tid, ARG4, "shmat(addr)" );
- 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) %ld\n",
- ARG1 );
- VG_(core_panic)("... bye!\n");
- break; /*NOTREACHED*/
- }
-}
-
PRE(sys_clone)
{
UInt cloneflags;
@@ -1237,7 +1084,7 @@
// _____(__NR_swapoff, sys_swapoff), // 115
LINXY(__NR_sysinfo, sys_sysinfo), // 116
- PLAXY(__NR_ipc, sys_ipc), // 117
+ LINXY(__NR_ipc, sys_ipc), // 117
GENX_(__NR_fsync, sys_fsync), // 118
// _____(__NR_sigreturn, sys_sigreturn), // 119
Modified: trunk/coregrind/m_syswrap/syswrap-s390x-linux.c (+1 -156)
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-s390x-linux.c 2012-10-21 20:58:04 +01:00 (rev 13075)
+++ trunk/coregrind/m_syswrap/syswrap-s390x-linux.c 2012-10-21 21:21:17 +01:00 (rev 13076)
@@ -341,7 +341,6 @@
DECL_TEMPLATE(s390x_linux, sys_ptrace);
DECL_TEMPLATE(s390x_linux, sys_socketcall);
DECL_TEMPLATE(s390x_linux, sys_mmap);
-DECL_TEMPLATE(s390x_linux, sys_ipc);
DECL_TEMPLATE(s390x_linux, sys_clone);
DECL_TEMPLATE(s390x_linux, sys_sigreturn);
DECL_TEMPLATE(s390x_linux, sys_rt_sigreturn);
@@ -781,160 +780,6 @@
SET_STATUS_from_SysRes(r);
}
-static Addr deref_Addr ( ThreadId tid, Addr a, Char* s )
-{
- Addr* a_p = (Addr*)a;
- PRE_MEM_READ( s, (Addr)a_p, sizeof(Addr) );
- return *a_p;
-}
-
-PRE(sys_ipc)
-{
- PRINT("sys_ipc ( %ld, %ld, %ld, %ld, %#lx, %ld )",
- ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
- // XXX: this is simplistic -- some args are not used in all circumstances.
- 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 |= SfMayBlock;
- break;
- case VKI_SEMGET:
- break;
- case VKI_SEMCTL:
- {
- UWord arg = 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 |= SfMayBlock;
- break;
- case VKI_MSGSND:
- ML_(linux_PRE_sys_msgsnd)( tid, ARG2, ARG5, ARG3, ARG4 );
- if ((ARG4 & VKI_IPC_NOWAIT) == 0)
- *flags |= SfMayBlock;
- break;
- case VKI_MSGRCV:
- {
- Addr msgp;
- Word msgtyp;
-
- msgp = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
- "msgrcv(msgp)" );
- msgtyp = 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) == 0)
- *flags |= 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 = ML_(generic_PRE_sys_shmat)( tid, ARG2, ARG5, ARG3 );
- if (w == 0)
- SET_STATUS_Failure( VKI_EINVAL );
- else
- ARG5 = 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) %ld", 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 = 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 = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
- "msgrcv(msgp)" );
- msgtyp = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp),
- "msgrcv(msgp)" );
-
- ML_(linux_POST_sys_msgrcv)( tid, RES, ARG2, msgp, ARG3, msgtyp, ARG4 );
- 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 = deref_Addr ( tid, ARG4, "shmat(addr)" );
- 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) %ld",
- ARG1 );
- VG_(core_panic)("... bye!\n");
- break; /*NOTREACHED*/
- }
-}
-
PRE(sys_clone)
{
UInt cloneflags;
@@ -1254,7 +1099,7 @@
// ?????(__NR_swapoff, ), // 115
LINXY(__NR_sysinfo, sys_sysinfo), // 116
- PLAXY(__NR_ipc, sys_ipc), // 117
+ LINXY(__NR_ipc, sys_ipc), // 117
GENX_(__NR_fsync, sys_fsync), // 118
PLAX_(__NR_sigreturn, sys_sigreturn), // 119
Modified: trunk/coregrind/m_syswrap/syswrap-mips32-linux.c (+1 -146)
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-mips32-linux.c 2012-10-21 20:58:04 +01:00 (rev 13075)
+++ trunk/coregrind/m_syswrap/syswrap-mips32-linux.c 2012-10-21 21:21:17 +01:00 (rev 13076)
@@ -381,7 +381,6 @@
DECL_TEMPLATE (mips_linux, sys_accept);
DECL_TEMPLATE (mips_linux, sys_sendto);
DECL_TEMPLATE (mips_linux, sys_recvfrom);
-DECL_TEMPLATE (mips_linux, sys_ipc);
DECL_TEMPLATE (mips_linux, sys_semget);
DECL_TEMPLATE (mips_linux, sys_semop);
DECL_TEMPLATE (mips_linux, sys_semctl);
@@ -1080,150 +1079,6 @@
POST_MEM_WRITE (ARG2, sizeof (struct vki_stat64));
}
-static Addr
-deref_Addr (ThreadId tid, Addr a, Char * s)
-{
- Addr * a_p = (Addr *) a;
- PRE_MEM_READ (s, (Addr) a_p, sizeof (Addr));
- return *a_p;
-}
-
-PRE (sys_ipc)
-{
- PRINT ("sys_ipc ( %ld, %ld, %ld, %ld, %#lx, %ld )", ARG1, ARG2, ARG3,
- ARG4, ARG5, ARG6);
- // XXX: this is simplistic -- some args are not used in all circumstances.
- 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 |= SfMayBlock;
- break;
- case VKI_SEMGET:
- break;
- case VKI_SEMCTL:
- {
- UWord arg = 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 |= SfMayBlock;
- break;
- case VKI_MSGSND:
- ML_ (linux_PRE_sys_msgsnd) (tid, ARG2, ARG5, ARG3, ARG4);
- if ((ARG4 & VKI_IPC_NOWAIT) == 0)
- *flags |= SfMayBlock;
- break;
- case VKI_MSGRCV:
- {
- Addr msgp;
- Word msgtyp;
- msgp = deref_Addr (tid,
- (Addr)(&((struct vki_ipc_kludge *)ARG5)->msgp),
- "msgrcv(msgp)");
- msgtyp = 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) == 0)
- *flags |= SfMayBlock;
- break;
- }
- case VKI_MSGGET:
- break;
- case VKI_MSGCTL:
- ML_ (linux_PRE_sys_msgctl) (tid, ARG2, ARG3, ARG5);
- break;
- case VKI_SHMAT:
- {
- PRE_MEM_WRITE ("shmat(raddr)", ARG4, sizeof (Addr));
- 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) %ld\n",
- 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 = 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 = deref_Addr (tid, (Addr) (&((struct vki_ipc_kludge *)
- ARG5)->msgp),
- "msgrcv(msgp)");
- msgtyp = deref_Addr (tid,
- (Addr) (&((struct vki_ipc_kludge *) ARG5)->msgtyp),
- "msgrcv(msgp)");
- ML_ (linux_POST_sys_msgrcv)(tid, RES, ARG2, msgp, ARG3, msgtyp, ARG4);
- 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 = deref_Addr (tid, ARG4, "shmat(addr)");
- 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) %ld\n",
- ARG1);
- VG_ (core_panic) ("... bye!\n");
- break;
- /*NOTREACHED*/
- }
-}
-
PRE (sys_clone)
{
Bool badarg = False;
@@ -1535,7 +1390,7 @@
//..
//.. // (__NR_swapoff, sys_swapoff), // 115 */Linux
LINXY (__NR_sysinfo, sys_sysinfo), // 116
- PLAXY (__NR_ipc, sys_ipc), // 117
+ LINXY (__NR_ipc, sys_ipc), // 117
GENX_ (__NR_fsync, sys_fsync), // 118
PLAX_ (__NR_sigreturn, sys_sigreturn), // 119 ?/Linux
//..
Modified: trunk/coregrind/m_syswrap/priv_syswrap-linux.h (+4 -0)
===================================================================
--- trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2012-10-21 20:58:04 +01:00 (rev 13075)
+++ trunk/coregrind/m_syswrap/priv_syswrap-linux.h 2012-10-21 21:21:17 +01:00 (rev 13076)
@@ -294,6 +294,10 @@
#undef UW
#undef SR
+/* sys_ipc is a multiplexor which implements several syscalls.
+ Used e.g. by x86, ppc32, ppc64, ... */
+DECL_TEMPLATE(linux, sys_ipc);
+
#endif // __PRIV_SYSWRAP_LINUX_H
/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c (+160 -0)
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c 2012-10-21 20:58:04 +01:00 (rev 13075)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c 2012-10-21 21:21:17 +01:00 (rev 13076)
@@ -3289,6 +3289,166 @@
}
/* ---------------------------------------------------------------------
+ Generic handler for sys_ipc
+ Depending on the platform, some syscalls (e.g. semctl, semop, ...)
+ are either direct system calls, or are all implemented via sys_ipc.
+ ------------------------------------------------------------------ */
+#ifdef __NR_ipc
+static Addr deref_Addr ( ThreadId tid, Addr a, Char* s )
+{
+ Addr* a_p = (Addr*)a;
+ PRE_MEM_READ( s, (Addr)a_p, sizeof(Addr) );
+ return *a_p;
+}
+
+PRE(sys_ipc)
+{
+ PRINT("sys_ipc ( %ld, %ld, %ld, %ld, %#lx, %ld )", ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
+ // XXX: this is simplistic -- some args are not used in all circumstances.
+ 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 |= SfMayBlock;
+ break;
+ case VKI_SEMGET:
+ break;
+ case VKI_SEMCTL:
+ {
+ UWord arg = 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 |= SfMayBlock;
+ break;
+ case VKI_MSGSND:
+ ML_(linux_PRE_sys_msgsnd)( tid, ARG2, ARG5, ARG3, ARG4 );
+ if ((ARG4 & VKI_IPC_NOWAIT) == 0)
+ *flags |= SfMayBlock;
+ break;
+ case VKI_MSGRCV:
+ {
+ Addr msgp;
+ Word msgtyp;
+
+ msgp = deref_Addr( tid,
+ (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
+ "msgrcv(msgp)" );
+ msgtyp = 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) == 0)
+ *flags |= 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 = ML_(generic_PRE_sys_shmat)( tid, ARG2, ARG5, ARG3 );
+ if (w == 0)
+ SET_STATUS_Failure( VKI_EINVAL );
+ else
+ ARG5 = 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) %ld\n", 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 = 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 = deref_Addr( tid,
+ (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
+ "msgrcv(msgp)" );
+ msgtyp = deref_Addr( tid,
+ (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp),
+ "msgrcv(msgp)" );
+
+ ML_(linux_POST_sys_msgrcv)( tid, RES, ARG2, msgp, ARG3, msgtyp, ARG4 );
+ 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 = deref_Addr ( tid, ARG4, "shmat(addr)" );
+ 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) %ld\n",
+ ARG1 );
+ VG_(core_panic)("... bye!\n");
+ break; /*NOTREACHED*/
+ }
+}
+#endif
+
+/* ---------------------------------------------------------------------
*at wrappers
------------------------------------------------------------------ */
Modified: trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c (+1 -309)
===================================================================
--- trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2012-10-21 20:58:04 +01:00 (rev 13075)
+++ trunk/coregrind/m_syswrap/syswrap-ppc32-linux.c 2012-10-21 21:21:17 +01:00 (rev 13076)
@@ -417,7 +417,6 @@
DECL_TEMPLATE(ppc32_linux, sys_lstat64);
DECL_TEMPLATE(ppc32_linux, sys_fstatat64);
DECL_TEMPLATE(ppc32_linux, sys_fstat64);
-DECL_TEMPLATE(ppc32_linux, sys_ipc);
DECL_TEMPLATE(ppc32_linux, sys_clone);
DECL_TEMPLATE(ppc32_linux, sys_sigreturn);
DECL_TEMPLATE(ppc32_linux, sys_rt_sigreturn);
@@ -784,162 +783,8 @@
POST_MEM_WRITE( ARG2, sizeof(struct vki_stat64) );
}
-static Addr deref_Addr ( ThreadId tid, Addr a, Char* s )
-{
- Addr* a_p = (Addr*)a;
- PRE_MEM_READ( s, (Addr)a_p, sizeof(Addr) );
- return *a_p;
-}
-PRE(sys_ipc)
-{
- PRINT("sys_ipc ( %ld, %ld, %ld, %ld, %#lx, %ld )", ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
- // XXX: this is simplistic -- some args are not used in all circumstances.
- 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 |= SfMayBlock;
- break;
- case VKI_SEMGET:
- break;
- case VKI_SEMCTL:
- {
- UWord arg = 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 |= SfMayBlock;
- break;
- case VKI_MSGSND:
- ML_(linux_PRE_sys_msgsnd)( tid, ARG2, ARG5, ARG3, ARG4 );
- if ((ARG4 & VKI_IPC_NOWAIT) == 0)
- *flags |= SfMayBlock;
- break;
- case VKI_MSGRCV:
- {
- Addr msgp;
- Word msgtyp;
-
- msgp = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
- "msgrcv(msgp)" );
- msgtyp = 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) == 0)
- *flags |= 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 = ML_(generic_PRE_sys_shmat)( tid, ARG2, ARG5, ARG3 );
- if (w == 0)
- SET_STATUS_Failure( VKI_EINVAL );
- else
- ARG5 = 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) %ld\n", 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 = 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 = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
- "msgrcv(msgp)" );
- msgtyp = deref_Addr( tid,
- (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp),
- "msgrcv(msgp)" );
-
- ML_(linux_POST_sys_msgrcv)( tid, RES, ARG2, msgp, ARG3, msgtyp, ARG4 );
- 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 = deref_Addr ( tid, ARG4, "shmat(addr)" );
- 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) %ld\n",
- ARG1 );
- VG_(core_panic)("... bye!\n");
- break; /*NOTREACHED*/
- }
-}
-
-
-
-
//.. PRE(old_select, MayBlock)
//.. {
//.. /* struct sel_arg_struct {
@@ -1240,159 +1085,6 @@
//.. }
//.. }
-//.. // XXX: this duplicates a function in coregrind/vg_syscalls.c, yuk
-//.. static Addr deref_Addr ( ThreadId tid, Addr a, Char* s )
-//.. {
-//.. Addr* a_p = (Addr*)a;
-//.. PRE_MEM_READ( s, (Addr)a_p, sizeof(Addr) );
-//.. return *a_p;
-//.. }
-
-//.. // XXX: should use the constants here (eg. SHMAT), not the numbers directly!
-//.. PRE(sys_ipc, 0)
-//.. {
-//.. PRINT("sys_ipc ( %d, %d, %d, %d, %p, %d )", ARG1,ARG2,ARG3,ARG4,ARG5,ARG6);
-//.. // XXX: this is simplistic -- some args are not used in all circumstances.
-//.. 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 );
-//.. /* tst->sys_flags |= MayBlock; */
-//.. break;
-//.. case VKI_SEMGET:
-//.. break;
-//.. case VKI_SEMCTL:
-//.. {
-//.. UWord arg = 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 );
-//.. /* tst->sys_flags |= MayBlock; */
-//.. break;
-//.. case VKI_MSGSND:
-//.. ML_(linux_PRE_sys_msgsnd)( tid, ARG2, ARG5, ARG3, ARG4 );
-//.. /* if ((ARG4 & VKI_IPC_NOWAIT) == 0)
-//.. tst->sys_flags |= MayBlock;
-//.. */
-//.. break;
-//.. case VKI_MSGRCV:
-//.. {
-//.. Addr msgp;
-//.. Word msgtyp;
-//..
-//.. msgp = deref_Addr( tid,
-//.. (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
-//.. "msgrcv(msgp)" );
-//.. msgtyp = 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) == 0)
-//.. tst->sys_flags |= MayBlock;
-//.. */
-//.. break;
-//.. }
-//.. case VKI_MSGGET:
-//.. break;
-//.. case VKI_MSGCTL:
-//.. ML_(linux_PRE_sys_msgctl)( tid, ARG2, ARG3, ARG5 );
-//.. break;
-//.. case VKI_SHMAT:
-//.. PRE_MEM_WRITE( "shmat(raddr)", ARG4, sizeof(Addr) );
-//.. ARG5 = ML_(generic_PRE_sys_shmat)( tid, ARG2, ARG5, ARG3 );
-//.. if (ARG5 == 0)
-//.. SET_RESULT( -VKI_EINVAL );
-//.. break;
-//.. case VKI_SHMDT:
-//.. if (!ML_(generic_PRE_sys_shmdt)(tid, ARG5))
-//.. SET_RESULT( -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)
-//.. {
-//.. switch (ARG1 /* call */) {
-//.. case VKI_SEMOP:
-//.. case VKI_SEMGET:
-//.. break;
-//.. case VKI_SEMCTL:
-//.. {
-//.. UWord arg = 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 = deref_Addr( tid,
-//.. (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgp),
-//.. "msgrcv(msgp)" );
-//.. msgtyp = deref_Addr( tid,
-//.. (Addr) (&((struct vki_ipc_kludge *)ARG5)->msgtyp),
-//.. "msgrcv(msgp)" );
-//..
-//.. ML_(linux_POST_sys_msgrcv)( tid, RES, ARG2, msgp, ARG3, msgtyp, ARG4 );
-//.. 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 = 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*/
-//.. }
-//.. }
-
/* NB: This is an almost identical clone of versions for x86-linux and
arm-linux, which are themselves literally identical. */
PRE(sys_sigsuspend)
@@ -1591,7 +1283,7 @@
//..
//.. // (__NR_swapoff, sys_swapoff), // 115 */Linux
LINXY(__NR_sysinfo, sys_sysinfo), // 116
- PLAXY(__NR_ipc, sys_ipc), // 117
+ LINXY(__NR_ipc, sys_ipc), // 117
GENX_(__NR_fsync, sys_fsync), // 118
PLAX_(__NR_sigreturn, sys_sigreturn), // 119 ?/Linux
//..
|