diff options
Diffstat (limited to 'tools/perf/util/trace-event.h')
| -rw-r--r-- | tools/perf/util/trace-event.h | 310 | 
1 files changed, 50 insertions, 260 deletions
diff --git a/tools/perf/util/trace-event.h b/tools/perf/util/trace-event.h index b3e86b1e444..7b6d6868832 100644 --- a/tools/perf/util/trace-event.h +++ b/tools/perf/util/trace-event.h @@ -1,287 +1,76 @@ -#ifndef __PERF_TRACE_EVENTS_H -#define __PERF_TRACE_EVENTS_H +#ifndef _PERF_UTIL_TRACE_EVENT_H +#define _PERF_UTIL_TRACE_EVENT_H -#include <stdbool.h> +#include <traceevent/event-parse.h>  #include "parse-events.h" -#define __unused __attribute__((unused)) +struct machine; +struct perf_sample; +union perf_event; +struct perf_tool; +struct thread; +struct plugin_list; - -#ifndef PAGE_MASK -#define PAGE_MASK (page_size - 1) -#endif - -enum { -	RINGBUF_TYPE_PADDING		= 29, -	RINGBUF_TYPE_TIME_EXTEND	= 30, -	RINGBUF_TYPE_TIME_STAMP		= 31, -}; - -#ifndef TS_SHIFT -#define TS_SHIFT		27 -#endif - -#define NSECS_PER_SEC		1000000000ULL -#define NSECS_PER_USEC		1000ULL - -enum format_flags { -	FIELD_IS_ARRAY		= 1, -	FIELD_IS_POINTER	= 2, -	FIELD_IS_SIGNED		= 4, -	FIELD_IS_STRING		= 8, -	FIELD_IS_DYNAMIC	= 16, -	FIELD_IS_FLAG		= 32, -	FIELD_IS_SYMBOLIC	= 64, -}; - -struct format_field { -	struct format_field	*next; -	char			*type; -	char			*name; -	int			offset; -	int			size; -	unsigned long		flags; +struct trace_event { +	struct pevent		*pevent; +	struct plugin_list	*plugin_list;  }; -struct format { -	int			nr_common; -	int			nr_fields; -	struct format_field	*common_fields; -	struct format_field	*fields; -}; - -struct print_arg_atom { -	char			*atom; -}; - -struct print_arg_string { -	char			*string; -	int			offset; -}; - -struct print_arg_field { -	char			*name; -	struct format_field	*field; -}; - -struct print_flag_sym { -	struct print_flag_sym	*next; -	char			*value; -	char			*str; -}; - -struct print_arg_typecast { -	char 			*type; -	struct print_arg	*item; -}; - -struct print_arg_flags { -	struct print_arg	*field; -	char			*delim; -	struct print_flag_sym	*flags; -}; - -struct print_arg_symbol { -	struct print_arg	*field; -	struct print_flag_sym	*symbols; -}; - -struct print_arg; - -struct print_arg_op { -	char			*op; -	int			prio; -	struct print_arg	*left; -	struct print_arg	*right; -}; - -struct print_arg_func { -	char			*name; -	struct print_arg	*args; -}; - -enum print_arg_type { -	PRINT_NULL, -	PRINT_ATOM, -	PRINT_FIELD, -	PRINT_FLAGS, -	PRINT_SYMBOL, -	PRINT_TYPE, -	PRINT_STRING, -	PRINT_OP, -}; - -struct print_arg { -	struct print_arg		*next; -	enum print_arg_type		type; -	union { -		struct print_arg_atom		atom; -		struct print_arg_field		field; -		struct print_arg_typecast	typecast; -		struct print_arg_flags		flags; -		struct print_arg_symbol		symbol; -		struct print_arg_func		func; -		struct print_arg_string		string; -		struct print_arg_op		op; -	}; -}; - -struct print_fmt { -	char			*format; -	struct print_arg	*args; -}; - -struct event { -	struct event		*next; -	char			*name; -	int			id; -	int			flags; -	struct format		format; -	struct print_fmt	print_fmt; -	char			*system; -}; - -enum { -	EVENT_FL_ISFTRACE	= 0x01, -	EVENT_FL_ISPRINT	= 0x02, -	EVENT_FL_ISBPRINT	= 0x04, -	EVENT_FL_ISFUNC		= 0x08, -	EVENT_FL_ISFUNCENT	= 0x10, -	EVENT_FL_ISFUNCRET	= 0x20, - -	EVENT_FL_FAILED		= 0x80000000 -}; - -struct record { -	unsigned long long ts; -	int size; -	void *data; -}; - -struct record *trace_peek_data(int cpu); -struct record *trace_read_data(int cpu); - -void parse_set_info(int nr_cpus, int long_sz); - -ssize_t trace_report(int fd, bool repipe); - -void *malloc_or_die(unsigned int size); - -void parse_cmdlines(char *file, int size); -void parse_proc_kallsyms(char *file, unsigned int size); -void parse_ftrace_printk(char *file, unsigned int size); - -void print_funcs(void); -void print_printk(void); - -int parse_ftrace_file(char *buf, unsigned long size); -int parse_event_file(char *buf, unsigned long size, char *sys); -void print_event(int cpu, void *data, int size, unsigned long long nsecs, -		  char *comm); - -extern int file_bigendian; -extern int host_bigendian; +int trace_event__init(struct trace_event *t); +void trace_event__cleanup(struct trace_event *t); +struct event_format* +trace_event__tp_format(const char *sys, const char *name);  int bigendian(void); -static inline unsigned short __data2host2(unsigned short data) -{ -	unsigned short swap; - -	if (host_bigendian == file_bigendian) -		return data; - -	swap = ((data & 0xffULL) << 8) | -		((data & (0xffULL << 8)) >> 8); - -	return swap; -} - -static inline unsigned int __data2host4(unsigned int data) -{ -	unsigned int swap; - -	if (host_bigendian == file_bigendian) -		return data; +void event_format__print(struct event_format *event, +			 int cpu, void *data, int size); -	swap = ((data & 0xffULL) << 24) | -		((data & (0xffULL << 8)) << 8) | -		((data & (0xffULL << 16)) >> 8) | -		((data & (0xffULL << 24)) >> 24); +int parse_ftrace_file(struct pevent *pevent, char *buf, unsigned long size); +int parse_event_file(struct pevent *pevent, +		     char *buf, unsigned long size, char *sys); -	return swap; -} +unsigned long long +raw_field_value(struct event_format *event, const char *name, void *data); -static inline unsigned long long __data2host8(unsigned long long data) -{ -	unsigned long long swap; +void parse_proc_kallsyms(struct pevent *pevent, char *file, unsigned int size); +void parse_ftrace_printk(struct pevent *pevent, char *file, unsigned int size); -	if (host_bigendian == file_bigendian) -		return data; +ssize_t trace_report(int fd, struct trace_event *tevent, bool repipe); -	swap = ((data & 0xffULL) << 56) | -		((data & (0xffULL << 8)) << 40) | -		((data & (0xffULL << 16)) << 24) | -		((data & (0xffULL << 24)) << 8) | -		((data & (0xffULL << 32)) >> 8) | -		((data & (0xffULL << 40)) >> 24) | -		((data & (0xffULL << 48)) >> 40) | -		((data & (0xffULL << 56)) >> 56); +struct event_format *trace_find_next_event(struct pevent *pevent, +					   struct event_format *event); +unsigned long long read_size(struct event_format *event, void *ptr, int size); +unsigned long long eval_flag(const char *flag); -	return swap; -} +int read_tracing_data(int fd, struct list_head *pattrs); -#define data2host2(ptr)		__data2host2(*(unsigned short *)ptr) -#define data2host4(ptr)		__data2host4(*(unsigned int *)ptr) -#define data2host8(ptr)		({				\ -	unsigned long long __val;				\ -								\ -	memcpy(&__val, (ptr), sizeof(unsigned long long));	\ -	__data2host8(__val);					\ -}) +struct tracing_data { +	/* size is only valid if temp is 'true' */ +	ssize_t size; +	bool temp; +	char temp_file[50]; +}; -extern int header_page_ts_offset; -extern int header_page_ts_size; -extern int header_page_size_offset; -extern int header_page_size_size; -extern int header_page_data_offset; -extern int header_page_data_size; +struct tracing_data *tracing_data_get(struct list_head *pattrs, +				      int fd, bool temp); +int tracing_data_put(struct tracing_data *tdata); -extern bool latency_format; -int trace_parse_common_type(void *data); -int trace_parse_common_pid(void *data); -int parse_common_pc(void *data); -int parse_common_flags(void *data); -int parse_common_lock_depth(void *data); -struct event *trace_find_event(int id); -struct event *trace_find_next_event(struct event *event); -unsigned long long read_size(void *ptr, int size); -unsigned long long -raw_field_value(struct event *event, const char *name, void *data); -void *raw_field_ptr(struct event *event, const char *name, void *data); -unsigned long long eval_flag(const char *flag); - -int read_tracing_data(int fd, struct perf_event_attr *pattrs, int nb_events); -ssize_t read_tracing_data_size(int fd, struct perf_event_attr *pattrs, -			       int nb_events); +struct addr_location; -/* taken from kernel/trace/trace.h */ -enum trace_flag_type { -	TRACE_FLAG_IRQS_OFF		= 0x01, -	TRACE_FLAG_IRQS_NOSUPPORT	= 0x02, -	TRACE_FLAG_NEED_RESCHED		= 0x04, -	TRACE_FLAG_HARDIRQ		= 0x08, -	TRACE_FLAG_SOFTIRQ		= 0x10, -}; +struct perf_session;  struct scripting_ops {  	const char *name;  	int (*start_script) (const char *script, int argc, const char **argv);  	int (*stop_script) (void); -	void (*process_event) (int cpu, void *data, int size, -			       unsigned long long nsecs, char *comm); -	int (*generate_script) (const char *outfile); +	void (*process_event) (union perf_event *event, +			       struct perf_sample *sample, +			       struct perf_evsel *evsel, +			       struct thread *thread, +				   struct addr_location *al); +	int (*generate_script) (struct pevent *pevent, const char *outfile);  };  int script_spec_register(const char *spec, struct scripting_ops *ops); @@ -290,6 +79,7 @@ void setup_perl_scripting(void);  void setup_python_scripting(void);  struct scripting_context { +	struct pevent *pevent;  	void *event_data;  }; @@ -297,4 +87,4 @@ int common_pc(struct scripting_context *context);  int common_flags(struct scripting_context *context);  int common_lock_depth(struct scripting_context *context); -#endif /* __PERF_TRACE_EVENTS_H */ +#endif /* _PERF_UTIL_TRACE_EVENT_H */  | 
