summaryrefslogtreecommitdiffstats
path: root/tapset
diff options
context:
space:
mode:
authorguanglei <guanglei>2006-08-22 03:58:53 +0000
committerguanglei <guanglei>2006-08-22 03:58:53 +0000
commite93c2ddb343b1656460717c098a45b4b3d5741b9 (patch)
tree355d3c91ee1cc77c4be5937dc512adc4e93d8ba8 /tapset
parentb66cd46f5b5a5e7e9fd7fe841239f271f3e4420e (diff)
downloadsystemtap-steved-e93c2ddb343b1656460717c098a45b4b3d5741b9.tar.gz
systemtap-steved-e93c2ddb343b1656460717c098a45b4b3d5741b9.tar.xz
systemtap-steved-e93c2ddb343b1656460717c098a45b4b3d5741b9.zip
More variables for signal.do_action and signal.procmask and a new function
get_sigset()
Diffstat (limited to 'tapset')
-rw-r--r--tapset/ChangeLog5
-rw-r--r--tapset/signal.stp30
2 files changed, 31 insertions, 4 deletions
diff --git a/tapset/ChangeLog b/tapset/ChangeLog
index 0ed7b291..6031a705 100644
--- a/tapset/ChangeLog
+++ b/tapset/ChangeLog
@@ -1,3 +1,8 @@
+2006-08-22 Li Guanglei <guanglei@cn.ibm.com>
+
+ * signal.stp: More variables for signal.do_action and
+ signal.procmask.
+
2006-08-21 Martin Hunt <hunt@redhat.com>
* string.stp (substr): Rewrite. Make the 3rd parameter
diff --git a/tapset/signal.stp b/tapset/signal.stp
index 1628e005..84731a46 100644
--- a/tapset/signal.stp
+++ b/tapset/signal.stp
@@ -333,13 +333,13 @@ probe signal.send_sig_queue.return =
*
* long do_sigpending(void __user *set, unsigned long sigsetsize)
*/
-probe signal.pend = kernel.function("do_sigpending")
+probe signal.pending = kernel.function("do_sigpending")
{
uspace_add=$set
sset_size=$sigsetsize
}
-probe signal.pend.return = kernel.function("do_sigpending").return
+probe signal.pending.return = kernel.function("do_sigpending").return
{
retstr = returnstr(1)
}
@@ -401,6 +401,11 @@ probe signal.do_action = kernel.function("do_sigaction")
sig = $sig
sigact_table=$act
psigact_table=$oact
+ if(sigact_table != 0)
+ {
+ sa_handler = $act->sa->sa_handler
+ sa_mask = $act->sa->sa_mask
+ }
}
probe signal.do_action.return = kernel.function("do_sigaction").return
@@ -424,9 +429,10 @@ probe signal.do_action.return = kernel.function("do_sigaction").return
probe signal.procmask = kernel.function("sigprocmask")
{
stemp=$how
- sigset=$set
- sigoset=$oldset
+ sigset_addr = $set
+ sigoset_addr = $oldset
+ sigset = get_sigset($set)
if (stemp == 0)
sig_how ="SIG_BLOCK"
else if (stemp == 1)
@@ -435,6 +441,22 @@ probe signal.procmask = kernel.function("sigprocmask")
sig_how="SIG_SETMASK"
}
+function get_sigset:long(sigset:long) %{ /* pure */
+
+ sigset_t *sigset = (sigset_t *)((long)THIS->sigset);
+
+if(_NSIG_BPW == 64)
+ THIS->__retvalue = deref(sizeof(sigset_t), sigset);
+else if(_NSIG_BPW == 32)
+ THIS->__retvalue = deref(sizeof(int), &(sigset->sig[0])) |
+ ((u_int64_t)deref(sizeof(int), &(sigset->sig[1])))<<32;
+
+ if(0) {
+deref_fault:
+ CONTEXT->last_error = "pointer deref error";
+ }
+%}
+
probe signal.procmask.return = kernel.function("sigprocmask").return
{
retstr = returnstr(1)