summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/armv7/arch_armv7.cpp3
-rw-r--r--arch/armv7/thumb2_disasm/arch_thumb2.cpp1
2 files changed, 4 insertions, 0 deletions
diff --git a/arch/armv7/arch_armv7.cpp b/arch/armv7/arch_armv7.cpp
index f27a3fb9..a851b5ad 100644
--- a/arch/armv7/arch_armv7.cpp
+++ b/arch/armv7/arch_armv7.cpp
@@ -705,7 +705,10 @@ protected:
if (UNCONDITIONAL(instr.cond))
{
if (instr.operands[0].cls == REG && instr.operands[0].reg == REG_LR)
+ {
result.AddBranch(FunctionReturn);
+ result.archTransitionByTargetAddr = true;
+ }
else
{
result.AddBranch(UnresolvedBranch);
diff --git a/arch/armv7/thumb2_disasm/arch_thumb2.cpp b/arch/armv7/thumb2_disasm/arch_thumb2.cpp
index 873b9b27..6b876239 100644
--- a/arch/armv7/thumb2_disasm/arch_thumb2.cpp
+++ b/arch/armv7/thumb2_disasm/arch_thumb2.cpp
@@ -273,6 +273,7 @@ public:
((decomp.format->operands[0].type == OPERAND_FORMAT_REG) &&
(decomp.fields[decomp.format->operands[0].field0] == 14))) {
result.AddBranch(FunctionReturn);
+ result.archTransitionByTargetAddr = true;
} else {
result.AddBranch(UnresolvedBranch);
result.archTransitionByTargetAddr = true;