mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 02:39:44 +02:00
GP-0: Fixes for trace emulator
This commit is contained in:
parent
f290b1f6ba
commit
a328ae29b9
2 changed files with 10 additions and 7 deletions
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue