From: Nicholas Nethercote Date: Mon, 24 Feb 2003 10:36:48 +0000 (+0000) Subject: Added two new events: pre_deliver_signal and post_deliver_signal. X-Git-Tag: svn/VALGRIND_1_9_4~15 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=08f8bf00c2e6daf35ca34f22728cdeb6ef95dfdd;p=thirdparty%2Fvalgrind.git Added two new events: pre_deliver_signal and post_deliver_signal. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1434 --- diff --git a/coregrind/vg_include.h b/coregrind/vg_include.h index 25e1b4e5ef..27c0e7622d 100644 --- a/coregrind/vg_include.h +++ b/coregrind/vg_include.h @@ -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; diff --git a/coregrind/vg_needs.c b/coregrind/vg_needs.c index faedd5b4ed..293a02c32d 100644 --- a/coregrind/vg_needs.c +++ b/coregrind/vg_needs.c @@ -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 */ diff --git a/coregrind/vg_signals.c b/coregrind/vg_signals.c index 64823661f6..e12c7ddebf 100644 --- a/coregrind/vg_signals.c +++ b/coregrind/vg_signals.c @@ -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; }