]> sourceware.org Git - systemtap.git/commitdiff
Improve 'syscall.rt_sigpending' and 'nd_syscall.rt_sigpending' probe aliases.
authorDavid Smith <dsmith@redhat.com>
Fri, 24 Jan 2014 21:01:04 +0000 (15:01 -0600)
committerDavid Smith <dsmith@redhat.com>
Fri, 24 Jan 2014 21:01:04 +0000 (15:01 -0600)
* tapset/linux/syscalls2.stp (syscall.rt_sigpending): Add better 32-bit on
  64-bit support.
* tapset/linux/nd_syscalls.stp: Ditto.
* testsuite/systemtap.syscall/rt_signal.c: Added rt_sigpending() tests.

tapset/linux/nd_syscalls2.stp
tapset/linux/syscalls2.stp
testsuite/systemtap.syscall/rt_signal.c

index fe21aa16801ce34db28c36e8910ed5c8957c23aa..9a5322c63a2b8842f148c1795b265de643bc7ad5 100644 (file)
@@ -1431,8 +1431,13 @@ probe nd_syscall.rt_sigaction32.return = kprobe.function("sys32_rt_sigaction").r
 # rt_sigpending ______________________________________________
 #
 # long sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize)
+# COMPAT_SYSCALL_DEFINE2(rt_sigpending, compat_sigset_t __user *, uset,
+#              compat_size_t, sigsetsize)
+# asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *set,
+#                                  compat_size_t sigsetsize)
 #
-probe nd_syscall.rt_sigpending = kprobe.function("sys_rt_sigpending") ?
+probe nd_syscall.rt_sigpending = __nd_syscall.rt_sigpending ?,
+                                __nd_syscall.compat_rt_sigpending ?
 {
        name = "rt_sigpending"
        // set_uaddr = $set
@@ -1443,11 +1448,32 @@ probe nd_syscall.rt_sigpending = kprobe.function("sys_rt_sigpending") ?
        sigsetsize = ulong_arg(2)
        argstr = sprintf("%p, %d", set_uaddr, sigsetsize)
 }
-probe nd_syscall.rt_sigpending.return = kprobe.function("sys_rt_sigpending").return ?
+probe __nd_syscall.rt_sigpending = kprobe.function("sys_rt_sigpending") ?
+{
+       @__syscall_gate(%{ __NR_rt_sigpending %})
+}
+probe __nd_syscall.compat_rt_sigpending =
+       kprobe.function("compat_sys_rt_sigpending") !,
+       kprobe.function("sys32_rt_sigpending") ?
+{
+}
+probe nd_syscall.rt_sigpending.return =
+       __nd_syscall.rt_sigpending.return ?,
+       __nd_syscall.compat_rt_sigpending.return ?
 {
        name = "rt_sigpending"
        retstr = returnstr(1)
 }
+probe __nd_syscall.rt_sigpending.return =
+       kprobe.function("sys_rt_sigpending").return ?
+{
+       @__syscall_gate(%{ __NR_rt_sigpending %})
+}
+probe __nd_syscall.compat_rt_sigpending.return =
+       kprobe.function("compat_sys_rt_sigpending").return !,
+       kprobe.function("sys32_rt_sigpending").return ?
+{
+}
 
 # rt_sigprocmask _____________________________________________
 # long sys_rt_sigprocmask(int how, sigset_t __user *set, sigset_t __user *oset,
index 36bb33125efb7c53405222baef0b15f75cad1d57..0ee15a8ae9ea12463848f67fdd69cdb83576a701 100644 (file)
@@ -1286,19 +1286,44 @@ probe syscall.rt_sigaction32.return = kernel.function("sys32_rt_sigaction").retu
 # rt_sigpending ______________________________________________
 #
 # long sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize)
+# COMPAT_SYSCALL_DEFINE2(rt_sigpending, compat_sigset_t __user *, uset,
+#              compat_size_t, sigsetsize)
+# asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *set,
+#                                  compat_size_t sigsetsize)
 #
-probe syscall.rt_sigpending = kernel.function("sys_rt_sigpending").call ?
+probe syscall.rt_sigpending = __syscall.rt_sigpending ?,
+                             __syscall.compat_rt_sigpending ?
 {
        name = "rt_sigpending"
        set_uaddr = @choose_defined($uset, $set)
        sigsetsize = $sigsetsize
        argstr = sprintf("%p, %d", set_uaddr, $sigsetsize)
 }
-probe syscall.rt_sigpending.return = kernel.function("sys_rt_sigpending").return ?
+probe __syscall.rt_sigpending = kernel.function("sys_rt_sigpending").call ?
+{
+       @__syscall_gate(%{ __NR_rt_sigpending %})
+}
+probe __syscall.compat_rt_sigpending =
+       kernel.function("compat_sys_rt_sigpending").call !,
+       kernel.function("sys32_rt_sigpending").call ?
+{
+}
+probe syscall.rt_sigpending.return = __syscall.rt_sigpending.return ?,
+                                    __syscall.compat_rt_sigpending.return ?
 {
        name = "rt_sigpending"
        retstr = return_str(1, $return)
 }
+probe __syscall.rt_sigpending.return =
+       kernel.function("sys_rt_sigpending").return ?
+{
+       @__syscall_gate(%{ __NR_rt_sigpending %})
+}
+probe __syscall.compat_rt_sigpending.return =
+       kernel.function("compat_sys_rt_sigpending").return !,
+       kernel.function("sys32_rt_sigpending").return ?
+{
+}
 
 # rt_sigprocmask _____________________________________________
 # long sys_rt_sigprocmask(int how, sigset_t __user *set, sigset_t __user *oset,
index 9e2a7612005ae7a107afe378cf74469b2638f79a..5df45bc7384f3aa83a5567619c2af4f6fd5dcd57 100644 (file)
@@ -1,4 +1,4 @@
-/* COVERAGE:  rt_sigprocmask rt_sigaction */
+/* COVERAGE:  rt_sigprocmask rt_sigaction rt_sigpending */
 #include <sys/types.h>
 #include <unistd.h>
 #include <signal.h>
@@ -47,6 +47,12 @@ int main()
   //staptest// rt_sigaction (SIGUSR1, {XXXX, [^,]+, XXXX, \[SIGALRM\]}, 0x[0]+, 8) = 0
 #endif
 
+  sigpending(&mask);
+  //staptest// rt_sigpending (XXXX, 8) = 0
+
+  sigpending((sigset_t *) 0);
+  //staptest// rt_sigpending (0x0, 8) = -NNNN (EFAULT)
+
   return 0;
 }
 
This page took 0.040807 seconds and 5 git commands to generate.