mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-05-28 18:36:59 +08:00
GT-3511 revised fix for branch to self with invalid delay slot
This commit is contained in:
+2
-2
@@ -1152,12 +1152,12 @@ public class Disassembler implements DisassemblerConflictHandler {
|
|||||||
throws InsufficientBytesException, UnknownInstructionException,
|
throws InsufficientBytesException, UnknownInstructionException,
|
||||||
AddressOverflowException, NestedDelaySlotException {
|
AddressOverflowException, NestedDelaySlotException {
|
||||||
|
|
||||||
|
List<PseudoInstruction> delaySlotList = parseDelaySlots(inst, blockMemBuffer, block);
|
||||||
|
|
||||||
if (followFlow) {
|
if (followFlow) {
|
||||||
processInstructionFlows(inst, block);
|
processInstructionFlows(inst, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<PseudoInstruction> delaySlotList = parseDelaySlots(inst, blockMemBuffer, block);
|
|
||||||
|
|
||||||
block.addInstruction(inst);
|
block.addInstruction(inst);
|
||||||
|
|
||||||
if (delaySlotList != null) {
|
if (delaySlotList != null) {
|
||||||
|
|||||||
-3
@@ -174,9 +174,6 @@ class DisassemblerQueue {
|
|||||||
branchFlow = currentBranchQueue.first();
|
branchFlow = currentBranchQueue.first();
|
||||||
currentBranchQueue.remove(branchFlow);
|
currentBranchQueue.remove(branchFlow);
|
||||||
}
|
}
|
||||||
if (processedBranchFlows.contains(branchFlow)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
processedBranchFlows.add(branchFlow);
|
processedBranchFlows.add(branchFlow);
|
||||||
|
|
||||||
Address blockAddr = branchFlow.getDestinationAddress();
|
Address blockAddr = branchFlow.getDestinationAddress();
|
||||||
|
|||||||
Reference in New Issue
Block a user