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