GP-0: Fixes for trace emulator

This commit is contained in:
Dan 2021-12-01 10:23:01 -05:00
parent f290b1f6ba
commit a328ae29b9
2 changed files with 10 additions and 7 deletions

View file

@ -19,6 +19,7 @@ import com.google.common.collect.RangeSet;
import com.google.common.primitives.UnsignedLong;
import ghidra.program.model.address.*;
import ghidra.program.model.lang.Language;
import ghidra.trace.model.Trace;
import ghidra.trace.model.memory.TraceMemorySpace;
import ghidra.trace.model.thread.TraceThread;
@ -27,8 +28,9 @@ public abstract class AbstractCheckedTraceCachedWriteBytesPcodeExecutorState
extends TraceCachedWriteBytesPcodeExecutorState {
protected class CheckedCachedSpace extends CachedSpace {
public CheckedCachedSpace(AddressSpace space, TraceMemorySpace source, long snap) {
super(space, source, snap);
public CheckedCachedSpace(Language language, AddressSpace space, TraceMemorySpace source,
long snap) {
super(language, space, source, snap);
}
@Override
@ -54,7 +56,7 @@ public abstract class AbstractCheckedTraceCachedWriteBytesPcodeExecutorState
@Override
protected CachedSpace newSpace(AddressSpace space, TraceMemorySpace source, long snap) {
return new CheckedCachedSpace(space, source, snap);
return new CheckedCachedSpace(language, space, source, snap);
}
protected abstract int checkUninitialized(TraceMemorySpace source, Address start, int size,

View file

@ -100,11 +100,14 @@ public class TraceCachedWriteBytesPcodeExecutorState
protected static class CachedSpace {
protected final SemisparseByteArray cache = new SemisparseByteArray();
protected final RangeSet<UnsignedLong> written = TreeRangeSet.create();
protected final Language language; // For logging diagnostic
protected final AddressSpace space;
protected final TraceMemorySpace source;
protected final long snap;
public CachedSpace(AddressSpace space, TraceMemorySpace source, long snap) {
public CachedSpace(Language language, AddressSpace space, TraceMemorySpace source,
long snap) {
this.language = language;
this.space = space;
this.source = source;
this.snap = snap;
@ -166,8 +169,6 @@ public class TraceCachedWriteBytesPcodeExecutorState
}
protected Set<Register> getRegs(AddressSet set) {
// TODO: Should pass in language instead?
Language language = source.getTrace().getBaseLanguage();
Set<Register> regs = new TreeSet<>();
for (AddressRange rng : set) {
Register r = language.getRegister(rng.getMinAddress(), (int) rng.getLength());
@ -297,7 +298,7 @@ public class TraceCachedWriteBytesPcodeExecutorState
}
protected CachedSpace newSpace(AddressSpace space, TraceMemorySpace source, long snap) {
return new CachedSpace(space, source, snap);
return new CachedSpace(language, space, source, snap);
}
@Override