]> sourceware.org Git - systemtap.git/commitdiff
PR23160,PR14690: adapt 15 more syscalls for 4.17 __ARCH_sys_FOO and sys_enter/exit
authorJafeer Uddin <juddin@redhat.com>
Fri, 10 Aug 2018 20:41:32 +0000 (16:41 -0400)
committerJafeer Uddin <juddin@redhat.com>
Fri, 10 Aug 2018 20:41:32 +0000 (16:41 -0400)
16 files changed:
runtime/linux/compat_unistd.h
tapset/linux/sysc_clock_adjtime.stp
tapset/linux/sysc_clock_getres.stp
tapset/linux/sysc_clock_gettime.stp
tapset/linux/sysc_clock_nanosleep.stp
tapset/linux/sysc_clock_settime.stp
tapset/linux/sysc_eventfd.stp
tapset/linux/sysc_execve.stp
tapset/linux/sysc_execveat.stp
tapset/linux/sysc_fanotify_init.stp
tapset/linux/sysc_fanotify_mark.stp
tapset/linux/sysc_gettimeofday.stp
tapset/linux/sysc_setdomainname.stp
tapset/linux/sysc_settimeofday.stp
tapset/linux/sysc_stime.stp
tapset/linux/sysc_time.stp

index 8e86948353f002cb9d555c58b760d80e49a431dd..d76069e50b219c7daf9091056ed71c20bf828652 100644 (file)
 #ifndef __NR_connect
 #define __NR_connect (__NR_syscall_max + 1)
 #endif
+#ifndef __NR_epoll_wait
+#define __NR_epoll_wait (__NR_syscall_max + 1)
+#endif
+#ifndef __NR_execveat
+#define __NR_execveat (__NR_syscall_max + 1)
+#endif
 #ifndef __NR_fadvise64_64
 #define __NR_fadvise64_64 (__NR_syscall_max + 1)
 #endif
@@ -58,6 +64,9 @@
 #ifndef __NR_getsockname
 #define __NR_getsockname (__NR_syscall_max + 1)
 #endif
+#ifndef __NR_getsockopt
+#define __NR_getsockopt (__NR_syscall_max + 1)
+#endif
 #ifndef __NR_ipc
 #define __NR_ipc (__NR_syscall_max + 1)
 #endif
 #ifndef __NR_recvmsg
 #define __NR_recvmsg (__NR_syscall_max + 1)
 #endif
+#ifndef __NR_renameat2
+#define __NR_renameat2 (__NR_syscall_max + 1)
+#endif
+#ifndef __NR_semtimedop
+#define __NR_semtimedop (__NR_syscall_max + 1)
+#endif
 #ifndef __NR_send
 #define __NR_send (__NR_syscall_max + 1)
 #endif
 #ifndef __NR_sendto
 #define __NR_sendto (__NR_syscall_max + 1)
 #endif
-#ifndef __NR_getsockopt
-#define __NR_getsockopt (__NR_syscall_max + 1)
-#endif
-#ifndef __NR_renameat2
-#define __NR_renameat2 (__NR_syscall_max + 1)
-#endif
-#ifndef __NR_semtimedop
-#define __NR_semtimedop (__NR_syscall_max + 1)
-#endif
 #ifndef __NR_setsockopt
 #define __NR_setsockopt (__NR_syscall_max + 1)
 #endif
+#ifndef __NR_shmctl
+#define __NR_shmctl (__NR_syscall_max + 1)
+#endif
 #ifndef __NR_shutdown
 #define __NR_shutdown (__NR_syscall_max + 1)
 #endif
 #ifndef __NR_sigprocmask
 #define __NR_sigprocmask (__NR_syscall_max + 1)
 #endif
-#ifndef __NR_epoll_wait
-#define __NR_epoll_wait (__NR_syscall_max + 1)
-#endif
-#ifndef __NR_shmctl
-#define __NR_shmctl (__NR_syscall_max + 1)
-#endif
 #ifndef __NR_socket
 #define __NR_socket (__NR_syscall_max + 1)
 #endif
+#ifndef __NR_socketcall
+#define __NR_socketcall (__NR_syscall_max + 1)
+#endif
 #ifndef __NR_socketpair
 #define __NR_socketpair (__NR_syscall_max + 1)
 #endif
+#ifndef __NR_stime
+#define __NR_stime (__NR_syscall_max + 1)
+#endif
 #ifndef __NR_truncate
 #define __NR_truncate (__NR_syscall_max + 1)
 #endif
-#ifndef __NR_socketcall
-#define __NR_socketcall (__NR_syscall_max + 1)
-#endif
 
 #if defined(__x86_64__)
 
 #ifndef __NR_ia32_chroot
 #define __NR_ia32_chroot 61
 #endif
+#ifndef __NR_ia32_clock_adjtime
+#define __NR_ia32_clock_adjtime 343
+#endif
+#ifndef __NR_ia32_clock_gettime
+#define __NR_ia32_clock_gettime 265
+#endif
+#ifndef __NR_ia32_clock_getres
+#define __NR_ia32_clock_getres 266
+#endif
+#ifndef __NR_ia32_clock_nanosleep
+#define __NR_ia32_clock_nanosleep 267
+#endif
+#ifndef __NR_ia32_clock_settime
+#define __NR_ia32_clock_settime 264
+#endif
 #ifndef __NR_ia32_clone
 #define __NR_ia32_clone 120
 #endif
 #ifndef __NR_ia32_epoll_wait
 #define __NR_ia32_epoll_wait 256
 #endif
+#ifndef __NR_ia32_eventfd
+#define __NR_ia32_eventfd 323
+#endif
 #ifndef __NR_ia32_eventfd2
 #define __NR_ia32_eventfd2 328
 #endif
+#ifndef __NR_ia32_execve
+#define __NR_ia32_execve 11
+#endif
+#ifndef __NR_ia32_execveat
+#define __NR_ia32_execveat 358
+#endif 
 #ifndef __NR_ia32_exit
 #define __NR_ia32_exit 1
 #endif
 #ifndef __NR_ia32_faccessat
 #define __NR_ia32_faccessat 307
 #endif
+#ifndef __NR_ia32_fanotify_init
+#define __NR_ia32_fanotify_init 338
+#endif
+#ifndef __NR_ia32_fanotify_mark
+#define __NR_ia32_fanotify_mark 339
+#endif
 #ifndef __NR_ia32_fchdir
 #define __NR_ia32_fchdir 133
 #endif
 #ifndef __NR_ia32_getsid
 #define __NR_ia32_getsid 147
 #endif
+#ifndef __NR_ia32_gettimeofday
+#define __NR_ia32_gettimeofday 78
+#endif
 #ifndef __NR_ia32_inotify_init1
 #define __NR_ia32_inotify_init1 332
 #endif
 #ifndef __NR_ia32_sendmmsg
 #define __NR_ia32_sendmmsg 345
 #endif
+#ifndef __NR_ia32_setdomainname
+#define __NR_ia32_setdomainname 121
+#endif
 #ifndef __NR_ia32_setfsgid32
 #define __NR_ia32_setfsgid32 216
 #endif
 #ifndef __NR_ia32_setreuid32
 #define __NR_ia32_setreuid32 203
 #endif
+#ifndef __NR_ia32_settimeofday
+#define __NR_ia32_settimeofday 79
+#endif
 #ifndef __NR_ia32_setuid32
 #define __NR_ia32_setuid32 213
 #endif
 #ifndef __NR_ia32_socketcall
 #define __NR_ia32_socketcall 102
 #endif
+#ifndef __NR_ia32_stime
+#define __NR_ia32_stime 25
+#endif
 #ifndef __NR_ia32_symlink
 #define __NR_ia32_symlink 83
 #endif
 #ifndef __NR_ia32_symlinkat
 #define __NR_ia32_symlinkat 304
 #endif
+#ifndef __NR_ia32_time
+#define __NR_ia32_time 13
+#endif
 #ifndef __NR_ia32_truncate
 #define __NR_ia32_truncate 92
 #endif
 #define __NR_compat_capset             __NR_ia32_capset
 #define __NR_compat_chdir              __NR_ia32_chdir
 #define __NR_compat_chroot             __NR_ia32_chroot
+#define __NR_compat_clock_adjtime      __NR_ia32_clock_adjtime
+#define __NR_compat_clock_gettime      __NR_ia32_clock_gettime
+#define __NR_compat_clock_getres       __NR_ia32_clock_getres
+#define __NR_compat_clock_nanosleep    __NR_ia32_clock_nanosleep
+#define __NR_compat_clock_settime      __NR_ia32_clock_settime
 #define __NR_compat_clone              __NR_ia32_clone
 #define __NR_compat_close              __NR_ia32_close
 #define __NR_compat_creat              __NR_ia32_creat
 #define __NR_compat_dup2               __NR_ia32_dup2
 #define __NR_compat_dup3               __NR_ia32_dup3
 #define __NR_compat_epoll_wait         __NR_ia32_epoll_wait
+#define __NR_compat_eventfd            __NR_ia32_eventfd
 #define __NR_compat_eventfd2           __NR_ia32_eventfd2
+#define __NR_compat_execve             __NR_ia32_execve
+#define __NR_compat_execveat           __NR_ia32_execveat
 #define __NR_compat_exit               __NR_ia32_exit
 #define __NR_compat_exit_group         __NR_ia32_exit_group
 #define __NR_compat_faccessat          __NR_ia32_faccessat
+#define __NR_compat_fanotify_init      __NR_ia32_fanotify_init
+#define __NR_compat_fanotify_mark      __NR_ia32_fanotify_mark
 #define __NR_compat_fchdir             __NR_ia32_fchdir
 #define __NR_compat_fchmodat           __NR_ia32_fchmodat
 #define __NR_compat_fchownat           __NR_ia32_fchownat
 #define __NR_compat_getpgid            __NR_ia32_getpgid
 #define __NR_compat_getrandom          __NR_ia32_getrandom
 #define __NR_compat_getsid             __NR_ia32_getsid
+#define __NR_compat_gettimeofday       __NR_ia32_gettimeofday
 #define __NR_compat_inotify_init1      __NR_ia32_inotify_init1
 #define __NR_compat_io_cancel          __NR_ia32_io_cancel
 #define __NR_compat_io_destroy         __NR_ia32_io_destroy
 #define __NR_compat_rmdir              __NR_ia32_rmdir
 #define __NR_compat_rt_sigprocmask     __NR_ia32_rt_sigprocmask
 #define __NR_compat_sendmmsg           __NR_ia32_sendmmsg
+#define __NR_compat_setdomainname      __NR_ia32_setdomainname
+#define __NR_compat_settimeofday       __NR_ia32_settimeofday
 #define __NR_compat_shmctl             __NR_ia32_shmctl
 #define __NR_compat_socketcall         __NR_ia32_socketcall
+#define __NR_compat_stime              __NR_ia32_stime
 #define __NR_compat_symlink            __NR_ia32_symlink
 #define __NR_compat_symlinkat          __NR_ia32_symlinkat
