[XRay][compiler-rt] Enable the XRay compiler-rt unit tests.
Summary: Before this change we seemed to not be running the unit tests, and therefore we set out to run them. In the process of making this happen we found a divergence between the implementation and the tests. This includes changes to both the CMake files as well as the implementation and headers of the XRay runtime. We've also updated documentation on the changed functions. Reviewers: kpw, eizan Subscribers: mgorny, llvm-commits Differential Revision: https://reviews.llvm.org/D37290 llvm-svn: 312202
This commit is contained in:
parent
5204717208
commit
1704f6289a
|
@ -11,22 +11,21 @@ set(XRAY_UNITTEST_CFLAGS
|
|||
-I${COMPILER_RT_SOURCE_DIR}/lib/xray
|
||||
-I${COMPILER_RT_SOURCE_DIR}/lib)
|
||||
|
||||
set(XRAY_TEST_ARCH ${XRAY_SUPPORTED_ARCH})
|
||||
macro(add_xray_unittest testname)
|
||||
set(XRAY_TEST_ARCH ${XRAY_SUPPORTED_ARCH})
|
||||
cmake_parse_arguments(TEST "" "" "SOURCES;HEADERS" ${ARGN})
|
||||
# FIXME: Figure out how to run even just the unit tests on APPLE.
|
||||
if(UNIX AND NOT APPLE)
|
||||
foreach(arch ${XRAY_TEST_ARCH})
|
||||
set(TEST_OBJECTS)
|
||||
generate_compiler_rt_tests(TEST_OBJECTS
|
||||
XRayUnitTests "${testname}-${arch}" "${arch}"
|
||||
XRayUnitTests "${testname}-${arch}-Test" "${arch}"
|
||||
SOURCES ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE}
|
||||
DEPS gtest_main xray
|
||||
DEPS gtest xray
|
||||
CFLAGS ${XRAY_UNITTEST_CFLAGS}
|
||||
LINK_FLAGS
|
||||
LINK_FLAGS -fxray-instrument
|
||||
${TARGET_LINK_FLAGS}
|
||||
-lstdc++ -lm ${CMAKE_THREAD_LIBS_INIT}
|
||||
-lpthread
|
||||
-L${COMPILER_RT_LIBRARY_OUTPUT_DIR} -lclang_rt.xray-${arch}
|
||||
-ldl -lrt)
|
||||
endforeach()
|
||||
endif()
|
||||
|
|
|
@ -68,9 +68,9 @@ TEST(BufferQueueTest, ErrorsWhenFinalising) {
|
|||
ASSERT_NE(nullptr, Buf.Buffer);
|
||||
ASSERT_EQ(Buffers.finalize(), BufferQueue::ErrorCode::Ok);
|
||||
BufferQueue::Buffer OtherBuf;
|
||||
ASSERT_EQ(BufferQueue::ErrorCode::AlreadyFinalized,
|
||||
ASSERT_EQ(BufferQueue::ErrorCode::QueueFinalizing,
|
||||
Buffers.getBuffer(OtherBuf));
|
||||
ASSERT_EQ(BufferQueue::ErrorCode::AlreadyFinalized,
|
||||
ASSERT_EQ(BufferQueue::ErrorCode::QueueFinalizing,
|
||||
Buffers.finalize());
|
||||
ASSERT_EQ(Buffers.releaseBuffer(Buf), BufferQueue::ErrorCode::Ok);
|
||||
}
|
||||
|
|
|
@ -57,7 +57,6 @@ TEST(FDRLoggingTest, Simple) {
|
|||
fdrLoggingHandleArg0(1, XRayEntryType::EXIT);
|
||||
ASSERT_EQ(fdrLoggingFinalize(), XRayLogInitStatus::XRAY_LOG_FINALIZED);
|
||||
ASSERT_EQ(fdrLoggingFlush(), XRayLogFlushStatus::XRAY_LOG_FLUSHED);
|
||||
ASSERT_EQ(fdrLoggingReset(), XRayLogInitStatus::XRAY_LOG_UNINITIALIZED);
|
||||
|
||||
// To do this properly, we have to close the file descriptor then re-open the
|
||||
// file for reading this time.
|
||||
|
@ -98,7 +97,6 @@ TEST(FDRLoggingTest, Multiple) {
|
|||
}
|
||||
ASSERT_EQ(fdrLoggingFinalize(), XRayLogInitStatus::XRAY_LOG_FINALIZED);
|
||||
ASSERT_EQ(fdrLoggingFlush(), XRayLogFlushStatus::XRAY_LOG_FLUSHED);
|
||||
ASSERT_EQ(fdrLoggingReset(), XRayLogInitStatus::XRAY_LOG_UNINITIALIZED);
|
||||
|
||||
// To do this properly, we have to close the file descriptor then re-open the
|
||||
// file for reading this time.
|
||||
|
|
|
@ -82,15 +82,18 @@ public:
|
|||
/// - BufferQueue is not finalising.
|
||||
///
|
||||
/// Returns:
|
||||
/// - std::errc::not_enough_memory on exceeding MaxSize.
|
||||
/// - no error when we find a Buffer.
|
||||
/// - std::errc::state_not_recoverable on finalising BufferQueue.
|
||||
/// - ErrorCode::NotEnoughMemory on exceeding MaxSize.
|
||||
/// - ErrorCode::Ok when we find a Buffer.
|
||||
/// - ErrorCode::QueueFinalizing or ErrorCode::AlreadyFinalized on
|
||||
/// a finalizing/finalized BufferQueue.
|
||||
ErrorCode getBuffer(Buffer &Buf);
|
||||
|
||||
/// Updates |Buf| to point to nullptr, with size 0.
|
||||
///
|
||||
/// Returns:
|
||||
/// - ...
|
||||
/// - ErrorCode::Ok when we successfully release the buffer.
|
||||
/// - ErrorCode::UnrecognizedBuffer for when this BufferQueue does not own
|
||||
/// the buffer being released.
|
||||
ErrorCode releaseBuffer(Buffer &Buf);
|
||||
|
||||
bool finalizing() const {
|
||||
|
@ -107,12 +110,12 @@ public:
|
|||
/// - All releaseBuffer operations will not fail.
|
||||
///
|
||||
/// After a call to finalize succeeds, all subsequent calls to finalize will
|
||||
/// fail with std::errc::state_not_recoverable.
|
||||
/// fail with ErrorCode::QueueFinalizing.
|
||||
ErrorCode finalize();
|
||||
|
||||
/// Applies the provided function F to each Buffer in the queue, only if the
|
||||
/// Buffer is marked 'used' (i.e. has been the result of getBuffer(...) and a
|
||||
/// releaseBuffer(...) operation.
|
||||
/// releaseBuffer(...) operation).
|
||||
template <class F> void apply(F Fn) {
|
||||
__sanitizer::BlockingMutexLock G(&Mutex);
|
||||
for (const auto &T : Buffers) {
|
||||
|
|
|
@ -13,4 +13,4 @@ config.test_source_root = config.test_exec_root
|
|||
|
||||
# Do not patch the XRay unit tests pre-main, and also make the error logging
|
||||
# verbose to get a more accurate error logging mechanism.
|
||||
config.environment['XRAY_OPTIONS'] = 'patch_premain=false verbose=1'
|
||||
config.environment['XRAY_OPTIONS'] = 'patch_premain=false'
|
||||
|
|
|
@ -17,4 +17,4 @@ if config.built_with_llvm:
|
|||
lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured")
|
||||
|
||||
# Load tool-specific config that would do the real work.
|
||||
lit_config.load_config(config, "@XRAY_LIT_SOURCE_DIR@/lit.cfg")
|
||||
lit_config.load_config(config, "@CMAKE_CURRENT_SOURCE_DIR@/lit.cfg")
|
||||
|
|
Loading…
Reference in New Issue