/*
- * Copyright (C) 2011 - David Goulet <david.goulet@polymtl.ca>
+ * Copyright (C) 2011 David Goulet <david.goulet@polymtl.ca>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2 only,
- * as published by the Free Software Foundation.
+ * SPDX-License-Identifier: GPL-2.0-only
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#define _LGPL_SOURCE
#include <common/common.h>
#include <common/defaults.h>
#include <common/trace-chunk.h>
+#include <common/macros.h>
#include "consumer.h"
#include "trace-kernel.h"
lks->metadata = NULL;
CDS_INIT_LIST_HEAD(&lks->channel_list.head);
+ lks->tracker_pid = process_attr_tracker_create();
+ if (!lks->tracker_pid) {
+ goto error;
+ }
+ lks->tracker_vpid = process_attr_tracker_create();
+ if (!lks->tracker_vpid) {
+ goto error;
+ }
+ lks->tracker_uid = process_attr_tracker_create();
+ if (!lks->tracker_uid) {
+ goto error;
+ }
+ lks->tracker_vuid = process_attr_tracker_create();
+ if (!lks->tracker_vuid) {
+ goto error;
+ }
+ lks->tracker_gid = process_attr_tracker_create();
+ if (!lks->tracker_gid) {
+ goto error;
+ }
+ lks->tracker_vgid = process_attr_tracker_create();
+ if (!lks->tracker_vgid) {
+ goto error;
+ }
lks->consumer = consumer_create_output(CONSUMER_DST_LOCAL);
if (lks->consumer == NULL) {
goto error;
return lks;
error:
+ process_attr_tracker_destroy(lks->tracker_pid);
+ process_attr_tracker_destroy(lks->tracker_vpid);
+ process_attr_tracker_destroy(lks->tracker_uid);
+ process_attr_tracker_destroy(lks->tracker_vuid);
+ process_attr_tracker_destroy(lks->tracker_gid);
+ process_attr_tracker_destroy(lks->tracker_vgid);
free(lks);
alloc_error:
/*
* Save a reference to the probe location used during
- * the listing of events. Close its FD since it won't
- * be needed for listing.
+ * the listing of events.
*/
userspace_probe_location =
lttng_userspace_probe_location_copy(location);
- ret = lttng_userspace_probe_location_function_set_binary_fd(
- userspace_probe_location, -1);
- if (ret) {
- goto error;
- }
break;
case LTTNG_USERSPACE_PROBE_LOCATION_LOOKUP_METHOD_TYPE_TRACEPOINT_SDT:
/* Get the file descriptor on the target binary. */
/*
* Save a reference to the probe location used during the listing of
- * events. Close its FD since it won't be needed for listing.
+ * events.
*/
userspace_probe_location =
lttng_userspace_probe_location_copy(location);
- ret = lttng_userspace_probe_location_tracepoint_set_binary_fd(
- userspace_probe_location, -1);
- if (ret) {
- goto error;
- }
break;
default:
DBG("Unsupported lookup method type");
break;
case LTTNG_EVENT_SYSCALL:
attr->instrumentation = LTTNG_KERNEL_SYSCALL;
+ attr->u.syscall.abi = LTTNG_KERNEL_SYSCALL_ABI_ALL;
+ attr->u.syscall.entryexit = LTTNG_KERNEL_SYSCALL_ENTRYEXIT;
+ attr->u.syscall.match = LTTNG_KERNEL_SYSCALL_MATCH_NAME;
break;
case LTTNG_EVENT_ALL:
attr->instrumentation = LTTNG_KERNEL_ALL;
*/
struct ltt_kernel_metadata *trace_kernel_create_metadata(void)
{
+ int ret;
struct ltt_kernel_metadata *lkm;
struct lttng_channel *chan;
goto error;
}
+ ret = lttng_strncpy(
+ chan->name, DEFAULT_METADATA_NAME, sizeof(chan->name));
+ if (ret) {
+ ERR("Failed to initialize metadata channel name to `%s`",
+ DEFAULT_METADATA_NAME);
+ goto error;
+ }
+
/* Set default attributes */
- chan->attr.overwrite = DEFAULT_CHANNEL_OVERWRITE;
+ chan->attr.overwrite = DEFAULT_METADATA_OVERWRITE;
chan->attr.subbuf_size = default_get_metadata_subbuf_size();
chan->attr.num_subbuf = DEFAULT_METADATA_SUBBUF_NUM;
- chan->attr.switch_timer_interval = DEFAULT_KERNEL_CHANNEL_SWITCH_TIMER;
- chan->attr.read_timer_interval = DEFAULT_KERNEL_CHANNEL_READ_TIMER;
- chan->attr.output = DEFAULT_KERNEL_CHANNEL_OUTPUT;
+ chan->attr.switch_timer_interval = DEFAULT_METADATA_SWITCH_TIMER;
+ chan->attr.read_timer_interval = DEFAULT_METADATA_READ_TIMER;;
+
+
+ /*
+ * The metadata channel of kernel sessions must use the "mmap"
+ * back-end since the consumer daemon accumulates complete
+ * metadata units before sending them to the relay daemon in
+ * live mode. The consumer daemon also needs to extract the contents
+ * of the metadata cache when computing a rotation position.
+ *
+ * In both cases, it is not possible to rely on the splice
+ * back-end as the consumer daemon may need to accumulate more
+ * content than can be backed by the ring buffer's underlying
+ * pages.
+ */
+ chan->attr.output = LTTNG_EVENT_MMAP;
+ chan->attr.tracefile_size = 0;
+ chan->attr.tracefile_count = 0;
+ chan->attr.live_timer_interval = 0;
/* Init metadata */
lkm->fd = -1;
/* Wipe consumer output object */
consumer_output_put(session->consumer);
+ process_attr_tracker_destroy(session->tracker_pid);
+ process_attr_tracker_destroy(session->tracker_vpid);
+ process_attr_tracker_destroy(session->tracker_uid);
+ process_attr_tracker_destroy(session->tracker_vuid);
+ process_attr_tracker_destroy(session->tracker_gid);
+ process_attr_tracker_destroy(session->tracker_vgid);
+
free(session);
}