From: Philippe Waroquiers Date: Sun, 21 Oct 2012 20:21:17 +0000 (+0000) Subject: restructure code for future fixing of 123837 (semctl GETVAL false positive) X-Git-Tag: svn/VALGRIND_3_9_0~592 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b83003a1e07acbcbfcea45e0132eb0a67068447f;p=thirdparty%2Fvalgrind.git 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) git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13076 --- diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index d674c00022..2c34dd8c12 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -294,6 +294,10 @@ extern void ML_(linux_POST_sys_getsockopt) ( TId, SR, UW, UW, UW, UW, UW ); #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 /*--------------------------------------------------------------------*/ diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c index 73ab5ffd36..7bc9f89ebd 100644 --- a/coregrind/m_syswrap/syswrap-generic.c +++ b/coregrind/m_syswrap/syswrap-generic.c @@ -1935,7 +1935,6 @@ ML_(generic_POST_sys_shmctl) ( ThreadId tid, } } - /* --------------------------------------------------------------------- Generic handler for mmap ------------------------------------------------------------------ */ diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 133f48a64a..5ab17db632 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -3288,6 +3288,166 @@ ML_(linux_POST_sys_msgctl) ( ThreadId tid, } } +/* --------------------------------------------------------------------- + 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 ------------------------------------------------------------------ */ diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c index a9497946e5..a819a87203 100644 --- a/coregrind/m_syswrap/syswrap-mips32-linux.c +++ b/coregrind/m_syswrap/syswrap-mips32-linux.c @@ -381,7 +381,6 @@ DECL_TEMPLATE (mips_linux, sys_connect); 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 (sys_fstat64) 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 @@ static SyscallTableEntry syscall_main_table[] = { //.. //.. // (__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 //.. diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index 3d7ab5e8c8..c4b8b422c6 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -417,7 +417,6 @@ DECL_TEMPLATE(ppc32_linux, sys_stat64); 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,160 +783,6 @@ POST(sys_fstat64) 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) @@ -1240,159 +1085,6 @@ PRE(sys_rt_sigreturn) //.. } //.. } -//.. // 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 @@ static SyscallTableEntry syscall_table[] = { //.. //.. // (__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 //.. diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index 0d84fd41bf..2e077266b4 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -445,7 +445,6 @@ DECL_TEMPLATE(ppc64_linux, sys_mmap); //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,158 +796,6 @@ PRE(sys_mmap) //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) { @@ -1237,7 +1084,7 @@ static SyscallTableEntry syscall_table[] = { // _____(__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 diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c index 0dfc8bb6ac..f33ef4656e 100644 --- a/coregrind/m_syswrap/syswrap-s390x-linux.c +++ b/coregrind/m_syswrap/syswrap-s390x-linux.c @@ -341,7 +341,6 @@ static SysRes do_clone ( ThreadId ptid, 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 @@ PRE(sys_mmap) 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 @@ static SyscallTableEntry syscall_table[] = { // ?????(__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 diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 5009c68b67..060f641c39 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -800,7 +800,6 @@ DECL_TEMPLATE(x86_linux, sys_clone); 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 @@ POST(sys_ptrace) } } -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 @@ static SyscallTableEntry syscall_table[] = { //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