summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Snyder <ryan@vector35.com>2025-03-19 08:21:04 -0400
committerRyan Snyder <ryan@vector35.com>2025-07-03 03:14:45 -0400
commit3bfeb0e19d97c71022bb5c50c2a21e129f675e1b (patch)
tree8a07e07f58a061dae24c79e75a0ee8a8db57f0df
parenta79e605fe6d94c5b55bf686e39529d4e57d8b6c8 (diff)
arm/thumb: signal that returns can switch arch
-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;