diff options
author | Mark Wielaard <mjw@redhat.com> | 2008-12-10 20:39:45 +0100 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2008-12-10 20:39:45 +0100 |
commit | d2f4d7286629da6e9f1b844beefb141a4d3ef2c3 (patch) | |
tree | ffcff9ea678de1196ad1d95a3ee6880eaf39e3df /runtime/task_finder.c | |
parent | e8318a92c7b07579b89da5ff6fef782ce5d2b58c (diff) | |
download | systemtap-steved-d2f4d7286629da6e9f1b844beefb141a4d3ef2c3.tar.gz systemtap-steved-d2f4d7286629da6e9f1b844beefb141a4d3ef2c3.tar.xz systemtap-steved-d2f4d7286629da6e9f1b844beefb141a4d3ef2c3.zip |
PR6866: First pass at translating addresses to symbol names through vma.
Diffstat (limited to 'runtime/task_finder.c')
-rw-r--r-- | runtime/task_finder.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/runtime/task_finder.c b/runtime/task_finder.c index 25fad1a4..1e0a8474 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 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 @@ 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: */ |