This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
Re: [Patch]Improve retstr of syscall.adjtimex.return in tapset
- From: Martin Hunt <hunt at redhat dot com>
- To: Zhaolei <zhaolei at cn dot fujitsu dot com>
- Cc: systemtap at sourceware dot org
- Date: Fri, 21 Sep 2007 12:09:08 -0400
- Subject: Re: [Patch]Improve retstr of syscall.adjtimex.return in tapset
- Organization: Red Hat Inc.
- References: <46F22F2D.8030705@cn.fujitsu.com> <02cd01c7fc1d$f76ceaf0$85697c0a@guest004>
On Fri, 2007-09-21 at 16:06 +0900, Zhaolei wrote:
> Hi, everyone
>
> In kernel, adjtimex syscall's return value have following types:
> #define TIME_OK 0 /* clock synchronized */
> #define TIME_INS 1 /* insert leap second */
> #define TIME_DEL 2 /* delete leap second */
> #define TIME_OOP 3 /* leap second in progress */
> #define TIME_WAIT 4 /* leap second has occurred */
> #define TIME_BAD 5 /* clock not synchronized */
>
> Current version of tapset can only display return value's error string, and
> display only digital number when return value have other meaning.
> For example, when call adjtimex twice(return 5 and -14)
> Current version of stap's retstr is like:
> 5
> -14 (EFAULT)
>
> I think is may be a good idea to print return value's type string in retstr
> like following:
> 5 (TIME_BAD)
> -14 (EFAULT)
This is a good idea.
> If no objection, I will commit this patch:
>
> Signed-off-by: "Zhaolei" zhaolei@cn.fujitsu.com
>
> diff -up old/aux_syscalls.stp new/aux_syscalls.stp
> --- old/aux_syscalls.stp 2007-08-30 16:24:49.000000000 +0900
> +++ new/aux_syscalls.stp 2007-08-30 16:23:44.000000000 +0900
> @@ -1750,3 +1750,35 @@ function _at_flag_str(f) {
> if (f == 0x100) return "AT_SYMLINK_NOFOLLOW"
> return sprintf("0x%x", f)
> }
> +
> +function _adjtimex_return_str(ret) {
> + if ( ret == 0 )
> + {
> + return sprintf("%d %s", ret, "(TIME_OK)")
> + }
> + if ( ret == 1 )
> + {
> + return sprintf("%d %s", ret, "(TIME_INS)")
> + }
> + if ( ret == 2 )
> + {
> + return sprintf("%d %s", ret, "(TIME_DEL)")
> + }
> + if ( ret == 3 )
> + {
> + return sprintf("%d %s", ret, "(TIME_OOP)")
> + }
> + if ( ret == 4 )
> + {
> + return sprintf("%d %s", ret, "(TIME_WAIT)")
> + }
> + if ( ret == 5 )
> + {
> + return sprintf("%d %s", ret, "(TIME_BAD)")
> + }
> + return returnstr(1)
> +}
or a bit simpler:
function _adjtimex_return_str(ret) {
if (ret == 0)
val = "OK"
else if (ret == 1)
val = "INS"
else if (ret == 2)
val = "DEL"
else if (ret == 3)
val = "OOP"
else if (ret == 4)
val = "WAIT"
else if (ret == 5)
val = "BAD"
if (val != "")
return sprintf("%d (TIME_%s)", ret, val)
else
return returnstr(1)
}