+#define __NR_compat_time               __NR_ia32_time
 #define __NR_compat_truncate           __NR_ia32_truncate
 #define __NR_compat_umount2            __NR_ia32_umount2
 #define __NR_compat_wait4              __NR_ia32_wait4
 #define __NR_compat_capset             __NR_capset
 #define __NR_compat_chdir              __NR_chdir
 #define __NR_compat_chroot             __NR_chroot
+#define __NR_compat_clock_adjtime      __NR_clock_adjtime
+#define __NR_compat_clock_gettime      __NR_clock_gettime
+#define __NR_compat_clock_getres       __NR_clock_getres
+#define __NR_compat_clock_nanosleep    __NR_clock_nanosleep
+#define __NR_compat_clock_settime      __NR_clock_settime
 #define __NR_compat_clone              __NR_clone
 #define __NR_compat_close              __NR_close
 #define __NR_compat_creat              __NR_creat
 #define __NR_compat_dup2               __NR_dup2
 #define __NR_compat_dup3               __NR_dup3
 #define __NR_compat_epoll_wait         __NR_epoll_wait
+#define __NR_compat_eventfd            __NR_eventfd
 #define __NR_compat_eventfd2           __NR_eventfd2
+#define __NR_compat_execve             __NR_execve
+#define __NR_compat_execveat           __NR_execveat
 #define __NR_compat_exit               __NR_exit
 #define __NR_compat_exit_group         __NR_exit_group
 #define __NR_compat_faccessat          __NR_faccessat
+#define __NR_compat_fanotify_init      __NR_fanotify_init
+#define __NR_compat_fanotify_mark      __NR_fanotify_mark
 #define __NR_compat_fchdir             __NR_fchdir
 #define __NR_compat_fchmodat           __NR_fchmodat
 #define __NR_compat_fchownat           __NR_fchownat
 #define __NR_compat_getpgid            __NR_getpgid
 #define __NR_compat_getrandom          __NR_getrandom
 #define __NR_compat_getsid             __NR_getsid
+#define __NR_compat_gettimeofday       __NR_gettimeofday
 #define __NR_compat_inotify_init1      __NR_inotify_init1
 #define __NR_compat_io_cancel          __NR_io_cancel
 #define __NR_compat_io_destroy         __NR_io_destroy
 #define __NR_compat_rmdir              __NR_rmdir
 #define __NR_compat_rt_sigprocmask     __NR_rt_sigprocmask
 #define __NR_compat_sendmmsg           __NR_sendmmsg
+#define __NR_compat_setdomainname      __NR_setdomainname
+#define __NR_compat_settimeofday       __NR_settimeofday
 #define __NR_compat_shmctl             __NR_shmctl
 #define __NR_compat_socketcall         __NR_socketcall
+#define __NR_compat_stime              __NR_stime
 #define __NR_compat_symlink            __NR_symlink
 #define __NR_compat_symlinkat          __NR_symlinkat
+#define __NR_compat_time               __NR_time
 #define __NR_compat_truncate           __NR_truncate
 #define __NR_compat_umount2            __NR_umount2
 #define __NR_compat_wait4              __NR_wait4
index dcb6359f67841ef612b525e682e83550f576aa0e..614fb80394233171e6c5c4366270b39d101732ab 100644 (file)
        argstr = sprintf("%s, %s", clk_id_str, tx_uaddr_str)
 %)
 
+@define _SYSCALL_CLOCK_ADJTIME_REGARGS
+%(
+       clk_id = int_arg(1)
+       clk_id_str = _get_wc_str(clk_id)
+       tx_uaddr = pointer_arg(2)
+%)
+
 probe syscall.clock_adjtime = dw_syscall.clock_adjtime !, nd_syscall.clock_adjtime ? {}
 probe syscall.clock_adjtime.return = dw_syscall.clock_adjtime.return !, nd_syscall.clock_adjtime.return ? {}
 
@@ -57,39 +64,95 @@ probe __syscall.clock_adjtime.return =
 
 # nd_clock_adjtime _____________________________________________________
 
-probe nd_syscall.clock_adjtime = __nd_syscall.clock_adjtime ?,
-       __nd_syscall.compat_clock_adjtime ?
+probe nd_syscall.clock_adjtime = nd1_syscall.clock_adjtime!, nd2_syscall.clock_adjtime!, tp_syscall.clock_adjtime
+  { }
+
+probe nd1_syscall.clock_adjtime = __nd1_syscall.clock_adjtime ?,
+       __nd1_syscall.compat_clock_adjtime ?
 {
        @_SYSCALL_CLOCK_ADJTIME_NAME
 }
-probe __nd_syscall.clock_adjtime = kprobe.function("sys_clock_adjtime").call
+probe __nd1_syscall.clock_adjtime = kprobe.function("sys_clock_adjtime").call
 {
        @__syscall_gate_compat_simple
        asmlinkage()
-       clk_id = int_arg(1)
-       clk_id_str = _get_wc_str(clk_id)
-       tx_uaddr = pointer_arg(2)
+       @_SYSCALL_CLOCK_ADJTIME_REGARGS
        tx_uaddr_str = _struct_timex_u(tx_uaddr)
        @_SYSCALL_CLOCK_ADJTIME_ARGSTR
 }
-probe __nd_syscall.compat_clock_adjtime =
+probe __nd1_syscall.compat_clock_adjtime =
        kprobe.function("compat_sys_clock_adjtime").call ?
 {
        asmlinkage()
-       clk_id = int_arg(1)
-       clk_id_str = _get_wc_str(clk_id)
-       tx_uaddr = pointer_arg(2)
+       @_SYSCALL_CLOCK_ADJTIME_REGARGS
+       tx_uaddr_str = _struct_compat_timex_u(tx_uaddr)
+       @_SYSCALL_CLOCK_ADJTIME_ARGSTR
+}
+
+/* kernel 4.17+ */
+probe nd1_syscall.clock_adjtime = __nd2_syscall.clock_adjtime ?,
+       __nd2_syscall.compat_clock_adjtime ?
+{
+       @_SYSCALL_CLOCK_ADJTIME_NAME
+}
+probe __nd2_syscall.clock_adjtime = kprobe.function(@arch_syscall_prefix "sys_clock_adjtime").call
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_CLOCK_ADJTIME_REGARGS
+       tx_uaddr_str = _struct_timex_u(tx_uaddr)
+       @_SYSCALL_CLOCK_ADJTIME_ARGSTR
+}
+probe __nd2_syscall.compat_clock_adjtime =
+       kprobe.function(@arch_syscall_prefix "compat_sys_clock_adjtime").call ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_CLOCK_ADJTIME_REGARGS
        tx_uaddr_str = _struct_compat_timex_u(tx_uaddr)
        @_SYSCALL_CLOCK_ADJTIME_ARGSTR
 }
-probe nd_syscall.clock_adjtime.return = __nd_syscall.clock_adjtime.return ?,
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.clock_adjtime = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_clock_adjtime"), @const("__NR_compat_clock_adjtime"))
+       @_SYSCALL_CLOCK_ADJTIME_NAME
+       @_SYSCALL_CLOCK_ADJTIME_REGARGS
+       if (@__compat_task)
+               tx_uaddr_str = _struct_compat_timex_u(tx_uaddr)
+       else
+               tx_uaddr_str = _struct_timex_u(tx_uaddr)
+       @_SYSCALL_CLOCK_ADJTIME_ARGSTR
+}
+
+probe nd_syscall.clock_adjtime.return = nd1_syscall.clock_adjtime.return!, nd2_syscall.clock_adjtime.return!, tp_syscall.clock_adjtime.return
+  { }
+
+probe nd1_syscall.clock_adjtime.return = __nd1_syscall.clock_adjtime.return ?,
        kprobe.function("compat_sys_clock_adjtime").return ?
 {
        @_SYSCALL_CLOCK_ADJTIME_NAME
        retstr = returnstr(1)
 }
-probe __nd_syscall.clock_adjtime.return =
+probe __nd1_syscall.clock_adjtime.return =
        kprobe.function("sys_clock_adjtime").return
 {
        @__syscall_gate_compat_simple
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.clock_adjtime.return = kprobe.function(@arch_syscall_prefix "sys_clock_adjtime").return ?,
+       kprobe.function(@arch_syscall_prefix "compat_sys_clock_adjtime").return ?
+{
+       @_SYSCALL_CLOCK_ADJTIME_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.clock_adjtime.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_clock_adjtime"), @const("__NR_compat_clock_adjtime"))
+       @_SYSCALL_CLOCK_ADJTIME_NAME
+       retstr = return_str(1,$ret)
+}
index 5e69145374ed43232f507e5d75f1c94bcbb5dd84..c3dd65096d988e49496e681f7d6bc3caf234c619 100644 (file)
        argstr = sprintf("%s, %p", clk_id_str, res_uaddr)
 %)
 
+@define _SYSCALL_CLOCK_GETRES_REGARGS
+%(
+       clk_id = int_arg(1)
+       clk_id_str = _get_wc_str(clk_id)
+       res_uaddr = pointer_arg(2)
+%)
+
 probe syscall.clock_getres = dw_syscall.clock_getres !, nd_syscall.clock_getres ? {}
 probe syscall.clock_getres.return = dw_syscall.clock_getres.return !, nd_syscall.clock_getres.return ? {}
 
@@ -48,31 +55,74 @@ probe __syscall.clock_getres.return =
 
 # nd_clock_getres _____________________________________________________
 
-probe nd_syscall.clock_getres = kprobe.function("compat_clock_getres") ?,
+probe nd_syscall.clock_getres = nd1_syscall.clock_getres!, nd2_syscall.clock_getres!, tp_syscall.clock_getres
+  { }
+
+probe nd1_syscall.clock_getres = kprobe.function("compat_clock_getres") ?,
        kprobe.function("compat_sys_clock_getres") ?,
-       __nd_syscall.clock_getres ?
+       __nd1_syscall.clock_getres ?
 {
        asmlinkage()
        @_SYSCALL_CLOCK_GETRES_NAME
-       clk_id = int_arg(1)
-       clk_id_str = _get_wc_str(clk_id)
-       res_uaddr = pointer_arg(2)
+       @_SYSCALL_CLOCK_GETRES_REGARGS
        @_SYSCALL_CLOCK_GETRES_ARGSTR
 }
-probe __nd_syscall.clock_getres = kprobe.function("sys_clock_getres")
+probe __nd1_syscall.clock_getres = kprobe.function("sys_clock_getres")
 {
        @__syscall_gate(@const("__NR_clock_getres"))
 }
-probe nd_syscall.clock_getres.return =
+
+/* kernel 4.17+ */
+probe nd2_syscall.clock_getres = kprobe.function(@arch_syscall_prefix "compat_sys_clock_getres") ?,
+       kprobe.function(@arch_syscall_prefix "sys_clock_getres") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_CLOCK_GETRES_NAME
+       @_SYSCALL_CLOCK_GETRES_REGARGS
+       @_SYSCALL_CLOCK_GETRES_ARGSTR
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.clock_getres = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_clock_getres"), @const("__NR_compat_clock_getres"))
+       @_SYSCALL_CLOCK_GETRES_NAME
+       @_SYSCALL_CLOCK_GETRES_REGARGS
+       @_SYSCALL_CLOCK_GETRES_ARGSTR
+}
+
+probe nd_syscall.clock_getres.return = nd1_syscall.clock_getres.return!, nd2_syscall.clock_getres.return!, tp_syscall.clock_getres.return
+  { }
+
+probe nd1_syscall.clock_getres.return =
        kprobe.function("compat_clock_getres").return ?,
        kprobe.function("compat_sys_clock_getres").return ?,
