From: Martin Cermak Date: Wed, 20 May 2015 12:16:09 +0000 (+0200) Subject: Several small fixes in syscall tapset and related testcases. X-Git-Tag: release-2.8~57 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=e9ac70afe3be01d9ac09aa047aacc12ede0cc975;p=systemtap.git Several small fixes in syscall tapset and related testcases. * tapset/linux/syscalls.stp: Fix s390x compat task pointer retrieval. * tapset/linux/syscalls2.stp: Fix s390x compat task pointer retrieval, fix syscall.rt_sigsuspend compat probe * testsuite/systemtap.syscall/getrandom.c: Fix compile time issues * testsuite/systemtap.syscall/memfd_create.c: Fix compile time issues * testsuite/systemtap.syscall/nfsservctl.c: Fix compile time issues * testsuite/systemtap.syscall/ptrace.c: Fix concurrent inclusion of sys/ptrace.h and linux/ptrace.h for e.g. 3.13.9-200.fc20 * testsuite/systemtap.syscall/recv.c: Relax limit testing * testsuite/systemtap.syscall/recvfrom.c: Likewise * testsuite/systemtap.syscall/send.c: Likewise * testsuite/systemtap.syscall/sendto.c: Likewise * testsuite/systemtap.syscall/signalfd.c: Fix compile time issues --- diff --git a/tapset/linux/syscalls.stp b/tapset/linux/syscalls.stp index 1c48f6728..eeccddb73 100644 --- a/tapset/linux/syscalls.stp +++ b/tapset/linux/syscalls.stp @@ -2038,8 +2038,8 @@ probe syscall.compat_getitimer = kernel.function("compat_sys_getitimer").call ? { name = "getitimer" which = __int32($which) - value_uaddr = $it - argstr = sprintf("%s, %p", _itimer_which_str(which), $it) + value_uaddr = @__pointer($it) + argstr = sprintf("%s, %p", _itimer_which_str(which), value_uaddr) } probe syscall.compat_getitimer.return = kernel.function("compat_sys_getitimer").return ? { @@ -2345,7 +2345,7 @@ probe syscall.getrusage = __syscall.getrusage, name = "getrusage" who = __int32($who) who_str = _rusage_who_str(who) - usage_uaddr = $ru + usage_uaddr = @__pointer($ru) argstr = sprintf("%s, %p", who_str, usage_uaddr) } probe __syscall.getrusage = kernel.function("sys_getrusage").call diff --git a/tapset/linux/syscalls2.stp b/tapset/linux/syscalls2.stp index fa9135a5f..71a6fcee0 100644 --- a/tapset/linux/syscalls2.stp +++ b/tapset/linux/syscalls2.stp @@ -157,7 +157,7 @@ probe syscall.open_by_handle_at = name = "open_by_handle_at" mount_dfd = __int32($mountdirfd) mount_dfd_str = _dfd_str(mount_dfd) - handle_uaddr = $handle + handle_uaddr = @__pointer($handle) flags = __int32($flags) flags_str = _sys_open_flag_str(flags) argstr = sprintf("%s, %p, %s", mount_dfd_str, handle_uaddr, flags_str) @@ -1751,8 +1751,11 @@ probe syscall.rt_sigsuspend = kernel.function("compat_sys_rt_sigsuspend").call ? kernel.function("sys_rt_sigsuspend").call ? { name = "rt_sigsuspend" - set_uaddr = $unewset - sigsetsize = $sigsetsize + set_uaddr = @__pointer($unewset) + if (%{ /* pure */ _stp_is_compat_task() %}) + sigsetsize = __uint32($sigsetsize) + else + sigsetsize = __ulong($sigsetsize) argstr = sprintf("%s, %u", (%{ /* pure */ _stp_is_compat_task() %} ? _stp_compat_sigset_u(set_uaddr) @@ -1941,8 +1944,8 @@ probe syscall.sched_rr_get_interval = __syscall.sched_rr_get_interval, { name = "sched_rr_get_interval" pid = __int32($pid) - tp_uaddr = $interval - argstr = sprintf("%d, %p", pid, $interval) + tp_uaddr = @__pointer($interval) + argstr = sprintf("%d, %p", pid, tp_uaddr) } probe __syscall.sched_rr_get_interval = kernel.function("sys_sched_rr_get_interval").call @@ -2790,10 +2793,10 @@ probe syscall.compat_setitimer = kernel.function("compat_sys_setitimer").call ? { name = "setitimer" which = __int32($which) - value_uaddr = $in + value_uaddr = @__pointer($in) ovalue_uaddr = @__pointer($out) argstr = sprintf("%s, %s, %p", _itimer_which_str(which), - _struct_compat_itimerval_u($in), @__pointer($out)) + _struct_compat_itimerval_u(value_uaddr), ovalue_uaddr) } probe syscall.compat_setitimer.return = kernel.function("compat_sys_setitimer").return ? { @@ -3498,10 +3501,10 @@ probe syscall.sigaction = kernel.function("sys_sigaction").call ? { name = "sigaction" sig = __int32($sig) - act_uaddr = $act + act_uaddr = @__pointer($act) oact_uaddr = $oact argstr = sprintf("%s, {%s}, %p", _signal_name(sig), - _struct_sigaction_u($act), $oact) + _struct_sigaction_u(act_uaddr), oact_uaddr) } probe syscall.sigaction.return = kernel.function("sys_sigaction").return ? { @@ -3513,10 +3516,10 @@ probe syscall.sigaction32 = kernel.function("sys32_sigaction").call ?, { name = "sigaction" sig = __int32($sig) - act_uaddr = $act + act_uaddr = @__pointer($act) oact_uaddr = $oact argstr = sprintf("%s, {%s}, %p", _signal_name(sig), - _struct_old_sigaction32_u($act), $oact) + _struct_old_sigaction32_u(act_uaddr), oact_uaddr) } probe syscall.sigaction32.return = kernel.function("sys32_sigaction").return ?, kernel.function("compat_sys_sigaction").return ? @@ -3593,11 +3596,11 @@ probe syscall.signalfd = __syscall.signalfd4 !, __syscall.signalfd ? flags = __int32(@choose_defined($flags, 0)) if (flags == 0) { name = "signalfd" - argstr = sprintf("%d, %p, %d", __int32($ufd), $user_mask, + argstr = sprintf("%d, %p, %d", __int32($ufd), @__pointer($user_mask), $sizemask) } else { name = "signalfd4" - argstr = sprintf("%d, %p, %d, %s", __int32($ufd), $user_mask, + argstr = sprintf("%d, %p, %d, %s", __int32($ufd), @__pointer($user_mask), $sizemask, _signalfd4_flags_str(flags)) } } @@ -3632,11 +3635,11 @@ probe syscall.compat_signalfd = kernel.function("compat_sys_signalfd4").call !, flags = __int32(@choose_defined($flags, 0)) if (flags == 0) { name = "signalfd" - argstr = sprintf("%d, %p, %d", __int32($ufd), $sigmask, + argstr = sprintf("%d, %p, %d", __int32($ufd), @__pointer($sigmask), $sigsetsize) } else { name = "signalfd4" - argstr = sprintf("%d, %p, %d, %s", __int32($ufd), $sigmask, + argstr = sprintf("%d, %p, %d, %s", __int32($ufd), @__pointer($sigmask), $sigsetsize, _signalfd4_flags_str(flags)) } } @@ -3686,7 +3689,7 @@ probe syscall.sigprocmask = __syscall.sigprocmask ?, name = "sigprocmask" how = __int32($how) how_str = _sigprocmask_how_str(how) - set_uaddr = @choose_defined($set, $nset) + set_uaddr = @__pointer(@choose_defined($set, $nset)) argstr = sprintf("%s, %p, %p", how_str, set_uaddr, oldset_uaddr) } probe __syscall.sigprocmask = kernel.function("sys_sigprocmask").call ? @@ -4477,7 +4480,7 @@ probe syscall.timerfd = kernel.function("sys_timerfd").call ?, kernel.function("compat_sys_timerfd").call ? { name = "timerfd" - argstr = sprintf("%d, %d, 0x%x", $ufd, $clockid, $flags) + argstr = sprintf("%d, %d, 0x%x", $ufd, @__pointer($clockid), $flags) } probe syscall.timerfd.return = kernel.function("sys_timerfd").return ?, kernel.function("compat_sys_timerfd").return ? @@ -4515,8 +4518,8 @@ probe syscall.timerfd_gettime = __syscall.timerfd_gettime ?, { name = "timerfd_gettime" fd = __int32($ufd) - value_uaddr = $otmr - argstr = sprintf("%d, %p", fd, $otmr) + value_uaddr = @__pointer($otmr) + argstr = sprintf("%d, %p", fd, value_uaddr) } probe __syscall.timerfd_gettime = kernel.function("sys_timerfd_gettime").call ? { @@ -5175,7 +5178,7 @@ probe syscall.waitid = __syscall.waitid, _waitid_which_str(__int32($which)), __int32(@choose_defined($upid, $pid)), infop_uaddr, _wait4_opt_str($options), - @choose_defined($ru, $uru)) + @__pointer(@choose_defined($ru, $uru))) } probe __syscall.waitid = kernel.function("sys_waitid").call { diff --git a/testsuite/systemtap.syscall/getrandom.c b/testsuite/systemtap.syscall/getrandom.c index 729df6a2f..0ad32fef0 100644 --- a/testsuite/systemtap.syscall/getrandom.c +++ b/testsuite/systemtap.syscall/getrandom.c @@ -13,31 +13,28 @@ #define GRND_RANDOM 0x0002 #endif -#if defined(__NR_getrandom) && !defined(SYS_getrandom) -#define SYS_getrandom __NR_getrandom -#endif - int main() { -#ifdef SYS_getrandom +// e.g. kernel-headers-3.13.9-200.fc20.x86_64 do not have __NR_getrandom +#ifdef __NR_getrandom char i[5] = {0}; char j[5] = {0}; char k[5] = {0}; - syscall(SYS_getrandom, i, sizeof(i), GRND_RANDOM); + syscall(__NR_getrandom, i, sizeof(i), GRND_RANDOM); //staptest// getrandom ("", 5, GRND_RANDOM) = 5 - syscall(SYS_getrandom, (size_t)-1, 5, GRND_RANDOM); + syscall(__NR_getrandom, (size_t)-1, 5, GRND_RANDOM); #if __WORDSIZE == 64 //staptest// getrandom ([16]?[f]+, 5, GRND_RANDOM) = -NNNN (EFAULT) #else //staptest// getrandom ([8]?[f]+, 5, GRND_RANDOM) = -NNNN (EFAULT) #endif - syscall(SYS_getrandom, j, -1, GRND_RANDOM); + syscall(__NR_getrandom, j, -1, GRND_RANDOM); //staptest// getrandom ("", 4294967295, GRND_RANDOM) = NNNN - syscall(SYS_getrandom, k, sizeof(k), -1); + syscall(__NR_getrandom, k, sizeof(k), -1); //staptest// getrandom ("", 5, GRND_[^ ]+|XXXX) = -NNNN (EINVAL) #endif return 0; diff --git a/testsuite/systemtap.syscall/memfd_create.c b/testsuite/systemtap.syscall/memfd_create.c index cec3979d2..fbc8cd566 100644 --- a/testsuite/systemtap.syscall/memfd_create.c +++ b/testsuite/systemtap.syscall/memfd_create.c @@ -12,22 +12,18 @@ #define MFD_ALLOW_SEALING 0x0002u #endif -#if !defined(SYS_memfd_create) && defined(__NR_memfd_create) -#define SYS_memfd_create __NR_memfd_create -#endif - int main() { -#ifdef SYS_memfd_create - syscall(SYS_memfd_create,"memfd_create", MFD_CLOEXEC|MFD_ALLOW_SEALING); +#ifdef __NR_memfd_create + syscall(__NR_memfd_create,"memfd_create", MFD_CLOEXEC|MFD_ALLOW_SEALING); //staptest// memfd_create ("memfd_create", MFD_CLOEXEC|MFD_ALLOW_SEALING) = NNNN - syscall(SYS_memfd_create, (size_t)-1, MFD_CLOEXEC|MFD_ALLOW_SEALING); + syscall(__NR_memfd_create, (size_t)-1, MFD_CLOEXEC|MFD_ALLOW_SEALING); #if __WORDSIZE == 64 //staptest// memfd_create ([16]?[f]+, MFD_CLOEXEC|MFD_ALLOW_SEALING) = -NNNN (EFAULT) #else //staptest// memfd_create ([8]?[f]+, MFD_CLOEXEC|MFD_ALLOW_SEALING) = -NNNN (EFAULT) #endif - syscall(SYS_memfd_create,"memfd_create1", -1); + syscall(__NR_memfd_create,"memfd_create1", -1); //staptest// memfd_create ("memfd_create1", MFD_[^ ]+|XXXX) = -NNNN (EINVAL) #endif diff --git a/testsuite/systemtap.syscall/nfsservctl.c b/testsuite/systemtap.syscall/nfsservctl.c index 8575a60dc..41e4af019 100644 --- a/testsuite/systemtap.syscall/nfsservctl.c +++ b/testsuite/systemtap.syscall/nfsservctl.c @@ -7,15 +7,23 @@ #include #include #include -#ifdef SYS_nfsservctl -#include -#endif +#include // Note that since linux 3.1, the nfsservctl() syscall no longer exists. +// RHEL7 systems with kernel-headers-3.10.0-229.el7 define __NR_nfsservctl +// but do not have linux/nfsd/syscall.h. + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0) +#undef __NR_nfsservctl +#endif + +#ifdef __NR_nfsservctl +#include +#endif int main() { -#ifdef SYS_nfsservctl +#ifdef __NR_nfsservctl struct nfsctl_arg arg; union nfsctl_res res; diff --git a/testsuite/systemtap.syscall/ptrace.c b/testsuite/systemtap.syscall/ptrace.c index 224f9cfdf..346c79d14 100644 --- a/testsuite/systemtap.syscall/ptrace.c +++ b/testsuite/systemtap.syscall/ptrace.c @@ -12,9 +12,9 @@ // don't get along well. Work around this. #define ia64_fpreg XXX_ia64_fpreg #define pt_all_user_regs XXX_pt_all_user_regs -//#define ptrace_peeksiginfo_args XXX_ptrace_peeksiginfo_args +#define ptrace_peeksiginfo_args XXX_ptrace_peeksiginfo_args #include -//#undef ptrace_peeksiginfo_args +#undef ptrace_peeksiginfo_args #undef pt_all_user_regs #undef ia64_fpreg diff --git a/testsuite/systemtap.syscall/recv.c b/testsuite/systemtap.syscall/recv.c index 638f1602f..9635b269e 100644 --- a/testsuite/systemtap.syscall/recv.c +++ b/testsuite/systemtap.syscall/recv.c @@ -166,9 +166,9 @@ int main() recv(s, buf, (size_t)-1, MSG_DONTWAIT); #if __WORDSIZE == 64 - //staptest// recv[[[[from]]]]? (NNNN, XXXX, 18446744073709551615, MSG_DONTWAIT[[[[, 0x0, 0x0]]]]?) = 6 + //staptest// recv[[[[from]]]]? (NNNN, XXXX, 18446744073709551615, MSG_DONTWAIT[[[[, 0x0, 0x0]]]]?) = NNNN #else - //staptest// recv[[[[from]]]]? (NNNN, XXXX, 4294967295, MSG_DONTWAIT[[[[, 0x0, 0x0]]]]?) = 6 + //staptest// recv[[[[from]]]]? (NNNN, XXXX, 4294967295, MSG_DONTWAIT[[[[, 0x0, 0x0]]]]?) = NNNN #endif close(s); diff --git a/testsuite/systemtap.syscall/recvfrom.c b/testsuite/systemtap.syscall/recvfrom.c index 68000f2ce..eeb567c78 100644 --- a/testsuite/systemtap.syscall/recvfrom.c +++ b/testsuite/systemtap.syscall/recvfrom.c @@ -226,9 +226,9 @@ int main() recvfrom(s, buf, (size_t)-1, MSG_DONTWAIT, (struct sockaddr *)&from, &fromlen); #if __WORDSIZE == 64 - //staptest// recvfrom (NNNN, XXXX, 18446744073709551615, MSG_DONTWAIT, XXXX, XXXX) = 6 + //staptest// recvfrom (NNNN, XXXX, 18446744073709551615, MSG_DONTWAIT, XXXX, XXXX) = NNNN #else - //staptest// recvfrom (NNNN, XXXX, 4294967295, MSG_DONTWAIT, XXXX, XXXX) = 6 + //staptest// recvfrom (NNNN, XXXX, 4294967295, MSG_DONTWAIT, XXXX, XXXX) = NNNN #endif close(s); diff --git a/testsuite/systemtap.syscall/send.c b/testsuite/systemtap.syscall/send.c index 9838ae7a4..b414c0f60 100644 --- a/testsuite/systemtap.syscall/send.c +++ b/testsuite/systemtap.syscall/send.c @@ -131,9 +131,9 @@ int main() send(s, (void *)buf, -1, 0); #if __WORDSIZE == 64 - //staptest// send[[[[to]]]]? (NNNN, XXXX, 18446744073709551615, 0x0[[[[, NULL, 0]]]]?) = -NNNN (EMSGSIZE) + //staptest// send[[[[to]]]]? (NNNN, XXXX, 18446744073709551615, 0x0[[[[, NULL, 0]]]]?) = -NNNN #else - //staptest// send[[[[to]]]]? (NNNN, XXXX, 4294967295, 0x0[[[[, NULL, 0]]]]?) = -NNNN (EMSGSIZE) + //staptest// send[[[[to]]]]? (NNNN, XXXX, 4294967295, 0x0[[[[, NULL, 0]]]]?) = -NNNN #endif close(s); diff --git a/testsuite/systemtap.syscall/sendto.c b/testsuite/systemtap.syscall/sendto.c index 50121e8c6..4adefec64 100644 --- a/testsuite/systemtap.syscall/sendto.c +++ b/testsuite/systemtap.syscall/sendto.c @@ -128,9 +128,9 @@ int main() sendto(s, (void *)buf, -1, 0, (struct sockaddr *)&sin1, sizeof(sin1)); #if __WORDSIZE == 64 - //staptest// sendto (NNNN, XXXX, 18446744073709551615, 0x0, {AF_INET, 0.0.0.0, NNNN}, 16) = -NNNN (EMSGSIZE) + //staptest// sendto (NNNN, XXXX, 18446744073709551615, 0x0, {AF_INET, 0.0.0.0, NNNN}, 16) = -NNNN #else - //staptest// sendto (NNNN, XXXX, 4294967295, 0x0, {AF_INET, 0.0.0.0, NNNN}, 16) = -NNNN (EMSGSIZE) + //staptest// sendto (NNNN, XXXX, 4294967295, 0x0, {AF_INET, 0.0.0.0, NNNN}, 16) = -NNNN #endif close(s); diff --git a/testsuite/systemtap.syscall/signalfd.c b/testsuite/systemtap.syscall/signalfd.c index 93383beef..f89b80529 100644 --- a/testsuite/systemtap.syscall/signalfd.c +++ b/testsuite/systemtap.syscall/signalfd.c @@ -1,11 +1,14 @@ /* COVERAGE: signalfd signalfd4 */ -#include + #include #include #include #include #include +#if defined __NR_signalfd && defined __NR_signalfd4 +#include + int main() { sigset_t mask; @@ -43,3 +46,9 @@ int main() return 0; } +#else +int main() +{ + return 0; +} +#endif