Index: compiler-rt/trunk/lib/xray/xray_basic_logging.cc =================================================================== --- compiler-rt/trunk/lib/xray/xray_basic_logging.cc +++ compiler-rt/trunk/lib/xray/xray_basic_logging.cc @@ -38,8 +38,9 @@ namespace __xray { -SpinMutex LogMutex; +static SpinMutex LogMutex; +namespace { // We use elements of this type to record the entry TSC of every function ID we // see as we're tracing a particular thread's execution. struct alignas(16) StackEntry { @@ -62,15 +63,16 @@ int Fd = -1; }; -static pthread_key_t PThreadKey; - -static atomic_uint8_t BasicInitialized{0}; - struct BasicLoggingOptions { int DurationFilterMicros = 0; size_t MaxStackDepth = 0; size_t ThreadBufferSize = 0; }; +} // namespace + +static pthread_key_t PThreadKey; + +static atomic_uint8_t BasicInitialized{0}; struct BasicLoggingOptions GlobalOptions; Index: compiler-rt/trunk/lib/xray/xray_fdr_logging.cc =================================================================== --- compiler-rt/trunk/lib/xray/xray_fdr_logging.cc +++ compiler-rt/trunk/lib/xray/xray_fdr_logging.cc @@ -42,8 +42,10 @@ namespace __xray { -atomic_sint32_t LoggingStatus = {XRayLogInitStatus::XRAY_LOG_UNINITIALIZED}; +static atomic_sint32_t LoggingStatus = { + XRayLogInitStatus::XRAY_LOG_UNINITIALIZED}; +namespace { // Group together thread-local-data in a struct, then hide it behind a function // call so that it can be initialized on first use instead of as a global. We // force the alignment to 64-bytes for x86 cache line alignment, as this @@ -72,6 +74,7 @@ // FDRLogging, and that we're going to clean it up when the thread exits. BufferQueue *BQ = nullptr; }; +} // namespace static_assert(std::is_trivially_destructible::value, "ThreadLocalData must be trivially destructible");