-       __nd_syscall.clock_getres.return ?
+       __nd1_syscall.clock_getres.return ?
 {
        @_SYSCALL_CLOCK_GETRES_NAME
        retstr = returnstr(1)
 }
-probe __nd_syscall.clock_getres.return =
+probe __nd1_syscall.clock_getres.return =
        kprobe.function("sys_clock_getres").return
 {
        @__syscall_gate(@const("__NR_clock_getres"))
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.clock_getres.return = 
+       kprobe.function(@arch_syscall_prefix "compat_sys_clock_getres").return ?,
+       kprobe.function(@arch_syscall_prefix "sys_clock_getres").return ?
+{
+       @_SYSCALL_CLOCK_GETRES_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.clock_getres.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_clock_getres"), @const("__NR_compat_clock_getres"))
+       @_SYSCALL_CLOCK_GETRES_NAME
+       retstr = return_str(1,$ret)
+}
index 7d92e657b4751cba7b0fa85da94b71449c5d7e0a..d1ca2a9e1aa177b5eec90e454c82d4da00efd634 100644 (file)
        argstr = sprintf("%s, %p", clk_id_str, tp_uaddr)
 %)
 
+@define _SYSCALL_CLOCK_GETTIME_REGARGS
+%(
+       clk_id = int_arg(1)
+       clk_id_str = _get_wc_str(clk_id)
+       tp_uaddr = pointer_arg(2)
+%)
+
 probe syscall.clock_gettime = dw_syscall.clock_gettime !, nd_syscall.clock_gettime ? {}
 probe syscall.clock_gettime.return = dw_syscall.clock_gettime.return !, nd_syscall.clock_gettime.return ? {}
 
@@ -44,28 +51,70 @@ probe __syscall.clock_gettime.return =
 
 # nd_clock_gettime _____________________________________________________
 
-probe nd_syscall.clock_gettime = __nd_syscall.clock_gettime,
+probe nd_syscall.clock_gettime = nd1_syscall.clock_gettime!, nd2_syscall.clock_gettime!, tp_syscall.clock_gettime
+  { }
+
+probe nd1_syscall.clock_gettime = __nd1_syscall.clock_gettime,
        kprobe.function("compat_sys_clock_gettime") ?
 {
        @_SYSCALL_CLOCK_GETTIME_NAME
        asmlinkage()
-       clk_id = int_arg(1)
-       clk_id_str = _get_wc_str(clk_id)
-       tp_uaddr = pointer_arg(2)
+       @_SYSCALL_CLOCK_GETTIME_REGARGS
        @_SYSCALL_CLOCK_GETTIME_ARGSTR
 }
-probe __nd_syscall.clock_gettime = kprobe.function("sys_clock_gettime").call
+probe __nd1_syscall.clock_gettime = kprobe.function("sys_clock_gettime").call
 {
        @__syscall_gate(@const("__NR_clock_gettime"))
 }
-probe nd_syscall.clock_gettime.return = __nd_syscall.clock_gettime.return,
+
+/* kernel 4.17+ */
+probe nd2_syscall.clock_gettime = kprobe.function(@arch_syscall_prefix "sys_clock_gettime") ?,
+       kprobe.function(@arch_syscall_prefix "compat_sys_clock_gettime") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_CLOCK_GETTIME_NAME
+       @_SYSCALL_CLOCK_GETTIME_REGARGS
+       @_SYSCALL_CLOCK_GETTIME_ARGSTR
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.clock_gettime = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_clock_gettime"), @const("__NR_compat_clock_gettime"))
+       @_SYSCALL_CLOCK_GETTIME_NAME
+       @_SYSCALL_CLOCK_GETTIME_REGARGS
+       @_SYSCALL_CLOCK_GETTIME_ARGSTR
+}
+
+probe nd_syscall.clock_gettime.return = nd1_syscall.clock_gettime.return!, nd2_syscall.clock_gettime.return!, tp_syscall.clock_gettime.return
+  { }
+
+probe nd1_syscall.clock_gettime.return = __nd1_syscall.clock_gettime.return,
        kprobe.function("compat_sys_clock_gettime").return ?
 {
        @_SYSCALL_CLOCK_GETTIME_NAME
        retstr = returnstr(1)
 }
-probe __nd_syscall.clock_gettime.return =
+probe __nd1_syscall.clock_gettime.return =
        kprobe.function("sys_clock_gettime").return
 {
        @__syscall_gate(@const("__NR_clock_gettime"))
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.clock_gettime.return = kprobe.function(@arch_syscall_prefix "sys_clock_gettime").return ?,
+       kprobe.function(@arch_syscall_prefix "compat_sys_clock_gettime").return ?
+{
+       @_SYSCALL_CLOCK_GETTIME_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.clock_gettime.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_clock_gettime"), @const("__NR_compat_clock_gettime"))
+       @_SYSCALL_CLOCK_GETTIME_NAME
+       retstr = return_str(1,$ret)
+}
index 1b1ff0b62649186bf89e1462937b6f5daf7c9caa..de9630a81580aa0903a43b040d4907a6804f11d3 100644 (file)
                         req_str, rem_uaddr)
 %)
 
+@define _SYSCALL_CLOCK_NANOSLEEP_REGARGS
+%(
+       clk_id = int_arg(1)
+       clk_id_str = _get_wc_str(clk_id)
+       flags = int_arg(2)
+%(systemtap_v <= "2.6" %?
+       flag_str = _stp_clock_nanosleep_flags_str(flags)
+%)
+       flags_str = _stp_clock_nanosleep_flags_str(flags)
+       req_uaddr = pointer_arg(3)
+       rem_uaddr = pointer_arg(4)
+%)
+
 probe syscall.clock_nanosleep = dw_syscall.clock_nanosleep !, nd_syscall.clock_nanosleep {}
 probe syscall.clock_nanosleep.return = dw_syscall.clock_nanosleep.return !, nd_syscall.clock_nanosleep.return {}
 
@@ -47,24 +60,44 @@ probe dw_syscall.clock_nanosleep.return =
 
 # nd_clock_nanosleep _____________________________________________________
 
-probe nd_syscall.clock_nanosleep = kprobe.function("sys_clock_nanosleep").call
+probe nd_syscall.clock_nanosleep = nd1_syscall.clock_nanosleep!, nd2_syscall.clock_nanosleep!, tp_syscall.clock_nanosleep
+  { }
+
+probe nd1_syscall.clock_nanosleep = kprobe.function("sys_clock_nanosleep").call
 {
        @__syscall_gate(@const("__NR_clock_nanosleep"))
        @_SYSCALL_CLOCK_NANOSLEEP_NAME
        asmlinkage()
-       clk_id = int_arg(1)
-       clk_id_str = _get_wc_str(clk_id)
-       flags = int_arg(2)
-%(systemtap_v <= "2.6" %?
-       flag_str = _stp_clock_nanosleep_flags_str(flags)
-%)
-       flags_str = _stp_clock_nanosleep_flags_str(flags)
-       req_uaddr = pointer_arg(3)
+       @_SYSCALL_CLOCK_NANOSLEEP_REGARGS
+       req_str = _struct_timespec_u(req_uaddr, 1)
+       @_SYSCALL_CLOCK_NANOSLEEP_ARGSTR
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.clock_nanosleep = kprobe.function(@arch_syscall_prefix "sys_clock_nanosleep").call
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_CLOCK_NANOSLEEP_NAME
+       @_SYSCALL_CLOCK_NANOSLEEP_REGARGS
        req_str = _struct_timespec_u(req_uaddr, 1)
-       rem_uaddr = pointer_arg(4)
        @_SYSCALL_CLOCK_NANOSLEEP_ARGSTR
 }
-probe nd_syscall.clock_nanosleep.return =
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.clock_nanosleep = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_gate(@const("__NR_clock_nanosleep"))
+       @_SYSCALL_CLOCK_NANOSLEEP_NAME
+       @_SYSCALL_CLOCK_NANOSLEEP_REGARGS
+       req_str = _struct_timespec_u(req_uaddr, 1)
+       @_SYSCALL_CLOCK_NANOSLEEP_ARGSTR
+}
+
+probe nd_syscall.clock_nanosleep.return = nd1_syscall.clock_nanosleep.return!, nd2_syscall.clock_nanosleep.return!, tp_syscall.clock_nanosleep.return
+  { }
+
+probe nd1_syscall.clock_nanosleep.return =
        kprobe.function("sys_clock_nanosleep").return ?
 {
        @__syscall_gate(@const("__NR_clock_nanosleep"))
@@ -72,6 +105,23 @@ probe nd_syscall.clock_nanosleep.return =
        retstr = returnstr(1)
 }
 
+/* kernel 4.17+ */
+probe nd2_syscall.clock_nanosleep.return =
+       kprobe.function(@arch_syscall_prefix "sys_clock_nanosleep").return ?
+{
+       @_SYSCALL_CLOCK_NANOSLEEP_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.clock_nanosleep.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_gate(@const("__NR_clock_nanosleep"))
+       @_SYSCALL_CLOCK_NANOSLEEP_NAME
+       retstr = return_str(1,$ret)
+}
+
 # compat_clock_nanosleep ________________________________________
 #
 # long compat_clock_nanosleep(clockid_t which_clock, int flags,
@@ -113,28 +163,66 @@ probe dw_syscall.compat_clock_nanosleep.return =
 
 # nd_compat_clock_nanosleep _____________________________________________________
 
-probe nd_syscall.compat_clock_nanosleep =
+probe nd_syscall.compat_clock_nanosleep = nd1_syscall.compat_clock_nanosleep!, nd2_syscall.compat_clock_nanosleep!, tp_syscall.compat_clock_nanosleep
+  { }
+
+probe nd1_syscall.compat_clock_nanosleep =
        kprobe.function("compat_clock_nanosleep").call ?,
        kprobe.function("compat_sys_clock_nanosleep").call ?
 {
        @_SYSCALL_CLOCK_NANOSLEEP_NAME
        asmlinkage()
-       clk_id = int_arg(1)
-       clk_id_str = _get_wc_str(clk_id)
-       flags = int_arg(2)
-%(systemtap_v <= "2.6" %?
-       flag_str = _stp_clock_nanosleep_flags_str(flags)
-%)
-       flags_str = _stp_clock_nanosleep_flags_str(flags)
-       req_uaddr = pointer_arg(3)
+       @_SYSCALL_CLOCK_NANOSLEEP_REGARGS
+       req_str = _struct_compat_timespec_u(req_uaddr, 1)
+       @_SYSCALL_CLOCK_NANOSLEEP_ARGSTR
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.compat_clock_nanosleep =
+       kprobe.function(@arch_syscall_prefix "compat_sys_clock_nanosleep") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_CLOCK_NANOSLEEP_NAME
+       @_SYSCALL_CLOCK_NANOSLEEP_REGARGS
        req_str = _struct_compat_timespec_u(req_uaddr, 1)
-       rem_uaddr = pointer_arg(4)
        @_SYSCALL_CLOCK_NANOSLEEP_ARGSTR
 }
