diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingUtils.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingUtils.java index c4d4739199..3d1ba7b7dd 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingUtils.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingUtils.java @@ -34,7 +34,7 @@ import ghidra.program.util.ProgramLocation; import ghidra.trace.model.*; import ghidra.trace.model.modules.*; import ghidra.trace.model.program.TraceProgramView; -import ghidra.util.ComparatorMath; +import ghidra.util.MathUtilities; import ghidra.util.Msg; public enum DebuggerStaticMappingUtils { @@ -163,8 +163,8 @@ public enum DebuggerStaticMappingUtils { private Address max = null; public void consider(Address min, Address max) { - this.min = this.min == null ? min : ComparatorMath.cmin(this.min, min); - this.max = this.max == null ? max : ComparatorMath.cmax(this.max, max); + this.min = this.min == null ? min : MathUtilities.cmin(this.min, min); + this.max = this.max == null ? max : MathUtilities.cmax(this.max, max); } public void consider(AddressRange range) { diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/stack/SymPcodeArithmetic.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/stack/SymPcodeArithmetic.java index 5687e82e94..ef29bbef32 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/stack/SymPcodeArithmetic.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/stack/SymPcodeArithmetic.java @@ -19,6 +19,7 @@ import ghidra.app.plugin.core.debug.stack.Sym.ConstSym; import ghidra.pcode.exec.ConcretionError; import ghidra.pcode.exec.PcodeArithmetic; import ghidra.pcode.utils.Utils; +import ghidra.program.model.address.AddressSpace; import ghidra.program.model.lang.*; import ghidra.program.model.pcode.PcodeOp; @@ -70,14 +71,14 @@ class SymPcodeArithmetic implements PcodeArithmetic { } @Override - public Sym modBeforeStore(int sizeout, int sizeinAddress, Sym inAddress, - int sizeinValue, Sym inValue) { + public Sym modBeforeStore(int sizeinOffset, AddressSpace space, Sym inOffset, int sizeinValue, + Sym inValue) { return inValue; } @Override - public Sym modAfterLoad(int sizeout, int sizeinAddress, Sym inAddress, - int sizeinValue, Sym inValue) { + public Sym modAfterLoad(int sizeinOffset, AddressSpace space, Sym inOffset, int sizeinValue, + Sym inValue) { return inValue; } diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/pcode/exec/DebuggerPcodeUtils.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/pcode/exec/DebuggerPcodeUtils.java index df4a3beb00..1fd25ce6a1 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/pcode/exec/DebuggerPcodeUtils.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/pcode/exec/DebuggerPcodeUtils.java @@ -505,33 +505,33 @@ public enum DebuggerPcodeUtils { } @Override - public WatchValue modBeforeStore(int sizeout, int sizeinAddress, WatchValue inAddress, + public WatchValue modBeforeStore(int sizeinOffset, AddressSpace space, WatchValue inOffset, int sizeinValue, WatchValue inValue) { return new WatchValue( new PrettyBytes(inValue.bytes.bigEndian, - bytes.modBeforeStore(sizeout, sizeinAddress, inAddress.bytes.bytes, - sizeinValue, inValue.bytes.bytes)), - STATE.modBeforeStore(sizeout, sizeinAddress, inAddress.state, - sizeinValue, inValue.state), - location.modBeforeStore(sizeout, sizeinAddress, inAddress.location, - sizeinValue, inValue.location), - READS.modBeforeStore(sizeout, sizeinAddress, inAddress.reads, - sizeinValue, inValue.reads)); + bytes.modBeforeStore(sizeinOffset, space, inOffset.bytes.bytes, sizeinValue, + inValue.bytes.bytes)), + STATE.modBeforeStore(sizeinOffset, space, inOffset.state, sizeinValue, + inValue.state), + location.modBeforeStore(sizeinOffset, space, inOffset.location, sizeinValue, + inValue.location), + READS.modBeforeStore(sizeinOffset, space, inOffset.reads, sizeinValue, + inValue.reads)); } @Override - public WatchValue modAfterLoad(int sizeout, int sizeinAddress, WatchValue inAddress, + public WatchValue modAfterLoad(int sizeinOffset, AddressSpace space, WatchValue inOffset, int sizeinValue, WatchValue inValue) { return new WatchValue( new PrettyBytes(getEndian().isBigEndian(), - bytes.modAfterLoad(sizeout, sizeinAddress, inAddress.bytes.bytes, - sizeinValue, inValue.bytes.bytes)), - STATE.modAfterLoad(sizeout, sizeinAddress, inAddress.state, - sizeinValue, inValue.state), - location.modAfterLoad(sizeout, sizeinAddress, inAddress.location, - sizeinValue, inValue.location), - READS.modAfterLoad(sizeout, sizeinAddress, inAddress.reads, - sizeinValue, inValue.reads)); + bytes.modAfterLoad(sizeinOffset, space, inOffset.bytes.bytes, sizeinValue, + inValue.bytes.bytes)), + STATE.modAfterLoad(sizeinOffset, space, inOffset.state, sizeinValue, + inValue.state), + location.modAfterLoad(sizeinOffset, space, inOffset.location, sizeinValue, + inValue.location), + READS.modAfterLoad(sizeinOffset, space, inOffset.reads, sizeinValue, + inValue.reads)); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/TraceMemoryStatePcodeArithmetic.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/TraceMemoryStatePcodeArithmetic.java index 37a231064d..2293d8107d 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/TraceMemoryStatePcodeArithmetic.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/TraceMemoryStatePcodeArithmetic.java @@ -19,6 +19,7 @@ import java.math.BigInteger; import ghidra.pcode.exec.ConcretionError; import ghidra.pcode.exec.PcodeArithmetic; +import ghidra.program.model.address.AddressSpace; import ghidra.program.model.lang.Endian; import ghidra.trace.model.memory.TraceMemoryState; @@ -58,15 +59,15 @@ public enum TraceMemoryStatePcodeArithmetic implements PcodeArithmetic findSupportedLoadSpecs(ByteProvider provider) throws IOException { + return getLanguageService().getLanguageCompilerSpecPairs( + new LanguageCompilerSpecQuery(null, null, null, null, null)) + .stream() + .map(lcs -> new LoadSpec(this, 0, lcs, false)) + .toList(); + } + + @Override + public String getName() { + return JIT_LOG_NAME; + } + + @Override + public LoaderTier getTier() { + return LoaderTier.UNTARGETED_LOADER; + } + + @Override + public int getTierPriority() { + return 100; + } + + @Override + protected List> loadProgram(ByteProvider provider, String loadedName, + Project project, String projectFolderPath, LoadSpec loadSpec, List