Skip to content

Commit 652e689

Browse files
committed
GT-3260_emteere changes from code-review
1 parent 40a7425 commit 652e689

File tree

1 file changed

+32
-20
lines changed
  • Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem

1 file changed

+32
-20
lines changed

Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener {
5757
private AddressSet addrSet = new AddressSet();
5858
private AddressSet initializedLoadedAddrSet = new AddressSet();
5959
private AddressSet allInitializedAddrSet = new AddressSet();
60-
private AddressSetView executeSet = new AddressSet();
60+
private AddressSetView executeSet = null;
6161

6262
private MemoryBlock lastBlock;// the last accessed block
6363
private LiveMemoryHandler liveMemory;
64-
64+
6565
// lazy hashmap of block names to blocks, must be reloaded if blocks are removed or added
66-
private HashMap<String,MemoryBlock> nameBlockMap = new HashMap<String, MemoryBlock>();
66+
private HashMap<String, MemoryBlock> nameBlockMap = new HashMap<String, MemoryBlock>();
6767
private final static MemoryBlock NoBlock = new MemoryBlockStub(); // placeholder for no block, not given out
6868

6969
Lock lock;
@@ -251,7 +251,7 @@ public AddressSetView getInitializedAddressSet() {
251251

252252
@Override
253253
public AddressSetView getAllInitializedAddressSet() {
254-
return allInitializedAddrSet;
254+
return new AddressSetViewAdapter(allInitializedAddrSet);
255255
}
256256

257257
/**
@@ -262,7 +262,7 @@ public AddressSetView getLoadedAndInitializedAddressSet() {
262262
if (liveMemory != null) {
263263
return this;//all memory is initialized!
264264
}
265-
return initializedLoadedAddrSet;
265+
return new AddressSetViewAdapter(initializedLoadedAddrSet);
266266
}
267267

268268
void checkMemoryWrite(MemoryBlockDB block, Address start, long length)
@@ -396,15 +396,12 @@ void fireBlockChanged(MemoryBlock block) {
396396
if (program != null) {
397397
program.setChanged(ChangeManager.DOCR_MEMORY_BLOCK_CHANGED, block, null);
398398
}
399-
399+
400400
// name could have changed
401401
nameBlockMap = new HashMap<>();
402-
403-
// execute state could have changed. check if in set and shouldn't be or vice/versa
404-
if (executeSet != null && executeSet.contains(block.getStart(), block.getEnd()) != block.isExecute()) {
405-
// don't regenerate now, do lazily later if needed
406-
executeSet = null;
407-
}
402+
403+
// don't regenerate now, do lazily later if needed
404+
executeSet = null;
408405
}
409406

410407
void fireBytesChanged(Address addr, int count) {
@@ -1981,17 +1978,32 @@ public int hashCode() {
19811978
*/
19821979
@Override
19831980
public AddressSetView getExecuteSet() {
1984-
if (executeSet != null) {
1985-
return executeSet;
1981+
AddressSetView set = executeSet;
1982+
1983+
if (set == null) {
1984+
set = computeExecuteSet();
19861985
}
1987-
AddressSet set = new AddressSet();
1988-
for (MemoryBlock block : blocks) {
1989-
if (block.isExecute()) {
1990-
set.addRange(block.getStart(), block.getEnd());
1986+
return set;
1987+
}
1988+
1989+
/**
1990+
* @return executable address set
1991+
*/
1992+
private AddressSetView computeExecuteSet() {
1993+
lock.acquire();
1994+
try {
1995+
AddressSet set = new AddressSet();
1996+
for (MemoryBlock block : blocks) {
1997+
if (block.isExecute()) {
1998+
set.addRange(block.getStart(), block.getEnd());
1999+
}
19912000
}
2001+
executeSet = new AddressSetViewAdapter(set);
2002+
return executeSet;
2003+
}
2004+
finally {
2005+
lock.release();
19922006
}
1993-
executeSet = new AddressSetViewAdapter(set);
1994-
return executeSet;
19952007
}
19962008

19972009
@Override

0 commit comments

Comments
 (0)