mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 10:49:34 +02:00
GP-4536 Speed up disassembly by not checking for reference overrides
until and if there are needed
This commit is contained in:
parent
6132ddc3d0
commit
96e20ec3bf
1 changed files with 19 additions and 2 deletions
|
@ -45,6 +45,17 @@ public class InstructionPcodeOverride implements PcodeOverride {
|
||||||
*/
|
*/
|
||||||
public InstructionPcodeOverride(Instruction instr) {
|
public InstructionPcodeOverride(Instruction instr) {
|
||||||
this.instr = instr;
|
this.instr = instr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the cache or any references on an instruction that would cause an override.
|
||||||
|
*
|
||||||
|
* @return list of any program overrides
|
||||||
|
*/
|
||||||
|
private List<Reference> getPrimaryOverridingReferences() {
|
||||||
|
if (primaryOverridingReferences != null) {
|
||||||
|
return primaryOverridingReferences;
|
||||||
|
}
|
||||||
|
|
||||||
primaryOverridingReferences = new ArrayList<>();
|
primaryOverridingReferences = new ArrayList<>();
|
||||||
for (Reference ref : instr.getReferencesFrom()) {
|
for (Reference ref : instr.getReferencesFrom()) {
|
||||||
|
@ -59,6 +70,8 @@ public class InstructionPcodeOverride implements PcodeOverride {
|
||||||
primaryCallAddress = ref.getToAddress();
|
primaryCallAddress = ref.getToAddress();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return primaryOverridingReferences;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -86,8 +99,10 @@ public class InstructionPcodeOverride implements PcodeOverride {
|
||||||
if (!type.isOverride()) {
|
if (!type.isOverride()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<Reference> overridingRefs = getPrimaryOverridingReferences();
|
||||||
Address overrideAddress = null;
|
Address overrideAddress = null;
|
||||||
for (Reference ref : primaryOverridingReferences) {
|
for (Reference ref : overridingRefs) {
|
||||||
if (ref.getReferenceType().equals(type)) {
|
if (ref.getReferenceType().equals(type)) {
|
||||||
if (overrideAddress == null) {
|
if (overrideAddress == null) {
|
||||||
overrideAddress = ref.getToAddress();
|
overrideAddress = ref.getToAddress();
|
||||||
|
@ -102,6 +117,7 @@ public class InstructionPcodeOverride implements PcodeOverride {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Address getPrimaryCallReference() {
|
public Address getPrimaryCallReference() {
|
||||||
|
getPrimaryOverridingReferences();
|
||||||
return primaryCallAddress;
|
return primaryCallAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,6 +196,7 @@ public class InstructionPcodeOverride implements PcodeOverride {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasPotentialOverride() {
|
public boolean hasPotentialOverride() {
|
||||||
return !primaryOverridingReferences.isEmpty();
|
List<Reference> overridingRefs = getPrimaryOverridingReferences();
|
||||||
|
return !overridingRefs.isEmpty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue