brintos

brintos / linux-shallow public Read only

0
0
Text · 5.0 KiB · bbf8b26 Raw
169 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef _PERF_UTIL_TRACE_EVENT_H3#define _PERF_UTIL_TRACE_EVENT_H4 5#include <stdbool.h>6#include <stdio.h>7#include <sys/types.h>8#include <linux/types.h>9 10struct evlist;11struct machine;12struct perf_sample;13union perf_event;14struct perf_tool;15struct thread;16struct tep_plugin_list;17struct evsel;18struct tep_format_field;19 20struct trace_event {21	struct tep_handle	*pevent;22	struct tep_plugin_list	*plugin_list;23};24 25/* Computes a version number comparable with LIBTRACEEVENT_VERSION from Makefile.config. */26#define MAKE_LIBTRACEEVENT_VERSION(a, b, c) ((a)*255*255+(b)*255+(c))27 28typedef char *(tep_func_resolver_t)(void *priv,29				    unsigned long long *addrp, char **modp);30 31bool have_tracepoints(struct list_head *evlist);32 33int trace_event__init(struct trace_event *t);34void trace_event__cleanup(struct trace_event *t);35int trace_event__register_resolver(struct machine *machine,36				   tep_func_resolver_t *func);37struct tep_event*38trace_event__tp_format(const char *sys, const char *name);39 40struct tep_event *trace_event__tp_format_id(int id);41 42void event_format__fprintf(struct tep_event *event,43			   int cpu, void *data, int size, FILE *fp);44 45void event_format__print(struct tep_event *event,46			 int cpu, void *data, int size);47 48int parse_ftrace_file(struct tep_handle *pevent, char *buf, unsigned long size);49int parse_event_file(struct tep_handle *pevent,50		     char *buf, unsigned long size, char *sys);51 52unsigned long long53raw_field_value(struct tep_event *event, const char *name, void *data);54 55const char *parse_task_states(struct tep_format_field *state_field);56 57void parse_proc_kallsyms(struct tep_handle *pevent, char *file, unsigned int size);58void parse_ftrace_printk(struct tep_handle *pevent, char *file, unsigned int size);59void parse_saved_cmdline(struct tep_handle *pevent, char *file, unsigned int size);60 61ssize_t trace_report(int fd, struct trace_event *tevent, bool repipe);62 63unsigned long long read_size(struct tep_event *event, void *ptr, int size);64unsigned long long eval_flag(const char *flag);65 66int read_tracing_data(int fd, struct list_head *pattrs);67 68/*69 * Return the tracepoint name in the format "subsystem:event_name",70 * callers should free the returned string.71 */72char *tracepoint_id_to_name(u64 config);73 74struct tracing_data {75	/* size is only valid if temp is 'true' */76	ssize_t size;77	bool temp;78	char temp_file[50];79};80 81struct tracing_data *tracing_data_get(struct list_head *pattrs,82				      int fd, bool temp);83int tracing_data_put(struct tracing_data *tdata);84 85 86struct addr_location;87 88struct perf_session;89struct perf_stat_config;90 91struct scripting_ops {92	const char *name;93	const char *dirname; /* For script path .../scripts/<dirname>/... */94	int (*start_script)(const char *script, int argc, const char **argv,95			    struct perf_session *session);96	int (*flush_script) (void);97	int (*stop_script) (void);98	void (*process_event) (union perf_event *event,99			       struct perf_sample *sample,100			       struct evsel *evsel,101			       struct addr_location *al,102			       struct addr_location *addr_al);103	void (*process_switch)(union perf_event *event,104			       struct perf_sample *sample,105			       struct machine *machine);106	void (*process_auxtrace_error)(struct perf_session *session,107				       union perf_event *event);108	void (*process_stat)(struct perf_stat_config *config,109			     struct evsel *evsel, u64 tstamp);110	void (*process_stat_interval)(u64 tstamp);111	void (*process_throttle)(union perf_event *event,112				 struct perf_sample *sample,113				 struct machine *machine);114	int (*generate_script) (struct tep_handle *pevent, const char *outfile);115};116 117extern unsigned int scripting_max_stack;118 119int script_spec_register(const char *spec, struct scripting_ops *ops);120 121void script_fetch_insn(struct perf_sample *sample, struct thread *thread,122		       struct machine *machine);123 124void setup_perl_scripting(void);125void setup_python_scripting(void);126 127struct scripting_context {128	struct tep_handle *pevent;129	void *event_data;130	union perf_event *event;131	struct perf_sample *sample;132	struct evsel *evsel;133	struct addr_location *al;134	struct addr_location *addr_al;135	struct perf_session *session;136};137 138void scripting_context__update(struct scripting_context *scripting_context,139			       union perf_event *event,140			       struct perf_sample *sample,141			       struct evsel *evsel,142			       struct addr_location *al,143			       struct addr_location *addr_al);144 145int common_pc(struct scripting_context *context);146int common_flags(struct scripting_context *context);147int common_lock_depth(struct scripting_context *context);148 149#define SAMPLE_FLAGS_BUF_SIZE 64150int perf_sample__sprintf_flags(u32 flags, char *str, size_t sz);151 152#if defined(LIBTRACEEVENT_VERSION) &&  LIBTRACEEVENT_VERSION >= MAKE_LIBTRACEEVENT_VERSION(1, 5, 0)153#include <traceevent/event-parse.h>154 155static inline bool tep_field_is_relative(unsigned long flags)156{157	return (flags & TEP_FIELD_IS_RELATIVE) != 0;158}159#else160#include <linux/compiler.h>161 162static inline bool tep_field_is_relative(unsigned long flags __maybe_unused)163{164	return false;165}166#endif167 168#endif /* _PERF_UTIL_TRACE_EVENT_H */169