perf probe: Introduce debuginfo to encapsulate dwarf information
[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>
4de189fe 5#include "strlist.h"
bd09d7b5 6#include "strfilter.h"
50656eec 7
f4d7da49
MH
8extern bool probe_event_dry_run;
9
4235b045 10/* kprobe-tracer tracing point */
0e60836b 11struct probe_trace_point {
4235b045
MH
12 char *symbol; /* Base symbol */
13 unsigned long offset; /* Offset from symbol */
14 bool retprobe; /* Return probe flag */
15};
16
0e60836b
SD
17/* probe-tracer tracing argument referencing offset */
18struct probe_trace_arg_ref {
19 struct probe_trace_arg_ref *next; /* Next reference */
4235b045
MH
20 long offset; /* Offset value */
21};
22
23/* kprobe-tracer tracing argument */
0e60836b 24struct probe_trace_arg {
4235b045
MH
25 char *name; /* Argument name */
26 char *value; /* Base value */
4984912e 27 char *type; /* Type name */
0e60836b 28 struct probe_trace_arg_ref *ref; /* Referencing offset */
4235b045
MH
29};
30
31/* kprobe-tracer tracing event (point + arg) */
0e60836b 32struct probe_trace_event {
4235b045
MH
33 char *event; /* Event name */
34 char *group; /* Group name */
0e60836b 35 struct probe_trace_point point; /* Trace point */
4235b045 36 int nargs; /* Number of args */
0e60836b 37 struct probe_trace_arg *args; /* Arguments */
4235b045
MH
38};
39
40/* Perf probe probing point */
41struct perf_probe_point {
42 char *file; /* File path */
43 char *function; /* Function name */
44 int line; /* Line number */
eed05fe7 45 bool retprobe; /* Return probe flag */
4235b045
MH
46 char *lazy_line; /* Lazy matching pattern */
47 unsigned long offset; /* Offset from function entry */
4235b045
MH
48};
49
7df2f329
MH
50/* Perf probe probing argument field chain */
51struct perf_probe_arg_field {
52 struct perf_probe_arg_field *next; /* Next field */
53 char *name; /* Name of the field */
b2a3c12b 54 long index; /* Array index number */
7df2f329
MH
55 bool ref; /* Referencing flag */
56};
57
4235b045
MH
58/* Perf probe probing argument */
59struct perf_probe_arg {
7df2f329 60 char *name; /* Argument name */
48481938 61 char *var; /* Variable name */
11a1ca35 62 char *type; /* Type name */
7df2f329 63 struct perf_probe_arg_field *field; /* Structure fields */
4235b045
MH
64};
65
66/* Perf probe probing event (point + arg) */
67struct perf_probe_event {
68 char *event; /* Event name */
69 char *group; /* Group name */
70 struct perf_probe_point point; /* Probe point */
71 int nargs; /* Number of arguments */
72 struct perf_probe_arg *args; /* Arguments */
73};
74
75
76/* Line number container */
77struct line_node {
78 struct list_head list;
d3b63d7a 79 int line;
4235b045
MH
80};
81
82/* Line range */
83struct line_range {
84 char *file; /* File name */
85 char *function; /* Function name */
d3b63d7a
MH
86 int start; /* Start line number */
87 int end; /* End line number */
4235b045
MH
88 int offset; /* Start line offset */
89 char *path; /* Real path name */
6a330a3c 90 char *comp_dir; /* Compile directory */
4235b045
MH
91 struct list_head line_list; /* Visible lines */
92};
93
cf6eb489
MH
94/* List of variables */
95struct variable_list {
96 struct probe_trace_point point; /* Actual probepoint */
97 struct strlist *vars; /* Available variables */
98};
99
4235b045 100/* Command string to events */
146a1439
MH
101extern int parse_perf_probe_command(const char *cmd,
102 struct perf_probe_event *pev);
4235b045
MH
103
104/* Events to command string */
105extern char *synthesize_perf_probe_command(struct perf_probe_event *pev);
0e60836b 106extern char *synthesize_probe_trace_command(struct probe_trace_event *tev);
7df2f329
MH
107extern int synthesize_perf_probe_arg(struct perf_probe_arg *pa, char *buf,
108 size_t len);
4235b045
MH
109
110/* Check the perf_probe_event needs debuginfo */
111extern bool perf_probe_event_need_dwarf(struct perf_probe_event *pev);
112
4235b045
MH
113/* Release event contents */
114extern void clear_perf_probe_event(struct perf_probe_event *pev);
4235b045
MH
115
116/* Command string to line-range */
146a1439 117extern int parse_line_range_desc(const char *cmd, struct line_range *lr);
4235b045 118
469b9b88
MH
119/* Internal use: Return kernel/module path */
120extern const char *kernel_get_module_path(const char *module);
4235b045 121
ef4a3565 122extern int add_perf_probe_events(struct perf_probe_event *pevs, int npevs,
469b9b88
MH
123 int max_probe_points, const char *module,
124 bool force_add);
146a1439
MH
125extern int del_perf_probe_events(struct strlist *dellist);
126extern int show_perf_probe_events(void);
469b9b88 127extern int show_line_range(struct line_range *lr, const char *module);
cf6eb489 128extern int show_available_vars(struct perf_probe_event *pevs, int npevs,
469b9b88 129 int max_probe_points, const char *module,
bd09d7b5 130 struct strfilter *filter, bool externs);
3c42258c 131extern int show_available_funcs(const char *module, struct strfilter *filter);
50656eec 132
4235b045 133
b498ce1f
MH
134/* Maximum index number of event-name postfix */
135#define MAX_EVENT_INDEX 1024
136
50656eec 137#endif /*_PROBE_EVENT_H */