GP-0: Fix timing and null thread issues in tests

This commit is contained in:
Dan
2023-01-24 10:22:30 -05:00
parent e5a8f26347
commit 60c5da018d
3 changed files with 13 additions and 6 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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();