GP-0: Fix tests.

This commit is contained in:
Dan 2023-11-14 09:36:30 -05:00
parent ba30f4b0bb
commit 5654daa89d
7 changed files with 30 additions and 18 deletions

View file

@ -1038,7 +1038,7 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
} }
if (current.getTrace() != newTrace) { if (current.getTrace() != newTrace) {
/** /**
* The snap needs to match upon re-activating this trace, lset it look like the user * The snap needs to match upon re-activating this trace, lest it look like the user
* intentionally navigated to the past. That may cause the control mode to switch * intentionally navigated to the past. That may cause the control mode to switch
* off of "Target." * off of "Target."
*/ */

View file

@ -150,7 +150,7 @@ public class DBTraceObject extends DBAnnotatedObject implements TraceObject {
} }
}; };
private CachedLifespanValues cachedLifespanValues = null; private CachedLifespanValues cachedLifespanValues = null;
private MutableLifeSet cachedLife = null; private volatile MutableLifeSet cachedLife = null;
public DBTraceObject(DBTraceObjectManager manager, DBCachedObjectStore<?> store, public DBTraceObject(DBTraceObjectManager manager, DBCachedObjectStore<?> store,
DBRecord record) { DBRecord record) {
@ -223,11 +223,11 @@ public class DBTraceObject extends DBAnnotatedObject implements TraceObject {
} }
} }
MutableLifeSet result = new DefaultLifeSet(); MutableLifeSet result = new DefaultLifeSet();
// NOTE: connected ranges should already be coalesced
// No need to apply discreet domain
getCanonicalParents(Lifespan.ALL).forEach(v -> result.add(v.getLifespan())); getCanonicalParents(Lifespan.ALL).forEach(v -> result.add(v.getLifespan()));
cachedLife = result; cachedLife = result;
return result; synchronized (result) {
return DefaultLifeSet.copyOf(result);
}
} }
} }

View file

@ -23,6 +23,8 @@ import java.util.function.Predicate;
import db.DBRecord; import db.DBRecord;
import ghidra.program.model.address.AddressFactory; import ghidra.program.model.address.AddressFactory;
import ghidra.program.model.address.AddressSetView; import ghidra.program.model.address.AddressSetView;
import ghidra.trace.database.target.ValueSpace.AddressDimension;
import ghidra.trace.database.target.ValueSpace.EntryKeyDimension;
import ghidra.trace.model.Lifespan; import ghidra.trace.model.Lifespan;
import ghidra.util.database.*; import ghidra.util.database.*;
import ghidra.util.database.spatial.AbstractConstraintsTree; import ghidra.util.database.spatial.AbstractConstraintsTree;
@ -58,7 +60,14 @@ public class DBTraceObjectValueRStarTree extends AbstractHyperRStarTree< //
public AddressSetView getAddressSetView(Lifespan at, public AddressSetView getAddressSetView(Lifespan at,
Predicate<? super InternalTraceObjectValue> predicate) { Predicate<? super InternalTraceObjectValue> predicate) {
return new DBTraceObjectValueMapAddressSetView(factory, lock, this, predicate); return new DBTraceObjectValueMapAddressSetView(factory, lock,
this.reduce(TraceObjectValueQuery.intersecting(
EntryKeyDimension.INSTANCE.absoluteMin(),
EntryKeyDimension.INSTANCE.absoluteMax(),
at,
AddressDimension.INSTANCE.absoluteMin(),
AddressDimension.INSTANCE.absoluteMax())),
predicate);
} }
} }

View file

@ -15,7 +15,8 @@
*/ */
package ghidra.trace.database.memory; package ghidra.trace.database.memory;
import static org.junit.Assert.*; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.io.IOException; import java.io.IOException;
import java.util.Set; import java.util.Set;
@ -23,6 +24,7 @@ import java.util.Set;
import org.junit.*; import org.junit.*;
import db.Transaction; import db.Transaction;
import ghidra.program.model.address.AddressSet;
import ghidra.program.model.lang.LanguageID; import ghidra.program.model.lang.LanguageID;
import ghidra.test.AbstractGhidraHeadlessIntegrationTest; import ghidra.test.AbstractGhidraHeadlessIntegrationTest;
import ghidra.trace.database.ToyDBTraceBuilder; import ghidra.trace.database.ToyDBTraceBuilder;
@ -151,8 +153,9 @@ public abstract class AbstractDBTraceMemoryManagerRegionsTest
Set.of(TraceMemoryFlag.READ, TraceMemoryFlag.EXECUTE)); Set.of(TraceMemoryFlag.READ, TraceMemoryFlag.EXECUTE));
} }
assertEquals(b.set(b.range(0x1000, 0x1fff)), memory.getRegionsAddressSet(0)); assertEquals(b.set(b.range(0x1000, 0x1fff)),
assertEquals(b.set(), memory.getRegionsAddressSet(-1)); new AddressSet(memory.getRegionsAddressSet(0)));
assertEquals(b.set(), new AddressSet(memory.getRegionsAddressSet(-1)));
} }
@Test @Test
@ -164,8 +167,9 @@ public abstract class AbstractDBTraceMemoryManagerRegionsTest
Set.of(TraceMemoryFlag.READ, TraceMemoryFlag.EXECUTE)); Set.of(TraceMemoryFlag.READ, TraceMemoryFlag.EXECUTE));
} }
assertEquals(b.set(b.range(0x1000, 0x1fff)), memory.getRegionsAddressSetWith(0, r -> true)); assertEquals(b.set(b.range(0x1000, 0x1fff)),
assertEquals(b.set(), memory.getRegionsAddressSetWith(-1, r -> true)); new AddressSet(memory.getRegionsAddressSetWith(0, r -> true)));
assertEquals(b.set(), memory.getRegionsAddressSetWith(0, r -> false)); assertEquals(b.set(), new AddressSet(memory.getRegionsAddressSetWith(-1, r -> true)));
assertEquals(b.set(), new AddressSet(memory.getRegionsAddressSetWith(0, r -> false)));
} }
} }

