GP-1142: better logic for 64-bit

This commit is contained in:
d-millar 2021-07-19 12:30:51 -04:00
parent 91fa4d12c9
commit 51de35330c

View file

@ -65,17 +65,37 @@ public class GdbModelTargetProcessMemory
protected void updateUsingMappings(Map<BigInteger, GdbMemoryMapping> byStart) { protected void updateUsingMappings(Map<BigInteger, GdbMemoryMapping> byStart) {
List<GdbModelTargetMemoryRegion> regions; List<GdbModelTargetMemoryRegion> regions;
synchronized (this) { synchronized (this) {
if (byStart.isEmpty()) { regions =
byStart.values().stream().map(this::getTargetRegion).collect(Collectors.toList());
if (regions.isEmpty()) {
Map<BigInteger, GdbMemoryMapping> defaultMap =
new HashMap<BigInteger, GdbMemoryMapping>();
AddressSet addressSet = impl.getAddressFactory().getAddressSet(); AddressSet addressSet = impl.getAddressFactory().getAddressSet();
BigInteger start = addressSet.getMinAddress().getOffsetAsBigInteger(); BigInteger start = addressSet.getMinAddress().getOffsetAsBigInteger();
BigInteger end = addressSet.getMaxAddress().getOffsetAsBigInteger(); BigInteger end = addressSet.getMaxAddress().getOffsetAsBigInteger();
GdbMemoryMapping mem = new GdbMemoryMapping(start, end, if (end.longValue() < 0) {
end.subtract(start), start.subtract(start), "default"); BigInteger split = BigInteger.valueOf(Long.MAX_VALUE);
byStart.put(start, mem); GdbMemoryMapping lmem = new GdbMemoryMapping(start, split,
split.subtract(start), start.subtract(start), "defaultLow");
defaultMap.put(start, lmem);
split = split.add(BigInteger.valueOf(1));
GdbMemoryMapping hmem = new GdbMemoryMapping(split, end,
end.subtract(split), split.subtract(split), "defaultHigh");
defaultMap.put(split, hmem);
}
else {
GdbMemoryMapping mem = new GdbMemoryMapping(start, end,
end.subtract(start), start.subtract(start), "default");
defaultMap.put(start, mem);
}
regions =
defaultMap.values()
.stream()
.map(this::getTargetRegion)
.collect(Collectors.toList());
} }
regions =
byStart.values().stream().map(this::getTargetRegion).collect(Collectors.toList());
} }
setElements(regions, "Refreshed"); setElements(regions, "Refreshed");
} }