From 654dc2b901376c203a80bc7742a0d7add78a18f1 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Fri, 1 May 2020 20:09:21 +0200 Subject: [PATCH] Detect conditional jumps. --- server/TracySourceView.cpp | 15 ++++++++++++++- server/TracySourceView.hpp | 1 + 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/server/TracySourceView.cpp b/server/TracySourceView.cpp index 1bf5dd47..7263fcae 100644 --- a/server/TracySourceView.cpp +++ b/server/TracySourceView.cpp @@ -385,6 +385,17 @@ void SourceView::ParseSource( const char* fileName, const Worker* worker, const } } +static bool IsJumpConditionalX86( const char* op ) +{ + static constexpr const char* branchX86[] = { + "je", "jne", "jg", "jge", "ja", "jae", "jl", "jle", "jb", "jbe", "jo", "jno", "jz", "jnz", "js", "jns", "jcxz", "jecxz", "jrcxz", "loop", "loope", + "loopne", "loopnz", "loopz", "jnle", "jnl", "jnge", "jng", "jnbe", "jnb", "jnae", "jna", "jc", "jnc", "jp", "jpe", "jnp", "jpo", nullptr + }; + auto ptr = branchX86; + while( *ptr ) if( strcmp( *ptr++, op ) == 0 ) return true; + return false; +} + bool SourceView::Disassemble( uint64_t symAddr, const Worker& worker ) { m_asm.clear(); @@ -433,6 +444,7 @@ bool SourceView::Disassemble( uint64_t symAddr, const Worker& worker ) const auto& op = insn[i]; const auto& detail = *op.detail; bool hasJump = false; + bool jumpConditional = false; for( auto j=0; j params; union {