Fix: sessiond: unbounded elf section data size allocation
[lttng-tools.git] / src / common / lttng-kernel.h
1 /*
2 * Copyright (C) 2011 - Julien Desfossez <julien.desfossez@polymtl.ca>
3 * Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
4 * David Goulet <david.goulet@polymtl.ca>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License, version 2 only,
8 * as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #ifndef _LTTNG_KERNEL_H
21 #define _LTTNG_KERNEL_H
22
23 #include <stdint.h>
24 #include <common/macros.h>
25 #include <lttng/constant.h>
26 #include <lttng/event.h>
27
28 #define LTTNG_KERNEL_SYM_NAME_LEN 256
29 #define LTTNG_KERNEL_MAX_UPROBE_NUM 32
30 #define LTTNG_KERNEL_SESSION_NAME_LEN 256
31 #define LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN 26
32
33 /*
34 * LTTng DebugFS ABI structures.
35 *
36 * This is the kernel ABI copied from lttng-modules tree.
37 */
38
39 enum lttng_kernel_instrumentation {
40 LTTNG_KERNEL_ALL = -1, /* Used within lttng-tools */
41 LTTNG_KERNEL_TRACEPOINT = 0,
42 LTTNG_KERNEL_KPROBE = 1,
43 LTTNG_KERNEL_FUNCTION = 2,
44 LTTNG_KERNEL_KRETPROBE = 3,
45 LTTNG_KERNEL_NOOP = 4, /* not hooked */
46 LTTNG_KERNEL_SYSCALL = 5,
47 LTTNG_KERNEL_UPROBE = 6,
48 };
49
50 enum lttng_kernel_context_type {
51 LTTNG_KERNEL_CONTEXT_PID = 0,
52 LTTNG_KERNEL_CONTEXT_PERF_CPU_COUNTER = 1,
53 LTTNG_KERNEL_CONTEXT_PROCNAME = 2,
54 LTTNG_KERNEL_CONTEXT_PRIO = 3,
55 LTTNG_KERNEL_CONTEXT_NICE = 4,
56 LTTNG_KERNEL_CONTEXT_VPID = 5,
57 LTTNG_KERNEL_CONTEXT_TID = 6,
58 LTTNG_KERNEL_CONTEXT_VTID = 7,
59 LTTNG_KERNEL_CONTEXT_PPID = 8,
60 LTTNG_KERNEL_CONTEXT_VPPID = 9,
61 LTTNG_KERNEL_CONTEXT_HOSTNAME = 10,
62 LTTNG_KERNEL_CONTEXT_CPU_ID = 11,
63 LTTNG_KERNEL_CONTEXT_INTERRUPTIBLE = 12,
64 LTTNG_KERNEL_CONTEXT_PREEMPTIBLE = 13,
65 LTTNG_KERNEL_CONTEXT_NEED_RESCHEDULE = 14,
66 LTTNG_KERNEL_CONTEXT_MIGRATABLE = 15,
67 LTTNG_KERNEL_CONTEXT_CALLSTACK_KERNEL = 16,
68 LTTNG_KERNEL_CONTEXT_CALLSTACK_USER = 17,
69 };
70
71 /* Perf counter attributes */
72 struct lttng_kernel_perf_counter_ctx {
73 uint32_t type;
74 uint64_t config;
75 char name[LTTNG_KERNEL_SYM_NAME_LEN];
76 } LTTNG_PACKED;
77
78 /* Event/Channel context */
79 #define LTTNG_KERNEL_CONTEXT_PADDING1 16
80 #define LTTNG_KERNEL_CONTEXT_PADDING2 LTTNG_KERNEL_SYM_NAME_LEN + 32
81 struct lttng_kernel_context {
82 enum lttng_kernel_context_type ctx;
83 char padding[LTTNG_KERNEL_CONTEXT_PADDING1];
84
85 union {
86 struct lttng_kernel_perf_counter_ctx perf_counter;
87 char padding[LTTNG_KERNEL_CONTEXT_PADDING2];
88 } u;
89 } LTTNG_PACKED;
90
91 struct lttng_kernel_kretprobe {
92 uint64_t addr;
93
94 uint64_t offset;
95 char symbol_name[LTTNG_KERNEL_SYM_NAME_LEN];
96 } LTTNG_PACKED;
97
98 /*
99 * Either addr is used, or symbol_name and offset.
100 */
101 struct lttng_kernel_kprobe {
102 uint64_t addr;
103
104 uint64_t offset;
105 char symbol_name[LTTNG_KERNEL_SYM_NAME_LEN];
106 } LTTNG_PACKED;
107
108 struct lttng_kernel_uprobe {
109 int fd;
110 } LTTNG_PACKED;
111
112 struct lttng_kernel_event_callsite_uprobe {
113 uint64_t offset;
114 } LTTNG_PACKED;
115
116 struct lttng_kernel_event_callsite {
117 union {
118 struct lttng_kernel_event_callsite_uprobe uprobe;
119 } u;
120 } LTTNG_PACKED;
121
122 /* Function tracer */
123 struct lttng_kernel_function {
124 char symbol_name[LTTNG_KERNEL_SYM_NAME_LEN];
125 } LTTNG_PACKED;
126
127 #define LTTNG_KERNEL_EVENT_PADDING1 16
128 #define LTTNG_KERNEL_EVENT_PADDING2 LTTNG_KERNEL_SYM_NAME_LEN + 32
129 struct lttng_kernel_event {
130 char name[LTTNG_KERNEL_SYM_NAME_LEN];
131 enum lttng_kernel_instrumentation instrumentation;
132 char padding[LTTNG_KERNEL_EVENT_PADDING1];
133
134 /* Per instrumentation type configuration */
135 union {
136 struct lttng_kernel_kretprobe kretprobe;
137 struct lttng_kernel_kprobe kprobe;
138 struct lttng_kernel_uprobe uprobe;
139 struct lttng_kernel_function ftrace;
140 char padding[LTTNG_KERNEL_EVENT_PADDING2];
141 } u;
142 } LTTNG_PACKED;
143
144 struct lttng_kernel_tracer_version {
145 uint32_t major;
146 uint32_t minor;
147 uint32_t patchlevel;
148 } LTTNG_PACKED;
149
150 struct lttng_kernel_tracer_abi_version {
151 uint32_t major;
152 uint32_t minor;
153 } LTTNG_PACKED;
154
155 struct lttng_kernel_syscall_mask {
156 uint32_t len; /* in bits */
157 char mask[];
158 } LTTNG_PACKED;
159
160 /*
161 * kernel channel
162 */
163 #define LTTNG_KERNEL_CHANNEL_PADDING1 LTTNG_SYMBOL_NAME_LEN + 32
164 struct lttng_kernel_channel {
165 uint64_t subbuf_size; /* bytes */
166 uint64_t num_subbuf; /* power of 2 */
167 unsigned int switch_timer_interval; /* usec */
168 unsigned int read_timer_interval; /* usec */
169 enum lttng_event_output output; /* splice, mmap */
170
171 int overwrite; /* 1: overwrite, 0: discard */
172 char padding[LTTNG_KERNEL_CHANNEL_PADDING1];
173 } LTTNG_PACKED;
174
175 #define KERNEL_FILTER_BYTECODE_MAX_LEN 65536
176 struct lttng_kernel_filter_bytecode {
177 uint32_t len;
178 uint32_t reloc_offset;
179 uint64_t seqnum;
180 char data[0];
181 } LTTNG_PACKED;
182
183 /*
184 * kernel session name
185 */
186 struct lttng_kernel_session_name {
187 char name[LTTNG_KERNEL_SESSION_NAME_LEN];
188 } LTTNG_PACKED;
189
190 /*
191 * kernel session creation datetime
192 */
193 struct lttng_kernel_session_creation_time {
194 char iso8601[LTTNG_KERNEL_SESSION_CREATION_TIME_ISO8601_LEN];
195 } LTTNG_PACKED;
196
197 #endif /* _LTTNG_KERNEL_H */
This page took 0.063941 seconds and 4 git commands to generate.