1 ////////////////////////////////////////////////////////////////////////////////////
6 // This file is C source for SWAP.
9 // AUTHOR: L.Komkov, S.Dianov, A.Gerenkov
10 // COMPANY NAME: Samsung Research Center in Moscow
11 // DEPT NAME: Advanced Software Group
12 // CREATED: 2008.02.15
14 // REVISION DATE: 2008.12.03
16 ////////////////////////////////////////////////////////////////////////////////////
18 #if !defined(__STORAGE_H__)
21 #include <linux/mount.h>
22 #include <linux/module.h>
23 #include <linux/list.h>
24 #include <linux/spinlock.h>
28 #include "probes_manager.h"
30 #include "event_tmpl.h"
32 ///////////////////////////////////////////////////////////////////////////////////////////////////
34 extern int EnableContinuousRetrieval(void);
35 extern int DisableContinuousRetrieval(void);
37 ///////////////////////////////////////////////////////////////////////////////////////////////////
39 extern unsigned int GetBufferSize(void);
40 extern int SetBufferSize(unsigned int nSize);
41 extern int ResetBuffer(void);
43 extern int SetPid(unsigned int pid);
45 //extern spinlock_t buffer_spinlock;
47 ///////////////////////////////////////////////////////////////////////////////////////////////////
50 Functions "storage_init()" and "storage_down()" are for initialization and
51 shutdown respectively.
53 extern int storage_init (void);
54 extern void storage_down (void);
57 Function "pack_event_info()" saves information about event into buffer. It
58 is used in 'probes' to pack and save event data.
60 extern void pack_event_info (probe_id_t probe_id, record_type_t record_type, const char *fmt, ...);
62 /* Set most links from us_proc_info to data in the bundle */
63 int link_bundle(void);
65 /* Undo the actions of link_bundle() */
66 void unlink_bundle(void);
69 Adds non-predefined kernel probe to the list.
71 extern int add_probe_to_list (unsigned long addr, kernel_probe_t ** pprobe);
74 Removes non-predefined kernel probe from the list.
76 extern int remove_probe_from_list (unsigned long addr);
79 Searches non-predefined kernel probe in the list.
81 extern kernel_probe_t *find_probe (unsigned long addr);
84 Copies event from user space to buffer and updates its pid/tid/cpu/time.
86 extern int put_us_event (char *data, unsigned long len);
91 extern int set_event_mask (int new_mask);
96 extern int get_event_mask (int *mask);
99 Sets predefined user space probes info.
101 extern int set_predef_uprobes (ioctl_predef_uprobes_info_t *data);
103 Gets predefined user space probes info length.
105 extern int get_predef_uprobes_size(int *size);
107 Gets predefined user space probes info.
109 extern int get_predef_uprobes(ioctl_predef_uprobes_info_t *data);
112 // internal bookkeeping of storage
113 extern char *p_buffer;
115 // list of selected non-predefined kernel probes
116 extern struct hlist_head kernel_probes;
118 // multiple handlers stuff
119 /*struct dbi_modules_handlers {
120 struct list_head modules_handlers;
124 struct dbi_modules_handlers_info {
125 struct module *dbi_module;
126 struct handler_map *dbi_handlers;
128 struct list_head dbi_list_head;
131 extern int dbi_register_handlers_module(struct dbi_modules_handlers_info *dbi_mhi);
132 extern int dbi_unregister_handlers_module(struct dbi_modules_handlers_info *dbi_mhi);
133 //unsigned long get_dbi_modules_handlers(void);*/
135 /* list of on-the-go installed kernel probes */
136 extern struct hlist_head otg_kernel_probes;
139 extern int event_mask;
141 // process pid to instrument
142 extern unsigned int inst_pid;
146 struct list_head list;
149 struct jprobe jprobe;
150 struct kretprobe retprobe;
151 unsigned long offset;
152 unsigned long got_addr;
154 unsigned flag_retprobe:1;
159 struct list_head list;
161 struct jprobe jprobe;
162 struct kretprobe retprobe;
164 unsigned long offset;
165 unsigned long got_addr;
167 unsigned flag_retprobe:1;
174 struct jprobe jprobe;
176 struct list_head list;
184 signed char reg; // -1 - memory, 0..127 - register number
186 struct list_head list;
187 } us_proc_vtp_data_t;
193 unsigned real_func_addr;
200 struct dentry *m_f_dentry;
204 us_proc_vtp_t *p_vtps;
207 us_proc_plt_t *p_plt;
208 unsigned long vma_start;
209 unsigned long vma_end;
217 struct dentry *m_f_dentry;
219 unsigned unres_ips_count;
220 unsigned unres_vtps_count;
221 //kprobe_opcode_t *mapped_codelets;
224 us_proc_lib_t *p_libs;
226 unsigned long libdvm_start;
227 unsigned long libdvm_end;
228 us_proc_ip_t libdvm_entry_ip;
229 us_proc_ip_t libdvm_return_ip;
230 #endif /* __ANDROID */
233 struct proc_probes *pp;
239 unsigned int inst_type;
251 dex_proc_ip_t *p_ips;
257 /* cond data itself */
258 struct event_tmpl tmpl;
260 struct list_head list;
261 /* has been applied (for start and stop conditions) */
265 extern struct cond cond_list;
267 /* macros for testing flags */
268 #define ET_FIELD_CLR(flags, field) (flags &= ~field)
269 #define ET_FIELD_SET(flags, field) (flags |= field)
270 #define ET_FIELD_ISSET(flags, field) ((flags & field) != 0)
272 extern inst_us_proc_t us_proc_info;
273 extern inst_dex_proc_t dex_proc_info;
275 #endif /* !defined(__STORAGE_H__) */