[go: up one dir, main page]

File: kernel-parser.h

package info (click to toggle)
uftrace 0.18.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,356 kB
  • sloc: ansic: 49,770; python: 11,181; asm: 837; makefile: 769; sh: 637; cpp: 627; javascript: 191
file content (198 lines) | stat: -rw-r--r-- 5,213 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#ifndef UFTRACE_KERNEL_PARSER_H
#define UFTRACE_KERNEL_PARSER_H

#include <stdbool.h>
#include <stdint.h>

#include "uftrace.h"

#ifdef HAVE_LIBTRACEEVENT
#include <event-parse.h>
#include <kbuffer.h>

/*
 * Wrappers for kernel function/event parser (using libtraceevent).
 */
struct uftrace_kernel_parser {
	/* global data */
	struct tep_handle *tep;
	struct trace_seq seqbuf;
	struct uftrace_record rec;
	size_t pagesize;
	/* per-cpu data */
	struct kbuffer **kbufs;
	int *fds;
	void **mmaps;
	int64_t *offsets;
	int64_t *sizes;
	int *missed_events;
};

int kparser_init(struct uftrace_kernel_parser *kp);
int kparser_exit(struct uftrace_kernel_parser *kp);

bool kparser_ready(struct uftrace_kernel_parser *kp);
int kparser_strerror(struct uftrace_kernel_parser *kp, int err, char *buf, int len);

void kparser_set_info(struct uftrace_kernel_parser *kp, int page_size, int long_size,
		      bool is_big_endian);

int kparser_read_header(struct uftrace_kernel_parser *kp, char *buf, int len);
int kparser_read_event(struct uftrace_kernel_parser *kp, const char *sys, char *buf, int len);

int kparser_prepare_buffers(struct uftrace_kernel_parser *kp, int nr_cpus);
int kparser_release_buffers(struct uftrace_kernel_parser *kp, int nr_cpus);
int kparser_prepare_cpu(struct uftrace_kernel_parser *kp, const char *filename, int cpu);
int kparser_release_cpu(struct uftrace_kernel_parser *kp, int cpu);

void kparser_register_handler(struct uftrace_kernel_parser *kp, const char *sys, const char *event);
int kparser_read_data(struct uftrace_kernel_parser *kp, struct uftrace_data *handle, int cpu,
		      int *tid);
int kparser_data_size(struct uftrace_kernel_parser *kp, int cpu);
int kparser_missed_events(struct uftrace_kernel_parser *kp, int cpu);
void kparser_clear_missed(struct uftrace_kernel_parser *kp, int cpu);

void *kparser_trace_buffer(struct uftrace_kernel_parser *kp);
int kparser_trace_buflen(struct uftrace_kernel_parser *kp);

void *kparser_find_event(struct uftrace_kernel_parser *kp, int evt_id);
char *kparser_event_name(struct uftrace_kernel_parser *kp, void *evt, char *buf, int len);

/* low-level APIs - not encouraged to use */
int64_t __kparser_curr_offset(struct uftrace_kernel_parser *kp, int cpu);
void *__kparser_read_offset(struct uftrace_kernel_parser *kp, int cpu, int64_t off);
void *__kparser_next_event(struct uftrace_kernel_parser *kp, int cpu);
int __kparser_event_size(struct uftrace_kernel_parser *kp, int cpu);

#else /* HAVE_LIBTRACEEVENT */

struct uftrace_kernel_parser {
	struct uftrace_record rec;
};

static inline int kparser_init(struct uftrace_kernel_parser *kp)
{
	return -1;
}
static inline int kparser_exit(struct uftrace_kernel_parser *kp)
{
	return -1;
}

static inline bool kparser_ready(struct uftrace_kernel_parser *kp)
{
	return false;
}

static inline int kparser_strerror(struct uftrace_kernel_parser *kp, int err, char *buf, int len)
{
	buf[0] = '\0';
	return 0;
}

static inline void kparser_set_info(struct uftrace_kernel_parser *kp, int page_size, int long_size,
				    bool is_big_endian)
{
}

static inline int kparser_read_header(struct uftrace_kernel_parser *kp, char *buf, int len)
{
	return -1;
}

static inline int kparser_read_event(struct uftrace_kernel_parser *kp, const char *sys, char *buf,
				     int len)
{
	return -1;
}

static inline int kparser_prepare_buffers(struct uftrace_kernel_parser *kp, int nr_cpus)
{
	return -1;
}

static inline int kparser_release_buffers(struct uftrace_kernel_parser *kp, int nr_cpus)
{
	return -1;
}

static inline int kparser_prepare_cpu(struct uftrace_kernel_parser *kp, const char *filename,
				      int cpu)
{
	return -1;
}

static inline int kparser_release_cpu(struct uftrace_kernel_parser *kp, int cpu)
{
	return -1;
}

static inline void kparser_register_handler(struct uftrace_kernel_parser *kp, const char *sys,
					    const char *event)
{
}

static inline int kparser_read_data(struct uftrace_kernel_parser *kp, struct uftrace_data *handle,
				    int cpu, int *tid)
{
	return -1;
}

static inline int kparser_data_size(struct uftrace_kernel_parser *kp, int cpu)
{
	return 0;
}

static inline int kparser_missed_events(struct uftrace_kernel_parser *kp, int cpu)
{
	return 0;
}

static inline void kparser_clear_missed(struct uftrace_kernel_parser *kp, int cpu)
{
}

static inline void *kparser_trace_buffer(struct uftrace_kernel_parser *kp)
{
	return NULL;
}

static inline int kparser_trace_buflen(struct uftrace_kernel_parser *kp)
{
	return 0;
}

static inline void *kparser_find_event(struct uftrace_kernel_parser *kp, int evt_id)
{
	return NULL;
}

static inline char *kparser_event_name(struct uftrace_kernel_parser *kp, void *evt, char *buf,
				       int len)
{
	return NULL;
}

static inline int64_t __kparser_curr_offset(struct uftrace_kernel_parser *kp, int cpu)
{
	return -1;
}

static inline void *__kparser_read_offset(struct uftrace_kernel_parser *kp, int cpu, int64_t off)
{
	return NULL;
}

static inline void *__kparser_next_event(struct uftrace_kernel_parser *kp, int cpu)
{
	return NULL;
}

static inline int __kparser_event_size(struct uftrace_kernel_parser *kp, int cpu)
{
	return 0;
}

#endif /* HAVE_LIBTRACEEVENT */

#endif /* UFTRACE_KERNEL_PARSER_H */