GP-2635: GDB: Refresh stack on register edits (ensure pc up to date)

This commit is contained in:
Dan
2022-10-11 15:34:45 -04:00
parent 926286ee6f
commit 63ebf07dd2
2 changed files with 7 additions and 3 deletions
@@ -22,7 +22,8 @@ import java.util.concurrent.CompletableFuture;
import agent.gdb.manager.GdbStackFrame; import agent.gdb.manager.GdbStackFrame;
import agent.gdb.manager.impl.cmd.GdbStateChangeRecord; import agent.gdb.manager.impl.cmd.GdbStateChangeRecord;
import ghidra.dbg.agent.DefaultTargetObject; import ghidra.dbg.agent.DefaultTargetObject;
import ghidra.dbg.target.*; import ghidra.dbg.target.TargetObject;
import ghidra.dbg.target.TargetStackFrame;
import ghidra.dbg.target.schema.*; import ghidra.dbg.target.schema.*;
import ghidra.dbg.util.PathUtils; import ghidra.dbg.util.PathUtils;
import ghidra.lifecycle.Internal; import ghidra.lifecycle.Internal;
@@ -34,8 +35,9 @@ import ghidra.program.model.address.Address;
@TargetElementType(type = Void.class) }, @TargetElementType(type = Void.class) },
attributes = { attributes = {
@TargetAttributeType(type = Void.class) }) @TargetAttributeType(type = Void.class) })
public class GdbModelTargetStackFrame extends DefaultTargetObject<TargetObject, GdbModelTargetStack> public class GdbModelTargetStackFrame
implements TargetStackFrame, TargetAggregate, GdbModelSelectableObject { extends DefaultTargetObject<TargetObject, GdbModelTargetStack>
implements TargetStackFrame, GdbModelSelectableObject {
public static final String FUNC_ATTRIBUTE_NAME = PREFIX_INVISIBLE + "function"; public static final String FUNC_ATTRIBUTE_NAME = PREFIX_INVISIBLE + "function";
public static final String FROM_ATTRIBUTE_NAME = PREFIX_INVISIBLE + "from"; // TODO public static final String FROM_ATTRIBUTE_NAME = PREFIX_INVISIBLE + "from"; // TODO
@@ -179,6 +179,8 @@ public class GdbModelTargetStackFrameRegisterContainer
return frame.frame.writeRegisters(toWrite); return frame.frame.writeRegisters(toWrite);
}).thenCompose(__ -> { }).thenCompose(__ -> {
return updateRegisterValues(toWrite.keySet()); return updateRegisterValues(toWrite.keySet());
}).thenCompose(__ -> {
return frame.getParent().fetchElements(true);
})).thenApply(__ -> null); })).thenApply(__ -> null);
} }