blob: 1e2faa3559d2a5544d630c1eb6b89a8e4e59ecc3 [file] [log] [blame]
Masami Hiramatsu50656ee2009-11-30 19:19:58 -05001#ifndef _PROBE_EVENT_H
2#define _PROBE_EVENT_H
3
Masami Hiramatsufac13fd2009-12-15 10:31:14 -05004#include <stdbool.h>
Masami Hiramatsu5a622572014-02-06 05:32:09 +00005#include "intlist.h"
Masami Hiramatsu4de189f2009-11-30 19:20:17 -05006#include "strlist.h"
Masami Hiramatsubd09d7b2011-01-20 23:15:39 +09007#include "strfilter.h"
Masami Hiramatsu50656ee2009-11-30 19:19:58 -05008
Masami Hiramatsuddb2f582015-05-08 10:03:31 +09009/* Probe related configurations */
10struct probe_conf {
11 bool show_ext_vars;
12 bool force_add;
Masami Hiramatsu6cfd1f62015-05-08 10:03:33 +090013 bool no_inlines;
Masami Hiramatsuddb2f582015-05-08 10:03:31 +090014 int max_probes;
15};
16extern struct probe_conf probe_conf;
Masami Hiramatsuf4d7da42010-03-16 18:06:05 -040017extern bool probe_event_dry_run;
18
Srikar Dronamraju225466f2012-04-16 17:39:09 +053019/* kprobe-tracer and uprobe-tracer tracing point */
Srikar Dronamraju0e608362010-07-29 19:43:51 +053020struct probe_trace_point {
Masami Hiramatsu4c859352015-05-08 10:03:35 +090021 char *realname; /* function real name (if needed) */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040022 char *symbol; /* Base symbol */
Masami Hiramatsu190b57f2011-06-27 16:27:45 +090023 char *module; /* Module name */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040024 unsigned long offset; /* Offset from symbol */
Masami Hiramatsufb7345b2013-12-26 05:41:53 +000025 unsigned long address; /* Actual address of the trace point */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040026 bool retprobe; /* Return probe flag */
27};
28
Srikar Dronamraju0e608362010-07-29 19:43:51 +053029/* probe-tracer tracing argument referencing offset */
30struct probe_trace_arg_ref {
31 struct probe_trace_arg_ref *next; /* Next reference */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040032 long offset; /* Offset value */
33};
34
Srikar Dronamraju225466f2012-04-16 17:39:09 +053035/* kprobe-tracer and uprobe-tracer tracing argument */
Srikar Dronamraju0e608362010-07-29 19:43:51 +053036struct probe_trace_arg {
Masami Hiramatsu4235b042010-03-16 18:06:12 -040037 char *name; /* Argument name */
38 char *value; /* Base value */
Masami Hiramatsu49849122010-04-12 13:17:15 -040039 char *type; /* Type name */
Srikar Dronamraju0e608362010-07-29 19:43:51 +053040 struct probe_trace_arg_ref *ref; /* Referencing offset */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040041};
42
Srikar Dronamraju225466f2012-04-16 17:39:09 +053043/* kprobe-tracer and uprobe-tracer tracing event (point + arg) */
Srikar Dronamraju0e608362010-07-29 19:43:51 +053044struct probe_trace_event {
Masami Hiramatsu4235b042010-03-16 18:06:12 -040045 char *event; /* Event name */
46 char *group; /* Group name */
Srikar Dronamraju0e608362010-07-29 19:43:51 +053047 struct probe_trace_point point; /* Trace point */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040048 int nargs; /* Number of args */
Srikar Dronamraju225466f2012-04-16 17:39:09 +053049 bool uprobes; /* uprobes only */
Srikar Dronamraju0e608362010-07-29 19:43:51 +053050 struct probe_trace_arg *args; /* Arguments */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040051};
52
53/* Perf probe probing point */
54struct perf_probe_point {
55 char *file; /* File path */
56 char *function; /* Function name */
57 int line; /* Line number */
Arnaldo Carvalho de Meloeed05fe2010-04-05 12:53:45 -030058 bool retprobe; /* Return probe flag */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040059 char *lazy_line; /* Lazy matching pattern */
60 unsigned long offset; /* Offset from function entry */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040061};
62
Masami Hiramatsu7df2f322010-03-16 18:06:26 -040063/* Perf probe probing argument field chain */
64struct perf_probe_arg_field {
65 struct perf_probe_arg_field *next; /* Next field */
66 char *name; /* Name of the field */
Masami Hiramatsub2a3c122010-05-19 15:57:42 -040067 long index; /* Array index number */
Masami Hiramatsu7df2f322010-03-16 18:06:26 -040068 bool ref; /* Referencing flag */
69};
70
Masami Hiramatsu4235b042010-03-16 18:06:12 -040071/* Perf probe probing argument */
72struct perf_probe_arg {
Masami Hiramatsu7df2f322010-03-16 18:06:26 -040073 char *name; /* Argument name */
Masami Hiramatsu48481932010-04-12 13:16:53 -040074 char *var; /* Variable name */
Masami Hiramatsu11a1ca32010-04-12 13:17:22 -040075 char *type; /* Type name */
Masami Hiramatsu7df2f322010-03-16 18:06:26 -040076 struct perf_probe_arg_field *field; /* Structure fields */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040077};
78
79/* Perf probe probing event (point + arg) */
80struct perf_probe_event {
81 char *event; /* Event name */
82 char *group; /* Group name */
83 struct perf_probe_point point; /* Probe point */
84 int nargs; /* Number of arguments */
Masami Hiramatsu7afb3fa2015-04-01 19:25:39 +090085 bool uprobes; /* Uprobe event flag */
86 char *target; /* Target binary */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040087 struct perf_probe_arg *args; /* Arguments */
88};
89
Masami Hiramatsu4235b042010-03-16 18:06:12 -040090/* Line range */
91struct line_range {
92 char *file; /* File name */
93 char *function; /* Function name */
Masami Hiramatsud3b63d72010-04-14 18:39:42 -040094 int start; /* Start line number */
95 int end; /* End line number */
Masami Hiramatsu4235b042010-03-16 18:06:12 -040096 int offset; /* Start line offset */
97 char *path; /* Real path name */
Masami Hiramatsu6a330a32010-07-09 18:29:11 +090098 char *comp_dir; /* Compile directory */
Masami Hiramatsu5a622572014-02-06 05:32:09 +000099 struct intlist *line_list; /* Visible lines */
Masami Hiramatsu4235b042010-03-16 18:06:12 -0400100};
101
Masami Hiramatsucf6eb482010-10-21 19:13:23 +0900102/* List of variables */
103struct variable_list {
104 struct probe_trace_point point; /* Actual probepoint */
105 struct strlist *vars; /* Available variables */
106};
107
Masami Hiramatsu4235b042010-03-16 18:06:12 -0400108/* Command string to events */
Masami Hiramatsu146a1432010-04-12 13:17:42 -0400109extern int parse_perf_probe_command(const char *cmd,
110 struct perf_probe_event *pev);
Masami Hiramatsu4235b042010-03-16 18:06:12 -0400111
112/* Events to command string */
113extern char *synthesize_perf_probe_command(struct perf_probe_event *pev);
Srikar Dronamraju0e608362010-07-29 19:43:51 +0530114extern char *synthesize_probe_trace_command(struct probe_trace_event *tev);
Masami Hiramatsu7df2f322010-03-16 18:06:26 -0400115extern int synthesize_perf_probe_arg(struct perf_probe_arg *pa, char *buf,
116 size_t len);
Masami Hiramatsu4235b042010-03-16 18:06:12 -0400117
118/* Check the perf_probe_event needs debuginfo */
119extern bool perf_probe_event_need_dwarf(struct perf_probe_event *pev);
120
Masami Hiramatsu4235b042010-03-16 18:06:12 -0400121/* Release event contents */
122extern void clear_perf_probe_event(struct perf_probe_event *pev);
Masami Hiramatsu4235b042010-03-16 18:06:12 -0400123
124/* Command string to line-range */
Masami Hiramatsu146a1432010-04-12 13:17:42 -0400125extern int parse_line_range_desc(const char *cmd, struct line_range *lr);
Masami Hiramatsu4235b042010-03-16 18:06:12 -0400126
Masami Hiramatsue53b00d2014-01-16 09:39:47 +0000127/* Release line range members */
128extern void line_range__clear(struct line_range *lr);
129
130/* Initialize line range */
Masami Hiramatsu5a622572014-02-06 05:32:09 +0000131extern int line_range__init(struct line_range *lr);
Masami Hiramatsue53b00d2014-01-16 09:39:47 +0000132
Masami Hiramatsu469b9b82010-10-21 19:13:41 +0900133/* Internal use: Return kernel/module path */
134extern const char *kernel_get_module_path(const char *module);
Masami Hiramatsu4235b042010-03-16 18:06:12 -0400135
Masami Hiramatsuddb2f582015-05-08 10:03:31 +0900136extern int add_perf_probe_events(struct perf_probe_event *pevs, int npevs);
Masami Hiramatsu307a4642015-05-05 11:29:48 +0900137extern int del_perf_probe_events(struct strfilter *filter);
Masami Hiramatsub6a89642015-04-24 18:47:50 +0900138extern int show_perf_probe_events(struct strfilter *filter);
Masami Hiramatsu2b394bc2014-09-17 08:40:54 +0000139extern int show_line_range(struct line_range *lr, const char *module,
140 bool user);
Masami Hiramatsucf6eb482010-10-21 19:13:23 +0900141extern int show_available_vars(struct perf_probe_event *pevs, int npevs,
Masami Hiramatsuddb2f582015-05-08 10:03:31 +0900142 struct strfilter *filter);
Srikar Dronamraju225466f2012-04-16 17:39:09 +0530143extern int show_available_funcs(const char *module, struct strfilter *filter,
144 bool user);
Naveen N. Raod5c2e2c2015-04-28 17:35:39 +0530145bool arch__prefers_symtab(void);
Naveen N. Rao7b6ff0b2015-04-28 17:35:40 +0530146void arch__fix_tev_from_maps(struct perf_probe_event *pev,
147 struct probe_trace_event *tev, struct map *map);
Masami Hiramatsu4235b042010-03-16 18:06:12 -0400148
Masami Hiramatsub498ce12009-11-30 19:20:25 -0500149/* Maximum index number of event-name postfix */
150#define MAX_EVENT_INDEX 1024
151
Masami Hiramatsu50656ee2009-11-30 19:19:58 -0500152#endif /*_PROBE_EVENT_H */