Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.32-rc2 245 lines 4.8 kB view raw
1#ifndef _TRACE_EVENTS_H 2#define _TRACE_EVENTS_H 3 4#include "parse-events.h" 5 6#define __unused __attribute__((unused)) 7 8 9#ifndef PAGE_MASK 10#define PAGE_MASK (page_size - 1) 11#endif 12 13enum { 14 RINGBUF_TYPE_PADDING = 29, 15 RINGBUF_TYPE_TIME_EXTEND = 30, 16 RINGBUF_TYPE_TIME_STAMP = 31, 17}; 18 19#ifndef TS_SHIFT 20#define TS_SHIFT 27 21#endif 22 23#define NSECS_PER_SEC 1000000000ULL 24#define NSECS_PER_USEC 1000ULL 25 26enum format_flags { 27 FIELD_IS_ARRAY = 1, 28 FIELD_IS_POINTER = 2, 29}; 30 31struct format_field { 32 struct format_field *next; 33 char *type; 34 char *name; 35 int offset; 36 int size; 37 unsigned long flags; 38}; 39 40struct format { 41 int nr_common; 42 int nr_fields; 43 struct format_field *common_fields; 44 struct format_field *fields; 45}; 46 47struct print_arg_atom { 48 char *atom; 49}; 50 51struct print_arg_string { 52 char *string; 53 int offset; 54}; 55 56struct print_arg_field { 57 char *name; 58 struct format_field *field; 59}; 60 61struct print_flag_sym { 62 struct print_flag_sym *next; 63 char *value; 64 char *str; 65}; 66 67struct print_arg_typecast { 68 char *type; 69 struct print_arg *item; 70}; 71 72struct print_arg_flags { 73 struct print_arg *field; 74 char *delim; 75 struct print_flag_sym *flags; 76}; 77 78struct print_arg_symbol { 79 struct print_arg *field; 80 struct print_flag_sym *symbols; 81}; 82 83struct print_arg; 84 85struct print_arg_op { 86 char *op; 87 int prio; 88 struct print_arg *left; 89 struct print_arg *right; 90}; 91 92struct print_arg_func { 93 char *name; 94 struct print_arg *args; 95}; 96 97enum print_arg_type { 98 PRINT_NULL, 99 PRINT_ATOM, 100 PRINT_FIELD, 101 PRINT_FLAGS, 102 PRINT_SYMBOL, 103 PRINT_TYPE, 104 PRINT_STRING, 105 PRINT_OP, 106}; 107 108struct print_arg { 109 struct print_arg *next; 110 enum print_arg_type type; 111 union { 112 struct print_arg_atom atom; 113 struct print_arg_field field; 114 struct print_arg_typecast typecast; 115 struct print_arg_flags flags; 116 struct print_arg_symbol symbol; 117 struct print_arg_func func; 118 struct print_arg_string string; 119 struct print_arg_op op; 120 }; 121}; 122 123struct print_fmt { 124 char *format; 125 struct print_arg *args; 126}; 127 128struct event { 129 struct event *next; 130 char *name; 131 int id; 132 int flags; 133 struct format format; 134 struct print_fmt print_fmt; 135}; 136 137enum { 138 EVENT_FL_ISFTRACE = 1, 139 EVENT_FL_ISPRINT = 2, 140 EVENT_FL_ISBPRINT = 4, 141 EVENT_FL_ISFUNC = 8, 142 EVENT_FL_ISFUNCENT = 16, 143 EVENT_FL_ISFUNCRET = 32, 144}; 145 146struct record { 147 unsigned long long ts; 148 int size; 149 void *data; 150}; 151 152struct record *trace_peek_data(int cpu); 153struct record *trace_read_data(int cpu); 154 155void parse_set_info(int nr_cpus, int long_sz); 156 157void trace_report(void); 158 159void *malloc_or_die(unsigned int size); 160 161void parse_cmdlines(char *file, int size); 162void parse_proc_kallsyms(char *file, unsigned int size); 163void parse_ftrace_printk(char *file, unsigned int size); 164 165void print_funcs(void); 166void print_printk(void); 167 168int parse_ftrace_file(char *buf, unsigned long size); 169int parse_event_file(char *buf, unsigned long size, char *system); 170void print_event(int cpu, void *data, int size, unsigned long long nsecs, 171 char *comm); 172 173extern int file_bigendian; 174extern int host_bigendian; 175 176int bigendian(void); 177 178static inline unsigned short __data2host2(unsigned short data) 179{ 180 unsigned short swap; 181 182 if (host_bigendian == file_bigendian) 183 return data; 184 185 swap = ((data & 0xffULL) << 8) | 186 ((data & (0xffULL << 8)) >> 8); 187 188 return swap; 189} 190 191static inline unsigned int __data2host4(unsigned int data) 192{ 193 unsigned int swap; 194 195 if (host_bigendian == file_bigendian) 196 return data; 197 198 swap = ((data & 0xffULL) << 24) | 199 ((data & (0xffULL << 8)) << 8) | 200 ((data & (0xffULL << 16)) >> 8) | 201 ((data & (0xffULL << 24)) >> 24); 202 203 return swap; 204} 205 206static inline unsigned long long __data2host8(unsigned long long data) 207{ 208 unsigned long long swap; 209 210 if (host_bigendian == file_bigendian) 211 return data; 212 213 swap = ((data & 0xffULL) << 56) | 214 ((data & (0xffULL << 8)) << 40) | 215 ((data & (0xffULL << 16)) << 24) | 216 ((data & (0xffULL << 24)) << 8) | 217 ((data & (0xffULL << 32)) >> 8) | 218 ((data & (0xffULL << 40)) >> 24) | 219 ((data & (0xffULL << 48)) >> 40) | 220 ((data & (0xffULL << 56)) >> 56); 221 222 return swap; 223} 224 225#define data2host2(ptr) __data2host2(*(unsigned short *)ptr) 226#define data2host4(ptr) __data2host4(*(unsigned int *)ptr) 227#define data2host8(ptr) __data2host8(*(unsigned long long *)ptr) 228 229extern int header_page_ts_offset; 230extern int header_page_ts_size; 231extern int header_page_size_offset; 232extern int header_page_size_size; 233extern int header_page_data_offset; 234extern int header_page_data_size; 235 236int parse_header_page(char *buf, unsigned long size); 237int trace_parse_common_type(void *data); 238struct event *trace_find_event(int id); 239unsigned long long 240raw_field_value(struct event *event, const char *name, void *data); 241void *raw_field_ptr(struct event *event, const char *name, void *data); 242 243void read_tracing_data(struct perf_event_attr *pattrs, int nb_events); 244 245#endif /* _TRACE_EVENTS_H */