Redesign KProbe module (separating core and arch parts).
[kernel/swap-modules.git] / driver / probes.h
1 ////////////////////////////////////////////////////////////////////////////////////
2 //
3 //      FILE:           probes.h
4 //
5 //      DESCRIPTION:
6 //
7 //      SEE ALSO:       probes.c
8 //      AUTHOR:         L.Komkov, S.Grekhov, A.Gerenkov
9 //      COMPANY NAME:   Samsung Research Center in Moscow
10 //      DEPT NAME:      Advanced Software Group 
11 //      CREATED:        2008.02.15
12 //      VERSION:        1.0
13 //      REVISION DATE:  2008.12.03
14 //
15 ////////////////////////////////////////////////////////////////////////////////////
16
17 #ifndef __PROBES_H__
18 #define __PROBES_H__
19
20 #include "ec_probe.h"
21 #include "storage.h"
22 #include "../kprobe/dbi_kprobes.h"
23
24 #ifndef regs_return_value
25 /* "regs_return_value" is ARCH-dependent. ARCH is passed via "EC_ARCH_*" */
26
27 #ifdef EC_ARCH_arm
28 /* ARCH == arm */
29 #define regs_return_value(regs) ((regs)->ARM_r0)
30 #endif /* def EC_ARCH_arm */
31
32 #ifdef EC_ARCH_i386
33 /* ARCH == i386 */
34 //#include <linux/kprobes.h>
35 #define regs_return_value(regs) ((regs)->ax)
36 #endif /* def EC_ARCH_i386 */
37
38 #ifdef EC_ARCH_mips
39 /* ARCH == mips */
40 #define regs_return_value(regs) ((regs)->regs[2])
41 #endif /* def EC_ARCH_mips */
42
43 #endif /* ndef regs_return_value */
44
45 extern struct jprobe my_jprobe[];
46 extern const char *ec_probe_name[];
47
48 extern struct kretprobe my_kretprobe[];
49
50 #define MY_JPROBE_ENTRY(handler_entry) { .entry = JPROBE_ENTRY(handler_entry) }
51
52 /* Probe up to 20 instances concurrently. */
53 #define MAXACTIVE 20
54
55 #define MY_RETPROBE_HANDLER(handler_entry) { .handler = (handler_entry), .maxactive = MAXACTIVE }
56
57 #define MY_UAPP(_ips_arr) { .path="", .m_f_dentry=NULL, \
58         .ips_count=sizeof(_ips_arr)/sizeof(us_proc_ip_t), .p_ips=_ips_arr, \
59         .vtps_count=0, .p_vtps=NULL, .loaded=0}
60 #define MY_ULIB(_lib, _ips_arr) { .path=#_lib, .m_f_dentry=NULL, \
61         .ips_count=sizeof(_ips_arr)/sizeof(us_proc_ip_t), .p_ips=_ips_arr, \
62         .vtps_count=0, .p_vtps=NULL, .loaded=0}
63 #define MY_UPROBE_ENTRY(_name, _entry_hand, _exit_hand) {.name = #_name, \
64         .jprobe.entry = JPROBE_ENTRY(_entry_hand), \
65         .retprobe.handler = (kretprobe_handler_t)_exit_hand}
66 #define MY_UPROBE_ENTRY_EXT(_name, _pre_entry_hand, _entry_hand, _exit_hand) {.name = #_name, .jprobe.pre_entry = (kprobe_pre_entry_handler_t)_pre_entry_hand, .jprobe.entry = JPROBE_ENTRY(_entry_hand), .retprobe.handler = (kretprobe_handler_t)_exit_hand}
67
68 #endif // __PROBES_H__