]> sourceware.org Git - systemtap.git/commitdiff
More variables for signal.do_action and signal.procmask and a new function
authorguanglei <guanglei>
Tue, 22 Aug 2006 03:58:53 +0000 (03:58 +0000)
committerguanglei <guanglei>
Tue, 22 Aug 2006 03:58:53 +0000 (03:58 +0000)
get_sigset()

tapset/ChangeLog
tapset/signal.stp

index 0ed7b2919e52e982e3b3cf492c3057213bc42157..6031a70538f1ee818965c4390b78bf70dca66230 100644 (file)
@@ -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
index 1628e00589c468d61815b3315a448fca1ef498cc..84731a4697c5b364b7530c8bc6d3d4d03e66e061 100644 (file)
@@ -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)
This page took 0.027871 seconds and 5 git commands to generate.