From d75503047cff19064db939a08db77d746d8c2b32 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Tue, 6 Oct 2020 18:27:14 +0200 Subject: [PATCH] Test whole call stack for non-canonical pointers. --- client/TracySysTrace.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/client/TracySysTrace.cpp b/client/TracySysTrace.cpp index 1f42ae6e..4a0df999 100644 --- a/client/TracySysTrace.cpp +++ b/client/TracySysTrace.cpp @@ -727,11 +727,22 @@ static void SetupSampling( int64_t& samplingPeriod ) auto trace = (uint64_t*)tracy_malloc( ( 1 + cnt ) * sizeof( uint64_t ) ); s_ring[i].Read( trace+1, offset, sizeof( uint64_t ) * cnt ); - // remove non-canonical pointer at the end - const auto test = (int64_t)trace[cnt]; - const auto m1 = test >> 63; - const auto m2 = test >> 47; - if( m1 != m2 ) cnt--; + // remove non-canonical pointers + do + { + const auto test = (int64_t)trace[cnt]; + const auto m1 = test >> 63; + const auto m2 = test >> 47; + if( m1 == m2 ) break; + } + while( --cnt > 0 ); + for( uint64_t j=1; j> 63; + const auto m2 = test >> 47; + if( m1 != m2 ) trace[j] = 0; + } // skip kernel frames uint64_t j;