This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
[Patch]Fix the output of argument "options" for wait4, waitpid and waitid
- From: Cai Fei <caifei at cn dot fujitsu dot com>
- To: systemtap at sourceware dot org
- Date: Thu, 23 Aug 2007 08:57:49 +0900
- Subject: [Patch]Fix the output of argument "options" for wait4, waitpid and waitid
Hi, all
The system calls wait4, waitpid and waitid has an argument "int options".
About the value of it, wait and waitpid's part in man page is:
--------------------------------------
The value of options is an OR of zero or more of the following
constants:
WNOHANG
WUNTRACED
WCONTINUED
--------------------------------------
and waitid's part is:
--------------------------------------
The child state changes to wait for are specified by ORing one or
more of the following flags in options:
WEXITED
WSTOPPED
WCONTINUED
WNOHANG
WNOWAIT
--------------------------------------
and the values of WSTOPPED and WUNTRACED are equal.
In aux_syscalls.stp, the function _wait4_opt_str is used for printing
the flag string of options of all the 3 system calls(wait4, waitpid and
waitid). I think it is not proper to deal with the 3 system calls in the
same way, So I modified the function _wait4_opt_str for wait4 and waitpid,
and added a function _waitid_opt_str for waitid.
Here is the patch:
diff -Nur systemtap-20070818/tapset/aux_syscalls.stp systemtap-20070818new/tapset/aux_syscalls.stp
--- systemtap-20070818/tapset/aux_syscalls.stp 2007-08-16 22:12:07.000000000 +0900
+++ systemtap-20070818new/tapset/aux_syscalls.stp 2007-08-22 17:02:03.000000000 +0900
@@ -1071,6 +1071,14 @@
/* `man wait4` for more information */
function _wait4_opt_str(f) {
+ if(f & 8) bs="WCONTINUED|".bs
+ if(f & 2) bs="WUNTRACED|".bs
+ if(f & 1) bs="WNOHANG|".bs
+ return substr(bs,0,strlen(bs)-1)
+}
+
+/* `man waitid` for more information */
+function _waitid_opt_str(f) {
if(f & 0x01000000) bs="WNOWAIT|".bs
if(f & 8) bs="WCONTINUED|".bs
if(f & 4) bs="WEXITED|".bs
diff -Nur systemtap-20070818/tapset/syscalls2.stp systemtap-20070818new/tapset/syscalls2.stp
--- systemtap-20070818/tapset/syscalls2.stp 2007-08-16 04:17:35.000000000 +0900
+++ systemtap-20070818new/tapset/syscalls2.stp 2007-08-22 17:02:37.000000000 +0900
@@ -2869,7 +2869,7 @@
pid = $pid
infop_uaddr = $infop
options = $options
- options_str = _wait4_opt_str($options)
+ options_str = _waitid_opt_str($options)
rusage_uaddr = $ru
argstr = sprintf("%d, %d, %p, %s, %p", $which, $pid,
infop_uaddr, options_str, rusage_uaddr)
Regards, Cai Fei