diff --git a/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java b/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java
index 301d84edbb..d27f62df13 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java
@@ -484,6 +484,9 @@ public class SymbolicPropogator {
throws CancelledException {
visitedBody = new AddressSet();
AddressSet conflicts = new AddressSet();
+
+ // Locations that were jump and are now call targets and might be on saved future flows
+ HashSet
doNotFlowTo = new HashSet<>();
// prime the context stack with the entry point address
Stack contextStack = new Stack<>();
@@ -536,6 +539,11 @@ public class SymbolicPropogator {
}
}
}
+
+ // don't follow flow if on list of jump targets that were turned into calls
+ if (doNotFlowTo.contains(nextAddr)) {
+ continue;
+ }
HashSet visitSet = visitedMap.get(nextAddr);
if (visitSet != null) {
@@ -636,6 +644,9 @@ public class SymbolicPropogator {
Address targets[] = getInstructionFlows(instr);
for (Address target : targets) {
handleFunctionSideEffects(instr, target, monitor);
+ // a jump target has already been pushed as a future flow trace
+ // need to make sure values aren't propagated into the call targets
+ doNotFlowTo.add(target);
}
}
diff --git a/Ghidra/Processors/MIPS/data/languages/mipsmicro.sinc b/Ghidra/Processors/MIPS/data/languages/mipsmicro.sinc
index f9fc0d9947..5ccf2c3447 100644
--- a/Ghidra/Processors/MIPS/data/languages/mipsmicro.sinc
+++ b/Ghidra/Processors/MIPS/data/languages/mipsmicro.sinc
@@ -1313,7 +1313,7 @@ STORE_TOP16: STORE_SREG^ra,EXT_CODE4E(sp) is mic_listr6 & REL6=1 & STORE_SREG &
break(mic_code:2);
}
-:sdbbp16 SDB16 is ISA_MODE=1 & RELP=0 & mic_op=0b100010 & SDB16 & ((mic_break=0b101100 & REL6=0) | (mic_breakr6=0b111011 & REL6=1)) {
+:sdbbp16 SDB16 is ISA_MODE=1 & RELP=0 & mic_op=0b010001 & SDB16 & ((mic_break=0b101100 & REL6=0) | (mic_breakr6=0b111011 & REL6=1)) {
break(SDB16);
}