tracing: Add kprobe event command generation functions
Add functions used to generate kprobe event commands, built on top of the dynevent_cmd interface. kprobe_event_gen_cmd_start() is used to create a kprobe event command using a variable arg list, and kretprobe_event_gen_cmd_start() does the same for kretprobe event commands. kprobe_event_add_fields() can be used to add single fields one by one or as a group. Once all desired fields are added, kprobe_event_gen_cmd_end() or kretprobe_event_gen_cmd_end() respectively are used to actually execute the command and create the event. Link: http://lkml.kernel.org/r/95cc4696502bb6017f9126f306a45ad19b4cc14f.1580323897.git.zanussi@kernel.org Acked-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Tom Zanussi <zanussi@kernel.org> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:

committed by
Steven Rostedt (VMware)

parent
9fe41efaca
commit
2a588dd1d5
@@ -358,6 +358,7 @@ extern void trace_put_event_file(struct trace_event_file *file);
|
||||
|
||||
enum dynevent_type {
|
||||
DYNEVENT_TYPE_SYNTH = 1,
|
||||
DYNEVENT_TYPE_KPROBE,
|
||||
DYNEVENT_TYPE_NONE,
|
||||
};
|
||||
|
||||
@@ -442,6 +443,36 @@ extern int synth_event_add_val(const char *field_name, u64 val,
|
||||
struct synth_event_trace_state *trace_state);
|
||||
extern int synth_event_trace_end(struct synth_event_trace_state *trace_state);
|
||||
|
||||
extern int kprobe_event_delete(const char *name);
|
||||
|
||||
extern void kprobe_event_cmd_init(struct dynevent_cmd *cmd,
|
||||
char *buf, int maxlen);
|
||||
|
||||
#define kprobe_event_gen_cmd_start(cmd, name, loc, ...) \
|
||||
__kprobe_event_gen_cmd_start(cmd, false, name, loc, ## __VA_ARGS__, NULL)
|
||||
|
||||
#define kretprobe_event_gen_cmd_start(cmd, name, loc, ...) \
|
||||
__kprobe_event_gen_cmd_start(cmd, true, name, loc, ## __VA_ARGS__, NULL)
|
||||
|
||||
extern int __kprobe_event_gen_cmd_start(struct dynevent_cmd *cmd,
|
||||
bool kretprobe,
|
||||
const char *name,
|
||||
const char *loc, ...);
|
||||
|
||||
#define kprobe_event_add_fields(cmd, ...) \
|
||||
__kprobe_event_add_fields(cmd, ## __VA_ARGS__, NULL)
|
||||
|
||||
#define kprobe_event_add_field(cmd, field) \
|
||||
__kprobe_event_add_fields(cmd, field, NULL)
|
||||
|
||||
extern int __kprobe_event_add_fields(struct dynevent_cmd *cmd, ...);
|
||||
|
||||
#define kprobe_event_gen_cmd_end(cmd) \
|
||||
dynevent_create(cmd)
|
||||
|
||||
#define kretprobe_event_gen_cmd_end(cmd) \
|
||||
dynevent_create(cmd)
|
||||
|
||||
/*
|
||||
* Event file flags:
|
||||
* ENABLED - The event is enabled
|
||||
|
Reference in New Issue
Block a user