diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 5e164cbf..5e4e6db5 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -3464,11 +3464,12 @@ void Profiler::SendCodeLocation( uint64_t ptr ) #ifdef TRACY_HAS_CALLSTACK const auto sym = DecodeCodeAddress( ptr ); + const uint64_t offset = ptr - sym.symAddr; SendSingleString( sym.file ); QueueItem item; MemWrite( &item.hdr.type, QueueType::CodeInformation ); - MemWrite( &item.codeInformation.ptr, ptr ); + MemWrite( &item.codeInformation.ptrOffset, offset ); MemWrite( &item.codeInformation.line, sym.line ); MemWrite( &item.codeInformation.symAddr, sym.symAddr ); diff --git a/common/TracyProtocol.hpp b/common/TracyProtocol.hpp index 19f863e3..abc188b7 100644 --- a/common/TracyProtocol.hpp +++ b/common/TracyProtocol.hpp @@ -9,7 +9,7 @@ namespace tracy constexpr unsigned Lz4CompressBound( unsigned isize ) { return isize + ( isize / 255 ) + 16; } -enum : uint32_t { ProtocolVersion = 49 }; +enum : uint32_t { ProtocolVersion = 50 }; enum : uint16_t { BroadcastVersion = 2 }; using lz4sz_t = uint32_t; diff --git a/common/TracyQueue.hpp b/common/TracyQueue.hpp index 629292e8..e6c6e381 100644 --- a/common/TracyQueue.hpp +++ b/common/TracyQueue.hpp @@ -501,9 +501,9 @@ struct QueueSymbolInformation struct QueueCodeInformation { - uint64_t ptr; - uint32_t line; uint64_t symAddr; + uint32_t line; + uint64_t ptrOffset; }; struct QueueCrashReport diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 1cdaffc5..d48224ae 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -6344,22 +6344,23 @@ void Worker::ProcessCodeInformation( const QueueCodeInformation& ev ) m_pendingCodeInformation--; const auto idx = GetSingleStringIdx(); + const uint64_t ptr = ev.symAddr + ev.ptrOffset; if( ev.line != 0 ) { - assert( m_data.codeAddressToLocation.find( ev.ptr ) == m_data.codeAddressToLocation.end() ); + assert( m_data.codeAddressToLocation.find( ptr ) == m_data.codeAddressToLocation.end() ); const auto packed = PackFileLine( idx, ev.line ); - m_data.codeAddressToLocation.emplace( ev.ptr, packed ); + m_data.codeAddressToLocation.emplace( ptr, packed ); auto lit = m_data.locationCodeAddressList.find( packed ); if( lit == m_data.locationCodeAddressList.end() ) { - m_data.locationCodeAddressList.emplace( packed, Vector( ev.ptr ) ); + m_data.locationCodeAddressList.emplace( packed, Vector( ptr ) ); } else { - const bool needSort = lit->second.back() > ev.ptr; - lit->second.push_back( ev.ptr ); + const bool needSort = lit->second.back() > ptr; + lit->second.push_back( ptr ); if( needSort ) pdqsort_branchless( lit->second.begin(), lit->second.end() ); } @@ -6369,8 +6370,8 @@ void Worker::ProcessCodeInformation( const QueueCodeInformation& ev ) } if( ev.symAddr != 0 ) { - assert( m_data.codeSymbolMap.find( ev.ptr ) == m_data.codeSymbolMap.end() ); - m_data.codeSymbolMap.emplace( ev.ptr, ev.symAddr ); + assert( m_data.codeSymbolMap.find( ptr ) == m_data.codeSymbolMap.end() ); + m_data.codeSymbolMap.emplace( ptr, ev.symAddr ); } }