linux/tools/perf/util/trace-event.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _PERF_UTIL_TRACE_EVENT_H
   3#define _PERF_UTIL_TRACE_EVENT_H
   4
   5#include <traceevent/event-parse.h>
   6#include "parse-events.h"
   7
   8struct machine;
   9struct perf_sample;
  10union perf_event;
  11struct perf_tool;
  12struct thread;
  13struct tep_plugin_list;
  14struct evsel;
  15
  16struct trace_event {
  17        struct tep_handle       *pevent;
  18        struct tep_plugin_list  *plugin_list;
  19};
  20
  21int trace_event__init(struct trace_event *t);
  22void trace_event__cleanup(struct trace_event *t);
  23int trace_event__register_resolver(struct machine *machine,
  24                                   tep_func_resolver_t *func);
  25struct tep_event*
  26trace_event__tp_format(const char *sys, const char *name);
  27
  28struct tep_event *trace_event__tp_format_id(int id);
  29
  30int bigendian(void);
  31
  32void event_format__fprintf(struct tep_event *event,
  33                           int cpu, void *data, int size, FILE *fp);
  34
  35void event_format__print(struct tep_event *event,
  36                         int cpu, void *data, int size);
  37
  38int parse_ftrace_file(struct tep_handle *pevent, char *buf, unsigned long size);
  39int parse_event_file(struct tep_handle *pevent,
  40                     char *buf, unsigned long size, char *sys);
  41
  42unsigned long long
  43raw_field_value(struct tep_event *event, const char *name, void *data);
  44
  45void parse_proc_kallsyms(struct tep_handle *pevent, char *file, unsigned int size);
  46void parse_ftrace_printk(struct tep_handle *pevent, char *file, unsigned int size);
  47void parse_saved_cmdline(struct tep_handle *pevent, char *file, unsigned int size);
  48
  49ssize_t trace_report(int fd, struct trace_event *tevent, bool repipe);
  50
  51unsigned long long read_size(struct tep_event *event, void *ptr, int size);
  52unsigned long long eval_flag(const char *flag);
  53
  54int read_tracing_data(int fd, struct list_head *pattrs);
  55
  56struct tracing_data {
  57        /* size is only valid if temp is 'true' */
  58        ssize_t size;
  59        bool temp;
  60        char temp_file[50];
  61};
  62
  63struct tracing_data *tracing_data_get(struct list_head *pattrs,
  64                                      int fd, bool temp);
  65int tracing_data_put(struct tracing_data *tdata);
  66
  67
  68struct addr_location;
  69
  70struct perf_session;
  71struct perf_stat_config;
  72
  73struct scripting_ops {
  74        const char *name;
  75        const char *dirname; /* For script path .../scripts/<dirname>/... */
  76        int (*start_script)(const char *script, int argc, const char **argv,
  77                            struct perf_session *session);
  78        int (*flush_script) (void);
  79        int (*stop_script) (void);
  80        void (*process_event) (union perf_event *event,
  81                               struct perf_sample *sample,
  82                               struct evsel *evsel,
  83                               struct addr_location *al,
  84                               struct addr_location *addr_al);
  85        void (*process_switch)(union perf_event *event,
  86                               struct perf_sample *sample,
  87                               struct machine *machine);
  88        void (*process_auxtrace_error)(struct perf_session *session,
  89                                       union perf_event *event);
  90        void (*process_stat)(struct perf_stat_config *config,
  91                             struct evsel *evsel, u64 tstamp);
  92        void (*process_stat_interval)(u64 tstamp);
  93        void (*process_throttle)(union perf_event *event,
  94                                 struct perf_sample *sample,
  95                                 struct machine *machine);
  96        int (*generate_script) (struct tep_handle *pevent, const char *outfile);
  97};
  98
  99extern unsigned int scripting_max_stack;
 100
 101int script_spec_register(const char *spec, struct scripting_ops *ops);
 102
 103void script_fetch_insn(struct perf_sample *sample, struct thread *thread,
 104                       struct machine *machine);
 105
 106void setup_perl_scripting(void);
 107void setup_python_scripting(void);
 108
 109struct scripting_context {
 110        struct tep_handle *pevent;
 111        void *event_data;
 112        union perf_event *event;
 113        struct perf_sample *sample;
 114        struct evsel *evsel;
 115        struct addr_location *al;
 116        struct addr_location *addr_al;
 117        struct perf_session *session;
 118};
 119
 120void scripting_context__update(struct scripting_context *scripting_context,
 121                               union perf_event *event,
 122                               struct perf_sample *sample,
 123                               struct evsel *evsel,
 124                               struct addr_location *al,
 125                               struct addr_location *addr_al);
 126
 127int common_pc(struct scripting_context *context);
 128int common_flags(struct scripting_context *context);
 129int common_lock_depth(struct scripting_context *context);
 130
 131#define SAMPLE_FLAGS_BUF_SIZE 64
 132int perf_sample__sprintf_flags(u32 flags, char *str, size_t sz);
 133
 134#endif /* _PERF_UTIL_TRACE_EVENT_H */
 135