summaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/ChangeLog8
-rw-r--r--runtime/task_finder.c10
2 files changed, 15 insertions, 3 deletions
diff --git a/runtime/ChangeLog b/runtime/ChangeLog
index ca7bf082..4e156f16 100644
--- a/runtime/ChangeLog
+++ b/runtime/ChangeLog
@@ -1,3 +1,11 @@
+2008-06-17 David Smith <dsmith@redhat.com>
+
+ * task_finder.c (__stp_utrace_attach_match_filename): Uses new
+ __STP_ATTACHED_TASK_EVENTS macro to determine which events to set
+ on a newly found process based on whether the
+ stap_task_finder_target structure has a vm_callback defined.
+ (stap_start_task_finder): Ditto.
+
2008-06-16 David Smith <dsmith@redhat.com>
* task_finder.c (stap_start_task_finder): Improved callback
diff --git a/runtime/task_finder.c b/runtime/task_finder.c
index e853cb2a..7391f104 100644
--- a/runtime/task_finder.c
+++ b/runtime/task_finder.c
@@ -224,10 +224,14 @@ __stp_get_mm_path(struct mm_struct *mm, char *buf, int buflen)
#define __STP_ATTACHED_TASK_BASE_EVENTS (UTRACE_EVENT(DEATH))
-#define __STP_ATTACHED_TASK_EVENTS (__STP_ATTACHED_TASK_BASE_EVENTS \
+#define __STP_ATTACHED_TASK_VM_EVENTS (__STP_ATTACHED_TASK_BASE_EVENTS \
| UTRACE_ACTION_QUIESCE \
| UTRACE_EVENT(QUIESCE))
+#define __STP_ATTACHED_TASK_EVENTS(tgt) \
+ ((((tgt)->vm_callback) == NULL) ? __STP_ATTACHED_TASK_BASE_EVENTS \
+ : __STP_ATTACHED_TASK_VM_EVENTS)
+
static int
stap_utrace_attach(struct task_struct *tsk,
const struct utrace_engine_ops *ops, void *data,
@@ -317,7 +321,7 @@ __stp_utrace_attach_match_filename(struct task_struct *tsk,
if (register_p) {
rc = stap_utrace_attach(tsk, &cb_tgt->ops,
cb_tgt,
- __STP_ATTACHED_TASK_EVENTS);
+ __STP_ATTACHED_TASK_EVENTS(cb_tgt));
if (rc != 0 && rc != EPERM)
break;
cb_tgt->engine_attached = 1;
@@ -674,7 +678,7 @@ stap_start_task_finder(void)
// Set up events we need for attached tasks.
rc = stap_utrace_attach(tsk, &cb_tgt->ops,
cb_tgt,
- __STP_ATTACHED_TASK_EVENTS);
+ __STP_ATTACHED_TASK_EVENTS(cb_tgt));
if (rc != 0 && rc != EPERM)
goto stf_err;
cb_tgt->engine_attached = 1;