-probe nd_syscall.compat_clock_nanosleep.return =
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.compat_clock_nanosleep = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__compat_syscall_gate(@const("__NR_compat_clock_nanosleep"))
+       @_SYSCALL_CLOCK_NANOSLEEP_NAME
+       @_SYSCALL_CLOCK_NANOSLEEP_REGARGS
+       req_str = _struct_compat_timespec_u(req_uaddr, 1)
+       @_SYSCALL_CLOCK_NANOSLEEP_ARGSTR
+}
+
+probe nd_syscall.compat_clock_nanosleep.return = nd1_syscall.compat_clock_nanosleep.return!, nd2_syscall.compat_clock_nanosleep.return!, tp_syscall.compat_clock_nanosleep.return
+  { }
+  
+probe nd1_syscall.compat_clock_nanosleep.return =
        kprobe.function("compat_clock_nanosleep").return ?,
        kprobe.function("compat_sys_clock_nanosleep").return ?
 {
        @_SYSCALL_CLOCK_NANOSLEEP_NAME
        retstr = returnstr(1)
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.compat_clock_nanosleep.return = 
+       kprobe.function(@arch_syscall_prefix "compat_sys_clock_nanosleep").return ?
+{
+       @_SYSCALL_CLOCK_NANOSLEEP_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.compat_clock_nanosleep.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__compat_syscall_gate(@const("__NR_compat_clock_nanosleep"))
+       @_SYSCALL_CLOCK_NANOSLEEP_NAME
+       retstr = return_str(1,$ret)
+}
index 11fd29ad53bbc6135c33313941ba73e9e9c1322d..83f1ebb74a43745b3054173825f315aac69bc3f2 100644 (file)
        argstr = sprintf("%s, %s", clk_id_str, tp_uaddr_str)
 %)
 
+@define _SYSCALL_CLOCK_SETTIME_REGARGS
+%(
+       clk_id = int_arg(1)
+       clk_id_str = _get_wc_str(clk_id)
+       tp_uaddr = pointer_arg(2)
+%)
+
 probe syscall.clock_settime = dw_syscall.clock_settime !, nd_syscall.clock_settime ? {}
 probe syscall.clock_settime.return = dw_syscall.clock_settime.return !, nd_syscall.clock_settime.return ? {}
 
@@ -62,44 +69,100 @@ probe __syscall.compat_clock_settime.return =
 
 # nd_clock_settime _____________________________________________________
 
-probe nd_syscall.clock_settime = __nd_syscall.clock_settime,
-       __nd_syscall.compat_clock_settime ?
+probe nd_syscall.clock_settime = nd1_syscall.clock_settime!, nd2_syscall.clock_settime!, tp_syscall.clock_settime
+  { }
+
+probe nd1_syscall.clock_settime = __nd1_syscall.clock_settime,
+       __nd1_syscall.compat_clock_settime ?
 {
        @_SYSCALL_CLOCK_SETTIME_NAME
 }
-probe __nd_syscall.clock_settime = kprobe.function("sys_clock_settime").call
+probe __nd1_syscall.clock_settime = kprobe.function("sys_clock_settime").call
 {
        @__syscall_gate(@const("__NR_clock_settime"))
        asmlinkage()
-       clk_id = int_arg(1)
-       clk_id_str = _get_wc_str(clk_id)
-       tp_uaddr = pointer_arg(2)
+       @_SYSCALL_CLOCK_SETTIME_REGARGS
        tp_uaddr_str = _struct_timespec_u(tp_uaddr, 1)
        @_SYSCALL_CLOCK_SETTIME_ARGSTR
 }
-probe __nd_syscall.compat_clock_settime =
+probe __nd1_syscall.compat_clock_settime =
        kprobe.function("compat_sys_clock_settime").call ?
 {
        asmlinkage()
-       clk_id = int_arg(1)
-       clk_id_str = _get_wc_str(clk_id)
-       tp_uaddr = pointer_arg(2)
+       @_SYSCALL_CLOCK_SETTIME_REGARGS
+       tp_uaddr_str = _struct_compat_timespec_u(tp_uaddr, 1)
+       @_SYSCALL_CLOCK_SETTIME_ARGSTR
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.clock_settime = __nd2_syscall.clock_settime,
+       __nd2_syscall.compat_clock_settime ?
+{
+       @_SYSCALL_CLOCK_SETTIME_NAME
+}
+probe __nd2_syscall.clock_settime = kprobe.function(@arch_syscall_prefix "sys_clock_settime").call
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_CLOCK_SETTIME_REGARGS
+       tp_uaddr_str = _struct_timespec_u(tp_uaddr, 1)
+       @_SYSCALL_CLOCK_SETTIME_ARGSTR
+}
+probe __nd2_syscall.compat_clock_settime =
+       kprobe.function(@arch_syscall_prefix "compat_sys_clock_settime").call ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_CLOCK_SETTIME_REGARGS
        tp_uaddr_str = _struct_compat_timespec_u(tp_uaddr, 1)
        @_SYSCALL_CLOCK_SETTIME_ARGSTR
 }
-probe nd_syscall.clock_settime.return = __nd_syscall.clock_settime.return,
-       __nd_syscall.compat_clock_settime.return ?
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.clock_settime = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_clock_settime"), @const("__NR_compat_clock_settime"))
+       @_SYSCALL_CLOCK_SETTIME_NAME
+       @_SYSCALL_CLOCK_SETTIME_REGARGS
+       if (@__compat_task)
+               tp_uaddr_str = _struct_compat_timespec_u(tp_uaddr, 1)
+       else
+               tp_uaddr_str = _struct_timespec_u(tp_uaddr, 1)
+       @_SYSCALL_CLOCK_SETTIME_ARGSTR
+}
+
+probe nd_syscall.clock_settime.return = nd1_syscall.clock_settime.return!, nd2_syscall.clock_settime.return!, tp_syscall.clock_settime.return
+  { }
+
+probe nd1_syscall.clock_settime.return = __nd1_syscall.clock_settime.return,
+       __nd1_syscall.compat_clock_settime.return ?
 {
        @_SYSCALL_CLOCK_SETTIME_NAME
 }
-probe __nd_syscall.clock_settime.return =
+probe __nd1_syscall.clock_settime.return =
        kprobe.function("sys_clock_settime").return
 {
        @__syscall_gate(@const("__NR_clock_settime"))
        retstr = returnstr(1)
 }
-probe __nd_syscall.compat_clock_settime.return =
+probe __nd1_syscall.compat_clock_settime.return =
        kprobe.function("compat_sys_clock_settime").return ?
 {
        retstr = returnstr(1)
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.clock_settime.return = kprobe.function(@arch_syscall_prefix "sys_clock_settime").return ?,
+       kprobe.function(@arch_syscall_prefix "compat_sys_clock_settime").return ?
+{
+       @_SYSCALL_CLOCK_SETTIME_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.clock_settime.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_clock_settime"), @const("__NR_compat_clock_settime"))
+       @_SYSCALL_CLOCK_SETTIME_NAME
+       retstr = return_str(1,$ret)
+}
index d24b326504eaf014c6c4954427bfcff5bdb78b64..779eed75288b6f4d85ee5527c3b53ef985912318 100644 (file)
@@ -44,10 +44,13 @@ probe __syscall.eventfd.return = kernel.function("sys_eventfd").return
 
 # nd_eventfd _____________________________________________________
 
-probe nd_syscall.eventfd = __nd_syscall.eventfd2 ?, __nd_syscall.eventfd ?
+probe nd_syscall.eventfd = nd1_syscall.eventfd!, nd2_syscall.eventfd!, tp_syscall.eventfd
+  { }
+
+probe nd1_syscall.eventfd = __nd1_syscall.eventfd2 ?, __nd1_syscall.eventfd ?
 {
 }
-probe __nd_syscall.eventfd2 = kprobe.function("sys_eventfd2")
+probe __nd1_syscall.eventfd2 = kprobe.function("sys_eventfd2")
 {
        @__syscall_compat_gate(@const("__NR_eventfd2"), @const("__NR_compat_eventfd2"))
        name = "eventfd2"
@@ -57,7 +60,7 @@ probe __nd_syscall.eventfd2 = kprobe.function("sys_eventfd2")
        flags_str = _eventfd2_flag_str(flags)
        argstr = sprintf("%u, %s", count, flags_str)
 }
-probe __nd_syscall.eventfd = kprobe.function("sys_eventfd")
+probe __nd1_syscall.eventfd = kprobe.function("sys_eventfd")
 {
        name = "eventfd"
        asmlinkage()
@@ -66,17 +69,102 @@ probe __nd_syscall.eventfd = kprobe.function("sys_eventfd")
        flags_str = "0x0"
        argstr = sprint(count)
 }
-probe nd_syscall.eventfd.return = __nd_syscall.eventfd2.return ?,
-                                  __nd_syscall.eventfd.return ?
+
+/* kernel 4.17+ */
+probe nd2_syscall.eventfd = __nd2_syscall.eventfd2 ?, __nd2_syscall.eventfd ?
+{
+}
+probe __nd2_syscall.eventfd2 = kprobe.function(@arch_syscall_prefix "sys_eventfd2") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       name = "eventfd2"
+       count = uint_arg(1)
+       flags = int_arg(2)
+       flags_str = _eventfd2_flag_str(flags)
+       argstr = sprintf("%u, %s", count, flags_str)
+}
+probe __nd2_syscall.eventfd = kprobe.function(@arch_syscall_prefix "sys_eventfd")
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       name = "eventfd"
+       count = uint_arg(1)
+       flags = 0
+       flags_str = "0x0"
+       argstr = sprint(count)
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.eventfd = __tp_syscall.eventfd2 ?, __tp_syscall.eventfd ?
+{
+}
+probe __tp_syscall.eventfd2 = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_eventfd2"), @const("__NR_compat_eventfd2"))
+       name = "eventfd2"
+       count = uint_arg(1)
+       flags = int_arg(2)
+       flags_str = _eventfd2_flag_str(flags)
+       argstr = sprintf("%u, %s", count, flags_str)
+}
+probe __tp_syscall.eventfd = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_eventfd"), @const("__NR_compat_eventfd"))
+       name = "eventfd"
+       count = uint_arg(1)
+       flags = 0
+       flags_str = "0x0"
+       argstr = sprint(count)
+}
+probe nd_syscall.eventfd.return = nd1_syscall.eventfd.return!, nd2_syscall.eventfd.return!, tp_syscall.eventfd.return
+  { }
+  
+probe nd1_syscall.eventfd.return = __nd1_syscall.eventfd2.return ?,
+                                  __nd1_syscall.eventfd.return ?
 {
        retstr = returnstr(1)
 }
