mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 19:42:36 +02:00
Merge remote-tracking branch 'origin/GT-3558_dev747368_pdb_apply_enums'
This commit is contained in:
commit
2a155e105b
3 changed files with 15 additions and 41 deletions
|
@ -16,6 +16,7 @@
|
|||
package ghidra.app.util.bin.format.pdb;
|
||||
|
||||
import ghidra.app.util.importer.MessageLog;
|
||||
import ghidra.program.model.data.DataTypeConflictHandler;
|
||||
import ghidra.program.model.data.EnumDataType;
|
||||
import ghidra.program.model.symbol.SymbolUtilities;
|
||||
import ghidra.util.exception.CancelledException;
|
||||
|
@ -65,7 +66,9 @@ class ApplyEnums {
|
|||
xmlParser.next();//member end element
|
||||
}
|
||||
pdbParser.cacheDataType(name, enumdt); // cache with namespace-based name
|
||||
pdbParser.addDataType(enumdt);
|
||||
pdbParser.getProgramDataTypeManager()
|
||||
.resolve(enumdt,
|
||||
DataTypeConflictHandler.REPLACE_EMPTY_STRUCTS_OR_RENAME_AND_ADD_HANDLER);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -48,26 +48,26 @@ class PdbDataTypeParser {
|
|||
|
||||
private void createMandatoryDataTypes() {
|
||||
|
||||
addDataType(new TypedefDataType("wchar", WideCharDataType.dataType));
|
||||
cachePrimitiveDataType(new TypedefDataType("wchar", WideCharDataType.dataType));
|
||||
|
||||
addDataType(new TypedefDataType("__int8",
|
||||
cachePrimitiveDataType(new TypedefDataType("__int8",
|
||||
AbstractIntegerDataType.getSignedDataType(1, programDataTypeMgr)));
|
||||
addDataType(new TypedefDataType("__uint8",
|
||||
cachePrimitiveDataType(new TypedefDataType("__uint8",
|
||||
AbstractIntegerDataType.getUnsignedDataType(1, programDataTypeMgr)));
|
||||
|
||||
addDataType(new TypedefDataType("__int16",
|
||||
cachePrimitiveDataType(new TypedefDataType("__int16",
|
||||
AbstractIntegerDataType.getSignedDataType(2, programDataTypeMgr)));
|
||||
addDataType(new TypedefDataType("__uint16",
|
||||
cachePrimitiveDataType(new TypedefDataType("__uint16",
|
||||
AbstractIntegerDataType.getUnsignedDataType(2, programDataTypeMgr)));
|
||||
|
||||
addDataType(new TypedefDataType("__int32",
|
||||
cachePrimitiveDataType(new TypedefDataType("__int32",
|
||||
AbstractIntegerDataType.getSignedDataType(4, programDataTypeMgr)));
|
||||
addDataType(new TypedefDataType("__uint32",
|
||||
cachePrimitiveDataType(new TypedefDataType("__uint32",
|
||||
AbstractIntegerDataType.getUnsignedDataType(2, programDataTypeMgr)));
|
||||
|
||||
addDataType(new TypedefDataType("__int64",
|
||||
cachePrimitiveDataType(new TypedefDataType("__int64",
|
||||
AbstractIntegerDataType.getSignedDataType(8, programDataTypeMgr)));
|
||||
addDataType(new TypedefDataType("__uint64",
|
||||
cachePrimitiveDataType(new TypedefDataType("__uint64",
|
||||
AbstractIntegerDataType.getUnsignedDataType(8, programDataTypeMgr)));
|
||||
}
|
||||
|
||||
|
@ -125,33 +125,8 @@ class PdbDataTypeParser {
|
|||
dataTypeCache.put(key, dataType);
|
||||
}
|
||||
|
||||
void addDataType(DataType dataType) {
|
||||
|
||||
if (dataType instanceof Composite) {
|
||||
DataTypeComponent[] components = ((Composite) dataType).getComponents();
|
||||
for (DataTypeComponent component : components) {
|
||||
addDataType(component.getDataType());
|
||||
}
|
||||
}
|
||||
|
||||
ArrayList<DataType> oldDataTypeList = new ArrayList<>();
|
||||
programDataTypeMgr.findDataTypes(dataType.getName(), oldDataTypeList);
|
||||
dataType = programDataTypeMgr.addDataType(dataType,
|
||||
DataTypeConflictHandler.REPLACE_EMPTY_STRUCTS_OR_RENAME_AND_ADD_HANDLER);
|
||||
|
||||
cacheDataType(dataType.getName(), dataType);
|
||||
|
||||
for (DataType oldDataType : oldDataTypeList) {
|
||||
if (oldDataType.getLength() == 0 &&
|
||||
oldDataType.getClass().equals(dataType.getClass())) {
|
||||
try {
|
||||
programDataTypeMgr.replaceDataType(oldDataType, dataType, false);
|
||||
}
|
||||
catch (DataTypeDependencyException e) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
void cachePrimitiveDataType(DataType dataType) {
|
||||
dataTypeCache.put(dataType.getName(), dataType);
|
||||
}
|
||||
|
||||
private DataType findDataTypeInArchives(String datatype, TaskMonitor monitor)
|
||||
|
|
|
@ -1351,10 +1351,6 @@ public class PdbParser {
|
|||
return getDataTypeParser().getCachedDataType(name);
|
||||
}
|
||||
|
||||
void addDataType(DataType dataType) {
|
||||
getDataTypeParser().addDataType(dataType);
|
||||
}
|
||||
|
||||
WrappedDataType findDataType(String dataTypeName) throws CancelledException {
|
||||
return getDataTypeParser().findDataType(dataTypeName);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue