summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhunt <hunt>2006-05-30 20:25:07 +0000
committerhunt <hunt>2006-05-30 20:25:07 +0000
commitcda594dbd5908e097ead97b6506c2eb8250fc020 (patch)
treef7226b400569eff1ccf35a49c23ccdfaf371ef31
parentd52eedc0a455ea35ca1c90ae1fa5073aad19273b (diff)
downloadsystemtap-steved-cda594dbd5908e097ead97b6506c2eb8250fc020.tar.gz
systemtap-steved-cda594dbd5908e097ead97b6506c2eb8250fc020.tar.xz
systemtap-steved-cda594dbd5908e097ead97b6506c2eb8250fc020.zip
2006-05-30 Martin Hunt <hunt@redhat.com>
* aux_syscalls.stp (_mountflags_str): Rewrite. (_umountflags_str): New.
-rw-r--r--tapset/ChangeLog5
-rw-r--r--tapset/aux_syscalls.stp76
-rw-r--r--tapset/syscalls.stp43
-rw-r--r--tapset/syscalls2.stp28
4 files changed, 89 insertions, 63 deletions
diff --git a/tapset/ChangeLog b/tapset/ChangeLog
index 37cc7877..b6fea641 100644
--- a/tapset/ChangeLog
+++ b/tapset/ChangeLog
@@ -1,5 +1,10 @@
2006-05-30 Martin Hunt <hunt@redhat.com>
+ * aux_syscalls.stp (_mountflags_str): Rewrite.
+ (_umountflags_str): New.
+
+ * syscalls.stp (fstatfs.return): Add retstr.
+
* syscalls2.stp (sys_write): Use text_strn().
* syscalls.stp (sys_lseek): Fix.
(sys_llseek): Fix.
diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp
index aa0b8039..a7370f61 100644
--- a/tapset/aux_syscalls.stp
+++ b/tapset/aux_syscalls.stp
@@ -421,6 +421,7 @@ function __sem_flags:string(semflg:long)
function __fork_flags:string(flags:long)
%{ /* pure */
+ int len;
long flags = THIS->flags;
char *str = THIS->__retvalue;
if (flags & CLONE_FS)
@@ -451,7 +452,9 @@ function __fork_flags:string(flags:long)
strlcat(str, "CLONE_CHILD_SETTID|", MAXSTRINGLEN);
if (flags & CLONE_STOPPED)
strlcat(str, "CLONE_STOPPED|", MAXSTRINGLEN);
- str[strlen(str)-1] = 0;
+ len = strlen(str);
+ if (len)
+ str[strlen(str)-1] = 0;
%}
/* This function copies an argv from userspace. */
@@ -949,22 +952,61 @@ function _futex_op_str(op) {
return ""
}
-function _mountflags_str(op) {
- if(op==1) return "MS_RDONLY"
- if(op==2) return "MS_NOSUID"
- if(op==4) return "MS_NODEV"
- if(op==8) return "MS_NOEXEC"
- if(op==16) return "MS_SYNCHRONOUS"
- if(op==32) return "MS_REMOUNT"
- if(op==64) return "MS_MANDLOCK"
- if(op==128) return "S_WRITE"
- if(op==256) return "S_APPEND"
- if(op==512) return "S_IMMUTABLE"
- if(op==1024) return "MS_NOATIME"
- if(op==2048) return "MS_NODIRATIME"
- if(op==4096) return "MS_BIND"
- return ""
-}
+function _mountflags_str:string(op:long)
+%{ /* pure */
+ int len, op = THIS->op;
+ char *str = THIS->__retvalue;
+ if (op & MS_BIND)
+ strlcat(str,"MS_BIND|",MAXSTRINGLEN);
+ if (op & MS_DIRSYNC)
+ strlcat(str,"MS_DIRSYNC|",MAXSTRINGLEN);
+ if (op & MS_MANDLOCK)
+ strlcat(str,"MS_MANDLOCK|",MAXSTRINGLEN);
+ if (op & MS_MOVE)
+ strlcat(str,"MS_MOVE|",MAXSTRINGLEN);
+ if (op & MS_NOATIME)
+ strlcat(str,"MS_NOATIME|",MAXSTRINGLEN);
+ if (op & MS_NODEV)
+ strlcat(str,"MS_NODEV|",MAXSTRINGLEN);
+ if (op & MS_NODIRATIME)
+ strlcat(str,"MS_NODIRATIME|",MAXSTRINGLEN);
+ if (op & MS_NOEXEC)
+ strlcat(str,"MS_NOEXEC|",MAXSTRINGLEN);
+ if (op & MS_NOSUID)
+ strlcat(str,"MS_NOSUID|",MAXSTRINGLEN);
+ if (op & MS_RDONLY)
+ strlcat(str,"MS_RDONLY|",MAXSTRINGLEN);
+ if (op & MS_REC)
+ strlcat(str,"MS_REC|",MAXSTRINGLEN);
+ if (op & MS_REMOUNT)
+ strlcat(str,"MS_REMOUNT|",MAXSTRINGLEN);
+ if (op & MS_SYNCHRONOUS)
+ strlcat(str,"MS_SYNCHRONOUS|",MAXSTRINGLEN);
+ if (op & MS_VERBOSE)
+ strlcat(str,"MS_VERBOSE|",MAXSTRINGLEN);
+ len = strlen(str);
+ if (len)
+ str[strlen(str)-1] = 0;
+%}
+
+function _umountflags_str:string(op:long)
+%{ /* pure */
+ int len, op = THIS->op;
+ char *str = THIS->__retvalue;
+ if (op == 0)
+ strlcat(str,"0",MAXSTRINGLEN);
+ else {
+ if (op & MNT_FORCE)
+ strlcat(str,"MNT_FORCE|",MAXSTRINGLEN);
+ if (op & MNT_DETACH)
+ strlcat(str,"MNT_DETACH|",MAXSTRINGLEN);
+ if (op & MNT_EXPIRE)
+ strlcat(str,"MNT_EXPIRE|",MAXSTRINGLEN);
+ len = strlen(str);
+ if (len)
+ str[strlen(str)-1] = 0;
+ }
+%}
function _statfs_f_type_str(f) {
if(f==0xadf5) return "ADFS_SUPER_MAGIC"
diff --git a/tapset/syscalls.stp b/tapset/syscalls.stp
index 67b1d185..b1db1d76 100644
--- a/tapset/syscalls.stp
+++ b/tapset/syscalls.stp
@@ -699,6 +699,7 @@ probe syscall.fstatfs = kernel.function("sys_fstatfs") {
}
probe syscall.fstatfs.return = kernel.function("sys_fstatfs").return {
name = "fstatfs"
+ retstr = returnstr(1)
}
# fstatfs64 __________________________________________________
@@ -1685,28 +1686,26 @@ probe kernel.syscall.modify_ldt.return =
name = "modify_ldt.return"
}
# mount ______________________________________________________
-/*
- * asmlinkage long
- * sys_mount(char __user * dev_name,
- * char __user * dir_name,
- * char __user * type,
- * unsigned long flags,
- * void __user * data)
- */
-probe kernel.syscall.mount =
- kernel.function("sys_mount") {
- name = "mount"
- source_uaddr = $dev_name
- target_uaddr = $dir_name
- filesystemtype_uaddr = $type
- mountflags = $flags
- mountflags_str = _mountflags_str($flags)
- data_uaddr = $data
- }
-probe kernel.syscall.mount.return =
- kernel.function("sys_mount").return {
- name = "mount.return"
- }
+# long sys_mount(char __user * dev_name,
+# char __user * dir_name,
+# char __user * type,
+# unsigned long flags,
+# void __user * data)
+probe syscall.mount = kernel.function("sys_mount") {
+ name = "mount"
+ source = user_string($dev_name)
+ target = user_string($dir_name)
+ filesystemtype = user_string($type)
+ mountflags = $flags
+ mountflags_str = _mountflags_str($flags)
+ data = text_strn(user_string($data),30,1)
+ argstr = sprintf("\"%s\", \"%s\", \"%s\", %s, %s", source, target, filesystemtype, mountflags_str, data)
+}
+probe syscall.mount.return = kernel.function("sys_mount").return {
+ name = "mount"
+ retstr = returnstr(1)
+}
+
# mprotect ___________________________________________________
/*
* asmlinkage long
diff --git a/tapset/syscalls2.stp b/tapset/syscalls2.stp
index 3ec69d00..13bb8c6d 100644
--- a/tapset/syscalls2.stp
+++ b/tapset/syscalls2.stp
@@ -196,22 +196,6 @@ probe syscall.old_getrlimit.return = kernel.function("sys_old_getrlimit").return
name = "old_getrlimit"
retstr = returnstr(1)
}
-# oldumount __________________________________________________
-#
-# asmlinkage long
-# sys_oldumount(char __user * name)
-#
-probe syscall.oldumount = kernel.function("sys_umount") {
- name = "oldumount"
- name_str = user_string($name)
- /* man page 2 umount shows the argument name as "target" */
- target = name_str
- argstr = name_str
-}
-probe syscall.oldumount.return = kernel.function("sys_umount").return {
- name = "oldumount"
- retstr = returnstr(1)
-}
# pause ______________________________________________________
#
# sys_pause(void)
@@ -2222,18 +2206,14 @@ probe syscall.truncate64.return = kernel.function("sys_truncate64").return {
retstr = returnstr(1)
}
# umount _____________________________________________________
-#
-# asmlinkage long
-# sys_umount(char __user * name,
-# int flags)
+# long sys_umount(char __user * name, int flags)
#
probe syscall.umount = kernel.function("sys_umount") {
name = "umount"
- target_uaddr = $name
- name_str = user_string($name)
+ target = user_string($name)
flags = $flags
- flags_str = _mountflags_str($flags)
- argstr = sprintf("%s, %s", name_str, flags_str)
+ flags_str = _umountflags_str($flags)
+ argstr = sprintf("\"%s\", %s", target, flags_str)
}
probe syscall.umount.return = kernel.function("sys_umount").return {
name = "umount"