Merge remote-tracking branch 'origin/GP-0-master_Dan_testFixes-2023-11-14-1'

This commit is contained in:
Ryan Kurtz 2023-11-14 12:00:48 -05:00
commit 0f961a5f55
7 changed files with 30 additions and 18 deletions

View File

@ -1038,7 +1038,7 @@ public class DebuggerTraceManagerServicePlugin extends Plugin
}
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
* off of "Target."
*/

View File

@ -150,7 +150,7 @@ public class DBTraceObject extends DBAnnotatedObject implements TraceObject {
}
};
private CachedLifespanValues cachedLifespanValues = null;
private MutableLifeSet cachedLife = null;
private volatile MutableLifeSet cachedLife = null;
public DBTraceObject(DBTraceObjectManager manager, DBCachedObjectStore<?> store,
DBRecord record) {
@ -223,11 +223,11 @@ public class DBTraceObject extends DBAnnotatedObject implements TraceObject {
}
}
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()));
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 ghidra.program.model.address.AddressFactory;
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.util.database.*;
import ghidra.util.database.spatial.AbstractConstraintsTree;
@ -58,7 +60,14 @@ public class DBTraceObjectValueRStarTree extends AbstractHyperRStarTree< //
public AddressSetView getAddressSetView(Lifespan at,
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;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.io.IOException;
import java.util.Set;
@ -23,6 +24,7 @@ import java.util.Set;
import org.junit.*;
import db.Transaction;
import ghidra.program.model.address.AddressSet;
import ghidra.program.model.lang.LanguageID;
import ghidra.test.AbstractGhidraHeadlessIntegrationTest;
import ghidra.trace.database.ToyDBTraceBuilder;
@ -151,8 +153,9 @@ public abstract class AbstractDBTraceMemoryManagerRegionsTest
Set.of(TraceMemoryFlag.READ, TraceMemoryFlag.EXECUTE));
}
assertEquals(b.set(b.range(0x1000, 0x1fff)), memory.getRegionsAddressSet(0));
assertEquals(b.set(), memory.getRegionsAddressSet(-1));
assertEquals(b.set(b.range(0x1000, 0x1fff)),
new AddressSet(memory.getRegionsAddressSet(0)));
assertEquals(b.set(), new AddressSet(memory.getRegionsAddressSet(-1)));
}
@Test
@ -164,8 +167,9 @@ public abstract class AbstractDBTraceMemoryManagerRegionsTest
Set.of(TraceMemoryFlag.READ, TraceMemoryFlag.EXECUTE));
}
assertEquals(b.set(b.range(0x1000, 0x1fff)), memory.getRegionsAddressSetWith(0, r -> true));
assertEquals(b.set(), memory.getRegionsAddressSetWith(-1, r -> true));
assertEquals(b.set(), memory.getRegionsAddressSetWith(0, r -> false));
assertEquals(b.set(b.range(0x1000, 0x1fff)),
new AddressSet(memory.getRegionsAddressSetWith(0, r -> true)));
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());
waitStopped();
long snap = 0;
long pcOff =
Integer.decode(conn.executeCapture("print/x $pc").split("=")[1].strip());
long pcOff = Long.decode(conn.executeCapture("print/x $pc").split("=")[1].strip());
TraceObject inf1 = Objects.requireNonNull(tb.obj("Inferiors[1]"));
readMem.invoke(Map.ofEntries(
@ -1306,8 +1305,7 @@ public class GdbMethodsTest extends AbstractGdbTraceRmiTest {
try (ManagedDomainObject mdo = openDomainObject("/New Traces/gdb/bash")) {
tb = new ToyDBTraceBuilder((Trace) mdo.get());
waitStopped();
long pcOff =
Integer.decode(conn.executeCapture("print/x $pc").split("=")[1].strip());
long pcOff = Long.decode(conn.executeCapture("print/x $pc").split("=")[1].strip());
TraceObject inf1 = Objects.requireNonNull(tb.obj("Inferiors[1]"));
writeMem.invoke(Map.ofEntries(

View File

@ -887,6 +887,7 @@ public class LldbCommandsTest extends AbstractLldbTraceRmiTest {
assertEquals(
"""
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] vboolarr [0,+inf) [True, False] BOOL_ARR
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] vshort [0,+inf) 2 SHORT
Test.Objects[1] vshortarr [0,+inf) [1, 2, 3] SHORT_ARR
Test.Objects[1] vstring [0,+inf) '"Hello"' STRING
Test.Objects[1] vaddr [0,+inf) ram:deadbeef ADDRESS"""
Test.Objects[1] vstring [0,+inf) '"Hello"' STRING"""
.replaceAll(" ", "")
.replaceAll("\n", ""),
extractOutSection(out, "---GetValues---").replaceAll(" ", "").replaceAll("\n", ""));

View File

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