GP-2966: Consider aliases in debugger register mapping.

This commit is contained in:
Dan
2023-01-19 12:48:01 -05:00
parent 942d60eeac
commit a9c1949742
13 changed files with 276 additions and 55 deletions

View File

@@ -33,6 +33,10 @@ public class PathMatcher implements PathPredicates {
patterns.add(pattern);
}
public void addAll(PathMatcher matcher) {
patterns.addAll(matcher.patterns);
}
@Override
public String toString() {
return String.format("<PathMatcher\n %s\n>", StringUtils.join(patterns, "\n "));

View File

@@ -156,6 +156,11 @@ public class TestDebuggerObjectModel extends EmptyDebuggerObjectModel {
return TestTargetRegister.fromLanguageRegister(container, register);
}
protected TestTargetRegister newTestTargetRegister(TestTargetRegisterContainer container,
String index, Register register) {
return TestTargetRegister.fromLanguageRegister(container, index, register);
}
protected TestTargetThreadContainer newTestTargetThreadContainer(TestTargetProcess process) {
return new TestTargetThreadContainer(process);
}

View File

@@ -27,10 +27,15 @@ public class TestTargetRegister
extends DefaultTestTargetObject<TestTargetObject, TestTargetRegisterContainer>
implements TargetRegister {
public static TestTargetRegister fromLanguageRegister(TestTargetRegisterContainer parent,
String index, Register register) {
return new TestTargetRegister(parent, PathUtils.makeKey(index),
(register.getBitLength() + 7) / 8, register.isProgramCounter());
}
public static TestTargetRegister fromLanguageRegister(
TestTargetRegisterContainer parent, Register register) {
return new TestTargetRegister(parent, PathUtils.makeKey(register.getName()),
(register.getBitLength() + 7) / 8, register.isProgramCounter());
return fromLanguageRegister(parent, register.getName(), register);
}
protected final int byteLength;

View File

@@ -61,6 +61,11 @@ public class TestTargetRegisterContainer
public TestTargetRegister addRegister(Register register) {
TestTargetRegister tr =
getModel().newTestTargetRegister(this, Objects.requireNonNull(register));
doAddRegister(tr, register);
return tr;
}
protected void doAddRegister(TestTargetRegister tr, Register register) {
String reason = "Added " + register + " from Ghidra language";
changeElements(List.of(), List.of(tr), reason);
List<AbstractTestTargetRegisterBank<?>> banks;
@@ -70,6 +75,12 @@ public class TestTargetRegisterContainer
for (AbstractTestTargetRegisterBank<?> bank : banks) {
bank.addRegisterDescs(List.of(tr), reason);
}
}
public TestTargetRegister addRegister(String index, Register register) {
TestTargetRegister tr =
getModel().newTestTargetRegister(this, index, Objects.requireNonNull(register));
doAddRegister(tr, register);
return tr;
}