1
0
mirror of https://github.com/wolfpld/tracy synced 2025-04-29 04:23:51 +00:00

Pass full module path to LoadLibraryEx().

This commit is contained in:
Bartosz Taudul 2021-11-25 23:27:20 +01:00
parent a27d1902ae
commit d41447b0c9
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3
3 changed files with 14 additions and 9 deletions

View File

@ -244,7 +244,16 @@ const char* DecodeCallstackPtrFast( uint64_t ptr )
return ret;
}
const char* GetModuleName( uint64_t addr )
const char* GetKernelModulePath( uint64_t addr )
{
assert( addr >> 63 != 0 );
if( !s_krnlCache ) return nullptr;
auto it = std::lower_bound( s_krnlCache, s_krnlCache + s_krnlCacheCnt, addr, []( const KernelDriver& lhs, const uint64_t& rhs ) { return lhs.addr > rhs; } );
if( it == s_krnlCache + s_krnlCacheCnt ) return nullptr;
return it->path;
}
static const char* GetModuleName( uint64_t addr )
{
if( ( addr >> 63 ) != 0 )
{

View File

@ -51,7 +51,7 @@ CallstackSymbolData DecodeCodeAddress( uint64_t ptr );
const char* DecodeCallstackPtrFast( uint64_t ptr );
CallstackEntryData DecodeCallstackPtr( uint64_t ptr );
void InitCallstack();
const char* GetModuleName( uint64_t addr );
const char* GetKernelModulePath( uint64_t addr );
#if TRACY_HAS_CALLSTACK == 1

View File

@ -3201,17 +3201,13 @@ void Profiler::HandleSymbolQueueItem( const SymbolQueueItem& si )
case SymbolQueueItemType::KernelCode:
{
#ifdef _WIN32
auto mod = GetModuleName( si.ptr );
if( strcmp( mod, "<kernel>" ) != 0 )
auto mod = GetKernelModulePath( si.ptr );
if( mod )
{
auto fn = DecodeCallstackPtrFast( si.ptr );
if( *fn )
{
char tmp[8192];
auto modlen = strlen( mod );
memcpy( tmp, mod+1, modlen-2 );
tmp[modlen-2] = '\0';
auto hnd = LoadLibraryExA( tmp, nullptr, DONT_RESOLVE_DLL_REFERENCES );
auto hnd = LoadLibraryExA( mod, nullptr, DONT_RESOLVE_DLL_REFERENCES );
if( hnd )
{
auto ptr = GetProcAddress( hnd, fn );