Skip to contentSkip to conversation

Move kprobes examples to samples/ (resend)

PATCH In review Ananth N Mavinakayanahalli 4 participants 10 messages Oct 21, 2007 – Dec 8, 2007

Subsystems (5)
Documentation x86 PowerPC s390 +1 more subsystems
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Move kprobes examples to samples/ (resend)

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

---
 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(-)
Documentation/kprobes.txt +5 -209
Index: 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
samples/kprobes/jprobe_example.c new file +64 -0

64 lines not on this page · raw message

samples/kprobes/kprobe_example.c new file +89 -0

89 lines not on this page · raw message

samples/kprobes/kretprobe_example.c new file +59 -0

59 lines not on this page · raw message

samples/Kconfig +6 -0
Index: 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
samples/Makefile +1 -1
Index: linux-2.6.23/samples/Makefile
===================================================================
@@ -1,3 +1,3 @@
 # Makefile for Linux samples code
 
-obj-$(CONFIG_SAMPLES)	+= markers/
+obj-$(CONFIG_SAMPLES)	+= markers/ kprobes/
samples/kprobes/Makefile new file +5 -0
Index: 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
#1 lore raw
Quoted 9 lines · On Sun, 21 Oct 2007 18:09:19 +0530 Ananth N Mavinakayanahalli…

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.

maintainer
#2 lore raw

From: Andrew Morton <[email protected]>
Date: Tue, 13 Nov 2007 04:00:45 -0800

Quoted 12 lines · On Sun, 21 Oct 2007 18:09:19 +0530 Ananth N Mavinakayanahalli…
Quoted 10 lines

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

Quoted 4 lines

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.

:-)

#3 lore raw
Quoted 17 lines · * David Miller ([email protected]) wrote:

From: Andrew Morton <[email protected]>
Date: Tue, 13 Nov 2007 04:00:45 -0800

Quoted 14 lines · On Sun, 21 Oct 2007 18:09:19 +0530 Ananth N Mavinakayanahalli…
Quoted 10 lines

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?

Quoted 8 lines
Quoted 2 lines

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

Signature · 3 lines
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68
#4 lore raw
In reply to Andrew Morton
Quoted 12 lines · Andrew Morton
Quoted 9 lines · On Sun, 21 Oct 2007 18:09:19 +0530 Ananth N Mavinakayanahalli…

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

Quoted 6 lines

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

#5 lore raw

PATCH 1/2 Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig

From: Ananth N Mavinakayanahalli <[email protected]>

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)

---
 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(-)
arch/avr32/Kconfig +5 -0
Index: 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"
arch/ia64/Kconfig +5 -0
Index: 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
arch/powerpc/Kconfig +5 -0
Index: 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"
arch/s390/Kconfig +5 -0
Index: 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"
arch/sparc64/Kconfig +5 -0
Index: 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
arch/x86/Kconfig.i386 +5 -0
Index: 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"
arch/x86/Kconfig.x86_64 +5 -0
Index: 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"
 
 
include/asm-ia64/kprobes.h +0 -1
Index: 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)
include/asm-powerpc/kprobes.h +0 -1
Index: 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
 
include/asm-s390/kprobes.h +0 -1
Index: 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
include/asm-x86/kprobes_32.h +0 -1
Index: 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;
include/asm-x86/kprobes_64.h +0 -1
Index: 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);
include/linux/kprobes.h +3 -3
Index: 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:
kernel/kprobes.c +3 -3
Index: 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)
 {
#6 lore raw

PATCH 2/2 Kprobes: Build kretprobe samples only if arch supports kretprobes

From: Ananth N Mavinakayanahalli <[email protected]>

This patch builds samples/kprobes/kretprobe_example.c only on archs that support kretprobes.

---
 samples/kprobes/Makefile |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
samples/kprobes/Makefile +5 -2
Index: 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
#7 lore raw

Re: [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig

In reply to Ananth N Mavinakayanahalli
Quoted 10 lines · On Tue, 13 Nov 2007 21:17:10 +0530 Ananth N Mavinakayanahalli…

From: Ananth N Mavinakayanahalli <[email protected]>

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.

#8 lore raw

Re: [patch 1/2] Kprobes: Indicate kretprobe support in arch/<arch>/Kconfig

Quoted 14 lines · * Andrew Morton ([email protected]) wrote:
Quoted 10 lines · On Tue, 13 Nov 2007 21:17:10 +0530 Ananth N Mavinakayanahalli…

From: Ananth N Mavinakayanahalli <[email protected]>

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)

Quoted 7 lines

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

Signature · 3 lines
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68
#9 lore raw
In reply to Ananth N Mavinakayanahalli
Quoted 18 lines · On Tue, 13 Nov 2007 21:09:25 +0530 Ananth N Mavinakayanahalli…
Quoted 17 lines · Andrew Morton
Quoted 9 lines · On Sun, 21 Oct 2007 18:09:19 +0530 Ananth N Mavinakayanahalli…

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'

Quoted 7 lines
Quoted 1 line

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.

Quoted 2 lines

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.