diff options
author | guanglei <guanglei> | 2006-08-22 03:58:53 +0000 |
---|---|---|
committer | guanglei <guanglei> | 2006-08-22 03:58:53 +0000 |
commit | e93c2ddb343b1656460717c098a45b4b3d5741b9 (patch) | |
tree | 355d3c91ee1cc77c4be5937dc512adc4e93d8ba8 /tapset | |
parent | b66cd46f5b5a5e7e9fd7fe841239f271f3e4420e (diff) | |
download | systemtap-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/ChangeLog | 5 | ||||
-rw-r--r-- | tapset/signal.stp | 30 |
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) |