From a8fae1fe5befb6e38dc146c65e8c51f643d62518 Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Fri, 3 Jan 2025 10:27:38 -0500 Subject: [PATCH] GP-4643: Add a JIT-accelerated p-code emulator (API/scripting only) --- .../modules/DebuggerStaticMappingUtils.java | 6 +- .../core/debug/stack/SymPcodeArithmetic.java | 9 +- .../ghidra/pcode/exec/DebuggerPcodeUtils.java | 36 +- .../TraceMemoryStatePcodeArithmetic.java | 11 +- .../program/DBTraceProgramViewRootModule.java | 6 +- .../trace/BytesTracePcodeEmulatorTest.java | 1 + Ghidra/Debug/ProposedUtils/build.gradle | 6 +- .../ghidra/app/util/opinion/JitLogLoader.java | 232 ++ .../eval/ArithmeticVarnodeEvaluator.java | 6 +- .../model/address/CachedAddressSetView.java | 4 +- .../util/IntersectionAddressSetView.java | 4 +- .../TwoWayBreakdownAddressRangeIterator.java | 4 +- .../util/UnionAddressRangeIterator.java | 4 +- .../java/ghidra/util/UnionAddressSetView.java | 4 +- .../pcode/emu/taint/TaintPcodeArithmetic.java | 11 +- .../decompile/actions/PCodeDfgGraphTask.java | 2 +- Ghidra/Features/FileFormats/Module.manifest | 5 - Ghidra/Features/FileFormats/build.gradle | 8 +- .../FileFormats/certification.manifest | 1 - .../pcode/emu/sys/EmuSyscallLibrary.java | 42 +- Ghidra/Framework/Emulation/Module.manifest | 5 + Ghidra/Framework/Emulation/build.gradle | 10 +- .../Emulation/certification.manifest | 1 + .../ghidra/app/emulator/AdaptedEmulator.java | 11 +- .../util/datastruct/SemisparseByteArray.java | 9 + .../pcode/emu/AbstractPcodeMachine.java | 13 +- .../ghidra/pcode/emu/DefaultPcodeThread.java | 34 +- .../ghidra/pcode/emu/InstructionDecoder.java | 15 +- .../ghidra/pcode/emu/ModifiedPcodeThread.java | 6 +- .../java/ghidra/pcode/emu/PcodeMachine.java | 14 +- .../pcode/emu/SleighInstructionDecoder.java | 12 +- .../pcode/emu/ThreadPcodeExecutorState.java | 4 +- .../emu/jit/JitBytesPcodeExecutorState.java | 37 + .../jit/JitBytesPcodeExecutorStatePiece.java | 131 + .../ghidra/pcode/emu/jit/JitCompiler.java | 276 ++ .../pcode/emu/jit/JitConfiguration.java | 52 + .../JitDefaultBytesPcodeExecutorState.java | 66 + .../ghidra/pcode/emu/jit/JitJvmTypeUtils.java | 119 + .../java/ghidra/pcode/emu/jit/JitPassage.java | 849 +++++++ .../pcode/emu/jit/JitPcodeEmulator.java | 413 +++ .../ghidra/pcode/emu/jit/JitPcodeThread.java | 278 ++ .../jit/JitThreadBytesPcodeExecutorState.java | 57 + .../emu/jit/analysis/JitAllocationModel.java | 944 +++++++ .../emu/jit/analysis/JitAnalysisContext.java | 105 + .../emu/jit/analysis/JitControlFlowModel.java | 586 +++++ .../jit/analysis/JitDataFlowArithmetic.java | 398 +++ .../analysis/JitDataFlowBlockAnalyzer.java | 219 ++ .../emu/jit/analysis/JitDataFlowExecutor.java | 165 ++ .../emu/jit/analysis/JitDataFlowModel.java | 647 +++++ .../emu/jit/analysis/JitDataFlowState.java | 572 +++++ .../analysis/JitDataFlowUseropLibrary.java | 275 ++ .../emu/jit/analysis/JitOpUpwardVisitor.java | 95 + .../pcode/emu/jit/analysis/JitOpUseModel.java | 333 +++ .../pcode/emu/jit/analysis/JitOpVisitor.java | 270 ++ .../pcode/emu/jit/analysis/JitType.java | 529 ++++ .../emu/jit/analysis/JitTypeBehavior.java | 182 ++ .../pcode/emu/jit/analysis/JitTypeModel.java | 401 +++ .../emu/jit/analysis/JitVarScopeModel.java | 531 ++++ .../pcode/emu/jit/decode/DecodedStride.java | 32 + .../pcode/emu/jit/decode/DecoderExecutor.java | 563 ++++ .../emu/jit/decode/DecoderForOnePassage.java | 169 ++ .../emu/jit/decode/DecoderForOneStride.java | 186 ++ .../emu/jit/decode/DecoderUseropLibrary.java | 202 ++ .../emu/jit/decode/JitPassageDecoder.java | 167 ++ .../pcode/emu/jit/gen/ExceptionHandler.java | 74 + .../pcode/emu/jit/gen/FieldForArrDirect.java | 87 + .../pcode/emu/jit/gen/FieldForContext.java | 77 + .../pcode/emu/jit/gen/FieldForExitSlot.java | 101 + .../emu/jit/gen/FieldForSpaceIndirect.java | 84 + .../pcode/emu/jit/gen/FieldForUserop.java | 87 + .../pcode/emu/jit/gen/FieldForVarnode.java | 85 + .../ghidra/pcode/emu/jit/gen/FieldReq.java | 41 + .../ghidra/pcode/emu/jit/gen/GenConsts.java | 223 ++ .../pcode/emu/jit/gen/InstanceFieldReq.java | 37 + .../pcode/emu/jit/gen/JitCodeGenerator.java | 1156 +++++++++ .../pcode/emu/jit/gen/StaticFieldReq.java | 37 + .../ghidra/pcode/emu/jit/gen/op/BinOpGen.java | 90 + .../pcode/emu/jit/gen/op/BitwiseBinOpGen.java | 125 + .../pcode/emu/jit/gen/op/BoolAndOpGen.java | 44 + .../pcode/emu/jit/gen/op/BoolNegateOpGen.java | 59 + .../pcode/emu/jit/gen/op/BoolOrOpGen.java | 44 + .../pcode/emu/jit/gen/op/BoolXorOpGen.java | 44 + .../pcode/emu/jit/gen/op/BranchIndOpGen.java | 57 + .../pcode/emu/jit/gen/op/BranchOpGen.java | 97 + .../pcode/emu/jit/gen/op/CBranchOpGen.java | 85 + .../emu/jit/gen/op/CallOtherMissingOpGen.java | 60 + .../pcode/emu/jit/gen/op/CallOtherOpGen.java | 249 ++ .../pcode/emu/jit/gen/op/CatenateOpGen.java | 43 + .../emu/jit/gen/op/CompareFloatOpGen.java | 104 + .../emu/jit/gen/op/CompareIntBinOpGen.java | 143 ++ .../pcode/emu/jit/gen/op/CopyOpGen.java | 42 + .../pcode/emu/jit/gen/op/FloatAbsOpGen.java | 54 + .../pcode/emu/jit/gen/op/FloatAddOpGen.java | 53 + .../pcode/emu/jit/gen/op/FloatCeilOpGen.java | 59 + .../pcode/emu/jit/gen/op/FloatDivOpGen.java | 53 + .../pcode/emu/jit/gen/op/FloatEqualOpGen.java | 47 + .../emu/jit/gen/op/FloatFloat2FloatOpGen.java | 66 + .../pcode/emu/jit/gen/op/FloatFloorOpGen.java | 59 + .../emu/jit/gen/op/FloatInt2FloatOpGen.java | 66 + .../emu/jit/gen/op/FloatLessEqualOpGen.java | 47 + .../pcode/emu/jit/gen/op/FloatLessOpGen.java | 47 + .../pcode/emu/jit/gen/op/FloatMultOpGen.java | 53 + .../pcode/emu/jit/gen/op/FloatNaNOpGen.java | 54 + .../pcode/emu/jit/gen/op/FloatNegOpGen.java | 51 + .../emu/jit/gen/op/FloatNotEqualOpGen.java | 47 + .../pcode/emu/jit/gen/op/FloatRoundOpGen.java | 67 + .../pcode/emu/jit/gen/op/FloatSqrtOpGen.java | 58 + .../pcode/emu/jit/gen/op/FloatSubOpGen.java | 53 + .../pcode/emu/jit/gen/op/FloatTruncOpGen.java | 66 + .../pcode/emu/jit/gen/op/Int2CompOpGen.java | 52 + .../pcode/emu/jit/gen/op/IntAddOpGen.java | 135 + .../pcode/emu/jit/gen/op/IntAndOpGen.java | 43 + .../pcode/emu/jit/gen/op/IntCarryOpGen.java | 182 ++ .../pcode/emu/jit/gen/op/IntDivOpGen.java | 65 + .../pcode/emu/jit/gen/op/IntEqualOpGen.java | 48 + .../pcode/emu/jit/gen/op/IntLeftOpGen.java | 36 + .../emu/jit/gen/op/IntLessEqualOpGen.java | 46 + .../pcode/emu/jit/gen/op/IntLessOpGen.java | 46 + .../pcode/emu/jit/gen/op/IntMultOpGen.java | 61 + .../pcode/emu/jit/gen/op/IntNegateOpGen.java | 58 + .../emu/jit/gen/op/IntNotEqualOpGen.java | 48 + .../pcode/emu/jit/gen/op/IntOrOpGen.java | 43 + .../pcode/emu/jit/gen/op/IntRemOpGen.java | 64 + .../pcode/emu/jit/gen/op/IntRightOpGen.java | 36 + .../pcode/emu/jit/gen/op/IntSBorrowOpGen.java | 83 + .../pcode/emu/jit/gen/op/IntSCarryOpGen.java | 83 + .../pcode/emu/jit/gen/op/IntSDivOpGen.java | 61 + .../pcode/emu/jit/gen/op/IntSExtOpGen.java | 79 + .../emu/jit/gen/op/IntSLessEqualOpGen.java | 48 + .../pcode/emu/jit/gen/op/IntSLessOpGen.java | 48 + .../pcode/emu/jit/gen/op/IntSRemOpGen.java | 61 + .../pcode/emu/jit/gen/op/IntSRightOpGen.java | 48 + .../pcode/emu/jit/gen/op/IntSubOpGen.java | 135 + .../pcode/emu/jit/gen/op/IntXorOpGen.java | 43 + .../pcode/emu/jit/gen/op/IntZExtOpGen.java | 47 + .../pcode/emu/jit/gen/op/LoadOpGen.java | 211 ++ .../pcode/emu/jit/gen/op/LzCountOpGen.java | 55 + .../ghidra/pcode/emu/jit/gen/op/NopOpGen.java | 38 + .../ghidra/pcode/emu/jit/gen/op/OpGen.java | 593 +++++ .../ghidra/pcode/emu/jit/gen/op/PhiOpGen.java | 44 + .../pcode/emu/jit/gen/op/PopCountOpGen.java | 54 + .../emu/jit/gen/op/ShiftIntBinOpGen.java | 75 + .../pcode/emu/jit/gen/op/StoreOpGen.java | 217 ++ .../pcode/emu/jit/gen/op/SubPieceOpGen.java | 155 ++ .../emu/jit/gen/op/SynthSubPieceOpGen.java | 43 + .../ghidra/pcode/emu/jit/gen/op/UnOpGen.java | 63 + .../emu/jit/gen/op/UnimplementedOpGen.java | 75 + .../emu/jit/gen/tgt/JitCompiledPassage.java | 1495 +++++++++++ .../jit/gen/tgt/JitCompiledPassageClass.java | 124 + .../pcode/emu/jit/gen/type/DoubleReadGen.java | 49 + .../emu/jit/gen/type/DoubleWriteGen.java | 49 + .../emu/jit/gen/type/ExportsLegAccessGen.java | 63 + .../pcode/emu/jit/gen/type/FloatReadGen.java | 48 + .../pcode/emu/jit/gen/type/FloatWriteGen.java | 48 + .../pcode/emu/jit/gen/type/IntReadGen.java | 115 + .../pcode/emu/jit/gen/type/IntWriteGen.java | 115 + .../pcode/emu/jit/gen/type/LongReadGen.java | 132 + .../pcode/emu/jit/gen/type/LongWriteGen.java | 132 + .../emu/jit/gen/type/MethodAccessGen.java | 38 + .../pcode/emu/jit/gen/type/MpIntReadGen.java | 91 + .../pcode/emu/jit/gen/type/MpIntWriteGen.java | 93 + .../emu/jit/gen/type/MpTypedAccessGen.java | 55 + .../emu/jit/gen/type/TypeConversions.java | 830 ++++++ .../emu/jit/gen/type/TypedAccessGen.java | 115 + .../pcode/emu/jit/gen/var/ConstValGen.java | 63 + .../emu/jit/gen/var/DirectMemoryVarGen.java | 39 + .../pcode/emu/jit/gen/var/InputVarGen.java | 39 + .../pcode/emu/jit/gen/var/LocalOutVarGen.java | 38 + .../pcode/emu/jit/gen/var/LocalVarGen.java | 51 + .../emu/jit/gen/var/MemoryOutVarGen.java | 36 + .../pcode/emu/jit/gen/var/MemoryVarGen.java | 48 + .../pcode/emu/jit/gen/var/MissingVarGen.java | 86 + .../ghidra/pcode/emu/jit/gen/var/ValGen.java | 151 ++ .../ghidra/pcode/emu/jit/gen/var/VarGen.java | 313 +++ .../ghidra/pcode/emu/jit/op/JitBinOp.java | 82 + .../ghidra/pcode/emu/jit/op/JitBoolAndOp.java | 30 + .../pcode/emu/jit/op/JitBoolBinOp.java} | 34 +- .../pcode/emu/jit/op/JitBoolNegateOp.java | 29 + .../ghidra/pcode/emu/jit/op/JitBoolOrOp.java | 30 + .../ghidra/pcode/emu/jit/op/JitBoolUnOp.java | 33 + .../ghidra/pcode/emu/jit/op/JitBoolXorOp.java | 30 + .../pcode/emu/jit/op/JitBranchIndOp.java | 70 + .../ghidra/pcode/emu/jit/op/JitBranchOp.java | 57 + .../ghidra/pcode/emu/jit/op/JitCBranchOp.java | 71 + .../pcode/emu/jit/op/JitCallOtherDefOp.java | 58 + .../emu/jit/op/JitCallOtherMissingOp.java | 53 + .../pcode/emu/jit/op/JitCallOtherOp.java | 36 + .../pcode/emu/jit/op/JitCallOtherOpIf.java | 114 + .../pcode/emu/jit/op/JitCatenateOp.java | 105 + .../ghidra/pcode/emu/jit/op/JitCopyOp.java | 40 + .../ghidra/pcode/emu/jit/op/JitDefOp.java | 57 + .../pcode/emu/jit/op/JitFloatAbsOp.java | 29 + .../pcode/emu/jit/op/JitFloatAddOp.java | 31 + .../pcode/emu/jit/op/JitFloatBinOp.java | 38 + .../pcode/emu/jit/op/JitFloatCeilOp.java | 29 + .../pcode/emu/jit/op/JitFloatDivOp.java | 31 + .../pcode/emu/jit/op/JitFloatEqualOp.java | 31 + .../emu/jit/op/JitFloatFloat2FloatOp.java | 29 + .../pcode/emu/jit/op/JitFloatFloorOp.java | 29 + .../pcode/emu/jit/op/JitFloatInt2FloatOp.java | 40 + .../pcode/emu/jit/op/JitFloatLessEqualOp.java | 31 + .../pcode/emu/jit/op/JitFloatLessOp.java | 31 + .../pcode/emu/jit/op/JitFloatMultOp.java | 31 + .../pcode/emu/jit/op/JitFloatNaNOp.java | 35 + .../pcode/emu/jit/op/JitFloatNegOp.java | 29 + .../pcode/emu/jit/op/JitFloatNotEqualOp.java | 31 + .../pcode/emu/jit/op/JitFloatRoundOp.java | 29 + .../pcode/emu/jit/op/JitFloatSqrtOp.java | 29 + .../pcode/emu/jit/op/JitFloatSubOp.java | 31 + .../pcode/emu/jit/op/JitFloatTestOp.java | 29 + .../pcode/emu/jit/op/JitFloatTruncOp.java | 35 + .../ghidra/pcode/emu/jit/op/JitFloatUnOp.java | 33 + .../pcode/emu/jit/op/JitInt2CompOp.java | 29 + .../ghidra/pcode/emu/jit/op/JitIntAddOp.java | 30 + .../ghidra/pcode/emu/jit/op/JitIntAndOp.java | 30 + .../ghidra/pcode/emu/jit/op/JitIntBinOp.java | 38 + .../pcode/emu/jit/op/JitIntCarryOp.java | 31 + .../ghidra/pcode/emu/jit/op/JitIntDivOp.java | 30 + .../pcode/emu/jit/op/JitIntEqualOp.java | 31 + .../ghidra/pcode/emu/jit/op/JitIntLeftOp.java | 30 + .../pcode/emu/jit/op/JitIntLessEqualOp.java | 31 + .../ghidra/pcode/emu/jit/op/JitIntLessOp.java | 30 + .../ghidra/pcode/emu/jit/op/JitIntMultOp.java | 30 + .../pcode/emu/jit/op/JitIntNegateOp.java | 29 + .../pcode/emu/jit/op/JitIntNotEqualOp.java | 31 + .../ghidra/pcode/emu/jit/op/JitIntOrOp.java | 30 + .../ghidra/pcode/emu/jit/op/JitIntRemOp.java | 30 + .../pcode/emu/jit/op/JitIntRightOp.java | 30 + .../pcode/emu/jit/op/JitIntSBorrowOp.java | 31 + .../pcode/emu/jit/op/JitIntSCarryOp.java | 31 + .../ghidra/pcode/emu/jit/op/JitIntSDivOp.java | 30 + .../ghidra/pcode/emu/jit/op/JitIntSExtOp.java | 29 + .../pcode/emu/jit/op/JitIntSLessEqualOp.java | 31 + .../pcode/emu/jit/op/JitIntSLessOp.java | 31 + .../ghidra/pcode/emu/jit/op/JitIntSRemOp.java | 30 + .../pcode/emu/jit/op/JitIntSRightOp.java | 31 + .../ghidra/pcode/emu/jit/op/JitIntSubOp.java | 30 + .../ghidra/pcode/emu/jit/op/JitIntTestOp.java | 33 + .../ghidra/pcode/emu/jit/op/JitIntUnOp.java | 33 + .../ghidra/pcode/emu/jit/op/JitIntXorOp.java | 30 + .../ghidra/pcode/emu/jit/op/JitIntZExtOp.java | 29 + .../ghidra/pcode/emu/jit/op/JitLoadOp.java | 75 + .../ghidra/pcode/emu/jit/op/JitLzCountOp.java | 29 + .../ghidra/pcode/emu/jit/op/JitNopOp.java | 60 + .../java/ghidra/pcode/emu/jit/op/JitOp.java | 185 ++ .../ghidra/pcode/emu/jit/op/JitPhiOp.java | 125 + .../pcode/emu/jit/op/JitPopCountOp.java | 29 + .../ghidra/pcode/emu/jit/op/JitStoreOp.java | 84 + .../pcode/emu/jit/op/JitSubPieceOp.java | 31 + .../pcode/emu/jit/op/JitSynthSubPieceOp.java | 135 + .../pcode/emu/jit/op/JitSyntheticOp.java | 36 + .../java/ghidra/pcode/emu/jit/op/JitUnOp.java | 65 + .../pcode/emu/jit/op/JitUnimplementedOp.java | 53 + .../pcode/emu/jit/var/AbstractJitOutVar.java | 46 + .../pcode/emu/jit/var/AbstractJitVal.java | 58 + .../pcode/emu/jit/var/AbstractJitVar.java | 44 + .../emu/jit/var/AbstractJitVarnodeVar.java | 55 + .../ghidra/pcode/emu/jit/var/JitConstVal.java | 53 + .../pcode/emu/jit/var/JitDirectMemoryVar.java | 42 + .../emu/jit/var/JitIndirectMemoryVar.java | 71 + .../ghidra/pcode/emu/jit/var/JitInputVar.java | 48 + .../pcode/emu/jit/var/JitLocalOutVar.java | 40 + .../pcode/emu/jit/var/JitMemoryOutVar.java | 52 + .../pcode/emu/jit/var/JitMemoryVar.java | 25 + .../pcode/emu/jit/var/JitMissingVar.java | 61 + .../ghidra/pcode/emu/jit/var/JitOutVar.java | 42 + .../java/ghidra/pcode/emu/jit/var/JitVal.java | 94 + .../java/ghidra/pcode/emu/jit/var/JitVar.java | 37 + .../pcode/emu/jit/var/JitVarnodeVar.java | 35 + .../exec/AddressesReadPcodeArithmetic.java | 13 +- .../exec/AnnotatedPcodeUseropLibrary.java | 268 +- .../pcode/exec/BytesPcodeArithmetic.java | 9 +- .../exec/BytesPcodeExecutorStateSpace.java | 27 +- .../pcode/exec/LocationPcodeArithmetic.java | 7 +- .../pcode/exec/PairedPcodeArithmetic.java | 29 +- .../ghidra/pcode/exec/PcodeArithmetic.java | 228 +- .../java/ghidra/pcode/exec/PcodeExecutor.java | 222 +- .../java/ghidra/pcode/exec/PcodeFrame.java | 2 +- .../java/ghidra/pcode/exec/PcodeProgram.java | 62 +- .../ghidra/pcode/exec/PcodeUseropLibrary.java | 105 +- .../exec/SleighPcodeUseropDefinition.java | 33 +- .../pcode/exec/SleighProgramCompiler.java | 7 +- .../emu/jit/AbstractPcodeEmulatorTest.java | 301 +++ .../pcode/emu/jit/JitJvmTypeUtilsTest.java | 68 + .../pcode/emu/jit/JitPcodeEmulatorTest.java | 305 +++ .../pcode/emu/jit/PlainPcodeEmulatorTest.java | 26 + .../exec/AnnotatedPcodeUseropLibraryTest.java | 31 +- .../Emulation/src/test/resources/mock.pspec | 1 + .../Emulation/src/test/resources/mock.slaspec | 4 +- Ghidra/Framework/Generic/build.gradle | 9 +- .../main/java/generic/test/AbstractGTest.java | 90 +- .../generic/test/AbstractGenericTest.java | 286 +-- .../generic/test/rule/IgnoreUnfinished.java | 38 + .../test/rule/IgnoreUnfinishedRule.java | 47 + .../test/rule/IgnoreUnfinishedStatement.java | 44 + .../java/ghidra/lifecycle/Experimental.java | 0 .../main/java/ghidra/lifecycle/Internal.java | 0 .../java/ghidra/lifecycle/Transitional.java | 0 .../java/ghidra/lifecycle/Unfinished.java | 0 .../main/java/ghidra/util/MathUtilities.java | 18 + .../app/plugin/assembler/AssemblyBuffer.java | 60 +- .../util/pcode/AbstractPcodeFormatter.java | 1 + .../ghidra/app/util/pcode/PcodeFormatter.java | 27 +- .../ghidra/pcode/floatformat/FloatFormat.java | 85 +- .../program/model/address/SpecialAddress.java | 27 +- .../ghidra/program/model/pcode/PcodeOp.java | 2 +- .../assembler/sleigh/x64AssemblyTest.java | 12 +- Ghidra/Processors/Toy/data/languages/toy.sinc | 4 + .../Toy/data/languages/toyInstructions.sinc | 2 +- .../ghidra/pcode/emu/jit/AbstractJitTest.java | 136 + .../jit/analysis/JitAllocationModelTest.java | 111 + .../jit/analysis/JitControlFlowModelTest.java | 482 ++++ .../jit/analysis/JitDataFlowModelTest.java | 660 +++++ .../emu/jit/analysis/JitOpUseModelTest.java | 83 + .../emu/jit/analysis/JitTypeModelTest.java | 176 ++ .../decode/JitPassageDecoderTestAccess.java | 39 + .../emu/jit/gen/JitCodeGeneratorTest.java | 2263 +++++++++++++++++ .../GhidraClass/Debugger/B4-Modeling.html | 71 +- .../GhidraClass/Debugger/B4-Modeling.md | 12 +- .../ghidra_scripts/ModelingScript.java | 8 +- 320 files changed, 32638 insertions(+), 630 deletions(-) create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/app/util/opinion/JitLogLoader.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitBytesPcodeExecutorState.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitBytesPcodeExecutorStatePiece.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitCompiler.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitConfiguration.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitDefaultBytesPcodeExecutorState.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitJvmTypeUtils.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitPassage.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitPcodeEmulator.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitPcodeThread.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/JitThreadBytesPcodeExecutorState.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitAllocationModel.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitAnalysisContext.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitControlFlowModel.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitDataFlowArithmetic.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitDataFlowBlockAnalyzer.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitDataFlowExecutor.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitDataFlowModel.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitDataFlowState.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitDataFlowUseropLibrary.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitOpUpwardVisitor.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitOpUseModel.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitOpVisitor.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitType.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitTypeBehavior.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitTypeModel.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/analysis/JitVarScopeModel.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/decode/DecodedStride.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/decode/DecoderExecutor.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/decode/DecoderForOnePassage.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/decode/DecoderForOneStride.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/decode/DecoderUseropLibrary.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/decode/JitPassageDecoder.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/ExceptionHandler.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/FieldForArrDirect.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/FieldForContext.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/FieldForExitSlot.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/FieldForSpaceIndirect.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/FieldForUserop.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/FieldForVarnode.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/FieldReq.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/GenConsts.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/InstanceFieldReq.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/JitCodeGenerator.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/StaticFieldReq.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/BinOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/BitwiseBinOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/BoolAndOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/BoolNegateOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/BoolOrOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/BoolXorOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/BranchIndOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/BranchOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/CBranchOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/CallOtherMissingOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/CallOtherOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/CatenateOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/CompareFloatOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/CompareIntBinOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/CopyOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatAbsOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatAddOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatCeilOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatDivOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatEqualOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatFloat2FloatOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatFloorOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatInt2FloatOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatLessEqualOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatLessOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatMultOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatNaNOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatNegOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatNotEqualOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatRoundOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatSqrtOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatSubOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/FloatTruncOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/Int2CompOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntAddOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntAndOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntCarryOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntDivOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntEqualOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntLeftOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntLessEqualOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntLessOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntMultOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntNegateOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntNotEqualOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntOrOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntRemOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntRightOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntSBorrowOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntSCarryOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntSDivOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntSExtOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntSLessEqualOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntSLessOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntSRemOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntSRightOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntSubOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntXorOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/IntZExtOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/LoadOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/LzCountOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/NopOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/OpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/PhiOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/PopCountOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/ShiftIntBinOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/StoreOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/SubPieceOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/SynthSubPieceOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/UnOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/op/UnimplementedOpGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/tgt/JitCompiledPassage.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/tgt/JitCompiledPassageClass.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/DoubleReadGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/DoubleWriteGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/ExportsLegAccessGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/FloatReadGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/FloatWriteGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/IntReadGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/IntWriteGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/LongReadGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/LongWriteGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/MethodAccessGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/MpIntReadGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/MpIntWriteGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/MpTypedAccessGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/TypeConversions.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/type/TypedAccessGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/var/ConstValGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/var/DirectMemoryVarGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/var/InputVarGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/var/LocalOutVarGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/var/LocalVarGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/var/MemoryOutVarGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/var/MemoryVarGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/var/MissingVarGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/var/ValGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/gen/var/VarGen.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitBinOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitBoolAndOp.java rename Ghidra/{Debug/ProposedUtils/src/main/java/ghidra/util/ComparatorMath.java => Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitBoolBinOp.java} (53%) create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitBoolNegateOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitBoolOrOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitBoolUnOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitBoolXorOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitBranchIndOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitBranchOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitCBranchOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitCallOtherDefOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitCallOtherMissingOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitCallOtherOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitCallOtherOpIf.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitCatenateOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitCopyOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitDefOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatAbsOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatAddOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatBinOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatCeilOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatDivOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatEqualOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatFloat2FloatOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatFloorOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatInt2FloatOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatLessEqualOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatLessOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatMultOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatNaNOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatNegOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatNotEqualOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatRoundOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatSqrtOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatSubOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatTestOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatTruncOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitFloatUnOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitInt2CompOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntAddOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntAndOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntBinOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntCarryOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntDivOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntEqualOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntLeftOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntLessEqualOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntLessOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntMultOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntNegateOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntNotEqualOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntOrOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntRemOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntRightOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntSBorrowOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntSCarryOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntSDivOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntSExtOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntSLessEqualOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntSLessOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntSRemOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntSRightOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntSubOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntTestOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntUnOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntXorOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitIntZExtOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitLoadOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitLzCountOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitNopOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitPhiOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitPopCountOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitStoreOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitSubPieceOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitSynthSubPieceOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitSyntheticOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitUnOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/op/JitUnimplementedOp.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/AbstractJitOutVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/AbstractJitVal.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/AbstractJitVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/AbstractJitVarnodeVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitConstVal.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitDirectMemoryVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitIndirectMemoryVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitInputVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitLocalOutVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitMemoryOutVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitMemoryVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitMissingVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitOutVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitVal.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitVar.java create mode 100644 Ghidra/Framework/Emulation/src/main/java/ghidra/pcode/emu/jit/var/JitVarnodeVar.java create mode 100644 Ghidra/Framework/Emulation/src/test/java/ghidra/pcode/emu/jit/AbstractPcodeEmulatorTest.java create mode 100644 Ghidra/Framework/Emulation/src/test/java/ghidra/pcode/emu/jit/JitJvmTypeUtilsTest.java create mode 100644 Ghidra/Framework/Emulation/src/test/java/ghidra/pcode/emu/jit/JitPcodeEmulatorTest.java create mode 100644 Ghidra/Framework/Emulation/src/test/java/ghidra/pcode/emu/jit/PlainPcodeEmulatorTest.java create mode 100644 Ghidra/Framework/Generic/src/main/java/generic/test/rule/IgnoreUnfinished.java create mode 100644 Ghidra/Framework/Generic/src/main/java/generic/test/rule/IgnoreUnfinishedRule.java create mode 100644 Ghidra/Framework/Generic/src/main/java/generic/test/rule/IgnoreUnfinishedStatement.java rename Ghidra/Framework/{Emulation => Generic}/src/main/java/ghidra/lifecycle/Experimental.java (100%) rename Ghidra/Framework/{Emulation => Generic}/src/main/java/ghidra/lifecycle/Internal.java (100%) rename Ghidra/Framework/{Emulation => Generic}/src/main/java/ghidra/lifecycle/Transitional.java (100%) rename Ghidra/Framework/{Emulation => Generic}/src/main/java/ghidra/lifecycle/Unfinished.java (100%) create mode 100644 Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/pcode/emu/jit/AbstractJitTest.java create mode 100644 Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/pcode/emu/jit/analysis/JitAllocationModelTest.java create mode 100644 Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/pcode/emu/jit/analysis/JitControlFlowModelTest.java create mode 100644 Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/pcode/emu/jit/analysis/JitDataFlowModelTest.java create mode 100644 Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/pcode/emu/jit/analysis/JitOpUseModelTest.java create mode 100644 Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/pcode/emu/jit/analysis/JitTypeModelTest.java create mode 100644 Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/pcode/emu/jit/decode/JitPassageDecoderTestAccess.java create mode 100644 Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/pcode/emu/jit/gen/JitCodeGeneratorTest.java 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