View file

@ -1274,8 +1274,7 @@ public class GdbMethodsTest extends AbstractGdbTraceRmiTest {
tb = new ToyDBTraceBuilder((Trace) mdo.get()); tb = new ToyDBTraceBuilder((Trace) mdo.get());
waitStopped(); waitStopped();
long snap = 0; long snap = 0;
long pcOff = long pcOff = Long.decode(conn.executeCapture("print/x $pc").split("=")[1].strip());
Integer.decode(conn.executeCapture("print/x $pc").split("=")[1].strip());
TraceObject inf1 = Objects.requireNonNull(tb.obj("Inferiors[1]")); TraceObject inf1 = Objects.requireNonNull(tb.obj("Inferiors[1]"));
readMem.invoke(Map.ofEntries( readMem.invoke(Map.ofEntries(
@ -1306,8 +1305,7 @@ public class GdbMethodsTest extends AbstractGdbTraceRmiTest {
try (ManagedDomainObject mdo = openDomainObject("/New Traces/gdb/bash")) { try (ManagedDomainObject mdo = openDomainObject("/New Traces/gdb/bash")) {
tb = new ToyDBTraceBuilder((Trace) mdo.get()); tb = new ToyDBTraceBuilder((Trace) mdo.get());
waitStopped(); waitStopped();
long pcOff = long pcOff = Long.decode(conn.executeCapture("print/x $pc").split("=")[1].strip());
Integer.decode(conn.executeCapture("print/x $pc").split("=")[1].strip());
TraceObject inf1 = Objects.requireNonNull(tb.obj("Inferiors[1]")); TraceObject inf1 = Objects.requireNonNull(tb.obj("Inferiors[1]"));
writeMem.invoke(Map.ofEntries( writeMem.invoke(Map.ofEntries(

View file

@ -887,6 +887,7 @@ public class LldbCommandsTest extends AbstractLldbTraceRmiTest {
assertEquals( assertEquals(
""" """
Parent Key Span Value Type Parent Key Span Value Type
Test.Objects[1] vaddr [0,+inf) ram:deadbeef ADDRESS
Test.Objects[1] vbool [0,+inf) True BOOL Test.Objects[1] vbool [0,+inf) True BOOL
Test.Objects[1] vboolarr [0,+inf) [True, False] BOOL_ARR Test.Objects[1] vboolarr [0,+inf) [True, False] BOOL_ARR
Test.Objects[1] vbyte [0,+inf) 1 BYTE Test.Objects[1] vbyte [0,+inf) 1 BYTE
@ -900,8 +901,7 @@ public class LldbCommandsTest extends AbstractLldbTraceRmiTest {
Test.Objects[1] vobj [0,+inf) Test.Objects[1] OBJECT Test.Objects[1] vobj [0,+inf) Test.Objects[1] OBJECT
Test.Objects[1] vshort [0,+inf) 2 SHORT Test.Objects[1] vshort [0,+inf) 2 SHORT
Test.Objects[1] vshortarr [0,+inf) [1, 2, 3] SHORT_ARR Test.Objects[1] vshortarr [0,+inf) [1, 2, 3] SHORT_ARR
Test.Objects[1] vstring [0,+inf) '"Hello"' STRING Test.Objects[1] vstring [0,+inf) '"Hello"' STRING"""
Test.Objects[1] vaddr [0,+inf) ram:deadbeef ADDRESS"""
.replaceAll(" ", "") .replaceAll(" ", "")
.replaceAll("\n", ""), .replaceAll("\n", ""),
extractOutSection(out, "---GetValues---").replaceAll(" ", "").replaceAll("\n", "")); extractOutSection(out, "---GetValues---").replaceAll(" ", "").replaceAll("\n", ""));

View file

@ -188,6 +188,7 @@ public class LldbMethodsTest extends AbstractLldbTraceRmiTest {
.getValuePaths(Lifespan.at(0), .getValuePaths(Lifespan.at(0),
PathPredicates.parse("Processes[].Watchpoints[]")) PathPredicates.parse("Processes[].Watchpoints[]"))
.map(p -> p.getLastEntry()) .map(p -> p.getLastEntry())
.sorted(Comparator.comparing(TraceObjectValue::getEntryKey))
.toList(); .toList();
assertEquals(3, procWatchLocVals.size()); assertEquals(3, procWatchLocVals.size());
AddressRange rangeMain0 = AddressRange rangeMain0 =