mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-25 17:00:36 -09:00
GP-0: Fix timing and null thread issues in tests
This commit is contained in:
@@ -427,7 +427,8 @@ public class ObjectBasedTraceRecorder implements TraceRecorder {
|
||||
|
||||
@Override
|
||||
public Set<TargetRegisterBank> getTargetRegisterBanks(TraceThread thread, int frameLevel) {
|
||||
return Set.of(objectRecorder.getTargetFrameInterface(thread, frameLevel, TargetRegisterBank.class));
|
||||
return Set.of(
|
||||
objectRecorder.getTargetFrameInterface(thread, frameLevel, TargetRegisterBank.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -504,7 +505,7 @@ public class ObjectBasedTraceRecorder implements TraceRecorder {
|
||||
protected TargetRegisterContainer getTargetRegisterContainer(TraceThread thread,
|
||||
int frameLevel) {
|
||||
if (!(thread instanceof TraceObjectThread tot)) {
|
||||
throw new AssertionError();
|
||||
throw new AssertionError("thread = " + thread);
|
||||
}
|
||||
TraceObject objThread = tot.getObject();
|
||||
TraceObject regContainer = objThread.queryRegisterContainer(frameLevel);
|
||||
|
||||
@@ -527,7 +527,8 @@ public interface TraceRecorder {
|
||||
return writeMemory(address, data);
|
||||
}
|
||||
if (address.isRegisterAddress()) {
|
||||
return writeRegister(platform, thread, frameLevel, address, data);
|
||||
return writeRegister(platform, Objects.requireNonNull(thread), frameLevel, address,
|
||||
data);
|
||||
}
|
||||
throw new IllegalArgumentException("Address is not in a recognized space: " + address);
|
||||
}
|
||||
@@ -599,6 +600,9 @@ public interface TraceRecorder {
|
||||
if (address.isMemoryAddress()) {
|
||||
return isMemoryOnTarget(address);
|
||||
}
|
||||
if (thread == null) { // register-space addresses require a thread
|
||||
return false;
|
||||
}
|
||||
Register register = platform.getLanguage().getRegister(address, size);
|
||||
if (register == null) {
|
||||
throw new IllegalArgumentException("Cannot identify the (single) register: " + address);
|
||||
|
||||
@@ -432,13 +432,13 @@ public class DebuggerStateEditingServiceTest extends AbstractGhidraHeadedDebugge
|
||||
(TargetRegisterBank) mb.testThread1.getCachedAttribute("RegisterBank");
|
||||
traceManager.openTrace(tb.trace);
|
||||
activateTrace();
|
||||
TraceThread thread = recorder.getTraceThread(mb.testThread1);
|
||||
TraceThread thread = waitForValue(() -> recorder.getTraceThread(mb.testThread1));
|
||||
traceManager.activateThread(thread);
|
||||
waitForSwing();
|
||||
editingService.setCurrentMode(recorder.getTrace(), StateEditingMode.RW_TARGET);
|
||||
|
||||
StateEditor editor = createStateEditor();
|
||||
assertTrue(editor.isRegisterEditable(r0));
|
||||
waitForPass(() -> assertTrue(editor.isRegisterEditable(r0)));
|
||||
waitOn(editor.setRegister(rv1234));
|
||||
waitForPass(() -> {
|
||||
TraceMemorySpace regs =
|
||||
@@ -447,7 +447,7 @@ public class DebuggerStateEditingServiceTest extends AbstractGhidraHeadedDebugge
|
||||
RegisterValue value = regs.getValue(getPlatform(), traceManager.getCurrentSnap(), r0);
|
||||
assertEquals(rv1234, value);
|
||||
});
|
||||
assertTrue(editor.isRegisterEditable(r0h));
|
||||
waitForPass(() -> assertTrue(editor.isRegisterEditable(r0h)));
|
||||
waitOn(editor.setRegister(rvHigh1234));
|
||||
|
||||
assertArrayEquals(mb.arr(0, 0, 4, 0xd2, 0, 0, 4, 0xd2), waitOn(bank.readRegister("r0")));
|
||||
@@ -478,6 +478,7 @@ public class DebuggerStateEditingServiceTest extends AbstractGhidraHeadedDebugge
|
||||
public void testWriteTargetMemoryNotAliveErr() throws Throwable {
|
||||
createAndOpenTrace();
|
||||
activateTrace();
|
||||
waitForSwing();
|
||||
editingService.setCurrentMode(tb.trace, StateEditingMode.RW_TARGET);
|
||||
waitForSwing();
|
||||
|
||||
@@ -492,6 +493,7 @@ public class DebuggerStateEditingServiceTest extends AbstractGhidraHeadedDebugge
|
||||
public void testWriteTargetRegisterNotAliveErr() throws Throwable {
|
||||
createAndOpenTrace();
|
||||
activateTrace();
|
||||
waitForSwing();
|
||||
editingService.setCurrentMode(tb.trace, StateEditingMode.RW_TARGET);
|
||||
waitForSwing();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user