diff options
author | Wenji Huang <wenji.huang@oracle.com> | 2009-03-18 11:17:25 -0400 |
---|---|---|
committer | Wenji Huang <wenji.huang@oracle.com> | 2009-03-19 18:27:02 -0400 |
commit | d2bb12d37037345a77e90aa83512075d78ae968f (patch) | |
tree | ee227f604f910c1d5c000206712bd5d1d740cd67 /runtime/task_finder.c | |
parent | ad370dccd460ebfc66f21d3d16f44807d789484f (diff) | |
download | systemtap-steved-d2bb12d37037345a77e90aa83512075d78ae968f.tar.gz systemtap-steved-d2bb12d37037345a77e90aa83512075d78ae968f.tar.xz systemtap-steved-d2bb12d37037345a77e90aa83512075d78ae968f.zip |
PR9940: avoid duplicated calling of uprobes in shared libraries
Add map_p argument to __stp_call_vm_callbacks_with_vma to well
tune the vma callback.
Signed-off-by: Wenji Huang <wenji.huang@oracle.com>
Diffstat (limited to 'runtime/task_finder.c')
-rw-r--r-- | runtime/task_finder.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/runtime/task_finder.c b/runtime/task_finder.c index 38f9145d..2b408763 100644 --- a/runtime/task_finder.c +++ b/runtime/task_finder.c @@ -1026,6 +1026,7 @@ __stp_utrace_task_finder_target_syscall_entry(enum utrace_resume_action action, static void __stp_call_vm_callbacks_with_vma(struct stap_task_finder_target *tgt, struct task_struct *tsk, + int map_p, struct vm_area_struct *vma) { char *mmpath_buf; @@ -1052,7 +1053,7 @@ __stp_call_vm_callbacks_with_vma(struct stap_task_finder_target *tgt, rc, (int)tsk->pid); } else { - __stp_call_vm_callbacks(tgt, tsk, 1, mmpath, + __stp_call_vm_callbacks(tgt, tsk, map_p, mmpath, vma->vm_start, vma->vm_end, (vma->vm_pgoff << PAGE_SHIFT)); } @@ -1145,7 +1146,7 @@ __stp_utrace_task_finder_target_syscall_exit(enum utrace_resume_action action, down_read(&mm->mmap_sem); vma = __stp_find_file_based_vma(mm, rv); if (vma != NULL) { - __stp_call_vm_callbacks_with_vma(tgt, tsk, vma); + __stp_call_vm_callbacks_with_vma(tgt, tsk, 0, vma); } up_read(&mm->mmap_sem); mmput(mm); @@ -1218,6 +1219,7 @@ __stp_utrace_task_finder_target_syscall_exit(enum utrace_resume_action action, && vma->vm_end <= entry->vm_end) { __stp_call_vm_callbacks_with_vma(tgt, tsk, + 1, vma); if (vma->vm_end >= entry->vm_end) break; |