Merge commit 'v2.6.34-rc2' into perf/core
[linux-2.6-block.git] / tools / perf / util / probe-finder.h
1 #ifndef _PROBE_FINDER_H
2 #define _PROBE_FINDER_H
3
4 #include <stdbool.h>
5 #include "util.h"
6 #include "probe-event.h"
7
8 #define MAX_PATH_LEN             256
9 #define MAX_PROBE_BUFFER        1024
10 #define MAX_PROBES               128
11
12 static inline int is_c_varname(const char *name)
13 {
14         /* TODO */
15         return isalpha(name[0]) || name[0] == '_';
16 }
17
18 #ifndef NO_DWARF_SUPPORT
19 /* Find kprobe_trace_events specified by perf_probe_event from debuginfo */
20 extern int find_kprobe_trace_events(int fd, struct perf_probe_event *pev,
21                                     struct kprobe_trace_event **tevs);
22
23 /* Find a perf_probe_point from debuginfo */
24 extern int find_perf_probe_point(int fd, unsigned long addr,
25                                  struct perf_probe_point *ppt);
26
27 extern int find_line_range(int fd, struct line_range *lr);
28
29 #include <dwarf.h>
30 #include <libdw.h>
31
32 struct probe_finder {
33         struct perf_probe_event *pev;           /* Target probe event */
34         int                     ntevs;          /* number of trace events */
35         struct kprobe_trace_event *tevs;        /* Result trace events */
36
37         /* For function searching */
38         Dwarf_Addr              addr;           /* Address */
39         const char              *fname;         /* Real file name */
40         int                     lno;            /* Line number */
41         Dwarf_Die               cu_die;         /* Current CU */
42         struct list_head        lcache;         /* Line cache for lazy match */
43
44         /* For variable searching */
45         Dwarf_Op                *fb_ops;        /* Frame base attribute */
46         struct perf_probe_arg   *pvar;          /* Current target variable */
47         struct kprobe_trace_arg *tvar;          /* Current result variable */
48 };
49
50 struct line_finder {
51         struct line_range       *lr;            /* Target line range */
52
53         const char              *fname;         /* File name */
54         int                     lno_s;          /* Start line number */
55         int                     lno_e;          /* End line number */
56         Dwarf_Die               cu_die;         /* Current CU */
57         int                     found;
58 };
59
60 #endif /* NO_DWARF_SUPPORT */
61
62 #endif /*_PROBE_FINDER_H */