GT-3260_emteere changes from code-review

This commit is contained in:
emteere 2019-11-08 11:30:48 -05:00
parent 40a7425b3c
commit 652e689846

View file

@ -57,7 +57,7 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener {
private AddressSet addrSet = new AddressSet(); private AddressSet addrSet = new AddressSet();
private AddressSet initializedLoadedAddrSet = new AddressSet(); private AddressSet initializedLoadedAddrSet = new AddressSet();
private AddressSet allInitializedAddrSet = new AddressSet(); private AddressSet allInitializedAddrSet = new AddressSet();
private AddressSetView executeSet = new AddressSet(); private AddressSetView executeSet = null;
private MemoryBlock lastBlock;// the last accessed block private MemoryBlock lastBlock;// the last accessed block
private LiveMemoryHandler liveMemory; private LiveMemoryHandler liveMemory;
@ -251,7 +251,7 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener {
@Override @Override
public AddressSetView getAllInitializedAddressSet() { public AddressSetView getAllInitializedAddressSet() {
return allInitializedAddrSet; return new AddressSetViewAdapter(allInitializedAddrSet);
} }
/** /**
@ -262,7 +262,7 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener {
if (liveMemory != null) { if (liveMemory != null) {
return this;//all memory is initialized! return this;//all memory is initialized!
} }
return initializedLoadedAddrSet; return new AddressSetViewAdapter(initializedLoadedAddrSet);
} }
void checkMemoryWrite(MemoryBlockDB block, Address start, long length) void checkMemoryWrite(MemoryBlockDB block, Address start, long length)
@ -400,12 +400,9 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener {
// name could have changed // name could have changed
nameBlockMap = new HashMap<>(); nameBlockMap = new HashMap<>();
// execute state could have changed. check if in set and shouldn't be or vice/versa
if (executeSet != null && executeSet.contains(block.getStart(), block.getEnd()) != block.isExecute()) {
// don't regenerate now, do lazily later if needed // don't regenerate now, do lazily later if needed
executeSet = null; executeSet = null;
} }
}
void fireBytesChanged(Address addr, int count) { void fireBytesChanged(Address addr, int count) {
lock.acquire(); lock.acquire();
@ -1981,9 +1978,20 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener {
*/ */
@Override @Override
public AddressSetView getExecuteSet() { public AddressSetView getExecuteSet() {
if (executeSet != null) { AddressSetView set = executeSet;
return executeSet;
if (set == null) {
set = computeExecuteSet();
} }
return set;
}
/**
* @return executable address set
*/
private AddressSetView computeExecuteSet() {
lock.acquire();
try {
AddressSet set = new AddressSet(); AddressSet set = new AddressSet();
for (MemoryBlock block : blocks) { for (MemoryBlock block : blocks) {
if (block.isExecute()) { if (block.isExecute()) {
@ -1993,6 +2001,10 @@ public class MemoryMapDB implements Memory, ManagerDB, LiveMemoryListener {
executeSet = new AddressSetViewAdapter(set); executeSet = new AddressSetViewAdapter(set);
return executeSet; return executeSet;
} }
finally {
lock.release();
}
}
@Override @Override
public void memoryChanged(Address addr, int size) { public void memoryChanged(Address addr, int size) {