summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhunt <hunt>2006-07-21 20:56:53 +0000
committerhunt <hunt>2006-07-21 20:56:53 +0000
commit16d0ba0e20666baa63768ffb123c81927fbdfc85 (patch)
tree25e102cd9237c338cf4e71a1efaec28ba2583e85
parent8ec2ec15a82b10dc3315cd558c72bbe6f5ef543b (diff)
downloadsystemtap-steved-16d0ba0e20666baa63768ffb123c81927fbdfc85.tar.gz
systemtap-steved-16d0ba0e20666baa63768ffb123c81927fbdfc85.tar.xz
systemtap-steved-16d0ba0e20666baa63768ffb123c81927fbdfc85.zip
*** empty log message ***
-rw-r--r--tapset/aux_syscalls.stp75
-rw-r--r--tapset/i686/syscalls.stp13
-rw-r--r--tapset/ppc64/syscalls.stp244
-rw-r--r--tapset/syscalls.stp2
-rw-r--r--tapset/syscalls2.stp2
-rw-r--r--tapset/x86_64/syscalls.stp12
6 files changed, 76 insertions, 272 deletions
diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp
index e50bb89e..951dc293 100644
--- a/tapset/aux_syscalls.stp
+++ b/tapset/aux_syscalls.stp
@@ -17,6 +17,21 @@ function _struct_timeval_u:string(uaddr:long)
}
%}
+function _struct_compat_timeval_u:string(uaddr:long)
+%{ /* pure */
+ struct compat_timeval tv;
+ char *ptr = (char *)(unsigned long)THIS->uaddr;
+
+ if (ptr == NULL)
+ strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
+ else {
+ if(_stp_copy_from_user((char*)&tv,ptr,sizeof(struct compat_timeval)) == 0)
+ snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld]", (long)tv.tv_sec, (long)tv.tv_usec);
+ else
+ strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
+ }
+%}
+
function _struct_timeval:string(addr:long)
%{ /* pure */
struct timeval *tv;
@@ -90,7 +105,26 @@ function _struct_utimbuf_u:string(uaddr:long)
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
- if(_stp_copy_from_user((char*)&ubuf,ptr,sizeof(struct utimbuf)) == 0) {
+ if(_stp_copy_from_user((char*)&ubuf,ptr,sizeof(ubuf)) == 0) {
+ _stp_ctime(ubuf.actime, abuf, 24);
+ _stp_ctime(ubuf.modtime, mbuf, 24);
+ snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s, %s", abuf, mbuf);
+ } else
+ strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
+ }
+%}
+
+function _struct_compat_utimbuf_u:string(uaddr:long)
+%{ /* pure */
+ #include <linux/utime.h>
+ struct compat_utimbuf ubuf;
+ static char abuf[24], mbuf[24];
+ char *ptr = (char *)(unsigned long)THIS->uaddr;
+
+ if (ptr == NULL)
+ strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
+ else {
+ if(_stp_copy_from_user((char*)&ubuf,ptr,sizeof(ubuf)) == 0) {
_stp_ctime(ubuf.actime, abuf, 24);
_stp_ctime(ubuf.modtime, mbuf, 24);
snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s, %s", abuf, mbuf);
@@ -114,6 +148,21 @@ function _struct_timespec_u:string(uaddr:long)
(unsigned long)ts.tv_sec, (unsigned long)ts.tv_nsec);
}
%}
+function _struct_compat_timespec_u:string(uaddr:long)
+%{ /* pure */
+ struct compat_timespec ts;
+ char *ptr = (char *)(unsigned long)THIS->uaddr;
+
+ if (ptr == NULL)
+ strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
+ else {
+ if(_stp_copy_from_user((char *)&ts,ptr,sizeof(struct compat_timespec))) {
+ strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
+ } else
+ snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%09ld]",
+ (unsigned long)ts.tv_sec, (unsigned long)ts.tv_nsec);
+ }
+%}
function _struct_timespec:string(addr:long)
%{ /* pure */
@@ -163,6 +212,23 @@ function _struct_itimerval_u:string(uaddr:long)
}
%}
+function _struct_compat_itimerval_u:string(uaddr:long)
+%{ /* pure */
+ struct compat_itimerval itv;
+ char *ptr = (char *)(unsigned long)THIS->uaddr;
+
+ if (ptr == NULL)
+ strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
+ else {
+ if(_stp_copy_from_user((char *)&itv,ptr,sizeof(struct compat_itimerval)))
+ strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
+ else
+ snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%d.%06d,%d.%06d]",
+ (int)itv.it_interval.tv_sec, (int)itv.it_interval.tv_usec,
+ (int)itv.it_value.tv_sec, (int)itv.it_value.tv_usec);
+ }
+%}
+
function _struct_itimerval:string(addr:long)
%{ /* pure */
struct itimerval *itv;
@@ -1445,3 +1511,10 @@ function __short:long(val:long) %{ /* pure */
THIS->__retvalue = (short)THIS->val;
%}
+
+/* uid_t is unsigned, but calling functions take "-1" as a paremeter */
+/* so this hack is necessary to correct that mismatch. */
+function __uid:long(val:long) %{ /* pure */
+ THIS->__retvalue = (int)THIS->val;
+%}
+
diff --git a/tapset/i686/syscalls.stp b/tapset/i686/syscalls.stp
index a7dfa4fc..1880ab9f 100644
--- a/tapset/i686/syscalls.stp
+++ b/tapset/i686/syscalls.stp
@@ -398,19 +398,6 @@ probe syscall.sigsuspend.return =
name = "sigsuspend"
retstr = returnstr(1)
}
-# stat64 _____________________________________________________
-# long sys_stat64(char __user * filename,
-# struct stat64 __user * statbuf)
-probe syscall.stat64 = kernel.function("sys_stat64") {
- name = "stat"
- filename = user_string($filename)
- buf_uaddr = $statbuf
- argstr = sprintf("\"%s\", %p", filename, $statbuf)
-}
-probe syscall.stat64.return = kernel.function("sys_stat64").return {
- name = "stat"
- retstr = returnstr(1)
-}
# vm86 _______________________________________________________
/*
diff --git a/tapset/ppc64/syscalls.stp b/tapset/ppc64/syscalls.stp
index fbecd156..547ba47c 100644
--- a/tapset/ppc64/syscalls.stp
+++ b/tapset/ppc64/syscalls.stp
@@ -1,20 +1,4 @@
-# compat_sys_nanosleep ________________________________________
-#
-# asmlinkage long compat_sys_nanosleep(struct compat_timespec __user *rqtp,
-# struct compat_timespec __user *rmtp)
-#
-probe syscall.compat_sys_nanosleep = kernel.function("compat_sys_nanosleep") {
- name = "compat_sys_nanosleep"
- rqtp_uaddr = $rqtp
- rmtp_uaddr = $rmtp
- argstr = sprintf("%p, %p", rqtp_uaddr, rmtp_uaddr)
-}
-probe syscall.compat_sys_nanosleep.return =
- kernel.function("compat_sys_nanosleep").return {
- name = "compat_sys_nanosleep"
- retstr = returnstr(1)
-}
# compat_sys_getitimer ________________________________________
#
# asmlinkage long compat_sys_getitimer(int which,
@@ -31,25 +15,6 @@ probe syscall.compat_sys_getitimer.return =
name = "compat_sys_getitimer"
retstr = returnstr(1)
}
-# compat_sys_setitimer ________________________________________
-#
-# asmlinkage long compat_sys_setitimer(int which,
-# struct compat_itimerval __user *in,
-# struct compat_itimerval __user *out)
-#
-probe syscall.compat_sys_setitimer = kernel.function("compat_sys_setitimer") {
- name = "compat_sys_setitimer"
- which = $which
- value_uaddr = $in
- ovalue_uaddr = $out
- argstr = sprintf("%s, %s, %p", _itimer_which_str($which),
- _struct_itimerval_u($in), $out)
-}
-probe syscall.compat_sys_setitimer.return =
- kernel.function("compat_sys_setitimer").return {
- name = "compat_sys_setitimer"
- retstr = returnstr(1)
-}
# compat_sys_times ________________________________________
#
# asmlinkage long compat_sys_times(struct compat_tms __user *tbuf)
@@ -241,22 +206,6 @@ probe syscall.compat_sys_sched_getaffinity.return =
name = "compat_sys_sched_getaffinity"
retstr = returnstr(1)
}
-# compat_sys_utime ________________________________________
-#
-# asmlinkage long compat_sys_utime(char __user *filename,
-# struct compat_utimbuf __user *t)
-#
-probe syscall.compat_sys_utime = kernel.function("compat_sys_utime") {
- name = "compat_sys_utime"
- path = user_string($filename)
- buf_uaddr = $t
- argstr = sprintf("%s, %p", user_string_quoted($filename), buf_uaddr)
-}
-probe syscall.compat_sys_utime.return =
- kernel.function("compat_sys_utime").return {
- name = "compat_sys_utime"
- retstr = returnstr(1)
-}
# compat_sys_utimes ________________________________________
#
# asmlinkage long compat_sys_utimes(char __user *filename,
@@ -274,22 +223,6 @@ probe syscall.compat_sys_utimes.return =
name = "compat_sys_utimes"
retstr = returnstr(1)
}
-# compat_sys_newstat ________________________________________
-#
-# asmlinkage long compat_sys_newstat(char __user * filename,
-# struct compat_stat __user *statbuf)
-#
-probe syscall.compat_sys_newstat = kernel.function("compat_sys_newstat") {
- name = "compat_sys_newstat"
- path = user_string($filename)
- buf_uaddr = $statbuf
- argstr = sprintf("%s, %p", user_string_quoted($filename), buf_uaddr)
-}
-probe syscall.compat_sys_newstat.return =
- kernel.function("compat_sys_newstat").return {
- name = "compat_sys_newstat"
- retstr = returnstr(1)
-}
# compat_sys_newlstat ________________________________________
#
# asmlinkage long compat_sys_newlstat(char __user * filename,
@@ -306,54 +239,6 @@ probe syscall.compat_sys_newlstat.return =
name = "compat_sys_newlstat"
retstr = returnstr(1)
}
-# compat_sys_newfstat ________________________________________
-#
-# asmlinkage long compat_sys_newfstat(unsigned int fd,
-# struct compat_stat __user * statbuf)
-#
-probe syscall.compat_sys_newfstat = kernel.function("compat_sys_newfstat") {
- name = "compat_sys_newfstat"
- filedes = $fd
- buf_uaddr = $statbuf
- argstr = sprintf("%d, %p", filedes, buf_uaddr)
-}
-probe syscall.compat_sys_newfstat.return =
- kernel.function("compat_sys_newfstat").return {
- name = "compat_sys_newfstat"
- retstr = returnstr(1)
-}
-# compat_sys_statfs ________________________________________
-#
-# asmlinkage long compat_sys_statfs(const char __user *path,
-# struct compat_statfs __user *buf)
-#
-probe syscall.compat_sys_statfs = kernel.function("compat_sys_statfs") {
- name = "statfs"
- path = user_string($path)
- buf_uaddr = $buf
- argstr = sprintf("%s, %p", path, buf_uaddr)
-}
-probe syscall.compat_sys_statfs.return =
- kernel.function("compat_sys_statfs").return {
- name = "compat_sys_statfs"
- retstr = returnstr(1)
-}
-# compat_sys_fstatfs ________________________________________
-#
-# asmlinkage long compat_sys_fstatfs(unsigned int fd,
-# struct compat_statfs __user *buf)
-#
-probe syscall.compat_sys_fstatfs = kernel.function("compat_sys_fstatfs") {
- name = "fstatfs"
- fd = $fd
- buf_uaddr = $buf
- argstr = sprintf("%d, %p", fd, buf_uaddr)
-}
-probe syscall.compat_sys_fstatfs.return =
- kernel.function("compat_sys_fstatfs").return {
- name = "fstatfs"
- retstr = returnstr(1)
-}
# lstat ______________________________________________________
# long sys_lstat(char __user * filename, struct __old_kernel_stat __user * statbuf)
probe syscall.lstat64 =
@@ -475,30 +360,6 @@ probe syscall.compat_sys_io_submit.return =
name = "compat_sys_io_submit"
retstr = returnstr(1)
}
-# compat_sys_mount ________________________________________
-#
-# asmlinkage long compat_sys_mount(char __user * dev_name,
-# char __user * dir_name,
-# char __user * type,
-# unsigned long flags,
-# void __user * data)
-#
-probe syscall.compat_sys_mount = kernel.function("compat_sys_mount") {
- name = "mount"
- source = user_string($dev_name)
- target = user_string($dir_name)
- filesystemtype = user_string($type)
- mountflags = $flags
- data_uaddr = $data
- argstr = sprintf("\"%s\", \"%s\", \"%s\", %s, %p", source,
- target, filesystemtype, _mountflags_str($flags),
- data_uaddr)
-}
-probe syscall.compat_sys_mount.return =
- kernel.function("compat_sys_mount").return {
- name = "mount"
- retstr = returnstr(1)
-}
# compat_sys_getdents ________________________________________
#
# asmlinkage long compat_sys_getdents(unsigned int fd,
@@ -535,47 +396,6 @@ probe syscall.compat_sys_getdents64.return =
name = "compat_sys_getdents64"
retstr = returnstr(1)
}
-# compat_sys_readv ________________________________________
-#
-# asmlinkage ssize_t compat_sys_readv(unsigned long fd,
-# const struct compat_iovec __user *vec,
-# unsigned long vlen)
-#
-probe syscall.compat_sys_readv = kernel.function("compat_sys_readv") {
- name = "readv"
-/* FIXME: RHEL4 U3 ppc64 can't resolve $fd */
- fd = $fd
- vector_uaddr = $vec
- count = $vlen
-// argstr = sprintf("unknown fd, %p, %p", vector_uaddr, count)
- argstr = sprintf("%d, %p, %p", fd, vector_uaddr, count)
-}
-probe syscall.compat_sys_readv.return =
- kernel.function("compat_sys_readv").return {
- name = "readv"
- retstr = returnstr(1)
-}
-# compat_sys_writev ________________________________________
-#
-# asmlinkage ssize_t compat_sys_writev(unsigned long fd,
-# const struct compat_iovec __user *vec,
-# unsigned long vlen)
-#
-probe syscall.compat_sys_writev = kernel.function("compat_sys_writev") {
- name = "writev"
-/* FIXME: RHEL4 U3 can't resolve $fd */
- fd = $fd
- vector_uaddr = $vec
- count = $vlen
- //argstr = sprintf("unknown fd, %p, %d", vector_uaddr, $vlen)
- argstr = sprintf("%d, %p, %d", fd, vector_uaddr, $vlen)
-}
-probe syscall.compat_sys_writev.return =
- kernel.function("compat_sys_writev").return {
- name = "writev"
- retstr = returnstr(1)
-}
-# compat_sys_select ________________________________________
#
# asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,
# compat_ulong_t __user *outp,
@@ -1134,20 +954,6 @@ probe syscall.sys32_execve.return =
retstr = returnstr(1)
}
-# sys32_time ________________________________________
-#
-# asmlinkage long sys32_time(compat_time_t __user * tloc)
-#
-probe syscall.sys32_time = kernel.function("sys32_time") ? {
- name = "sys32_time"
- /* FIXME */
- t_uaddr = $tloc
- argstr = sprintf("%p", t_uaddr)
-}
-probe syscall.sys32_time.return = kernel.function("sys32_time").return ? {
- name = "sys32_time"
- retstr = returnstr(1)
-}
# ppc64_sys32_stime ________________________________________
#
@@ -1240,38 +1046,6 @@ probe syscall.sys32_sigsuspend.return =
name = "sys32_sigsuspend"
retstr = returnstr(1)
}
-# sys32_gettimeofday ________________________________________
-#
-# asmlinkage long sys32_gettimeofday(struct compat_timeval __user *tv,
-# struct timezone __user *tz)
-#
-probe syscall.sys32_gettimeofday = kernel.function("sys32_gettimeofday") ? {
- name = "sys32_gettimeofday"
- tv_uaddr = $tv
- tz_uaddr = $tz
- argstr = sprintf("%p, %p", tv_uaddr, tz_uaddr)
-}
-probe syscall.sys32_gettimeofday.return =
- kernel.function("sys32_gettimeofday").return ? {
- name = "sys32_gettimeofday"
- retstr = returnstr(1)
-}
-# sys32_settimeofday ________________________________________
-#
-# asmlinkage long sys32_settimeofday(struct compat_timeval __user *tv,
-# struct timezone __user *tz)
-#
-probe syscall.sys32_settimeofday = kernel.function("sys32_settimeofday") ? {
- name = "sys32_settimeofday"
- tv_uaddr = $tv
- tz_uaddr = $tz
- argstr = sprintf("%p, %p", tv_uaddr, tz_uaddr)
-}
-probe syscall.sys32_settimeofday.return =
- kernel.function("sys32_settimeofday").return ? {
- name = "sys32_settimeofday"
- retstr = returnstr(1)
-}
# sys32_sysinfo ________________________________________
#
# asmlinkage long sys32_sysinfo(struct sysinfo32 __user *info)
@@ -1429,24 +1203,6 @@ probe syscall.sys32_rt_sigreturn.return =
name = "sys32_rt_sigreturn"
retstr = returnstr(1)
}
-# sys32_rt_sigaction ________________________________________
-#
-# long sys32_rt_sigaction(int sig, const struct sigaction32 __user *act,
-# struct sigaction32 __user *oact, size_t sigsetsize)
-#
-probe syscall.sys32_rt_sigaction = kernel.function("sys32_rt_sigaction") ? {
- name = "sys32_rt_sigaction"
- sig = $sig
- act_uaddr = $act
- oact_uaddr = $oact
- sigsetsize = $sigsetsize
- argstr = sprintf("%s, %p, %p, %d", _signal_name($sig), $act, $oact, $sigsetsize)
-}
-probe syscall.sys32_rt_sigaction.return =
- kernel.function("sys32_rt_sigaction").return ? {
- name = "sys32_rt_sigaction"
- retstr = returnstr(1)
-}
# sys32_rt_sigprocmask ________________________________________
#
# long sys32_rt_sigprocmask(u32 how, compat_sigset_t __user *set,
diff --git a/tapset/syscalls.stp b/tapset/syscalls.stp
index 51121f9c..a613ffa9 100644
--- a/tapset/syscalls.stp
+++ b/tapset/syscalls.stp
@@ -1042,7 +1042,7 @@ probe syscall.compat_getitimer = kernel.function("compat_sys_getitimer") ? {
value_uaddr = $it
argstr = sprintf("%s, %p", _itimer_which_str($which), $it)
}
-probe syscall.compat_getitimer.return = kernel.function("compat_sys_getitimer").return {
+probe syscall.compat_getitimer.return = kernel.function("compat_sys_getitimer").return ? {
name = "getitimer"
retstr = returnstr(1)
}
diff --git a/tapset/syscalls2.stp b/tapset/syscalls2.stp
index 046c5bb3..fbdfffba 100644
--- a/tapset/syscalls2.stp
+++ b/tapset/syscalls2.stp
@@ -2359,7 +2359,7 @@ probe syscall.compat_utime = kernel.function("compat_sys_utime") ? {
buf_str = _struct_compat_utimbuf_u($t)
argstr = sprintf("%s, [%s]", user_string_quoted($filename), _struct_compat_utimbuf_u($t))
}
-probe syscall.compat_utime.return = kernel.function("compat_sys_utime").return {
+probe syscall.compat_utime.return = kernel.function("compat_sys_utime").return ? {
name = "utime"
retstr = returnstr(1)
}
diff --git a/tapset/x86_64/syscalls.stp b/tapset/x86_64/syscalls.stp
index 4666a72e..2a18aab3 100644
--- a/tapset/x86_64/syscalls.stp
+++ b/tapset/x86_64/syscalls.stp
@@ -124,16 +124,4 @@ probe syscall.sigaltstack.return = kernel.function("sys_sigaltstack").return {
retstr = returnstr(1)
}
-# time64 _____________________________________________________
-# long sys_time64(long __user * tloc)
-#
-probe syscall.time64 = kernel.function("sys_time64") ? {
- name = "time64"
- t_uaddr = $tloc
- argstr = sprintf("%p", $tloc)
-}
-probe syscall.time64.return = kernel.function("sys_time64").return ? {
- name = "time64"
- retstr = returnstr(1)
-}