This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
ARM + jprobes/kretprobes SEGV/hangs/OOPS in 2.6.29 kernel
- From: venki kaps <venkiece2005 at gmail dot com>
- To: systemtap at sources dot redhat dot com
- Date: Tue, 25 Aug 2009 16:19:22 +0530
- Subject: ARM + jprobes/kretprobes SEGV/hangs/OOPS in 2.6.29 kernel
- References: <6d53329e0908250342g2cfb73f6v90f73c283c0d391c@mail.gmail.com>
Hi,
I have been tracing kernel system call information using
the Kprobes/jprobes/kretprobes implementation in the 2.6.29 kernel on
ARM architecture.
Although the mainline kprobe/jprobe/kretprobe examples are working
fine (do_fork),
I have been facing some issues while running my own jprobe/kretprobe tests.
For instance, when I am planting jprobe at
do_execve/sys_open/sys_close/sys_read/sys_write/,
after registration of probe, segmentation fault is getting generated.
The following is my code snapshot-
static int
jdo_execve(char * filename,
? ? ? ? ? ? ? ?char __user *__user *argv,
? ? ? ? ? ? ? ?char __user *__user *envp,
? ? ? ? ? ? ? ?struct pt_regs * regs)
{
? ? ? ? ? ? ? ?jprobe_return();
? ? ? ? ? ? ? ?return 0;
}
static struct jprobe my_jprobe = {
? ? ? ?.entry ? ? ? ? ? ? ? ? ? ? ? ? ?= jdo_execve,
? ? ? ? ? ? ? ?.kp = {
? ? ? ? ? ? ? ? ? ? ? ? .symbol_name ? ?= "do_execve",
? ? ? ? ? ? ? },
};
static int __init jprobe_init(void) {
? ? ? ?if ((register_jprobe(&my_jprobe)) < 0) {
? ? ? ? ? ? ? ?printk("%s %d,register_jprobe failed, returned\n",
__FILE__, __LINE__);
? ? ? ? ? ? ? ?return -1;
? ? ? ?}
? ? ? ?printk("%s %d,Planted jprobe at %p, handler addr %p\n",
__FILE__, __LINE__,
? ? ? ? ? ? ? ? my_jprobe.kp.addr, my_jprobe.entry);
? ? ? ?return 0;
}
static void __exit jprobe_exit(void) {
? ? ? ?unregister_jprobe(&my_jprobe);
? ? ? ?printk("%s %d,jprobe unregistered\n", __FILE__, __LINE__);
}
And also system hangs for sys_open/sys_close/sys_read/sys_write with
jprobes/kretprobes
but there are no issues with kprobes.
Query:
=====
? ? ? ?- Are there any limitations for jptobes/kretporbes in mainline
kernel for ARM?
? ? ? ?- Why it works for only do_fork and why not for others
(do_execve/sys_open/sys_close/sys_read/sys_write)?
? ? ? ?- Is it required any additional setup to achieve this?
Please give your valuable comments.
Thanks in advance.
Best regards,
Venkappa