-probe __nd_syscall.eventfd2.return = kprobe.function("sys_eventfd2").return
+probe __nd1_syscall.eventfd2.return = kprobe.function("sys_eventfd2").return
+{
+       @__syscall_compat_gate(@const("__NR_eventfd2"), @const("__NR_compat_eventfd2"))
+       name = "eventfd2"
+}
+probe __nd1_syscall.eventfd.return = kprobe.function("sys_eventfd").return
+{
+       name = "eventfd"
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.eventfd.return = __nd2_syscall.eventfd2.return ?,
+                                  __nd2_syscall.eventfd.return ?
+{
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+probe __nd2_syscall.eventfd2.return = kprobe.function(@arch_syscall_prefix "sys_eventfd2").return
+{
+       name = "eventfd2"
+}
+probe __nd2_syscall.eventfd.return = kprobe.function(@arch_syscall_prefix "sys_eventfd").return
+{
+       name = "eventfd"
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.eventfd.return = __tp_syscall.eventfd2.return ?,
+                                  __tp_syscall.eventfd.return ?
+{
+       __set_syscall_pt_regs($regs)
+       retstr = return_str(1,$ret)
+}
+probe __tp_syscall.eventfd2.return = kernel.trace("sys_exit")
 {
        @__syscall_compat_gate(@const("__NR_eventfd2"), @const("__NR_compat_eventfd2"))
        name = "eventfd2"
 }
-probe __nd_syscall.eventfd.return = kprobe.function("sys_eventfd").return
+probe __tp_syscall.eventfd.return = kernel.trace("sys_exit")
 {
+       @__syscall_compat_gate(@const("__NR_eventfd"), @const("__NR_compat_eventfd"))
        name = "eventfd"
 }
index fbe8e2575b7f44d6269e7e42896908939683dffc..b25c91b9d041260713ea2a980e2e62186c192684 100644 (file)
        argstr = sprintf("%s, %s, %s", filename, args, env_str)
 %)
 
+@define _SYSCALL_EXECVE_REGARGS
+%(
+       filename = user_string_quoted(pointer_arg(1))
+       args = __get_argv(pointer_arg(2), 0)
+       env_str = __get_argv(pointer_arg(3), 0)
+%)
+
+@define _SYSCALL_COMPAT_EXECVE_REGARGS
+%(
+       filename = user_string_quoted(pointer_arg(1))
+       args = __get_compat_argv(pointer_arg(2), 0)
+       env_str = __get_compat_argv(pointer_arg(3), 0)
+%)
+
 probe syscall.execve = dw_syscall.execve !, nd_syscall.execve {}
 probe syscall.execve.return = dw_syscall.execve.return !,
                               nd_syscall.execve.return {}
@@ -75,21 +89,61 @@ probe dw_syscall.compat_execve.return =
 
 # nd_execve _____________________________________________________
 
-probe nd_syscall.execve = kprobe.function("sys_execve")
+probe nd_syscall.execve = nd1_syscall.execve!, nd2_syscall.execve!, tp_syscall.execve
+  { }
+
+probe nd1_syscall.execve = kprobe.function("sys_execve")
 {
        @_SYSCALL_EXECVE_NAME
        asmlinkage()
-       filename = user_string_quoted(pointer_arg(1))
-       args = __get_argv(pointer_arg(2), 0)
-       env_str = __get_argv(pointer_arg(3), 0)
+       @_SYSCALL_EXECVE_REGARGS
+       @_SYSCALL_EXECVE_ARGSTR
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.execve = kprobe.function(@arch_syscall_prefix "sys_execve") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_EXECVE_NAME
+       @_SYSCALL_EXECVE_REGARGS
+       @_SYSCALL_EXECVE_ARGSTR
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.execve = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_gate(@const("__NR_execve"))
+       @_SYSCALL_EXECVE_NAME
+       @_SYSCALL_EXECVE_REGARGS
        @_SYSCALL_EXECVE_ARGSTR
 }
-probe nd_syscall.execve.return = kprobe.function("sys_execve").return
+
+probe nd_syscall.execve.return = nd1_syscall.execve.return!, nd2_syscall.execve.return!, tp_syscall.execve.return
+  { }
+  
+probe nd1_syscall.execve.return = kprobe.function("sys_execve").return
 {
        @_SYSCALL_EXECVE_NAME
        retstr = returnstr(1)
 }
 
+/* kernel 4.17+ */
+probe nd2_syscall.execve.return = kprobe.function(@arch_syscall_prefix "sys_execve").return ?
+{
+       @_SYSCALL_EXECVE_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.execve.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_gate(@const("__NR_execve"))
+       @_SYSCALL_EXECVE_NAME
+       retstr = return_str(1,$ret)
+}
+
 # In kernels >= 3.7, compat_sys_execve() has been moved to generic
 # code, so we can use it with confidence. For kernels < 3.7,
 # compat_execve support is in arch-specific tapset code.
@@ -97,19 +151,60 @@ probe nd_syscall.execve.return = kprobe.function("sys_execve").return
 # asmlinkage long compat_sys_execve(const char __user * filename,
 #      const compat_uptr_t __user * argv,
 #      const compat_uptr_t __user * envp)
-probe nd_syscall.compat_execve = kprobe.function("compat_sys_execve").call ?
+
+probe nd_syscall.compat_execve = nd1_syscall.compat_execve!, nd2_syscall.compat_execve!, tp_syscall.compat_execve
+  { }
+
+probe nd1_syscall.compat_execve = kprobe.function("compat_sys_execve").call ?
 {
        @_SYSCALL_EXECVE_NAME
        asmlinkage()
-       filename = user_string_quoted(pointer_arg(1))
-       args = __get_compat_argv(pointer_arg(2), 0)
-       env_str = __get_compat_argv(pointer_arg(3), 0)
+       @_SYSCALL_COMPAT_EXECVE_REGARGS
+       @_SYSCALL_EXECVE_ARGSTR
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.compat_execve = kprobe.function(@arch_syscall_prefix "compat_sys_execve") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_EXECVE_NAME
+       @_SYSCALL_COMPAT_EXECVE_REGARGS
        @_SYSCALL_EXECVE_ARGSTR
 }
-probe nd_syscall.compat_execve.return =
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.compat_execve = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__compat_syscall_gate(@const("__NR_compat_execve"))
+       @_SYSCALL_EXECVE_NAME
+       @_SYSCALL_COMPAT_EXECVE_REGARGS
+       @_SYSCALL_EXECVE_ARGSTR
+}
+
+probe nd_syscall.compat_execve.return = nd1_syscall.compat_execve.return!, nd2_syscall.compat_execve.return!, tp_syscall.compat_execve.return
+  { }
+  
+probe nd1_syscall.compat_execve.return =
        kprobe.function("compat_sys_execve").return ?
 {
        @_SYSCALL_EXECVE_NAME
        retstr = returnstr(1)
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.compat_execve.return = kprobe.function(@arch_syscall_prefix "compat_sys_execve").return ?
+{
+       @_SYSCALL_EXECVE_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.compat_execve.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__compat_syscall_gate(@const("__NR_compat_execve"))
+       @_SYSCALL_EXECVE_NAME
+       retstr = return_str(1,$ret)
+}
 %)
index e75d043b5b60607a4d112f75d7e23dea95cee165..d216f60f9de168c8248211b4910c55b3b108b50b 100644 (file)
                         env_str, flags_str)
 %)
 
+@define _SYSCALL_EXECVEAT_REGARGS
+%(
+       dirfd = int_arg(1)
+       dirfd_str = _dfd_str(dirfd)
+%(systemtap_v <= "2.8" %?
+       # All other "at" syscalls (faccessat, fchmodat, fchownat,
+       # etc.) name their file descriptor argument 'dirfd', so let's
+       # do the same.
+        fd = dirfd
+        fd_str = dirfd_str
+%)
+       filename = user_string_quoted(pointer_arg(2))
+       args = __get_argv(pointer_arg(3), 0)
+       env_str = __get_argv(pointer_arg(4), 0)
+       flags = int_arg(5)
+       flags_str = _at_flag_str(flags)
+%)
+
+@define _SYSCALL_COMPAT_EXECVEAT_REGARGS
+%(
+       dirfd = int_arg(1)
+       dirfd_str = _dfd_str(dirfd)
+%(systemtap_v <= "2.8" %?
+       # All other "at" syscalls (faccessat, fchmodat, fchownat,
+       # etc.) name their file descriptor argument 'dirfd', so let's
+       # do the same.
+        fd = dirfd
+        fd_str = dirfd_str
+%)
+       filename = user_string_quoted(pointer_arg(2))
+       args = __get_compat_argv(pointer_arg(3), 0)
+       env_str = __get_compat_argv(pointer_arg(4), 0)
+       flags = int_arg(5)
+       flags_str = _at_flag_str(flags)
+%)
+
 probe syscall.execveat = dw_syscall.execveat !, nd_syscall.execveat ? {}
 probe syscall.execveat.return = dw_syscall.execveat.return !,
                                 nd_syscall.execveat.return ? {}
@@ -85,55 +121,113 @@ probe dw_syscall.compat_execveat.return =
 
 # nd_execveat _____________________________________________________
 
-probe nd_syscall.execveat = kprobe.function("sys_execveat").call ?
+probe nd_syscall.execveat = nd1_syscall.execveat!, nd2_syscall.execveat!, tp_syscall.execveat
+  { }
+
+probe nd1_syscall.execveat = kprobe.function("sys_execveat").call ?
 {
        asmlinkage()
        @_SYSCALL_EXECVEAT_NAME
-       dirfd = int_arg(1)
-       dirfd_str = _dfd_str(dirfd)
-%(systemtap_v <= "2.8" %?
-       # All other "at" syscalls (faccessat, fchmodat, fchownat,
-       # etc.) name their file descriptor argument 'dirfd', so let's
-       # do the same.
-        fd = dirfd
-        fd_str = dirfd_str
-%)
-       filename = user_string_quoted(pointer_arg(2))
-       args = __get_argv(pointer_arg(3), 0)
-       env_str = __get_argv(pointer_arg(4), 0)
-       flags = int_arg(5)
-       flags_str = _at_flag_str(flags)
+       @_SYSCALL_EXECVEAT_REGARGS
+       @_SYSCALL_EXECVEAT_ARGSTR
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.execveat = kprobe.function(@arch_syscall_prefix "sys_execveat") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_EXECVEAT_NAME
+       @_SYSCALL_EXECVEAT_REGARGS
        @_SYSCALL_EXECVEAT_ARGSTR
 }
-probe nd_syscall.execveat.return = kprobe.function("sys_execveat").return ?
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.execveat = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_gate(@const("__NR_execveat"))
+       @_SYSCALL_EXECVEAT_NAME
+       @_SYSCALL_EXECVEAT_REGARGS
+       @_SYSCALL_EXECVEAT_ARGSTR
+}
+
+probe nd_syscall.execveat.return = nd1_syscall.execveat.return!, nd2_syscall.execveat.return!, tp_syscall.execveat.return
+  { }
+  
+probe nd1_syscall.execveat.return = kprobe.function("sys_execveat").return ?
 {
        @_SYSCALL_EXECVEAT_NAME
        retstr = returnstr(1)
 }
 
