Added two new events: pre_deliver_signal and post_deliver_signal.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1434 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/vg_include.h b/coregrind/vg_include.h
index 25e1b4e..27c0e76 100644
--- a/coregrind/vg_include.h
+++ b/coregrind/vg_include.h
@@ -389,8 +389,12 @@
       void (*post_mutex_unlock) ( ThreadId tid, 
                                   void* /*pthread_mutex_t* */ mutex );
 
+      /* Signal events (not exhaustive) */
+      void (*pre_deliver_signal)  ( ThreadId tid, Int sigNo, Bool alt_stack );
+      void (*post_deliver_signal) ( ThreadId tid, Int sigNo );
+
       
-      /* Others... condition variable, signal events... */
+      /* Others... condition variable... */
       /* ... */
    }
    VgTrackEvents;
diff --git a/coregrind/vg_needs.c b/coregrind/vg_needs.c
index faedd5b..293a02c 100644
--- a/coregrind/vg_needs.c
+++ b/coregrind/vg_needs.c
@@ -64,42 +64,46 @@
 
 VgTrackEvents VG_(track_events) = {
    /* Memory events */
-   .new_mem_startup       = NULL,
-   .new_mem_heap          = NULL,
-   .new_mem_stack         = NULL,
-   .new_mem_stack_aligned = NULL,
-   .new_mem_stack_signal  = NULL,
-   .new_mem_brk           = NULL,
-   .new_mem_mmap          = NULL,
+   .new_mem_startup              = NULL,
+   .new_mem_heap                 = NULL,
+   .new_mem_stack                = NULL,
+   .new_mem_stack_aligned        = NULL,
+   .new_mem_stack_signal         = NULL,
+   .new_mem_brk                  = NULL,
+   .new_mem_mmap                 = NULL,
 
-   .copy_mem_heap         = NULL,
-   .copy_mem_remap        = NULL,
-   .change_mem_mprotect   = NULL,
+   .copy_mem_heap                = NULL,
+   .copy_mem_remap               = NULL,
+   .change_mem_mprotect          = NULL,
 
-   .ban_mem_heap          = NULL,
-   .ban_mem_stack         = NULL,
+   .ban_mem_heap                 = NULL,
+   .ban_mem_stack                = NULL,
 
-   .die_mem_heap          = NULL,
-   .die_mem_stack         = NULL,
-   .die_mem_stack_aligned = NULL,
-   .die_mem_stack_signal  = NULL,
-   .die_mem_brk           = NULL,
-   .die_mem_munmap        = NULL,
+   .die_mem_heap                 = NULL,
+   .die_mem_stack                = NULL,
+   .die_mem_stack_aligned        = NULL,
+   .die_mem_stack_signal         = NULL,
+   .die_mem_brk                  = NULL,
+   .die_mem_munmap               = NULL,
 
-   .bad_free              = NULL,
-   .mismatched_free       = NULL,
+   .bad_free                     = NULL,
+   .mismatched_free              = NULL,
 
-   .pre_mem_read          = NULL,
-   .pre_mem_read_asciiz   = NULL,
-   .pre_mem_write         = NULL,
-   .post_mem_write        = NULL,
+   .pre_mem_read                 = NULL,
+   .pre_mem_read_asciiz          = NULL,
+   .pre_mem_write                = NULL,
+   .post_mem_write               = NULL,
 
    /* Scheduler events */
-   .thread_run            = NULL,
+   .thread_run                   = NULL,
 
    /* Mutex events */
-   .post_mutex_lock       = NULL,
-   .post_mutex_unlock     = NULL,
+   .post_mutex_lock              = NULL,
+   .post_mutex_unlock            = NULL,
+
+   /* Signal events */
+   .pre_deliver_signal           = NULL,
+   .post_deliver_signal          = NULL,
 };
 
 /* static */
@@ -217,6 +221,9 @@
 TRACK(post_mutex_lock,   ThreadId tid, void* /*pthread_mutex_t* */ mutex)
 TRACK(post_mutex_unlock, ThreadId tid, void* /*pthread_mutex_t* */ mutex)
 
+TRACK(pre_deliver_signal,  ThreadId tid, Int sigNum, Bool alt_stack)
+TRACK(post_deliver_signal, ThreadId tid, Int sigNum)
+
 /*--------------------------------------------------------------------*/
 /* UCodeBlocks */
 
diff --git a/coregrind/vg_signals.c b/coregrind/vg_signals.c
index 6482366..e12c7dd 100644
--- a/coregrind/vg_signals.c
+++ b/coregrind/vg_signals.c
@@ -950,8 +950,15 @@
          VG_(message)(Vg_DebugMsg,
             "delivering signal %d to thread %d: on ALT STACK", 
             sigNo, tid );
+
+      /* Signal delivery to skins */
+      VG_TRACK( pre_deliver_signal, tid, sigNo, /*alt_stack*/False );
+      
    } else {
       esp_top_of_frame = tst->m_esp;
+
+      /* Signal delivery to skins */
+      VG_TRACK( pre_deliver_signal, tid, sigNo, /*alt_stack*/True );
    }
 
    esp = esp_top_of_frame;
@@ -1065,6 +1072,9 @@
       was delivered. */
    tst->status    = frame->status;
 
+   /* Notify skins */
+   VG_TRACK( post_deliver_signal, tid, sigNo );
+
    return sigNo;
 }