root/tools/perf/util/probe-event.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _PROBE_EVENT_H
   3 #define _PROBE_EVENT_H
   4 
   5 #include <linux/compiler.h>
   6 #include <stdbool.h>
   7 
   8 struct intlist;
   9 struct nsinfo;
  10 
  11 /* Probe related configurations */
  12 struct probe_conf {
  13         bool    show_ext_vars;
  14         bool    show_location_range;
  15         bool    force_add;
  16         bool    no_inlines;
  17         bool    cache;
  18         int     max_probes;
  19 };
  20 extern struct probe_conf probe_conf;
  21 extern bool probe_event_dry_run;
  22 
  23 struct symbol;
  24 
  25 /* kprobe-tracer and uprobe-tracer tracing point */
  26 struct probe_trace_point {
  27         char            *realname;      /* function real name (if needed) */
  28         char            *symbol;        /* Base symbol */
  29         char            *module;        /* Module name */
  30         unsigned long   offset;         /* Offset from symbol */
  31         unsigned long   ref_ctr_offset; /* SDT reference counter offset */
  32         unsigned long   address;        /* Actual address of the trace point */
  33         bool            retprobe;       /* Return probe flag */
  34 };
  35 
  36 /* probe-tracer tracing argument referencing offset */
  37 struct probe_trace_arg_ref {
  38         struct probe_trace_arg_ref      *next;  /* Next reference */
  39         long                            offset; /* Offset value */
  40         bool                            user_access;    /* User-memory access */
  41 };
  42 
  43 /* kprobe-tracer and uprobe-tracer tracing argument */
  44 struct probe_trace_arg {
  45         char                            *name;  /* Argument name */
  46         char                            *value; /* Base value */
  47         char                            *type;  /* Type name */
  48         struct probe_trace_arg_ref      *ref;   /* Referencing offset */
  49 };
  50 
  51 /* kprobe-tracer and uprobe-tracer tracing event (point + arg) */
  52 struct probe_trace_event {
  53         char                            *event; /* Event name */
  54         char                            *group; /* Group name */
  55         struct probe_trace_point        point;  /* Trace point */
  56         int                             nargs;  /* Number of args */
  57         bool                            uprobes;        /* uprobes only */
  58         struct probe_trace_arg          *args;  /* Arguments */
  59 };
  60 
  61 /* Perf probe probing point */
  62 struct perf_probe_point {
  63         char            *file;          /* File path */
  64         char            *function;      /* Function name */
  65         int             line;           /* Line number */
  66         bool            retprobe;       /* Return probe flag */
  67         char            *lazy_line;     /* Lazy matching pattern */
  68         unsigned long   offset;         /* Offset from function entry */
  69         unsigned long   abs_address;    /* Absolute address of the point */
  70 };
  71 
  72 /* Perf probe probing argument field chain */
  73 struct perf_probe_arg_field {
  74         struct perf_probe_arg_field     *next;  /* Next field */
  75         char                            *name;  /* Name of the field */
  76         long                            index;  /* Array index number */
  77         bool                            ref;    /* Referencing flag */
  78 };
  79 
  80 /* Perf probe probing argument */
  81 struct perf_probe_arg {
  82         char                            *name;  /* Argument name */
  83         char                            *var;   /* Variable name */
  84         char                            *type;  /* Type name */
  85         struct perf_probe_arg_field     *field; /* Structure fields */
  86         bool                            user_access;    /* User-memory access */
  87 };
  88 
  89 /* Perf probe probing event (point + arg) */
  90 struct perf_probe_event {
  91         char                    *event; /* Event name */
  92         char                    *group; /* Group name */
  93         struct perf_probe_point point;  /* Probe point */
  94         int                     nargs;  /* Number of arguments */
  95         bool                    sdt;    /* SDT/cached event flag */
  96         bool                    uprobes;        /* Uprobe event flag */
  97         char                    *target;        /* Target binary */
  98         struct perf_probe_arg   *args;  /* Arguments */
  99         struct probe_trace_event *tevs;
 100         int                     ntevs;
 101         struct nsinfo           *nsi;   /* Target namespace */
 102 };
 103 
 104 /* Line range */
 105 struct line_range {
 106         char                    *file;          /* File name */
 107         char                    *function;      /* Function name */
 108         int                     start;          /* Start line number */
 109         int                     end;            /* End line number */
 110         int                     offset;         /* Start line offset */
 111         char                    *path;          /* Real path name */
 112         char                    *comp_dir;      /* Compile directory */
 113         struct intlist          *line_list;     /* Visible lines */
 114 };
 115 
 116 struct strlist;
 117 
 118 /* List of variables */
 119 struct variable_list {
 120         struct probe_trace_point        point;  /* Actual probepoint */
 121         struct strlist                  *vars;  /* Available variables */
 122 };
 123 
 124 struct map;
 125 int init_probe_symbol_maps(bool user_only);
 126 void exit_probe_symbol_maps(void);
 127 
 128 /* Command string to events */
 129 int parse_perf_probe_command(const char *cmd, struct perf_probe_event *pev);
 130 int parse_probe_trace_command(const char *cmd, struct probe_trace_event *tev);
 131 
 132 /* Events to command string */
 133 char *synthesize_perf_probe_command(struct perf_probe_event *pev);
 134 char *synthesize_probe_trace_command(struct probe_trace_event *tev);
 135 char *synthesize_perf_probe_arg(struct perf_probe_arg *pa);
 136 char *synthesize_perf_probe_point(struct perf_probe_point *pp);
 137 
 138 int perf_probe_event__copy(struct perf_probe_event *dst,
 139                            struct perf_probe_event *src);
 140 
 141 bool perf_probe_with_var(struct perf_probe_event *pev);
 142 
 143 /* Check the perf_probe_event needs debuginfo */
 144 bool perf_probe_event_need_dwarf(struct perf_probe_event *pev);
 145 
 146 /* Release event contents */
 147 void clear_perf_probe_event(struct perf_probe_event *pev);
 148 void clear_probe_trace_event(struct probe_trace_event *tev);
 149 
 150 /* Command string to line-range */
 151 int parse_line_range_desc(const char *cmd, struct line_range *lr);
 152 
 153 /* Release line range members */
 154 void line_range__clear(struct line_range *lr);
 155 
 156 /* Initialize line range */
 157 int line_range__init(struct line_range *lr);
 158 
 159 int add_perf_probe_events(struct perf_probe_event *pevs, int npevs);
 160 int convert_perf_probe_events(struct perf_probe_event *pevs, int npevs);
 161 int apply_perf_probe_events(struct perf_probe_event *pevs, int npevs);
 162 int show_probe_trace_events(struct perf_probe_event *pevs, int npevs);
 163 void cleanup_perf_probe_events(struct perf_probe_event *pevs, int npevs);
 164 
 165 struct strfilter;
 166 
 167 int del_perf_probe_events(struct strfilter *filter);
 168 
 169 int show_perf_probe_event(const char *group, const char *event,
 170                           struct perf_probe_event *pev,
 171                           const char *module, bool use_stdout);
 172 int show_perf_probe_events(struct strfilter *filter);
 173 int show_line_range(struct line_range *lr, const char *module,
 174                     struct nsinfo *nsi, bool user);
 175 int show_available_vars(struct perf_probe_event *pevs, int npevs,
 176                         struct strfilter *filter);
 177 int show_available_funcs(const char *module, struct nsinfo *nsi,
 178                          struct strfilter *filter, bool user);
 179 void arch__fix_tev_from_maps(struct perf_probe_event *pev,
 180                              struct probe_trace_event *tev, struct map *map,
 181                              struct symbol *sym);
 182 
 183 /* If there is no space to write, returns -E2BIG. */
 184 int e_snprintf(char *str, size_t size, const char *format, ...) __printf(3, 4);
 185 
 186 /* Maximum index number of event-name postfix */
 187 #define MAX_EVENT_INDEX 1024
 188 
 189 int copy_to_probe_trace_arg(struct probe_trace_arg *tvar,
 190                             struct perf_probe_arg *pvar);
 191 
 192 struct map *get_target_map(const char *target, struct nsinfo *nsi, bool user);
 193 
 194 void arch__post_process_probe_trace_events(struct perf_probe_event *pev,
 195                                            int ntevs);
 196 
 197 #endif /*_PROBE_EVENT_H */

/* [<][>][^][v][top][bottom][index][help] */