GT-3448_emteere_LargeDisPerf code review changes. Fixing code defined

notification
This commit is contained in:
emteere 2020-02-20 20:23:23 +00:00
parent a9c7e69ac3
commit 8bfd0c1042
2 changed files with 16 additions and 17 deletions

View file

@ -276,15 +276,15 @@ public class DisassembleCommand extends BackgroundCommand {
continue;
}
// process the big range by disassembling flow through the range
// process the big range by disassembling flow through the range
// causing the analyzer to kick off between disassembly flows
// disassemble the seedSet first
doDisassemblySeeds(disassembler, seedSet);
doDisassemblySeeds(disassembler, seedSet, mgr);
seedSet = new AddressSet();
// do the current start of the subRangeSet
AddressSet localDisAddrs =
doDisassemblySeeds(disassembler, new AddressSet(nextAddr));
doDisassemblySeeds(disassembler, new AddressSet(nextAddr), mgr);
// if anything disassembled, analyze the result set
analyzeIfNeeded(mgr, subRangeSet, localDisAddrs, monitor);
@ -301,7 +301,7 @@ public class DisassembleCommand extends BackgroundCommand {
// If there are any small seedSet ranges left, disassemble them
// Don't kick off analysis, that will be done later
if (!seedSet.isEmpty()) {
doDisassemblySeeds(disassembler, seedSet);
doDisassemblySeeds(disassembler, seedSet, mgr);
}
return disassemblyPerformed || (!nonExecutableStart & !unalignedStart);
@ -312,17 +312,25 @@ public class DisassembleCommand extends BackgroundCommand {
*
* @param disassembler disassembler to use
* @param seedSet set of addresses to be disassembled
* @param mgr
*
* @return addresses actually disassembled
*/
protected AddressSet doDisassemblySeeds(Disassembler disassembler, AddressSet seedSet) {
protected AddressSet doDisassemblySeeds(Disassembler disassembler, AddressSet seedSet,
AutoAnalysisManager mgr) {
AddressSet newDisassembledAddrs =
disassembler.disassemble(seedSet, restrictedSet, initialContextValue, followFlow);
if (!newDisassembledAddrs.isEmpty()) {
disassemblyPerformed = true;
disassembledAddrs.add(newDisassembledAddrs);
// notify analysis manager of new code
if (mgr != null) {
mgr.codeDefined(newDisassembledAddrs);
}
}
return newDisassembledAddrs;
}
@ -348,9 +356,6 @@ public class DisassembleCommand extends BackgroundCommand {
return;
}
// notify analysis manager of new code
mgr.codeDefined(disassembledSet);
AddressRange firstRange = disassembledSet.getFirstRange();
Address rangeEnd = firstRange.getMaxAddress();
Address nextAddr = rangeEnd.next();

View file

@ -25,7 +25,6 @@ import ghidra.app.util.RepeatInstructionByteTracker;
import ghidra.framework.options.Options;
import ghidra.program.database.register.AddressRangeObjectMap;
import ghidra.program.model.address.*;
import ghidra.program.model.data.DefaultDataType;
import ghidra.program.model.lang.*;
import ghidra.program.model.lang.InstructionError.InstructionErrorType;
import ghidra.program.model.listing.*;
@ -464,17 +463,15 @@ public class Disassembler implements DisassemblerConflictHandler {
continue;
}
todoSubset.delete(nextAddr, nextAddr);
// must be aligned
if (nextAddr.getOffset() % alignment != 0) {
todoSubset.delete(nextAddr, nextAddr);
continue;
}
Data data = listing.getUndefinedDataAt(nextAddr);
if (data == null) {
// no undefined here, skip to next undefined
todoSubset.delete(nextAddr, nextAddr);
AddressSetView undefinedRanges = null;
try {
undefinedRanges =
@ -489,10 +486,7 @@ public class Disassembler implements DisassemblerConflictHandler {
AddressSet currentSet =
disassemble(nextAddr, restrictedSet, initialContextValue, doFollowFlow);
if (currentSet.isEmpty()) { // nothing disassembled
todoSubset.delete(nextAddr, nextAddr);
}
else {
if (!currentSet.isEmpty()) { // nothing disassembled
todoSubset.delete(currentSet);
disassembledAddrs.add(currentSet);
}