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