mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2024-10-23 13:41:04 +00:00
Merge remote-tracking branch 'origin/GP-0-master_Dan_testFixes-2023-11-14-1'
This commit is contained in:
commit
0f961a5f55
|
@ -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."
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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", ""));
|
||||
|
|
|
@ -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 =
|
||||
|
|
Loading…
Reference in New Issue
Block a user