This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
[PATCH] add dbug_task_vma debug macro
- From: Negreanu Marius Adrian <adrian dot m dot negreanu at intel dot com>
- To: systemtap at sourceware dot org
- Cc: Negreanu Marius Adrian <adrian dot m dot negreanu at intel dot com>
- Date: Sat, 12 May 2012 17:31:58 +0300
- Subject: [PATCH] add dbug_task_vma debug macro
replace DEBUG_TASK_FINDER_VMA
with a dbug_unwind-like macro: dbug_task_vma
---
runtime/debug.h | 10 ++++++++++
runtime/task_finder.c | 8 ++------
runtime/task_finder2.c | 8 ++------
runtime/uprobes-common.c | 20 +++++---------------
runtime/vma.c | 40 ++++++++++------------------------------
5 files changed, 29 insertions(+), 57 deletions(-)
diff --git a/runtime/debug.h b/runtime/debug.h
index 5c9cca7..cce06d1 100644
--- a/runtime/debug.h
+++ b/runtime/debug.h
@@ -57,6 +57,16 @@
#define dbug_unwind(level, args...) ;
#endif
+#if defined(DEBUG_TASK_FINDER_VMA)
+#define dbug_task_vma(level, args...) do { \
+ if ((level) <= DEBUG_TASK_FINDER_VMA) \
+ _stp_dbug(__FUNCTION__, __LINE__, args); \
+ } while (0)
+#else
+#define dbug_task_vma(level, args...) ;
+#endif
+
+
#ifdef DEBUG_SYMBOLS
#define dbug_sym(level, args...) do { \
if ((level) <= DEBUG_SYMBOLS) \
diff --git a/runtime/task_finder.c b/runtime/task_finder.c
index e436dec..5a00618 100644
--- a/runtime/task_finder.c
+++ b/runtime/task_finder.c
@@ -668,8 +668,7 @@ __stp_call_mmap_callbacks(struct stap_task_finder_target *tgt,
if (tgt == NULL || tsk == NULL)
return;
-#ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug(__FUNCTION__, __LINE__,
+ dbug_task_vma(1,
"pid %d, a/l/o/p/path 0x%lx 0x%lx 0x%lx %c%c%c%c %s\n",
tsk->pid, addr, length, offset,
vm_flags & VM_READ ? 'r' : '-',
@@ -677,7 +676,6 @@ __stp_call_mmap_callbacks(struct stap_task_finder_target *tgt,
vm_flags & VM_EXEC ? 'x' : '-',
vm_flags & VM_MAYSHARE ? 's' : 'p',
path);
-#endif
list_for_each(cb_node, &tgt->callback_list_head) {
struct stap_task_finder_target *cb_tgt;
@@ -1543,8 +1541,7 @@ __stp_utrace_task_finder_target_syscall_exit(enum utrace_resume_action action,
__stp_tf_handler_start();
rv = syscall_get_return_value(tsk, regs);
-#ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug(__FUNCTION__, __LINE__,
+ dbug_task_vma(1,
"tsk %d found %s(0x%lx), returned 0x%lx\n",
tsk->pid,
((entry->syscall_no == MMAP_SYSCALL_NO(tsk)) ? "mmap"
@@ -1555,7 +1552,6 @@ __stp_utrace_task_finder_target_syscall_exit(enum utrace_resume_action action,
? "munmap"
: "UNKNOWN")))),
entry->arg0, rv);
-#endif
if (entry->syscall_no == MUNMAP_SYSCALL_NO(tsk)) {
// Call the callbacks
diff --git a/runtime/task_finder2.c b/runtime/task_finder2.c
index 58486aa..a91a22b 100644
--- a/runtime/task_finder2.c
+++ b/runtime/task_finder2.c
@@ -624,8 +624,7 @@ __stp_call_mmap_callbacks(struct stap_task_finder_target *tgt,
if (tgt == NULL || tsk == NULL)
return;
-#ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug(__FUNCTION__, __LINE__,
+ dbug_task_vma(1,
"pid %d, a/l/o/p/path 0x%lx 0x%lx 0x%lx %c%c%c%c %s\n",
tsk->pid, addr, length, offset,
vm_flags & VM_READ ? 'r' : '-',
@@ -633,7 +632,6 @@ __stp_call_mmap_callbacks(struct stap_task_finder_target *tgt,
vm_flags & VM_EXEC ? 'x' : '-',
vm_flags & VM_MAYSHARE ? 's' : 'p',
path);
-#endif
list_for_each(cb_node, &tgt->callback_list_head) {
struct stap_task_finder_target *cb_tgt;
@@ -1458,8 +1456,7 @@ __stp_utrace_task_finder_target_syscall_exit(u32 action,
__stp_tf_handler_start();
rv = syscall_get_return_value(tsk, regs);
-#ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug(__FUNCTION__, __LINE__,
+ dbug_task_vma(1,
"tsk %d found %s(0x%lx), returned 0x%lx\n",
tsk->pid,
((entry->syscall_no == MMAP_SYSCALL_NO(tsk)) ? "mmap"
@@ -1470,7 +1467,6 @@ __stp_utrace_task_finder_target_syscall_exit(u32 action,
? "munmap"
: "UNKNOWN")))),
entry->arg0, rv);
-#endif
if (in_atomic() || irqs_disabled()) {
struct task_work *work;
diff --git a/runtime/uprobes-common.c b/runtime/uprobes-common.c
index f557f71..64b62cc 100644
--- a/runtime/uprobes-common.c
+++ b/runtime/uprobes-common.c
@@ -253,9 +253,7 @@ static int stap_uprobe_change_minus (struct task_struct *tsk, unsigned long relo
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 */
- #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
+ 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);
@@ -288,12 +286,10 @@ stap_uprobe_mmap_found (struct stap_task_finder_target *tgt,
/* Check non-writable, executable sections for probes. */
if ((vm_flags & VM_EXEC) && !(vm_flags & VM_WRITE)) {
- #ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug (__FUNCTION__,__LINE__,
+ dbug_task_vma (1,
"+mmap X pid %d path %s addr %p length %u offset %p stf %p %p path %s\n",
tsk->tgid, path, (void *) addr, (unsigned)length, (void*) offset,
tgt, stf, stf->pathname);
- #endif
rc = stap_uprobe_change_plus (tsk, addr, length, stf, offset, vm_flags);
}
@@ -303,12 +299,10 @@ stap_uprobe_mmap_found (struct stap_task_finder_target *tgt,
* no error (rc == 0), we need to look for semaphores too.
*/
if ((rc == 0) && (vm_flags & VM_WRITE)) {
- #ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug (__FUNCTION__,__LINE__,
+ dbug_task_vma (1,
"+mmap W pid %d path %s addr %p length %u offset %p stf %p %p path %s\n",
tsk->tgid, path, (void *) addr, (unsigned)length, (void*) offset,
tgt, stf, stf->pathname);
- #endif
rc = stap_uprobe_change_semaphore_plus (tsk, addr, length, stf);
}
@@ -318,9 +312,7 @@ stap_uprobe_mmap_found (struct stap_task_finder_target *tgt,
/* 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
+ 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);
}
@@ -330,9 +322,7 @@ static int stap_uprobe_munmap_found (struct stap_task_finder_target *tgt, struct
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
+ 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);
diff --git a/runtime/vma.c b/runtime/vma.c
index 8f758d0..b1091f2 100644
--- a/runtime/vma.c
+++ b/runtime/vma.c
@@ -34,9 +34,7 @@ static void _stp_vma_match_vdso(struct task_struct *tsk)
unsigned long vdso_addr = tsk->mm->context.vdso_base;
#endif
-#ifdef DEBUG_TASK_FINDER_VMA
- _dbug("tsk: %d vdso: 0x%lx\n", tsk->pid, vdso_addr);
-#endif
+ dbug_task_vma(1,"tsk: %d vdso: 0x%lx\n", tsk->pid, vdso_addr);
for (i = 0; i < _stp_num_modules && found == NULL; i++) {
struct _stp_module *m = _stp_modules[i];
@@ -47,10 +45,8 @@ static void _stp_vma_match_vdso(struct task_struct *tsk)
unsigned long notes_addr;
int all_ok = 1;
notes_addr = vdso_addr + m->build_id_offset;
-#ifdef DEBUG_TASK_FINDER_VMA
- _dbug("notes_addr %s: 0x%lx + 0x%lx = 0x%lx (len: %x)\n", m->name,
+ dbug_task_vma(1,"notes_addr %s: 0x%lx + 0x%lx = 0x%lx (len: %x)\n", m->name,
vdso_addr, m->build_id_offset, notes_addr, m->build_id_len);
-#endif
for (j = 0; j < m->build_id_len; j++)
{
int rc;
@@ -80,10 +76,8 @@ static void _stp_vma_match_vdso(struct task_struct *tsk)
#endif
if (rc || b != m->build_id_bits[j])
{
-#ifdef DEBUG_TASK_FINDER_VMA
- _dbug("darn, not equal (rc=%d) at %d (0x%x != 0x%x)\n",
+ dbug_task_vma(1,"darn, not equal (rc=%d) at %d (0x%x != 0x%x)\n",
rc, j, b, m->build_id_bits[j]);
-#endif
all_ok = 0;
break;
}
@@ -97,9 +91,7 @@ static void _stp_vma_match_vdso(struct task_struct *tsk)
stap_add_vma_map_info(tsk, vdso_addr,
vdso_addr + found->sections[0].size,
"vdso", found);
-#ifdef DEBUG_TASK_FINDER_VMA
- _dbug("found vdso: %s\n", found->path);
-#endif
+ dbug_task_vma(1,"found vdso: %s\n", found->path);
}
}
#endif /* STAPCONF_MM_CONTEXT_VDSO */
@@ -112,11 +104,9 @@ static int _stp_vma_exec_cb(struct stap_task_finder_target *tgt,
int register_p,
int process_p)
{
-#ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug(__FUNCTION__, __LINE__,
+ dbug_task_vma(1,
"tsk %d:%d , register_p: %d, process_p: %d\n",
tsk->pid, tsk->tgid, register_p, process_p);
-#endif
if (process_p)
{
if (register_p)
@@ -144,11 +134,9 @@ static int _stp_vma_mmap_cb(struct stap_task_finder_target *tgt,
if (path == NULL || *path == '\0') /* unknown? */
path = (char *)name; /* we'll copy this soon, in ..._add_vma_... */
-#ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug(__FUNCTION__, __LINE__,
+ dbug_task_vma(1,
"mmap_cb: tsk %d:%d path %s, addr 0x%08lx, length 0x%08lx, offset 0x%lx, flags 0x%lx\n",
tsk->pid, tsk->tgid, path, addr, length, offset, vm_flags);
-#endif
// We are only interested in the first load of the whole module that
// is executable. We register whether or not we know the module,
// so we can later lookup the name given an address for this task.
@@ -159,11 +147,9 @@ static int _stp_vma_mmap_cb(struct stap_task_finder_target *tgt,
{
unsigned long vm_start = 0;
unsigned long vm_end = 0;
-#ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug(__FUNCTION__, __LINE__,
+ dbug_task_vma(1,
"vm_cb: matched path %s to module (sec: %s)\n",
path, _stp_modules[i]->sections[0].name);
-#endif
module = _stp_modules[i];
/* Make sure we really don't know about this module
yet. If we do know, we might want to extend
@@ -200,12 +186,10 @@ static int _stp_vma_mmap_cb(struct stap_task_finder_target *tgt,
{
res = stap_add_vma_map_info(tsk->group_leader, addr,
addr + length, path, NULL);
-#ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug(__FUNCTION__, __LINE__,
+ dbug_task_vma(1,
"registered '%s' for %d (res:%d) [%lx-%lx]\n",
path, tsk->group_leader->pid,
res, addr, addr + length);
-#endif
}
} else if (path != NULL) {
@@ -216,12 +200,10 @@ static int _stp_vma_mmap_cb(struct stap_task_finder_target *tgt,
// precisely to module names and symbols.
res = stap_extend_vma_map_info(tsk->group_leader,
addr, addr + length);
-#ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug(__FUNCTION__, __LINE__,
+ dbug_task_vma(1,
"extended '%s' for %d (res:%d) [%lx-%lx]\n",
path, tsk->group_leader->pid,
res, addr, addr + length);
-#endif
}
return 0;
}
@@ -265,10 +247,8 @@ static int _stp_vma_init(void)
_stp_error("Couldn't initialize vma map: %d\n", rc);
return rc;
}
-#ifdef DEBUG_TASK_FINDER_VMA
- _stp_dbug(__FUNCTION__, __LINE__,
+ dbug_task_vma(1,
"registering vmcb (_stap_target: %d)\n", _stp_target);
-#endif
rc = stap_register_task_finder_target (& vmcb);
if (rc != 0)
_stp_error("Couldn't register task finder target: %d\n", rc);
--
1.7.5.4