mirror of
https://github.com/wolfpld/tracy
synced 2025-04-30 20:53:52 +00:00
Retrieve symbol addresses on unix.
This commit is contained in:
parent
9231261d73
commit
890cec9872
@ -322,6 +322,7 @@ enum { MaxCbTrace = 16 };
|
|||||||
struct backtrace_state* cb_bts;
|
struct backtrace_state* cb_bts;
|
||||||
int cb_num;
|
int cb_num;
|
||||||
CallstackEntry cb_data[MaxCbTrace];
|
CallstackEntry cb_data[MaxCbTrace];
|
||||||
|
int cb_fixup;
|
||||||
|
|
||||||
void InitCallstack()
|
void InitCallstack()
|
||||||
{
|
{
|
||||||
@ -372,6 +373,8 @@ static int CallstackDataCb( void* /*data*/, uintptr_t pc, const char* fn, int li
|
|||||||
enum { DemangleBufLen = 64*1024 };
|
enum { DemangleBufLen = 64*1024 };
|
||||||
char demangled[DemangleBufLen];
|
char demangled[DemangleBufLen];
|
||||||
|
|
||||||
|
cb_data[cb_num].symAddr = (uint64_t)pc;
|
||||||
|
|
||||||
if( !fn && !function )
|
if( !fn && !function )
|
||||||
{
|
{
|
||||||
const char* symname = nullptr;
|
const char* symname = nullptr;
|
||||||
@ -479,12 +482,28 @@ static void CallstackErrorCb( void* /*data*/, const char* /*msg*/, int /*errnum*
|
|||||||
cb_num = 1;
|
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 )
|
CallstackEntryData DecodeCallstackPtr( uint64_t ptr )
|
||||||
{
|
{
|
||||||
cb_num = 0;
|
cb_num = 0;
|
||||||
backtrace_pcinfo( cb_bts, ptr, CallstackDataCb, CallstackErrorCb, nullptr );
|
backtrace_pcinfo( cb_bts, ptr, CallstackDataCb, CallstackErrorCb, nullptr );
|
||||||
assert( cb_num > 0 );
|
assert( cb_num > 0 );
|
||||||
|
|
||||||
|
for( int i=0; i<cb_num; i++ )
|
||||||
|
{
|
||||||
|
cb_fixup = i;
|
||||||
|
backtrace_syminfo( cb_bts, cb_data[i].symAddr, SymInfoCallback, SymInfoError, nullptr );
|
||||||
|
}
|
||||||
|
|
||||||
const char* symloc = nullptr;
|
const char* symloc = nullptr;
|
||||||
Dl_info dlinfo;
|
Dl_info dlinfo;
|
||||||
if( dladdr( (void*)ptr, &dlinfo ) ) symloc = dlinfo.dli_fname;
|
if( dladdr( (void*)ptr, &dlinfo ) ) symloc = dlinfo.dli_fname;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user