#define _GNU_SOURCE
#include <stdio.h>
-#include <endian.h>
#include <urcu/list.h>
#include <urcu/hlist.h>
#include <pthread.h>
-#include <uuid/uuid.h>
#include <errno.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <stddef.h>
#include <inttypes.h>
#include <time.h>
+#include <lttng/ust-endian.h>
#include "clock.h"
#include <urcu-bp.h>
#include <usterr-signal-safe.h>
#include <helper.h>
#include "error.h"
+#include "compat.h"
+#include "lttng-ust-uuid.h"
#include "tracepoint-internal.h"
#include "ltt-tracer.h"
struct ltt_event *event;
struct ltt_channel *chan;
- event = e->event;
- if (!ltt_loglevel_match(event->desc,
+ if (!ltt_loglevel_match(desc,
e->loglevel_type,
e->loglevel)) {
continue;
if (strncmp(name, e->name, LTTNG_UST_SYM_NAME_LEN - 1)) {
continue;
}
+ event = e->event;
chan = event->chan;
assert(!event->desc);
event->desc = desc;
struct ltt_session *ltt_session_create(void)
{
struct ltt_session *session;
+ int ret;
session = zmalloc(sizeof(struct ltt_session));
if (!session)
CDS_INIT_LIST_HEAD(&session->chan);
CDS_INIT_LIST_HEAD(&session->events);
CDS_INIT_LIST_HEAD(&session->wildcards);
- uuid_generate(session->uuid);
+ ret = lttng_ust_uuid_generate(session->uuid);
+ if (ret != 0) {
+ session->uuid[0] = '\0';
+ }
cds_list_add(&session->list, &sessions);
return session;
}
struct ltt_event *event;
int ret = 0;
- if (chan->used_event_id == -1UL) {
+ if (chan->used_event_id == -1U) {
ret = -ENOMEM;
goto full;
}
*/
if (event_param->instrumentation == LTTNG_UST_TRACEPOINT) {
desc = ltt_event_get(event_param->name);
- if (!ltt_loglevel_match(desc,
- event_param->loglevel_type,
- event_param->loglevel)) {
- ret = -EPERM;
- goto no_loglevel_match;
+ if (desc) {
+ if (!ltt_loglevel_match(desc,
+ event_param->loglevel_type,
+ event_param->loglevel)) {
+ ret = -EPERM;
+ goto no_loglevel_match;
+ }
}
+ /*
+ * If descriptor is not there, it will be added to
+ * pending probes.
+ */
}
event = zmalloc(sizeof(struct ltt_event));
if (!event) {
struct ltt_event *event)
{
int ret = 0;
+ int loglevel = TRACE_DEFAULT;
if (event->metadata_dumped || !CMM_ACCESS_ONCE(session->active))
return 0;
if (ret)
goto end;
- if (event->desc->loglevel) {
- ret = lttng_metadata_printf(session,
- " loglevel = %d;\n",
- *(*event->desc->loglevel));
- if (ret)
- goto end;
- }
+ if (event->desc->loglevel)
+ loglevel = *(*event->desc->loglevel);
+
+ ret = lttng_metadata_printf(session,
+ " loglevel = %d;\n",
+ loglevel);
+ if (ret)
+ goto end;
if (event->ctx) {
ret = lttng_metadata_printf(session,
int _ltt_session_metadata_statedump(struct ltt_session *session)
{
unsigned char *uuid_c = session->uuid;
- char uuid_s[37], clock_uuid_s[CLOCK_UUID_LEN];
+ char uuid_s[LTTNG_UST_UUID_STR_LEN],
+ clock_uuid_s[LTTNG_UST_UUID_STR_LEN];
struct ltt_channel *chan;
struct ltt_event *event;
int ret = 0;
+ char procname[LTTNG_UST_PROCNAME_LEN] = "";
if (!CMM_ACCESS_ONCE(session->active))
return 0;
lttng_alignof(uint16_t) * CHAR_BIT,
lttng_alignof(uint32_t) * CHAR_BIT,
lttng_alignof(uint64_t) * CHAR_BIT,
- CTF_VERSION_MAJOR,
- CTF_VERSION_MINOR,
+ CTF_SPEC_MAJOR,
+ CTF_SPEC_MINOR,
uuid_s,
#if (BYTE_ORDER == BIG_ENDIAN)
"be"
if (ret)
goto end;
+ /* ignore error, just use empty string if error. */
+ lttng_ust_getprocname(procname);
+ procname[LTTNG_UST_PROCNAME_LEN - 1] = '\0';
+ ret = lttng_metadata_printf(session,
+ "env {\n"
+ " vpid = %d;\n"
+ " procname = \"%s\";\n"
+ " domain = \"ust\";\n"
+ " tracer_name = \"lttng-ust\";\n"
+ " tracer_major = %u;\n"
+ " tracer_minor = %u;\n"
+ " tracer_patchlevel = %u;\n"
+ "};\n\n",
+ (int) getpid(),
+ procname,
+ LTTNG_UST_MAJOR_VERSION,
+ LTTNG_UST_MINOR_VERSION,
+ LTTNG_UST_PATCHLEVEL_VERSION
+ );
+ if (ret)
+ goto end;
+
ret = lttng_metadata_printf(session,
"clock {\n"
" name = %s;\n",