Merge remote-tracking branch 'kspp/for-next/kspp'
[deliverable/linux.git] / tools / perf / util / probe-event.h
CommitLineData
50656eec
MH
1#ifndef _PROBE_EVENT_H
2#define _PROBE_EVENT_H
3
fac13fd5 4#include <stdbool.h>
5a62257a 5#include "intlist.h"
4de189fe 6#include "strlist.h"
bd09d7b5 7#include "strfilter.h"
50656eec 8
ddb2f58f
MH
9/* Probe related configurations */
10struct probe_conf {
11 bool show_ext_vars;
349e8d26 12 bool show_location_range;
ddb2f58f 13 bool force_add;
6cfd1f68 14 bool no_inlines;
2fd457a3 15 bool cache;
ddb2f58f
MH
16 int max_probes;
17};
18extern struct probe_conf probe_conf;
f4d7da49
MH
19extern bool probe_event_dry_run;
20
225466f1 21/* kprobe-tracer and uprobe-tracer tracing point */
0e60836b 22struct probe_trace_point {
4c859351 23 char *realname; /* function real name (if needed) */
4235b045 24 char *symbol; /* Base symbol */
190b57fc 25 char *module; /* Module name */
4235b045 26 unsigned long offset; /* Offset from symbol */
fb7345bb 27 unsigned long address; /* Actual address of the trace point */
4235b045
MH
28 bool retprobe; /* Return probe flag */
29};
30
0e60836b
SD
31/* probe-tracer tracing argument referencing offset */
32struct probe_trace_arg_ref {
33 struct probe_trace_arg_ref *next; /* Next reference */
4235b045
MH
34 long offset; /* Offset value */
35};
36
225466f1 37/* kprobe-tracer and uprobe-tracer tracing argument */
0e60836b 38struct probe_trace_arg {
4235b045
MH
39 char *name; /* Argument name */
40 char *value; /* Base value */
4984912e 41 char *type; /* Type name */
0e60836b 42 struct probe_trace_arg_ref *ref; /* Referencing offset */
4235b045
MH
43};
44
225466f1 45/* kprobe-tracer and uprobe-tracer tracing event (point + arg) */
0e60836b 46struct probe_trace_event {
4235b045
MH
47 char *event; /* Event name */
48 char *group; /* Group name */
0e60836b 49 struct probe_trace_point point; /* Trace point */
4235b045 50 int nargs; /* Number of args */
225466f1 51 bool uprobes; /* uprobes only */
0e60836b 52 struct probe_trace_arg *args; /* Arguments */
4235b045
MH
53};
54
55/* Perf probe probing point */
56struct perf_probe_point {
57 char *file; /* File path */
58 char *function; /* Function name */
59 int line; /* Line number */
eed05fe7 60 bool retprobe; /* Return probe flag */
4235b045
MH
61 char *lazy_line; /* Lazy matching pattern */
62 unsigned long offset; /* Offset from function entry */
da15bd9d 63 unsigned long abs_address; /* Absolute address of the point */
4235b045
MH
64};
65
7df2f329
MH
66/* Perf probe probing argument field chain */
67struct perf_probe_arg_field {
68 struct perf_probe_arg_field *next; /* Next field */
69 char *name; /* Name of the field */
b2a3c12b 70 long index; /* Array index number */
7df2f329
MH
71 bool ref; /* Referencing flag */
72};
73
4235b045
MH
74/* Perf probe probing argument */
75struct perf_probe_arg {
7df2f329 76 char *name; /* Argument name */
48481938 77 char *var; /* Variable name */
11a1ca35 78 char *type; /* Type name */
7df2f329 79 struct perf_probe_arg_field *field; /* Structure fields */
4235b045
MH
80};
81
82/* Perf probe probing event (point + arg) */
83struct perf_probe_event {
84 char *event; /* Event name */
85 char *group; /* Group name */
86 struct perf_probe_point point; /* Probe point */
87 int nargs; /* Number of arguments */
36a009fe 88 bool sdt; /* SDT/cached event flag */
7afb3fab
MH
89 bool uprobes; /* Uprobe event flag */
90 char *target; /* Target binary */
4235b045 91 struct perf_probe_arg *args; /* Arguments */
12fae5ef
WN
92 struct probe_trace_event *tevs;
93 int ntevs;
4235b045
MH
94};
95
4235b045
MH
96/* Line range */
97struct line_range {
98 char *file; /* File name */
99 char *function; /* Function name */
d3b63d7a
MH
100 int start; /* Start line number */
101 int end; /* End line number */
4235b045
MH
102 int offset; /* Start line offset */
103 char *path; /* Real path name */
6a330a3c 104 char *comp_dir; /* Compile directory */
5a62257a 105 struct intlist *line_list; /* Visible lines */
4235b045
MH
106};
107
cf6eb489
MH
108/* List of variables */
109struct variable_list {
110 struct probe_trace_point point; /* Actual probepoint */
111 struct strlist *vars; /* Available variables */
112};
113
5a023b57 114struct map;
9bae1e8c
NK
115int init_probe_symbol_maps(bool user_only);
116void exit_probe_symbol_maps(void);
5a023b57 117
4235b045 118/* Command string to events */
3938bad4
ACM
119int parse_perf_probe_command(const char *cmd, struct perf_probe_event *pev);
120int parse_probe_trace_command(const char *cmd, struct probe_trace_event *tev);
4235b045
MH
121
122/* Events to command string */
3938bad4
ACM
123char *synthesize_perf_probe_command(struct perf_probe_event *pev);
124char *synthesize_probe_trace_command(struct probe_trace_event *tev);
909b0360 125char *synthesize_perf_probe_arg(struct perf_probe_arg *pa);
c4ff4920 126char *synthesize_perf_probe_point(struct perf_probe_point *pp);
4235b045 127
0542bb9c
MH
128int perf_probe_event__copy(struct perf_probe_event *dst,
129 struct perf_probe_event *src);
130
4235b045 131/* Check the perf_probe_event needs debuginfo */
3938bad4 132bool perf_probe_event_need_dwarf(struct perf_probe_event *pev);
4235b045 133
4235b045 134/* Release event contents */
3938bad4
ACM
135void clear_perf_probe_event(struct perf_probe_event *pev);
136void clear_probe_trace_event(struct probe_trace_event *tev);
4235b045
MH
137
138/* Command string to line-range */
3938bad4 139int parse_line_range_desc(const char *cmd, struct line_range *lr);
4235b045 140
e53b00d3 141/* Release line range members */
3938bad4 142void line_range__clear(struct line_range *lr);
e53b00d3
MH
143
144/* Initialize line range */
3938bad4
ACM
145int line_range__init(struct line_range *lr);
146
147int add_perf_probe_events(struct perf_probe_event *pevs, int npevs);
148int convert_perf_probe_events(struct perf_probe_event *pevs, int npevs);
149int apply_perf_probe_events(struct perf_probe_event *pevs, int npevs);
150void cleanup_perf_probe_events(struct perf_probe_event *pevs, int npevs);
151int del_perf_probe_events(struct strfilter *filter);
152
153int show_perf_probe_event(const char *group, const char *event,
154 struct perf_probe_event *pev,
155 const char *module, bool use_stdout);
156int show_perf_probe_events(struct strfilter *filter);
157int show_line_range(struct line_range *lr, const char *module, bool user);
158int show_available_vars(struct perf_probe_event *pevs, int npevs,
159 struct strfilter *filter);
160int show_available_funcs(const char *module, struct strfilter *filter, bool user);
7b6ff0bd 161void arch__fix_tev_from_maps(struct perf_probe_event *pev,
0b3c2264
NR
162 struct probe_trace_event *tev, struct map *map,
163 struct symbol *sym);
4235b045 164
92f6c72e
MH
165/* If there is no space to write, returns -E2BIG. */
166int e_snprintf(char *str, size_t size, const char *format, ...)
167 __attribute__((format(printf, 3, 4)));
168
b498ce1f
MH
169/* Maximum index number of event-name postfix */
170#define MAX_EVENT_INDEX 1024
171
da15bd9d
WN
172int copy_to_probe_trace_arg(struct probe_trace_arg *tvar,
173 struct perf_probe_arg *pvar);
174
99e608b5
RB
175struct map *get_target_map(const char *target, bool user);
176
177void arch__post_process_probe_trace_events(struct perf_probe_event *pev,
178 int ntevs);
179
50656eec 180#endif /*_PROBE_EVENT_H */
This page took 0.276696 seconds and 5 git commands to generate.