GP-3921 Improved Diff data instance settings support

This commit is contained in:
ghidra1 2024-06-12 15:18:33 -04:00
parent d1b0828af9
commit b4308f76f8
5 changed files with 455 additions and 270 deletions

View file

@ -310,6 +310,7 @@ public abstract class ProgramBasedDataTypeManagerDB extends DataTypeManagerDB
if (instanceSettingsAdapter == null) {
throw new UnsupportedOperationException();
}
lock.acquire();
try {
Address dataAddr = getDataSettingsAddress(data);
return instanceSettingsAdapter
@ -318,6 +319,9 @@ public abstract class ProgramBasedDataTypeManagerDB extends DataTypeManagerDB
catch (IOException e) {
errHandler.dbError(e);
}
finally {
lock.release();
}
return true;
}
@ -427,14 +431,15 @@ public abstract class ProgramBasedDataTypeManagerDB extends DataTypeManagerDB
}
}
private static Address getDataSettingsAddress(Data data) {
Data parent = data.getParent();
if (parent != null) {
public static Address getDataSettingsAddress(Data data) {
Address addr = data.getAddress();
for (Data parent = data.getParent(); parent != null; parent = parent.getParent()) {
DataType dataType = parent.getDataType();
if (dataType instanceof Array) {
return getDataSettingsAddress(parent);
if (!(dataType instanceof Array a)) {
break;
}
addr = parent.getAddress();
}
return data.getAddress();
return addr;
}
}