|
@@ -0,0 +1,249 @@
|
|
|
|
+From bc1d8ca01415710d40224de312c7ecf6f4223301 Mon Sep 17 00:00:00 2001
|
|
|
|
+From: Philippe Proulx <eeppeliteloop@gmail.com>
|
|
|
|
+Date: Mon, 6 Nov 2017 18:46:41 -0500
|
|
|
|
+Subject: [PATCH] Fix: detect dlmopen() and disable corresponding tests if not
|
|
|
|
+ available
|
|
|
|
+MIME-Version: 1.0
|
|
|
|
+Content-Type: text/plain; charset=UTF-8
|
|
|
|
+Content-Transfer-Encoding: 8bit
|
|
|
|
+
|
|
|
|
+musl and uClibc-ng are known not to support dlmopen(). LTTng-UST has
|
|
|
|
+this dlmopen() detection.
|
|
|
|
+
|
|
|
|
+Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
|
|
|
|
+[Philippe: backport from upstream commit bc1d8ca0
|
|
|
|
+ edited to remove .gitignore part]
|
|
|
|
+Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
|
|
|
|
+---
|
|
|
|
+ .gitignore | 1 +
|
|
|
|
+ configure.ac | 25 ++++++++++++++++++++++
|
|
|
|
+ tests/regression/ust/ust-dl/prog.c | 17 +++++++++++++--
|
|
|
|
+ tests/regression/ust/ust-dl/test_ust-dl | 32 ----------------------------
|
|
|
|
+ tests/regression/ust/ust-dl/test_ust-dl.in | 34 ++++++++++++++++++++++++++++++
|
|
|
|
+ tests/regression/ust/ust-dl/test_ust-dl.py | 9 +++++++-
|
|
|
|
+ tests/utils/test_utils.py | 3 +++
|
|
|
|
+ 7 files changed, 86 insertions(+), 35 deletions(-)
|
|
|
|
+ delete mode 100755 tests/regression/ust/ust-dl/test_ust-dl
|
|
|
|
+ create mode 100644 tests/regression/ust/ust-dl/test_ust-dl.in
|
|
|
|
+
|
|
|
|
+diff --git a/configure.ac b/configure.ac
|
|
|
|
+index 016c56ec..b6ea39c5 100644
|
|
|
|
+--- a/configure.ac
|
|
|
|
++++ b/configure.ac
|
|
|
|
+@@ -196,6 +196,30 @@ AC_CHECK_FUNCS([ \
|
|
|
|
+ # add -lrt to LIBS
|
|
|
|
+ AC_CHECK_LIB([rt], [clock_gettime, timer_create, timer_settime, timer_delete])
|
|
|
|
+
|
|
|
|
++# Checks for dl.
|
|
|
|
++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])
|
|
|
|
++ HAVE_DLMOPEN=1
|
|
|
|
++], [
|
|
|
|
++ HAVE_DLMOPEN=0
|
|
|
|
++])
|
|
|
|
++AC_SUBST(HAVE_DLMOPEN)
|
|
|
|
++
|
|
|
|
+ # Babeltrace viewer check
|
|
|
|
+ AC_ARG_WITH([babeltrace-bin],
|
|
|
|
+ AS_HELP_STRING([--with-babeltrace-bin],
|
|
|
|
+@@ -1100,6 +1124,7 @@ AC_CONFIG_FILES([
|
|
|
|
+ AC_CONFIG_FILES([tests/regression/ust/python-logging/test_python_logging],[chmod +x tests/regression/ust/python-logging/test_python_logging])
|
|
|
|
+ # Inject LTTNG_TOOLS_BUILD_WITH_LIBPFM variable in test script.
|
|
|
|
+ AC_CONFIG_FILES([tests/perf/test_perf_raw],[chmod +x tests/perf/test_perf_raw])
|
|
|
|
++AC_CONFIG_FILES([tests/regression/ust/ust-dl/test_ust-dl],[chmod +x tests/regression/ust/ust-dl/test_ust-dl])
|
|
|
|
+
|
|
|
|
+ AC_OUTPUT
|
|
|
|
+
|
|
|
|
+diff --git a/tests/regression/ust/ust-dl/prog.c b/tests/regression/ust/ust-dl/prog.c
|
|
|
|
+index e8e4b264..669792d9 100644
|
|
|
|
+--- a/tests/regression/ust/ust-dl/prog.c
|
|
|
|
++++ b/tests/regression/ust/ust-dl/prog.c
|
|
|
|
+@@ -13,7 +13,12 @@
|
|
|
|
+ */
|
|
|
|
+ int main(int argc, char **argv)
|
|
|
|
+ {
|
|
|
|
+- void *h0, *h1, *h2, *h3, *h4;
|
|
|
|
++ void *h0, *h2, *h3, *h4;
|
|
|
|
++
|
|
|
|
++#ifdef HAVE_DLMOPEN
|
|
|
|
++ void *h1;
|
|
|
|
++#endif
|
|
|
|
++
|
|
|
|
+ char *error;
|
|
|
|
+ int (*foo)(void);
|
|
|
|
+
|
|
|
|
+@@ -21,10 +26,14 @@ int main(int argc, char **argv)
|
|
|
|
+ if (!h0) {
|
|
|
|
+ goto get_error;
|
|
|
|
+ }
|
|
|
|
++
|
|
|
|
++#ifdef HAVE_DLMOPEN
|
|
|
|
+ h1 = dlmopen(LM_ID_BASE, "libfoo.so", RTLD_LAZY);
|
|
|
|
+ if (!h1) {
|
|
|
|
+ goto get_error;
|
|
|
|
+ }
|
|
|
|
++#endif
|
|
|
|
++
|
|
|
|
+ h2 = dlopen("libzzz.so", RTLD_LAZY);
|
|
|
|
+ if (!h2) {
|
|
|
|
+ goto get_error;
|
|
|
|
+@@ -38,7 +47,7 @@ int main(int argc, char **argv)
|
|
|
|
+ goto get_error;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+- foo = dlsym(h1, "foo");
|
|
|
|
++ foo = dlsym(h3, "foo");
|
|
|
|
+ error = dlerror();
|
|
|
|
+ if (error != NULL) {
|
|
|
|
+ goto error;
|
|
|
|
+@@ -49,9 +58,13 @@ int main(int argc, char **argv)
|
|
|
|
+ if (dlclose(h0)) {
|
|
|
|
+ goto get_error;
|
|
|
|
+ }
|
|
|
|
++
|
|
|
|
++#ifdef HAVE_DLMOPEN
|
|
|
|
+ if (dlclose(h1)) {
|
|
|
|
+ goto get_error;
|
|
|
|
+ }
|
|
|
|
++#endif
|
|
|
|
++
|
|
|
|
+ if (dlclose(h2)) {
|
|
|
|
+ goto get_error;
|
|
|
|
+ }
|
|
|
|
+diff --git a/tests/regression/ust/ust-dl/test_ust-dl b/tests/regression/ust/ust-dl/test_ust-dl
|
|
|
|
+deleted file mode 100755
|
|
|
|
+index 1f2934db..00000000
|
|
|
|
+--- a/tests/regression/ust/ust-dl/test_ust-dl
|
|
|
|
++++ /dev/null
|
|
|
|
+@@ -1,32 +0,0 @@
|
|
|
|
+-#!/bin/bash
|
|
|
|
+-#
|
|
|
|
+-# Copyright (C) - 2013 Jérémie Galarneau <jeremie.galarneau@efficios.com>
|
|
|
|
+-#
|
|
|
|
+-# This program is free software; you can redistribute it and/or modify it
|
|
|
|
+-# under the terms of the GNU General Public License, version 2 only, as
|
|
|
|
+-# published by the Free Software Foundation.
|
|
|
|
+-#
|
|
|
|
+-# This program 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 General Public License for
|
|
|
|
+-# more details.
|
|
|
|
+-#
|
|
|
|
+-# You should have received a copy of the GNU General Public License along with
|
|
|
|
+-# this program; if not, write to the Free Software Foundation, Inc., 51
|
|
|
|
+-# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
+-
|
|
|
|
+-CURDIR=$(dirname $0)
|
|
|
|
+-TESTDIR=${CURDIR}/../../..
|
|
|
|
+-
|
|
|
|
+-source $TESTDIR/utils/utils.sh
|
|
|
|
+-
|
|
|
|
+-if [ ! -x "$CURDIR/.libs/libfoo.so" ]; then
|
|
|
|
+- diag "No shared object generated. Skipping all tests."
|
|
|
|
+- exit 0
|
|
|
|
+-fi
|
|
|
|
+-
|
|
|
|
+-start_lttng_sessiond_notap
|
|
|
|
+-
|
|
|
|
+-python3 ${CURDIR}/test_ust-dl.py
|
|
|
|
+-
|
|
|
|
+-stop_lttng_sessiond_notap
|
|
|
|
+diff --git a/tests/regression/ust/ust-dl/test_ust-dl.in b/tests/regression/ust/ust-dl/test_ust-dl.in
|
|
|
|
+new file mode 100644
|
|
|
|
+index 00000000..61d00d21
|
|
|
|
+--- /dev/null
|
|
|
|
++++ b/tests/regression/ust/ust-dl/test_ust-dl.in
|
|
|
|
+@@ -0,0 +1,34 @@
|
|
|
|
++#!/bin/bash
|
|
|
|
++#
|
|
|
|
++# Copyright (C) - 2013 Jérémie Galarneau <jeremie.galarneau@efficios.com>
|
|
|
|
++#
|
|
|
|
++# This program is free software; you can redistribute it and/or modify it
|
|
|
|
++# under the terms of the GNU General Public License, version 2 only, as
|
|
|
|
++# published by the Free Software Foundation.
|
|
|
|
++#
|
|
|
|
++# This program 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 General Public License for
|
|
|
|
++# more details.
|
|
|
|
++#
|
|
|
|
++# You should have received a copy of the GNU General Public License along with
|
|
|
|
++# this program; if not, write to the Free Software Foundation, Inc., 51
|
|
|
|
++# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
++
|
|
|
|
++CURDIR=$(dirname $0)
|
|
|
|
++TESTDIR=${CURDIR}/../../..
|
|
|
|
++
|
|
|
|
++source $TESTDIR/utils/utils.sh
|
|
|
|
++
|
|
|
|
++if [ ! -x "$CURDIR/.libs/libfoo.so" ]; then
|
|
|
|
++ diag "No shared object generated. Skipping all tests."
|
|
|
|
++ exit 0
|
|
|
|
++fi
|
|
|
|
++
|
|
|
|
++export LTTNG_TOOLS_HAVE_DLMOPEN=@HAVE_DLMOPEN@
|
|
|
|
++
|
|
|
|
++start_lttng_sessiond_notap
|
|
|
|
++
|
|
|
|
++python3 ${CURDIR}/test_ust-dl.py
|
|
|
|
++
|
|
|
|
++stop_lttng_sessiond_notap
|
|
|
|
+diff --git a/tests/regression/ust/ust-dl/test_ust-dl.py b/tests/regression/ust/ust-dl/test_ust-dl.py
|
|
|
|
+index 81972a7d..72459840 100644
|
|
|
|
+--- a/tests/regression/ust/ust-dl/test_ust-dl.py
|
|
|
|
++++ b/tests/regression/ust/ust-dl/test_ust-dl.py
|
|
|
|
+@@ -31,6 +31,9 @@ sys.path.append(test_utils_path)
|
|
|
|
+ from test_utils import *
|
|
|
|
+
|
|
|
|
+
|
|
|
|
++have_dlmopen = (os.environ.get('LTTNG_TOOLS_HAVE_DLMOPEN') == '1')
|
|
|
|
++
|
|
|
|
++
|
|
|
|
+ NR_TESTS = 14
|
|
|
|
+ current_test = 1
|
|
|
|
+ print("1..{0}".format(NR_TESTS))
|
|
|
|
+@@ -113,7 +116,11 @@ current_test += 1
|
|
|
|
+ print_test_result(dlopen_event_found > 0, current_test, "lttng_ust_dl:dlopen event found in resulting trace")
|
|
|
|
+ current_test += 1
|
|
|
|
+
|
|
|
|
+-print_test_result(dlmopen_event_found > 0, current_test, "lttng_ust_dl:dlmopen event found in resulting trace")
|
|
|
|
++if have_dlmopen:
|
|
|
|
++ print_test_result(dlmopen_event_found > 0, current_test, "lttng_ust_dl:dlmopen event found in resulting trace")
|
|
|
|
++else:
|
|
|
|
++ skip_test(current_test, 'dlmopen() is not available')
|
|
|
|
++
|
|
|
|
+ current_test += 1
|
|
|
|
+
|
|
|
|
+ print_test_result(build_id_event_found > 0, current_test, "lttng_ust_dl:build_id event found in resulting trace")
|
|
|
|
+diff --git a/tests/utils/test_utils.py b/tests/utils/test_utils.py
|
|
|
|
+index 4b38630c..02e632a2 100644
|
|
|
|
+--- a/tests/utils/test_utils.py
|
|
|
|
++++ b/tests/utils/test_utils.py
|
|
|
|
+@@ -62,6 +62,9 @@ def print_test_result(result, number, description):
|
|
|
|
+ result_string += " {0} - {1}".format(number, description)
|
|
|
|
+ print(result_string)
|
|
|
|
+
|
|
|
|
++def skip_test(number, description):
|
|
|
|
++ print('ok {} # skip {}'.format(number, description))
|
|
|
|
++
|
|
|
|
+ def enable_ust_tracepoint_event(session_info, event_name):
|
|
|
|
+ event = Event()
|
|
|
|
+ event.name = event_name
|
|
|
|
+--
|
|
|
|
+2.15.0
|
|
|
|
+
|