cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

trace-event.h (4158B)


      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 */