* [PATCH] Move kprobes examples to samples/ (resend)
@ 2007-10-21 12:39 Ananth N Mavinakayanahalli
2007-11-13 12:00 ` Andrew Morton
0 siblings, 1 reply; 12+ messages in thread
From: Ananth N Mavinakayanahalli @ 2007-10-21 12:39 UTC (permalink / raw)
To: lkml
Cc: hch, akpm, randy.dunlap, Anil S Keshavamurthy, mathieu.desnoyers,
davem, Prasanna S Panchamukhi
Andrew,
This patch moves the kprobe examples currently in
Documentation/krprobes.txt to under samples/. Patch originally by Randy
Dunlap. I have modified the examples slightly per Christoph's
suggestions.
Ananth
---
Move kprobes examples from Documentation/kprobes.txt to under samples/.
Patch originally by Randy Dunlap.
In addition, I have
o Updated the patch to apply on 2.6.23-mm1
o Modified examples code to build on multiple architectures. Currently,
the examples code works for x86_64, x86_32 and powerpc
o Cleaned up unneeded #includes
Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
---
Documentation/kprobes.txt | 206 ------------------------------------
samples/Kconfig | 6 +
samples/Makefile | 2
samples/kprobes/Makefile | 5
samples/kprobes/jprobe_example.c | 64 +++++++++++
samples/kprobes/kprobe_example.c | 89 +++++++++++++++
samples/kprobes/kretprobe_example.c | 59 ++++++++++
7 files changed, 229 insertions(+), 202 deletions(-)
Index: linux-2.6.23/Documentation/kprobes.txt
===================================================================
--- linux-2.6.23.orig/Documentation/kprobes.txt
+++ linux-2.6.23/Documentation/kprobes.txt
@@ -166,7 +166,8 @@ code mapping.
The Kprobes API includes a "register" function and an "unregister"
function for each type of probe. Here are terse, mini-man-page
specifications for these functions and the associated probe handlers
-that you'll write. See the latter half of this document for examples.
+that you'll write. See the files in the samples/kprobes/ sub-directory
+for examples.
4.1 register_kprobe
@@ -392,220 +393,15 @@ e. Watchpoint probes (which fire on data
8. Kprobes Example
-Here's a sample kernel module showing the use of kprobes to dump a
-stack trace and selected i386 registers when do_fork() is called.
------ cut here -----
-/*kprobe_example.c*/
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/kprobes.h>
-#include <linux/sched.h>
-
-/*For each probe you need to allocate a kprobe structure*/
-static struct kprobe kp;
-
-/*kprobe pre_handler: called just before the probed instruction is executed*/
-int handler_pre(struct kprobe *p, struct pt_regs *regs)
-{
- printk("pre_handler: p->addr=0x%p, eip=%lx, eflags=0x%lx\n",
- p->addr, regs->eip, regs->eflags);
- dump_stack();
- return 0;
-}
-
-/*kprobe post_handler: called after the probed instruction is executed*/
-void handler_post(struct kprobe *p, struct pt_regs *regs, unsigned long flags)
-{
- printk("post_handler: p->addr=0x%p, eflags=0x%lx\n",
- p->addr, regs->eflags);
-}
-
-/* fault_handler: this is called if an exception is generated for any
- * instruction within the pre- or post-handler, or when Kprobes
- * single-steps the probed instruction.
- */
-int handler_fault(struct kprobe *p, struct pt_regs *regs, int trapnr)
-{
- printk("fault_handler: p->addr=0x%p, trap #%dn",
- p->addr, trapnr);
- /* Return 0 because we don't handle the fault. */
- return 0;
-}
-
-static int __init kprobe_init(void)
-{
- int ret;
- kp.pre_handler = handler_pre;
- kp.post_handler = handler_post;
- kp.fault_handler = handler_fault;
- kp.symbol_name = "do_fork";
-
- ret = register_kprobe(&kp);
- if (ret < 0) {
- printk("register_kprobe failed, returned %d\n", ret);
- return ret;
- }
- printk("kprobe registered\n");
- return 0;
-}
-
-static void __exit kprobe_exit(void)
-{
- unregister_kprobe(&kp);
- printk("kprobe unregistered\n");
-}
-
-module_init(kprobe_init)
-module_exit(kprobe_exit)
-MODULE_LICENSE("GPL");
------ cut here -----
-
-You can build the kernel module, kprobe-example.ko, using the following
-Makefile:
------ cut here -----
-obj-m := kprobe-example.o
-KDIR := /lib/modules/$(shell uname -r)/build
-PWD := $(shell pwd)
-default:
- $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
-clean:
- rm -f *.mod.c *.ko *.o
------ cut here -----
-
-$ make
-$ su -
-...
-# insmod kprobe-example.ko
-
-You will see the trace data in /var/log/messages and on the console
-whenever do_fork() is invoked to create a new process.
+See samples/kprobes/kprobe_example.c.
9. Jprobes Example
-Here's a sample kernel module showing the use of jprobes to dump
-the arguments of do_fork().
------ cut here -----
-/*jprobe-example.c */
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/fs.h>
-#include <linux/uio.h>
-#include <linux/kprobes.h>
-
-/*
- * Jumper probe for do_fork.
- * Mirror principle enables access to arguments of the probed routine
- * from the probe handler.
- */
-
-/* Proxy routine having the same arguments as actual do_fork() routine */
-long jdo_fork(unsigned long clone_flags, unsigned long stack_start,
- struct pt_regs *regs, unsigned long stack_size,
- int __user * parent_tidptr, int __user * child_tidptr)
-{
- printk("jprobe: clone_flags=0x%lx, stack_size=0x%lx, regs=0x%p\n",
- clone_flags, stack_size, regs);
- /* Always end with a call to jprobe_return(). */
- jprobe_return();
- /*NOTREACHED*/
- return 0;
-}
-
-static struct jprobe my_jprobe = {
- .entry = jdo_fork
-};
-
-static int __init jprobe_init(void)
-{
- int ret;
- my_jprobe.kp.symbol_name = "do_fork";
-
- if ((ret = register_jprobe(&my_jprobe)) <0) {
- printk("register_jprobe failed, returned %d\n", ret);
- return -1;
- }
- printk("Planted jprobe at %p, handler addr %p\n",
- my_jprobe.kp.addr, my_jprobe.entry);
- return 0;
-}
-
-static void __exit jprobe_exit(void)
-{
- unregister_jprobe(&my_jprobe);
- printk("jprobe unregistered\n");
-}
-
-module_init(jprobe_init)
-module_exit(jprobe_exit)
-MODULE_LICENSE("GPL");
------ cut here -----
-
-Build and insert the kernel module as shown in the above kprobe
-example. You will see the trace data in /var/log/messages and on
-the console whenever do_fork() is invoked to create a new process.
-(Some messages may be suppressed if syslogd is configured to
-eliminate duplicate messages.)
+See samples/kprobes/jprobe_example.c.
10. Kretprobes Example
-Here's a sample kernel module showing the use of return probes to
-report failed calls to sys_open().
------ cut here -----
-/*kretprobe-example.c*/
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/kprobes.h>
-
-static const char *probed_func = "sys_open";
-
-/* Return-probe handler: If the probed function fails, log the return value. */
-static int ret_handler(struct kretprobe_instance *ri, struct pt_regs *regs)
-{
- int retval = regs_return_value(regs);
- if (retval < 0) {
- printk("%s returns %d\n", probed_func, retval);
- }
- return 0;
-}
-
-static struct kretprobe my_kretprobe = {
- .handler = ret_handler,
- /* Probe up to 20 instances concurrently. */
- .maxactive = 20
-};
-
-static int __init kretprobe_init(void)
-{
- int ret;
- my_kretprobe.kp.symbol_name = (char *)probed_func;
-
- if ((ret = register_kretprobe(&my_kretprobe)) < 0) {
- printk("register_kretprobe failed, returned %d\n", ret);
- return -1;
- }
- printk("Planted return probe at %p\n", my_kretprobe.kp.addr);
- return 0;
-}
-
-static void __exit kretprobe_exit(void)
-{
- unregister_kretprobe(&my_kretprobe);
- printk("kretprobe unregistered\n");
- /* nmissed > 0 suggests that maxactive was set too low. */
- printk("Missed probing %d instances of %s\n",
- my_kretprobe.nmissed, probed_func);
-}
-
-module_init(kretprobe_init)
-module_exit(kretprobe_exit)
-MODULE_LICENSE("GPL");
------ cut here -----
-
-Build and insert the kernel module as shown in the above kprobe
-example. You will see the trace data in /var/log/messages and on the
-console whenever sys_open() returns a negative value. (Some messages
-may be suppressed if syslogd is configured to eliminate duplicate
-messages.)
+See samples/kprobes/kretprobe_example.c.
For additional information on Kprobes, refer to the following URLs:
http://www-106.ibm.com/developerworks/library/l-kprobes.html?ca=dgr-lnxw42Kprobe
Index: linux-2.6.23/samples/kprobes/jprobe_example.c
===================================================================
--- /dev/null
+++ linux-2.6.23/samples/kprobes/jprobe_example.c
@@ -0,0 +1,64 @@
+/*
+ * Here's a sample kernel module showing the use of jprobes to dump
+ * the arguments of do_fork().
+ *
+ * Build and insert the kernel module as done in the kprobe example.
+ * You will see the trace data in /var/log/messages and on the
+ * console whenever do_fork() is invoked to create a new process.
+ * (Some messages may be suppressed if syslogd is configured to
+ * eliminate duplicate messages.)
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/kprobes.h>
+
+/*
+ * Jumper probe for do_fork.
+ * Mirror principle enables access to arguments of the probed routine
+ * from the probe handler.
+ */
+
+/* Proxy routine having the same arguments as actual do_fork() routine */
+static long jdo_fork(unsigned long clone_flags, unsigned long stack_start,
+ struct pt_regs *regs, unsigned long stack_size,
+ int __user * parent_tidptr, int __user * child_tidptr)
+{
+ printk("jprobe: clone_flags = 0x%lx, stack_size = 0x%lx, regs = 0x%p\n",
+ clone_flags, stack_size, regs);
+
+ /* Always end with a call to jprobe_return(). */
+ jprobe_return();
+ return 0;
+}
+
+static struct jprobe my_jprobe = {
+ .entry = jdo_fork,
+ .kp = {
+ .symbol_name = "do_fork",
+ },
+};
+
+static int __init jprobe_init(void)
+{
+ int ret;
+
+ ret = register_jprobe(&my_jprobe);
+ if (ret < 0) {
+ printk("register_jprobe failed, returned %d\n", ret);
+ return -1;
+ }
+ printk("Planted jprobe at %p, handler addr %p\n",
+ my_jprobe.kp.addr, my_jprobe.entry);
+ return 0;
+}
+
+static void __exit jprobe_exit(void)
+{
+ unregister_jprobe(&my_jprobe);
+ printk("jprobe at %p unregistered\n", my_jprobe.kp.addr);
+}
+
+module_init(jprobe_init)
+module_exit(jprobe_exit)
+MODULE_LICENSE("GPL");
Index: linux-2.6.23/samples/kprobes/kprobe_example.c
===================================================================
--- /dev/null
+++ linux-2.6.23/samples/kprobes/kprobe_example.c
@@ -0,0 +1,89 @@
+/*
+ * NOTE: This example is works on x86 and powerpc.
+ * Here's a sample kernel module showing the use of kprobes to dump a
+ * stack trace and selected registers when do_fork() is called.
+ *
+ * You will see the trace data in /var/log/messages and on the console
+ * whenever do_fork() is invoked to create a new process.
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/kprobes.h>
+
+/* For each probe you need to allocate a kprobe structure */
+static struct kprobe kp = {
+ .symbol_name = "do_fork",
+};
+
+/* kprobe pre_handler: called just before the probed instruction is executed */
+static int handler_pre(struct kprobe *p, struct pt_regs *regs)
+{
+#ifdef CONFIG_X86_32
+ printk("pre_handler: p->addr = 0x%p, eip = %lx, eflags = 0x%lx\n",
+ p->addr, regs->eip, regs->eflags);
+#endif
+#ifdef CONFIG_X86_64
+ printk("pre_handler: p->addr = 0x%p, rip = %lx, eflags = 0x%lx\n",
+ p->addr, regs->rip, regs->eflags);
+#endif
+#ifdef CONFIG_PPC
+ printk("pre_handler: p->addr = 0x%p, nip = 0x%lx, msr = 0x%lx\n",
+ p->addr, regs->nip, regs->msr);
+#endif
+
+ /* A dump_stack() here will give a stack backtrace */
+ return 0;
+}
+
+/* kprobe post_handler: called after the probed instruction is executed */
+static void handler_post(struct kprobe *p, struct pt_regs *regs, unsigned long flags)
+{
+#if defined(CONFIG_X86_32) || defined(CONFIG_X86_64)
+ printk("post_handler: p->addr = 0x%p, eflags = 0x%lx\n",
+ p->addr, regs->eflags);
+#endif
+#ifdef CONFIG_PPC
+ printk("post_handler: p->addr = 0x%p, msr = 0x%lx\n",
+ p->addr, regs->msr);
+#endif
+}
+
+/*
+ * fault_handler: this is called if an exception is generated for any
+ * instruction within the pre- or post-handler, or when Kprobes
+ * single-steps the probed instruction.
+ */
+static int handler_fault(struct kprobe *p, struct pt_regs *regs, int trapnr)
+{
+ printk("fault_handler: p->addr = 0x%p, trap #%dn",
+ p->addr, trapnr);
+ /* Return 0 because we don't handle the fault. */
+ return 0;
+}
+
+static int __init kprobe_init(void)
+{
+ int ret;
+ kp.pre_handler = handler_pre;
+ kp.post_handler = handler_post;
+ kp.fault_handler = handler_fault;
+
+ ret = register_kprobe(&kp);
+ if (ret < 0) {
+ printk("register_kprobe failed, returned %d\n", ret);
+ return ret;
+ }
+ printk("Planted kprobe at %p\n", kp.addr);
+ return 0;
+}
+
+static void __exit kprobe_exit(void)
+{
+ unregister_kprobe(&kp);
+ printk("kprobe at %p unregistered\n", kp.addr);
+}
+
+module_init(kprobe_init)
+module_exit(kprobe_exit)
+MODULE_LICENSE("GPL");
Index: linux-2.6.23/samples/kprobes/kretprobe_example.c
===================================================================
--- /dev/null
+++ linux-2.6.23/samples/kprobes/kretprobe_example.c
@@ -0,0 +1,59 @@
+/*
+ * Here's a sample kernel module showing the use of return probes to
+ * report the return value from do_fork().
+ *
+ * Build and insert the kernel module as done in the kprobe example.
+ * You will see the trace data in /var/log/messages and on the console
+ * whenever sys_open() returns a negative value. (Some messages
+ * may be suppressed if syslogd is configured to eliminate duplicate
+ * messages.)
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/kprobes.h>
+
+/* Return-probe handler: If the probed function fails, log the return value. */
+static int ret_handler(struct kretprobe_instance *ri, struct pt_regs *regs)
+{
+ int retval = regs_return_value(regs);
+
+ printk("do_fork returns %d\n", retval);
+ return 0;
+}
+
+static struct kretprobe my_kretprobe = {
+ .handler = ret_handler,
+ .kp = {
+ .symbol_name = "do_fork",
+ },
+ /* Probe up to 20 instances concurrently. */
+ .maxactive = 20,
+};
+
+static int __init kretprobe_init(void)
+{
+ int ret;
+
+ ret = register_kretprobe(&my_kretprobe);
+ if (ret < 0) {
+ printk("register_kretprobe failed, returned %d\n", ret);
+ return -1;
+ }
+ printk("Planted return probe at %p\n", my_kretprobe.kp.addr);
+ return 0;
+}
+
+static void __exit kretprobe_exit(void)
+{
+ unregister_kretprobe(&my_kretprobe);
+ printk("kretprobe at %p unregistered\n", my_kretprobe.kp.addr);
+
+ /* nmissed > 0 suggests that maxactive was set too low. */
+ printk("Missed probing %d instances of do_fork()\n",
+ my_kretprobe.nmissed);
+}
+
+module_init(kretprobe_init)
+module_exit(kretprobe_exit)
+MODULE_LICENSE("GPL");
Index: linux-2.6.23/samples/Kconfig
===================================================================
--- linux-2.6.23.orig/samples/Kconfig
+++ linux-2.6.23/samples/Kconfig
@@ -13,4 +13,10 @@ config SAMPLE_MARKERS
help
This build markers example modules.
+config SAMPLE_KPROBES
+ tristate "Build kprobes examples -- loadable modules only"
+ depends on KPROBES && m
+ help
+ This build several kprobes example modules.
+
endif # SAMPLES
Index: linux-2.6.23/samples/Makefile
===================================================================
--- linux-2.6.23.orig/samples/Makefile
+++ linux-2.6.23/samples/Makefile
@@ -1,3 +1,3 @@
# Makefile for Linux samples code
-obj-$(CONFIG_SAMPLES) += markers/
+obj-$(CONFIG_SAMPLES) += markers/ kprobes/
Index: linux-2.6.23/samples/kprobes/Makefile
===================================================================
--- /dev/null
+++ linux-2.6.23/samples/kprobes/Makefile
@@ -0,0 +1,5 @@
+# builds the kprobes example kernel modules;
+# then to use one (as root): insmod <module_name.ko>
+
+obj-$(CONFIG_SAMPLE_KPROBES) += kprobe_example.o jprobe_example.o \
+ kretprobe_example.o
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Move kprobes examples to samples/ (resend)
2007-10-21 12:39 [PATCH] Move kprobes examples to samples/ (resend) Ananth N Mavinakayanahalli
@ 2007-11-13 12:00 ` Andrew Morton
2007-11-13 12:03 ` David Miller
2007-11-13 15:39 ` Ananth N Mavinakayanahalli
0 siblings, 2 replies; 12+ messages in thread
From: Andrew Morton @ 2007-11-13 12:00 UTC (permalink / raw)
To: ananth
Cc: lkml, hch, randy.dunlap, Anil S Keshavamurthy, mathieu.desnoyers,
davem, Prasanna S Panchamukhi
On Sun, 21 Oct 2007 18:09:19 +0530 Ananth N Mavinakayanahalli <ananth@in.ibm.com> wrote:
> Move kprobes examples from Documentation/kprobes.txt to under samples/.
> Patch originally by Randy Dunlap.
>
> In addition, I have
>
> o Updated the patch to apply on 2.6.23-mm1
> o Modified examples code to build on multiple architectures. Currently,
> the examples code works for x86_64, x86_32 and powerpc
> o Cleaned up unneeded #includes
Could you please take a look at what's needed to get this working on sparc64?
samples/kprobes/kretprobe_example.c: In function `ret_handler':
samples/kprobes/kretprobe_example.c:19: error: implicit declaration of function `regs_return_value'
Thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Move kprobes examples to samples/ (resend)
2007-11-13 12:00 ` Andrew Morton
@ 2007-11-13 12:03 ` David Miller
2007-11-13 12:53 ` Mathieu Desnoyers
2007-11-13 15:39 ` Ananth N Mavinakayanahalli
1 sibling, 1 reply; 12+ messages in thread
From: David Miller @ 2007-11-13 12:03 UTC (permalink / raw)
To: akpm
Cc: ananth, linux-kernel, hch, randy.dunlap, anil.s.keshavamurthy,
mathieu.desnoyers, prasanna
From: Andrew Morton <akpm@linux-foundation.org>
Date: Tue, 13 Nov 2007 04:00:45 -0800
> On Sun, 21 Oct 2007 18:09:19 +0530 Ananth N Mavinakayanahalli <ananth@in.ibm.com> wrote:
>
> > Move kprobes examples from Documentation/kprobes.txt to under samples/.
> > Patch originally by Randy Dunlap.
> >
> > In addition, I have
> >
> > o Updated the patch to apply on 2.6.23-mm1
> > o Modified examples code to build on multiple architectures. Currently,
> > the examples code works for x86_64, x86_32 and powerpc
> > o Cleaned up unneeded #includes
>
> Could you please take a look at what's needed to get this working on sparc64?
>
> samples/kprobes/kretprobe_example.c: In function `ret_handler':
> samples/kprobes/kretprobe_example.c:19: error: implicit declaration of function `regs_return_value'
kretprobes support most likely, it's on my todo list to implement
but it will take a while since I'm busy fixing networking bugs
but I can stop doing that if you like.
:-)
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Move kprobes examples to samples/ (resend)
2007-11-13 12:03 ` David Miller
@ 2007-11-13 12:53 ` Mathieu Desnoyers
0 siblings, 0 replies; 12+ messages in thread
From: Mathieu Desnoyers @ 2007-11-13 12:53 UTC (permalink / raw)
To: David Miller
Cc: akpm, ananth, linux-kernel, hch, randy.dunlap,
anil.s.keshavamurthy, prasanna
* David Miller (davem@davemloft.net) wrote:
> From: Andrew Morton <akpm@linux-foundation.org>
> Date: Tue, 13 Nov 2007 04:00:45 -0800
>
> > On Sun, 21 Oct 2007 18:09:19 +0530 Ananth N Mavinakayanahalli <ananth@in.ibm.com> wrote:
> >
> > > Move kprobes examples from Documentation/kprobes.txt to under samples/.
> > > Patch originally by Randy Dunlap.
> > >
> > > In addition, I have
> > >
> > > o Updated the patch to apply on 2.6.23-mm1
> > > o Modified examples code to build on multiple architectures. Currently,
> > > the examples code works for x86_64, x86_32 and powerpc
> > > o Cleaned up unneeded #includes
> >
> > Could you please take a look at what's needed to get this working on sparc64?
> >
> > samples/kprobes/kretprobe_example.c: In function `ret_handler':
> > samples/kprobes/kretprobe_example.c:19: error: implicit declaration of function `regs_return_value'
>
> kretprobes support most likely, it's on my todo list to implement
> but it will take a while since I'm busy fixing networking bugs
> but I can stop doing that if you like.
>
> :-)
I wonder if compiling this example makes sense when
ARCH_SUPPORTS_KRETPROBES is not defined ? We could just use a
obj-$ARCH_SUPPORTS_KRETPROBES to compile the example conditionally.
Mathieu
--
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Move kprobes examples to samples/ (resend)
2007-11-13 12:00 ` Andrew Morton
2007-11-13 12:03 ` David Miller
@ 2007-11-13 15:39 ` Ananth N Mavinakayanahalli
2007-11-13 15:47 ` [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig Ananth N Mavinakayanahalli
2007-11-13 20:15 ` [PATCH] Move kprobes examples to samples/ (resend) Andrew Morton
1 sibling, 2 replies; 12+ messages in thread
From: Ananth N Mavinakayanahalli @ 2007-11-13 15:39 UTC (permalink / raw)
To: Andrew Morton
Cc: lkml, hch, randy.dunlap, Anil S Keshavamurthy, mathieu.desnoyers,
davem, Prasanna S Panchamukhi
On Tue, Nov 13, 2007 at 04:00:45AM -0800, Andrew Morton wrote:
> On Sun, 21 Oct 2007 18:09:19 +0530 Ananth N Mavinakayanahalli <ananth@in.ibm.com> wrote:
>
> > Move kprobes examples from Documentation/kprobes.txt to under samples/.
> > Patch originally by Randy Dunlap.
> >
> > In addition, I have
> >
> > o Updated the patch to apply on 2.6.23-mm1
> > o Modified examples code to build on multiple architectures. Currently,
> > the examples code works for x86_64, x86_32 and powerpc
> > o Cleaned up unneeded #includes
>
> Could you please take a look at what's needed to get this working on sparc64?
>
> samples/kprobes/kretprobe_example.c: In function `ret_handler':
> samples/kprobes/kretprobe_example.c:19: error: implicit declaration of function `regs_return_value'
>
> Thanks.
As Davem mentions, these are a fallout of sparc64 not having kretprobe
support. As a followup to this mail, I am sending a couple of patches
that should fix the issue (sparc64 cross compile works fine with the
patches).
Ananth
^ permalink raw reply [flat|nested] 12+ messages in thread
* [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig
2007-11-13 15:39 ` Ananth N Mavinakayanahalli
@ 2007-11-13 15:47 ` Ananth N Mavinakayanahalli
2007-11-13 15:50 ` [patch 2/2] Kprobes: Build kretprobe samples only if arch supports kretprobes Ananth N Mavinakayanahalli
2007-12-08 0:35 ` [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig Andrew Morton
2007-11-13 20:15 ` [PATCH] Move kprobes examples to samples/ (resend) Andrew Morton
1 sibling, 2 replies; 12+ messages in thread
From: Ananth N Mavinakayanahalli @ 2007-11-13 15:47 UTC (permalink / raw)
To: Andrew Morton
Cc: lkml, hch, randy.dunlap, Anil S Keshavamurthy, mathieu.desnoyers,
davem, Prasanna S Panchamukhi
From: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
This patch adds CONFIG_ARCH_SUPPORTS_KRETPROBES to the
arch/<arch>/Kconfig file for relevant architectures with kprobes
support. This facilitates easy handling of in-kernel modules (like
samples/kprobes/kretprobe_example.c) that depend on kretprobes being
present in the kernel.
This patch depends on Mathieu Desnoyers' "Instrumentation menu removal"
patchset (http://marc.info/?l=linux-kernel&m=119496432229633&w=2)
Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
---
arch/avr32/Kconfig | 5 +++++
arch/ia64/Kconfig | 5 +++++
arch/powerpc/Kconfig | 5 +++++
arch/s390/Kconfig | 5 +++++
arch/sparc64/Kconfig | 5 +++++
arch/x86/Kconfig.i386 | 5 +++++
arch/x86/Kconfig.x86_64 | 5 +++++
include/asm-ia64/kprobes.h | 1 -
include/asm-powerpc/kprobes.h | 1 -
include/asm-s390/kprobes.h | 1 -
include/asm-x86/kprobes_32.h | 1 -
include/asm-x86/kprobes_64.h | 1 -
include/linux/kprobes.h | 6 +++---
kernel/kprobes.c | 6 +++---
14 files changed, 41 insertions(+), 11 deletions(-)
Index: kernel-13nov/arch/avr32/Kconfig
===================================================================
--- kernel-13nov.orig/arch/avr32/Kconfig
+++ kernel-13nov/arch/avr32/Kconfig
@@ -73,6 +73,11 @@ config GENERIC_BUG
config ARCH_SUPPORTS_KPROBES
def_bool y
+config ARCH_SUPPORTS_KRETPROBES
+ bool
+ depends on ARCH_SUPPORTS_KPROBES
+ default n
+
source "init/Kconfig"
menu "System Type and features"
Index: kernel-13nov/arch/ia64/Kconfig
===================================================================
--- kernel-13nov.orig/arch/ia64/Kconfig
+++ kernel-13nov/arch/ia64/Kconfig
@@ -105,6 +105,11 @@ config ARCH_SUPPORTS_OPROFILE
config ARCH_SUPPORTS_KPROBES
def_bool y
+config ARCH_SUPPORTS_KRETPROBES
+ bool
+ depends on ARCH_SUPPORTS_KPROBES
+ default y
+
choice
prompt "System type"
default IA64_GENERIC
Index: kernel-13nov/arch/powerpc/Kconfig
===================================================================
--- kernel-13nov.orig/arch/powerpc/Kconfig
+++ kernel-13nov/arch/powerpc/Kconfig
@@ -169,6 +169,11 @@ config ARCH_SUPPORTS_OPROFILE
config ARCH_SUPPORTS_KPROBES
def_bool y
+config ARCH_SUPPORTS_KRETPROBES
+ bool
+ depends on ARCH_SUPPORTS_KPROBES
+ default y
+
source "init/Kconfig"
source "arch/powerpc/platforms/Kconfig"
Index: kernel-13nov/arch/s390/Kconfig
===================================================================
--- kernel-13nov.orig/arch/s390/Kconfig
+++ kernel-13nov/arch/s390/Kconfig
@@ -58,6 +58,11 @@ config ARCH_SUPPORTS_OPROFILE
config ARCH_SUPPORTS_KPROBES
def_bool y
+config ARCH_SUPPORTS_KRETPROBES
+ bool
+ depends on ARCH_SUPPORTS_KPROBES
+ default y
+
source "init/Kconfig"
menu "Base setup"
Index: kernel-13nov/arch/sparc64/Kconfig
===================================================================
--- kernel-13nov.orig/arch/sparc64/Kconfig
+++ kernel-13nov/arch/sparc64/Kconfig
@@ -82,6 +82,11 @@ config ARCH_SUPPORTS_OPROFILE
config ARCH_SUPPORTS_KPROBES
def_bool y
+config ARCH_SUPPORTS_KRETPROBES
+ bool
+ depends on ARCH_SUPPORTS_KPROBES
+ default n
+
choice
prompt "Kernel page size"
default SPARC64_PAGE_SIZE_8KB
Index: kernel-13nov/arch/x86/Kconfig.i386
===================================================================
--- kernel-13nov.orig/arch/x86/Kconfig.i386
+++ kernel-13nov/arch/x86/Kconfig.i386
@@ -97,6 +97,11 @@ config ARCH_SUPPORTS_OPROFILE
config ARCH_SUPPORTS_KPROBES
def_bool y
+config ARCH_SUPPORTS_KRETPROBES
+ bool
+ depends on ARCH_SUPPORTS_KPROBES
+ default y
+
source "init/Kconfig"
menu "Processor type and features"
Index: kernel-13nov/arch/x86/Kconfig.x86_64
===================================================================
--- kernel-13nov.orig/arch/x86/Kconfig.x86_64
+++ kernel-13nov/arch/x86/Kconfig.x86_64
@@ -139,6 +139,11 @@ config ARCH_SUPPORTS_OPROFILE
config ARCH_SUPPORTS_KPROBES
def_bool y
+config ARCH_SUPPORTS_KRETPROBES
+ bool
+ depends on ARCH_SUPPORTS_KPROBES
+ default y
+
source "init/Kconfig"
Index: kernel-13nov/include/asm-ia64/kprobes.h
===================================================================
--- kernel-13nov.orig/include/asm-ia64/kprobes.h
+++ kernel-13nov/include/asm-ia64/kprobes.h
@@ -82,7 +82,6 @@ struct kprobe_ctlblk {
struct prev_kprobe prev_kprobe[ARCH_PREV_KPROBE_SZ];
};
-#define ARCH_SUPPORTS_KRETPROBES
#define kretprobe_blacklist_size 0
#define SLOT0_OPCODE_SHIFT (37)
Index: kernel-13nov/include/asm-powerpc/kprobes.h
===================================================================
--- kernel-13nov.orig/include/asm-powerpc/kprobes.h
+++ kernel-13nov/include/asm-powerpc/kprobes.h
@@ -80,7 +80,6 @@ typedef unsigned int kprobe_opcode_t;
#define is_trap(instr) (IS_TW(instr) || IS_TWI(instr))
#endif
-#define ARCH_SUPPORTS_KRETPROBES
#define flush_insn_slot(p) do { } while (0)
#define kretprobe_blacklist_size 0
Index: kernel-13nov/include/asm-s390/kprobes.h
===================================================================
--- kernel-13nov.orig/include/asm-s390/kprobes.h
+++ kernel-13nov/include/asm-s390/kprobes.h
@@ -46,7 +46,6 @@ typedef u16 kprobe_opcode_t;
? (MAX_STACK_SIZE) \
: (((unsigned long)current_thread_info()) + THREAD_SIZE - (ADDR)))
-#define ARCH_SUPPORTS_KRETPROBES
#define kretprobe_blacklist_size 0
#define KPROBE_SWAP_INST 0x10
Index: kernel-13nov/include/asm-x86/kprobes_32.h
===================================================================
--- kernel-13nov.orig/include/asm-x86/kprobes_32.h
+++ kernel-13nov/include/asm-x86/kprobes_32.h
@@ -42,7 +42,6 @@ typedef u8 kprobe_opcode_t;
? (MAX_STACK_SIZE) \
: (((unsigned long)current_thread_info()) + THREAD_SIZE - (ADDR)))
-#define ARCH_SUPPORTS_KRETPROBES
#define flush_insn_slot(p) do { } while (0)
extern const int kretprobe_blacklist_size;
Index: kernel-13nov/include/asm-x86/kprobes_64.h
===================================================================
--- kernel-13nov.orig/include/asm-x86/kprobes_64.h
+++ kernel-13nov/include/asm-x86/kprobes_64.h
@@ -41,7 +41,6 @@ typedef u8 kprobe_opcode_t;
? (MAX_STACK_SIZE) \
: (((unsigned long)current_thread_info()) + THREAD_SIZE - (ADDR)))
-#define ARCH_SUPPORTS_KRETPROBES
extern const int kretprobe_blacklist_size;
void kretprobe_trampoline(void);
Index: kernel-13nov/include/linux/kprobes.h
===================================================================
--- kernel-13nov.orig/include/linux/kprobes.h
+++ kernel-13nov/include/linux/kprobes.h
@@ -125,11 +125,11 @@ struct jprobe {
DECLARE_PER_CPU(struct kprobe *, current_kprobe);
DECLARE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
-#ifdef ARCH_SUPPORTS_KRETPROBES
+#ifdef CONFIG_ARCH_SUPPORTS_KRETPROBES
extern void arch_prepare_kretprobe(struct kretprobe_instance *ri,
struct pt_regs *regs);
extern int arch_trampoline_kprobe(struct kprobe *p);
-#else /* ARCH_SUPPORTS_KRETPROBES */
+#else /* CONFIG_ARCH_SUPPORTS_KRETPROBES */
static inline void arch_prepare_kretprobe(struct kretprobe *rp,
struct pt_regs *regs)
{
@@ -138,7 +138,7 @@ static inline int arch_trampoline_kprobe
{
return 0;
}
-#endif /* ARCH_SUPPORTS_KRETPROBES */
+#endif /* CONFIG_ARCH_SUPPORTS_KRETPROBES */
/*
* Function-return probe -
* Note:
Index: kernel-13nov/kernel/kprobes.c
===================================================================
--- kernel-13nov.orig/kernel/kprobes.c
+++ kernel-13nov/kernel/kprobes.c
@@ -678,7 +678,7 @@ void __kprobes unregister_jprobe(struct
unregister_kprobe(&jp->kp);
}
-#ifdef ARCH_SUPPORTS_KRETPROBES
+#ifdef CONFIG_ARCH_SUPPORTS_KRETPROBES
/*
* This kprobe pre_handler is registered with every kretprobe. When probe
@@ -762,7 +762,7 @@ int __kprobes register_kretprobe(struct
return ret;
}
-#else /* ARCH_SUPPORTS_KRETPROBES */
+#else /* CONFIG_ARCH_SUPPORTS_KRETPROBES */
int __kprobes register_kretprobe(struct kretprobe *rp)
{
@@ -775,7 +775,7 @@ static int __kprobes pre_handler_kretpro
return 0;
}
-#endif /* ARCH_SUPPORTS_KRETPROBES */
+#endif /* CONFIG_ARCH_SUPPORTS_KRETPROBES */
void __kprobes unregister_kretprobe(struct kretprobe *rp)
{
^ permalink raw reply [flat|nested] 12+ messages in thread
* [patch 2/2] Kprobes: Build kretprobe samples only if arch supports kretprobes
2007-11-13 15:47 ` [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig Ananth N Mavinakayanahalli
@ 2007-11-13 15:50 ` Ananth N Mavinakayanahalli
2007-12-08 0:35 ` [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig Andrew Morton
1 sibling, 0 replies; 12+ messages in thread
From: Ananth N Mavinakayanahalli @ 2007-11-13 15:50 UTC (permalink / raw)
To: Andrew Morton
Cc: lkml, hch, randy.dunlap, Anil S Keshavamurthy, mathieu.desnoyers,
davem, Prasanna S Panchamukhi
From: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
This patch builds samples/kprobes/kretprobe_example.c only on archs that
support kretprobes.
Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
---
samples/kprobes/Makefile | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
Index: kernel-13nov/samples/kprobes/Makefile
===================================================================
--- kernel-13nov.orig/samples/kprobes/Makefile
+++ kernel-13nov/samples/kprobes/Makefile
@@ -1,5 +1,8 @@
# builds the kprobes example kernel modules;
# then to use one (as root): insmod <module_name.ko>
-obj-$(CONFIG_SAMPLE_KPROBES) += kprobe_example.o jprobe_example.o \
- kretprobe_example.o
+obj-$(CONFIG_SAMPLE_KPROBES) += kprobe_example.o jprobe_example.o
+
+ifeq ($(CONFIG_ARCH_SUPPORTS_KRETPROBES),y)
+obj-$(CONFIG_SAMPLE_KPROBES) += kretprobe_example.o
+endif
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Move kprobes examples to samples/ (resend)
2007-11-13 15:39 ` Ananth N Mavinakayanahalli
2007-11-13 15:47 ` [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig Ananth N Mavinakayanahalli
@ 2007-11-13 20:15 ` Andrew Morton
1 sibling, 0 replies; 12+ messages in thread
From: Andrew Morton @ 2007-11-13 20:15 UTC (permalink / raw)
To: ananth
Cc: lkml, hch, randy.dunlap, Anil S Keshavamurthy, mathieu.desnoyers,
davem, Prasanna S Panchamukhi
On Tue, 13 Nov 2007 21:09:25 +0530 Ananth N Mavinakayanahalli <ananth@in.ibm.com> wrote:
> On Tue, Nov 13, 2007 at 04:00:45AM -0800, Andrew Morton wrote:
> > On Sun, 21 Oct 2007 18:09:19 +0530 Ananth N Mavinakayanahalli <ananth@in.ibm.com> wrote:
> >
> > > Move kprobes examples from Documentation/kprobes.txt to under samples/.
> > > Patch originally by Randy Dunlap.
> > >
> > > In addition, I have
> > >
> > > o Updated the patch to apply on 2.6.23-mm1
> > > o Modified examples code to build on multiple architectures. Currently,
> > > the examples code works for x86_64, x86_32 and powerpc
> > > o Cleaned up unneeded #includes
> >
> > Could you please take a look at what's needed to get this working on sparc64?
> >
> > samples/kprobes/kretprobe_example.c: In function `ret_handler':
> > samples/kprobes/kretprobe_example.c:19: error: implicit declaration of function `regs_return_value'
> >
> > Thanks.
>
> As Davem mentions, these are a fallout of sparc64 not having kretprobe
> support. As a followup to this mail, I am sending a couple of patches
> that should fix the issue (sparc64 cross compile works fine with the
> patches).
>
Thanks.
> This patch depends on Mathieu Desnoyers' "Instrumentation menu removal"
> patchset (http://marc.info/?l=linux-kernel&m=119496432229633&w=2)
argh. OK, I'll look at this later in the week.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig
2007-11-13 15:47 ` [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig Ananth N Mavinakayanahalli
2007-11-13 15:50 ` [patch 2/2] Kprobes: Build kretprobe samples only if arch supports kretprobes Ananth N Mavinakayanahalli
@ 2007-12-08 0:35 ` Andrew Morton
2007-12-08 15:16 ` Mathieu Desnoyers
1 sibling, 1 reply; 12+ messages in thread
From: Andrew Morton @ 2007-12-08 0:35 UTC (permalink / raw)
To: ananth
Cc: linux-kernel, hch, randy.dunlap, anil.s.keshavamurthy,
mathieu.desnoyers, davem, prasanna
On Tue, 13 Nov 2007 21:17:10 +0530
Ananth N Mavinakayanahalli <ananth@in.ibm.com> wrote:
> From: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
>
> This patch adds CONFIG_ARCH_SUPPORTS_KRETPROBES to the
> arch/<arch>/Kconfig file for relevant architectures with kprobes
> support. This facilitates easy handling of in-kernel modules (like
> samples/kprobes/kretprobe_example.c) that depend on kretprobes being
> present in the kernel.
>
> This patch depends on Mathieu Desnoyers' "Instrumentation menu removal"
> patchset (http://marc.info/?l=linux-kernel&m=119496432229633&w=2)
I didn't merge this because I didn't merge Mathieu's patches because my brain
is not large enough to keep up with Mathieu's patches so sparc64 is still
busted.
Please send fixes against 2.6.24-rc4-mm1?
Thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig
2007-12-08 0:35 ` [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig Andrew Morton
@ 2007-12-08 15:16 ` Mathieu Desnoyers
0 siblings, 0 replies; 12+ messages in thread
From: Mathieu Desnoyers @ 2007-12-08 15:16 UTC (permalink / raw)
To: Andrew Morton
Cc: ananth, linux-kernel, hch, randy.dunlap, anil.s.keshavamurthy,
davem, prasanna
* Andrew Morton (akpm@linux-foundation.org) wrote:
> On Tue, 13 Nov 2007 21:17:10 +0530
> Ananth N Mavinakayanahalli <ananth@in.ibm.com> wrote:
>
> > From: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
> >
> > This patch adds CONFIG_ARCH_SUPPORTS_KRETPROBES to the
> > arch/<arch>/Kconfig file for relevant architectures with kprobes
> > support. This facilitates easy handling of in-kernel modules (like
> > samples/kprobes/kretprobe_example.c) that depend on kretprobes being
> > present in the kernel.
> >
> > This patch depends on Mathieu Desnoyers' "Instrumentation menu removal"
> > patchset (http://marc.info/?l=linux-kernel&m=119496432229633&w=2)
>
> I didn't merge this because I didn't merge Mathieu's patches because my brain
> is not large enough to keep up with Mathieu's patches so sparc64 is still
> busted.
>
> Please send fixes against 2.6.24-rc4-mm1?
>
> Thanks.
I'll resend the instrumentation menu removal patchset against
2.6.24-rc4-mm1 immediately.
Mathieu
--
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig
2007-12-10 9:52 [PATCH 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig Ananth N Mavinakayanahalli
@ 2007-12-10 10:13 ` Sam Ravnborg
0 siblings, 0 replies; 12+ messages in thread
From: Sam Ravnborg @ 2007-12-10 10:13 UTC (permalink / raw)
To: Ananth N Mavinakayanahalli
Cc: akpm, lkml, Anil S Keshavamurthy, davem, mathieu.desnoyers, hskinnemoen
On Mon, Dec 10, 2007 at 03:22:22PM +0530, Ananth N Mavinakayanahalli wrote:
> From: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
>
> This patch adds CONFIG_HAVE_KRETPROBES to the arch/<arch>/Kconfig file
> for relevant architectures with kprobes support. This facilitates easy
> handling of in-kernel modules (like samples/kprobes/kretprobe_example.c)
> that depend on kretprobes being present in the kernel.
>
> This patch depends on Mathieu Desnoyers' "Instrumentation menu removal"
> patchset (http://marc.info/?l=linux-kernel&m=119496432229633&w=2)
>
> Updated to apply on 2.6.24-rc4-mm1.
>
> Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
> ---
> arch/avr32/Kconfig | 5 +++++
> arch/ia64/Kconfig | 5 +++++
> arch/powerpc/Kconfig | 5 +++++
> arch/s390/Kconfig | 5 +++++
> arch/sparc64/Kconfig | 5 +++++
> arch/x86/Kconfig | 5 +++++
> include/asm-ia64/kprobes.h | 1 -
> include/asm-powerpc/kprobes.h | 1 -
> include/asm-s390/kprobes.h | 1 -
> include/asm-x86/kprobes_32.h | 1 -
> include/asm-x86/kprobes_64.h | 1 -
> include/linux/kprobes.h | 6 +++---
> kernel/kprobes.c | 8 +++-----
> 13 files changed, 36 insertions(+), 13 deletions(-)
>
> Index: linux-2.6.24-rc4/arch/avr32/Kconfig
> ===================================================================
> --- linux-2.6.24-rc4.orig/arch/avr32/Kconfig
> +++ linux-2.6.24-rc4/arch/avr32/Kconfig
> @@ -66,6 +66,11 @@ config GENERIC_BUG
> def_bool y
> depends on BUG
>
> +config HAVE_KRETPROBES
> + bool
> + depends on HAVE_KPROBES
> + default n
> +
The symbol HAVE_KRETPROBES should be defined in the common file - so
the only thing you have to do is a single line:
config AVR32
+ select HAVE_KRETPROBES
Much more dense than defining the symbols once for each arch.
Sam
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig
@ 2007-12-10 9:52 Ananth N Mavinakayanahalli
2007-12-10 10:13 ` Sam Ravnborg
0 siblings, 1 reply; 12+ messages in thread
From: Ananth N Mavinakayanahalli @ 2007-12-10 9:52 UTC (permalink / raw)
To: akpm; +Cc: lkml, Anil S Keshavamurthy, davem, mathieu.desnoyers, hskinnemoen
From: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
This patch adds CONFIG_HAVE_KRETPROBES to the arch/<arch>/Kconfig file
for relevant architectures with kprobes support. This facilitates easy
handling of in-kernel modules (like samples/kprobes/kretprobe_example.c)
that depend on kretprobes being present in the kernel.
This patch depends on Mathieu Desnoyers' "Instrumentation menu removal"
patchset (http://marc.info/?l=linux-kernel&m=119496432229633&w=2)
Updated to apply on 2.6.24-rc4-mm1.
Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
---
arch/avr32/Kconfig | 5 +++++
arch/ia64/Kconfig | 5 +++++
arch/powerpc/Kconfig | 5 +++++
arch/s390/Kconfig | 5 +++++
arch/sparc64/Kconfig | 5 +++++
arch/x86/Kconfig | 5 +++++
include/asm-ia64/kprobes.h | 1 -
include/asm-powerpc/kprobes.h | 1 -
include/asm-s390/kprobes.h | 1 -
include/asm-x86/kprobes_32.h | 1 -
include/asm-x86/kprobes_64.h | 1 -
include/linux/kprobes.h | 6 +++---
kernel/kprobes.c | 8 +++-----
13 files changed, 36 insertions(+), 13 deletions(-)
Index: linux-2.6.24-rc4/arch/avr32/Kconfig
===================================================================
--- linux-2.6.24-rc4.orig/arch/avr32/Kconfig
+++ linux-2.6.24-rc4/arch/avr32/Kconfig
@@ -66,6 +66,11 @@ config GENERIC_BUG
def_bool y
depends on BUG
+config HAVE_KRETPROBES
+ bool
+ depends on HAVE_KPROBES
+ default n
+
source "init/Kconfig"
menu "System Type and features"
Index: linux-2.6.24-rc4/arch/ia64/Kconfig
===================================================================
--- linux-2.6.24-rc4.orig/arch/ia64/Kconfig
+++ linux-2.6.24-rc4/arch/ia64/Kconfig
@@ -101,6 +101,11 @@ config AUDIT_ARCH
bool
default y
+config HAVE_KRETPROBES
+ bool
+ depends on HAVE_KPROBES
+ default y
+
choice
prompt "System type"
default IA64_GENERIC
Index: linux-2.6.24-rc4/arch/powerpc/Kconfig
===================================================================
--- linux-2.6.24-rc4.orig/arch/powerpc/Kconfig
+++ linux-2.6.24-rc4/arch/powerpc/Kconfig
@@ -165,6 +165,11 @@ config PPC_OF_PLATFORM_PCI
depends on PPC64 # not supported on 32 bits yet
default n
+config HAVE_KRETPROBES
+ bool
+ depends on HAVE_KPROBES
+ default y
+
source "init/Kconfig"
source "arch/powerpc/platforms/Kconfig"
Index: linux-2.6.24-rc4/arch/s390/Kconfig
===================================================================
--- linux-2.6.24-rc4.orig/arch/s390/Kconfig
+++ linux-2.6.24-rc4/arch/s390/Kconfig
@@ -54,6 +54,11 @@ config S390
select HAVE_OPROFILE
select HAVE_KPROBES
+config HAVE_KRETPROBES
+ bool
+ depends on HAVE_KPROBES
+ default y
+
source "init/Kconfig"
menu "Base setup"
Index: linux-2.6.24-rc4/arch/sparc64/Kconfig
===================================================================
--- linux-2.6.24-rc4.orig/arch/sparc64/Kconfig
+++ linux-2.6.24-rc4/arch/sparc64/Kconfig
@@ -81,6 +81,11 @@ config GENERIC_HARDIRQS_NO__DO_IRQ
config ARCH_SUPPORTS_AOUT
def_bool y
+config HAVE_KRETPROBES
+ bool
+ depends on HAVE_KPROBES
+ default n
+
choice
prompt "Kernel page size"
default SPARC64_PAGE_SIZE_8KB
Index: linux-2.6.24-rc4/arch/x86/Kconfig
===================================================================
--- linux-2.6.24-rc4.orig/arch/x86/Kconfig
+++ linux-2.6.24-rc4/arch/x86/Kconfig
@@ -145,6 +145,11 @@ config X86_TRAMPOLINE
config KTIME_SCALAR
def_bool X86_32
+config HAVE_KRETPROBES
+ bool
+ depends on HAVE_KPROBES
+ default y
+
source "init/Kconfig"
menu "Processor type and features"
Index: linux-2.6.24-rc4/include/asm-ia64/kprobes.h
===================================================================
--- linux-2.6.24-rc4.orig/include/asm-ia64/kprobes.h
+++ linux-2.6.24-rc4/include/asm-ia64/kprobes.h
@@ -82,7 +82,6 @@ struct kprobe_ctlblk {
struct prev_kprobe prev_kprobe[ARCH_PREV_KPROBE_SZ];
};
-#define ARCH_SUPPORTS_KRETPROBES
#define kretprobe_blacklist_size 0
#define SLOT0_OPCODE_SHIFT (37)
Index: linux-2.6.24-rc4/include/asm-powerpc/kprobes.h
===================================================================
--- linux-2.6.24-rc4.orig/include/asm-powerpc/kprobes.h
+++ linux-2.6.24-rc4/include/asm-powerpc/kprobes.h
@@ -80,7 +80,6 @@ typedef unsigned int kprobe_opcode_t;
#define is_trap(instr) (IS_TW(instr) || IS_TWI(instr))
#endif
-#define ARCH_SUPPORTS_KRETPROBES
#define flush_insn_slot(p) do { } while (0)
#define kretprobe_blacklist_size 0
Index: linux-2.6.24-rc4/include/asm-s390/kprobes.h
===================================================================
--- linux-2.6.24-rc4.orig/include/asm-s390/kprobes.h
+++ linux-2.6.24-rc4/include/asm-s390/kprobes.h
@@ -46,7 +46,6 @@ typedef u16 kprobe_opcode_t;
? (MAX_STACK_SIZE) \
: (((unsigned long)current_thread_info()) + THREAD_SIZE - (ADDR)))
-#define ARCH_SUPPORTS_KRETPROBES
#define kretprobe_blacklist_size 0
#define KPROBE_SWAP_INST 0x10
Index: linux-2.6.24-rc4/include/asm-x86/kprobes_32.h
===================================================================
--- linux-2.6.24-rc4.orig/include/asm-x86/kprobes_32.h
+++ linux-2.6.24-rc4/include/asm-x86/kprobes_32.h
@@ -42,7 +42,6 @@ typedef u8 kprobe_opcode_t;
? (MAX_STACK_SIZE) \
: (((unsigned long)current_thread_info()) + THREAD_SIZE - (ADDR)))
-#define ARCH_SUPPORTS_KRETPROBES
#define flush_insn_slot(p) do { } while (0)
extern const int kretprobe_blacklist_size;
Index: linux-2.6.24-rc4/include/asm-x86/kprobes_64.h
===================================================================
--- linux-2.6.24-rc4.orig/include/asm-x86/kprobes_64.h
+++ linux-2.6.24-rc4/include/asm-x86/kprobes_64.h
@@ -41,7 +41,6 @@ typedef u8 kprobe_opcode_t;
? (MAX_STACK_SIZE) \
: (((unsigned long)current_thread_info()) + THREAD_SIZE - (ADDR)))
-#define ARCH_SUPPORTS_KRETPROBES
extern const int kretprobe_blacklist_size;
void kretprobe_trampoline(void);
Index: linux-2.6.24-rc4/include/linux/kprobes.h
===================================================================
--- linux-2.6.24-rc4.orig/include/linux/kprobes.h
+++ linux-2.6.24-rc4/include/linux/kprobes.h
@@ -125,11 +125,11 @@ struct jprobe {
DECLARE_PER_CPU(struct kprobe *, current_kprobe);
DECLARE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
-#ifdef ARCH_SUPPORTS_KRETPROBES
+#ifdef CONFIG_HAVE_KRETPROBES
extern void arch_prepare_kretprobe(struct kretprobe_instance *ri,
struct pt_regs *regs);
extern int arch_trampoline_kprobe(struct kprobe *p);
-#else /* ARCH_SUPPORTS_KRETPROBES */
+#else /* CONFIG_HAVE_KRETPROBES */
static inline void arch_prepare_kretprobe(struct kretprobe *rp,
struct pt_regs *regs)
{
@@ -138,7 +138,7 @@ static inline int arch_trampoline_kprobe
{
return 0;
}
-#endif /* ARCH_SUPPORTS_KRETPROBES */
+#endif /* CONFIG_HAVE_KRETPROBES */
/*
* Function-return probe -
* Note:
Index: linux-2.6.24-rc4/kernel/kprobes.c
===================================================================
--- linux-2.6.24-rc4.orig/kernel/kprobes.c
+++ linux-2.6.24-rc4/kernel/kprobes.c
@@ -678,8 +678,7 @@ void __kprobes unregister_jprobe(struct
unregister_kprobe(&jp->kp);
}
-#ifdef ARCH_SUPPORTS_KRETPROBES
-
+#ifdef CONFIG_HAVE_KRETPROBES
/*
* This kprobe pre_handler is registered with every kretprobe. When probe
* hits it will set up the return probe.
@@ -762,7 +761,7 @@ int __kprobes register_kretprobe(struct
return ret;
}
-#else /* ARCH_SUPPORTS_KRETPROBES */
+#else /* CONFIG_HAVE_KRETPROBES */
int __kprobes register_kretprobe(struct kretprobe *rp)
{
@@ -774,8 +773,7 @@ static int __kprobes pre_handler_kretpro
{
return 0;
}
-
-#endif /* ARCH_SUPPORTS_KRETPROBES */
+#endif /* CONFIG_HAVE_KRETPROBES */
void __kprobes unregister_kretprobe(struct kretprobe *rp)
{
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2007-12-10 10:11 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-10-21 12:39 [PATCH] Move kprobes examples to samples/ (resend) Ananth N Mavinakayanahalli
2007-11-13 12:00 ` Andrew Morton
2007-11-13 12:03 ` David Miller
2007-11-13 12:53 ` Mathieu Desnoyers
2007-11-13 15:39 ` Ananth N Mavinakayanahalli
2007-11-13 15:47 ` [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig Ananth N Mavinakayanahalli
2007-11-13 15:50 ` [patch 2/2] Kprobes: Build kretprobe samples only if arch supports kretprobes Ananth N Mavinakayanahalli
2007-12-08 0:35 ` [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig Andrew Morton
2007-12-08 15:16 ` Mathieu Desnoyers
2007-11-13 20:15 ` [PATCH] Move kprobes examples to samples/ (resend) Andrew Morton
2007-12-10 9:52 [PATCH 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig Ananth N Mavinakayanahalli
2007-12-10 10:13 ` Sam Ravnborg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).