[REFACTOR] rename sspt_procs* --> sspt_proc*
[kernel/swap-modules.git] / driver / us_proc_inst.h
1 ////////////////////////////////////////////////////////////////////////////////////
2 //
3 //      FILE:           us_proc_inst.h
4 //
5 //      DESCRIPTION:
6 //
7 //      SEE ALSO:       us_proc_inst.c
8 //      AUTHOR:         A.Gerenkov
9 //      COMPANY NAME:   Samsung Research Center in Moscow
10 //      DEPT NAME:      Advanced Software Group
11 //      CREATED:        2008.06.02
12 //      VERSION:        1.0
13 //      REVISION DATE:  2008.12.03
14 //
15 ////////////////////////////////////////////////////////////////////////////////////
16
17 /*
18     Functions in "us_proc_inst.h" file .
19 */
20
21 #if !defined(__US_PROC_INST_H__)
22 #define __US_PROC_INST_H__
23
24 #include <linux/signal.h>       // struct sigpending
25 #include "sspt/ip.h"
26
27 /* Instruments or schedules pending instrumentation of user space process. */
28 extern int inst_usr_space_proc (void);
29 extern int deinst_usr_space_proc (void);
30
31 /* Detects when IPs are really loaded into phy mem and installs probes. */
32 extern void do_page_fault_j_pre_code(unsigned long addr, unsigned int fsr, struct pt_regs *regs);
33 extern void do_page_fault_ret_pre_code (void);
34
35 /* Detects when target process exits. */
36 extern void do_exit_probe_pre_code (void);
37
38 /* Detects when target removes IPs. */
39 extern void do_munmap_probe_pre_code(struct mm_struct *mm, unsigned long start, size_t len);
40
41 /* Detects when target process removes IPs. */
42 extern void mm_release_probe_pre_code(void);
43
44 /* Delete uprobs in children at fork */
45 extern void copy_process_ret_pre_code(struct task_struct *p);
46
47 extern int us_proc_probes;
48 extern pid_t gl_nNotifyTgid;
49
50 enum {
51         US_PROC_PF_INSTLD    = (1 << 0),
52         US_PROC_CP_INSTLD    = (1 << 1),
53         US_PROC_MR_INSTLD    = (1 << 2),
54         US_PROC_EXIT_INSTLD  = (1 << 3),
55         US_PROC_UNMAP_INSTLD = (1 << 4)
56 };
57
58 /* forward declarations */
59 struct task_struct;
60 struct pt_regs;
61 struct us_proc_ip_t;
62 struct us_ip;
63
64 /* Returns stack_size */
65 extern unsigned long get_stack_size(struct task_struct *task,
66                 struct pt_regs *regs);
67
68 /* Copies stack (or part of the stack) to the buffer */
69 extern unsigned long get_stack(struct task_struct *task, struct pt_regs *regs,
70                 char *buf, unsigned long sz);
71
72 /* Dumps given buffer to the trace */
73 extern int dump_to_trace(probe_id_t probe_id, void *addr, const char *buf,
74                 unsigned long sz);
75
76 /* Dumps stack to the trace */
77 extern int dump_backtrace(probe_id_t probe_id, struct task_struct *task,
78                 void *addr, struct pt_regs *regs, unsigned long sz);
79
80 /* Finds task's kretprobe_instance object */
81 struct kretprobe_instance *find_ri(struct task_struct *task, struct us_ip *ip);
82
83 /* Gets current function return address */
84 extern unsigned long get_ret_addr(struct task_struct *task, struct us_ip *ip);
85
86 /* Gets current function entry stack pointer */
87 extern unsigned long get_entry_sp(struct task_struct *task, struct us_ip *ip);
88
89 extern unsigned long imi_sum_time;
90 extern unsigned long imi_sum_hit;
91
92 extern struct list_head proc_probes_list;
93
94 int register_usprobe(struct task_struct *task, struct us_ip *ip, int atomic);
95 int unregister_usprobe(struct task_struct *task, struct us_ip *ip, int atomic, int no_rp2);
96
97 #define user_backtrace(size) \
98         do { \
99                 us_proc_ip_t *ip = __get_cpu_var(gpCurIp); \
100                 struct pt_regs *regs = __get_cpu_var(gpUserRegs); \
101                 dump_backtrace(US_PROBE_ID, current, ip->jprobe.kp.addr, regs, size); \
102         } while (0)
103
104 struct dentry *dentry_by_path(const char *path);
105 int install_otg_ip(unsigned long addr,
106                         kprobe_pre_entry_handler_t pre_handler,
107                         unsigned long jp_handler,
108                         kretprobe_handler_t rp_handler);
109
110 #endif /* !defined(__US_PROC_INST_H__) */