From 890cec98726460365e4d60e3e3644467b70b0f3e Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Wed, 26 Feb 2020 02:25:45 +0100 Subject: [PATCH] Retrieve symbol addresses on unix. --- client/TracyCallstack.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/client/TracyCallstack.cpp b/client/TracyCallstack.cpp index 87cc8137..49f24c96 100644 --- a/client/TracyCallstack.cpp +++ b/client/TracyCallstack.cpp @@ -322,6 +322,7 @@ enum { MaxCbTrace = 16 }; struct backtrace_state* cb_bts; int cb_num; CallstackEntry cb_data[MaxCbTrace]; +int cb_fixup; void InitCallstack() { @@ -372,6 +373,8 @@ static int CallstackDataCb( void* /*data*/, uintptr_t pc, const char* fn, int li enum { DemangleBufLen = 64*1024 }; char demangled[DemangleBufLen]; + cb_data[cb_num].symAddr = (uint64_t)pc; + if( !fn && !function ) { const char* symname = nullptr; @@ -479,12 +482,28 @@ static void CallstackErrorCb( void* /*data*/, const char* /*msg*/, int /*errnum* cb_num = 1; } +void SymInfoCallback( void* /*data*/, uintptr_t pc, const char* symname, uintptr_t symval, uintptr_t symsize ) +{ + cb_data[cb_fixup].symAddr = (uint64_t)symval; +} + +void SymInfoError( void* /*data*/, const char* /*msg*/, int /*errnum*/ ) +{ + cb_data[cb_fixup].symAddr = 0; +} + CallstackEntryData DecodeCallstackPtr( uint64_t ptr ) { cb_num = 0; backtrace_pcinfo( cb_bts, ptr, CallstackDataCb, CallstackErrorCb, nullptr ); assert( cb_num > 0 ); + for( int i=0; i