summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhunt <hunt>2007-07-31 16:20:30 +0000
committerhunt <hunt>2007-07-31 16:20:30 +0000
commita968ea63067cb079cbd1608804ec80c36026f0ab (patch)
tree3f39852ec51e7e39ce69a0ec1d39449ef56b1067
parent291f7a3a00b127c0128434c7af7923331ef34bd7 (diff)
downloadsystemtap-steved-a968ea63067cb079cbd1608804ec80c36026f0ab.tar.gz
systemtap-steved-a968ea63067cb079cbd1608804ec80c36026f0ab.tar.xz
systemtap-steved-a968ea63067cb079cbd1608804ec80c36026f0ab.zip
2007-07-31 Martin Hunt <hunt@redhat.com>
* */syscalls.stp: Added mmap functions. Continued moving common compatibility functions to the main tapset. * aux_syscalls.stp (_shmat_flags_str): New. (__get_compat_argv): New. * syscalls.stp (adjtimex): Just print hex argument. (compat_adjtimex): New. (clock_getres): Also probe compat_clock_getres. (clock_gettime): Also probe compat funcs. (compat_clock_nanosleep): New. (compat_execve): New. (fstatat): New. (get[e][gu]id): Also probe sys32. (getsockopt): Make optional. Also probe compat. (mmap, mmap2): These are arch-specific, so move to individual architecture subdirs. (compat_sys_msgctl): New. (compat_sys_msgrcv): New. (compat_sys_msgsnd): New. * syscalls.stp (pread32): Remove. It calls pread64 . (quotactl): Make optional. (recv): Probe correct function. (recvfrom): Fix args. (compat_sys_recvmsg): New. (semctl): Make optional. (compat_sys_semctl): New. (semget): Make optional. (semop): Make optional. (semtimedop): Make optional. (compat_sys_semtimedop): New. (send): Make optional. (sendmsg): Make optional. (compat_sys_sendmsg): New. (sendto): Make optional. (setsockopt): Make optional. Add compat. (shmat): New. (compat_sys_shmat): New. (shmctl): New. (compat_sys_shmctl): New. (shmdt): New. (shmget): New. (shutdown): Make optional. (socket): Make optional. (socketpair): Make optional. (swapoff): Make optional. (swapon): Make optional. (sysctl): Add probe on sys32.
-rw-r--r--tapset/ChangeLog53
-rw-r--r--tapset/aux_syscalls.stp65
-rw-r--r--tapset/i686/syscalls.stp66
-rw-r--r--tapset/ia64/syscalls.stp43
-rw-r--r--tapset/ppc64/syscalls.stp362
-rw-r--r--tapset/s390x/syscalls.stp65
-rw-r--r--tapset/syscalls.stp247
-rw-r--r--tapset/syscalls2.stp328
-rw-r--r--tapset/x86_64/syscalls.stp22
9 files changed, 708 insertions, 543 deletions
diff --git a/tapset/ChangeLog b/tapset/ChangeLog
index e1e6f4eb..00d68664 100644
--- a/tapset/ChangeLog
+++ b/tapset/ChangeLog
@@ -1,3 +1,56 @@
+2007-07-31 Martin Hunt <hunt@redhat.com>
+
+ * */syscalls.stp: Added mmap functions.
+ Continued moving common compatibility functions to
+ the main tapset.
+
+ * aux_syscalls.stp (_shmat_flags_str): New.
+ (__get_compat_argv): New.
+
+ * syscalls.stp (adjtimex): Just print hex argument.
+ (compat_adjtimex): New.
+ (clock_getres): Also probe compat_clock_getres.
+ (clock_gettime): Also probe compat funcs.
+ (compat_clock_nanosleep): New.
+ (compat_execve): New.
+ (fstatat): New.
+ (get[e][gu]id): Also probe sys32.
+ (getsockopt): Make optional. Also probe compat.
+ (mmap, mmap2): These are arch-specific, so move to individual
+ architecture subdirs.
+ (compat_sys_msgctl): New.
+ (compat_sys_msgrcv): New.
+ (compat_sys_msgsnd): New.
+
+ * syscalls.stp (pread32): Remove. It calls pread64 .
+ (quotactl): Make optional.
+ (recv): Probe correct function.
+ (recvfrom): Fix args.
+ (compat_sys_recvmsg): New.
+ (semctl): Make optional.
+ (compat_sys_semctl): New.
+ (semget): Make optional.
+ (semop): Make optional.
+ (semtimedop): Make optional.
+ (compat_sys_semtimedop): New.
+ (send): Make optional.
+ (sendmsg): Make optional.
+ (compat_sys_sendmsg): New.
+ (sendto): Make optional.
+ (setsockopt): Make optional. Add compat.
+ (shmat): New.
+ (compat_sys_shmat): New.
+ (shmctl): New.
+ (compat_sys_shmctl): New.
+ (shmdt): New.
+ (shmget): New.
+ (shutdown): Make optional.
+ (socket): Make optional.
+ (socketpair): Make optional.
+ (swapoff): Make optional.
+ (swapon): Make optional.
+ (sysctl): Add probe on sys32.
+
2007-07-31 Frank Ch. Eigler <fche@elastic.org>
PR 4793
diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp
index d1a504de..8f9fcb73 100644
--- a/tapset/aux_syscalls.stp
+++ b/tapset/aux_syscalls.stp
@@ -650,6 +650,64 @@ function __get_argv:string(a:long)
}
*str = 0;
%}
+/* This function copies an argv from userspace. */
+function __get_compat_argv:string(a:long)
+%{ /* pure */
+ compat_uptr_t __user *__user *argv = (compat_uptr_t __user *__user *)(long)THIS->a;
+ compat_uptr_t __user *vstr;
+ int space, rc, len = MAXSTRINGLEN;
+ char *str = THIS->__retvalue;
+ char buf[80];
+ char *ptr = buf;
+
+ if (argv)
+ argv++;
+
+ while (argv != NULL) {
+ if (get_user (vstr, argv))
+ break;
+
+ if (vstr == NULL)
+ break;
+
+ rc = _stp_strncpy_from_user(buf, vstr, 79);
+ if (rc <= 0)
+ break;
+
+ /* check for whitespace in string */
+ buf[rc] = 0;
+ ptr = buf;
+ space = 0;
+ while (*ptr && rc--) {
+ if (isspace(*ptr++)) {
+ space = 1;
+ break;
+ }
+ }
+
+ if (len != MAXSTRINGLEN && len) {
+ *str++=' ';
+ len--;
+ }
+
+ if (space && len) {
+ *str++='\"';
+ len--;
+ }
+
+ rc = strlcpy (str, buf, len);
+ str += rc;
+ len -= rc;
+
+ if (space && len) {
+ *str++='\"';
+ len--;
+ }
+
+ argv++;
+ }
+ *str = 0;
+%}
/*
* Return a integer member value of struct
@@ -1562,3 +1620,10 @@ function __int32:long(val:long) %{ /* pure */
THIS->__retvalue = (int32_t)THIS->val;
%}
+function _shmat_flags_str(f) {
+ if(f & 010000) bs="SHM_RDONLY|".bs
+ if(f & 020000) bs="SHM_RND|".bs
+ if(f & 040000) bs="SHM_REMAP|".bs
+ if(f & 0100000) bs="SHM_EXEC|".bs
+ return substr(bs,0,strlen(bs)-1)
+}
diff --git a/tapset/i686/syscalls.stp b/tapset/i686/syscalls.stp
index ad984075..1106ea3d 100644
--- a/tapset/i686/syscalls.stp
+++ b/tapset/i686/syscalls.stp
@@ -1,3 +1,7 @@
+# 32-bit x86-specific system calls
+# These are typically defined in arch/i386
+#
+
# get_thread_area ____________________________________________
/*
* asmlinkage int
@@ -28,16 +32,9 @@ probe syscall.iopl.return = kernel.function("sys_iopl").return {
}
# ipc ________________________________________________________
-/*
- * asmlinkage int
- * sys_ipc(uint call,
- * int first,
- * int second,
- * int third,
- * void __user *ptr,
- * long fifth)
- */
-probe syscall.ipc = kernel.function("sys_ipc") {
+# int sys_ipc (uint call, int first, int second, int third, void __user *ptr, long fifth)
+#
+probe syscall.ipc = kernel.function("sys_ipc") ? {
name = "ipc"
call = $call
first = $first
@@ -46,13 +43,38 @@ probe syscall.ipc = kernel.function("sys_ipc") {
ptr_uaddr = $ptr
fifth = $fifth
argstr = sprintf("%d, %d, %d, %d, %p, %d", $call, $first,
- $second, $third, ptr_uaddr, $fifth)
+ $second, $third, $ptr, $fifth)
}
-probe syscall.ipc.return = kernel.function("sys_ipc").return {
+probe syscall.ipc.return = kernel.function("sys_ipc").return ? {
name = "ipc"
retstr = returnstr(1)
}
+
+# mmap2 ____________________________________________
+# sys_mmap2(unsigned long addr, unsigned long len,
+# unsigned long prot, unsigned long flags,
+# unsigned long fd, unsigned long pgoff)
+#
+probe syscall.mmap2 = kernel.function("sys_mmap2") ?
+{
+ name = "mmap2"
+ start = $addr
+ length = $len
+ prot = $prot
+ flags = $flags
+ fd = $fd
+ pgoffset = $pgoff
+ argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr,
+ $len, _mprotect_prot_str($prot), _mmap_flags($flags),
+ $fd, $pgoff)
+}
+probe syscall.mmap2.return = kernel.function("sys_mmap2").return ?
+{
+ name = "mmap2"
+ retstr = returnstr(2)
+}
+
# set_thread_area ____________________________________________
/*
* asmlinkage int
@@ -91,26 +113,6 @@ probe syscall.set_zone_reclaim.return =
retstr = returnstr(1)
}
%)
-# shmat ______________________________________________________
-/*
- * asmlinkage long
- * sys_shmat(int shmid,
- * char __user *shmaddr,
- * int shmflg)
- */
-probe syscall.shmat =
- kernel.function("sys_shmat") {
- name = "shmat"
- shmid = $shmid
- shmaddr_uaddr = $shmaddr
- shmflg = $shmflg
- argstr = sprintf("%d, %p, %d", $shmid, shmaddr_uaddr, $shmflg)
-}
-probe syscall.shmat.return =
- kernel.function("sys_shmat").return {
- name = "shmat"
- retstr = returnstr(1)
-}
# sigaltstack ________________________________________________
# int sys_sigaltstack(unsigned long ebx)
diff --git a/tapset/ia64/syscalls.stp b/tapset/ia64/syscalls.stp
new file mode 100644
index 00000000..2a281471
--- /dev/null
+++ b/tapset/ia64/syscalls.stp
@@ -0,0 +1,43 @@
+# IA64 system calls
+
+# mmap
+# sys_mmap (unsigned long addr, unsigned long len, int prot, int flags, int fd, long off)
+#
+probe syscall.mmap = kernel.function("sys_mmap") ? {
+ name = "mmap"
+ start = $addr
+ len = $len
+ prot = $prot
+ flags = $flags
+ fd = $fd
+ offset = $off
+ argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len,
+ _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $off)
+}
+
+probe syscall.mmap.return = kernel.function("sys_mmap").return ? {
+ name = "mmap"
+ retstr = returnstr(2)
+}
+
+# mmap2
+# sys_mmap2 (unsigned long addr, unsigned long len, int prot, int flags, int fd, long pgoff)
+probe syscall.mmap2 = kernel.function("sys_mmap2") ?
+{
+ name = "mmap2"
+ start = $addr
+ length = $len
+ prot = $prot
+ flags = $flags
+ fd = $fd
+ pgoffset = $pgoff
+ argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr,
+ $len, _mprotect_prot_str($prot), _mmap_flags($flags),
+ $fd, $pgoff)
+}
+probe syscall.mmap2.return = kernel.function("sys_mmap2").return ?
+{
+ name = "mmap2"
+ retstr = returnstr(2)
+}
+
diff --git a/tapset/ppc64/syscalls.stp b/tapset/ppc64/syscalls.stp
index 8d614fa5..7e7ad3c9 100644
--- a/tapset/ppc64/syscalls.stp
+++ b/tapset/ppc64/syscalls.stp
@@ -1,3 +1,4 @@
+# PPC64-specific system calls
# compat_sys_sigpending ________________________________________
#
@@ -210,130 +211,6 @@ probe syscall.compat_sys_fcntl.return =
retstr = returnstr(1)
}
-# compat_sys_semctl ________________________________________
-#
-# long compat_sys_semctl(int first, int second, int third, void __user *uptr)
-#
-probe syscall.compat_sys_semctl = kernel.function("compat_sys_semctl") {
- name = "compat_sys_semctl"
- semid = $first
- semnum = $second
- cmd = $third
-# arg_uaddr = $uptr
- argstr = sprintf("%d, %d, %s", semid, semnum, _semctl_cmd(cmd))
-}
-probe syscall.compat_sys_semctl.return =
- kernel.function("compat_sys_semctl").return {
- name = "compat_sys_semctl"
- retstr = returnstr(1)
-}
-# compat_sys_msgsnd ________________________________________
-#
-# long compat_sys_msgsnd(int first, int second, int third, void __user *uptr)
-#
-probe syscall.compat_sys_msgsnd = kernel.function("compat_sys_msgsnd") {
- name = "compat_sys_msgsnd"
- first = $first
- second = $second
- third = $third
- uptr_uaddr = $uptr
- argstr = sprintf("%d, %d, %d, %p", first, second, third,
- uptr_uaddr)
-}
-probe syscall.compat_sys_msgsnd.return =
- kernel.function("compat_sys_msgsnd").return {
- name = "compat_sys_msgsnd"
- retstr = returnstr(1)
-}
-# compat_sys_msgrcv ________________________________________
-#
-# long compat_sys_msgrcv(int first, int second, int msgtyp, int third,
-# int version, void __user *uptr)
-#
-probe syscall.compat_sys_msgrcv = kernel.function("compat_sys_msgrcv") {
- name = "compat_sys_msgrcv"
- first = $first
- second = $second
- third = $third
- uptr_uaddr = $uptr
- argstr = sprintf("%d, %d, %d, %p", first, second, third,
- uptr_uaddr)
-}
-probe syscall.compat_sys_msgrcv.return =
- kernel.function("compat_sys_msgrcv").return {
- name = "compat_sys_msgrcv"
- retstr = returnstr(1)
-}
-# compat_sys_msgctl ________________________________________
-#
-# long compat_sys_msgctl(int first, int second, void __user *uptr)
-#
-probe syscall.compat_sys_msgctl = kernel.function("compat_sys_msgctl") {
- name = "compat_sys_msgctl"
- first = $first
- second = $second
- uptr_uaddr = $uptr
- argstr = sprintf("%d, %d, %p", first, second, uptr_uaddr)
-}
-probe syscall.compat_sys_msgctl.return =
- kernel.function("compat_sys_msgctl").return {
- name = "compat_sys_msgctl"
- retstr = returnstr(1)
-}
-# compat_sys_shmat ________________________________________
-#
-# long compat_sys_shmat(int first, int second, compat_uptr_t third,
-# int version, void __user *uptr)
-#
-probe syscall.compat_sys_shmat = kernel.function("compat_sys_shmat") {
- name = "compat_sys_shmat"
- first = $first
- second = $second
- third = $third
- uptr_uaddr = $uptr
- argstr = sprintf("%d, %d, %d, %p", first, second, third,
- uptr_uaddr)
-}
-probe syscall.compat_sys_shmat.return =
- kernel.function("compat_sys_shmat").return {
- name = "compat_sys_shmat"
- retstr = returnstr(1)
-}
-# compat_sys_shmctl ________________________________________
-#
-# long compat_sys_shmctl(int first, int second, void __user *uptr)
-#
-probe syscall.compat_sys_shmctl = kernel.function("compat_sys_shmctl") {
- name = "compat_sys_shmctl"
- first = $first
- second = $second
- uptr_uaddr = $uptr
- argstr = sprintf("%d, %d, %p", first, second, uptr_uaddr)
-}
-probe syscall.compat_sys_shmctl.return =
- kernel.function("compat_sys_shmctl").return {
- name = "compat_sys_shmctl"
- retstr = returnstr(1)
-}
-# compat_sys_semtimedop ________________________________________
-#
-# long compat_sys_semtimedop(int semid, struct sembuf __user *tsems,
-# unsigned nsops, const struct compat_timespec __user *timeout)
-#
-probe syscall.compat_sys_semtimedop = kernel.function("compat_sys_semtimedop") {
- name = "compat_sys_semtimedop"
- semid = $semid
- sops_uaddr = tsems
- nsops = $nsops
- timeout_uaddr = $timeout
- argstr = sprintf("%d, %p, %d, %s", semid, sops_uaddr, nsops,
- _struct_timespec_u(timeout_uaddr))
-}
-probe syscall.compat_sys_semtimedop.return =
- kernel.function("compat_sys_semtimedop").return {
- name = "compat_sys_semtimedop"
- retstr = returnstr(1)
-}
# compat_sys_mq_open ________________________________________
#
# asmlinkage long compat_sys_mq_open(const char __user *u_name,
@@ -455,104 +332,6 @@ probe syscall.compat_sys_keyctl.return =
retstr = returnstr(1)
}
*/
-# compat_sys_setsockopt ________________________________________
-#
-# asmlinkage long compat_sys_setsockopt(int fd, int level, int optname,
-# char __user *optval, int optlen)
-#
-probe syscall.compat_sys_setsockopt = kernel.function("compat_sys_setsockopt") {
- name = "compat_sys_setsockopt"
- fd = $fd
- level = $level
- level_str = _sockopt_level_str($level)
- optname = $optname
- optname_str = _sockopt_optname_str($optname)
- optval_uaddr = $optval
- optlen = $optlen
- argstr = sprintf("%d, %s, %s, %p, %d", $fd, level_str,
- optname_str, optval_uaddr, $optlen)
-}
-probe syscall.compat_sys_setsockopt.return =
- kernel.function("compat_sys_setsockopt").return {
- name = "compat_sys_setsockopt"
- retstr = returnstr(1)
-}
-# compat_sys_getsockopt ________________________________________
-#
-# asmlinkage long compat_sys_getsockopt(int fd, int level, int optname,
-# char __user *optval, int __user *optlen)
-#
-probe syscall.compat_sys_getsockopt = kernel.function("compat_sys_getsockopt") {
- name = "compat_sys_getsockopt"
- s = $fd
- level = $level
- level_str = _sockopt_level_str($level)
- optname = $optname
- optname_str = _sockopt_optname_str($optname)
- optval_uaddr = $optval
- /* FIXME */
- optlen_uaddr = $optlen
- argstr = sprintf("%d, %s, %s, %p, %p", s, level_str,
- optname_str, optval_uaddr, optlen_uaddr)
-}
-probe syscall.compat_sys_getsockopt.return =
- kernel.function("compat_sys_getsockopt").return {
- name = "compat_sys_getsockopt"
- retstr = returnstr(1)
-}
-# compat_sys_sendmsg ________________________________________
-#
-# asmlinkage long compat_sys_sendmsg(int fd,
-# struct compat_msghdr __user *msg,
-# unsigned flags)
-#
-probe syscall.compat_sys_sendmsg = kernel.function("compat_sys_sendmsg") {
- name = "compat_sys_sendmsg"
- s = $fd
- msg_uaddr = $msg
- flags = $flags
- argstr = sprintf("%d, %p, %s", s, msg_uaddr,
- _send_flags_str($flags))
-}
-probe syscall.compat_sys_sendmsg.return =
- kernel.function("compat_sys_sendmsg").return {
- name = "compat_sys_sendmsg"
- retstr = returnstr(1)
-}
-# compat_sys_recvmsg ________________________________________
-#
-# asmlinkage long compat_sys_recvmsg(int fd,
-# struct compat_msghdr __user *msg,
-# unsigned int flags)
-#
-probe syscall.compat_sys_recvmsg = kernel.function("compat_sys_recvmsg") {
- name = "compat_sys_recvmsg"
- s = $fd
- msg_uaddr = $msg
- flags = $flags
- argstr = sprintf("%d, %p, %s", s, msg_uaddr,
- _send_flags_str($flags))
-}
-probe syscall.compat_sys_recvmsg.return =
- kernel.function("compat_sys_recvmsg").return {
- name = "compat_sys_recvmsg"
- retstr = returnstr(1)
-}
-# compat_sys_socketcall ________________________________________
-#
-# asmlinkage long compat_sys_socketcall(int call, u32 __user *args)
-#
-probe syscall.compat_sys_socketcall = kernel.function("compat_sys_socketcall") {
- name = "compat_sys_socketcall"
- call = $call
- args_uaddr = $args
- argstr = sprintf("%d, %p", call, args_uaddr)
-}
-probe syscall.compat_sys_socketcall.return =
- kernel.function("compat_sys_socketcall").return {
- name = "compat_sys_socketcall"
- retstr = returnstr(1)
-}
#sys32_open _______________________________________________________
# asmlinkage long sys32_open(const char * filename, int flags, int mode)
@@ -702,26 +481,22 @@ probe syscall.sys32_sysinfo.return =
name = "sys32_sysinfo"
retstr = returnstr(1)
}
-# sys32_ipc ________________________________________
+
+# ipc ________________________________________
#
# long sys32_ipc(u32 call, u32 first, u32 second, u32 third,
# compat_uptr_t ptr, u32 fifth)
#
-probe syscall.sys32_ipc = kernel.function("sys32_ipc") ? {
- name = "sys32_ipc"
- call = $call
- first = $first
- second = $second
- third = $third
- ptr_uaddr = $ptr
- fifth = $fifth
- argstr = sprintf("%d, %d, %d, %d, %p, %d", call, first, second,
- third, ptr_uaddr, fifth)
-}
-probe syscall.sys32_ipc.return = kernel.function("sys32_ipc").return ? {
- name = "sys32_ipc"
+probe syscall.ipc = kernel.function("sys32_ipc") ? {
+ name = "ipc"
+ argstr = sprintf("%d, %d, %d, %d, %p, %d", $call, $first, $second,
+ $third, $ptr, $fifth)
+}
+probe syscall.ipc.return = kernel.function("sys32_ipc").return ? {
+ name = "sys_ipc"
retstr = returnstr(1)
}
+
# sys32_sigreturn ________________________________________
#
# long sys32_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
@@ -749,14 +524,13 @@ probe syscall.sys32_sigreturn.return =
#
probe syscall.sys32_adjtimex = kernel.function("sys32_adjtimex") ? {
name = "sys32_adjtimex"
- buf_uaddr = $utp
- argstr = sprintf("%p", buf_uaddr)
+ argstr = sprintf("%p", $utp)
}
-probe syscall.sys32_adjtimex.return =
- kernel.function("sys32_adjtimex").return ?{
+probe syscall.sys32_adjtimex.return = kernel.function("sys32_adjtimex").return ?{
name = "sys32_adjtimex"
retstr = returnstr(1)
}
+
# sys32_getdents ________________________________________
#
# asmlinkage long sys32_getdents(unsigned int fd,
@@ -984,60 +758,6 @@ probe syscall.compat_clock_settime.return =
name = "compat_clock_settime"
retstr = returnstr(1)
}
-# compat_clock_gettime ________________________________________
-#
-# long compat_clock_gettime(clockid_t which_clock,
-# struct compat_timespec __user *tp)
-#
-probe syscall.compat_clock_gettime = kernel.function("compat_clock_gettime") ? {
- name = "compat_clock_gettime"
- which_clock = $which_clock
- tp_uaddr = $tp
- argstr = sprintf("%d, %p", which_clock, tp_uaddr)
-}
-probe syscall.compat_clock_gettime.return =
- kernel.function("compat_clock_gettime").return ? {
- name = "compat_clock_gettime"
- retstr = returnstr(1)
-}
-# compat_clock_getres ________________________________________
-#
-# long compat_clock_getres(clockid_t which_clock,
-# struct compat_timespec __user *tp)
-#
-probe syscall.compat_clock_getres = kernel.function("compat_clock_getres") ? {
- name = "compat_clock_getres"
- which_clock = $which_clock
- tp_uaddr = $tp
- argstr = sprintf("%d, %p", which_clock, tp_uaddr)
-}
-probe syscall.compat_clock_getres.return =
- kernel.function("compat_clock_getres").return ? {
- name = "compat_clock_getres"
- retstr = returnstr(1)
-}
-# compat_clock_nanosleep ________________________________________
-#
-# long compat_clock_nanosleep(clockid_t which_clock, int flags,
-# struct compat_timespec __user *rqtp,
-# struct compat_timespec __user *rmtp)
-#
-probe syscall.compat_clock_nanosleep = kernel.function("compat_clock_nanosleep") ? {
- name = "compat_clock_nanosleep"
- clock_id = $which_clock
- clock_id_str = _get_wc_str($which_clock)
- flags = $flags
- flag_str = "TIMER_ABSTIME"
- rqtp_uaddr = $rqtp
- rmtp_uaddr = $rmtp
- argstr = sprintf("%s, %s, %p, %p", clock_id_str,
- flag_str, rqtp_uaddr, rmtp_uaddr)
-}
-probe syscall.compat_clock_nanosleep.return =
- kernel.function("compat_clock_nanosleep").return ? {
- name = "compat_clock_nanosleep"
- retstr = returnstr(1)
-}
# sys32_swapcontext ________________________________________
#
# long sys32_swapcontext(struct ucontext32 __user *old_ctx,
@@ -1138,6 +858,60 @@ probe syscall.compat_set_mempolicy.return =
name = "compat_set_mempolicy"
retstr = returnstr(1)
}
+
+# mmap
+# long sys_mmap(unsigned long addr, size_t len,
+# unsigned long prot, unsigned long flags,
+# unsigned long fd, off_t offset)
+#
+probe syscall.mmap = kernel.function("sys_mmap") ? {
+ name = "mmap"
+ start = $addr
+ len = $len
+ prot = $prot
+ flags = $flags
+ fd = $fd
+ offset = $offset
+ argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len,
+ _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $offset)
+}
+
+probe syscall.mmap.return = kernel.function("sys_mmap").return ? {
+ name = "mmap"
+ retstr = returnstr(2)
+}
+
+# mmap2
+# long sys_mmap2(unsigned long addr, size_t len,
+# unsigned long prot, unsigned long flags,
+# unsigned long fd, unsigned long pgoff)
+# long compat_sys_mmap2(unsigned long addr, size_t len,
+# unsigned long prot, unsigned long flags,
+# unsigned long fd, unsigned long pgoff)
+#
+probe syscall.mmap2 =
+ kernel.function("sys_mmap2") ?,
+ kernel.function("compat_sys_mmap2") ?
+{
+ name = "mmap2"
+ start = $addr
+ length = $len
+ prot = $prot
+ flags = $flags
+ fd = $fd
+ pgoffset = $pgoff
+ argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr,
+ $len, _mprotect_prot_str($prot), _mmap_flags($flags),
+ $fd, $pgoff)
+}
+probe syscall.mmap2.return =
+ kernel.function("sys_mmap2").return ?,
+ kernel.function("compat_sys_mmap2").return ?
+{
+ name = "mmap2"
+ retstr = returnstr(2)
+}
+
# ppc64_sys_stime ________________________________________
#
# long ppc64_sys_stime(long __user * tptr)
diff --git a/tapset/s390x/syscalls.stp b/tapset/s390x/syscalls.stp
index b1804388..40a73fd5 100644
--- a/tapset/s390x/syscalls.stp
+++ b/tapset/s390x/syscalls.stp
@@ -1,22 +1,59 @@
+# S390-specific system calls
+
%(arch == "s390x" %?
-# mmap - s390x version of the syscall.mmap probes
+# getresgid __________________________________________________
+# long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 __user *sgid)
+#
+probe syscall.getresgid16 = kernel.function("sys32_getresgid16") ?
+{
+ name = "getresgid"
+ argstr = sprintf("%p, %p, %p", $rgid, $egid, $sgid)
+}
+probe syscall.getresgid16.return = kernel.function("sys32_getresgid16").return ?
+{
+ name = "getresgid"
+ retstr = returnstr(1)
+}
+# getresuid __________________________________________________
+# long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 __user *suid)
+#
+probe syscall.getresuid16 = kernel.function("sys32_getresuid16") ?
+{
+ name = "getresuid"
+ argstr = sprintf("%p, %p, %p", $ruid, $euid, $suid)
+}
+probe syscall.getresuid16.return = kernel.function("sys32_getresuid16").return ?
+{
+ name = "getresuid"
+ retstr = returnstr(1)
+}
+
+# ipc _________________________________________________
+# long sys32_ipc(u32 call, int first, int second, int third, u32 ptr)
#
+probe syscall.ipc = kernel.function("sys32_ipc") ? {
+ name = "ipc"
+ argstr = sprintf("%d, %d, %d, %d, %p", $call, $first, $second, $third, $ptr)
+}
+probe syscall.ipc.return = kernel.function("sys_ipc").return ? {
+ name = "ipc"
+ retstr = returnstr(1)
+}
+
+# mmap _________________________________________________
# long old_mmap(struct mmap_arg_struct __user *arg)
# long old32_mmap(struct mmap_arg_struct_emu31 __user *arg)
#
-
probe syscall.mmap = kernel.function("old_mmap"),
kernel.function("old32_mmap")
{
name = "mmap"
- if ( probefunc() == "old_mmap" ){
- argstr = get_mmap_args($arg);
- }else{
- argstr = get_32mmap_args($arg);
- }
-
+ if (probefunc() == "old_mmap")
+ argstr = get_mmap_args($arg)
+ else
+ argstr = get_32mmap_args($arg)
}
probe syscall.mmap.return = kernel.function("old_mmap").return,
@@ -27,7 +64,7 @@ probe syscall.mmap.return = kernel.function("old_mmap").return,
}
-# mmap2 - s390x version of the syscall.mmap2 probes
+# mmap2 _________________________________________________
#
# long sys_mmap2(struct mmap_arg_struct __user *arg)
# long sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg)
@@ -37,12 +74,10 @@ probe syscall.mmap2 = kernel.function("sys_mmap2"),
{
name = "mmap2"
- if ( probefunc() == "sys_mmap2" ){
- argstr = get_mmap_args($arg);
- }else{
- argstr = get_32mmap_args($arg);
- }
-
+ if (probefunc() == "sys_mmap2")
+ argstr = get_mmap_args($arg)
+ else
+ argstr = get_32mmap_args($arg)
}
probe syscall.mmap2.return = kernel.function("sys_mmap2").return,
diff --git a/tapset/syscalls.stp b/tapset/syscalls.stp
index 48f96635..3243c647 100644
--- a/tapset/syscalls.stp
+++ b/tapset/syscalls.stp
@@ -95,11 +95,7 @@ probe syscall.add_key.return = kernel.function("sys_add_key").return ? {
# long sys_adjtimex(struct timex __user *txc_p)
probe syscall.adjtimex = kernel.function("sys_adjtimex") {
name = "adjtimex"
- buf_uaddr = $txc_p
- /*
- * buf_modes = __uget_timex_m($txc_p,0)
- */
- buf_modes_str = _adjtx_mode_str(buf_modes)
+
/*
* buf_offset = __uget_timex_m($txc_p,1)
* buf_freq = __uget_timex_m($txc_p,2)
@@ -113,12 +109,21 @@ probe syscall.adjtimex = kernel.function("sys_adjtimex") {
* buf_time_tv_usec = __uget_timex_m($txc_p,10)
* buf_tick = __uget_timex_m($txc_p,11)
*/
- argstr = buf_modes_str
+ argstr = sprintf("%p", $txc_p)
}
probe syscall.adjtimex.return = kernel.function("sys_adjtimex").return {
name = "adjtimex"
retstr = returnstr(1)
}
+# long compat_sys_adjtimex(struct compat_timex __user *utp)
+probe syscall.compat_adjtimex = kernel.function("compat_sys_adjtimex") ? {
+ name = "compat_adjtimex"
+ argstr = sprintf("%p", $utp)
+}
+probe syscall.compat_adjtimex.return = kernel.function("compat_sys_adjtimex").return ? {
+ name = "compat_adjtimex"
+ retstr = returnstr(1)
+}
# alarm ______________________________________________________
# unsigned long sys_alarm (unsigned int seconds)
@@ -286,28 +291,46 @@ probe syscall.chroot.return = kernel.function("sys_chroot").return {
# clock_getres _______________________________________________
# long sys_clock_getres(clockid_t which_clock, struct timespec __user *tp)
-probe syscall.clock_getres = kernel.function("sys_clock_getres") {
+# long compat_clock_getres(clockid_t which_clock, struct compat_timespec __user *tp)
+#
+probe syscall.clock_getres =
+ kernel.function("sys_clock_getres"),
+ kernel.function("compat_clock_getres") ?
+{
name = "clock_getres"
clk_id = $which_clock
clk_id_str = _get_wc_str($which_clock)
res_uaddr = $tp
argstr = sprintf("%s, %p", _get_wc_str($which_clock), $tp)
}
-probe syscall.clock_getres.return = kernel.function("sys_clock_getres").return {
+probe syscall.clock_getres.return =
+ kernel.function("sys_clock_getres").return,
+ kernel.function("compat_clock_getres").return ?
+{
name = "clock_getres"
retstr = returnstr(1)
}
# clock_gettime ______________________________________________
# long sys_clock_gettime(clockid_t which_clock, struct timespec __user *tp)
-probe syscall.clock_gettime = kernel.function("sys_clock_gettime") {
+# long compat_clock_gettime(clockid_t which_clock, struct compat_timespec __user *tp)
+# long compat_sys_clock_gettime(clockid_t which_clock,struct compat_timespec __user *tp)
+#
+probe syscall.clock_gettime =
+ kernel.function("sys_clock_gettime"),
+ kernel.function("compat_clock_gettime") ?,
+ kernel.function("compat_sys_clock_gettime") ?
+{
name = "clock_gettime"
clk_id = $which_clock
clk_id_str = _get_wc_str($which_clock)
- tp_uaddr = $tp
argstr = sprintf("%s, %p", _get_wc_str($which_clock), $tp)
}
-probe syscall.clock_gettime.return = kernel.function("sys_clock_gettime").return {
+probe syscall.clock_gettime.return =
+ kernel.function("sys_clock_gettime").return,
+ kernel.function("compat_clock_gettime").return ?,
+ kernel.function("compat_sys_clock_gettime").return ?
+{
name = "clock_gettime"
retstr = returnstr(1)
}
@@ -320,22 +343,34 @@ probe syscall.clock_gettime.return = kernel.function("sys_clock_gettime").return
#
probe syscall.clock_nanosleep = kernel.function("sys_clock_nanosleep") {
name = "clock_nanosleep"
- clock_id = $which_clock
- clock_id_str = _get_wc_str($which_clock)
- flags = $flags
- if ($flags == 0)
- flag_str = "0"
- else
- flag_str = "TIMER_ABSTIME"
- rqtp_uaddr = $rqtp
- rmtp_uaddr = $rmtp
- argstr = sprintf("%s, %s, %s, %p", clock_id_str, flag_str,
+ argstr = sprintf("%s, 0x%x, %s, %p", _get_wc_str($which_clock), $flags,
_struct_timespec_u($rqtp), $rmtp)
}
probe syscall.clock_nanosleep.return = kernel.function("sys_clock_nanosleep").return {
name = "clock_nanosleep"
retstr = returnstr(1)
}
+# compat_clock_nanosleep ________________________________________
+#
+# long compat_clock_nanosleep(clockid_t which_clock, int flags,
+# struct compat_timespec __user *rqtp,
+# struct compat_timespec __user *rmtp)
+#
+probe syscall.compat_clock_nanosleep =
+ kernel.function("compat_clock_nanosleep") ?,
+ kernel.function("compat_sys_clock_nanosleep") ?
+{
+ name = "compat_clock_nanosleep"
+ argstr = sprintf("%s, 0x%x, %s, %p", _get_wc_str($which_clock), $flags,
+ _struct_compat_timespec_u($rqtp), $rmtp)
+}
+probe syscall.compat_clock_nanosleep.return =
+ kernel.function("compat_clock_nanosleep").return ?,
+ kernel.function("compat_sys_clock_nanosleep").return ?
+{
+ name = "compat_clock_nanosleep"
+ retstr = returnstr(1)
+}
# clock_settime ______________________________________________
# long sys_clock_settime(clockid_t which_clock,
@@ -499,6 +534,20 @@ probe syscall.execve.return = kernel.function("do_execve").return {
name = "execve"
retstr = returnstr(1)
}
+# int compat_do_execve(char * filename,
+# compat_uptr_t __user *argv,
+# compat_uptr_t __user *envp,
+# struct pt_regs * regs)
+probe syscall.compat_execve = kernel.function("compat_do_execve") {
+ name = "compat_execve"
+ filename = kernel_string($filename)
+ args = __get_compat_argv($argv)
+ argstr = sprintf("%s %s", filename, args)
+}
+probe syscall.compat_execve.return = kernel.function("compat_do_execve").return {
+ name = "compat_execve"
+ retstr = returnstr(1)
+}
# exit _______________________________________________________
# long sys_exit(int error_code)
@@ -827,6 +876,37 @@ probe syscall.fstat.return =
retstr = returnstr(1)
}
+# fstatat ____________________________________________________
+# sys32_fstatat64(unsigned int dfd, char __user *filename, struct stat64_emu31 __user* statbuf, int flag)
+# long sys_newfstatat(int dfd, char __user *filename, struct stat __user *statbuf, int flag)
+# long sys_fstatat64(int dfd, char __user *filename, struct stat64 __user *statbuf, int flag)
+#
+probe syscall.fstatat =
+ kernel.function("sys_fstatat64") ?,
+ kernel.function("sys_newfstatat") ?,
+ kernel.function("sys32_fstatat64") ?
+{
+ name = "fstatat"
+ dirfd = $dfd
+ path = user_string($filename)
+ buf_uaddr = $statbuf
+
+ if ($flag == 0x100)
+ flags = "AT_SYMLINK_NOFOLLOW"
+ else
+ flags = sprintf("0x%x", $flag)
+
+ argstr = sprintf("%d, %s, %p, %s", $dfd, user_string_quoted($filename), $statbuf, flags)
+}
+probe syscall.fstatat.return =
+ kernel.function("sys_fstatat64").return ?,
+ kernel.function("sys_newfstatat").return ?,
+ kernel.function("sys32_fstatat64").return ?
+{
+ name = "fstatat"
+ retstr = returnstr(1)
+}
+
# fstatfs ____________________________________________________
# long sys_fstatfs(unsigned int fd, struct statfs __user * buf)
# long compat_sys_fstatfs(unsigned int fd, struct compat_statfs __user *buf)
@@ -1012,15 +1092,18 @@ probe syscall.getdents.return =
# getegid ____________________________________________________
# long sys_getegid(void)
# long sys_getegid16(void)
+# long sys32_getegid16(void)
#
probe syscall.getegid =
kernel.function("sys_getegid16") ?,
+ kernel.function("sys32_getegid16") ?,
kernel.function("sys_getegid")
{
name = "getegid"
}
probe syscall.getegid.return =
kernel.function("sys_getegid16").return ?,
+ kernel.function("sys32_getegid16").return ?,
kernel.function("sys_getegid").return
{
name = "getegid"
@@ -1029,14 +1112,18 @@ probe syscall.getegid.return =
# geteuid ____________________________________________________
# long sys_geteuid(void)
+# long sys32_geteuid16(void)
+#
probe syscall.geteuid =
kernel.function("sys_geteuid16") ?,
+ kernel.function("sys32_geteuid16") ?,
kernel.function("sys_geteuid")
{
name = "geteuid"
}
probe syscall.geteuid.return =
kernel.function("sys_geteuid16").return ?,
+ kernel.function("sys32_geteuid16").return ?,
kernel.function("sys_geteuid").return
{
name = "geteuid"
@@ -1045,14 +1132,18 @@ probe syscall.geteuid.return =
# getgid _____________________________________________________
# long sys_getgid(void)
+# long sys32_getgid16(void)
+#
probe syscall.getgid =
kernel.function("sys_getgid16") ?,
+ kernel.function("sys32_getgid16") ?,
kernel.function("sys_getgid")
{
name = "getgid"
}
probe syscall.getgid.return =
kernel.function("sys_getgid16").return ?,
+ kernel.function("sys32_getgid16").return ?,
kernel.function("sys_getgid").return
{
name = "getgid"
@@ -1330,7 +1421,10 @@ probe syscall.getsockname.return = kernel.function("sys_getsockname").return {
# char __user *optval,
# int __user *optlen)
#
-probe syscall.getsockopt = kernel.function("sys_getsockopt") {
+probe syscall.getsockopt =
+ kernel.function("sys_getsockopt") ?,
+ kernel.function("compat_sys_getsockopt") ?
+{
name = "getsockopt"
fd = $fd
level = $level
@@ -1342,8 +1436,12 @@ probe syscall.getsockopt = kernel.function("sys_getsockopt") {
argstr = sprintf("%d, %s, %s, %p, %p", $fd, _sockopt_level_str($level),
_sockopt_optname_str($optname), $optval, $optlen)
}
-probe syscall.getsockopt.return = kernel.function("sys_getsockopt").return {
- name = "getsockopt.return"
+probe syscall.getsockopt.return =
+ kernel.function("sys_getsockopt").return ?,
+ kernel.function("compat_sys_getsockopt").return ?
+{
+ name = "getsockopt"
+ retstr = returnstr(1)
}
# gettid _____________________________________________________
@@ -1386,15 +1484,18 @@ probe syscall.gettimeofday.return =
# getuid _____________________________________________________
# long sys_getuid(void
# long sys_getuid16(void)
+# long sys32_getuid16(void)
#
probe syscall.getuid =
kernel.function("sys_getuid16") ?,
+ kernel.function("sys32_getuid16") ?,
kernel.function("sys_getuid")
{
name = "getuid"
}
probe syscall.getuid.return =
kernel.function("sys_getuid16").return ?,
+ kernel.function("sys32_getuid16").return ?,
kernel.function("sys_getuid").return
{
name = "getuid"
@@ -2087,64 +2188,6 @@ probe syscall.mlockall.return = kernel.function("sys_mlockall").return {
retstr = returnstr(1)
}
-%(arch != "s390x" %?
-# mmap
-# long sys_mmap(unsigned long addr, unsigned long len,
-# unsigned long prot, unsigned long flags,
-# unsigned long fd, unsigned long off)
-probe syscall.mmap = kernel.function("sys_mmap") ? {
- name = "mmap"
- start = $addr
- len = $len
- prot = $prot
- flags = $flags
- fd = $fd
-%(arch != "ppc64" %?
- offset = $off
-%:
- offset = $offset
-%)
- argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len,
- _mprotect_prot_str($prot), _mmap_flags($flags), $fd, offset)
-}
-
-probe syscall.mmap.return = kernel.function("sys_mmap").return ? {
- name = "mmap"
- retstr = returnstr(2)
-}
-
-# mmap2
-# long sys_mmap2(unsigned long addr, unsigned long len,
-# unsigned long prot, unsigned long flags,
-# unsigned long fd, unsigned long pgoff)
-# long sys32_mmap2(unsigned long addr, unsigned long len,
-# unsigned long prot, unsigned long flags,
-# unsigned long fd, unsigned long pgoff)
-#
-probe syscall.mmap2 =
- kernel.function("sys_mmap2") ?,
- kernel.function("sys32_mmap2") ?
-{
- name = "mmap2"
- start = $addr
- length = $len
- prot = $prot
- flags = $flags
- fd = $fd
- pgoffset = $pgoff
- argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr,
- $len, _mprotect_prot_str($prot), _mmap_flags($flags),
- $fd, $pgoff)
-}
-probe syscall.mmap2.return =
- kernel.function("sys_mmap2").return ?,
- kernel.function("sys32_mmap2").return ?
-{
- name = "mmap2"
- retstr = returnstr(2)
-}
-%)
-
# modify_ldt _________________________________________________
# int sys_modify_ldt(int func, void __user *ptr, unsigned long bytecount)
#
@@ -2361,6 +2404,18 @@ probe syscall.msgctl.return = kernel.function("sys_msgctl").return {
name = "msgctl"
retstr = returnstr(1)
}
+# compat_sys_msgctl ________________________________________
+#
+# long compat_sys_msgctl(int first, int second, void __user *uptr)
+#
+probe syscall.compat_sys_msgctl = kernel.function("compat_sys_msgctl") ? {
+ name = "compat_sys_msgctl"
+ argstr = sprintf("%d, %d, %p", $first, $second, $uptr)
+}
+probe syscall.compat_sys_msgctl.return = kernel.function("compat_sys_msgctl").return ? {
+ name = "compat_sys_msgctl"
+ retstr = returnstr(1)
+}
# msgget _____________________________________________________
# long sys_msgget (key_t key, int msgflg)
@@ -2397,6 +2452,19 @@ probe syscall.msgrcv.return = kernel.function("sys_msgrcv").return {
name = "msgrcv"
retstr = returnstr(1)
}
+# compat_sys_msgrcv ________________________________________
+#
+# long compat_sys_msgrcv(int first, int second, int msgtyp, int third,
+# int version, void __user *uptr)
+#
+probe syscall.compat_sys_msgrcv = kernel.function("compat_sys_msgrcv") ? {
+ name = "compat_sys_msgrcv"
+ argstr = sprintf("%d, %d, %d, %p", $first, $second, $third, $uptr)
+}
+probe syscall.compat_sys_msgrcv.return = kernel.function("compat_sys_msgrcv").return ? {
+ name = "compat_sys_msgrcv"
+ retstr = returnstr(1)
+}
# msgsnd _____________________________________________________
# long sys_msgsnd (int msqid,
@@ -2414,7 +2482,20 @@ probe syscall.msgsnd = kernel.function("sys_msgsnd") {
}
probe syscall.msgsnd.return = kernel.function("sys_msgsnd").return {
name = "msgsnd"
- retstr = returnstr(1)}
+ retstr = returnstr(1)
+}
+# compat_sys_msgsnd ________________________________________
+#
+# long compat_sys_msgsnd(int first, int second, int third, void __user *uptr)
+#
+probe syscall.compat_sys_msgsnd = kernel.function("compat_sys_msgsnd") ? {
+ name = "compat_sys_msgsnd"
+ argstr = sprintf("%d, %d, %d, %p", $first, $second, $third, $uptr)
+}
+probe syscall.compat_sys_msgsnd.return = kernel.function("compat_sys_msgsnd").return ? {
+ name = "compat_sys_msgsnd"
+ retstr = returnstr(1)
+}
# msync ______________________________________________________
# long sys_msync(unsigned long start, size_t len, int flags)
diff --git a/tapset/syscalls2.stp b/tapset/syscalls2.stp
index 0554f3cf..79294cd4 100644
--- a/tapset/syscalls2.stp
+++ b/tapset/syscalls2.stp
@@ -402,26 +402,6 @@ probe syscall.pread.return = kernel.function("sys_pread64").return {
name = "pread"
retstr = returnstr(1)
}
-#long sys32_pread64(unsigned int fd, char __user *ubuf,
-# size_t count, u32 poshi, u32 poslo)
-probe syscall.pread32 = kernel.function("sys32_pread64") ? {
- name = "pread"
- fd = $fd
- buf_uaddr = $buf
- count = $count
- offset = ($poshi << 32) + $poslo
-%( arch == "s390x" %?
- buf_uaddr = $ubuf
- argstr = sprintf("%d, %p, %d, %d", $fd, $ubuf, $count, ($poshi << 32) + $poslo)
-%:
- buf_uaddr = $buf
- argstr = sprintf("%d, %p, %d, %d", $fd, $buf, $count, ($poshi << 32) + $poslo)
-%)
-}
-probe syscall.pread32.return = kernel.function("sys32_pread64").return ? {
- name = "pread"
- retstr = returnstr(1)
-}
# pselect6 _____________________________________________________
#
@@ -547,7 +527,7 @@ probe syscall.pwrite32.return = kernel.function("sys32_pwrite64").return ? {
# qid_t id,
# void __user *addr)
#
-probe syscall.quotactl = kernel.function("sys_quotactl") {
+probe syscall.quotactl = kernel.function("sys_quotactl") ? {
name = "quotactl"
cmd = $cmd
cmd_str = _quotactl_cmd_str($cmd)
@@ -556,7 +536,7 @@ probe syscall.quotactl = kernel.function("sys_quotactl") {
addr_uaddr = $addr
argstr = sprintf("%s, %s, %d, %p", cmd_str, special_str, $id, $addr)
}
-probe syscall.quotactl.return = kernel.function("sys_quotactl").return {
+probe syscall.quotactl.return = kernel.function("sys_quotactl").return ? {
name = "quotactl"
retstr = returnstr(1)
}
@@ -685,35 +665,25 @@ probe syscall.reboot.return = kernel.function("sys_reboot").return {
}
# recv _______________________________________________________
#
-# asmlinkage long
-# sys_recvfrom(int fd,
-# void __user * ubuf,
-# size_t size,
-# unsigned flags,
-# struct sockaddr __user *addr,
-# int __user *addr_len)
+# long sys_recv(int fd, void __user *ubuf, size_t size, unsigned flags)
#
-probe syscall.recv = kernel.function("sys_recvfrom") {
+probe syscall.recv = kernel.function("sys_recv") ? {
name = "recv"
s = $fd
buf_uaddr = $ubuf
len = $size
flags = $flags
flags_str = _recvflags_str($flags)
- addr_uaddr = $addr
- addrlen_uaddr = $addr_len
- argstr = sprintf("%d, %p, %p, %s, %p, %p",
- s, buf_uaddr, len, flags_str, addr_uaddr,
- addrlen_uaddr)
+ argstr = sprintf("%d, %p, %d, %s", $fd, $ubuf, $size, flags_str)
}
-probe syscall.recv.return = kernel.function("sys_recvfrom").return {
+probe syscall.recv.return = kernel.function("sys_recv").return ? {
name = "recv"
retstr = returnstr(1)
}
+
# recvfrom ___________________________________________________
#
-# asmlinkage long
-# sys_recvfrom(int fd,
+# long sys_recvfrom(int fd,
# void __user * ubuf,
# size_t size,
# unsigned flags,
@@ -729,33 +699,50 @@ probe syscall.recvfrom = kernel.function("sys_recvfrom") {
flags_str = _recvflags_str($flags)
addr_uaddr = $addr
addrlen_uaddr = $addr_len
- argstr = sprintf("%d, %p, %p, %s, %p, %p",
- s, buf_uaddr, len, flags_str,
- addr_uaddr, addrlen_uaddr)
+ argstr = sprintf("%d, %p, %d, %s, %p, %p",
+ $fd, $ubuf, $size, flags_str, $addr, $addr_len)
}
-probe syscall.recvfrom.return = kernel.function("sys_recvfrom").return {
+probe syscall.recvfrom.return = kernel.function("sys_recvfrom").return ? {
name = "recvfrom"
retstr = returnstr(1)
}
+
# recvmsg ____________________________________________________
#
-# asmlinkage long
-# sys_recvmsg(int fd,
+# long sys_recvmsg(int fd,
# struct msghdr __user *msg,
# unsigned int flags)
#
-probe syscall.recvmsg = kernel.function("sys_recvmsg") {
+probe syscall.recvmsg = kernel.function("sys_recvmsg") ? {
name = "recvmsg"
s = $fd
msg_uaddr = $msg
flags = $flags
flags_str = _recvflags_str($flags)
- argstr = sprintf("%d, %p, %s", s, msg_uaddr, flags_str)
+ argstr = sprintf("%d, %p, %s", $fd, $msg, _recvflags_str($flags))
}
-probe syscall.recvmsg.return = kernel.function("sys_recvmsg").return {
+probe syscall.recvmsg.return = kernel.function("sys_recvmsg").return ? {
name = "recvmsg"
retstr = returnstr(1)
}
+# compat_sys_recvmsg ________________________________________
+#
+# long compat_sys_recvmsg(int fd,
+# struct compat_msghdr __user *msg,
+# unsigned int flags)
+#
+probe syscall.compat_sys_recvmsg = kernel.function("compat_sys_recvmsg") ? {
+ name = "compat_sys_recvmsg"
+ s = $fd
+ msg_uaddr = $msg
+ flags = $flags
+ argstr = sprintf("%d, %p, %s", $fd, $msg, _recvflags_str($flags))
+}
+probe syscall.compat_sys_recvmsg.return = kernel.function("compat_sys_recvmsg").return ? {
+ name = "compat_sys_recvmsg"
+ retstr = returnstr(1)
+}
+
# remap_file_pages ___________________________________________
#
# asmlinkage long
@@ -1258,7 +1245,7 @@ probe syscall.compat_select.return = kernel.function("compat_sys_select").return
# int cmd,
# union semun arg)
#
-probe syscall.semctl = kernel.function("sys_semctl") {
+probe syscall.semctl = kernel.function("sys_semctl") ? {
name = "semctl"
semid = $semid
semnum = $semnum
@@ -1267,67 +1254,97 @@ probe syscall.semctl = kernel.function("sys_semctl") {
* unsupported type tag identifier '$arg'
* arg = $arg
*/
- argstr = sprintf("%d, %d, %s", semid, semnum, _semctl_cmd(cmd))
+ argstr = sprintf("%d, %d, %s", $semid, $semnum, _semctl_cmd($cmd))
}
-probe syscall.semctl.return = kernel.function("sys_semctl").return {
+probe syscall.semctl.return = kernel.function("sys_semctl").return ? {
name = "semctl"
retstr = returnstr(1)
}
+# compat_sys_semctl ________________________________________
+#
+# long compat_sys_semctl(int first, int second, int third, void __user *uptr)
+#
+probe syscall.compat_sys_semctl = kernel.function("compat_sys_semctl") ? {
+ name = "compat_sys_semctl"
+ argstr = sprintf("%d, %d, $d, %p", $first, $second, $third, $uptr)
+}
+probe syscall.compat_sys_semctl.return = kernel.function("compat_sys_semctl").return ? {
+ name = "compat_sys_semctl"
+ retstr = returnstr(1)
+}
# semget _____________________________________________________
# long sys_semget (key_t key, int nsems, int semflg)
#
-probe syscall.semget = kernel.function("sys_semget") {
+probe syscall.semget = kernel.function("sys_semget") ? {
name = "semget"
key = $key
nsems = $nsems
semflg = $semflg
- argstr = sprintf("%d, %d, %s", key, nsems, __sem_flags(semflg))
+ argstr = sprintf("%d, %d, %s", $key, $nsems, __sem_flags($semflg))
}
-probe syscall.semget.return = kernel.function("sys_semget").return {
+probe syscall.semget.return = kernel.function("sys_semget").return ? {
name = "semget"
retstr = returnstr(1)
}
# semop ______________________________________________________
#
-# asmlinkage long
-# sys_semop (int semid,
+# long sys_semop (int semid,
# struct sembuf __user *tsops,
# unsigned nsops)
#
-probe syscall.semop = kernel.function("sys_semtimedop") {
+probe syscall.semop = kernel.function("sys_semtimedop") ? {
name = "semop"
semid = $semid
tsops_uaddr = $tsops
nsops = $nsops
- argstr = sprintf("%d, %p, %d", semid, tsops_uaddr, nsops)
+ argstr = sprintf("%d, %p, %d", $semid, $tsops, $nsops)
}
-probe syscall.semop.return = kernel.function("sys_semtimedop").return {
+probe syscall.semop.return = kernel.function("sys_semtimedop").return ? {
name = "semop"
retstr = returnstr(1)
}
+
# semtimedop _________________________________________________
#
-# asmlinkage long
-# sys_semtimedop(int semid,
+# long sys_semtimedop(int semid,
# struct sembuf __user *tsops,
# unsigned nsops,
# const struct timespec __user *timeout)
#
-probe syscall.semtimedop = kernel.function("sys_semtimedop") {
+probe syscall.semtimedop = kernel.function("sys_semtimedop") ? {
name = "semtimedop"
semid = $semid
sops_uaddr = $tsops
nsops = $nsops
timeout_uaddr = $timeout
- argstr = sprintf("%d, %p, %d, %s", semid, sops_uaddr, nsops,
- _struct_timespec_u(timeout_uaddr))
+ argstr = sprintf("%d, %p, %d, %s", $semid, $tsops, $nsops,
+ _struct_timespec_u($timeout))
}
-probe syscall.semtimedop.return = kernel.function("sys_semtimedop").return {
+probe syscall.semtimedop.return = kernel.function("sys_semtimedop").return ? {
name = "semtimedop"
retstr = returnstr(1)
}
+# compat_sys_semtimedop ________________________________________
+#
+# long compat_sys_semtimedop(int semid, struct sembuf __user *tsems,
+# unsigned nsops, const struct compat_timespec __user *timeout)
+#
+probe syscall.compat_sys_semtimedop = kernel.function("compat_sys_semtimedop") {
+ name = "compat_sys_semtimedop"
+ semid = $semid
+ sops_uaddr = tsems
+ nsops = $nsops
+ timeout_uaddr = $timeout
+ argstr = sprintf("%d, %p, %d, %s", $semid, $tsems, $nsops,
+ _struct_compat_timespec_u($timeout))
+}
+probe syscall.compat_sys_semtimedop.return = kernel.function("compat_sys_semtimedop").return {
+ name = "compat_sys_semtimedop"
+ retstr = returnstr(1)
+}
+
# send _______________________________________________________
#
# long sys_send(int fd,
@@ -1335,7 +1352,7 @@ probe syscall.semtimedop.return = kernel.function("sys_semtimedop").return {
# size_t len,
# unsigned flags)
#
-probe syscall.send = kernel.function("sys_send") {
+probe syscall.send = kernel.function("sys_send") ? {
name = "send"
s = $fd
buf_uaddr = $buff
@@ -1344,10 +1361,11 @@ probe syscall.send = kernel.function("sys_send") {
flags_str = _send_flags_str($flags)
argstr = sprintf("%d, %p, %s", $fd, $buff, flags_str)
}
-probe syscall.send.return = kernel.function("sys_send").return {
+probe syscall.send.return = kernel.function("sys_send").return ? {
name = "send"
retstr = returnstr(1)
}
+
# sendfile ___________________________________________________
#
# ssize_t sys_sendfile[64](int out_fd,
@@ -1377,22 +1395,36 @@ probe syscall.sendfile.return =
# sendmsg ____________________________________________________
#
-# long sys_sendmsg(int fd,
-# struct msghdr __user *msg,
-# unsigned flags)
+# long sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags)
#
-probe syscall.sendmsg = kernel.function("sys_sendmsg") {
+probe syscall.sendmsg = kernel.function("sys_sendmsg") ? {
name = "sendmsg"
s = $fd
msg_uaddr = $msg
flags = $flags
flags_str = _send_flags_str($flags)
- argstr = sprintf("%d, %p, %s", $fd, $msg, flags_str)
+ argstr = sprintf("%d, %p, %s", $fd, $msg, _send_flags_str($flags))
}
-probe syscall.sendmsg.return = kernel.function("sys_sendmsg").return {
+probe syscall.sendmsg.return = kernel.function("sys_sendmsg").return ? {
name = "sendmsg"
retstr = returnstr(1)
}
+# compat_sys_sendmsg ________________________________________
+#
+# long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg, unsigned flags)
+#
+probe syscall.compat_sys_sendmsg = kernel.function("compat_sys_sendmsg") ? {
+ name = "compat_sys_sendmsg"
+ s = $fd
+ msg_uaddr = $msg
+ flags = $flags
+ argstr = sprintf("%d, %p, %s", $fd, $msg, _send_flags_str($flags))
+}
+probe syscall.compat_sys_sendmsg.return = kernel.function("compat_sys_sendmsg").return ? {
+ name = "compat_sys_sendmsg"
+ retstr = returnstr(1)
+}
+
# sendto _____________________________________________________
#
# long sys_sendto(int fd,
@@ -1402,7 +1434,7 @@ probe syscall.sendmsg.return = kernel.function("sys_sendmsg").return {
# struct sockaddr __user *addr,
# int addr_len)
#
-probe syscall.sendto = kernel.function("sys_sendto") {
+probe syscall.sendto = kernel.function("sys_sendto") ? {
name = "sendto"
s = $fd
buf_uaddr = $buff
@@ -1414,10 +1446,11 @@ probe syscall.sendto = kernel.function("sys_sendto") {
argstr = sprintf("%d, %p, %d, %s, %p, %d", $fd, $buff,
$len, flags_str, $addr, $addr_len)
}
-probe syscall.sendto.return = kernel.function("sys_sendto").return {
+probe syscall.sendto.return = kernel.function("sys_sendto").return ? {
name = "sendto"
retstr = returnstr(1)
}
+
# setdomainname ______________________________________________
#
# asmlinkage long
@@ -1763,8 +1796,7 @@ probe syscall.setrlimit.return = kernel.function("sys_setrlimit").return {
}
# setsid _____________________________________________________
#
-# asmlinkage long
-# sys_setsid(void)
+# long sys_setsid(void)
#
probe syscall.setsid = kernel.function("sys_setsid") {
name = "setsid"
@@ -1774,16 +1806,19 @@ probe syscall.setsid.return = kernel.function("sys_setsid").return {
name = "setsid"
retstr = returnstr(1)
}
+
# setsockopt _________________________________________________
#
-# asmlinkage long
-# sys_setsockopt(int fd,
+# long sys_setsockopt(int fd,
# int level,
# int optname,
# char __user *optval,
# int optlen)
#
-probe syscall.setsockopt = kernel.function("sys_setsockopt") {
+probe syscall.setsockopt =
+ kernel.function("sys_setsockopt") ?,
+ kernel.function("compat_sys_setsockopt") ?
+{
name = "setsockopt"
fd = $fd
level = $level
@@ -1793,12 +1828,16 @@ probe syscall.setsockopt = kernel.function("sys_setsockopt") {
optval_uaddr = $optval
optlen = $optlen
argstr = sprintf("%d, %s, %s, %p, %d", $fd, level_str,
- optname_str, optval_uaddr, $optlen)
+ optname_str, $optval, $optlen)
}
-probe syscall.setsockopt.return = kernel.function("sys_setsockopt").return {
+probe syscall.setsockopt.return =
+ kernel.function("sys_setsockopt").return ?,
+ kernel.function("compat_sys_setsockopt").return ?
+{
name = "setsockopt"
retstr = returnstr(1)
}
+
# set_tid_address ____________________________________________
#
# asmlinkage long
@@ -1908,71 +1947,117 @@ probe syscall.sgetmask.return = kernel.function("sys_sgetmask").return ? {
name = "sgetmask"
retstr = returnstr(1)
}
+
+# shmat ______________________________________________________
+#
+# long sys_shmat(int shmid, char __user *shmaddr, int shmflg)
+#
+probe syscall.shmat = kernel.function("sys_shmat") ? {
+ name = "shmat"
+ shmid = $shmid
+ shmaddr_uaddr = $shmaddr
+ shmflg = $shmflg
+ argstr = sprintf("%d, %p, %s", $shmid, $shmaddr, _shmat_flags_str($shmflg))
+}
+probe syscall.shmat.return = kernel.function("sys_shmat").return ? {
+ name = "shmat"
+ retstr = returnstr(1)
+}
+# compat_sys_shmat ________________________________________
+#
+# long compat_sys_shmat(int first, int second, compat_uptr_t third,
+# int version, void __user *uptr)
+#
+probe syscall.compat_sys_shmat = kernel.function("compat_sys_shmat") ? {
+ name = "compat_sys_shmat"
+ first = $first
+ second = $second
+ third = $third
+ uptr_uaddr = $uptr
+ argstr = sprintf("%d, %d, %d, %d, %p", $first, $second, $third, $version, $uptr)
+}
+probe syscall.compat_sys_shmat.return = kernel.function("compat_sys_shmat").return ? {
+ name = "compat_sys_shmat"
+ retstr = returnstr(1)
+}
+
# shmctl _____________________________________________________
#
-# asmlinkage long
-# sys_shmctl (int shmid,
+# long sys_shmctl (int shmid,
# int cmd,
# struct shmid_ds __user *buf)
#
-probe syscall.shmctl = kernel.function("sys_shmctl") {
+probe syscall.shmctl = kernel.function("sys_shmctl") ? {
name = "shmctl"
shmid = $shmid
cmd = $cmd
buf_uaddr = $buf
- argstr = sprintf("%d, %s, %p", $shmid, _semctl_cmd($cmd),
- buf_uaddr)
+ argstr = sprintf("%d, %s, %p", $shmid, _semctl_cmd($cmd), $buf)
}
-probe syscall.shmctl.return = kernel.function("sys_shmctl").return {
+probe syscall.shmctl.return = kernel.function("sys_shmctl").return ? {
name = "shmctl"
retstr = returnstr(1)
}
+# compat_sys_shmctl ________________________________________
+#
+# long compat_sys_shmctl(int first, int second, void __user *uptr)
+#
+probe syscall.compat_sys_shmctl = kernel.function("compat_sys_shmctl") ? {
+ name = "compat_sys_shmctl"
+ first = $first
+ second = $second
+ uptr_uaddr = $uptr
+ argstr = sprintf("%d, %d, %p", $first, $second, $uptr)
+}
+probe syscall.compat_sys_shmctl.return = kernel.function("compat_sys_shmctl").return ? {
+ name = "compat_sys_shmctl"
+ retstr = returnstr(1)
+}
+
# shmdt ______________________________________________________
#
-# asmlinkage long
-# sys_shmdt(char __user *shmaddr)
+# long sys_shmdt(char __user *shmaddr)
#
-probe syscall.shmdt = kernel.function("sys_shmdt") {
+probe syscall.shmdt = kernel.function("sys_shmdt") ? {
name = "shmdt"
shmaddr_uaddr = $shmaddr
- argstr = sprintf("%p", shmaddr_uaddr)
+ argstr = sprintf("%p", $shmaddr)
}
-probe syscall.shmdt.return = kernel.function("sys_shmdt").return {
+probe syscall.shmdt.return = kernel.function("sys_shmdt").return ? {
name = "shmdt"
retstr = returnstr(1)
}
+
# shmget _____________________________________________________
#
-# asmlinkage long
-# sys_shmget (key_t key,
+# long sys_shmget (key_t key,
# size_t size,
# int shmflg)
#
-probe syscall.shmget = kernel.function("sys_shmget") {
+probe syscall.shmget = kernel.function("sys_shmget") ? {
name = "shmget"
key = $key
size = $size
shmflg = $shmflg
argstr = sprintf("%d, %d, %d", $key, $size, $shmflg)
}
-probe syscall.shmget.return = kernel.function("sys_shmget").return {
+probe syscall.shmget.return = kernel.function("sys_shmget").return ? {
name = "shmget"
retstr = returnstr(1)
}
+
# shutdown ___________________________________________________
#
-# asmlinkage long
-# sys_shutdown(int fd,
-# int how)
+# long sys_shutdown(int fd, int how)
#
-probe syscall.shutdown = kernel.function("sys_shutdown") {
+probe syscall.shutdown = kernel.function("sys_shutdown") ? {
name = "shutdown"
s = $fd
how = $how
how_str = _shutdown_how_str($how)
- argstr = sprintf("%d, %s", s, how_str)
+ argstr = sprintf("%d, %s", $fd, how_str)
}
-probe syscall.shutdown.return = kernel.function("sys_shutdown").return {
+probe syscall.shutdown.return = kernel.function("sys_shutdown").return ? {
name = "shutdown"
retstr = returnstr(1)
}
@@ -2084,7 +2169,7 @@ probe syscall.sigsuspend.return =
# socket _____________________________________________________
# long sys_socket(int family, int type, int protocol)
#
-probe syscall.socket = kernel.function("sys_socket") {
+probe syscall.socket = kernel.function("sys_socket") ? {
name = "socket"
family = $family
type = $type
@@ -2093,7 +2178,7 @@ probe syscall.socket = kernel.function("sys_socket") {
_sock_type_str($type),
$protocol)
}
-probe syscall.socket.return = kernel.function("sys_socket").return {
+probe syscall.socket.return = kernel.function("sys_socket").return ? {
name = "socket"
retstr = returnstr(1)
}
@@ -2101,9 +2186,7 @@ probe syscall.socket.return = kernel.function("sys_socket").return {
# commented out because this seems redundant
# socketcall _________________________________________________
#
-# asmlinkage long
-# sys_socketcall(int call,
-# unsigned long __user *args)
+# long sys_socketcall(int call, unsigned long __user *args)
#
#probe syscall.socketcall = kernel.function("sys_socketcall") {
# name = "socketcall"
@@ -2122,7 +2205,7 @@ probe syscall.socket.return = kernel.function("sys_socket").return {
# int protocol,
# int __user *usockvec)
#
-probe syscall.socketpair = kernel.function("sys_socketpair") {
+probe syscall.socketpair = kernel.function("sys_socketpair") ? {
name = "socketpair"
family = $family
type = $type
@@ -2133,10 +2216,11 @@ probe syscall.socketpair = kernel.function("sys_socketpair") {
_sock_type_str($type),
$protocol, sv_uaddr)
}
-probe syscall.socketpair.return = kernel.function("sys_socketpair").return {
+probe syscall.socketpair.return = kernel.function("sys_socketpair").return ? {
name = "socketpair"
retstr = returnstr(1)
}
+
# ssetmask ___________________________________________________
#
# asmlinkage long
@@ -2249,12 +2333,12 @@ probe syscall.stime.return = kernel.function("sys_stime").return ?{
# asmlinkage long
# sys_swapoff(const char __user * specialfile)
#
-probe syscall.swapoff = kernel.function("sys_swapoff") {
+probe syscall.swapoff = kernel.function("sys_swapoff")? {
name = "swapoff"
path = user_string($specialfile)
argstr = user_string_quoted($specialfile)
}
-probe syscall.swapoff.return = kernel.function("sys_swapoff").return {
+probe syscall.swapoff.return = kernel.function("sys_swapoff").return ? {
name = "swapoff"
retstr = returnstr(1)
}
@@ -2264,13 +2348,13 @@ probe syscall.swapoff.return = kernel.function("sys_swapoff").return {
# sys_swapon(const char __user * specialfile,
# int swap_flags)
#
-probe syscall.swapon = kernel.function("sys_swapon") {
+probe syscall.swapon = kernel.function("sys_swapon") ? {
name = "swapon"
path = user_string($specialfile)
swapflags = $swap_flags
argstr = sprintf("%s, %d", user_string_quoted($specialfile), swapflags)
}
-probe syscall.swapon.return = kernel.function("sys_swapon").return {
+probe syscall.swapon.return = kernel.function("sys_swapon").return ? {
name = "swapon"
retstr = returnstr(1)
}
@@ -2303,18 +2387,24 @@ probe syscall.sync.return = kernel.function("sys_sync").return {
}
# sysctl _____________________________________________________
#
-# asmlinkage long
-# sys_sysctl(struct __sysctl_args __user *args)
+# long sys_sysctl(struct __sysctl_args __user *args)
+# long sys32_sysctl(struct __sysctl_args32 __user *args)
#
-probe syscall.sysctl = kernel.function("sys_sysctl") {
+probe syscall.sysctl =
+ kernel.function("sys_sysctl"),
+ kernel.function("sys32_sysctl") ?
+{
name = "sysctl"
- args_uaddr = $args
- argstr = sprintf("%p", args_uaddr)
+ argstr = sprintf("%p", $args)
}
-probe syscall.sysctl.return = kernel.function("sys_sysctl").return {
+probe syscall.sysctl.return =
+ kernel.function("sys_sysctl").return,
+ kernel.function("sys32_sysctl").return ?
+{
name = "sysctl"
retstr = returnstr(1)
}
+
# sysfs ______________________________________________________
#
# asmlinkage long
diff --git a/tapset/x86_64/syscalls.stp b/tapset/x86_64/syscalls.stp
index e97a941e..de070a7d 100644
--- a/tapset/x86_64/syscalls.stp
+++ b/tapset/x86_64/syscalls.stp
@@ -1,3 +1,5 @@
+# x86_64-specific system calls
+
# arch_prctl _________________________________________________
# long sys_arch_prctl(int code, unsigned long addr)
#
@@ -47,4 +49,24 @@ probe syscall.sigaltstack.return = kernel.function("sys_sigaltstack").return {
retstr = returnstr(1)
}
+# mmap
+# long sys_mmap(unsigned long addr, unsigned long len,
+# unsigned long prot, unsigned long flags,
+# unsigned long fd, unsigned long off)
+probe syscall.mmap = kernel.function("sys_mmap") ? {
+ name = "mmap"
+ start = $addr
+ len = $len
+ prot = $prot
+ flags = $flags
+ fd = $fd
+ offset = $off
+ argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len,
+ _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $off)
+}
+
+probe syscall.mmap.return = kernel.function("sys_mmap").return ? {
+ name = "mmap"
+ retstr = returnstr(2)
+}