struct ltt_channel;
struct ltt_session;
struct lib_ring_buffer_ctx;
+struct perf_event;
+struct perf_event_attr;
/* Type description */
/* Update the string_encodings name table in lttng-types.c along with this enum */
enum lttng_string_encodings {
- lttng_encode_UTF8 = 0,
- lttng_encode_ASCII = 1,
+ lttng_encode_none = 0,
+ lttng_encode_UTF8 = 1,
+ lttng_encode_ASCII = 2,
NR_STRING_ENCODINGS,
};
const char *string;
};
-#define __type_integer(_type, _byte_order) \
+#define __type_integer(_type, _byte_order, _base) \
{ \
.atype = atype_integer, \
.u.basic.integer = \
.alignment = ltt_alignof(_type) * CHAR_BIT, \
.signedness = is_signed_type(_type), \
.reverse_byte_order = _byte_order != __BYTE_ORDER, \
+ .base = _base, \
+ .encoding = lttng_encode_none, \
}, \
} \
unsigned short alignment; /* in bits */
unsigned int signedness:1;
unsigned int reverse_byte_order:1;
+ unsigned int base; /* 2, 8, 10, 16, for pretty print */
+ enum lttng_string_encodings encoding;
};
union _lttng_basic_type {
struct lttng_event_field {
const char *name;
- const struct lttng_type type;
+ struct lttng_type type;
+};
+
+struct lttng_ctx_field {
+ const char *name;
+ struct lttng_type type;
+ void *callback;
+ union {
+ struct {
+ struct perf_event **e; /* per-cpu array */
+ struct list_head head;
+ struct perf_event_attr *attr;
+ } perf_counter;
+ } u;
+};
+
+struct lttng_ctx {
+ struct lttng_ctx_field *fields;
+ unsigned int nr_fields;
+ unsigned int allocated_fields;
};
struct lttng_event_desc {
- const struct lttng_event_field *fields;
const char *name;
void *probe_callback;
+ const struct lttng_event_ctx *ctx; /* context */
+ const struct lttng_event_field *fields; /* event payload */
unsigned int nr_fields;
};
struct kprobe kp;
char *symbol_name;
} kprobe;
+ struct {
+ char *symbol_name;
+ } ftrace;
} u;
struct list_head list; /* Event list */
int metadata_dumped:1;
size_t subbuf_size, size_t num_subbuf,
unsigned int switch_timer_interval,
unsigned int read_timer_interval);
-void _ltt_channel_destroy(struct ltt_channel *chan);
struct ltt_event *ltt_event_create(struct ltt_channel *chan,
char *name,
struct lttng_kernel_event *event_param,
- const struct lttng_event_desc *event_desc,
void *filter);
-int ltt_event_unregister(struct ltt_event *event);
void ltt_transport_register(struct ltt_transport *transport);
void ltt_transport_unregister(struct ltt_transport *transport);
int ltt_probes_init(void);
void ltt_probes_exit(void);
-void lttng_kprobes_handler_pre(struct kprobe *p, struct pt_regs *regs);
+#ifdef CONFIG_KPROBES
+int lttng_kprobes_register(const char *name,
+ const char *symbol_name,
+ uint64_t offset,
+ uint64_t addr,
+ struct ltt_event *event);
+void lttng_kprobes_unregister(struct ltt_event *event);
+#else
+static inline
+int lttng_kprobes_register(const char *name,
+ const char *symbol_name,
+ uint64_t offset,
+ uint64_t addr,
+ struct ltt_event *event)
+{
+ return -ENOSYS;
+}
+
+static inline
+void lttng_kprobes_unregister(struct ltt_event *event)
+{
+}
+#endif
+
+#ifdef CONFIG_DYNAMIC_FTRACE
+int lttng_ftrace_register(const char *name,
+ const char *symbol_name,
+ struct ltt_event *event);
+void lttng_ftrace_unregister(struct ltt_event *event);
+#else
+static inline
+int lttng_ftrace_register(const char *name,
+ const char *symbol_name,
+ struct ltt_event *event)
+{
+ return -ENOSYS;
+}
+static inline
+void lttng_ftrace_unregister(struct ltt_event *event)
+{
+}
+#endif
#endif /* _LTT_EVENTS_H */