summaryrefslogtreecommitdiffstats
path: root/runtime/task_finder.c
diff options
context:
space:
mode:
authorWenji Huang <wenji.huang@oracle.com>2009-03-18 11:17:25 -0400
committerWenji Huang <wenji.huang@oracle.com>2009-03-19 18:27:02 -0400
commitd2bb12d37037345a77e90aa83512075d78ae968f (patch)
treeee227f604f910c1d5c000206712bd5d1d740cd67 /runtime/task_finder.c
parentad370dccd460ebfc66f21d3d16f44807d789484f (diff)
downloadsystemtap-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.c6
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;