From ded1fbbeb4488591b45b9357069e2f218d9b64a0 Mon Sep 17 00:00:00 2001 From: emteere <47253321+emteere@users.noreply.github.com> Date: Tue, 8 Oct 2019 15:58:05 -0400 Subject: [PATCH] GT-3223_emteere Minor changes for performance issues on large programs --- .../src/main/java/ghidra/app/util/PseudoDisassembler.java | 7 ++++--- .../ghidra/program/database/references/BigRefListV0.java | 2 +- .../java/ghidra/program/database/references/RefListV0.java | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java index 246934f1d2..1e2655961a 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/util/PseudoDisassembler.java @@ -71,6 +71,8 @@ public class PseudoDisassembler { private boolean respectExecuteFlag = false; + private AddressSetView executeSet; + /** * Create a pseudo disassembler for the given program. */ @@ -78,6 +80,8 @@ public class PseudoDisassembler { this.program = program; memory = program.getMemory(); + + executeSet = memory.getExecuteSet(); this.language = program.getLanguage(); @@ -615,8 +619,6 @@ public class PseudoDisassembler { return false; } - AddressSetView executeSet = memory.getExecuteSet(); - RepeatInstructionByteTracker repeatInstructionByteTracker = new RepeatInstructionByteTracker(MAX_REPEAT_BYTES_LIMIT, null); @@ -878,7 +880,6 @@ public class PseudoDisassembler { } // check that body does not wander into non-executable memory - AddressSetView executeSet = program.getMemory().getExecuteSet(); if (respectExecuteFlag && !executeSet.isEmpty() && !body.subtract(executeSet).isEmpty()) { return false; } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java index 872f57c8ba..a210e27441 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java @@ -390,7 +390,7 @@ class BigRefListV0 extends RefList { if (maxLevel < level) { maxLevel = level; } - if (level > currentRefLevel) { + if (level >= currentRefLevel) { return level; } } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java index 0c84a38398..e03faf2388 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/RefListV0.java @@ -342,7 +342,7 @@ class RefListV0 extends RefList { if (maxLevel < level) { maxLevel = level; } - if (level > currentRefLevel) { + if (level >= currentRefLevel) { return level; } }