mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 18:29:37 +02:00
Merge remote-tracking branch 'origin/GP-1824_d-millar_field_for_bpt_expressions'
This commit is contained in:
commit
0023a51836
8 changed files with 64 additions and 22 deletions
|
@ -24,9 +24,16 @@ import ghidra.dbg.target.schema.*;
|
|||
import ghidra.dbg.util.PathUtils;
|
||||
import ghidra.program.model.address.*;
|
||||
|
||||
@TargetObjectSchemaInfo(name = "Module", elements = {
|
||||
@TargetElementType(type = Void.class) }, attributes = {
|
||||
@TargetAttributeType(name = "Symbols", type = DbgModelTargetSymbolContainerImpl.class, required = true, fixed = true),
|
||||
@TargetObjectSchemaInfo(
|
||||
name = "Module",
|
||||
elements = {
|
||||
@TargetElementType(type = Void.class) },
|
||||
attributes = {
|
||||
@TargetAttributeType(
|
||||
name = "Symbols",
|
||||
type = DbgModelTargetSymbolContainerImpl.class,
|
||||
required = true,
|
||||
fixed = true),
|
||||
@TargetAttributeType(name = "BaseAddress", type = Address.class),
|
||||
@TargetAttributeType(name = "ImageName", type = String.class),
|
||||
@TargetAttributeType(name = "TimeStamp", type = Integer.class),
|
||||
|
|
|
@ -20,17 +20,22 @@ import java.util.Map;
|
|||
|
||||
import agent.dbgeng.manager.impl.DbgMinimalSymbol;
|
||||
import agent.dbgeng.model.iface2.DbgModelTargetSymbol;
|
||||
import ghidra.dbg.target.TargetObject;
|
||||
import ghidra.dbg.target.TargetSymbol;
|
||||
import ghidra.dbg.target.*;
|
||||
import ghidra.dbg.target.schema.*;
|
||||
import ghidra.dbg.util.PathUtils;
|
||||
import ghidra.program.model.address.Address;
|
||||
|
||||
@TargetObjectSchemaInfo(name = "Symbol", elements = {
|
||||
@TargetElementType(type = Void.class) }, attributes = {
|
||||
@TargetAttributeType(name = TargetSymbol.NAMESPACE_ATTRIBUTE_NAME, type = DbgModelTargetSymbolContainerImpl.class),
|
||||
@TargetObjectSchemaInfo(
|
||||
name = "Symbol",
|
||||
elements = {
|
||||
@TargetElementType(type = Void.class) },
|
||||
attributes = {
|
||||
@TargetAttributeType(
|
||||
name = TargetSymbol.NAMESPACE_ATTRIBUTE_NAME,
|
||||
type = DbgModelTargetSymbolContainerImpl.class),
|
||||
@TargetAttributeType(name = TargetObject.VALUE_ATTRIBUTE_NAME, type = Address.class),
|
||||
@TargetAttributeType(name = TargetSymbol.SIZE_ATTRIBUTE_NAME, type = long.class),
|
||||
@TargetAttributeType(name = TargetBreakpointSpec.AS_BPT_ATTRIBUTE_NAME, type = String.class),
|
||||
@TargetAttributeType(name = "Name", type = String.class),
|
||||
@TargetAttributeType(name = "Size", type = long.class),
|
||||
@TargetAttributeType(name = "TypeId", type = int.class),
|
||||
|
@ -58,11 +63,16 @@ public class DbgModelTargetSymbolImpl extends DbgModelTargetObjectImpl
|
|||
this.value = symbols.getModel().getAddressSpace("ram").getAddress(symbol.getAddress());
|
||||
this.size = symbol.getSize();
|
||||
|
||||
TargetObject module = symbols.getParent();
|
||||
String moduleName =
|
||||
(String) module.getCachedAttribute(TargetObject.SHORT_DISPLAY_ATTRIBUTE_NAME);
|
||||
changeAttributes(List.of(), List.of(), Map.of( //
|
||||
// TODO: DATA_TYPE
|
||||
NAMESPACE_ATTRIBUTE_NAME, symbols, //
|
||||
VALUE_ATTRIBUTE_NAME, value, //
|
||||
SIZE_ATTRIBUTE_NAME, size, //
|
||||
TargetBreakpointSpec.AS_BPT_ATTRIBUTE_NAME, //
|
||||
moduleName + "!" + symbol.getName(), //
|
||||
"Name", symbol.getName(), //
|
||||
"Size", size, //
|
||||
"TypeId", symbol.getTypeId(), //
|
||||
|
|
|
@ -20,8 +20,7 @@ import java.util.Map;
|
|||
|
||||
import agent.gdb.manager.impl.GdbMinimalSymbol;
|
||||
import ghidra.dbg.agent.DefaultTargetObject;
|
||||
import ghidra.dbg.target.TargetObject;
|
||||
import ghidra.dbg.target.TargetSymbol;
|
||||
import ghidra.dbg.target.*;
|
||||
import ghidra.dbg.target.schema.*;
|
||||
import ghidra.dbg.util.PathUtils;
|
||||
import ghidra.program.model.address.Address;
|
||||
|
@ -31,6 +30,7 @@ import ghidra.program.model.address.Address;
|
|||
elements = {
|
||||
@TargetElementType(type = Void.class) },
|
||||
attributes = {
|
||||
@TargetAttributeType(name = TargetBreakpointSpec.AS_BPT_ATTRIBUTE_NAME, type = String.class),
|
||||
@TargetAttributeType(type = Void.class) })
|
||||
public class GdbModelTargetSymbol extends
|
||||
DefaultTargetObject<TargetObject, GdbModelTargetSymbolContainer> implements TargetSymbol {
|
||||
|
@ -58,7 +58,8 @@ public class GdbModelTargetSymbol extends
|
|||
// TODO: DATA_TYPE
|
||||
VALUE_ATTRIBUTE_NAME, value,
|
||||
SIZE_ATTRIBUTE_NAME, size,
|
||||
DISPLAY_ATTRIBUTE_NAME, symbol.getName()),
|
||||
DISPLAY_ATTRIBUTE_NAME, symbol.getName(),
|
||||
TargetBreakpointSpec.AS_BPT_ATTRIBUTE_NAME, symbol.getName()),
|
||||
"Initialized");
|
||||
}
|
||||
|
||||
|
|
|
@ -21,11 +21,8 @@ import java.util.Map;
|
|||
import SWIG.*;
|
||||
import agent.lldb.model.iface2.LldbModelTargetSession;
|
||||
import agent.lldb.model.iface2.LldbModelTargetSymbol;
|
||||
import ghidra.dbg.target.TargetObject;
|
||||
import ghidra.dbg.target.TargetSymbol;
|
||||
import ghidra.dbg.target.schema.TargetAttributeType;
|
||||
import ghidra.dbg.target.schema.TargetElementType;
|
||||
import ghidra.dbg.target.schema.TargetObjectSchemaInfo;
|
||||
import ghidra.dbg.target.*;
|
||||
import ghidra.dbg.target.schema.*;
|
||||
import ghidra.dbg.util.PathUtils;
|
||||
import ghidra.program.model.address.Address;
|
||||
|
||||
|
@ -39,6 +36,7 @@ import ghidra.program.model.address.Address;
|
|||
type = LldbModelTargetSymbolContainerImpl.class),
|
||||
@TargetAttributeType(name = TargetObject.VALUE_ATTRIBUTE_NAME, type = Address.class),
|
||||
@TargetAttributeType(name = TargetSymbol.SIZE_ATTRIBUTE_NAME, type = long.class),
|
||||
@TargetAttributeType(name = TargetBreakpointSpec.AS_BPT_ATTRIBUTE_NAME, type = String.class),
|
||||
@TargetAttributeType(name = "Name", type = String.class),
|
||||
@TargetAttributeType(name = "Size", type = long.class),
|
||||
@TargetAttributeType(name = "TypeId", type = int.class),
|
||||
|
@ -76,7 +74,8 @@ public class LldbModelTargetSymbolImpl extends LldbModelTargetObjectImpl
|
|||
DISPLAY_ATTRIBUTE_NAME, getDescription(0), //
|
||||
NAMESPACE_ATTRIBUTE_NAME, symbols, //
|
||||
VALUE_ATTRIBUTE_NAME, value, //
|
||||
SIZE_ATTRIBUTE_NAME, size //
|
||||
SIZE_ATTRIBUTE_NAME, size, //
|
||||
TargetBreakpointSpec.AS_BPT_ATTRIBUTE_NAME, getDescription(0) //
|
||||
/*
|
||||
"Name", symbol.getName(), //
|
||||
"Size", size, //
|
||||
|
|
|
@ -1655,6 +1655,7 @@ public class DebuggerObjectsProvider extends ComponentProviderAdapter
|
|||
}
|
||||
|
||||
public void performSetBreakpoint(ActionContext context) {
|
||||
setText(context);
|
||||
performAction(context, false, TargetBreakpointSpecContainer.class, container -> {
|
||||
breakpointDialog.setContainer(container);
|
||||
tool.showDialog(breakpointDialog);
|
||||
|
@ -1662,6 +1663,21 @@ public class DebuggerObjectsProvider extends ComponentProviderAdapter
|
|||
}, "Couldn't set breakpoint");
|
||||
}
|
||||
|
||||
private void setText(ActionContext context) {
|
||||
breakpointDialog.setText("");
|
||||
TargetObject obj = getObjectFromContext(context);
|
||||
Object key = obj.getCachedAttribute(TargetBreakpointSpec.AS_BPT_ATTRIBUTE_NAME);
|
||||
if (key != null) {
|
||||
breakpointDialog.setText(key.toString());
|
||||
}
|
||||
else {
|
||||
if (obj instanceof DummyTargetObject) {
|
||||
DummyTargetObject dto = (DummyTargetObject) obj;
|
||||
breakpointDialog.setText(dto.getValue().toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void performToggle(ActionContext context) {
|
||||
performAction(context, false, TargetTogglable.class, t -> {
|
||||
return t.toggle(!t.isEnabled());
|
||||
|
|
|
@ -26,8 +26,8 @@ import javax.swing.*;
|
|||
import docking.DialogComponentProvider;
|
||||
import ghidra.app.plugin.core.debug.gui.DebuggerResources.AbstractSetBreakpointAction;
|
||||
import ghidra.app.plugin.core.debug.gui.objects.DebuggerObjectsProvider;
|
||||
import ghidra.dbg.target.TargetBreakpointSpecContainer;
|
||||
import ghidra.dbg.target.TargetBreakpointSpec.TargetBreakpointKind;
|
||||
import ghidra.dbg.target.TargetBreakpointSpecContainer;
|
||||
import ghidra.util.MessageType;
|
||||
import ghidra.util.Msg;
|
||||
import ghidra.util.layout.PairLayout;
|
||||
|
@ -91,4 +91,8 @@ public class DebuggerBreakpointDialog extends DialogComponentProvider {
|
|||
this.container = container;
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
expressionField.setText(text);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -181,8 +181,8 @@ public class DummyTargetObject implements TargetObject {
|
|||
@Override
|
||||
public CompletableFuture<? extends Map<String, ?>> fetchAttributes() {
|
||||
if (!key.equals(TargetObject.DISPLAY_ATTRIBUTE_NAME)) {
|
||||
if (value != null) {
|
||||
String display = getName() + " : " + value;
|
||||
if (getValue() != null) {
|
||||
String display = getName() + " : " + getValue();
|
||||
addAttribute(TargetObject.DISPLAY_ATTRIBUTE_NAME, display);
|
||||
}
|
||||
if (kind != null && !kind.equals("")) {
|
||||
|
@ -191,8 +191,8 @@ public class DummyTargetObject implements TargetObject {
|
|||
else {
|
||||
addAttribute(TargetObject.KIND_ATTRIBUTE_NAME, "OBJECT_INTRINSIC");
|
||||
}
|
||||
if (value != null) {
|
||||
addAttribute(TargetObject.VALUE_ATTRIBUTE_NAME, value);
|
||||
if (getValue() != null) {
|
||||
addAttribute(TargetObject.VALUE_ATTRIBUTE_NAME, getValue());
|
||||
}
|
||||
if (type != null) {
|
||||
addAttribute(TargetObject.TYPE_ATTRIBUTE_NAME, type);
|
||||
|
@ -234,4 +234,8 @@ public class DummyTargetObject implements TargetObject {
|
|||
public String toString() {
|
||||
return getName();
|
||||
}
|
||||
|
||||
public Object getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,6 +69,7 @@ public interface TargetBreakpointSpec extends TargetObject, /*@Transitional*/ Ta
|
|||
String CONTAINER_ATTRIBUTE_NAME = PREFIX_INVISIBLE + "container";
|
||||
String EXPRESSION_ATTRIBUTE_NAME = PREFIX_INVISIBLE + "expression";
|
||||
String KINDS_ATTRIBUTE_NAME = PREFIX_INVISIBLE + "kinds";
|
||||
String AS_BPT_ATTRIBUTE_NAME = PREFIX_INVISIBLE + "bpt";
|
||||
|
||||
/**
|
||||
* Get the container of this breakpoint.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue