1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
From 42330adcefcd1830dad89e2a960c93d8dd1da125 Mon Sep 17 00:00:00 2001
From: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Date: Tue, 21 Feb 2017 16:00:27 -0500
Subject: [PATCH] Validate the presence of dlmopen at configure time
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
[Backport from upstream commit 42330adcefcd1830dad89e2a960c93d8dd1da125.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
configure.ac | 8 ++++++++
liblttng-ust-dl/lttng-ust-dl.c | 8 ++++++++
liblttng-ust-dl/ust_dl.h | 2 ++
3 files changed, 18 insertions(+)
diff --git a/configure.ac b/configure.ac
index 450b43b..023cfd4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -125,15 +125,23 @@ AS_IF([test "x${ax_cv_sys_weak_alias}" = "xno"], [
# Checks for libraries.
AC_CHECK_LIB([dl], [dlopen], [
have_libdl=yes
+ libdl_name=dl
], [
#libdl not found, check for dlopen in libc.
AC_CHECK_LIB([c], [dlopen], [
have_libc_dl=yes
+ libdl_name=c
], [
AC_MSG_ERROR([Cannot find dlopen in libdl nor libc. Use [LDFLAGS]=-Ldir to specify their location.])
])
])
+# Check if libdl has dlmopen support.
+AH_TEMPLATE([HAVE_DLMOPEN], ["Define to 1 if dlmopen is available."])
+AC_CHECK_LIB([$libdl_name], [dlmopen],
+ [AC_DEFINE([HAVE_DLMOPEN], [1])]
+)
+
AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBDL], [test "x$have_libdl" = "xyes"])
AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBC_DL], [test "x$have_libc_dl" = "xyes"])
diff --git a/liblttng-ust-dl/lttng-ust-dl.c b/liblttng-ust-dl/lttng-ust-dl.c
index b0737b6..ce2ae0e 100644
--- a/liblttng-ust-dl/lttng-ust-dl.c
+++ b/liblttng-ust-dl/lttng-ust-dl.c
@@ -38,8 +38,10 @@
#include "ust_dl.h"
static void *(*__lttng_ust_plibc_dlopen)(const char *filename, int flags);
+#ifdef HAVE_DLMOPEN
static void *(*__lttng_ust_plibc_dlmopen)(Lmid_t nsid, const char *filename,
int flags);
+#endif
static int (*__lttng_ust_plibc_dlclose)(void *handle);
static
@@ -55,6 +57,7 @@ void *_lttng_ust_dl_libc_dlopen(const char *filename, int flags)
return __lttng_ust_plibc_dlopen(filename, flags);
}
+#ifdef HAVE_DLMOPEN
static
void *_lttng_ust_dl_libc_dlmopen(Lmid_t nsid, const char *filename,
int flags)
@@ -68,6 +71,7 @@ void *_lttng_ust_dl_libc_dlmopen(Lmid_t nsid, const char *filename,
}
return __lttng_ust_plibc_dlmopen(nsid, filename, flags);
}
+#endif
static
int _lttng_ust_dl_libc_dlclose(void *handle)
@@ -143,6 +147,7 @@ end:
return;
}
+#ifdef HAVE_DLMOPEN
static
void lttng_ust_dl_dlmopen(void *so_base, Lmid_t nsid, const char *so_name,
int flags, void *ip)
@@ -203,6 +208,7 @@ end:
lttng_ust_elf_destroy(elf);
return;
}
+#endif
void *dlopen(const char *filename, int flags)
{
@@ -223,6 +229,7 @@ void *dlopen(const char *filename, int flags)
return handle;
}
+#ifdef HAVE_DLMOPEN
void *dlmopen(Lmid_t nsid, const char *filename, int flags)
{
void *handle;
@@ -243,6 +250,7 @@ void *dlmopen(Lmid_t nsid, const char *filename, int flags)
return handle;
}
+#endif
int dlclose(void *handle)
{
diff --git a/liblttng-ust-dl/ust_dl.h b/liblttng-ust-dl/ust_dl.h
index b8cfe82..afa8e84 100644
--- a/liblttng-ust-dl/ust_dl.h
+++ b/liblttng-ust-dl/ust_dl.h
@@ -51,6 +51,7 @@ TRACEPOINT_EVENT(lttng_ust_dl, dlopen,
)
)
+#ifdef HAVE_DLMOPEN
TRACEPOINT_EVENT(lttng_ust_dl, dlmopen,
TP_ARGS(void *, ip, void *, baddr, Lmid_t, nsid,
const char *, path, int, flags,
@@ -66,6 +67,7 @@ TRACEPOINT_EVENT(lttng_ust_dl, dlmopen,
ctf_integer(uint8_t, has_debug_link, has_debug_link)
)
)
+#endif
TRACEPOINT_EVENT(lttng_ust_dl, build_id,
TP_ARGS(
--
2.7.4
|