Skip to content

Commit

Permalink
Add exceptions to thread sanitizer tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
viferga committed Sep 20, 2022
1 parent 30ba306 commit 0bc40cd
Show file tree
Hide file tree
Showing 7 changed files with 160 additions and 20 deletions.
22 changes: 22 additions & 0 deletions source/ports/node_port/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,28 @@ set(node_port_test "${target}_test")
# Define test
#

if(OPTION_BUILD_THREAD_SANITIZER AND OPTION_BUILD_LOADERS_CS)
# TODO: This test fails when run with thread sanitizer:
#
# WARNING: ThreadSanitizer: signal-unsafe call inside of a signal (pid=13328)
# #0 free ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:706 (libtsan.so.2+0x47e82)
# #1 _IO_setb <null> (libc.so.6+0x818a4)
# #2 <null> <null> (libruby-2.7.so.2.7+0x237b64)
# #3 simple_netcore_create /usr/local/metacall/source/loaders/cs_loader/source/simple_netcore.cpp:42 (libcs_loaderd.so+0x108de)
# #4 cs_loader_impl_initialize /usr/local/metacall/source/loaders/cs_loader/source/cs_loader_impl.c:236 (libcs_loaderd.so+0xf5fe)
# #5 loader_impl_initialize /usr/local/metacall/source/loader/source/loader_impl.c:367 (libmetacalld.so+0x306a3)
# #6 loader_impl_load_from_file /usr/local/metacall/source/loader/source/loader_impl.c:822 (libmetacalld.so+0x308b8)
# #7 loader_load_from_file /usr/local/metacall/source/loader/source/loader.c:307 (libmetacalld.so+0x2e101)
# #8 metacall_load_from_file /usr/local/metacall/source/metacall/source/metacall.c:348 (libmetacalld.so+0x32bef)
# #9 node_loader_port_load_from_file_export(napi_env__*, napi_callback_info__*) /usr/local/metacall/source/loaders/node_loader/source/node_loader_port.cpp:395 (libnode_loaderd.so+0x113c5)
# #10 <null> <null> (libnode.so.72+0x7b6344)
#
# SUMMARY: ThreadSanitizer: signal-unsafe call inside of a signal (/lib/x86_64-linux-gnu/libc.so.6+0x818a4) in _IO_setb
#
# For solving this, we should enable C# support for sanitizers and debug it properly
return()
endif()