-probe nd_syscall.compat_execveat = kprobe.function("compat_sys_execveat").call ?
+/* kernel 4.17+ */
+probe nd2_syscall.execveat.return = kprobe.function(@arch_syscall_prefix "sys_execveat").return ?
 {
        @_SYSCALL_EXECVEAT_NAME
-       dirfd = int_arg(1)
-       dirfd_str = _dfd_str(dirfd)
-%(systemtap_v <= "2.8" %?
-       # All other "at" syscalls (faccessat, fchmodat, fchownat,
-       # etc.) name their file descriptor argument 'dirfd', so let's
-       # do the same.
-        fd = dirfd
-        fd_str = dirfd_str
-%)
-       filename = user_string_quoted(pointer_arg(2))
-       args = __get_compat_argv(pointer_arg(3), 0)
-       env_str = __get_compat_argv(pointer_arg(4), 0)
-       flags = int_arg(5)
-       flags_str = _at_flag_str(flags)
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.execveat.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_gate(@const("__NR_execveat"))
+       @_SYSCALL_EXECVEAT_NAME
+       retstr = return_str(1,$ret)
+}
+
+probe nd_syscall.compat_execveat = nd1_syscall.compat_execveat!, nd2_syscall.compat_execveat!, tp_syscall.compat_execveat
+  { }
+
+probe nd1_syscall.compat_execveat = kprobe.function("compat_sys_execveat").call ?
+{
+       @_SYSCALL_EXECVEAT_NAME
+       @_SYSCALL_COMPAT_EXECVEAT_REGARGS
        @_SYSCALL_EXECVEAT_ARGSTR
 
 }
-probe nd_syscall.compat_execveat.return =
+
+/* kernel 4.17+ */
+probe nd2_syscall.compat_execveat = kprobe.function(@arch_syscall_prefix "compat_sys_execveat") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_EXECVEAT_NAME
+       @_SYSCALL_COMPAT_EXECVEAT_REGARGS
+       @_SYSCALL_EXECVEAT_ARGSTR
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.compat_execveat = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__compat_syscall_gate(@const("__NR_compat_execveat"))
+       @_SYSCALL_EXECVEAT_NAME
+       @_SYSCALL_COMPAT_EXECVEAT_REGARGS
+       @_SYSCALL_EXECVEAT_ARGSTR
+}
+
+probe nd_syscall.compat_execveat.return = nd1_syscall.compat_execveat.return!, nd2_syscall.compat_execveat.return!, tp_syscall.compat_execveat.return
+  { }
+  
+probe nd1_syscall.compat_execveat.return =
        kprobe.function("compat_sys_execveat").return ?
 {
        @_SYSCALL_EXECVEAT_NAME
        retstr = returnstr(1)
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.compat_execveat.return = kprobe.function(@arch_syscall_prefix "compat_sys_execveat").return ?
+{
+       @_SYSCALL_EXECVEAT_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.compat_execveat.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__compat_syscall_gate(@const("__NR_compat_execveat"))
+       @_SYSCALL_EXECVEAT_NAME
+       retstr = return_str(1,$ret)
+}
index 93a96d5695d57f543258e4091509c152cacb99d3..0c694f053a39eaa19bc86c2c6184994430254a5d 100644 (file)
        argstr = sprintf("%s, %s", flags_str, event_f_flags_str)
 %)
 
+@define _SYSCALL_FANOTIFY_INIT_REGARGS
+%(
+       flags = uint_arg(1)
+       flags_str = _fanotify_init_flags_str(flags)
+       event_f_flags = uint_arg(2)
+       event_f_flags_str = _sys_open_flag_str(event_f_flags)
+%)
+
 probe syscall.fanotify_init = dw_syscall.fanotify_init !, nd_syscall.fanotify_init ? {}
 probe syscall.fanotify_init.return = dw_syscall.fanotify_init.return !, nd_syscall.fanotify_init.return ? {}
 
@@ -36,19 +44,58 @@ probe dw_syscall.fanotify_init.return =
 
 # nd_fanotify_init _____________________________________________________
 
-probe nd_syscall.fanotify_init = kprobe.function("sys_fanotify_init") ?
+probe nd_syscall.fanotify_init = nd1_syscall.fanotify_init!, nd2_syscall.fanotify_init!, tp_syscall.fanotify_init
+  { }
+
+probe nd1_syscall.fanotify_init = kprobe.function("sys_fanotify_init") ?
 {
        @_SYSCALL_FANOTIFY_INIT_NAME
        asmlinkage()
-       flags = uint_arg(1)
-       flags_str = _fanotify_init_flags_str(flags)
-       event_f_flags = uint_arg(2)
-       event_f_flags_str = _sys_open_flag_str(event_f_flags)
+       @_SYSCALL_FANOTIFY_INIT_REGARGS
+       @_SYSCALL_FANOTIFY_INIT_ARGSTR
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.fanotify_init = kprobe.function(@arch_syscall_prefix "sys_fanotify_init") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_FANOTIFY_INIT_NAME
+       @_SYSCALL_FANOTIFY_INIT_REGARGS
+       @_SYSCALL_FANOTIFY_INIT_ARGSTR
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.fanotify_init = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_fanotify_init"), @const("__NR_compat_fanotify_init"))
+       @_SYSCALL_FANOTIFY_INIT_NAME
+       @_SYSCALL_FANOTIFY_INIT_REGARGS
        @_SYSCALL_FANOTIFY_INIT_ARGSTR
 }
-probe nd_syscall.fanotify_init.return =
+
+probe nd_syscall.fanotify_init.return = nd1_syscall.fanotify_init.return!, nd2_syscall.fanotify_init.return!, tp_syscall.fanotify_init.return
+  { }
+  
+probe nd1_syscall.fanotify_init.return =
        kprobe.function("sys_fanotify_init").return ?
 {
        @_SYSCALL_FANOTIFY_INIT_NAME
        retstr = returnstr(1)
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.fanotify_init.return = kprobe.function(@arch_syscall_prefix "sys_fanotify_init").return ?
+{
+       @_SYSCALL_FANOTIFY_INIT_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.fanotify_init.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_fanotify_init"), @const("__NR_compat_fanotify_init"))
+       @_SYSCALL_FANOTIFY_INIT_NAME
+       retstr = return_str(1,$ret)
+}
index c2c6ebe58ad1d8bb99ea6611e3f1ab11e2f21be0..b6eff75268cba3e5a5fd07b53341e08d98913761 100644 (file)
                         dirfd_str, pathname)
 %)
 
+@define _SYSCALL_FANOTIFY_MARK_REGARGS
+%(
+       fanotify_fd = int_arg(1)
+       flags = uint_arg(2)
+%( CONFIG_64BIT == "y" %?
+       mask = ulonglong_arg(3)
+       dirfd = int_arg(4)
+       pathname = user_string_quoted(pointer_arg(5))
+%:
+       # On a 32-bit kernel, 'long long' arguments take the space of
+       # 2 arguments, so we have to adjust the following argument
+       # numbers.
+       mask = ulonglong_arg(3)
+       dirfd = int_arg(5)
+       pathname = user_string_quoted(pointer_arg(6))
+%)
+%)
+
+@define _SYSCALL_COMPAT_FANOTIFY_MARK_REGARGS
+%(
+       fanotify_fd = int_arg(1)
+       flags = uint_arg(2)
+       if (@__BIG_ENDIAN)
+               mask = ((uint_arg(3) << 32) | uint_arg(4))
+       else
+               mask = ((uint_arg(4) << 32) | uint_arg(3))
+       dirfd = int_arg(5)
+       pathname = user_string_quoted(pointer_arg(6))
+%)
+
 probe syscall.fanotify_mark = dw_syscall.fanotify_mark !, nd_syscall.fanotify_mark ? {}
 probe syscall.fanotify_mark.return = dw_syscall.fanotify_mark.return !, nd_syscall.fanotify_mark.return ? {}
 
@@ -65,8 +95,11 @@ probe dw_syscall.fanotify_mark.return =
 
 # nd_fanotify_mark _____________________________________________________
 
-probe nd_syscall.fanotify_mark = __nd_syscall.fanotify_mark ?,
-       __nd_syscall.compat_fanotify_mark ?
+probe nd_syscall.fanotify_mark = nd1_syscall.fanotify_mark!, nd2_syscall.fanotify_mark!, tp_syscall.fanotify_mark
+  { }
+
+probe nd1_syscall.fanotify_mark = __nd1_syscall.fanotify_mark ?,
+       __nd1_syscall.compat_fanotify_mark ?
 {
        @_SYSCALL_FANOTIFY_MARK_NAME
        flags_str = _fanotify_mark_flags_str(flags)
@@ -74,42 +107,89 @@ probe nd_syscall.fanotify_mark = __nd_syscall.fanotify_mark ?,
         dirfd_str = _dfd_str(dirfd)
        @_SYSCALL_FANOTIFY_MARK_ARGSTR
 }
-probe __nd_syscall.fanotify_mark = kprobe.function("sys_fanotify_mark") ?
+probe __nd1_syscall.fanotify_mark = kprobe.function("sys_fanotify_mark") ?
 {
        @__syscall_gate_compat_simple
        asmlinkage()
-       fanotify_fd = int_arg(1)
-       flags = uint_arg(2)
-%( CONFIG_64BIT == "y" %?
-       mask = ulonglong_arg(3)
-       dirfd = int_arg(4)
-       pathname = user_string_quoted(pointer_arg(5))
-%:
-       # On a 32-bit kernel, 'long long' arguments take the space of
-       # 2 arguments, so we have to adjust the following argument
-       # numbers.
-       mask = ulonglong_arg(3)
-       dirfd = int_arg(5)
-       pathname = user_string_quoted(pointer_arg(6))
-%)
+       @_SYSCALL_FANOTIFY_MARK_REGARGS
 }
