mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 10:49:34 +02:00
Merge remote-tracking branch 'origin/GP-2177_d-millar_bpt_errors_SQRB--SQUASHED'
This commit is contained in:
commit
eaf9c84963
19 changed files with 171 additions and 57 deletions
|
@ -52,6 +52,8 @@ public class DebuggerPlaceBreakpointDialog extends DialogComponentProvider {
|
|||
private JTextField fieldLength;
|
||||
private JComboBox<String> fieldKinds;
|
||||
private JTextField fieldName;
|
||||
private PluginTool tool;
|
||||
private String statusText = null;
|
||||
|
||||
public DebuggerPlaceBreakpointDialog() {
|
||||
super(AbstractSetBreakpointAction.NAME, true, true, true, false);
|
||||
|
@ -150,10 +152,12 @@ public class DebuggerPlaceBreakpointDialog extends DialogComponentProvider {
|
|||
this.fieldLength.setText(Long.toUnsignedString(length));
|
||||
this.fieldKinds.setSelectedItem(TraceBreakpointKindSet.encode(kinds));
|
||||
this.fieldName.setText("");
|
||||
this.tool = tool;
|
||||
|
||||
validateAddress();
|
||||
|
||||
setTitle(title);
|
||||
statusText = null;
|
||||
tool.showDialog(this);
|
||||
}
|
||||
|
||||
|
@ -181,13 +185,20 @@ public class DebuggerPlaceBreakpointDialog extends DialogComponentProvider {
|
|||
name = fieldName.getText();
|
||||
|
||||
ProgramLocation loc = new ProgramLocation(program, address);
|
||||
service.placeBreakpointAt(loc, length, kinds, name).thenAccept(__ -> {
|
||||
close();
|
||||
}).exceptionally(ex -> {
|
||||
service.placeBreakpointAt(loc, length, kinds, name).exceptionally(ex -> {
|
||||
ex = AsyncUtils.unwrapThrowable(ex);
|
||||
setStatusText(ex.getMessage(), MessageType.ERROR, true);
|
||||
statusText = ex.getMessage(); // will be set when dialog is shown later
|
||||
tool.showDialog(this);
|
||||
return null;
|
||||
});
|
||||
close();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dialogShown() {
|
||||
if (statusText != null) {
|
||||
setStatusText(statusText, MessageType.ERROR, true);
|
||||
}
|
||||
}
|
||||
|
||||
/* testing */
|
||||
|
|
|
@ -164,15 +164,17 @@ public class DefaultThreadRecorder implements ManagedThreadRecorder {
|
|||
if (regMapper == null) {
|
||||
throw new IllegalStateException("Have not found register descriptions for " + thread);
|
||||
}
|
||||
if (!regMapper.getRegistersOnTarget().containsAll(registers)) {
|
||||
throw new IllegalArgumentException(
|
||||
"All given registers must be recognized by the target");
|
||||
List<TargetRegister> tRegs = registers.stream()
|
||||
.map(regMapper::traceToTarget)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
if (tRegs.size() < registers.size()) {
|
||||
Msg.warn(this,
|
||||
"All requested registers must be recognized by the model as registers");
|
||||
}
|
||||
if (registers.isEmpty()) {
|
||||
return CompletableFuture.completedFuture(Map.of());
|
||||
}
|
||||
List<TargetRegister> tRegs =
|
||||
registers.stream().map(regMapper::traceToTarget).collect(Collectors.toList());
|
||||
|
||||
Set<TargetRegisterBank> banks = getTargetRegisterBank(thread, frameLevel);
|
||||
if (banks == null) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue