forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Kprobes: move kprobe examples to samples/
Move kprobes examples from Documentation/kprobes.txt to under samples/. Patch originally by Randy Dunlap. o Updated the patch to apply on 2.6.25-rc3 o Modified examples code to build on multiple architectures. Currently, the kprobe and jprobe examples code works for x86 and powerpc o Cleaned up unneeded #includes o Cleaned up Kconfig per Sam Ravnborg's suggestions to fix build break on archs that don't have kretprobes o Implemented suggestions by Mathieu Desnoyers on CONFIG_KRETPROBES o Included Andrew Morton's cleanup based on x86-git o Modified kretprobe_example to act as a arch-agnostic module to determine routine execution times: Use 'modprobe kretprobe_example func=<func_name>' to determine execution time of func_name in nanoseconds. Signed-off-by: Randy Dunlap <[email protected]> Signed-off-by: Ananth N Mavinakayanahalli <[email protected]> Acked-by: Mathieu Desnoyers <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
- Loading branch information
Ananth N Mavinakayanahalli
authored and
Linus Torvalds
committed
Mar 5, 2008
1 parent
9edddaa
commit 804defe
Showing
7 changed files
with
287 additions
and
239 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
# Makefile for Linux samples code | ||
|
||
obj-$(CONFIG_SAMPLES) += markers/ kobject/ | ||
obj-$(CONFIG_SAMPLES) += markers/ kobject/ kprobes/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
obj-$(CONFIG_SAMPLE_KRETPROBES) += kretprobe_example.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
/* | ||
* Here's a sample kernel module showing the use of jprobes to dump | ||
* the arguments of do_fork(). | ||
* | ||
* For more information on theory of operation of jprobes, see | ||
* Documentation/kprobes.txt | ||
* | ||
* 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(KERN_INFO "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(KERN_INFO "register_jprobe failed, returned %d\n", ret); | ||
return -1; | ||
} | ||
printk(KERN_INFO "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(KERN_INFO "jprobe at %p unregistered\n", my_jprobe.kp.addr); | ||
} | ||
|
||
module_init(jprobe_init) | ||
module_exit(jprobe_exit) | ||
MODULE_LICENSE("GPL"); |
Oops, something went wrong.