-probe __nd_syscall.compat_fanotify_mark =
+probe __nd1_syscall.compat_fanotify_mark =
        kprobe.function("compat_sys_fanotify_mark") ?
 {
        asmlinkage()
-       fanotify_fd = int_arg(1)
-       flags = uint_arg(2)
-       if (@__BIG_ENDIAN)
-               mask = ((uint_arg(3) << 32) | uint_arg(4))
-       else
-               mask = ((uint_arg(4) << 32) | uint_arg(3))
-       dirfd = int_arg(5)
-       pathname = user_string_quoted(pointer_arg(6))
+       @_SYSCALL_COMPAT_FANOTIFY_MARK_REGARGS
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.fanotify_mark = __nd2_syscall.fanotify_mark ?,
+       __nd2_syscall.compat_fanotify_mark ?
+{
+       @_SYSCALL_FANOTIFY_MARK_NAME
+       flags_str = _fanotify_mark_flags_str(flags)
+       mask_str = _fanotify_mark_mask_str(mask)
+       dirfd_str = _dfd_str(dirfd)
+       @_SYSCALL_FANOTIFY_MARK_ARGSTR
+}
+probe __nd2_syscall.fanotify_mark = kprobe.function(@arch_syscall_prefix "sys_fanotify_mark") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_FANOTIFY_MARK_REGARGS
+}
+probe __nd2_syscall.compat_fanotify_mark = 
+       kprobe.function(@arch_syscall_prefix "compat_sys_fanotify_mark") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_COMPAT_FANOTIFY_MARK_REGARGS
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.fanotify_mark = __tp_syscall.fanotify_mark ?,
+       __tp_syscall.compat_fanotify_mark ?
+{
+       @_SYSCALL_FANOTIFY_MARK_NAME
+       flags_str = _fanotify_mark_flags_str(flags)
+       mask_str = _fanotify_mark_mask_str(mask)
+       dirfd_str = _dfd_str(dirfd)
+       @_SYSCALL_FANOTIFY_MARK_ARGSTR
+}
+probe __tp_syscall.fanotify_mark = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_gate(@const("__NR_fanotify_mark"))
+       @_SYSCALL_FANOTIFY_MARK_REGARGS
+}
+probe __tp_syscall.compat_fanotify_mark = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__compat_syscall_gate(@const("__NR_compat_fanotify_mark"))
+       @_SYSCALL_COMPAT_FANOTIFY_MARK_REGARGS
 }
-probe nd_syscall.fanotify_mark.return =
+
+probe nd_syscall.fanotify_mark.return = nd1_syscall.fanotify_mark.return!, nd2_syscall.fanotify_mark.return!, tp_syscall.fanotify_mark.return
+  { }
+
+probe nd1_syscall.fanotify_mark.return =
        kprobe.function("sys_fanotify_mark").return ?,
        kprobe.function("compat_sys_fanotify_mark").return ?
 {
        @_SYSCALL_FANOTIFY_MARK_NAME
        retstr = returnstr(1)
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.fanotify_mark.return =
+       kprobe.function(@arch_syscall_prefix "sys_fanotify_mark").return ?,
+       kprobe.function(@arch_syscall_prefix "compat_sys_fanotify_mark").return ?
+{
+       @_SYSCALL_FANOTIFY_MARK_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.fanotify_mark.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_fanotify_mark"), @const("__NR_compat_fanotify_mark"))
+       @_SYSCALL_FANOTIFY_MARK_NAME
+       retstr = return_str(1,$ret)
+}
index 607efd258ec5c60c5b999f067b1c99e92fa66725..7784027118948beddcb5fd0176a67c4585a2e029 100644 (file)
        argstr = sprintf("%p, %p", tv_uaddr, tz_uaddr)
 %)
 
+@define _SYSCALL_GETTIMEOFDAY_REGARGS
+%(
+       tv_uaddr = pointer_arg(1)
+       tz_uaddr = pointer_arg(2)
+%)
+
 probe syscall.gettimeofday = dw_syscall.gettimeofday !, nd_syscall.gettimeofday ? {}
 probe syscall.gettimeofday.return = dw_syscall.gettimeofday.return !, nd_syscall.gettimeofday.return ? {}
 
@@ -41,21 +47,63 @@ probe dw_syscall.gettimeofday.return = kernel.function("compat_sys_gettimeofday"
 
 # nd_gettimeofday _____________________________________________________
 
-probe nd_syscall.gettimeofday = kprobe.function("compat_sys_gettimeofday") ?,
-                                kprobe.function("sys32_gettimeofday") ?,
-                                kprobe.function("sys_gettimeofday") ?
+probe nd_syscall.gettimeofday = nd1_syscall.gettimeofday!, nd2_syscall.gettimeofday!, tp_syscall.gettimeofday
+  { }
+
+probe nd1_syscall.gettimeofday = kprobe.function("compat_sys_gettimeofday") ?,
+                                 kprobe.function("sys32_gettimeofday") ?,
+                                 kprobe.function("sys_gettimeofday") ?
 {
        @_SYSCALL_GETTIMEOFDAY_NAME
        asmlinkage()
-       tv_uaddr = pointer_arg(1)
-       tz_uaddr = pointer_arg(2)
+       @_SYSCALL_GETTIMEOFDAY_REGARGS
+       @_SYSCALL_GETTIMEOFDAY_ARGSTR
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.gettimeofday = kprobe.function(@arch_syscall_prefix "compat_sys_gettimeofday") ?,
+                                 kprobe.function(@arch_syscall_prefix "sys_gettimeofday") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_GETTIMEOFDAY_NAME
+       @_SYSCALL_GETTIMEOFDAY_REGARGS
        @_SYSCALL_GETTIMEOFDAY_ARGSTR
 }
 
-probe nd_syscall.gettimeofday.return = kprobe.function("compat_sys_gettimeofday").return ?,
-                                       kprobe.function("sys32_gettimeofday").return ?,
-                                       kprobe.function("sys_gettimeofday").return ?
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.gettimeofday = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_gettimeofday"), @const("__NR_compat_gettimeofday"))
+       @_SYSCALL_GETTIMEOFDAY_NAME
+       @_SYSCALL_GETTIMEOFDAY_REGARGS
+       @_SYSCALL_GETTIMEOFDAY_ARGSTR
+}
+
+probe nd_syscall.gettimeofday.return = nd1_syscall.gettimeofday.return!, nd2_syscall.gettimeofday.return!, tp_syscall.gettimeofday.return
+  { }
+  
+probe nd1_syscall.gettimeofday.return = kprobe.function("compat_sys_gettimeofday").return ?,
+                                        kprobe.function("sys32_gettimeofday").return ?,
+                                        kprobe.function("sys_gettimeofday").return ?
 {
        @_SYSCALL_GETTIMEOFDAY_NAME
        retstr = returnstr(1)
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.gettimeofday.return = kprobe.function(@arch_syscall_prefix "compat_sys_gettimeofday").return ?,
+                                        kprobe.function(@arch_syscall_prefix "sys_gettimeofday").return ?
+{
+       @_SYSCALL_GETTIMEOFDAY_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.gettimeofday.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_gettimeofday"), @const("__NR_compat_gettimeofday"))
+       @_SYSCALL_GETTIMEOFDAY_NAME
+       retstr = return_str(1,$ret)
+}
index fb15397dab7779399be1d4aa6d89ba5e49fb3e33..23e04636748a4ddab3f646464861bc2337593cdd 100644 (file)
        argstr = sprintf("%s, %d", domainname_str, len)
 %)
 
+@define _SYSCALL_SETDOMAINNAME_REGARGS
+%(
+       domainname_uaddr = pointer_arg(1)
+%( systemtap_v <= "2.8" %?
+        hostname_uaddr = domainname_uaddr
+%)
+       domainname_str = user_string_quoted(domainname_uaddr)
+       len = int_arg(2)
+%)
+
 probe syscall.setdomainname = dw_syscall.setdomainname !,
                               nd_syscall.setdomainname ? {}
 probe syscall.setdomainname.return = dw_syscall.setdomainname.return !,
@@ -41,20 +51,57 @@ probe dw_syscall.setdomainname.return = kernel.function("sys_setdomainname").ret
 
 # nd_setdomainname _____________________________________________________
 
-probe nd_syscall.setdomainname = kprobe.function("sys_setdomainname") ?
+probe nd_syscall.setdomainname = nd1_syscall.setdomainname!, nd2_syscall.setdomainname!, tp_syscall.setdomainname
+  { }
+
+probe nd1_syscall.setdomainname = kprobe.function("sys_setdomainname") ?
 {
        @_SYSCALL_SETDOMAINNAME_NAME
        asmlinkage()
-       domainname_uaddr = pointer_arg(1)
-%( systemtap_v <= "2.8" %?
-        hostname_uaddr = domainname_uaddr
-%)
-       domainname_str = user_string_quoted(domainname_uaddr)
-       len = int_arg(2)
+       @_SYSCALL_SETDOMAINNAME_REGARGS
+       @_SYSCALL_SETDOMAINNAME_ARGSTR
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.setdomainname = kprobe.function(@arch_syscall_prefix "sys_setdomainname") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_SETDOMAINNAME_NAME
+       @_SYSCALL_SETDOMAINNAME_REGARGS
        @_SYSCALL_SETDOMAINNAME_ARGSTR
 }
-probe nd_syscall.setdomainname.return = kprobe.function("sys_setdomainname").return ?
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.setdomainname = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_setdomainname"), @const("__NR_compat_setdomainname"))
+       @_SYSCALL_SETDOMAINNAME_NAME
+       @_SYSCALL_SETDOMAINNAME_REGARGS
+       @_SYSCALL_SETDOMAINNAME_ARGSTR
+}
+
+probe nd_syscall.setdomainname.return = nd1_syscall.setdomainname.return!, nd2_syscall.setdomainname.return!, tp_syscall.setdomainname.return
+  { }
+  
+probe nd1_syscall.setdomainname.return = kprobe.function("sys_setdomainname").return ?
 {
        @_SYSCALL_SETDOMAINNAME_NAME
        retstr = returnstr(1)
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.setdomainname.return = kprobe.function(@arch_syscall_prefix "sys_setdomainname").return ?
+{
+       @_SYSCALL_SETDOMAINNAME_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.setdomainname.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_setdomainname"), @const("__NR_compat_setdomainname"))
+       @_SYSCALL_SETDOMAINNAME_NAME
+       retstr = return_str(1,$ret)
+}
index ff02266543ec830067f6f2b06cd957bcd588bedc..b68c9c27e0aa0aa1c5256854c6e5b1ef7975e4f4 100644 (file)
        argstr = sprintf("%s, %s", tv_str, tz_str)
 %)
 
+@define _SYSCALL_SETTIMEOFDAY_REGARGS
+%(
+       tv_uaddr = pointer_arg(1)
+       tz_uaddr = pointer_arg(2)
+       tz_str = _struct_timezone_u(tz_uaddr)
+%)
+
 probe syscall.settimeofday = dw_syscall.settimeofday !,
                              nd_syscall.settimeofday ? {}
 probe syscall.settimeofday.return = dw_syscall.settimeofday.return !,
@@ -38,22 +45,64 @@ probe dw_syscall.settimeofday.return = kernel.function("sys_settimeofday").retur
 
 # nd_settimeofday _____________________________________________________
 
-probe nd_syscall.settimeofday = kprobe.function("sys_settimeofday") ?
+probe nd_syscall.settimeofday = nd1_syscall.settimeofday!, nd2_syscall.settimeofday!, tp_syscall.settimeofday
+  { }
+
+probe nd1_syscall.settimeofday = kprobe.function("sys_settimeofday") ?
 {
        @_SYSCALL_SETTIMEOFDAY_NAME
        asmlinkage()
-       tv_uaddr = pointer_arg(1)
+       @_SYSCALL_SETTIMEOFDAY_REGARGS
        tv_str = _struct_timeval_u(tv_uaddr, 1)
-       tz_uaddr = pointer_arg(2)
-       tz_str = _struct_timezone_u(tz_uaddr)
        @_SYSCALL_SETTIMEOFDAY_ARGSTR
 }
