#include <lttng/userspace-probe-internal.h>
#include <lttng/event-rule/event-rule.h>
#include <lttng/event-rule/event-rule-internal.h>
-#include <lttng/event-rule/kprobe.h>
-#include <lttng/event-rule/kprobe-internal.h>
+#include <lttng/event-rule/kernel-probe.h>
+#include <lttng/event-rule/kernel-probe-internal.h>
#include <lttng/event-rule/syscall.h>
#include <lttng/event-rule/syscall-internal.h>
#include <lttng/event-rule/tracepoint.h>
#include <lttng/event-rule/tracepoint-internal.h>
-#include <lttng/event-rule/uprobe-internal.h>
+#include <lttng/event-rule/userspace-probe-internal.h>
#include <common/common.h>
#include <common/defaults.h>
#include <common/trace-chunk.h>
struct ltt_kernel_event *trace_kernel_find_event(
char *name, struct ltt_kernel_channel *channel,
enum lttng_event_type type,
- struct lttng_filter_bytecode *filter)
+ struct lttng_bytecode *filter)
{
struct ltt_kernel_event *ev;
int found = 0;
*/
enum lttng_error_code trace_kernel_create_event(
struct lttng_event *ev, char *filter_expression,
- struct lttng_filter_bytecode *filter,
+ struct lttng_bytecode *filter,
struct ltt_kernel_event **kernel_event)
{
enum lttng_error_code ret;
enum lttng_error_code trace_kernel_create_event_notifier_rule(
struct lttng_trigger *trigger,
uint64_t token,
+ uint64_t error_counter_index,
struct ltt_kernel_event_notifier_rule **event_notifier_rule)
{
enum lttng_error_code ret = LTTNG_OK;
assert(event_notifier_rule);
- condition = lttng_trigger_get_condition(trigger);
+ condition = lttng_trigger_get_const_condition(trigger);
assert(condition);
condition_type = lttng_condition_get_type(condition);
- assert(condition_type == LTTNG_CONDITION_TYPE_EVENT_RULE_HIT);
+ assert(condition_type == LTTNG_CONDITION_TYPE_EVENT_RULE_MATCHES);
- condition_status = lttng_condition_event_rule_get_rule(
+ condition_status = lttng_condition_event_rule_matches_get_rule(
condition, &event_rule);
assert(condition_status == LTTNG_CONDITION_STATUS_OK);
assert(event_rule);
local_kernel_token_event_rule->fd = -1;
local_kernel_token_event_rule->enabled = 1;
local_kernel_token_event_rule->token = token;
+ local_kernel_token_event_rule->error_counter_index = error_counter_index;
/* Get the reference of the event rule. */
lttng_trigger_get(trigger);
const struct lttng_event_rule *rule,
struct lttng_kernel_event_notifier *kernel_event_notifier)
{
- enum lttng_error_code ret;
+ enum lttng_error_code ret_code;
const char *name;
+ int strncpy_ret;
switch (lttng_event_rule_get_type(rule)) {
- case LTTNG_EVENT_RULE_TYPE_KPROBE:
+ case LTTNG_EVENT_RULE_TYPE_KERNEL_PROBE:
{
uint64_t address = 0, offset = 0;
const char *symbol_name = NULL;
enum lttng_kernel_probe_location_status k_status;
enum lttng_event_rule_status status;
- status = lttng_event_rule_kprobe_get_location(rule, &location);
+ status = lttng_event_rule_kernel_probe_get_location(rule, &location);
if (status != LTTNG_EVENT_RULE_STATUS_OK) {
- ret = LTTNG_ERR_PROBE_LOCATION_INVAL;
+ ret_code = LTTNG_ERR_PROBE_LOCATION_INVAL;
goto error;
}
kernel_event_notifier->event.u.kprobe.addr = address;
kernel_event_notifier->event.u.kprobe.offset = offset;
if (symbol_name) {
- const int copy_ret = lttng_strncpy(
+ strncpy_ret = lttng_strncpy(
kernel_event_notifier->event.u.kprobe.symbol_name,
symbol_name, LTTNG_KERNEL_SYM_NAME_LEN);
- if (copy_ret) {
- ret = LTTNG_ERR_INVALID;
+ if (strncpy_ret) {
+ ret_code = LTTNG_ERR_INVALID;
goto error;
}
}
kernel_event_notifier->event.u.kprobe.symbol_name[LTTNG_KERNEL_SYM_NAME_LEN - 1] = '\0';
- status = lttng_event_rule_kprobe_get_name(rule, &name);
+
+ status = lttng_event_rule_kernel_probe_get_event_name(rule, &name);
assert(status == LTTNG_EVENT_RULE_STATUS_OK);
- ret = LTTNG_OK;
+ ret_code = LTTNG_OK;
break;
}
- case LTTNG_EVENT_RULE_TYPE_UPROBE:
+ case LTTNG_EVENT_RULE_TYPE_USERSPACE_PROBE:
{
const struct lttng_userspace_probe_location* location = NULL;
const struct lttng_userspace_probe_location_lookup_method *lookup = NULL;
enum lttng_event_rule_status status;
- status = lttng_event_rule_uprobe_get_location(rule, &location);
+ status = lttng_event_rule_userspace_probe_get_location(rule, &location);
if (status != LTTNG_EVENT_RULE_STATUS_OK) {
- ret = LTTNG_ERR_PROBE_LOCATION_INVAL;
+ ret_code = LTTNG_ERR_PROBE_LOCATION_INVAL;
goto error;
}
lookup = lttng_userspace_probe_location_get_lookup_method(
location);
if (!lookup) {
- ret = LTTNG_ERR_PROBE_LOCATION_INVAL;
+ ret_code = LTTNG_ERR_PROBE_LOCATION_INVAL;
goto error;
}
abort();
}
- status = lttng_event_rule_uprobe_get_name(rule, &name);
+ status = lttng_event_rule_userspace_probe_get_event_name(
+ rule, &name);
assert(status == LTTNG_EVENT_RULE_STATUS_OK);
- ret = LTTNG_OK;
+ ret_code = LTTNG_OK;
break;
}
case LTTNG_EVENT_RULE_TYPE_TRACEPOINT:
kernel_event_notifier->event.instrumentation =
LTTNG_KERNEL_TRACEPOINT;
- ret = LTTNG_OK;
+ ret_code = LTTNG_OK;
break;
}
case LTTNG_EVENT_RULE_TYPE_SYSCALL:
const enum lttng_event_rule_status status =
lttng_event_rule_syscall_get_pattern(
rule, &name);
+ const enum lttng_event_rule_syscall_emission_site_type
+ emission_site_type =
+ lttng_event_rule_syscall_get_emission_site_type(rule);
+ enum lttng_kernel_syscall_entryexit entryexit;
assert(status == LTTNG_EVENT_RULE_STATUS_OK);
+ assert(emission_site_type != LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_UNKNOWN);
+
+ switch(emission_site_type) {
+ case LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_ENTRY:
+ entryexit = LTTNG_KERNEL_SYSCALL_ENTRY;
+ break;
+ case LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_EXIT:
+ entryexit = LTTNG_KERNEL_SYSCALL_EXIT;
+ break;
+ case LTTNG_EVENT_RULE_SYSCALL_EMISSION_SITE_ENTRY_EXIT:
+ entryexit = LTTNG_KERNEL_SYSCALL_ENTRYEXIT;
+ break;
+ default:
+ abort();
+ break;
+ }
kernel_event_notifier->event.instrumentation =
LTTNG_KERNEL_SYSCALL;
kernel_event_notifier->event.u.syscall.abi =
LTTNG_KERNEL_SYSCALL_ABI_ALL;
kernel_event_notifier->event.u.syscall.entryexit =
- LTTNG_KERNEL_SYSCALL_ENTRY;
+ entryexit;
kernel_event_notifier->event.u.syscall.match =
LTTNG_KERNEL_SYSCALL_MATCH_NAME;
- ret = LTTNG_OK;
+ ret_code = LTTNG_OK;
break;
}
- case LTTNG_EVENT_RULE_TYPE_KRETPROBE:
+ case LTTNG_EVENT_RULE_TYPE_KERNEL_FUNCTION:
default:
abort();
break;
}
- ret = lttng_strncpy(kernel_event_notifier->event.name, name,
+ strncpy_ret = lttng_strncpy(kernel_event_notifier->event.name, name,
LTTNG_KERNEL_SYM_NAME_LEN);
- if (ret) {
- ret = LTTNG_ERR_INVALID;
+ if (strncpy_ret) {
+ ret_code = LTTNG_ERR_INVALID;
goto error;
}
error:
- return ret;
+ return ret_code;
}
/*
* Allocate and initialize a kernel metadata.
/* Remove from channel list */
cds_list_del(&channel->list);
- if (notification_thread_handle
- && channel->published_to_notification_thread) {
+ if (the_notification_thread_handle &&
+ channel->published_to_notification_thread) {
status = notification_thread_command_remove_channel(
- notification_thread_handle,
- channel->key, LTTNG_DOMAIN_KERNEL);
+ the_notification_thread_handle, channel->key,
+ LTTNG_DOMAIN_KERNEL);
assert(status == LTTNG_OK);
}
free(channel->channel->attr.extended.ptr);