2 * Copyright (C) 2019 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
4 * SPDX-License-Identifier: LGPL-2.1-only
9 #include <common/error.h>
10 #include <common/macros.h>
11 #include <common/runas.h>
12 #include <lttng/event-rule/event-rule-internal.h>
13 #include <lttng/event-rule/kretprobe-internal.h>
15 #define IS_KRETPROBE_EVENT_RULE(rule) \
16 (lttng_event_rule_get_type(rule) == LTTNG_EVENT_RULE_TYPE_KRETPROBE)
18 static void lttng_event_rule_kretprobe_destroy(struct lttng_event_rule
*rule
)
20 struct lttng_event_rule_kretprobe
*kretprobe
;
22 kretprobe
= container_of(
23 rule
, struct lttng_event_rule_kretprobe
, parent
);
31 static bool lttng_event_rule_kretprobe_validate(
32 const struct lttng_event_rule
*rule
)
38 static int lttng_event_rule_kretprobe_serialize(
39 const struct lttng_event_rule
*rule
,
40 struct lttng_dynamic_buffer
*buf
,
47 static bool lttng_event_rule_kretprobe_is_equal(
48 const struct lttng_event_rule
*_a
,
49 const struct lttng_event_rule
*_b
)
55 static enum lttng_error_code
lttng_event_rule_kretprobe_populate(
56 struct lttng_event_rule
*rule
, uid_t uid
, gid_t gid
)
62 static const char *lttng_event_rule_kretprobe_get_filter(
63 const struct lttng_event_rule
*rule
)
69 static const struct lttng_bytecode
*
70 lttng_event_rule_kretprobe_get_filter_bytecode(
71 const struct lttng_event_rule
*rule
)
77 static struct lttng_event_exclusion
*
78 lttng_event_rule_kretprobe_generate_exclusions(struct lttng_event_rule
*rule
)
84 struct lttng_event_rule
*lttng_event_rule_kretprobe_create()
86 struct lttng_event_rule_kretprobe
*rule
;
88 rule
= zmalloc(sizeof(struct lttng_event_rule_kretprobe
));
93 lttng_event_rule_init(&rule
->parent
, LTTNG_EVENT_RULE_TYPE_KRETPROBE
);
94 rule
->parent
.validate
= lttng_event_rule_kretprobe_validate
;
95 rule
->parent
.serialize
= lttng_event_rule_kretprobe_serialize
;
96 rule
->parent
.equal
= lttng_event_rule_kretprobe_is_equal
;
97 rule
->parent
.destroy
= lttng_event_rule_kretprobe_destroy
;
98 rule
->parent
.populate
= lttng_event_rule_kretprobe_populate
;
99 rule
->parent
.get_filter
= lttng_event_rule_kretprobe_get_filter
;
100 rule
->parent
.get_filter_bytecode
=
101 lttng_event_rule_kretprobe_get_filter_bytecode
;
102 rule
->parent
.generate_exclusions
=
103 lttng_event_rule_kretprobe_generate_exclusions
;
104 return &rule
->parent
;
108 ssize_t
lttng_event_rule_kretprobe_create_from_buffer(
109 const struct lttng_buffer_view
*view
,
110 struct lttng_event_rule
**_event_rule
)
116 enum lttng_event_rule_status
lttng_event_rule_kretprobe_set_source(
117 struct lttng_event_rule
*rule
, const char *source
)
119 return LTTNG_EVENT_RULE_STATUS_UNSUPPORTED
;
122 enum lttng_event_rule_status
lttng_event_rule_kretprobe_set_name(
123 struct lttng_event_rule
*rule
, const char *name
)
125 return LTTNG_EVENT_RULE_STATUS_UNSUPPORTED
;
128 enum lttng_event_rule_status
lttng_event_rule_kretprobe_get_name(
129 const struct lttng_event_rule
*rule
, const char **name
)
131 return LTTNG_EVENT_RULE_STATUS_UNSUPPORTED
;
135 uint64_t lttng_event_rule_kretprobe_get_address(
136 const struct lttng_event_rule
*rule
)
138 assert("Not implemented" && 0);
142 uint64_t lttng_event_rule_kretprobe_get_offset(
143 const struct lttng_event_rule
*rule
)
145 assert("Not implemented" && 0);
149 const char *lttng_event_rule_kretprobe_get_symbol_name(
150 const struct lttng_event_rule
*rule
)
152 assert("Not implemented" && 0);