From 05b23d2ad8e64116078ce9221cb303a63e7e32b1 Mon Sep 17 00:00:00 2001 From: Sajid Date: Tue, 10 Sep 2024 02:42:20 +0600 Subject: [PATCH] Only chase after continious branches --- PowerAnalyse/function.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/PowerAnalyse/function.cpp b/PowerAnalyse/function.cpp index 7eb154e..7a2b638 100644 --- a/PowerAnalyse/function.cpp +++ b/PowerAnalyse/function.cpp @@ -124,9 +124,8 @@ Function Function::Analyze(const void* code, size_t size, size_t base) { blockStack.pop_back(); - // single block with a branch means it'd be a tail call - // we don't have to analyze the target in that case - if (op == PPC_OP_B && blocks.size() != 1) + // Keep analyzing if we have continuity + if (op == PPC_OP_B) { const auto branchBase = insn.operands[0] - base; const auto branchBlock = fn.SearchBlock(insn.operands[0]); @@ -138,12 +137,12 @@ Function Function::Analyze(const void* code, size_t size, size_t base) if (isContinious && curBlock.projectedSize != -1) { sizeProjection = curBlock.projectedSize - curBlock.size; - } - if (branchBlock == -1) - { - blocks.emplace_back(branchBase, 0, sizeProjection); - blockStack.emplace_back(blocks.size() - 1); + if (branchBlock == -1) + { + blocks.emplace_back(branchBase, 0, sizeProjection); + blockStack.emplace_back(blocks.size() - 1); + } } }