/* The task_finder_munmap_callback */ static int stap_uprobe_munmap_found (struct stap_task_finder_target *tgt, struct task_struct *tsk, unsigned long addr, unsigned long length) { const struct stap_uprobe_tf *stf = container_of(tgt, struct stap_uprobe_tf, finder); #ifdef DEBUG_TASK_FINDER_VMA _stp_dbug (__FUNCTION__,__LINE__, "-mmap pid %d addr %p length %lu stf %p %p path %s\n", tsk->tgid, (void *) addr, length, tgt, stf, stf->pathname); #endif return stap_uprobe_change_minus (tsk, addr, length, stf); }
/* The task_finder_callback we use for ET_DYN targets. This just forces an unmap of everything as the process exits. (PR11151) */ static int stap_uprobe_process_munmap (struct stap_task_finder_target *tgt, struct task_struct *tsk, int register_p, int process_p) { const struct stap_uprobe_tf *stf = container_of(tgt, struct stap_uprobe_tf, finder); if (! process_p) return 0; /* ignore threads */ dbug_task_vma (1, "%cproc pid %d stf %p %p path %s\n", register_p?'+':'-', tsk->tgid, tgt, stf, stf->pathname); /* Covering 0->TASK_SIZE means "unmap everything" */ if (!register_p) return stap_uprobe_change_minus (tsk, 0, TASK_SIZE, stf); return 0; }
/* The task_finder_callback we use for ET_DYN targets. This just forces an unmap of everything as the process exits. (PR11151) */ static int stap_uprobe_process_munmap (struct stap_task_finder_target *tgt, struct task_struct *tsk, int register_p, int process_p) { const struct stap_uprobe_tf *stf = container_of(tgt, struct stap_uprobe_tf, finder); if (! process_p) return 0; /* ignore threads */ #ifdef DEBUG_TASK_FINDER_VMA _stp_dbug (__FUNCTION__,__LINE__, "%cproc pid %d stf %p %p path %s\n", register_p?'+':'-', tsk->tgid, tgt, stf, stf->pathname); #endif /* Covering 0->TASK_SIZE means "unmap everything" */ if (!register_p) return stap_uprobe_change_minus (tsk, 0, TASK_SIZE, stf); return 0; }
/* The task_finder_callback we use for ET_EXEC targets. We used to perform uprobe insertion/removal here, but not any more. (PR10524) */ static int stap_uprobe_process_found (struct stap_task_finder_target *tgt, struct task_struct *tsk, int register_p, int process_p) { const struct stap_uprobe_tf *stf = container_of(tgt, struct stap_uprobe_tf, finder); if (! process_p) return 0; /* ignore threads */ dbug_task_vma(1, "%cproc pid %d stf %p %p path %s\n", register_p?'+':'-', tsk->tgid, tgt, stf, stf->pathname); /* ET_EXEC events are like shlib events, but with 0 relocation bases */ if (register_p) { int rc = stap_uprobe_change_plus (tsk, 0, TASK_SIZE, stf, 0, 0); stap_uprobe_change_semaphore_plus (tsk, 0, TASK_SIZE, stf); return rc; } else return stap_uprobe_change_minus (tsk, 0, TASK_SIZE, stf); }
/* The task_finder_munmap_callback */ static int stap_uprobe_munmap_found (struct stap_task_finder_target *tgt, struct task_struct *tsk, unsigned long addr, unsigned long length) { const struct stap_uprobe_tf *stf = container_of(tgt, struct stap_uprobe_tf, finder); dbug_task_vma (1, "-mmap pid %d addr %p length %lu stf %p %p path %s\n", tsk->tgid, (void *) addr, length, tgt, stf, stf->pathname); return stap_uprobe_change_minus (tsk, addr, length, stf); }