From: Nicholas Nethercote Date: Sun, 14 Nov 2004 14:13:05 +0000 (+0000) Subject: converted sigsuspend, rt_sigsuspend. Not very sure about them. X-Git-Tag: svn/VALGRIND_3_0_0~1324 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4a6e2f7afb7ffd5fa0e31cae52002de5b688e8eb;p=thirdparty%2Fvalgrind.git converted sigsuspend, rt_sigsuspend. Not very sure about them. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2988 --- diff --git a/coregrind/vg_syscalls.c b/coregrind/vg_syscalls.c index ffa78860b9..f380f2c513 100644 --- a/coregrind/vg_syscalls.c +++ b/coregrind/vg_syscalls.c @@ -5681,17 +5681,33 @@ PREx(sys_pause, MayBlock) PRE_REG_READ0(long, "pause"); } -PRE(rt_sigsuspend) -{ - /* int sigsuspend(const sigset_t *mask); */ - PRINT("sigsuspend ( %p )", arg1 ); +// XXX: x86-specific +PREx(sys_sigsuspend, MayBlock) +{ + // XXX: is this right? sys_sigsuspend prototype looks like this: + // + // int sys_sigsuspend(int history0, int history1, old_sigset_t mask) + // + PRINT("sys_sigsuspend ( %p )", arg1 ); + PRE_REG_READ1(int, "sigsuspend", // XXX: is this right? + vki_old_sigset_t, mask); if (arg1 != (Addr)NULL) { - /* above NULL test is paranoia */ - PRE_MEM_READ( "sigsuspend(mask)", arg1, sizeof(vki_sigset_t) ); + PRE_MEM_READ( "sigsuspend(mask)", arg1, sizeof(vki_old_sigset_t) ); } } -PREALIAS(sigsuspend, rt_sigsuspend); +// XXX: x86-specific +PREx(sys_rt_sigsuspend, MayBlock) +{ + // XXX: is this right? sys_rt_sigsuspend prototype looks like this: + // + // int sys_rt_sigsuspend(struct pt_regs regs) + PRINT("sys_rt_sigsuspend ( %p, %d )", arg1,arg2 ); + PRE_REG_READ2(int, "rt_sigsuspend", vki_sigset_t *, mask, vki_size_t, size) + if (arg1 != (Addr)NULL) { + PRE_MEM_READ( "rt_sigsuspend(mask)", arg1, sizeof(vki_sigset_t) ); + } +} PRE(rt_sigtimedwait) { @@ -6332,7 +6348,7 @@ static const struct sys_info sys_info[] = { SYSX_(__NR_setreuid, sys_setreuid16), // 70 ## (BSD4.3) SYSX_(__NR_setregid, sys_setregid16), // 71 ## (BSD4.3) - SYSB_(__NR_sigsuspend, sys_sigsuspend, MayBlock), // 72 + SYSX_(__NR_sigsuspend, sys_sigsuspend), // 72 () P SYSXY(__NR_sigpending, sys_sigpending), // 73 * P // (__NR_sethostname, sys_sethostname), // 74 * (almost P) @@ -6462,7 +6478,7 @@ static const struct sys_info sys_info[] = { SYSBA(__NR_rt_sigpending, sys_rt_sigpending, NBRunInLWP), // 176 * SYSBA(__NR_rt_sigtimedwait, sys_rt_sigtimedwait, MayBlock), // 177 * SYSBA(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo, 0), // 178 * - SYSB_(__NR_rt_sigsuspend, sys_sigsuspend, MayBlock), // 179 + SYSX_(__NR_rt_sigsuspend, sys_rt_sigsuspend), // 179 () () SYSBA(__NR_pread64, sys_pread64, MayBlock), // 180 * SYSB_(__NR_pwrite64, sys_pwrite64, MayBlock), // 181 * diff --git a/memcheck/tests/scalar.c b/memcheck/tests/scalar.c index ff316bbe3a..18a05c2df1 100644 --- a/memcheck/tests/scalar.c +++ b/memcheck/tests/scalar.c @@ -291,8 +291,9 @@ int main(void) SY(__NR_setregid, x0, x0); // __NR_sigsuspend 72 --> sys_sigsuspend() - //GO(__NR_sigsuspend, ".s .m"); - //SY(__NR_sigsuspend); + // XXX: how do you use this function? +// GO(__NR_sigsuspend, ".s .m"); +// SY(__NR_sigsuspend); // __NR_sigpending 73 --> sys_sigpending() GO(__NR_sigpending, "1s 1m");