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