]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Added two new events: pre_deliver_signal and post_deliver_signal.
authorNicholas Nethercote <njn@valgrind.org>
Mon, 24 Feb 2003 10:36:48 +0000 (10:36 +0000)
committerNicholas Nethercote <njn@valgrind.org>
Mon, 24 Feb 2003 10:36:48 +0000 (10:36 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1434

coregrind/vg_include.h
coregrind/vg_needs.c
coregrind/vg_signals.c

index 25e1b4e5ef5305ae09ff47d51911d550c37a51ef..27c0e7622d732eb29ed92386143c36abcc17987c 100644 (file)
@@ -389,8 +389,12 @@ typedef
       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;
index faedd5b4ed2b6e8cb846cef2f50638a7fe5a7ad8..293a02c32d68ac6ad493deba6a912b65750d6cdc 100644 (file)
@@ -64,42 +64,46 @@ VgNeeds VG_(needs) = {
 
 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,
-
-   .copy_mem_heap         = NULL,
-   .copy_mem_remap        = NULL,
-   .change_mem_mprotect   = 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,
-
-   .bad_free              = NULL,
-   .mismatched_free       = NULL,
-
-   .pre_mem_read          = NULL,
-   .pre_mem_read_asciiz   = NULL,
-   .pre_mem_write         = NULL,
-   .post_mem_write        = 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,
+
+   .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,
+
+   .bad_free                     = NULL,
+   .mismatched_free              = 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( pre_mutex_lock,   ThreadId tid, void* /*pthread_mutex_t* */ mutex)
 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 */
 
index 64823661f61c06fa8f80276f5d81bd96b91168b9..e12c7ddebfad959d9c0a751f17e4f21b522910b3 100644 (file)
@@ -950,8 +950,15 @@ void vg_push_signal_frame ( ThreadId tid, int sigNo )
          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 @@ Int vg_pop_signal_frame ( ThreadId tid )
       was delivered. */
    tst->status    = frame->status;
 
+   /* Notify skins */
+   VG_TRACK( post_deliver_signal, tid, sigNo );
+
    return sigNo;
 }