2 * Copyright (C) 2019 - Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
4 * This library is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License, version 2.1 only,
6 * as published by the Free Software Foundation.
8 * This library is distributed in the hope that it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this library; if not, write to the Free Software Foundation,
15 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 #include <lttng/event-rule/event-rule-internal.h>
19 #include <lttng/event-rule/kretprobe-internal.h>
20 #include <common/macros.h>
21 #include <common/error.h>
22 #include <common/runas.h>
25 #define IS_KRETPROBE_EVENT_RULE(rule) ( \
26 lttng_event_rule_get_type(rule) == LTTNG_EVENT_RULE_TYPE_KRETPROBE \
30 void lttng_event_rule_kretprobe_destroy(struct lttng_event_rule
*rule
)
32 struct lttng_event_rule_kretprobe
*kretprobe
;
34 kretprobe
= container_of(rule
, struct lttng_event_rule_kretprobe
,
44 bool lttng_event_rule_kretprobe_validate(
45 const struct lttng_event_rule
*rule
)
52 int lttng_event_rule_kretprobe_serialize(
53 const struct lttng_event_rule
*rule
,
54 struct lttng_dynamic_buffer
*buf
, int *fd_to_send
)
61 bool lttng_event_rule_kretprobe_is_equal(const struct lttng_event_rule
*_a
,
62 const struct lttng_event_rule
*_b
)
69 enum lttng_error_code
lttng_event_rule_kretprobe_populate(struct lttng_event_rule
*rule
, uid_t uid
, gid_t gid
)
75 static const char *lttng_event_rule_kretprobe_get_filter(
76 const struct lttng_event_rule
*rule
)
82 static const struct lttng_filter_bytecode
*
83 lttng_event_rule_kretprobe_get_filter_bytecode(
84 const struct lttng_event_rule
*rule
)
90 static struct lttng_event_exclusion
*
91 lttng_event_rule_kretprobe_generate_exclusions(struct lttng_event_rule
*rule
)
97 struct lttng_event_rule
*lttng_event_rule_kretprobe_create()
99 struct lttng_event_rule_kretprobe
*rule
;
101 rule
= zmalloc(sizeof(struct lttng_event_rule_kretprobe
));
106 lttng_event_rule_init(&rule
->parent
, LTTNG_EVENT_RULE_TYPE_KRETPROBE
);
107 rule
->parent
.validate
= lttng_event_rule_kretprobe_validate
;
108 rule
->parent
.serialize
= lttng_event_rule_kretprobe_serialize
;
109 rule
->parent
.equal
= lttng_event_rule_kretprobe_is_equal
;
110 rule
->parent
.destroy
= lttng_event_rule_kretprobe_destroy
;
111 rule
->parent
.populate
= lttng_event_rule_kretprobe_populate
;
112 rule
->parent
.get_filter
= lttng_event_rule_kretprobe_get_filter
;
113 rule
->parent
.get_filter_bytecode
= lttng_event_rule_kretprobe_get_filter_bytecode
;
114 rule
->parent
.generate_exclusions
= lttng_event_rule_kretprobe_generate_exclusions
;
115 return &rule
->parent
;
119 ssize_t
lttng_event_rule_kretprobe_create_from_buffer(
120 const struct lttng_buffer_view
*view
,
121 struct lttng_event_rule
**_event_rule
)
127 enum lttng_event_rule_status
lttng_event_rule_kretprobe_set_source(
128 struct lttng_event_rule
*rule
, const char *source
)
130 return LTTNG_EVENT_RULE_STATUS_UNSUPPORTED
;
133 enum lttng_event_rule_status
lttng_event_rule_kretprobe_set_name(
134 struct lttng_event_rule
*rule
, const char *name
)
136 return LTTNG_EVENT_RULE_STATUS_UNSUPPORTED
;
139 enum lttng_event_rule_status
lttng_event_rule_kretprobe_get_name(
140 const struct lttng_event_rule
*rule
, const char **name
)
142 return LTTNG_EVENT_RULE_STATUS_UNSUPPORTED
;
146 uint64_t lttng_event_rule_kretprobe_get_address(
147 const struct lttng_event_rule
*rule
)
149 assert("Not implemented" && 0);
153 uint64_t lttng_event_rule_kretprobe_get_offset(
154 const struct lttng_event_rule
*rule
)
156 assert("Not implemented" && 0);
160 const char *lttng_event_rule_kretprobe_get_symbol_name(
161 const struct lttng_event_rule
*rule
)
163 assert("Not implemented" && 0);