mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 19:42:36 +02:00
GP-0: A second round of Debugger test fixes.
This commit is contained in:
parent
5808049c83
commit
0405b0562f
3 changed files with 35 additions and 21 deletions
|
@ -111,6 +111,7 @@ public class DebuggerListingProviderTest extends AbstractGhidraHeadedDebuggerGUI
|
|||
waitForPass(() -> {
|
||||
runSwing(() -> listingProvider.goTo(location.getProgram(), location));
|
||||
ProgramLocation confirm = listingProvider.getLocation();
|
||||
assertNotNull(confirm);
|
||||
assertEquals(location.getAddress(), confirm.getAddress());
|
||||
});
|
||||
}
|
||||
|
|
|
@ -139,15 +139,20 @@ public class DebuggerTargetsProviderTest extends AbstractGhidraHeadedDebuggerGUI
|
|||
modelService.addModel(secondModel);
|
||||
waitForSwing();
|
||||
|
||||
clickTreeNode(targetsProvider.tree,
|
||||
targetsProvider.rootNode.findNodeForObject(mb.testModel), MouseEvent.BUTTON1);
|
||||
waitForSwing();
|
||||
assertEquals(mb.testModel, modelService.getCurrentModel());
|
||||
// NB. Expansion is run in background task
|
||||
waitForPass(noExc(() -> {
|
||||
clickTreeNode(targetsProvider.tree,
|
||||
targetsProvider.rootNode.findNodeForObject(mb.testModel), MouseEvent.BUTTON1);
|
||||
waitForSwing();
|
||||
assertEquals(mb.testModel, modelService.getCurrentModel());
|
||||
}));
|
||||
|
||||
clickTreeNode(targetsProvider.tree,
|
||||
targetsProvider.rootNode.findNodeForObject(secondModel), MouseEvent.BUTTON1);
|
||||
waitForSwing();
|
||||
assertEquals(secondModel, modelService.getCurrentModel());
|
||||
waitForPass(noExc(() -> {
|
||||
clickTreeNode(targetsProvider.tree,
|
||||
targetsProvider.rootNode.findNodeForObject(secondModel), MouseEvent.BUTTON1);
|
||||
waitForSwing();
|
||||
assertEquals(secondModel, modelService.getCurrentModel());
|
||||
}));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -60,19 +60,23 @@ public class TraceRecorderAsyncPcodeExecTest extends AbstractGhidraHeadedDebugge
|
|||
SleighExpression expr = SleighProgramCompiler
|
||||
.compileExpression((SleighLanguage) language, "r0 + r1");
|
||||
|
||||
AsyncPcodeExecutor<byte[]> executor =
|
||||
new AsyncPcodeExecutor<>(language, AsyncWrappedPcodeArithmetic.forLanguage(language),
|
||||
new TraceRecorderAsyncPcodeExecutorState(recorder, recorder.getSnap(), thread, 0));
|
||||
|
||||
Register r0 = language.getRegister("r0");
|
||||
Register r1 = language.getRegister("r1");
|
||||
waitForPass(() -> {
|
||||
// TODO: A little brittle: Depends on a specific snap advancement strategy
|
||||
assertEquals(3, trace.getTimeManager().getSnapshotCount());
|
||||
DebuggerRegisterMapper rm = recorder.getRegisterMapper(thread);
|
||||
assertNotNull(rm);
|
||||
assertNotNull(rm.getTargetRegister("r0"));
|
||||
assertNotNull(rm.getTargetRegister("r1"));
|
||||
assertTrue(rm.getRegistersOnTarget().contains(r0));
|
||||
assertTrue(rm.getRegistersOnTarget().contains(r1));
|
||||
});
|
||||
|
||||
AsyncPcodeExecutor<byte[]> executor =
|
||||
new AsyncPcodeExecutor<>(language, AsyncWrappedPcodeArithmetic.forLanguage(language),
|
||||
new TraceRecorderAsyncPcodeExecutorState(recorder, recorder.getSnap(), thread, 0));
|
||||
|
||||
byte[] result = waitOn(expr.evaluate(executor));
|
||||
assertEquals(11, Utils.bytesToLong(result, result.length, language.isBigEndian()));
|
||||
}
|
||||
|
@ -99,20 +103,24 @@ public class TraceRecorderAsyncPcodeExecTest extends AbstractGhidraHeadedDebugge
|
|||
PcodeProgram prog = SleighProgramCompiler.compileProgram((SleighLanguage) language, "test",
|
||||
List.of("r2 = r0 + r1;"), SleighUseropLibrary.NIL);
|
||||
|
||||
Register r0 = language.getRegister("r0");
|
||||
Register r1 = language.getRegister("r1");
|
||||
waitForPass(() -> {
|
||||
// TODO: A little brittle: Depends on a specific snap advancement strategy
|
||||
assertEquals(3, trace.getTimeManager().getSnapshotCount());
|
||||
DebuggerRegisterMapper rm = recorder.getRegisterMapper(thread);
|
||||
assertNotNull(rm);
|
||||
assertNotNull(rm.getTargetRegister("r0"));
|
||||
assertNotNull(rm.getTargetRegister("r1"));
|
||||
assertTrue(rm.getRegistersOnTarget().contains(r0));
|
||||
assertTrue(rm.getRegistersOnTarget().contains(r1));
|
||||
});
|
||||
|
||||
TraceRecorderAsyncPcodeExecutorState asyncState =
|
||||
new TraceRecorderAsyncPcodeExecutorState(recorder, recorder.getSnap(), thread, 0);
|
||||
AsyncPcodeExecutor<byte[]> executor = new AsyncPcodeExecutor<>(
|
||||
language, AsyncWrappedPcodeArithmetic.forLanguage(language), asyncState);
|
||||
|
||||
Register r0 = language.getRegister("r0");
|
||||
Register r1 = language.getRegister("r1");
|
||||
waitForPass(() -> {
|
||||
DebuggerRegisterMapper rm = recorder.getRegisterMapper(thread);
|
||||
assertNotNull(rm);
|
||||
assertTrue(rm.getRegistersOnTarget().contains(r0));
|
||||
assertTrue(rm.getRegistersOnTarget().contains(r1));
|
||||
});
|
||||
|
||||
waitOn(executor.executeAsync(prog, SleighUseropLibrary.nil()));
|
||||
waitOn(asyncState.getVar(language.getRegister("r2")));
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue