perf-probe: Move dwarf library routines to dwarf-aux.{c, h}
[firefly-linux-kernel-4.4.55.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 #ifdef DWARF_SUPPORT
19 /* Find probe_trace_events specified by perf_probe_event from debuginfo */
20 extern int find_probe_trace_events(int fd, struct perf_probe_event *pev,
21                                     struct probe_trace_event **tevs,
22                                     int max_tevs);
23
24 /* Find a perf_probe_point from debuginfo */
25 extern int find_perf_probe_point(unsigned long addr,
26                                  struct perf_probe_point *ppt);
27
28 /* Find a line range */
29 extern int find_line_range(int fd, struct line_range *lr);
30
31 /* Find available variables */
32 extern int find_available_vars_at(int fd, struct perf_probe_event *pev,
33                                   struct variable_list **vls, int max_points,
34                                   bool externs);
35 #include "dwarf-aux.h"
36
37 struct probe_finder {
38         struct perf_probe_event *pev;           /* Target probe event */
39
40         /* Callback when a probe point is found */
41         int (*callback)(Dwarf_Die *sp_die, struct probe_finder *pf);
42
43         /* For function searching */
44         int                     lno;            /* Line number */
45         Dwarf_Addr              addr;           /* Address */
46         const char              *fname;         /* Real file name */
47         Dwarf_Die               cu_die;         /* Current CU */
48         Dwarf_Die               sp_die;
49         struct list_head        lcache;         /* Line cache for lazy match */
50
51         /* For variable searching */
52 #if _ELFUTILS_PREREQ(0, 142)
53         Dwarf_CFI               *cfi;           /* Call Frame Information */
54 #endif
55         Dwarf_Op                *fb_ops;        /* Frame base attribute */
56         struct perf_probe_arg   *pvar;          /* Current target variable */
57         struct probe_trace_arg  *tvar;          /* Current result variable */
58 };
59
60 struct trace_event_finder {
61         struct probe_finder     pf;
62         struct probe_trace_event *tevs;         /* Found trace events */
63         int                     ntevs;          /* Number of trace events */
64         int                     max_tevs;       /* Max number of trace events */
65 };
66
67 struct available_var_finder {
68         struct probe_finder     pf;
69         struct variable_list    *vls;           /* Found variable lists */
70         int                     nvls;           /* Number of variable lists */
71         int                     max_vls;        /* Max no. of variable lists */
72         bool                    externs;        /* Find external vars too */
73         bool                    child;          /* Search child scopes */
74 };
75
76 struct line_finder {
77         struct line_range       *lr;            /* Target line range */
78
79         const char              *fname;         /* File name */
80         int                     lno_s;          /* Start line number */
81         int                     lno_e;          /* End line number */
82         Dwarf_Die               cu_die;         /* Current CU */
83         Dwarf_Die               sp_die;
84         int                     found;
85 };
86
87 #endif /* DWARF_SUPPORT */
88
89 #endif /*_PROBE_FINDER_H */