Version 2.5.7
[lttng-ust.git] / liblttng-ust / lttng-ust-baddr.c
index df0ba457da85ce2baf0d9151f739de371588c7e5..922899b44e50406042d47480e713686350a3c703 100644 (file)
@@ -18,7 +18,6 @@
 
 #define _LGPL_SOURCE
 #define _GNU_SOURCE
-#include <dlfcn.h>
 #include <link.h>
 
 #include <sys/types.h>
@@ -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,21 +154,22 @@ 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)
@@ -194,3 +196,17 @@ int lttng_ust_baddr_statedump(void *owner)
        dump_exec_baddr(&data);
        return 0;
 }
+
+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();
+}
This page took 0.022867 seconds and 4 git commands to generate.