From 7e3ccdc5978b081c71bb568013d87d654bbe4dee Mon Sep 17 00:00:00 2001 From: Martin Cermak Date: Mon, 12 Jan 2015 17:37:18 +0100 Subject: [PATCH] PR17714: Work with valid pointers, correctly test for unimplemented syscalls. * tapset/linux/syscalls.stp: Work with valid pointers in s390 compat task. * testsuite/systemtap.syscall/poll.c: epoll_pwait() unimplemented on RHEL5 x86_64. --- tapset/linux/syscalls.stp | 8 +++--- testsuite/systemtap.syscall/poll.c | 40 +++++++++++++++++++----------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/tapset/linux/syscalls.stp b/tapset/linux/syscalls.stp index 91b56e783..8581189a8 100644 --- a/tapset/linux/syscalls.stp +++ b/tapset/linux/syscalls.stp @@ -857,14 +857,14 @@ probe syscall.epoll_pwait = kernel.function("compat_sys_epoll_pwait").call ?, { name = "epoll_pwait" epfd = __int32($epfd) - events_uaddr = $events + events_uaddr = @__pointer($events) maxevents = __int32($maxevents) timeout = __int32($timeout) - sigmask_uaddr = $sigmask + sigmask_uaddr = @__pointer($sigmask) sigsetsize = $sigsetsize argstr = sprintf("%d, %p, %d, %d, %p, %d", - __int32($epfd), $events, __int32($maxevents), - __int32($timeout), $sigmask, $sigsetsize) + __int32($epfd), events_uaddr, __int32($maxevents), + __int32($timeout), sigmask_uaddr, $sigsetsize) } probe syscall.epoll_pwait.return = kernel.function("compat_sys_epoll_pwait").return ?, kernel.function("sys_epoll_pwait").return ? diff --git a/testsuite/systemtap.syscall/poll.c b/testsuite/systemtap.syscall/poll.c index 73221af0f..9787bb7de 100644 --- a/testsuite/systemtap.syscall/poll.c +++ b/testsuite/systemtap.syscall/poll.c @@ -6,6 +6,17 @@ #include #include + +#ifdef SYS_epoll_pwait +int __epoll_pwait(int epfd, struct epoll_event *events, + int maxevents, int timeout, + const sigset_t *set) +{ + return syscall(__NR_epoll_pwait, epfd, events, maxevents, timeout, + set, _NSIG / 8); +} +#endif + int main() { struct epoll_event ev, events[17]; @@ -87,34 +98,35 @@ int main() //staptest// epoll_wait (-1, XXXX, 17, -1) = -NNNN (EBADF) #endif +// RHEL5 x86_64 defines SYS_epoll_pwait, but doesn't have epoll_pwait() #ifdef SYS_epoll_pwait - epoll_pwait(fd, events, 17, 0, NULL); - //staptest// epoll_pwait (NNNN, XXXX, 17, 0, 0x0, NNNN) = 0 + __epoll_pwait(fd, events, 17, 0, NULL); + //staptest// [[[[epoll_pwait (NNNN, XXXX, 17, 0, 0x0, NNNN) = 0!!!!ni_syscall () = -38 (ENOSYS)]]]] - epoll_pwait(fd, events, 17, 0, &sigs); - //staptest// epoll_pwait (NNNN, XXXX, 17, 0, XXXX, NNNN) = 0 + __epoll_pwait(fd, events, 17, 0, &sigs); + //staptest// [[[[epoll_pwait (NNNN, XXXX, 17, 0, XXXX, NNNN) = 0!!!!ni_syscall () = -38 (ENOSYS)]]]] - epoll_pwait(-1, events, 17, 0, &sigs); - //staptest// epoll_pwait (-1, XXXX, 17, 0, XXXX, NNNN) = -NNNN (EBADF) + __epoll_pwait(-1, events, 17, 0, &sigs); + //staptest// [[[[epoll_pwait (-1, XXXX, 17, 0, XXXX, NNNN) = -NNNN (EBADF)!!!!ni_syscall () = -38 (ENOSYS)]]]] - epoll_pwait(fd, (struct epoll_event *)-1, 17, 0, &sigs); + __epoll_pwait(fd, (struct epoll_event *)-1, 17, 0, &sigs); #ifdef __s390__ //staptest// epoll_pwait (NNNN, 0x[7]?[f]+, 17, 0, XXXX, NNNN) = #else - //staptest// epoll_pwait (NNNN, 0x[f]+, 17, 0, XXXX, NNNN) = + //staptest// [[[[epoll_pwait (NNNN, 0x[f]+, 17, 0, XXXX, NNNN) =!!!!ni_syscall () = -38 (ENOSYS)]]]] #endif - epoll_pwait(fd, events, -1, 0, &sigs); - //staptest// epoll_pwait (NNNN, XXXX, -1, 0, XXXX, NNNN) = -NNNN (EINVAL) + __epoll_pwait(fd, events, -1, 0, &sigs); + //staptest// [[[[epoll_pwait (NNNN, XXXX, -1, 0, XXXX, NNNN) = -NNNN (EINVAL)!!!!ni_syscall () = -38 (ENOSYS)]]]] - epoll_pwait(-1, events, 17, -1, &sigs); - //staptest// epoll_pwait (-1, XXXX, 17, -1, XXXX, NNNN) = -NNNN (EBADF) + __epoll_pwait(-1, events, 17, -1, &sigs); + //staptest// [[[[epoll_pwait (-1, XXXX, 17, -1, XXXX, NNNN) = -NNNN (EBADF)!!!!ni_syscall () = -38 (ENOSYS)]]]] - epoll_pwait(fd, events, 17, 0, (sigset_t *)-1); + __epoll_pwait(fd, events, 17, 0, (sigset_t *)-1); #ifdef __s390__ //staptest// epoll_pwait (NNNN, XXXX, 17, 0, 0x[7]?[f]+, NNNN) = -NNNN (EFAULT) #else - //staptest// epoll_pwait (NNNN, XXXX, 17, 0, 0x[f]+, NNNN) = -NNNN (EFAULT) + //staptest// [[[[epoll_pwait (NNNN, XXXX, 17, 0, 0x[f]+, NNNN) = -NNNN (EFAULT)!!!!ni_syscall () = -38 (ENOSYS)]]]] #endif #endif -- 2.43.5