X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=liblttng-ust%2Flttng-ust-baddr.c;h=dec7e82d6e9c84afb065a1d33ec9ea0f53760c5c;hb=3e4e9902d1564c56a1193b133c6dffded0dc29db;hp=b7843e24886c11bb99531470b97c11a5ae66158c;hpb=bd703713989223b66362ed670e2b3b0097118f46;p=lttng-ust.git diff --git a/liblttng-ust/lttng-ust-baddr.c b/liblttng-ust/lttng-ust-baddr.c index b7843e24..dec7e82d 100644 --- a/liblttng-ust/lttng-ust-baddr.c +++ b/liblttng-ust/lttng-ust-baddr.c @@ -18,7 +18,6 @@ #define _LGPL_SOURCE #define _GNU_SOURCE -#include #include #include @@ -36,6 +35,8 @@ #include "lttng-ust-baddr.h" #define TRACEPOINT_DEFINE +#define TRACEPOINT_CREATE_PROBES +#define TP_SESSION_CHECK #include "ust_baddr_statedump.h" struct extract_data { @@ -153,28 +154,29 @@ static void dump_exec_baddr(struct extract_data *data) { void *owner = data->owner; - Dl_info dl_info = { 0 }; void *base_addr_ptr; - char resolved_path[PATH_MAX]; + char exe_path[PATH_MAX]; + ssize_t exe_len; base_addr_ptr = data->exec_baddr; if (!base_addr_ptr) return; /* - * We have to use Dl_info to determine the executable full path. + * We have to use /proc/self/exe to determine the executable full + * path. */ - if (!dladdr(base_addr_ptr, &dl_info)) + exe_len = readlink("/proc/self/exe", exe_path, sizeof(exe_path) - 1); + if (exe_len <= 0) return; - if (!realpath(dl_info.dli_fname, resolved_path)) - return; - trace_baddr(base_addr_ptr, resolved_path, 0, owner); + exe_path[exe_len] = '\0'; + trace_baddr(base_addr_ptr, exe_path, 0, owner); } int lttng_ust_baddr_statedump(void *owner) { struct extract_data data; - if (getenv("LTTNG_UST_WITHOUT_BADDR_STATEDUMP")) + if (!getenv("LTTNG_UST_WITH_EXPERIMENTAL_BADDR_STATEDUMP")) return 0; data.owner = owner; @@ -199,10 +201,12 @@ void lttng_ust_baddr_statedump_init(void) { __tracepoints__init(); __tracepoints__ptrs_init(); + __lttng_events_init__ust_baddr_statedump(); } void lttng_ust_baddr_statedump_destroy(void) { + __lttng_events_exit__ust_baddr_statedump(); __tracepoints__ptrs_destroy(); __tracepoints__destroy(); }