| 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 |
| |