diff options
Diffstat (limited to 'tapset/aux_syscalls.stp')
-rw-r--r-- | tapset/aux_syscalls.stp | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp index d80139a4..708432c6 100644 --- a/tapset/aux_syscalls.stp +++ b/tapset/aux_syscalls.stp @@ -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) { |