[compiler-rt] 2f856a3 - [msan] Blacklist __gxx_personality_v0.
Evgenii Stepanov via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 19 18:22:45 PST 2019
No problem. There was a change in cmake flags of a subproject, and cmake
does not treat it as a dependency for the products of the subproject (or
for anything at all, really). I don't know how to handle this properly. My
understanding is that cmake does not really support incremental builds
across changes to CMakeLists.txt.
On Tue, Nov 19, 2019 at 6:16 PM Joel E. Denny <jdenny.ornl at gmail.com> wrote:
> Thanks. That fixed it. Sorry, I should have thought to try that.
>
> Joel
>
> On Tue, Nov 19, 2019 at 5:24 PM Evgenii Stepanov <eugenis at google.com>
> wrote:
>
>> Please try a clean build.
>>
>> On Tue, Nov 19, 2019 at 2:04 PM Joel E. Denny <jdenny.ornl at gmail.com>
>> wrote:
>>
>>> Hi,
>>>
>>> This commit broke check-all for me:
>>>
>>> [5/13] Generating Msan-x86_64-Test
>>> FAILED: projects/compiler-rt/lib/msan/tests/Msan-x86_64-Test
>>> cd
>>> /home/jdenny/ornl/llvm/llvm-mono-git-build/projects/compiler-rt/lib/msan/tests
>>> && /home/jdenny/ornl/llvm/llvm-mono-git-build/./bin/clang
>>> MSAN_INST_TEST_OBJECTS.msan_test.cpp.x86_64.o
>>> MSAN_INST_TEST_OBJECTS.msan_test_main.cpp.x86_64.o
>>> MSAN_INST_GTEST.gtest-all.cc.x86_64.o
>>> /home/jdenny/ornl/llvm/llvm-mono-git-build/projects/compiler-rt/lib/msan/tests/../libcxx_msan_x86_64/lib//libc++.a
>>> /home/jdenny/ornl/llvm/llvm-mono-git-build/projects/compiler-rt/lib/msan/tests/../libcxx_msan_x86_64/lib//libc++abi.a
>>> -o
>>> /home/jdenny/ornl/llvm/llvm-mono-git-build/projects/compiler-rt/lib/msan/tests/./Msan-x86_64-Test
>>> -fuse-ld=lld -Wl,--color-diagnostics -Wl,-allow-shlib-undefined
>>> -fsanitize=memory -ldl -m64 -m64
>>> ld.lld: error: undefined symbol: __cxa_begin_catch
>>>
>>> I'm on an Ubuntu 18.04.3 system. Let me know if any other details are
>>> needed.
>>>
>>> Thanks.
>>>
>>> Joel
>>>
>>> On Thu, Oct 31, 2019 at 1:23 PM Evgenii Stepanov via llvm-commits <
>>> llvm-commits at lists.llvm.org> wrote:
>>>
>>>>
>>>> Author: Evgenii Stepanov
>>>> Date: 2019-10-31T10:22:52-07:00
>>>> New Revision: 2f856a36e0b270b184051d10a18d4b4238b4c033
>>>>
>>>> URL:
>>>> https://github.com/llvm/llvm-project/commit/2f856a36e0b270b184051d10a18d4b4238b4c033
>>>> DIFF:
>>>> https://github.com/llvm/llvm-project/commit/2f856a36e0b270b184051d10a18d4b4238b4c033.diff
>>>>
>>>> LOG: [msan] Blacklist __gxx_personality_v0.
>>>>
>>>> Summary:
>>>> Fixes https://bugs.llvm.org/show_bug.cgi?id=31877.
>>>> Fixes https://github.com/google/sanitizers/issues/1155.
>>>>
>>>> Enables exceptions in msan/tsan buid of libcxx, and in msan tests.
>>>>
>>>> -fdepfile-entry stuff is a workaround for
>>>> https://reviews.llvm.org/D69290 (default blacklist missing from -MMD
>>>> output).
>>>>
>>>> Reviewers: pcc, dvyukov
>>>>
>>>> Subscribers: mgorny, christof, #sanitizers, llvm-commits
>>>>
>>>> Tags: #sanitizers, #llvm
>>>>
>>>> Differential Revision: https://reviews.llvm.org/D69587
>>>>
>>>> Added:
>>>>
>>>>
>>>> Modified:
>>>> compiler-rt/cmake/Modules/AddCompilerRT.cmake
>>>> compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt
>>>> compiler-rt/lib/msan/CMakeLists.txt
>>>> compiler-rt/lib/msan/msan_blacklist.txt
>>>> compiler-rt/lib/msan/tests/CMakeLists.txt
>>>> compiler-rt/lib/msan/tests/msan_test.cpp
>>>>
>>>> Removed:
>>>>
>>>>
>>>>
>>>>
>>>> ################################################################################
>>>> diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
>>>> b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
>>>> index 7c9505e66cec..b87ab6a91d42 100644
>>>> --- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake
>>>> +++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake
>>>> @@ -623,6 +623,7 @@ macro(add_custom_libcxx name prefix)
>>>> USES_TERMINAL_BUILD 1
>>>> USES_TERMINAL_INSTALL 1
>>>> EXCLUDE_FROM_ALL TRUE
>>>> + BUILD_BYPRODUCTS "${prefix}/lib/libc++.a"
>>>> "${prefix}/lib/libc++abi.a"
>>>> )
>>>>
>>>> if (CMAKE_GENERATOR MATCHES "Make")
>>>>
>>>> diff --git a/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt
>>>> b/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt
>>>> index 3b1eb910ec86..e61c222587e6 100644
>>>> --- a/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt
>>>> +++ b/compiler-rt/cmake/Modules/CustomLibcxx/CMakeLists.txt
>>>> @@ -4,7 +4,7 @@ project(custom-libcxx C CXX)
>>>> # Build static libcxxabi.
>>>> set(LIBCXXABI_STANDALONE_BUILD 1)
>>>> set(LIBCXXABI_ENABLE_SHARED OFF CACHE BOOL "")
>>>> -set(LIBCXXABI_ENABLE_EXCEPTIONS OFF CACHE BOOL "")
>>>> +set(LIBCXXABI_ENABLE_EXCEPTIONS ON CACHE BOOL "")
>>>> set(LIBCXXABI_HERMETIC_STATIC_LIBRARY ON CACHE STRING "")
>>>> set(LIBCXXABI_LIBCXX_PATH ${COMPILER_RT_LIBCXX_PATH} CACHE PATH "")
>>>> set(LIBCXXABI_INCLUDE_TESTS OFF CACHE BOOL "")
>>>>
>>>> diff --git a/compiler-rt/lib/msan/CMakeLists.txt
>>>> b/compiler-rt/lib/msan/CMakeLists.txt
>>>> index 9e9bf6543932..86e96a01a118 100644
>>>> --- a/compiler-rt/lib/msan/CMakeLists.txt
>>>> +++ b/compiler-rt/lib/msan/CMakeLists.txt
>>>> @@ -81,6 +81,7 @@ foreach(arch ${MSAN_SUPPORTED_ARCH})
>>>> endforeach()
>>>>
>>>> add_compiler_rt_resource_file(msan_blacklist msan_blacklist.txt msan)
>>>> +list(APPEND MSAN_RUNTIME_LIBRARIES msan_blacklist)
>>>>
>>>> if(COMPILER_RT_INCLUDE_TESTS)
>>>> add_subdirectory(tests)
>>>>
>>>> diff --git a/compiler-rt/lib/msan/msan_blacklist.txt
>>>> b/compiler-rt/lib/msan/msan_blacklist.txt
>>>> index 44a5680d4d06..3efef5712185 100644
>>>> --- a/compiler-rt/lib/msan/msan_blacklist.txt
>>>> +++ b/compiler-rt/lib/msan/msan_blacklist.txt
>>>> @@ -5,3 +5,6 @@
>>>> # Example usage:
>>>> # fun:*bad_function_name*
>>>> # src:file_with_tricky_code.cc
>>>> +
>>>> +# https://bugs.llvm.org/show_bug.cgi?id=31877
>>>> +fun:__gxx_personality_*
>>>>
>>>> diff --git a/compiler-rt/lib/msan/tests/CMakeLists.txt
>>>> b/compiler-rt/lib/msan/tests/CMakeLists.txt
>>>> index 9949e81a2c12..541356fc68d8 100644
>>>> --- a/compiler-rt/lib/msan/tests/CMakeLists.txt
>>>> +++ b/compiler-rt/lib/msan/tests/CMakeLists.txt
>>>> @@ -8,7 +8,9 @@ include_directories(../..)
>>>> set(MSAN_LIBCXX_CFLAGS
>>>> -fsanitize=memory
>>>> -fsanitize-memory-track-origins
>>>> - -Wno-pedantic)
>>>> + -Wno-pedantic
>>>> + -Xclang
>>>> -fdepfile-entry=${COMPILER_RT_OUTPUT_DIR}/share/msan_blacklist.txt
>>>> + )
>>>>
>>>> # Unittest sources and build flags.
>>>> set(MSAN_UNITTEST_SOURCES
>>>> @@ -32,7 +34,6 @@ set(MSAN_UNITTEST_COMMON_CFLAGS
>>>> -I${COMPILER_RT_SOURCE_DIR}/lib/msan
>>>> -g
>>>> -O2
>>>> - -fno-exceptions
>>>> -fno-omit-frame-pointer
>>>> -mno-omit-leaf-frame-pointer
>>>> -Wno-deprecated-declarations
>>>> @@ -114,13 +115,14 @@ macro(add_msan_tests_for_arch arch kind cflags)
>>>>
>>>> set(MSAN_TEST_OBJECTS ${MSAN_INST_TEST_OBJECTS} ${MSAN_INST_GTEST})
>>>> set(MSAN_TEST_DEPS ${MSAN_TEST_OBJECTS} libcxx_msan_${arch}-build
>>>> - ${MSAN_LOADABLE_SO})
>>>> + ${MSAN_LOADABLE_SO}
>>>> + "${MSAN_LIBCXX_DIR}/libc++.a"
>>>> "${MSAN_LIBCXX_DIR}/libc++abi.a")
>>>> if(NOT COMPILER_RT_STANDALONE_BUILD)
>>>> list(APPEND MSAN_TEST_DEPS msan)
>>>> endif()
>>>> get_target_flags_for_arch(${arch} TARGET_LINK_FLAGS)
>>>> add_compiler_rt_test(MsanUnitTests "Msan-${arch}${kind}-Test" ${arch}
>>>> - OBJECTS ${MSAN_TEST_OBJECTS} "${MSAN_LIBCXX_DIR}/libc++.a"
>>>> + OBJECTS ${MSAN_TEST_OBJECTS} "${MSAN_LIBCXX_DIR}/libc++.a"
>>>> "${MSAN_LIBCXX_DIR}/libc++abi.a"
>>>> DEPS ${MSAN_TEST_DEPS}
>>>> LINK_FLAGS ${MSAN_UNITTEST_LINK_FLAGS}
>>>> ${TARGET_LINK_FLAGS})
>>>>
>>>> diff --git a/compiler-rt/lib/msan/tests/msan_test.cpp
>>>> b/compiler-rt/lib/msan/tests/msan_test.cpp
>>>> index c1cae3dad1fc..2d67b6ff645a 100644
>>>> --- a/compiler-rt/lib/msan/tests/msan_test.cpp
>>>> +++ b/compiler-rt/lib/msan/tests/msan_test.cpp
>>>> @@ -4798,3 +4798,32 @@ TEST(MemorySanitizer, Bmi) {
>>>> }
>>>> }
>>>> #endif // defined(__x86_64__)
>>>> +
>>>> +namespace {
>>>> +volatile long z;
>>>> +
>>>> +__attribute__((noinline,optnone)) void f(long a, long b, long c, long
>>>> d, long e, long f) {
>>>> + z = a + b + c + d + e + f;
>>>> +}
>>>> +
>>>> +__attribute__((noinline,optnone)) void throw_stuff() {
>>>> + throw 5;
>>>> +}
>>>> +
>>>> +TEST(MemorySanitizer, throw_catch) {
>>>> + long x;
>>>> + // Poison __msan_param_tls.
>>>> + __msan_poison(&x, sizeof(x));
>>>> + f(x, x, x, x, x, x);
>>>> + try {
>>>> + // This calls __gxx_personality_v0 through some libgcc_s function.
>>>> + // __gxx_personality_v0 is instrumented, libgcc_s is not; as a
>>>> result,
>>>> + // __msan_param_tls is not updated and __gxx_personality_v0 can
>>>> find
>>>> + // leftover poison from the previous call.
>>>> + // A suppression in msan_blacklist.txt makes it work.
>>>> + throw_stuff();
>>>> + } catch (const int &e) {
>>>> + // pass
>>>> + }
>>>> +}
>>>> +} // namespace
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at lists.llvm.org
>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191119/78714c65/attachment-0001.html>
More information about the llvm-commits
mailing list