mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-28 17:11:11 -09:00
Merge remote-tracking branch 'origin/GP-2815_Dan_watchReadLoop' into patch
This commit is contained in:
@@ -495,26 +495,30 @@ public enum DBTraceUtils {
|
|||||||
Map<R, V> toPut = new HashMap<>();
|
Map<R, V> toPut = new HashMap<>();
|
||||||
for (E entry : getIntersecting(prev, next)) {
|
for (E entry : getIntersecting(prev, next)) {
|
||||||
R r = getRange(entry);
|
R r = getRange(entry);
|
||||||
boolean precedesMin = getLower(r).compareTo(lower) < 0;
|
int cmpMin = getLower(r).compareTo(lower);
|
||||||
boolean succeedsMax = getUpper(r).compareTo(upper) > 0;
|
int cmpMax = getUpper(r).compareTo(upper);
|
||||||
boolean sameVal = Objects.equals(getValue(entry), value);
|
boolean sameVal = Objects.equals(getValue(entry), value);
|
||||||
if (precedesMin && succeedsMax && sameVal) {
|
if (cmpMin <= 0 && cmpMax >= 0 && sameVal) {
|
||||||
return entry; // The value in this range is already set as specified
|
return entry; // The value in this range is already set as specified
|
||||||
}
|
}
|
||||||
remove(entry);
|
remove(entry);
|
||||||
if (precedesMin) {
|
if (cmpMin < 0) {
|
||||||
if (sameVal) {
|
if (sameVal) {
|
||||||
|
// Expand the new entry to cover the one we just removed
|
||||||
lower = getLower(r);
|
lower = getLower(r);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
// Create a truncated entry to replace the one we just removed
|
||||||
toPut.put(toRange(getLower(r), prev), getValue(entry));
|
toPut.put(toRange(getLower(r), prev), getValue(entry));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (succeedsMax) {
|
if (cmpMax > 0) {
|
||||||
if (sameVal) {
|
if (sameVal) {
|
||||||
|
// Expand the new entry to cover the one we just removed
|
||||||
upper = getUpper(r);
|
upper = getUpper(r);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
// Create a truncated entry to replace the one we just removed
|
||||||
toPut.put(toRange(next, getUpper(r)), getValue(entry));
|
toPut.put(toRange(next, getUpper(r)), getValue(entry));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -295,7 +295,9 @@ public class DBTraceMemorySpace
|
|||||||
if (state == null) {
|
if (state == null) {
|
||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
}
|
}
|
||||||
|
var l = new Object() {
|
||||||
|
boolean changed;
|
||||||
|
};
|
||||||
new AddressRangeMapSetter<Entry<TraceAddressSnapRange, TraceMemoryState>, TraceMemoryState>() {
|
new AddressRangeMapSetter<Entry<TraceAddressSnapRange, TraceMemoryState>, TraceMemoryState>() {
|
||||||
@Override
|
@Override
|
||||||
protected AddressRange getRange(Entry<TraceAddressSnapRange, TraceMemoryState> entry) {
|
protected AddressRange getRange(Entry<TraceAddressSnapRange, TraceMemoryState> entry) {
|
||||||
@@ -324,6 +326,8 @@ public class DBTraceMemorySpace
|
|||||||
@Override
|
@Override
|
||||||
protected Entry<TraceAddressSnapRange, TraceMemoryState> put(AddressRange range,
|
protected Entry<TraceAddressSnapRange, TraceMemoryState> put(AddressRange range,
|
||||||
TraceMemoryState value) {
|
TraceMemoryState value) {
|
||||||
|
// This should not get called if the range is already the desired state
|
||||||
|
l.changed = true;
|
||||||
if (value != TraceMemoryState.UNKNOWN) {
|
if (value != TraceMemoryState.UNKNOWN) {
|
||||||
stateMapSpace.put(new ImmutableTraceAddressSnapRange(range, snap), value);
|
stateMapSpace.put(new ImmutableTraceAddressSnapRange(range, snap), value);
|
||||||
}
|
}
|
||||||
@@ -331,8 +335,10 @@ public class DBTraceMemorySpace
|
|||||||
}
|
}
|
||||||
}.set(start, end, state);
|
}.set(start, end, state);
|
||||||
|
|
||||||
trace.setChanged(new TraceChangeRecord<>(TraceMemoryStateChangeType.CHANGED, this,
|
if (l.changed) {
|
||||||
new ImmutableTraceAddressSnapRange(start, end, snap, snap), state));
|
trace.setChanged(new TraceChangeRecord<>(TraceMemoryStateChangeType.CHANGED, this,
|
||||||
|
new ImmutableTraceAddressSnapRange(start, end, snap, snap), state));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void checkState(TraceMemoryState state) {
|
protected void checkState(TraceMemoryState state) {
|
||||||
|
|||||||
Reference in New Issue
Block a user