From 3e3b2f4062f7155594bc4998454f2e0c91c09853 Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Wed, 28 Jul 2021 10:26:39 -0400 Subject: [PATCH] GP-1058: Added test which manifests the SUBPIECE problem. --- .../exec/trace/TracePcodeEmulatorTest.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java index 2effa373c0..d84487727b 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java @@ -630,4 +630,42 @@ public class TracePcodeEmulatorTest extends AbstractGhidraHeadlessIntegrationTes TraceSleighUtils.evaluate("r1", tb.trace, 1, thread, 0)); } } + + /** + * Test x86's MOVAPS instruction + * + *
+ * This test hits a SUBPIECE instruction where the two input operands have differing sizes.
+ */
+ @Test
+ public void testMOVAPS() throws Throwable {
+ try (ToyDBTraceBuilder tb = new ToyDBTraceBuilder("Test", "x86:LE:64:default")) {
+ Register pc = tb.language.getProgramCounter();
+
+ TraceThread thread = initTrace(tb,
+ List.of(
+ "RIP = 0x00400000;",
+ "RSP = 0x00110000;",
+ "*:8 0x00600000:8 = 0x0123456789abcdef;",
+ "*:8 0x00600008:8 = 0xfedcba9876543210;"),
+ List.of(
+ "MOVAPS XMM0, xmmword ptr [0x00600007]"));
+
+ TracePcodeEmulator emu = new TracePcodeEmulator(tb.trace, 0);
+ PcodeThread