lttng-tools: Update to 2.10.6

Signed-off-by: Rosen Penev <rosenp@gmail.com>
This commit is contained in:
Rosen Penev 2019-03-31 00:27:01 -07:00
parent 41e005c7b4
commit 9777877718
No known key found for this signature in database
GPG Key ID: 36D31CFA845F0E3B
5 changed files with 398 additions and 454 deletions

View File

@ -8,18 +8,17 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=lttng-tools
PKG_VERSION:=2.6.0
PKG_VERSION:=2.10.6
PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://lttng.org/files/$(PKG_NAME)/
PKG_HASH:=128166445126d76da7d9f42a56dec12716732a1ed697a6cfdf40c9e135384f32
PKG_HASH:=f05df52bbebf8ce88d1b29e9e98cfc957d2ed738a345118018237ebdb581537c
PKG_MAINTAINER:=
PKG_LICENSE:=LGPL-2.1 GPL-2.0
PKG_LICENSE_FILES:=COPYING
PKG_MAINTAINER:=Nicolas Thill <nico@openwrt.org>
PKG_FIXUP:=autoreconf
PKG_USE_MIPS16:=0
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
@ -34,11 +33,12 @@ define Package/lttng-tools
DEPENDS:= +lttng-ust +libpopt +libxml2
endef
CONFIGURE_ARGS += --disable-kmod
TARGET_CFLAGS += $(FPIC)
TARGET_LDFLAGS += -lurcu-bp
MAKE_FLAGS += V="$(V)"
CONFIGURE_ARGS += \
--enable-epoll \
--without-kmod \
--without-pic
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include

View File

