]> sourceware.org Git - systemtap.git/commitdiff
2007-07-03 Martin Hunt <hunt@redhat.com>
authorhunt <hunt>
Tue, 3 Jul 2007 21:43:20 +0000 (21:43 +0000)
committerhunt <hunt>
Tue, 3 Jul 2007 21:43:20 +0000 (21:43 +0000)
* syscalls.stp: Add sys_futimesat, compat_sys_futimesat.
* syscalls2.stp (utimes): Use _struct_timeval2_u.
* aux_syscalls.stp (_struct_timeval2_u): New function.
(_struct_compat_timeval2_u): New function.

tapset/ChangeLog
tapset/aux_syscalls.stp
tapset/syscalls.stp
tapset/syscalls2.stp

index 0e1898e4558169f9fed4c69d408a993f39a4c8f1..bab447c2a70a380cc8e2a956a275c58cbfb609a9 100644 (file)
@@ -1,3 +1,10 @@
+2007-07-03  Martin Hunt  <hunt@redhat.com>
+
+       * syscalls.stp: Add sys_futimesat, compat_sys_futimesat.
+       * syscalls2.stp (utimes): Use _struct_timeval2_u.
+       * aux_syscalls.stp (_struct_timeval2_u): New function.
+       (_struct_compat_timeval2_u): New function.
+
 2007-07-02  Martin Hunt  <hunt@redhat.com>
 
        * context.stp (print_backtrace): If no regs, just
index d80139a481fcdfea9ecfe53e5576781c0b50c356..708432c697cf699651c3fee6bf6653975c390e6f 100644 (file)
@@ -2,6 +2,22 @@
 # Given a userspace pointer to a timeval,
 # copy and decode it and return a string.
 #
+function _struct_timeval2_u:string(uaddr:long)
+%{ /* pure */
+       struct timeval tv[2];
+       char *ptr = (char *)(unsigned long)THIS->uaddr;
+
+       if (ptr == NULL)
+               strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
+       else {
+               if(_stp_copy_from_user((char*)&tv,ptr,2*sizeof(struct timeval)) == 0)
+                       snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld][%ld.%.06ld]", 
+                               tv[0].tv_sec, tv[0].tv_usec, tv[1].tv_sec, tv[1].tv_usec);
+               else
+                       strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
+       }
+%}
+
 function _struct_timeval_u:string(uaddr:long)
 %{ /* pure */
        struct timeval tv;
@@ -32,6 +48,22 @@ function _struct_compat_timeval_u:string(uaddr:long)
        }
 %}
 
+function _struct_compat_timeval2_u:string(uaddr:long)
+%{ /* pure */
+       struct timeval tv[2];
+       char *ptr = (char *)(unsigned long)THIS->uaddr;
+
+       if (ptr == NULL)
+               strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
+       else {
+               if(_stp_copy_from_user((char*)&tv,ptr,2*sizeof(struct compat_timeval)) == 0)
+                       snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld][%ld.%.06ld]", 
+                               tv[0].tv_sec, tv[0].tv_usec, tv[1].tv_sec, tv[1].tv_usec);
+               else
+                       strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
+       }
+%}
+
 function _struct_timeval:string(addr:long)
 %{ /* pure */
        struct timeval *tv = (struct timeval *)(unsigned long)THIS->addr;
@@ -820,7 +852,7 @@ function _get_wc_str(wc) {
    if(wc==3) return "CLOCK_THREAD_CPUTIME_ID"
    if(wc==4) return "CLOCK_REALTIME_HR"
    if(wc==5) return "CLOCK_MONOTONIC_HR"
-   return ""
+   return "CLOCK_UNKNOWN"
 }
 
 function _flock_cmd_str(c) {
index ba52cc0933f04bf3d8559289950f5d64ffce236f..a2a2419f41fef25428b0403400c3cd027f538338 100644 (file)
@@ -920,6 +920,39 @@ probe syscall.futex.return = kernel.function("sys_futex").return {
        retstr = returnstr(1)
 }
 
+# futimesat _____________________________________________________
+#
+# long sys_futimesat(int dfd, char __user *filename, struct timeval __user *utimes)
+# long compat_sys_futimesat(unsigned int dfd, char __user *filename, struct compat_timeval __user *t)
+#
+
+probe syscall.futimesat = kernel.function("sys_futimesat") ? {
+       name = "futimesat"
+       dirfd = $dfd
+       filename_uaddr = $filename
+       filename = user_string($filename)
+       tvp_uaddr = $utimes
+       argstr = sprintf("%d, %s, %s", $dfd, user_string_quoted($filename),  
+               _struct_timeval2_u($utimes))
+}
+probe syscall.compat_futimesat = kernel.function("compat_sys_futimesat") ? {
+       name = "futimesat"
+       dirfd = $dfd
+       filename_uaddr = $filename
+       filename = user_string($filename)
+       tvp_uaddr = $utimes
+       argstr = sprintf("%d, %s, %s", $dfd, user_string_quoted($filename),  
+               _struct_compat_timeval2_u($utimes))
+}
+probe syscall.futimesat.return = kernel.function("sys_futimesat").return ? {
+       name = "futimesat"
+       retstr = returnstr(1)
+}
+probe syscall.compat_futimesat.return = kernel.function("compat_sys_futimesat").return ? {
+       name = "futimesat"
+       retstr = returnstr(1)
+}
+
 # getcwd _____________________________________________________
 # long sys_getcwd(char __user *buf, unsigned long size)
 probe syscall.getcwd = kernel.function("sys_getcwd") {
index fec0dc5529d5ab7eab02cb7a491966439ddf4247..968def004d0eded6cf145dd7e074a8d8157bc7c2 100644 (file)
@@ -2386,7 +2386,7 @@ probe syscall.utimes = kernel.function("sys_utimes") {
        filename = user_string($filename)
        tvp_uaddr = $utimes
        argstr = sprintf("%s, %s", user_string_quoted($filename),  
-               _struct_timeval_u($utimes))
+               _struct_timeval2_u($utimes))
 }
 probe syscall.utimes.return = kernel.function("sys_utimes").return {
        name = "utimes"
This page took 0.044553 seconds and 5 git commands to generate.