X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ust%2Flttng-ust-comm.c;h=428108646b765d00b9e5df272ec7e97de0bcc1ed;hb=22c30e27e59035f165bfa0540022eeca113fcd59;hp=347a2e09fa3d5b5b61cf74eaf2f7a8fc99265156;hpb=5287fad0d44dd62029a23d0b44fcd3c95574345a;p=lttng-ust.git diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c index 347a2e09..42810864 100644 --- a/liblttng-ust/lttng-ust-comm.c +++ b/liblttng-ust/lttng-ust-comm.c @@ -1,22 +1,8 @@ /* - * lttng-ust-comm.c + * SPDX-License-Identifier: LGPL-2.1-only * * Copyright (C) 2011 David Goulet * Copyright (C) 2011 Mathieu Desnoyers - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; only - * version 2.1 of the License. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #define _LGPL_SOURCE @@ -43,17 +29,17 @@ #include #include -#include #include #include #include #include #include +#include #include #include #include #include -#include +#include #include "tracepoint-internal.h" #include "lttng-tracer-core.h" #include "compat.h" @@ -64,6 +50,7 @@ #include "getenv.h" #include "ust-events-internal.h" #include "context-internal.h" +#include "ust-compat.h" /* Concatenate lttng ust shared library name with its major version number. */ #define LTTNG_UST_LIB_SO_NAME "liblttng-ust.so." __ust_stringify(CONFIG_LTTNG_UST_LIBRARY_VERSION_MAJOR) @@ -314,51 +301,51 @@ struct sock_info local_apps = { static int wait_poll_fallback; static const char *cmd_name_mapping[] = { - [ LTTNG_UST_RELEASE ] = "Release", - [ LTTNG_UST_SESSION ] = "Create Session", - [ LTTNG_UST_TRACER_VERSION ] = "Get Tracer Version", + [ LTTNG_UST_ABI_RELEASE ] = "Release", + [ LTTNG_UST_ABI_SESSION ] = "Create Session", + [ LTTNG_UST_ABI_TRACER_VERSION ] = "Get Tracer Version", - [ LTTNG_UST_TRACEPOINT_LIST ] = "Create Tracepoint List", - [ LTTNG_UST_WAIT_QUIESCENT ] = "Wait for Quiescent State", - [ LTTNG_UST_REGISTER_DONE ] = "Registration Done", - [ LTTNG_UST_TRACEPOINT_FIELD_LIST ] = "Create Tracepoint Field List", + [ LTTNG_UST_ABI_TRACEPOINT_LIST ] = "Create Tracepoint List", + [ LTTNG_UST_ABI_WAIT_QUIESCENT ] = "Wait for Quiescent State", + [ LTTNG_UST_ABI_REGISTER_DONE ] = "Registration Done", + [ LTTNG_UST_ABI_TRACEPOINT_FIELD_LIST ] = "Create Tracepoint Field List", - [ LTTNG_UST_EVENT_NOTIFIER_GROUP_CREATE ] = "Create event notifier group", + [ LTTNG_UST_ABI_EVENT_NOTIFIER_GROUP_CREATE ] = "Create event notifier group", /* Session FD commands */ - [ LTTNG_UST_CHANNEL ] = "Create Channel", - [ LTTNG_UST_SESSION_START ] = "Start Session", - [ LTTNG_UST_SESSION_STOP ] = "Stop Session", + [ LTTNG_UST_ABI_CHANNEL ] = "Create Channel", + [ LTTNG_UST_ABI_SESSION_START ] = "Start Session", + [ LTTNG_UST_ABI_SESSION_STOP ] = "Stop Session", /* Channel FD commands */ - [ LTTNG_UST_STREAM ] = "Create Stream", - [ LTTNG_UST_EVENT ] = "Create Event", + [ LTTNG_UST_ABI_STREAM ] = "Create Stream", + [ LTTNG_UST_ABI_EVENT ] = "Create Event", /* Event and Channel FD commands */ - [ LTTNG_UST_CONTEXT ] = "Create Context", - [ LTTNG_UST_FLUSH_BUFFER ] = "Flush Buffer", + [ LTTNG_UST_ABI_CONTEXT ] = "Create Context", + [ LTTNG_UST_ABI_FLUSH_BUFFER ] = "Flush Buffer", /* Event, Channel and Session commands */ - [ LTTNG_UST_ENABLE ] = "Enable", - [ LTTNG_UST_DISABLE ] = "Disable", + [ LTTNG_UST_ABI_ENABLE ] = "Enable", + [ LTTNG_UST_ABI_DISABLE ] = "Disable", /* Tracepoint list commands */ - [ LTTNG_UST_TRACEPOINT_LIST_GET ] = "List Next Tracepoint", - [ LTTNG_UST_TRACEPOINT_FIELD_LIST_GET ] = "List Next Tracepoint Field", + [ LTTNG_UST_ABI_TRACEPOINT_LIST_GET ] = "List Next Tracepoint", + [ LTTNG_UST_ABI_TRACEPOINT_FIELD_LIST_GET ] = "List Next Tracepoint Field", /* Event FD commands */ - [ LTTNG_UST_FILTER ] = "Create Filter", - [ LTTNG_UST_EXCLUSION ] = "Add exclusions to event", + [ LTTNG_UST_ABI_FILTER ] = "Create Filter", + [ LTTNG_UST_ABI_EXCLUSION ] = "Add exclusions to event", /* Event notifier group commands */ - [ LTTNG_UST_EVENT_NOTIFIER_CREATE ] = "Create event notifier", + [ LTTNG_UST_ABI_EVENT_NOTIFIER_CREATE ] = "Create event notifier", /* Session and event notifier group commands */ - [ LTTNG_UST_COUNTER ] = "Create Counter", + [ LTTNG_UST_ABI_COUNTER ] = "Create Counter", /* Counter commands */ - [ LTTNG_UST_COUNTER_GLOBAL ] = "Create Counter Global", - [ LTTNG_UST_COUNTER_CPU ] = "Create Counter CPU", + [ LTTNG_UST_ABI_COUNTER_GLOBAL ] = "Create Counter Global", + [ LTTNG_UST_ABI_COUNTER_CPU ] = "Create Counter CPU", }; static const char *str_timeout; @@ -374,13 +361,17 @@ extern void lttng_ring_buffer_client_overwrite_rt_exit(void); extern void lttng_ring_buffer_client_discard_exit(void); extern void lttng_ring_buffer_client_discard_rt_exit(void); extern void lttng_ring_buffer_metadata_client_exit(void); -LTTNG_HIDDEN + +__attribute__((visibility("hidden"))) extern void lttng_counter_client_percpu_32_modular_init(void); -LTTNG_HIDDEN + +__attribute__((visibility("hidden"))) extern void lttng_counter_client_percpu_32_modular_exit(void); -LTTNG_HIDDEN + +__attribute__((visibility("hidden"))) extern void lttng_counter_client_percpu_64_modular_init(void); -LTTNG_HIDDEN + +__attribute__((visibility("hidden"))) extern void lttng_counter_client_percpu_64_modular_exit(void); static char *get_map_shm(struct sock_info *sock_info); @@ -412,11 +403,11 @@ const char *get_lttng_home_dir(void) { const char *val; - val = (const char *) lttng_getenv("LTTNG_HOME"); + val = (const char *) lttng_ust_getenv("LTTNG_HOME"); if (val != NULL) { return val; } - return (const char *) lttng_getenv("HOME"); + return (const char *) lttng_ust_getenv("HOME"); } /* @@ -468,7 +459,6 @@ int lttng_get_notify_socket(void *owner) } -LTTNG_HIDDEN char* lttng_ust_sockinfo_get_procname(void *owner) { struct sock_info *info = owner; @@ -566,7 +556,7 @@ long get_timeout(void) long constructor_delay_ms = LTTNG_UST_DEFAULT_CONSTRUCTOR_TIMEOUT_MS; if (!got_timeout_env) { - str_timeout = lttng_getenv("LTTNG_UST_REGISTER_TIMEOUT"); + str_timeout = lttng_ust_getenv("LTTNG_UST_REGISTER_TIMEOUT"); got_timeout_env = 1; } if (str_timeout) @@ -633,7 +623,7 @@ static void get_allow_blocking(void) { const char *str_allow_blocking = - lttng_getenv("LTTNG_UST_ALLOW_BLOCKING"); + lttng_ust_getenv("LTTNG_UST_ALLOW_BLOCKING"); if (str_allow_blocking) { DBG("%s environment variable is set", @@ -764,9 +754,9 @@ static inline const char *bytecode_type_str(uint32_t cmd) { switch (cmd) { - case LTTNG_UST_CAPTURE: + case LTTNG_UST_ABI_CAPTURE: return "capture"; - case LTTNG_UST_FILTER: + case LTTNG_UST_ABI_FILTER: return "filter"; default: abort(); @@ -778,25 +768,25 @@ int handle_bytecode_recv(struct sock_info *sock_info, int sock, struct ustcomm_ust_msg *lum) { struct lttng_ust_bytecode_node *bytecode = NULL; - enum lttng_ust_bytecode_node_type type; - const struct lttng_ust_objd_ops *ops; + enum lttng_ust_bytecode_type type; + const struct lttng_ust_abi_objd_ops *ops; uint32_t data_size, data_size_max, reloc_offset; uint64_t seqnum; ssize_t len; int ret = 0; switch (lum->cmd) { - case LTTNG_UST_FILTER: - type = LTTNG_UST_BYTECODE_NODE_TYPE_FILTER; + case LTTNG_UST_ABI_FILTER: + type = LTTNG_UST_BYTECODE_TYPE_FILTER; data_size = lum->u.filter.data_size; - data_size_max = FILTER_BYTECODE_MAX_LEN; + data_size_max = LTTNG_UST_ABI_FILTER_BYTECODE_MAX_LEN; reloc_offset = lum->u.filter.reloc_offset; seqnum = lum->u.filter.seqnum; break; - case LTTNG_UST_CAPTURE: - type = LTTNG_UST_BYTECODE_NODE_TYPE_CAPTURE; + case LTTNG_UST_ABI_CAPTURE: + type = LTTNG_UST_BYTECODE_TYPE_CAPTURE; data_size = lum->u.capture.data_size; - data_size_max = CAPTURE_BYTECODE_MAX_LEN; + data_size_max = LTTNG_UST_ABI_CAPTURE_BYTECODE_MAX_LEN; reloc_offset = lum->u.capture.reloc_offset; seqnum = lum->u.capture.seqnum; break; @@ -859,7 +849,7 @@ int handle_bytecode_recv(struct sock_info *sock_info, } } - ops = objd_ops(lum->handle); + ops = lttng_ust_abi_objd_ops(lum->handle); if (!ops) { ret = -ENOENT; goto end; @@ -882,10 +872,10 @@ int handle_message(struct sock_info *sock_info, int sock, struct ustcomm_ust_msg *lum) { int ret = 0; - const struct lttng_ust_objd_ops *ops; + const struct lttng_ust_abi_objd_ops *ops; struct ustcomm_ust_reply lur; - union ust_args args; - char ctxstr[LTTNG_UST_SYM_NAME_LEN]; /* App context string. */ + union lttng_ust_abi_args args; + char ctxstr[LTTNG_UST_ABI_SYM_NAME_LEN]; /* App context string. */ ssize_t len; memset(&lur, 0, sizeof(lur)); @@ -895,32 +885,32 @@ int handle_message(struct sock_info *sock_info, goto error; } - ops = objd_ops(lum->handle); + ops = lttng_ust_abi_objd_ops(lum->handle); if (!ops) { ret = -ENOENT; goto error; } switch (lum->cmd) { - case LTTNG_UST_REGISTER_DONE: - if (lum->handle == LTTNG_UST_ROOT_HANDLE) + case LTTNG_UST_ABI_REGISTER_DONE: + if (lum->handle == LTTNG_UST_ABI_ROOT_HANDLE) ret = handle_register_done(sock_info); else ret = -EINVAL; break; - case LTTNG_UST_RELEASE: - if (lum->handle == LTTNG_UST_ROOT_HANDLE) + case LTTNG_UST_ABI_RELEASE: + if (lum->handle == LTTNG_UST_ABI_ROOT_HANDLE) ret = -EPERM; else - ret = lttng_ust_objd_unref(lum->handle, 1); + ret = lttng_ust_abi_objd_unref(lum->handle, 1); break; - case LTTNG_UST_CAPTURE: - case LTTNG_UST_FILTER: + case LTTNG_UST_ABI_CAPTURE: + case LTTNG_UST_ABI_FILTER: ret = handle_bytecode_recv(sock_info, sock, lum); if (ret) goto error; break; - case LTTNG_UST_EXCLUSION: + case LTTNG_UST_ABI_EXCLUSION: { /* Receive exclusion names */ struct lttng_ust_excluder_node *node; @@ -933,21 +923,21 @@ int handle_message(struct sock_info *sock_info, goto error; } node = zmalloc(sizeof(*node) + - count * LTTNG_UST_SYM_NAME_LEN); + count * LTTNG_UST_ABI_SYM_NAME_LEN); if (!node) { ret = -ENOMEM; goto error; } node->excluder.count = count; len = ustcomm_recv_unix_sock(sock, node->excluder.names, - count * LTTNG_UST_SYM_NAME_LEN); + count * LTTNG_UST_ABI_SYM_NAME_LEN); switch (len) { case 0: /* orderly shutdown */ ret = 0; free(node); goto error; default: - if (len == count * LTTNG_UST_SYM_NAME_LEN) { + if (len == count * LTTNG_UST_ABI_SYM_NAME_LEN) { DBG("Exclusion data received"); break; } else if (len < 0) { @@ -977,7 +967,7 @@ int handle_message(struct sock_info *sock_info, free(node); break; } - case LTTNG_UST_EVENT_NOTIFIER_GROUP_CREATE: + case LTTNG_UST_ABI_EVENT_NOTIFIER_GROUP_CREATE: { int event_notifier_notif_fd, close_ret; @@ -1025,7 +1015,7 @@ int handle_message(struct sock_info *sock_info, } break; } - case LTTNG_UST_CHANNEL: + case LTTNG_UST_ABI_CHANNEL: { void *chan_data; int wakeup_fd; @@ -1077,7 +1067,7 @@ int handle_message(struct sock_info *sock_info, free(args.channel.chan_data); break; } - case LTTNG_UST_STREAM: + case LTTNG_UST_ABI_STREAM: { int close_ret; @@ -1114,16 +1104,16 @@ int handle_message(struct sock_info *sock_info, } break; } - case LTTNG_UST_CONTEXT: + case LTTNG_UST_ABI_CONTEXT: switch (lum->u.context.ctx) { - case LTTNG_UST_CONTEXT_APP_CONTEXT: + case LTTNG_UST_ABI_CONTEXT_APP_CONTEXT: { char *p; size_t ctxlen, recvlen; ctxlen = strlen("$app.") + lum->u.context.u.app_ctx.provider_name_len - 1 + strlen(":") + lum->u.context.u.app_ctx.ctx_name_len; - if (ctxlen >= LTTNG_UST_SYM_NAME_LEN) { + if (ctxlen >= LTTNG_UST_ABI_SYM_NAME_LEN) { ERR("Application context string length size is too large: %zu bytes", ctxlen); ret = -EINVAL; @@ -1172,7 +1162,7 @@ int handle_message(struct sock_info *sock_info, ret = -ENOSYS; } break; - case LTTNG_UST_COUNTER: + case LTTNG_UST_ABI_COUNTER: { void *counter_data; @@ -1211,7 +1201,7 @@ int handle_message(struct sock_info *sock_info, free(args.counter.counter_data); break; } - case LTTNG_UST_COUNTER_GLOBAL: + case LTTNG_UST_ABI_COUNTER_GLOBAL: { /* Receive shm_fd */ ret = ustcomm_recv_counter_shm_from_sessiond(sock, @@ -1238,7 +1228,7 @@ int handle_message(struct sock_info *sock_info, } break; } - case LTTNG_UST_COUNTER_CPU: + case LTTNG_UST_ABI_COUNTER_CPU: { /* Receive shm_fd */ ret = ustcomm_recv_counter_shm_from_sessiond(sock, @@ -1265,10 +1255,10 @@ int handle_message(struct sock_info *sock_info, } break; } - case LTTNG_UST_EVENT_NOTIFIER_CREATE: + case LTTNG_UST_ABI_EVENT_NOTIFIER_CREATE: { /* Receive struct lttng_ust_event_notifier */ - struct lttng_ust_event_notifier event_notifier; + struct lttng_ust_abi_event_notifier event_notifier; if (sizeof(event_notifier) != lum->u.event_notifier.len) { DBG("incorrect event notifier data message size: %u", lum->u.event_notifier.len); @@ -1358,10 +1348,10 @@ int handle_message(struct sock_info *sock_info, } if (ret >= 0) { switch (lum->cmd) { - case LTTNG_UST_TRACER_VERSION: + case LTTNG_UST_ABI_TRACER_VERSION: lur.u.version = lum->u.version; break; - case LTTNG_UST_TRACEPOINT_LIST_GET: + case LTTNG_UST_ABI_TRACEPOINT_LIST_GET: memcpy(&lur.u.tracepoint, &lum->u.tracepoint, sizeof(lur.u.tracepoint)); break; } @@ -1394,7 +1384,7 @@ int handle_message(struct sock_info *sock_info, */ if (lur.ret_code == LTTNG_UST_OK) { switch (lum->cmd) { - case LTTNG_UST_TRACEPOINT_FIELD_LIST_GET: + case LTTNG_UST_ABI_TRACEPOINT_FIELD_LIST_GET: len = ustcomm_send_unix_sock(sock, &args.field_list.entry, sizeof(args.field_list.entry)); @@ -1421,7 +1411,7 @@ void cleanup_sock_info(struct sock_info *sock_info, int exiting) int ret; if (sock_info->root_handle != -1) { - ret = lttng_ust_objd_unref(sock_info->root_handle, 1); + ret = lttng_ust_abi_objd_unref(sock_info->root_handle, 1); if (ret) { ERR("Error unref root handle"); } @@ -1732,7 +1722,7 @@ void wait_for_sessiond(struct sock_info *sock_info) "Please upgrade your kernel " "(fix is commit 9ea71503a8ed9184d2d0b8ccc4d269d05f7940ae in Linux kernel " "mainline). LTTng-UST will use polling mode fallback."); - if (ust_debug()) + if (ust_err_debug_enabled()) PERROR("futex"); goto end_wait; } @@ -2049,7 +2039,7 @@ end: goto quit; } /* Cleanup socket handles before trying to reconnect */ - lttng_ust_objd_table_owner_cleanup(sock_info); + lttng_ust_abi_objd_table_owner_cleanup(sock_info); ust_unlock(); goto restart; /* try to reconnect */ @@ -2066,7 +2056,7 @@ quit: * Weak symbol to call when the ust malloc wrapper is not loaded. */ __attribute__((weak)) -void lttng_ust_malloc_wrapper_init(void) +void lttng_ust_libc_wrapper_malloc_init(void) { } @@ -2121,9 +2111,9 @@ void __attribute__((constructor)) lttng_ust_init(void) * sessiond (otherwise leading to errors when trying to create * sessiond before the init functions are completed). */ - init_usterr(); - lttng_ust_getenv_init(); /* Needs init_usterr() to be completed. */ - init_tracepoint(); + ust_err_init(); + lttng_ust_getenv_init(); /* Needs ust_err_init() to be completed. */ + lttng_ust_tp_init(); lttng_ust_init_fd_tracker(); lttng_ust_clock_init(); lttng_ust_getcpu_init(); @@ -2139,7 +2129,7 @@ void __attribute__((constructor)) lttng_ust_init(void) /* * Invoke ust malloc wrapper init before starting other threads. */ - lttng_ust_malloc_wrapper_init(); + lttng_ust_libc_wrapper_malloc_init(); timeout_mode = get_constructor_timeout(&constructor_timeout); @@ -2273,7 +2263,7 @@ void lttng_ust_cleanup(int exiting) * point. */ lttng_ust_abi_exit(); - lttng_ust_events_exit(); + lttng_ust_abi_events_exit(); lttng_perf_counter_exit(); lttng_ring_buffer_client_discard_rt_exit(); lttng_ring_buffer_client_discard_exit(); @@ -2283,7 +2273,7 @@ void lttng_ust_cleanup(int exiting) lttng_counter_client_percpu_32_modular_exit(); lttng_counter_client_percpu_64_modular_exit(); lttng_ust_statedump_destroy(); - exit_tracepoint(); + lttng_ust_tp_exit(); if (!exiting) { /* Reinitialize values for fork */ sem_count = sem_count_initial_value; @@ -2454,7 +2444,7 @@ void ust_after_fork_child(sigset_t *restore_sigset) return; lttng_context_vpid_reset(); lttng_context_vtid_reset(); - lttng_context_procname_reset(); + lttng_ust_context_procname_reset(); ust_context_ns_reset(); ust_context_vuids_reset(); ust_context_vgids_reset();