From 6e6f19d8f7e1d9e12d29d2055e51ed1a6c87a43d Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 1 May 2022 15:19:57 +0200 Subject: [PATCH] Query debuginfod for source code. --- client/TracyProfiler.cpp | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index d986b947..179eb144 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -45,6 +45,10 @@ # include #endif +#ifdef TRACY_DEBUGINFOD +# include +#endif + #include #include #include @@ -3838,6 +3842,44 @@ void Profiler::HandleSourceCodeQuery() AckSourceCodeNotAvailable(); } } +#ifdef TRACY_DEBUGINFOD + else if( m_queryImage ) + { + size_t size; + auto buildid = GetBuildIdForImage( m_queryImage, size ); + if( buildid ) + { + auto d = debuginfod_find_source( GetDebuginfodClient(), buildid, size, m_queryData, nullptr ); + if( d >= 0 ) + { + struct stat st; + fstat( d, &st ); + lseek( d, 0, SEEK_SET ); + auto ptr = (char*)tracy_malloc_fast( st.st_size ); + auto rd = read( d, ptr, st.st_size ); + close( d ); + if( rd == (size_t)st.st_size ) + { + SendLongString( (uint64_t)ptr, ptr, rd, QueueType::SourceCode ); + } + else + { + AckSourceCodeNotAvailable(); + } + tracy_free_fast( ptr ); + } + else + { + AckSourceCodeNotAvailable(); + } + } + else + { + AckSourceCodeNotAvailable(); + } + tracy_free_fast( m_queryData ); + } +#endif else { tracy_free_fast( m_queryData );