if(WIN32)
set(TEST_COMMAND cmd /c)
set(GREP_COMMAND findstr)
Expand Down
23 changes: 23 additions & 0 deletions source/tests/metacall_distributable_test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,29 @@ target_link_libraries(${target}
# Define test
#

if(OPTION_BUILD_THREAD_SANITIZER AND OPTION_BUILD_LOADERS_CS)
# TODO: This test fails when run with thread sanitizer (this happens when C# loader is enabled):
#
# WARNING: ThreadSanitizer: signal-unsafe call inside of a signal (pid=13717)
# #0 malloc ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:647 (libtsan.so.2+0x3ebb8)
# #1 <null> <null> (ld-linux-x86-64.so.2+0x28df)
# #2 <null> <null> (libruby-2.7.so.2.7+0x237879)
# #3 simple_netcore_create /usr/local/metacall/source/loaders/cs_loader/source/simple_netcore.cpp:42 (libcs_loaderd.so+0x108de)
# #4 cs_loader_impl_initialize /usr/local/metacall/source/loaders/cs_loader/source/cs_loader_impl.c:236 (libcs_loaderd.so+0xf5fe)
# #5 loader_impl_initialize /usr/local/metacall/source/loader/source/loader_impl.c:367 (libmetacalld.so+0x306a3)
# #6 loader_impl_load_from_file /usr/local/metacall/source/loader/source/loader_impl.c:822 (libmetacalld.so+0x308b8)
# #7 loader_load_from_file /usr/local/metacall/source/loader/source/loader.c:307 (libmetacalld.so+0x2e101)
# #8 metacall_load_from_file /usr/local/metacall/source/metacall/source/metacall.c:348 (libmetacalld.so+0x32bef)
# #9 metacall_distributable_test_DefaultConstructor_Test::TestBody() /usr/local/metacall/source/tests/metacall_distributable_test/source/metacall_distributable_test.cpp:262 (metacall-distributable-testd+0x23e3d)
# #10 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (metacall-distributable-testd+0x58686)
# #11 <null> <null> (libc.so.6+0x29209)
#
# SUMMARY: ThreadSanitizer: signal-unsafe call inside of a signal (/lib64/ld-linux-x86-64.so.2+0x28df)
#
# For solving this, we should enable C# support for sanitizers and debug it properly
return()
endif()

add_test(NAME ${target}
COMMAND $<TARGET_FILE:${target}>
)
Expand Down
23 changes: 23 additions & 0 deletions source/tests/metacall_inspect_test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,29 @@ target_link_libraries(${target}
# Define test
#

if(OPTION_BUILD_THREAD_SANITIZER AND OPTION_BUILD_LOADERS_CS)
# TODO: This test fails when run with thread sanitizer (this happens when C# loader is enabled):
#
# WARNING: ThreadSanitizer: signal-unsafe call inside of a signal (pid=13749)
# #0 malloc ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:647 (libtsan.so.2+0x3ebb8)
# #1 <null> <null> (ld-linux-x86-64.so.2+0x28df)
# #2 <null> <null> (libruby-2.7.so.2.7+0x237879)
# #3 simple_netcore_create /usr/local/metacall/source/loaders/cs_loader/source/simple_netcore.cpp:42 (libcs_loaderd.so+0x108de)
# #4 cs_loader_impl_initialize /usr/local/metacall/source/loaders/cs_loader/source/cs_loader_impl.c:236 (libcs_loaderd.so+0xf5fe)
# #5 loader_impl_initialize /usr/local/metacall/source/loader/source/loader_impl.c:367 (libmetacalld.so+0x306a3)
# #6 loader_impl_load_from_file /usr/local/metacall/source/loader/source/loader_impl.c:822 (libmetacalld.so+0x308b8)
# #7 loader_load_from_file /usr/local/metacall/source/loader/source/loader.c:307 (libmetacalld.so+0x2e101)
# #8 metacall_load_from_file /usr/local/metacall/source/metacall/source/metacall.c:348 (libmetacalld.so+0x32bef)
# #9 metacall_inspect_test_DefaultConstructor_Test::TestBody() /usr/local/metacall/source/tests/metacall_inspect_test/source/metacall_inspect_test.cpp:101 (metacall-inspect-testd+0x20eaa)
# #10 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (metacall-inspect-testd+0x54156)
# #11 <null> <null> (libc.so.6+0x29209)
#
# SUMMARY: ThreadSanitizer: signal-unsafe call inside of a signal (/lib64/ld-linux-x86-64.so.2+0x28df)
#
# For solving this, we should enable C# support for sanitizers and debug it properly
return()
endif()

add_test(NAME ${target}
COMMAND $<TARGET_FILE:${target}>
)
Expand Down
22 changes: 22 additions & 0 deletions source/tests/metacall_node_port_test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,28 @@ target_link_libraries(${target}
# Define test
#

if(OPTION_BUILD_THREAD_SANITIZER AND OPTION_BUILD_LOADERS_CS)
# TODO: This test fails when run with thread sanitizer (this happens when C# loader is enabled):
#
# WARNING: ThreadSanitizer: signal-unsafe call inside of a signal (pid=13603)
# #0 malloc ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:647 (libtsan.so.2+0x3ebb8)
# #1 <null> <null> (ld-linux-x86-64.so.2+0x28df)
# #2 <null> <null> (libruby-2.7.so.2.7+0x237879)
# #3 simple_netcore_create /usr/local/metacall/source/loaders/cs_loader/source/simple_netcore.cpp:42 (libcs_loaderd.so+0x108de)
# #4 cs_loader_impl_initialize /usr/local/metacall/source/loaders/cs_loader/source/cs_loader_impl.c:236 (libcs_loaderd.so+0xf5fe)
# #5 loader_impl_initialize /usr/local/metacall/source/loader/source/loader_impl.c:367 (libmetacalld.so+0x306a3)
# #6 loader_impl_load_from_file /usr/local/metacall/source/loader/source/loader_impl.c:822 (libmetacalld.so+0x308b8)
# #7 loader_load_from_file /usr/local/metacall/source/loader/source/loader.c:307 (libmetacalld.so+0x2e101)
# #8 metacall_load_from_file /usr/local/metacall/source/metacall/source/metacall.c:348 (libmetacalld.so+0x32bef)
# #9 node_loader_port_load_from_file_export(napi_env__*, napi_callback_info__*) /usr/local/metacall/source/loaders/node_loader/source/node_loader_port.cpp:395 (libnode_loaderd.so+0x113c5)
# #10 <null> <null> (libnode.so.72+0x7b6344)
#
# SUMMARY: ThreadSanitizer: signal-unsafe call inside of a signal (/lib64/ld-linux-x86-64.so.2+0x28df)
#
# For solving this, we should enable C# support for sanitizers and debug it properly
return()
endif()

add_test(NAME ${target}
COMMAND $<TARGET_FILE:${target}>
)
Expand Down
36 changes: 36 additions & 0 deletions source/tests/metacall_python_port_import_test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,42 @@ target_link_libraries(${target}
# Define test
#

if(OPTION_BUILD_THREAD_SANITIZER AND OPTION_BUILD_LOADERS_CS)
# TODO: This test fails when run with thread sanitizer (this happens when C# loader is enabled):
#
# WARNING: ThreadSanitizer: signal-unsafe call inside of a signal (pid=13823)
# #0 free ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:706 (libtsan.so.2+0x47e82)
# #1 <null> <null> (libdw.so.1+0x56c62)
# #2 backward::TraceResolverImpl<backward::system_tag::linux_tag>::~TraceResolverImpl() /usr/local/metacall/build/_deps/backwardcpp-src/backward.hpp:3479 (libbacktrace_plugind.so+0xf95c)
# #3 backward::TraceResolver::~TraceResolver() /usr/local/metacall/build/_deps/backwardcpp-src/backward.hpp:3694 (libbacktrace_plugind.so+0xf95c)
# #4 backward::Printer::~Printer() /usr/local/metacall/build/_deps/backwardcpp-src/backward.hpp:3986 (libbacktrace_plugind.so+0xf95c)
# #5 backward::SignalHandling::handleSignal(int, siginfo_t*, void*) /usr/local/metacall/build/_deps/backwardcpp-src/backward.hpp:4265 (libbacktrace_plugind.so+0xf95c)
# #6 backward::SignalHandling::sig_handler(int, siginfo_t*, void*) /usr/local/metacall/build/_deps/backwardcpp-src/backward.hpp:4276 (libbacktrace_plugind.so+0xfff0)
# #7 <null> <null> (libcoreclr.so+0x4afbdc)
# #8 backward::SignalHandling::sig_handler(int, siginfo_t*, void*) /usr/local/metacall/build/_deps/backwardcpp-src/backward.hpp:4279 (libbacktrace_plugind.so+0xffff)
# #9 <null> <null> (libcoreclr.so+0x4afbdc)
# #10 simple_netcore_create /usr/local/metacall/source/loaders/cs_loader/source/simple_netcore.cpp:42 (libcs_loaderd.so+0x108de)
# #11 cs_loader_impl_initialize /usr/local/metacall/source/loaders/cs_loader/source/cs_loader_impl.c:236 (libcs_loaderd.so+0xf5fe)
# #12 loader_impl_initialize /usr/local/metacall/source/loader/source/loader_impl.c:367 (libmetacalld.so+0x306a3)
# #13 loader_impl_load_from_file /usr/local/metacall/source/loader/source/loader_impl.c:822 (libmetacalld.so+0x308b8)
# #14 loader_load_from_file /usr/local/metacall/source/loader/source/loader.c:307 (libmetacalld.so+0x2e101)
# #15 metacall_load_from_file /usr/local/metacall/source/metacall/source/metacall.c:348 (libmetacalld.so+0x32bef)
# #16 py_loader_port_load_from_file_impl /usr/local/metacall/source/loaders/py_loader/source/py_loader_port.c:190 (libpy_loaderd.so+0x10a02)
# #17 py_loader_port_load_from_file_export /usr/local/metacall/source/loaders/py_loader/source/py_loader_port.c:244 (libpy_loaderd.so+0x10d34)
# #18 <null> <null> (libpython3.9.so.1.0+0x10cc73)
# #19 loader_impl_load_from_memory /usr/local/metacall/source/loader/source/loader_impl.c:968 (libmetacalld.so+0x30eba)
# #20 loader_load_from_memory /usr/local/metacall/source/loader/source/loader.c:327 (libmetacalld.so+0x2e201)
# #21 metacall_load_from_memory /usr/local/metacall/source/metacall/source/metacall.c:357 (libmetacalld.so+0x32c30)
# #22 metacall_python_port_import_test_DefaultConstructor_Test::TestBody() /usr/local/metacall/source/tests/metacall_python_port_import_test/source/metacall_python_port_import_test.cpp:48 (metacall-python-port-import-testd+0x20aa5)
# #23 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) <null> (metacall-python-port-import-testd+0x4e186)
# #24 <null> <null> (libc.so.6+0x29209)
#
# SUMMARY: ThreadSanitizer: signal-unsafe call inside of a signal (/usr/lib/x86_64-linux-gnu/libdw.so.1+0x56c62)
#
# For solving this, we should enable C# support for sanitizers and debug it properly
return()
endif()

add_test(NAME ${target}
COMMAND $<TARGET_FILE:${target}>
WORKING_DIRECTORY ${LOADER_SCRIPT_PATH}/ramda
Expand Down
42 changes: 23 additions & 19 deletions source/tests/metacall_test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,27 @@ target_link_libraries(${target}
# Define test
#

if(OPTION_BUILD_THREAD_SANITIZER AND OPTION_BUILD_LOADERS_CS)
# TODO: This test fails when run with thread sanitizer (this happens when C# loader is enabled):
#
# WARNING: ThreadSanitizer: data race (pid=13427)
# Write of size 8 at 0x7b5c00010680 by thread T8:
# #0 free ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:706 (libtsan.so.2+0x47e82)
# #1 <null> <null> (libcoreclr.so+0x36ba88)
#
# Previous write of size 8 at 0x7b5c00010680 by main thread:
# [failed to restore the stack]
#
# Thread T8 '.NET ThreadPool' (tid=13563, running) created by thread T7 at:
# #0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1001 (libtsan.so.2+0x5e686)
# #1 <null> <null> (libcoreclr.so+0x4e90ce)
#
# SUMMARY: ThreadSanitizer: data race (/usr/share/dotnet/shared/Microsoft.NETCore.App/5.0.17/libcoreclr.so+0x36ba88)
#
# For solving this, we should enable C# support for sanitizers and debug it properly
return()
endif()

add_test(NAME ${target}
COMMAND $<TARGET_FILE:${target}>
)
Expand Down Expand Up @@ -142,31 +163,14 @@ set_property(TEST ${target}
PROPERTY LABELS ${target} MEMCHECK_IGNORE
)

if((OPTION_BUILD_SANITIZER OR OPTION_BUILD_SANITIZER) AND OPTION_BUILD_LOADERS_CS)
# TODO: This test fails when run with sanitizers (this happens when C# loader is enabled):
if(OPTION_BUILD_SANITIZER AND OPTION_BUILD_LOADERS_CS)
# TODO: This test fails when run with sanitizer (this happens when C# loader is enabled):
#
# Sanitizer:
# Tracer caught signal 11: addr=0x600000690 pc=0x7f3a7b6710f0 sp=0x7f3a75e32d10
# LeakSanitizer has encountered a fatal error.
# HINT: For debugging, try setting environment variable LSAN_OPTIONS=verbosity=1:log_threads=1
# HINT: LeakSanitizer does not work under ptrace (strace, gdb, etc)
#
# Thread Sanitizer:
# WARNING: ThreadSanitizer: data race (pid=13427)
# Write of size 8 at 0x7b5c00010680 by thread T8:
# #0 free ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:706 (libtsan.so.2+0x47e82)
# #1 <null> <null> (libcoreclr.so+0x36ba88)
#
# Previous write of size 8 at 0x7b5c00010680 by main thread:
# [failed to restore the stack]
#
# Thread T8 '.NET ThreadPool' (tid=13563, running) created by thread T7 at:
# #0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1001 (libtsan.so.2+0x5e686)
# #1 <null> <null> (libcoreclr.so+0x4e90ce)
#
# SUMMARY: ThreadSanitizer: data race (/usr/share/dotnet/shared/Microsoft.NETCore.App/5.0.17/libcoreclr.so+0x36ba88)
#
#
# For solving this, we should enable C# support for sanitizers and debug it properly
set_tests_properties(${target} PROPERTIES
PASS_REGULAR_EXPRESSION "[ PASSED ]"
Expand Down
12 changes: 11 additions & 1 deletion source/tests/sanitizer/tsan.supp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@
called_from_lib:libcoreclr*
called_from_lib:libclrjit*
#
# Java
#
called_from_lib:libjvm*
#
# WASM (TODO: This must be reviewed, probably it's a false positive)
#
called_from_lib:libwasmtime*
#
# Rust
#
called_from_lib:libLLVM*
called_from_lib:libLLVM*
called_from_lib:librustc_driver-*
called_from_lib:libstd-*

0 comments on commit 0bc40cd

Please sign in to comment.