1#ifndef _PROBE_FINDER_H
2#define _PROBE_FINDER_H
3
4#include <stdbool.h>
5#include "intlist.h"
6#include "probe-event.h"
7#include "sane_ctype.h"
8
9#define MAX_PROBE_BUFFER 1024
10#define MAX_PROBES 128
11#define MAX_PROBE_ARGS 128
12
13#define PROBE_ARG_VARS "$vars"
14#define PROBE_ARG_PARAMS "$params"
15
16static inline int is_c_varname(const char *name)
17{
18
19 return isalpha(name[0]) || name[0] == '_';
20}
21
22#ifdef HAVE_DWARF_SUPPORT
23
24#include "dwarf-aux.h"
25
26
27
28
29struct debuginfo {
30 Dwarf *dbg;
31 Dwfl_Module *mod;
32 Dwfl *dwfl;
33 Dwarf_Addr bias;
34};
35
36
37struct debuginfo *debuginfo__new(const char *path);
38void debuginfo__delete(struct debuginfo *dbg);
39
40
41int debuginfo__find_trace_events(struct debuginfo *dbg,
42 struct perf_probe_event *pev,
43 struct probe_trace_event **tevs);
44
45
46int debuginfo__find_probe_point(struct debuginfo *dbg, unsigned long addr,
47 struct perf_probe_point *ppt);
48
49int debuginfo__get_text_offset(struct debuginfo *dbg, Dwarf_Addr *offs,
50 bool adjust_offset);
51
52
53int debuginfo__find_line_range(struct debuginfo *dbg, struct line_range *lr);
54
55
56int debuginfo__find_available_vars_at(struct debuginfo *dbg,
57 struct perf_probe_event *pev,
58 struct variable_list **vls);
59
60
61int get_real_path(const char *raw_path, const char *comp_dir,
62 char **new_path);
63
64struct probe_finder {
65 struct perf_probe_event *pev;
66
67
68 int (*callback)(Dwarf_Die *sc_die, struct probe_finder *pf);
69
70
71 int lno;
72 Dwarf_Addr addr;
73 const char *fname;
74 Dwarf_Die cu_die;
75 Dwarf_Die sp_die;
76 struct intlist *lcache;
77
78
79#if _ELFUTILS_PREREQ(0, 142)
80
81 Dwarf_CFI *cfi_eh;
82
83 Dwarf_CFI *cfi_dbg;
84#endif
85 Dwarf_Op *fb_ops;
86 unsigned int machine;
87 struct perf_probe_arg *pvar;
88 struct probe_trace_arg *tvar;
89};
90
91struct trace_event_finder {
92 struct probe_finder pf;
93 Dwfl_Module *mod;
94 struct probe_trace_event *tevs;
95 int ntevs;
96 int max_tevs;
97};
98
99struct available_var_finder {
100 struct probe_finder pf;
101 Dwfl_Module *mod;
102 struct variable_list *vls;
103 int nvls;
104 int max_vls;
105 bool child;
106};
107
108struct line_finder {
109 struct line_range *lr;
110
111 const char *fname;
112 int lno_s;
113 int lno_e;
114 Dwarf_Die cu_die;
115 Dwarf_Die sp_die;
116 int found;
117};
118
119#endif
120
121#endif
122