diff options
Diffstat (limited to 'test/xray')
-rw-r--r-- | test/xray/CMakeLists.txt | 48 | ||||
-rw-r--r-- | test/xray/TestCases/Linux/fixedsize-logging.cc | 20 | ||||
-rw-r--r-- | test/xray/TestCases/Linux/optional-inmemory-log.cc | 21 | ||||
-rw-r--r-- | test/xray/TestCases/Linux/patching-unpatching.cc | 48 | ||||
-rw-r--r-- | test/xray/Unit/lit.site.cfg.in | 12 | ||||
-rw-r--r-- | test/xray/lit.cfg | 39 | ||||
-rw-r--r-- | test/xray/lit.site.cfg.in | 13 |
7 files changed, 201 insertions, 0 deletions
diff --git a/test/xray/CMakeLists.txt b/test/xray/CMakeLists.txt new file mode 100644 index 0000000000000..50f6926bbe1e5 --- /dev/null +++ b/test/xray/CMakeLists.txt @@ -0,0 +1,48 @@ +set(XRAY_LIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) + +set(XRAY_TESTSUITES) +set(XRAY_FDR_TESTSUITES) + +set(XRAY_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS}) +set(XRAY_FDR_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS}) + +if(NOT COMPILER_RT_STANDALONE_BUILD AND COMPILER_RT_BUILD_XRAY AND + COMPILER_RT_HAS_XRAY) + list(APPEND XRAY_TEST_DEPS xray) + list(APPEND XRAY_FDR_TEST_DEPS xray-fdr) +endif() + +set(XRAY_TEST_ARCH ${XRAY_SUPPORTED_ARCH}) +if (COMPILER_RT_BUILD_XRAY AND COMPILER_RT_HAS_XRAY) + foreach(arch ${XRAY_TEST_ARCH}) + set(XRAY_TEST_TARGET_ARCH ${arch}) + string(TOLOWER "-${arch}-${OS_NAME}" XRAY_TEST_CONFIG_SUFFIX) + get_test_cc_for_arch(${arch} XRAY_TEST_TARGET_CC XRAY_TEST_TARGET_CFLAGS) + string(TOUPPER ${arch} ARCH_UPPER_CASE) + set(CONFIG_NAME ${ARCH_UPPER_CASE}${OS_NAME}Config) + + configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg) + list(APPEND XRAY_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}) + endforeach() + + # Add unit tests. + if(COMPILER_RT_INCLUDE_TESTS) + configure_lit_site_cfg( + ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg) + list(APPEND XRAY_TEST_DEPS XRayUnitTests) + list(APPEND XRAY_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/Unit) + endif() +endif() + +add_lit_testsuite(check-xray "Running the XRay tests" + ${XRAY_TESTSUITES} + DEPENDS ${XRAY_TEST_DEPS}) +set_target_properties(check-xray PROPERTIES FOLDER "Compiler-RT Misc") + +add_lit_testsuite(check-xray-fdr "Running the XRay flight data recorder tests" + ${XRAY_FDR_TESTSUITES} + DEPENDS ${XRAY_FDR_TEST_DEPS}) +set_target_properties(check-xray-fdr PROPERTIES FOLDER "Compiler-RT Misc") diff --git a/test/xray/TestCases/Linux/fixedsize-logging.cc b/test/xray/TestCases/Linux/fixedsize-logging.cc new file mode 100644 index 0000000000000..90e766876c546 --- /dev/null +++ b/test/xray/TestCases/Linux/fixedsize-logging.cc @@ -0,0 +1,20 @@ +// Check to make sure that we have a log file with a fixed-size. + +// RUN: %clangxx_xray -std=c++11 %s -o %t +// RUN: XRAY_OPTIONS="verbosity=1 xray_logfile_base=fixedsize-logging-" %run %t 2>&1 | FileCheck %s +// +// After all that, clean up the output xray log. +// +// RUN: rm fixedsize-logging-* + +#include <cstdio> + +[[clang::xray_always_instrument]] void foo() { + printf("foo() is always instrumented!"); +} + +int main() { + // CHECK: XRay: Log file in 'fixedsize-logging-{{.*}}' + foo(); + // CHECK: foo() is always instrumented! +} diff --git a/test/xray/TestCases/Linux/optional-inmemory-log.cc b/test/xray/TestCases/Linux/optional-inmemory-log.cc new file mode 100644 index 0000000000000..ef2c43f3be776 --- /dev/null +++ b/test/xray/TestCases/Linux/optional-inmemory-log.cc @@ -0,0 +1,21 @@ +// Make sure that we don't get the inmemory logging implementation enabled when +// we turn it off via options. + +// RUN: %clangxx_xray -std=c++11 %s -o %t +// RUN: XRAY_OPTIONS="verbosity=1 xray_naive_log=false xray_logfile_base=optional-inmemory-log.xray-" %run %t 2>&1 | FileCheck %s +// +// Make sure we clean out the logs in case there was a bug. +// +// RUN: rm -f optional-inmemory-log.xray-* + +#include <cstdio> + +[[clang::xray_always_instrument]] void foo() { + printf("foo() is always instrumented!"); +} + +int main() { + // CHECK-NOT: XRay: Log file in 'optional-inmemory-log.xray-{{.*}}' + foo(); + // CHECK: foo() is always instrumented! +} diff --git a/test/xray/TestCases/Linux/patching-unpatching.cc b/test/xray/TestCases/Linux/patching-unpatching.cc new file mode 100644 index 0000000000000..e684e427f068f --- /dev/null +++ b/test/xray/TestCases/Linux/patching-unpatching.cc @@ -0,0 +1,48 @@ +// Check that we can patch and un-patch on demand, and that logging gets invoked +// appropriately. +// +// RUN: %clangxx_xray -fxray-instrument -std=c++11 %s -o %t +// RUN: XRAY_OPTIONS="patch_premain=false" %run %t 2>&1 | FileCheck %s +// REQUIRES: stable-runtime + +#include "xray/xray_interface.h" + +#include <cstdio> + +bool called = false; + +void test_handler(int32_t fid, XRayEntryType type) { + printf("called: %d, type=%d\n", fid, static_cast<int32_t>(type)); + called = true; +} + +[[clang::xray_always_instrument]] void always_instrument() { + printf("always instrumented called\n"); +} + +int main() { + __xray_set_handler(test_handler); + always_instrument(); + // CHECK: always instrumented called + auto status = __xray_patch(); + printf("patching status: %d\n", static_cast<int32_t>(status)); + // CHECK-NEXT: patching status: 1 + always_instrument(); + // CHECK-NEXT: called: {{.*}}, type=0 + // CHECK-NEXT: always instrumented called + // CHECK-NEXT: called: {{.*}}, type=1 + status = __xray_unpatch(); + printf("patching status: %d\n", static_cast<int32_t>(status)); + // CHECK-NEXT: patching status: 1 + always_instrument(); + // CHECK-NEXT: always instrumented called + status = __xray_patch(); + printf("patching status: %d\n", static_cast<int32_t>(status)); + // CHECK-NEXT: patching status: 1 + __xray_remove_handler(); + always_instrument(); + // CHECK-NEXT: always instrumented called + status = __xray_unpatch(); + printf("patching status: %d\n", static_cast<int32_t>(status)); + // CHECK-NEXT: patching status: 1 +} diff --git a/test/xray/Unit/lit.site.cfg.in b/test/xray/Unit/lit.site.cfg.in new file mode 100644 index 0000000000000..1ebc7b9ec5f3f --- /dev/null +++ b/test/xray/Unit/lit.site.cfg.in @@ -0,0 +1,12 @@ +@LIT_SITE_CFG_IN_HEADER@ + +import os + +# Load common config for all compiler-rt unit tests. +lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/unittests/lit.common.unit.configured") + +# Setup config name. +config.name = 'XRay-Unit' + +config.test_exec_root = "@COMPILER_RT_BINARY_DIR@/lib/xray/tests" +config.test_source_root = config.test_exec_root diff --git a/test/xray/lit.cfg b/test/xray/lit.cfg new file mode 100644 index 0000000000000..5d030e101452f --- /dev/null +++ b/test/xray/lit.cfg @@ -0,0 +1,39 @@ +# -*- Python -*- + +import os + +# Setup config name. +config.name = 'XRay' + config.name_suffix + +# Setup source root. +config.test_source_root = os.path.dirname(__file__) + +# Setup default compiler flags use with -fxray-instrument option. +clang_xray_cflags = (['-fxray-instrument', config.target_cflags]) +clang_xray_cxxflags = config.cxx_mode_flags + clang_xray_cflags + + +def build_invocation(compile_flags): + return ' ' + ' '.join([config.clang] + compile_flags) + ' ' + +# Setup substitutions. +config.substitutions.append( + ('%clang ', build_invocation([config.target_cflags]))) +config.substitutions.append( + ('%clangxx ', + build_invocation(config.cxx_mode_flags + [config.target_cflags]))) +config.substitutions.append( + ('%clang_xray ', build_invocation(clang_xray_cflags))) +config.substitutions.append( + ('%clangxx_xray', build_invocation(clang_xray_cxxflags))) + +# Default test suffixes. +config.suffixes = ['.c', '.cc', '.cpp'] + +if config.host_os not in ['Linux'] or config.host_arch.find('64') == -1: + config.unsupported = True + +# Allow tests to use REQUIRES=stable-runtime. For use when you cannot use XFAIL +# e.g. because the test sometimes passes, sometimes fails. +if config.target_arch != 'aarch64': + config.available_features.add('stable-runtime') diff --git a/test/xray/lit.site.cfg.in b/test/xray/lit.site.cfg.in new file mode 100644 index 0000000000000..ee0ffcad4d9c8 --- /dev/null +++ b/test/xray/lit.site.cfg.in @@ -0,0 +1,13 @@ +@LIT_SITE_CFG_IN_HEADER@ + +# Tool-specific config options. +config.name_suffix = "@XRAY_TEST_CONFIG_SUFFIX@" +config.xray_lit_source_dir = "@XRAY_LIT_SOURCE_DIR@" +config.target_cflags = "@XRAY_TEST_TARGET_CFLAGS@" +config.target_arch = "@XRAY_TEST_TARGET_ARCH@" + +# Load common config for all compiler-rt lit tests +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") |