X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=tests%2Fregression%2Fabi0-conflict%2Ftest_abi0_conflict;h=9dccbe12cbe94390460d2057379ca6051a03c642;hb=14f8b52c90ad4a66e2908f454da6bb431f9f35f9;hp=e79e3772cb23841be3ed96dc898cab2532313b4e;hpb=d2a010d1e67e246e8ab4a847b8bbbdbce2b4e2d7;p=lttng-ust.git diff --git a/tests/regression/abi0-conflict/test_abi0_conflict b/tests/regression/abi0-conflict/test_abi0_conflict index e79e3772..9dccbe12 100755 --- a/tests/regression/abi0-conflict/test_abi0_conflict +++ b/tests/regression/abi0-conflict/test_abi0_conflict @@ -24,10 +24,30 @@ LIBUST1="${LIBUST1_PATH}/liblttng-ust.so.1" STD_OUTPUT="/dev/null" STD_ERROR="/dev/null" +NUM_TESTS=22 + +# Set this variable to disable tests that rely on a library using a symbol from +# the global offset table even if it provides its own copy, which is the +# default behavior on Linux. This happens when using the '-Bsymbolic-functions' +# linker flag. +UST_TESTS_LD_SYMBOLIC_FUNC=${UST_TESTS_LD_SYMBOLIC_FUNC:-} + +# On FreeBSD, symbol resolution when dlopening a shared object will always +# favor symbols local to this shared object and thus our canary function will +# never be called which breaks our abi conflict detection when abi1 is loaded +# first. +if [ "$UST_OS_TYPE" = "freebsd" ]; then + UST_TESTS_LD_SYMBOLIC_FUNC=1 +fi + +if [ "$UST_TESTS_LD_SYMBOLIC_FUNC" != "" ]; then + NUM_TESTS=$((NUM_TESTS - 4)) +fi + # Force abort on CRIT() to detect ABI conflicts export LTTNG_UST_ABORT_ON_CRITICAL=1 -plan_tests 22 +plan_tests $NUM_TESTS ### ## LD_PRELOAD tests @@ -35,7 +55,7 @@ plan_tests 22 diag "LD_PRELOAD" -## App NOT linked on liblttn-ust +## App NOT linked on liblttng-ust "${CURDIR}/app_noust" >"$STD_OUTPUT" 2>"$STD_ERROR" ok $? "LD_PRELOAD: no-ust app works" @@ -50,7 +70,7 @@ LD_PRELOAD="${LIBUST1}:${LIBFAKEUST0}" "${CURDIR}/app_noust" >"$STD_OUTPUT" 2>"$ isnt $? 0 "LD_PRELOAD: no-ust app with abi1 and abi0 preload fails" -## App linked on liblttn-ust.so.1 +## App linked on liblttng-ust.so.1 "${CURDIR}/app_ust" >"$STD_OUTPUT" 2>"$STD_ERROR" ok $? "LD_PRELOAD: ust app works" @@ -71,7 +91,7 @@ isnt $? 0 "LD_PRELOAD: ust app with abi1 and abi0 preload fails" diag "dlopen" -## App NOT linked on liblttn-ust +## App NOT linked on liblttng-ust LD_LIBRARY_PATH="$LIBFAKEUST0_PATH:$LIBUST1_PATH" "${CURDIR}/app_noust_dlopen" abi0 >"$STD_OUTPUT" 2>"$STD_ERROR" ok $? "dlopen: no-ust app works" @@ -82,22 +102,26 @@ ok $? "dlopen: no-ust app with abi1 and abi1 succeeds" LD_LIBRARY_PATH="$LIBFAKEUST0_PATH:$LIBUST1_PATH" "${CURDIR}/app_noust_dlopen" abi0_abi1 >"$STD_OUTPUT" 2>"$STD_ERROR" isnt $? 0 "dlopen: no-ust app with abi0 and abi1 fails" -LD_LIBRARY_PATH="$LIBFAKEUST0_PATH:$LIBUST1_PATH" "${CURDIR}/app_noust_dlopen" abi1_abi0 >"$STD_OUTPUT" 2>"$STD_ERROR" -isnt $? 0 "dlopen: no-ust app with abi1 and abi0 fails" +if [ "$UST_TESTS_LD_SYMBOLIC_FUNC" = "" ]; then + LD_LIBRARY_PATH="$LIBFAKEUST0_PATH:$LIBUST1_PATH" "${CURDIR}/app_noust_dlopen" abi1_abi0 >"$STD_OUTPUT" 2>"$STD_ERROR" + isnt $? 0 "dlopen: no-ust app with abi1 and abi0 fails" +fi -## App linked on liblttn-ust.so.1 +## App linked on liblttng-ust.so.1 LD_LIBRARY_PATH="$LIBFAKEUST0_PATH:$LIBUST1_PATH" "${CURDIR}/app_ust_dlopen" abi1 >"$STD_OUTPUT" 2>"$STD_ERROR" ok $? "dlopen: ust app works" -LD_LIBRARY_PATH="$LIBFAKEUST0_PATH:$LIBUST1_PATH" "${CURDIR}/app_ust_dlopen" abi0 >"$STD_OUTPUT" 2>"$STD_ERROR" -isnt $? 0 "dlopen: ust app with abi0 fails" +if [ "$UST_TESTS_LD_SYMBOLIC_FUNC" = "" ]; then + LD_LIBRARY_PATH="$LIBFAKEUST0_PATH:$LIBUST1_PATH" "${CURDIR}/app_ust_dlopen" abi0 >"$STD_OUTPUT" 2>"$STD_ERROR" + isnt $? 0 "dlopen: ust app with abi0 fails" -LD_LIBRARY_PATH="$LIBFAKEUST0_PATH:$LIBUST1_PATH" "${CURDIR}/app_ust_dlopen" abi0_abi1 >"$STD_OUTPUT" 2>"$STD_ERROR" -isnt $? 0 "dlopen: ust app with abi0 and abi1 fails" + LD_LIBRARY_PATH="$LIBFAKEUST0_PATH:$LIBUST1_PATH" "${CURDIR}/app_ust_dlopen" abi0_abi1 >"$STD_OUTPUT" 2>"$STD_ERROR" + isnt $? 0 "dlopen: ust app with abi0 and abi1 fails" -LD_LIBRARY_PATH="$LIBFAKEUST0_PATH:$LIBUST1_PATH" "${CURDIR}/app_ust_dlopen" abi1_abi0 >"$STD_OUTPUT" 2>"$STD_ERROR" -isnt $? 0 "dlopen: ust app with abi1 and abi0 fails" + LD_LIBRARY_PATH="$LIBFAKEUST0_PATH:$LIBUST1_PATH" "${CURDIR}/app_ust_dlopen" abi1_abi0 >"$STD_OUTPUT" 2>"$STD_ERROR" + isnt $? 0 "dlopen: ust app with abi1 and abi0 fails" +fi ### @@ -106,7 +130,7 @@ isnt $? 0 "dlopen: ust app with abi1 and abi0 fails" diag "Indirect linking" -## App NOT linked on liblttn-ust +## App NOT linked on liblttng-ust "${CURDIR}/app_noust_indirect_abi0" >"$STD_OUTPUT" 2>"$STD_ERROR" ok $? "indirect: no-ust app with abi0 succeeds" @@ -117,7 +141,7 @@ ok $? "indirect: no-ust app with abi1 succeeds" "${CURDIR}/app_noust_indirect_abi0_abi1" >"$STD_OUTPUT" 2>"$STD_ERROR" isnt $? 0 "indirect: no-ust app with abi0 and abi1 fails" -## App linked on liblttn-ust +## App linked on liblttng-ust "${CURDIR}/app_ust_indirect_abi0" >"$STD_OUTPUT" 2>"$STD_ERROR" isnt $? 0 "indirect: ust app with abi0 fails"