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;
}