mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-19 02:56:49 +00:00
[XRay] Guard local variables with static
and struct with unnamed namespaces
Summary: This is for coding standard conformance, and for fixing an ODR violation issue: __xray::ThreadLocalData is defined twice and differently in xray_fdr_logging.cc and xray_basic_logging.cc Reviewers: dberris, mboerger, eizan Reviewed By: dberris Subscribers: delcypher, jfb, llvm-commits, #sanitizers Differential Revision: https://reviews.llvm.org/D52639 llvm-svn: 343289
This commit is contained in:
parent
4328ea3443
commit
58f209f5d7
@ -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 @@ struct alignas(64) ThreadLocalData {
|
||||
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;
|
||||
|
||||
|
@ -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 @@ struct alignas(64) ThreadLocalData {
|
||||
// FDRLogging, and that we're going to clean it up when the thread exits.
|
||||
BufferQueue *BQ = nullptr;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
static_assert(std::is_trivially_destructible<ThreadLocalData>::value,
|
||||
"ThreadLocalData must be trivially destructible");
|
||||
|
Loading…
x
Reference in New Issue
Block a user