@ -0,0 +1,45 @@
From e0212fb3278ca54ac6d3beecf990297670f2612f Mon Sep 17 00:00:00 2001
From: Kai Kang <kai.kang@windriver.com>
Date: Thu, 13 Dec 2018 10:55:36 +0800
Subject: [PATCH] Fix: compile fails for x32 arch
It fails to compile for x32 arch:
| .../src/common/utils.c: Assembler messages:
| .../src/common/utils.c:1026: Error: register type mismatch for `bsr'
| .../src/common/utils.c:1028: Error: operand type mismatch for `movq'
Add macro check that not to define that fls_u64() for x32.
Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
src/bin/lttng/utils.c | 2 +-
src/common/utils.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/bin/lttng/utils.c b/src/bin/lttng/utils.c
index 0e96ef0c3..5c79c8c7e 100644
--- a/src/bin/lttng/utils.c
+++ b/src/bin/lttng/utils.c
@@ -158,7 +158,7 @@ unsigned int fls_u32(uint32_t x)
#define HAS_FLS_U32
#endif
-#if defined(__x86_64)
+#if defined(__x86_64) && !defined(__ILP32__)
static inline
unsigned int fls_u64(uint64_t x)
{
diff --git a/src/common/utils.c b/src/common/utils.c
index 08139e5e2..3c3899819 100644
--- a/src/common/utils.c
+++ b/src/common/utils.c
@@ -1223,7 +1223,7 @@ static inline unsigned int fls_u32(uint32_t x)
#define HAS_FLS_U32
#endif
-#if defined(__x86_64)
+#if defined(__x86_64) && !defined(__ILP32__)
static inline
unsigned int fls_u64(uint64_t x)
{

View File

@ -0,0 +1,345 @@
From 10e8001ad876d8cb3b5a17c7492e713bbc047975 Mon Sep 17 00:00:00 2001
From: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Date: Thu, 28 Mar 2019 18:31:29 -0400
Subject: [PATCH] Fix: getgrnam is not MT-Safe, use getgrnam_r
Running the test suite under a Yocto musl build resulted in musl
coredump due to double freeing.
We get the following backtraces:
0 a_crash () at ./arch/x86_64/atomic_arch.h:108
1 unmap_chunk (self=<optimized out>) at src/malloc/malloc.c:515
2 free (p=<optimized out>) at src/malloc/malloc.c:526
3 0x00007f46d9dc3849 in __getgrent_a (f=f@entry=0x7f46d9d1f7e0, gr=gr@entry=0x7f46d9e24460 <gr>, line=line@entry=0x7f46d9e26058 <line>, size=size@entry=0x7f46d92db550, mem=mem@entry=0x7f46d9e26050 <mem>, nmem=nmem@entry=0x7f46d92db558, res=0x7f46d92db548) at src/passwd/getgrent_a.c:45
4 0x00007f46d9dc2e6b in __getgr_a (name=0x487242 "tracing", gid=gid@entry=0, gr=gr@entry=0x7f46d9e24460 <gr>, buf=buf@entry=0x7f46d9e26058 <line>, size=size@entry=0x7f46d92db550, mem=mem@entry=0x7f46d9e26050 <mem>, nmem=0x7f46d92db558, res=0x7f46d92db548) at src/passwd/getgr_a.c:30
5 0x00007f46d9dc3733 in getgrnam (name=<optimized out>) at src/passwd/getgrent.c:37
6 0x0000000000460b29 in utils_get_group_id (name=<optimized out>) at ../../../lttng-tools-2.10.6/src/common/utils.c:1241
7 0x000000000044ee69 in thread_manage_health (data=<optimized out>) at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/main.c:4115
8 0x00007f46d9de1541 in start (p=<optimized out>) at src/thread/pthread_create.c:195
9 0x00007f46d9dee661 in __clone () at src/thread/x86_64/clone.s:22
From another run:
0 a_crash () at ./arch/x86_64/atomic_arch.h:108
1 unmap_chunk (self=<optimized out>) at src/malloc/malloc.c:515
2 free (p=<optimized out>) at src/malloc/malloc.c:526
3 0x00007f5abc210849 in __getgrent_a (f=f@entry=0x7f5abc2733e0, gr=gr@entry=0x7f5abc271460 <gr>, line=line@entry=0x7f5abc273058 <line>, size=size@entry=0x7f5abaef5510, mem=mem@entry=0x7f5abc273050 <mem>, nmem=nmem@entry=0x7f5abaef5518, res=0x7f5abaef5508) at src/passwd/getgrent_a.c:45
4 0x00007f5abc20fe6b in __getgr_a (name=0x487242 "tracing", gid=gid@entry=0, gr=gr@entry=0x7f5abc271460 <gr>, buf=buf@entry=0x7f5abc273058 <line>, size=size@entry=0x7f5abaef5510, mem=mem@entry=0x7f5abc273050 <mem>, nmem=0x7f5abaef5518, res=0x7f5abaef5508) at src/passwd/getgr_a.c:30
5 0x00007f5abc210733 in getgrnam (name=<optimized out>) at src/passwd/getgrent.c:37
6 0x0000000000460b29 in utils_get_group_id (name=<optimized out>) at ../../../lttng-tools-2.10.6/src/common/utils.c:1241
7 0x000000000042dee4 in notification_channel_socket_create () at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/notification-thread.c:238
8 init_thread_state (state=0x7f5abaef5560, handle=0x7f5abbf9be40) at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/notification-thread.c:375
9 thread_notification (data=0x7f5abbf9be40) at ../../../../lttng-tools-2.10.6/src/bin/lttng-sessiond/notification-thread.c:495
10 0x00007f5abc22e541 in start (p=<optimized out>) at src/thread/pthread_create.c:195
11 0x00007f5abc23b661 in __clone () at src/thread/x86_64/clone.s:22
The problem was easily reproducible (~6 crash on ~300 runs). A prototype fix
using mutex around the getgrnam yielded no crash in over 1000 runs. This
patch yielded the same results as the prototype fix.
Unfortunately we cannot rely on a mutex in liblttng-ctl since we cannot
enforce the locking for the application using the lib.
Use getgrnam_r instead.
The previous implementation of utils_get_group_id returned the gid of
the root group (0) on error/not found. lttng_check_tracing_group needs
to know if an error/not found occured, returning the root group is not
enough. We now return the gid via the passed parameter. The caller is
responsible for either defaulting to the root group or propagating the
error.
We also do not want to warn when used in liblttng-ctl context. We might
want to move the warning elsewhere in the future. For now, pass a bool
if we need to warn or not.
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
---
src/bin/lttng-consumerd/health-consumerd.c | 10 ++-
src/bin/lttng-relayd/health-relayd.c | 20 ++++--
src/bin/lttng-sessiond/main.c | 24 +++++--
src/bin/lttng-sessiond/notification-thread.c | 10 ++-
src/common/utils.c | 75 +++++++++++++++++---
src/common/utils.h | 4 +-
src/lib/lttng-ctl/lttng-ctl.c | 8 +--
7 files changed, 122 insertions(+), 29 deletions(-)
diff --git a/src/bin/lttng-consumerd/health-consumerd.c b/src/bin/lttng-consumerd/health-consumerd.c
index 1e2f31e4..6045401a 100644
--- a/src/bin/lttng-consumerd/health-consumerd.c
+++ b/src/bin/lttng-consumerd/health-consumerd.c
@@ -184,8 +184,14 @@ void *thread_manage_health(void *data)
is_root = !getuid();
if (is_root) {
/* lttng health client socket path permissions */
- ret = chown(health_unix_sock_path, 0,
- utils_get_group_id(tracing_group_name));
+ gid_t gid;
+
+ ret = utils_get_group_id(tracing_group_name, true, &gid);
+ if (ret) {
+ gid = 0; /* Default to root group. */
+ }
+
+ ret = chown(health_unix_sock_path, 0, gid);
if (ret < 0) {
ERR("Unable to set group on %s", health_unix_sock_path);
PERROR("chown");
diff --git a/src/bin/lttng-relayd/health-relayd.c b/src/bin/lttng-relayd/health-relayd.c
index ba996621..962e88c4 100644
--- a/src/bin/lttng-relayd/health-relayd.c
+++ b/src/bin/lttng-relayd/health-relayd.c
@@ -105,8 +105,14 @@ static int create_lttng_rundir_with_perm(const char *rundir)
int is_root = !getuid();
if (is_root) {
- ret = chown(rundir, 0,
- utils_get_group_id(tracing_group_name));
+ gid_t gid;
+
+ ret = utils_get_group_id(tracing_group_name, true, &gid);
+ if (ret) {
+ gid = 0; /* Default to root group.*/
+ }
+
+ ret = chown(rundir, 0, gid);
if (ret < 0) {
ERR("Unable to set group on %s", rundir);
PERROR("chown");
@@ -256,8 +262,14 @@ void *thread_manage_health(void *data)
is_root = !getuid();
if (is_root) {
/* lttng health client socket path permissions */
- ret = chown(health_unix_sock_path, 0,
- utils_get_group_id(tracing_group_name));
+ gid_t gid;
+
+ ret = utils_get_group_id(tracing_group_name, true, &gid);
+ if (ret) {
+ gid = 0; /* Default to root group */
+ }
+
+ ret = chown(health_unix_sock_path, 0, gid);
if (ret < 0) {
ERR("Unable to set group on %s", health_unix_sock_path);
PERROR("chown");
diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c
index fa6fa483..49307064 100644
--- a/src/bin/lttng-sessiond/main.c
+++ b/src/bin/lttng-sessiond/main.c
@@ -4112,8 +4112,14 @@ static void *thread_manage_health(void *data)
if (is_root) {
/* lttng health client socket path permissions */
- ret = chown(config.health_unix_sock_path.value, 0,
- utils_get_group_id(config.tracing_group_name.value));
+ gid_t gid;
+
+ ret = utils_get_group_id(config.tracing_group_name.value, true, &gid);
+ if (ret) {
+ gid = 0; /* Default to root group */
+ }
+
+ ret = chown(config.health_unix_sock_path.value, 0, &gid);
if (ret < 0) {
ERR("Unable to set group on %s", config.health_unix_sock_path.value);
PERROR("chown");
@@ -5238,7 +5244,10 @@ static int set_permissions(char *rundir)
int ret;
gid_t gid;
- gid = utils_get_group_id(config.tracing_group_name.value);
+ ret = utils_get_group_id(config.tracing_group_name.value, true, &gid);
+ if (ret) {
+ gid = 0; /* Default to root group */
+ }
/* Set lttng run dir */
ret = chown(rundir, 0, gid);
@@ -5349,7 +5358,14 @@ static int set_consumer_sockets(struct consumer_data *consumer_data)
goto error;
}
if (is_root) {
- ret = chown(path, 0, utils_get_group_id(config.tracing_group_name.value));
+ gid_t gid;
+
+ ret = utils_get_group_id(config.tracing_group_name.value, true, &gid);
+ if (ret) {
+ gid = 0; /* Default to root group */
+ }
+
+ ret = chown(path, 0, gid);
if (ret < 0) {
ERR("Unable to set group on %s", path);
PERROR("chown");
diff --git a/src/bin/lttng-sessiond/notification-thread.c b/src/bin/lttng-sessiond/notification-thread.c
index 92ac597f..18a264d9 100644
--- a/src/bin/lttng-sessiond/notification-thread.c
+++ b/src/bin/lttng-sessiond/notification-thread.c
@@ -235,8 +235,14 @@ int notification_channel_socket_create(void)
}
if (getuid() == 0) {
- ret = chown(sock_path, 0,
- utils_get_group_id(config.tracing_group_name.value));
+ gid_t gid;
+
+ ret = utils_get_group_id(config.tracing_group_name.value, true, &gid);
+ if (ret) {
+ gid = 0; /* Default to root group. */
+ }
+
+ ret = chown(sock_path, 0, gid);
if (ret) {
ERR("Failed to set the notification channel socket's group");
ret = -1;
diff --git a/src/common/utils.c b/src/common/utils.c
index c0bb031e..778bc00f 100644
--- a/src/common/utils.c
+++ b/src/common/utils.c
@@ -1231,24 +1231,77 @@ size_t utils_get_current_time_str(const char *format, char *dst, size_t len)
}
/*
- * Return the group ID matching name, else 0 if it cannot be found.
+ * Return 0 on success and set *gid to the group_ID matching the passed name.
+ * Else -1 if it cannot be found or an error occurred.
*/
LTTNG_HIDDEN
-gid_t utils_get_group_id(const char *name)
+int utils_get_group_id(const char *name, bool warn, gid_t *gid)
{
- struct group *grp;
+ static volatile int warn_once;
- grp = getgrnam(name);
- if (!grp) {
- static volatile int warn_once;
+ int ret;
+ long sys_len;
+ size_t len;
+ struct group grp;
+ struct group *result;
+ char *buffer = NULL;
- if (!warn_once) {
- WARN("No tracing group detected");
- warn_once = 1;
+ /* Get the system limit if it exists */
+ sys_len = sysconf(_SC_GETGR_R_SIZE_MAX);
+ if (sys_len == -1) {
+ len = 1024;
+ } else {
+ len = (size_t) sys_len;
+ }
+
+ buffer = malloc(len);
+ if (!buffer) {
+ PERROR("getgrnam_r malloc");
+ ret = -1;
+ goto error;
+ }
+
+ while ((ret = getgrnam_r(name, &grp, buffer, len, &result)) == ERANGE)
+ {
+ /* Buffer is not big enough, increase its size. */
+ size_t new_len = 2 * len;
+ char *new_buffer = NULL;
+ if (new_len < len) {
+ ERR("getgrnam_r buffer size overflow");
+ ret = -1;
+ goto error;
+ }
+ len = new_len;
+ new_buffer = realloc(buffer, len);
+ if (!new_buffer) {
+ PERROR("getgrnam_r realloc");
+ ret = -1;
+ goto error;
}
- return 0;
+ buffer = new_buffer;
+ }
+ if (ret != 0) {
+ PERROR("getgrnam_r");
+ ret = -1;
+ goto error;
+ }
+
+ /* Group not found. */
+ if (!result) {
+ ret = -1;
+ goto error;
+ }
+
+ *gid = result->gr_gid;
+ ret = 0;
+
+error:
+ free(buffer);
+ if (ret && warn && !warn_once) {
+ WARN("No tracing group detected");
+ warn_once = 1;
}
- return grp->gr_gid;
+ return ret;
}
/*
diff --git a/src/common/utils.h b/src/common/utils.h
index 18f19ef1..9c72431d 100644
--- a/src/common/utils.h
+++ b/src/common/utils.h
@@ -22,6 +22,8 @@
#include <unistd.h>
#include <stdint.h>
#include <getopt.h>
+#include <stdbool.h>
+#include <sys/types.h>
#define KIBI_LOG2 10
#define MEBI_LOG2 20
@@ -52,7 +54,7 @@ int utils_get_count_order_u64(uint64_t x);
char *utils_get_home_dir(void);
char *utils_get_user_home_dir(uid_t uid);
size_t utils_get_current_time_str(const char *format, char *dst, size_t len);
-gid_t utils_get_group_id(const char *name);
+int utils_get_group_id(const char *name, bool warn, gid_t *gid);
char *utils_generate_optstring(const struct option *long_options,
size_t opt_count);
int utils_create_lock_file(const char *filepath);
diff --git a/src/lib/lttng-ctl/lttng-ctl.c b/src/lib/lttng-ctl/lttng-ctl.c
index 2d84aad9..561b0bcf 100644
--- a/src/lib/lttng-ctl/lttng-ctl.c
+++ b/src/lib/lttng-ctl/lttng-ctl.c
@@ -208,15 +208,13 @@ end:
LTTNG_HIDDEN
int lttng_check_tracing_group(void)
{
- struct group *grp_tracing; /* no free(). See getgrnam(3) */
- gid_t *grp_list;
+ gid_t *grp_list, tracing_gid;
int grp_list_size, grp_id, i;
int ret = -1;
const char *grp_name = tracing_group;
/* Get GID of group 'tracing' */
- grp_tracing = getgrnam(grp_name);
- if (!grp_tracing) {
+ if (utils_get_group_id(grp_name, false, &tracing_gid)) {
/* If grp_tracing is NULL, the group does not exist. */
goto end;
}
@@ -241,7 +239,7 @@ int lttng_check_tracing_group(void)
}
for (i = 0; i < grp_list_size; i++) {
- if (grp_list[i] == grp_tracing->gr_gid) {
+ if (grp_list[i] == tracing_gid) {
ret = 1;
break;
}
--
2.17.1

View File

@ -1,23 +0,0 @@
--- a/src/common/compat/poll.h
+++ b/src/common/compat/poll.h
@@ -55,6 +55,10 @@ static inline void __lttng_poll_free(voi
#include <features.h>
#include <common/compat/fcntl.h>
+#ifndef __GLIBC_PREREQ
+#define __GLIBC_PREREQ(maj, min) (0)
+#endif
+
/* See man epoll(7) for this define path */
#define COMPAT_EPOLL_PROC_PATH "/proc/sys/fs/epoll/max_user_watches"
--- a/src/common/runas.h
+++ b/src/common/runas.h
@@ -21,6 +21,7 @@
#include <unistd.h>
#include <pthread.h>
+#include <sys/stat.h>
int run_as_mkdir_recursive(const char *path, mode_t mode, uid_t uid, gid_t gid);
int run_as_mkdir(const char *path, mode_t mode, uid_t uid, gid_t gid);

View File

@ -1,423 +0,0 @@
--- a/src/common/mi-lttng.h
+++ b/src/common/mi-lttng.h
@@ -49,133 +49,133 @@ struct mi_lttng_version {
};
/* Strings related to command */
-const char * const mi_lttng_element_command;
-const char * const mi_lttng_element_command_action;
-const char * const mi_lttng_element_command_add_context;
-const char * const mi_lttng_element_command_calibrate;
-const char * const mi_lttng_element_command_create;
-const char * const mi_lttng_element_command_destroy;
-const char * const mi_lttng_element_command_disable_channel;
-const char * const mi_lttng_element_command_disable_event;
-const char * const mi_lttng_element_command_enable_channels;
-const char * const mi_lttng_element_command_enable_event;
-const char * const mi_lttng_element_command_list;
-const char * const mi_lttng_element_command_load;
-const char * const mi_lttng_element_command_name;
-const char * const mi_lttng_element_command_output;
-const char * const mi_lttng_element_command_save;
-const char * const mi_lttng_element_command_set_session;
-const char * const mi_lttng_element_command_snapshot;
-const char * const mi_lttng_element_command_snapshot_add;
-const char * const mi_lttng_element_command_snapshot_del;
-const char * const mi_lttng_element_command_snapshot_list;
-const char * const mi_lttng_element_command_snapshot_record;
-const char * const mi_lttng_element_command_start;
-const char * const mi_lttng_element_command_stop;
-const char * const mi_lttng_element_command_success;
-const char * const mi_lttng_element_command_version;
+extern const char * const mi_lttng_element_command;
+extern const char * const mi_lttng_element_command_action;
+extern const char * const mi_lttng_element_command_add_context;
+extern const char * const mi_lttng_element_command_calibrate;
+extern const char * const mi_lttng_element_command_create;
+extern const char * const mi_lttng_element_command_destroy;
+extern const char * const mi_lttng_element_command_disable_channel;
+extern const char * const mi_lttng_element_command_disable_event;
+extern const char * const mi_lttng_element_command_enable_channels;
+extern const char * const mi_lttng_element_command_enable_event;
+extern const char * const mi_lttng_element_command_list;
+extern const char * const mi_lttng_element_command_load;
+extern const char * const mi_lttng_element_command_name;
+extern const char * const mi_lttng_element_command_output;
+extern const char * const mi_lttng_element_command_save;
+extern const char * const mi_lttng_element_command_set_session;
+extern const char * const mi_lttng_element_command_snapshot;
+extern const char * const mi_lttng_element_command_snapshot_add;
+extern const char * const mi_lttng_element_command_snapshot_del;
+extern const char * const mi_lttng_element_command_snapshot_list;
+extern const char * const mi_lttng_element_command_snapshot_record;
+extern const char * const mi_lttng_element_command_start;
+extern const char * const mi_lttng_element_command_stop;
+extern const char * const mi_lttng_element_command_success;
+extern const char * const mi_lttng_element_command_version;
/* Strings related to version command */
-const char * const mi_lttng_element_version;
-const char * const mi_lttng_element_version_commit;
-const char * const mi_lttng_element_version_description;
-const char * const mi_lttng_element_version_license;
-const char * const mi_lttng_element_version_major;
-const char * const mi_lttng_element_version_minor;
-const char * const mi_lttng_element_version_patch_level;
-const char * const mi_lttng_element_version_str;
-const char * const mi_lttng_element_version_web;
+extern const char * const mi_lttng_element_version;
+extern const char * const mi_lttng_element_version_commit;
+extern const char * const mi_lttng_element_version_description;
+extern const char * const mi_lttng_element_version_license;
+extern const char * const mi_lttng_element_version_major;
+extern const char * const mi_lttng_element_version_minor;
+extern const char * const mi_lttng_element_version_patch_level;
+extern const char * const mi_lttng_element_version_str;
+extern const char * const mi_lttng_element_version_web;
/* String related to a lttng_event_field */
-const char * const mi_lttng_element_event_field;
-const char * const mi_lttng_element_event_fields;
+extern const char * const mi_lttng_element_event_field;
+extern const char * const mi_lttng_element_event_fields;
/* String related to lttng_event_context */
-const char * const mi_lttng_context_type_perf_counter;
-const char * const mi_lttng_context_type_perf_cpu_counter;
-const char * const mi_lttng_context_type_perf_thread_counter;
+extern const char * const mi_lttng_context_type_perf_counter;
+extern const char * const mi_lttng_context_type_perf_cpu_counter;
+extern const char * const mi_lttng_context_type_perf_thread_counter;
/* String related to lttng_event_perf_counter_ctx */
-const char * const mi_lttng_element_perf_counter_context;
+extern const char * const mi_lttng_element_perf_counter_context;
/* Strings related to pid */
-const char * const mi_lttng_element_pids;
-const char * const mi_lttng_element_pid;
-const char * const mi_lttng_element_pid_id;
+extern const char * const mi_lttng_element_pids;
+extern const char * const mi_lttng_element_pid;
+extern const char * const mi_lttng_element_pid_id;
/* Strings related to save command */
-const char * const mi_lttng_element_save;
+extern const char * const mi_lttng_element_save;
/* Strings related to load command */
-const char * const mi_lttng_element_load;
+extern const char * const mi_lttng_element_load;
/* General element of mi_lttng */
-const char * const mi_lttng_element_empty;
-const char * const mi_lttng_element_id;
-const char * const mi_lttng_element_nowrite;
-const char * const mi_lttng_element_success;
-const char * const mi_lttng_element_type_enum;
-const char * const mi_lttng_element_type_float;
-const char * const mi_lttng_element_type_integer;
-const char * const mi_lttng_element_type_other;
-const char * const mi_lttng_element_type_string;
+extern const char * const mi_lttng_element_empty;
+extern const char * const mi_lttng_element_id;
+extern const char * const mi_lttng_element_nowrite;
+extern const char * const mi_lttng_element_success;
+extern const char * const mi_lttng_element_type_enum;
+extern const char * const mi_lttng_element_type_float;
+extern const char * const mi_lttng_element_type_integer;
+extern const char * const mi_lttng_element_type_other;
+extern const char * const mi_lttng_element_type_string;
/* String related to loglevel */
-const char * const mi_lttng_loglevel_str_alert;
-const char * const mi_lttng_loglevel_str_crit;
-const char * const mi_lttng_loglevel_str_debug;
-const char * const mi_lttng_loglevel_str_debug_function;
-const char * const mi_lttng_loglevel_str_debug_line;
-const char * const mi_lttng_loglevel_str_debug_module;
-const char * const mi_lttng_loglevel_str_debug_process;
-const char * const mi_lttng_loglevel_str_debug_program;
-const char * const mi_lttng_loglevel_str_debug_system;
-const char * const mi_lttng_loglevel_str_debug_unit;
-const char * const mi_lttng_loglevel_str_emerg;
-const char * const mi_lttng_loglevel_str_err;
-const char * const mi_lttng_loglevel_str_info;
-const char * const mi_lttng_loglevel_str_notice;
-const char * const mi_lttng_loglevel_str_unknown;
-const char * const mi_lttng_loglevel_str_warning;
+extern const char * const mi_lttng_loglevel_str_alert;
+extern const char * const mi_lttng_loglevel_str_crit;
+extern const char * const mi_lttng_loglevel_str_debug;
+extern const char * const mi_lttng_loglevel_str_debug_function;
+extern const char * const mi_lttng_loglevel_str_debug_line;
+extern const char * const mi_lttng_loglevel_str_debug_module;
+extern const char * const mi_lttng_loglevel_str_debug_process;
+extern const char * const mi_lttng_loglevel_str_debug_program;
+extern const char * const mi_lttng_loglevel_str_debug_system;
+extern const char * const mi_lttng_loglevel_str_debug_unit;
+extern const char * const mi_lttng_loglevel_str_emerg;
+extern const char * const mi_lttng_loglevel_str_err;
+extern const char * const mi_lttng_loglevel_str_info;
+extern const char * const mi_lttng_loglevel_str_notice;
+extern const char * const mi_lttng_loglevel_str_unknown;
+extern const char * const mi_lttng_loglevel_str_warning;
/* String related to loglevel JUL */
-const char * const mi_lttng_loglevel_str_jul_all;
-const char * const mi_lttng_loglevel_str_jul_config;
-const char * const mi_lttng_loglevel_str_jul_fine;
-const char * const mi_lttng_loglevel_str_jul_finer;
-const char * const mi_lttng_loglevel_str_jul_finest;
-const char * const mi_lttng_loglevel_str_jul_info;
-const char * const mi_lttng_loglevel_str_jul_off;
-const char * const mi_lttng_loglevel_str_jul_severe;
-const char * const mi_lttng_loglevel_str_jul_warning;
+extern const char * const mi_lttng_loglevel_str_jul_all;
+extern const char * const mi_lttng_loglevel_str_jul_config;
+extern const char * const mi_lttng_loglevel_str_jul_fine;
+extern const char * const mi_lttng_loglevel_str_jul_finer;
+extern const char * const mi_lttng_loglevel_str_jul_finest;
+extern const char * const mi_lttng_loglevel_str_jul_info;
+extern const char * const mi_lttng_loglevel_str_jul_off;
+extern const char * const mi_lttng_loglevel_str_jul_severe;
+extern const char * const mi_lttng_loglevel_str_jul_warning;
/* String related to loglevel Log4j */
-const char * const mi_lttng_loglevel_str_log4j_off;
-const char * const mi_lttng_loglevel_str_log4j_fatal;
-const char * const mi_lttng_loglevel_str_log4j_error;
-const char * const mi_lttng_loglevel_str_log4j_warn;
-const char * const mi_lttng_loglevel_str_log4j_info;
-const char * const mi_lttng_loglevel_str_log4j_debug;
-const char * const mi_lttng_loglevel_str_log4j_trace;
-const char * const mi_lttng_loglevel_str_log4j_all;
+extern const char * const mi_lttng_loglevel_str_log4j_off;
+extern const char * const mi_lttng_loglevel_str_log4j_fatal;
+extern const char * const mi_lttng_loglevel_str_log4j_error;
+extern const char * const mi_lttng_loglevel_str_log4j_warn;
+extern const char * const mi_lttng_loglevel_str_log4j_info;
+extern const char * const mi_lttng_loglevel_str_log4j_debug;
+extern const char * const mi_lttng_loglevel_str_log4j_trace;
+extern const char * const mi_lttng_loglevel_str_log4j_all;
/* String related to loglevel type */
-const char * const mi_lttng_loglevel_type_all;
-const char * const mi_lttng_loglevel_type_range;
-const char * const mi_lttng_loglevel_type_single;
-const char * const mi_lttng_loglevel_type_unknown;
+extern const char * const mi_lttng_loglevel_type_all;
+extern const char * const mi_lttng_loglevel_type_range;
+extern const char * const mi_lttng_loglevel_type_single;
+extern const char * const mi_lttng_loglevel_type_unknown;
/* Sting related to lttng_calibrate */
-const char * const mi_lttng_element_calibrate;
-const char * const mi_lttng_element_calibrate_function;
+extern const char * const mi_lttng_element_calibrate;
+extern const char * const mi_lttng_element_calibrate_function;
/* String related to a lttng_snapshot */
-const char * const mi_lttng_element_snapshot_ctrl_url;
-const char * const mi_lttng_element_snapshot_data_url;
-const char * const mi_lttng_element_snapshot_max_size;
-const char * const mi_lttng_element_snapshot_n_ptr;
-const char * const mi_lttng_element_snapshot_session_name;
-const char * const mi_lttng_element_snapshots;
+extern const char * const mi_lttng_element_snapshot_ctrl_url;
+extern const char * const mi_lttng_element_snapshot_data_url;
+extern const char * const mi_lttng_element_snapshot_max_size;
+extern const char * const mi_lttng_element_snapshot_n_ptr;
+extern const char * const mi_lttng_element_snapshot_session_name;
+extern const char * const mi_lttng_element_snapshots;
/* Utility string function */
const char *mi_lttng_loglevel_string(int value, enum lttng_domain_type domain);
--- a/src/common/config/config-session-abi.h
+++ b/src/common/config/config-session-abi.h
@@ -18,95 +18,95 @@
#ifndef CONFIG_SESSION_INTERNAL_H
#define CONFIG_SESSION_INTERNAL_H
-const char * const config_element_channel;
-const char * const config_element_channels;
-const char * const config_element_domain;
-const char * const config_element_domains;
-const char * const config_element_event;
-const char * const config_element_events;
-const char * const config_element_context;
-const char * const config_element_contexts;
-const char * const config_element_attributes;
-const char * const config_element_exclusion;
-const char * const config_element_exclusions;
-const char * const config_element_function_attributes;
-const char * const config_element_probe_attributes;
-const char * const config_element_symbol_name;
-const char * const config_element_address;
-const char * const config_element_offset;
-const char * const config_element_name;
-const char * const config_element_enabled;
-const char * const config_element_overwrite_mode;
-const char * const config_element_subbuf_size;
-const char * const config_element_num_subbuf;
-const char * const config_element_switch_timer_interval;
-const char * const config_element_read_timer_interval;
-const char * const config_element_output;
-const char * const config_element_output_type;
-const char * const config_element_tracefile_size;
-const char * const config_element_tracefile_count;
-const char * const config_element_live_timer_interval;
-const char * const config_element_type;
-const char * const config_element_buffer_type;
-const char * const config_element_session;
-const char * const config_element_sessions;
-const char * const config_element_perf;
-const char * const config_element_config;
-const char * const config_element_started;
-const char * const config_element_snapshot_mode;
-const char * const config_element_loglevel;
-const char * const config_element_loglevel_type;
-const char * const config_element_filter;
-const char * const config_element_snapshot_outputs;
-const char * const config_element_consumer_output;
-const char * const config_element_destination;
-const char * const config_element_path;
-const char * const config_element_net_output;
-const char * const config_element_control_uri;
-const char * const config_element_data_uri;
-const char * const config_element_max_size;
-
-const char * const config_domain_type_kernel;
-const char * const config_domain_type_ust;
-const char * const config_domain_type_jul;
-const char * const config_domain_type_log4j;
-
-const char * const config_buffer_type_per_pid;
-const char * const config_buffer_type_per_uid;
-const char * const config_buffer_type_global;
-
-const char * const config_overwrite_mode_discard;
-const char * const config_overwrite_mode_overwrite;
-
-const char * const config_output_type_splice;
-const char * const config_output_type_mmap;
-
-const char * const config_loglevel_type_all;
-const char * const config_loglevel_type_range;
-const char * const config_loglevel_type_single;
-
-const char * const config_event_type_all;
-const char * const config_event_type_tracepoint;
-const char * const config_event_type_probe;
-const char * const config_event_type_function;
-const char * const config_event_type_function_entry;
-const char * const config_event_type_noop;
-const char * const config_event_type_syscall;
-const char * const config_event_type_kprobe;
-const char * const config_event_type_kretprobe;
-
-const char * const config_event_context_pid;
-const char * const config_event_context_procname;
-const char * const config_event_context_prio;
-const char * const config_event_context_nice;
-const char * const config_event_context_vpid;
-const char * const config_event_context_tid;
-const char * const config_event_context_vtid;
-const char * const config_event_context_ppid;
-const char * const config_event_context_vppid;
-const char * const config_event_context_pthread_id;
-const char * const config_event_context_hostname;
-const char * const config_event_context_ip;
-const char * const config_event_context_perf_thread_counter;
+extern const char * const config_element_channel;
+extern const char * const config_element_channels;
+extern const char * const config_element_domain;
+extern const char * const config_element_domains;
+extern const char * const config_element_event;
+extern const char * const config_element_events;
+extern const char * const config_element_context;
+extern const char * const config_element_contexts;
+extern const char * const config_element_attributes;
+extern const char * const config_element_exclusion;
+extern const char * const config_element_exclusions;
+extern const char * const config_element_function_attributes;
+extern const char * const config_element_probe_attributes;
+extern const char * const config_element_symbol_name;
+extern const char * const config_element_address;
+extern const char * const config_element_offset;
+extern const char * const config_element_name;
+extern const char * const config_element_enabled;
+extern const char * const config_element_overwrite_mode;
+extern const char * const config_element_subbuf_size;
+extern const char * const config_element_num_subbuf;
+extern const char * const config_element_switch_timer_interval;
+extern const char * const config_element_read_timer_interval;
+extern const char * const config_element_output;
+extern const char * const config_element_output_type;
+extern const char * const config_element_tracefile_size;
+extern const char * const config_element_tracefile_count;
+extern const char * const config_element_live_timer_interval;
+extern const char * const config_element_type;
+extern const char * const config_element_buffer_type;
+extern const char * const config_element_session;
+extern const char * const config_element_sessions;
+extern const char * const config_element_perf;
+extern const char * const config_element_config;
+extern const char * const config_element_started;
+extern const char * const config_element_snapshot_mode;
+extern const char * const config_element_loglevel;
+extern const char * const config_element_loglevel_type;
+extern const char * const config_element_filter;
+extern const char * const config_element_snapshot_outputs;
+extern const char * const config_element_consumer_output;
+extern const char * const config_element_destination;
+extern const char * const config_element_path;
+extern const char * const config_element_net_output;
+extern const char * const config_element_control_uri;
+extern const char * const config_element_data_uri;
+extern const char * const config_element_max_size;
+
+extern const char * const config_domain_type_kernel;
+extern const char * const config_domain_type_ust;
+extern const char * const config_domain_type_jul;
+extern const char * const config_domain_type_log4j;
+
+extern const char * const config_buffer_type_per_pid;
+extern const char * const config_buffer_type_per_uid;
+extern const char * const config_buffer_type_global;
+
+extern const char * const config_overwrite_mode_discard;
+extern const char * const config_overwrite_mode_overwrite;
+
+extern const char * const config_output_type_splice;
+extern const char * const config_output_type_mmap;
+
+extern const char * const config_loglevel_type_all;
+extern const char * const config_loglevel_type_range;
+extern const char * const config_loglevel_type_single;
+
+extern const char * const config_event_type_all;
+extern const char * const config_event_type_tracepoint;
+extern const char * const config_event_type_probe;
+extern const char * const config_event_type_function;
+extern const char * const config_event_type_function_entry;
+extern const char * const config_event_type_noop;
+extern const char * const config_event_type_syscall;
+extern const char * const config_event_type_kprobe;
+extern const char * const config_event_type_kretprobe;
+
+extern const char * const config_event_context_pid;
+extern const char * const config_event_context_procname;
+extern const char * const config_event_context_prio;
+extern const char * const config_event_context_nice;
+extern const char * const config_event_context_vpid;
+extern const char * const config_event_context_tid;
+extern const char * const config_event_context_vtid;
+extern const char * const config_event_context_ppid;
+extern const char * const config_event_context_vppid;
+extern const char * const config_event_context_pthread_id;
+extern const char * const config_event_context_hostname;
+extern const char * const config_event_context_ip;
+extern const char * const config_event_context_perf_thread_counter;
#endif /* CONFIG_SESSION_INTERNAL_H */