1 ////////////////////////////////////////////////////////////////////////////////////
3 // FILE: us_proc_inst.h
7 // SEE ALSO: us_proc_inst.c
9 // COMPANY NAME: Samsung Research Center in Moscow
10 // DEPT NAME: Advanced Software Group
11 // CREATED: 2008.06.02
13 // REVISION DATE: 2008.12.03
15 ////////////////////////////////////////////////////////////////////////////////////
18 Functions in "us_proc_inst.h" file .
21 #if !defined(__US_PROC_INST_H__)
22 #define __US_PROC_INST_H__
24 #include <linux/signal.h> // struct sigpending
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);
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);
35 /* Detects when target process exits. */
36 extern void do_exit_probe_pre_code (void);
38 /* Detects when target removes IPs. */
39 extern void do_munmap_probe_pre_code(struct mm_struct *mm, unsigned long start, size_t len);
41 /* Detects when target process removes IPs. */
42 extern void mm_release_probe_pre_code(void);
44 /* Delete uprobs in children at fork */
45 extern void copy_process_ret_pre_code(struct task_struct *p);
47 extern int us_proc_probes;
48 extern pid_t gl_nNotifyTgid;
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)
58 /* forward declarations */
64 /* Returns stack_size */
65 extern unsigned long get_stack_size(struct task_struct *task,
66 struct pt_regs *regs);
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);
72 /* Dumps given buffer to the trace */
73 extern int dump_to_trace(probe_id_t probe_id, void *addr, const char *buf,
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);
80 /* Finds task's kretprobe_instance object */
81 struct kretprobe_instance *find_ri(struct task_struct *task, struct us_ip *ip);
83 /* Gets current function return address */
84 extern unsigned long get_ret_addr(struct task_struct *task, struct us_ip *ip);
86 /* Gets current function entry stack pointer */
87 extern unsigned long get_entry_sp(struct task_struct *task, struct us_ip *ip);
89 extern unsigned long imi_sum_time;
90 extern unsigned long imi_sum_hit;
92 extern struct list_head proc_probes_list;
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);
97 #define user_backtrace(size) \
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); \
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);
110 #endif /* !defined(__US_PROC_INST_H__) */