-probe nd_syscall.settimeofday.return = kprobe.function("sys_settimeofday").return ?
+
+/* kernel 4.17+ */
+probe nd2_syscall.settimeofday = kprobe.function(@arch_syscall_prefix "sys_settimeofday") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_SETTIMEOFDAY_NAME
+       @_SYSCALL_SETTIMEOFDAY_REGARGS
+       tv_str = _struct_timeval_u(tv_uaddr, 1)
+       @_SYSCALL_SETTIMEOFDAY_ARGSTR
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.settimeofday = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_gate(@const("__NR_settimeofday"))
+       @_SYSCALL_SETTIMEOFDAY_NAME
+       @_SYSCALL_SETTIMEOFDAY_REGARGS
+       tv_str = _struct_timeval_u(tv_uaddr, 1)
+       @_SYSCALL_SETTIMEOFDAY_ARGSTR
+}
+
+probe nd_syscall.settimeofday.return = nd1_syscall.settimeofday.return!, nd2_syscall.settimeofday.return!, tp_syscall.settimeofday.return
+  { }
+  
+probe nd1_syscall.settimeofday.return = kprobe.function("sys_settimeofday").return ?
 {
        @_SYSCALL_SETTIMEOFDAY_NAME
        retstr = returnstr(1)
 }
 
+/* kernel 4.17+ */
+probe nd2_syscall.settimeofday.return = kprobe.function(@arch_syscall_prefix "sys_settimeofday").return ?
+{
+       @_SYSCALL_SETTIMEOFDAY_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.settimeofday.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_gate(@const("__NR_settimeofday"))
+       @_SYSCALL_SETTIMEOFDAY_NAME
+       retstr = return_str(1,$ret)
+}
+
 #
 # long sys32_settimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
 # long compat_sys_settimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
@@ -85,20 +134,62 @@ probe dw_syscall.settimeofday32.return = kernel.function("sys32_settimeofday").r
 
 # nd_settimeofday32 _____________________________________________________
 
-probe nd_syscall.settimeofday32 = kprobe.function("sys32_settimeofday") ?,
-                                  kprobe.function("compat_sys_settimeofday") ?
+probe nd_syscall.settimeofday32 = nd1_syscall.settimeofday32!, nd2_syscall.settimeofday32!, tp_syscall.settimeofday32
+  { }
+
+probe nd1_syscall.settimeofday32 = kprobe.function("sys32_settimeofday") ?,
+                                   kprobe.function("compat_sys_settimeofday") ?
 {
        @_SYSCALL_SETTIMEOFDAY_NAME
        asmlinkage()
-       tv_uaddr = pointer_arg(1)
+       @_SYSCALL_SETTIMEOFDAY_REGARGS
        tv_str = _struct_compat_timeval_u(tv_uaddr, 1)
-       tz_uaddr = pointer_arg(2)
-       tz_str = _struct_timezone_u(tz_uaddr)
        @_SYSCALL_SETTIMEOFDAY_ARGSTR
 }
-probe nd_syscall.settimeofday32.return = kprobe.function("sys32_settimeofday").return ?,
-                                         kprobe.function("compat_sys_settimeofday").return ?
+
+/* kernel 4.17+ */
+probe nd2_syscall.settimeofday32 = kprobe.function(@arch_syscall_prefix "compat_sys_settimeofday") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_SETTIMEOFDAY_NAME
+       @_SYSCALL_SETTIMEOFDAY_REGARGS
+       tv_str = _struct_compat_timeval_u(tv_uaddr, 1)
+       @_SYSCALL_SETTIMEOFDAY_ARGSTR
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.settimeofday32 = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__compat_syscall_gate(@const("__NR_compat_settimeofday"))
+       @_SYSCALL_SETTIMEOFDAY_NAME
+       @_SYSCALL_SETTIMEOFDAY_REGARGS
+       tv_str = _struct_compat_timeval_u(tv_uaddr, 1)
+       @_SYSCALL_SETTIMEOFDAY_ARGSTR
+}
+
+probe nd_syscall.settimeofday32.return = nd1_syscall.settimeofday32.return!, nd2_syscall.settimeofday32.return!, tp_syscall.settimeofday32.return
+  { }
+  
+probe nd1_syscall.settimeofday32.return = kprobe.function("sys32_settimeofday").return ?,
+                                          kprobe.function("compat_sys_settimeofday").return ?
 {
        @_SYSCALL_SETTIMEOFDAY_NAME
        retstr = returnstr(1)
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.settimeofday32.return = kprobe.function(@arch_syscall_prefix "compat_sys_settimeofday").return ?
+{
+       @_SYSCALL_SETTIMEOFDAY_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.settimeofday32.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__compat_syscall_gate(@const("__NR_compat_settimeofday"))
+       @_SYSCALL_SETTIMEOFDAY_NAME
+       retstr = return_str(1,$ret)
+}
index e80fbedc96f7d72ecf02735569d0826dade96919..92f7921baa8b354adde7289eb412fb641a22800e 100644 (file)
        argstr = sprintf("%p", t_uaddr)
 %)
 
+@define _SYSCALL_STIME_REGARGS
+%(
+       t_uaddr = pointer_arg(1)
+%)
+
 probe syscall.stime = dw_syscall.stime !, nd_syscall.stime ? {}
 probe syscall.stime.return = dw_syscall.stime.return !,
                              nd_syscall.stime.return ? {}
@@ -37,18 +42,63 @@ probe dw_syscall.stime.return = kernel.function("compat_sys_stime").return ?,
 
 # nd_stime _____________________________________________________
 
-probe nd_syscall.stime = kprobe.function("compat_sys_stime") ?,
+probe nd_syscall.stime = nd1_syscall.stime!, nd2_syscall.stime!, tp_syscall.stime
+  { }
+
+probe nd1_syscall.stime = kprobe.function("compat_sys_stime") ?,
                          kprobe.function("sys_stime") ?
 {
        @_SYSCALL_STIME_NAME
        asmlinkage()
-       t_uaddr = pointer_arg(1)
+       @_SYSCALL_STIME_REGARGS
        /* FIXME. Decode time */
        @_SYSCALL_STIME_ARGSTR
 }
-probe nd_syscall.stime.return = kprobe.function("compat_sys_stime").return ?,
+
+/* kernel 4.17+ */
+probe nd2_syscall.stime = kprobe.function(@arch_syscall_prefix "compat_sys_stime") ?,
+       kprobe.function(@arch_syscall_prefix "sys_stime") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_STIME_NAME
+       @_SYSCALL_STIME_REGARGS
+       /* FIXME. Decode time */
+       @_SYSCALL_STIME_ARGSTR
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.stime = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_stime"), @const("__NR_compat_stime"))
+       @_SYSCALL_STIME_NAME
+       @_SYSCALL_STIME_REGARGS
+       @_SYSCALL_STIME_ARGSTR
+}
+
+probe nd_syscall.stime.return = nd1_syscall.stime.return!, nd2_syscall.stime.return!, tp_syscall.stime.return
+  { }
+  
+probe nd1_syscall.stime.return = kprobe.function("compat_sys_stime").return ?,
                                 kprobe.function("sys_stime").return ?
 {
        @_SYSCALL_STIME_NAME
        retstr = returnstr(1)
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.stime.return = kprobe.function(@arch_syscall_prefix "compat_sys_stime") ?,
+       kprobe.function(@arch_syscall_prefix "sys_stime").return ?
+{
+       @_SYSCALL_STIME_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.stime.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_stime"), @const("__NR_compat_stime"))
+       @_SYSCALL_STIME_NAME
+       retstr = return_str(1,$ret)
+}
index e3f56a1eb25da37ae678c74b7743095fa01fd2f7..634cc65613d39d661c656cd30c7863d85224ca45 100644 (file)
        argstr = sprintf("%p", t_uaddr)
 %)
 
+@define _SYSCALL_TIME_REGARGS
+%(
+       t_uaddr = pointer_arg(1)
+%)
+
 probe syscall.time = dw_syscall.time !, nd_syscall.time ? {}
 probe syscall.time.return = dw_syscall.time.return !, nd_syscall.time.return ? {}
 
@@ -41,17 +46,44 @@ probe dw_syscall.time.return = kernel.function("sys32_time").return ?,
 
 # nd_time _____________________________________________________
 
-probe nd_syscall.time = kprobe.function("sys32_time") ?,
+probe nd_syscall.time = nd1_syscall.time!, nd2_syscall.time!, tp_syscall.time
+  { }
+
+probe nd1_syscall.time = kprobe.function("sys32_time") ?,
                         kprobe.function("sys_time64") ?,
                         kprobe.function("compat_sys_time") ?,
                         kprobe.function("sys_time") ?
 {
        @_SYSCALL_TIME_NAME
        asmlinkage()
-       t_uaddr = pointer_arg(1)
+       @_SYSCALL_TIME_REGARGS
+       @_SYSCALL_TIME_ARGSTR
+}
+
+/* kernel 4.17+ */
+probe nd2_syscall.time = kprobe.function(@arch_syscall_prefix "sys_time") ?,
+       kprobe.function(@arch_syscall_prefix "compat_sys_time") ?
+{
+       __set_syscall_pt_regs(pointer_arg(1))
+       @_SYSCALL_TIME_NAME
+       @_SYSCALL_TIME_REGARGS
+       @_SYSCALL_TIME_ARGSTR
+}
+
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.time = kernel.trace("sys_enter")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_time"), @const("__NR_compat_time"))
+       @_SYSCALL_TIME_NAME
+       @_SYSCALL_TIME_REGARGS
        @_SYSCALL_TIME_ARGSTR
 }
-probe nd_syscall.time.return = kprobe.function("sys32_time").return ?,
+
+probe nd_syscall.time.return = nd1_syscall.time.return!, nd2_syscall.time.return!, tp_syscall.time.return
+  { }
+  
+probe nd1_syscall.time.return = kprobe.function("sys32_time").return ?,
                                kprobe.function("sys_time64").return ?,
                                kprobe.function("compat_sys_time").return ?,
                                kprobe.function("sys_time").return ?
@@ -59,3 +91,20 @@ probe nd_syscall.time.return = kprobe.function("sys32_time").return ?,
        @_SYSCALL_TIME_NAME
        retstr = returnstr(1)
 }
+
+/* kernel 4.17+ */
+probe nd2_syscall.time.return = kprobe.function(@arch_syscall_prefix "sys_time").return ?,
+       kprobe.function(@arch_syscall_prefix "compat_sys_time") ?
+{
+       @_SYSCALL_TIME_NAME
+       retstr = returnstr(1) /* NB: not in the $regs */
+}
+/* kernel 3.5+, but undesirable because it affects all syscalls */
+probe tp_syscall.time.return = kernel.trace("sys_exit")
+{
+       __set_syscall_pt_regs($regs)
+       @__syscall_compat_gate(@const("__NR_time"), @const("__NR_compat_time"))
+       @_SYSCALL_TIME_NAME
+       retstr = return_str(1,$ret)
+}
This page took 0.082717 seconds and 5 git commands to generate.