retstr = returnstr(1)
}
+# pwritev ___________________________________________________
+#
+# sys_pwritev(unsigned long fd, const struct iovec __user * vec,
+# unsigned long vlen, unsigned long pos_l, unsigned long pos_h)
+# compat_sys_pwritev(unsigned long fd, const struct compat_iovec __user *vec,
+# unsigned long vlen, u32 pos_low, u32 pos_high)
+#
+probe nd_syscall.pwritev = __nd_syscall.pwritev ?,
+ __nd_syscall.compat_pwritev ?
+{
+ name = "pwritev"
+}
+probe __nd_syscall.pwritev = kprobe.function("sys_pwritev").call
+{
+ // fd = $fd
+ // vector_uaddr = $vec
+ // count = $vlen
+ // offset = ($pos_h << %{ BITS_PER_LONG %}) + $pos_l
+ // argstr = sprintf("%d, %p, %d, 0x%x", $fd, $vec, $vlen,
+ // ($pos_h << %{ BITS_PER_LONG %}) + $pos_l)
+ asmlinkage()
+ fd = int_arg(1)
+ vector_uaddr = pointer_arg(2)
+ count = int_arg(3)
+ offset = (ulong_arg(5) << %{ BITS_PER_LONG %}) + ulong_arg(4)
+ argstr = sprintf("%d, %p, %d, 0x%x", fd, vector_uaddr, count, offset)
+}
+probe __nd_syscall.compat_pwritev = kprobe.function("compat_sys_pwritev").call
+{
+ // fd = $fd
+ // vector_uaddr = $vec
+ // count = $vlen
+ // offset = ($pos_high << 32) + $pos_low
+ // argstr = sprintf("%d, %p, %d, 0x%x", $fd, $vec, $vlen,
+ // ($pos_high << 32) + $pos_low)
+ asmlinkage()
+ fd = int_arg(1)
+ vector_uaddr = pointer_arg(2)
+ count = int_arg(3)
+ offset = (u32_arg(5) << 32) + u32_arg(4)
+ argstr = sprintf("%d, %p, %d, 0x%x", fd, vector_uaddr, count, offset)
+}
+probe nd_syscall.pwritev.return =
+ kprobe.function("sys_pwritev").return ?,
+ kprobe.function("compat_sys_pwritev").return ?
+{
+ name = "pwritev"
+ retstr = returnstr(1)
+}
+
# quotactl ___________________________________________________
#
# long sys_quotactl(unsigned int cmd,
retstr = return_str(1, $return)
}
+# pwritev ___________________________________________________
+#
+# sys_pwritev(unsigned long fd, const struct iovec __user * vec,
+# unsigned long vlen, unsigned long pos_l, unsigned long pos_h)
# compat_sys_pwritev(unsigned long fd, const struct compat_iovec __user *vec,
# unsigned long vlen, u32 pos_low, u32 pos_high)
-probe syscall.pwritev = kernel.function("compat_sys_pwritev").call ?
+#
+probe syscall.pwritev = __syscall.pwritev ?, __syscall.compat_pwritev ?
{
name = "pwritev"
+}
+probe __syscall.pwritev = kernel.function("sys_pwritev").call
+{
+ fd = $fd
vector_uaddr = $vec
count = $vlen
- fd = $fd
- offset = ($pos_high << 32) + $pos_low
- argstr = sprintf("%d, %p, %d %d", $fd, $vec, $vlen,
- ($pos_high << 32) + $pos_low)
+ offset = ($pos_h << %{ BITS_PER_LONG %}) + $pos_l
+ argstr = sprintf("%d, %p, %d, 0x%x", $fd, $vec, $vlen,
+ ($pos_h << %{ BITS_PER_LONG %}) + $pos_l)
}
-# sys_pwritev(unsigned long fd, const struct iovec __user * vec,
-# unsigned long vlen, unsigned long pos_l, unsigned long pos_h)
-probe syscall.pwritev = kernel.function("sys_pwritev").call
+probe __syscall.compat_pwritev = kernel.function("compat_sys_pwritev").call
{
- name = "pwritev"
+ fd = $fd
vector_uaddr = $vec
count = $vlen
- fd = $fd
- offset = ($pos_h << 32) + $pos_l
- argstr = sprintf("%d, %p, %d %d", $fd, $vec, $vlen,
- ($pos_h << 32) + $pos_l)
+ offset = ($pos_high << 32) + $pos_low
+ argstr = sprintf("%d, %p, %d, 0x%x", $fd, $vec, $vlen,
+ ($pos_high << 32) + $pos_low)
}
-probe syscall.pwritev.return = kernel.function("compat_sys_pwritev").return ?,
- kernel.function("sys_writev").return
+probe syscall.pwritev.return = kernel.function("sys_pwritev").return ?,
+ kernel.function("compat_sys_pwritev").return ?
{
name = "pwritev"
retstr = return_str(1, $return)
printf("%s %s\n", name, retstr)
}
+probe syscall.pwritev ?
+{
+ printf("%s(%s)\n", name, argstr)
+ printf("%d %p %d %d\n", fd, vector_uaddr, count, offset)
+}
+probe syscall.pwritev.return ?
+{
+ printf("%s %s\n", name, retstr)
+}
+
probe nd_syscall.quotactl
{
printf("%s(%s)\n", name, argstr)
printf("%s %s\n", name, retstr)
}
+probe syscall.pwritev ?
+{
+ printf("%s(%s)\n", name, argstr)
+ printf("%d %p %d %d\n", fd, vector_uaddr, count, offset)
+}
+probe syscall.pwritev.return ?
+{
+ printf("%s %s\n", name, retstr)
+}
+
probe syscall.quotactl
{
printf("%s(%s)\n", name, argstr)
-/* COVERAGE: read write readv writev lseek llseek */
+/* COVERAGE: read write readv writev pwritev lseek llseek */
+#define _BSD_SOURCE
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
writev(fd, v, 3);
//staptest// writev (NNNN, XXXX, 3) = 15
+#ifdef SYS_pwritev
+ pwritev(fd, v, 3, 0);
+ //staptest// pwritev (NNNN, XXXX, 3, 0x0) = 15
+
+ pwritev(fd, v, 3, 0x10);
+ //staptest// pwritev (NNNN, XXXX, 3, 0x10) = 15
+#endif
+
lseek(fd, 0, SEEK_SET);
//staptest// lseek (NNNN, 0, SEEK_SET) = 0