From 2a7542ccd8d8aae8a58ee54dfd414e2d401c28f6 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Mon, 17 Aug 2026 22:14:23 +0200 Subject: [PATCH] Mangle the GetToken accessor based on config. The macro fast paths only reference GetProfiler from -O0 code, direct calls, and ON_DEMAND builds: the single GetProfiler() call on the macro path sits behind the constexpr-dead callstack guard and is folded away at -O1+, so Release builds carried no config fingerprint and mismatched clients linked silently. GetToken is the hot-path binding of every queueing macro and is referenced at all optimization levels; mangle it the same way so mismatches fail at link time in Release builds too. --- public/client/TracyProfiler.cpp | 4 ++-- public/client/TracyProfiler.hpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/public/client/TracyProfiler.cpp b/public/client/TracyProfiler.cpp index 97b12a55..4a5d9c47 100644 --- a/public/client/TracyProfiler.cpp +++ b/public/client/TracyProfiler.cpp @@ -1380,7 +1380,7 @@ static ProfilerThreadData& GetProfilerThreadData() } #endif -TRACY_API moodycamel::ConcurrentQueue::ExplicitProducer* GetToken() { return GetProfilerThreadData().token.ptr; } +TRACY_API moodycamel::ConcurrentQueue::ExplicitProducer* MANGLED_NAME_BASED_ON_CONFIG(GetToken)() { return GetProfilerThreadData().token.ptr; } TRACY_API Profiler& MANGLED_NAME_BASED_ON_CONFIG(GetProfiler)() { return GetProfilerData().profiler; } TRACY_API moodycamel::ConcurrentQueue& GetQueue() { return GetProfilerData().queue; } TRACY_API int64_t GetInitTime() { return GetProfilerData().initTime; } @@ -1485,7 +1485,7 @@ thread_local LuaZoneState init_order(104) s_luaZoneState { 0, false }; static Profiler init_order(105) s_profiler; -TRACY_API moodycamel::ConcurrentQueue::ExplicitProducer* GetToken() { return s_token.ptr; } +TRACY_API moodycamel::ConcurrentQueue::ExplicitProducer* MANGLED_NAME_BASED_ON_CONFIG(GetToken)() { return s_token.ptr; } TRACY_API Profiler& MANGLED_NAME_BASED_ON_CONFIG(GetProfiler)() { return s_profiler; } TRACY_API moodycamel::ConcurrentQueue& GetQueue() { return s_queue; } TRACY_API int64_t GetInitTime() { return s_initTime.val; } diff --git a/public/client/TracyProfiler.hpp b/public/client/TracyProfiler.hpp index baa669f4..e06d57bc 100644 --- a/public/client/TracyProfiler.hpp +++ b/public/client/TracyProfiler.hpp @@ -91,7 +91,8 @@ struct GpuCtxWrapper GpuCtx* ptr; }; -TRACY_API moodycamel::ConcurrentQueue::ExplicitProducer* GetToken(); +TRACY_API moodycamel::ConcurrentQueue::ExplicitProducer* MANGLED_NAME_BASED_ON_CONFIG(GetToken)(); +tracy_force_inline moodycamel::ConcurrentQueue::ExplicitProducer* GetToken() { return MANGLED_NAME_BASED_ON_CONFIG(GetToken)(); } TRACY_API Profiler& MANGLED_NAME_BASED_ON_CONFIG(GetProfiler)(); tracy_force_inline Profiler& GetProfiler() { return MANGLED_NAME_BASED_ON_CONFIG(GetProfiler)(); } TRACY_API std::atomic& GetLockCounter();