summaryrefslogtreecommitdiffstats
path: root/runtime/task_finder.c
diff options
context:
space:
mode:
authorDave Brolley <brolley@redhat.com>2009-03-16 12:15:51 -0400
committerDave Brolley <brolley@redhat.com>2009-03-16 12:15:51 -0400
commit9b6d8bd0d7a6f80a613b7c609ff1d71ddfed009b (patch)
tree2a84a12198ad719d566dd4bca8494a9824c2a097 /runtime/task_finder.c
parent24068a1f2e17857f4ce096a17244d09575a199c1 (diff)
parent5d369d06fa39e4769fb3364ba29f588f3d995c24 (diff)
downloadsystemtap-steved-9b6d8bd0d7a6f80a613b7c609ff1d71ddfed009b.tar.gz
systemtap-steved-9b6d8bd0d7a6f80a613b7c609ff1d71ddfed009b.tar.xz
systemtap-steved-9b6d8bd0d7a6f80a613b7c609ff1d71ddfed009b.zip
Merge branch 'master' of git://sources.redhat.com/git/systemtap
Diffstat (limited to 'runtime/task_finder.c')
-rw-r--r--runtime/task_finder.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/runtime/task_finder.c b/runtime/task_finder.c
index 9db713c3..ae381a41 100644
--- a/runtime/task_finder.c
+++ b/runtime/task_finder.c
@@ -55,7 +55,6 @@ typedef int (*stap_task_finder_vm_callback)(struct stap_task_finder_target *tgt,
unsigned long vm_end,
unsigned long vm_pgoff);
-#ifdef DEBUG_TASK_FINDER_VMA
static int __stp_tf_vm_cb(struct stap_task_finder_target *tgt,
struct task_struct *tsk,
int map_p, char *vm_path,
@@ -63,21 +62,32 @@ static int __stp_tf_vm_cb(struct stap_task_finder_target *tgt,
unsigned long vm_end,
unsigned long vm_pgoff)
{
+ int i;
+#ifdef DEBUG_TASK_FINDER_VMA
_stp_dbug(__FUNCTION__, __LINE__,
"vm_cb: tsk %d:%d path %s, start 0x%08lx, end 0x%08lx, offset 0x%lx\n",
tsk->pid, map_p, vm_path, vm_start, vm_end, vm_pgoff);
+#endif
if (map_p) {
- // FIXME: What should we do with vm_path? We can't save
- // the vm_path pointer itself, but we don't have any
- // storage space allocated to save it in...
- stap_add_vma_map_info(tsk, vm_start, vm_end, vm_pgoff);
+ struct _stp_module *module = NULL;
+ if (vm_path != NULL)
+ for (i = 0; i < _stp_num_modules; i++)
+ if (strcmp(vm_path, _stp_modules[i]->name) == 0)
+ {
+#ifdef DEBUG_TASK_FINDER_VMA
+ _stp_dbug(__FUNCTION__, __LINE__,
+ "vm_cb: matched path %s to module\n", vm_path);
+#endif
+ module = _stp_modules[i];
+ break;
+ }
+ stap_add_vma_map_info(tsk, vm_start, vm_end, vm_pgoff, module);
}
else {
stap_remove_vma_map_info(tsk, vm_start, vm_end, vm_pgoff);
}
return 0;
}
-#endif
struct stap_task_finder_target {
/* private: */