summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzhaolei <zhaolei>2007-11-14 06:19:28 +0000
committerzhaolei <zhaolei>2007-11-14 06:19:28 +0000
commit52e6821c09a19dbc57cb40a9ed18f59405f9b75b (patch)
tree21efc391c60b22e81e123b65466b7d62a23b1b2b
parent1a19dbf062e2482f60998b2a4758daad24290c53 (diff)
downloadsystemtap-steved-52e6821c09a19dbc57cb40a9ed18f59405f9b75b.tar.gz
systemtap-steved-52e6821c09a19dbc57cb40a9ed18f59405f9b75b.tar.xz
systemtap-steved-52e6821c09a19dbc57cb40a9ed18f59405f9b75b.zip
2007-11-14 Zhaolei <zhaolei@cn.fujitsu.com>
From Lai Jiangshan <laijs@cn.fujitsu.com> * signal.stp (signal.do_action): Call __get_action_mask to get mask to fix semantic error of accessing a struct. * signal.stp (__get_action_mask): Add.
-rw-r--r--tapset/ChangeLog7
-rw-r--r--tapset/signal.stp16
2 files changed, 21 insertions, 2 deletions
diff --git a/tapset/ChangeLog b/tapset/ChangeLog
index be880588..d5b32bf1 100644
--- a/tapset/ChangeLog
+++ b/tapset/ChangeLog
@@ -1,3 +1,10 @@
+2007-11-14 Zhaolei <zhaolei@cn.fujitsu.com>
+
+ From Lai Jiangshan <laijs@cn.fujitsu.com>
+ * signal.stp (signal.do_action): Call __get_action_mask to get mask
+ to fix semantic error of accessing a struct.
+ * signal.stp (__get_action_mask): Add.
+
2007-11-12 Martin Hunt <hunt@redhat.com>
* logging.stp (print_char): Remove. Now implemented by
diff --git a/tapset/signal.stp b/tapset/signal.stp
index 1c8152b6..d969ffc8 100644
--- a/tapset/signal.stp
+++ b/tapset/signal.stp
@@ -427,8 +427,8 @@ probe signal.do_action = kernel.function("do_sigaction")
oldsigact_addr = $oact
if(sigact_addr != 0)
{
- sa_handler = $act->sa->sa_handler
- sa_mask = $act->sa->sa_mask
+ sa_handler = $act->sa->sa_handler
+ sa_mask = __get_action_mask($act)
}
}
@@ -437,6 +437,18 @@ probe signal.do_action.return = kernel.function("do_sigaction").return
retstr = returnstr(1)
}
+function __get_action_mask:long(act:long) %{ /* pure */
+ int i;
+ struct k_sigaction *act = (struct k_sigaction *)((long)THIS->act);
+ sigset_t *sigset = &act->sa.sa_mask;
+ THIS->__retvalue = kread(&(sigset->sig[0]));
+ for (i=1; i<_NSIG_WORDS; ++i) {
+ uint64_t part = kread(&(sigset->sig[i]));
+ THIS->__retvalue |= part << (_NSIG_BPW*i);
+ }
+ CATCH_DEREF_FAULT();
+%}
+
/* probe signal.procmask
*