Merge remote-tracking branch 'origin/GP-2636_d-millar_update_on_writeRegisters'

This commit is contained in:
Ryan Kurtz
2023-01-13 08:20:38 -05:00
3 changed files with 9 additions and 2 deletions
@@ -95,7 +95,7 @@ public class DbgLaunchProcessCommand extends AbstractDbgCommand<DbgThread> {
}
private String fixPath(String input) {
if (input.equals("")) {
if (input == null || input.equals("")) {
return null;
}
String output = input;
@@ -21,7 +21,7 @@ import java.util.Map.Entry;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicReference;
import agent.dbgeng.manager.DbgThread;
import agent.dbgeng.manager.*;
import agent.dbgeng.manager.impl.*;
import ghidra.async.AsyncUtils;
import ghidra.async.TypeSpec;
@@ -101,6 +101,7 @@ public interface DbgModelTargetRegisterBank extends DbgModelTargetObject, Target
}
public default CompletableFuture<Void> doWriteRegistersNamed(Map<String, byte[]> values) {
DbgManagerImpl manager = getManager();
DbgThread thread = getParentThread().getThread();
return AsyncUtils.sequence(TypeSpec.VOID).then(seq -> {
requestNativeElements().handle(seq::nextIgnore);
@@ -122,6 +123,8 @@ public interface DbgModelTargetRegisterBank extends DbgModelTargetObject, Target
getParentThread().getThread().writeRegisters(toWrite).handle(seq::next);
// TODO: Should probably filter only effective and normalized writes in the callback
}).then(seq -> {
manager.getEventListeners().fire.threadStateChanged(thread, thread.getState(),
DbgCause.Causes.UNCLAIMED, DbgReason.Reasons.NONE);
broadcast().registersUpdated(getProxy(), values);
seq.exit();
}).finish();
@@ -21,6 +21,7 @@ import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import agent.dbgeng.manager.*;
import agent.dbgeng.manager.impl.DbgManagerImpl;
import agent.dbgeng.manager.impl.DbgRegister;
import agent.dbgeng.model.iface2.*;
import ghidra.async.AsyncUtils;
@@ -141,6 +142,7 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp
@Override
public CompletableFuture<Void> writeRegistersNamed(Map<String, byte[]> values) {
DbgManagerImpl manager = getManager();
return model.gateFuture(thread.listRegisters().thenCompose(regs -> {
return requestElements(false);
}).thenCompose(__ -> {
@@ -159,6 +161,8 @@ public class DbgModelTargetRegisterContainerImpl extends DbgModelTargetObjectImp
return thread.writeRegisters(toWrite);
// TODO: Should probably filter only effective and normalized writes in the callback
}).thenAccept(__ -> {
manager.getEventListeners().fire.threadStateChanged(thread, thread.getState(),
DbgCause.Causes.UNCLAIMED, DbgReason.Reasons.NONE);
broadcast().registersUpdated(getProxy(), values);
}));
}