mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-06-02 06:19:49 +08:00
Merge remote-tracking branch
'origin/GP-4822_ghizard_PDB_U_add_char8_t_primitive_types' (#6744)
This commit is contained in:
+45
@@ -483,6 +483,51 @@ public class PrimitiveMsType extends AbstractMsType {
|
||||
typeSize = 16;
|
||||
break;
|
||||
|
||||
//=======================================
|
||||
// 8-bit char8_t type from C++20 standard
|
||||
// Note that std::is_same_v<unsigned char, char8_t> is suppose to return false
|
||||
//=======================================
|
||||
// char8_t
|
||||
case 0x007c:
|
||||
typeString = "T_CHAR8";
|
||||
typeSize = 1;
|
||||
break;
|
||||
// 16-bit pointer to a char8_t
|
||||
case 0x017c:
|
||||
typeString = "T_PCHAR8";
|
||||
typeSize = 2;
|
||||
break;
|
||||
// 16:16 far pointer to a char8_t
|
||||
case 0x027c:
|
||||
typeString = "T_PFCHAR8";
|
||||
typeSize = 4;
|
||||
break;
|
||||
// 16:16 huge pointer to a char8_t
|
||||
case 0x037c:
|
||||
typeString = "T_PHCHAR8";
|
||||
typeSize = 4;
|
||||
break;
|
||||
// 32-bit pointer to a char8_t
|
||||
case 0x047c:
|
||||
typeString = "T_32PCHAR8";
|
||||
typeSize = 4;
|
||||
break;
|
||||
// 16:32 pointer to a char8_t
|
||||
case 0x057c:
|
||||
typeString = "T_32PFCHAR8";
|
||||
typeSize = 6;
|
||||
break;
|
||||
// 64-bit pointer to a char8_t
|
||||
case 0x067c:
|
||||
typeString = "T_64PCHAR8";
|
||||
typeSize = 8;
|
||||
break;
|
||||
// 128-bit near pointer to a char8_t (LLVM doc on 0x0700)
|
||||
case 0x077c:
|
||||
typeString = "T_128PCHAR8";
|
||||
typeSize = 16;
|
||||
break;
|
||||
|
||||
//=======================================
|
||||
// 8-bit int types
|
||||
//=======================================
|
||||
|
||||
+15
@@ -39,7 +39,9 @@ public class PdbPrimitiveTypeApplicator {
|
||||
private DataType voidGhidraPrimitive = null;
|
||||
private DataType charGhidraPrimitive = null;
|
||||
private DataType signedCharGhidraPrimitive = null;
|
||||
// Note that std::is_same_v<unsigned char, char8_t> is suppose to return false
|
||||
private DataType unsignedCharGhidraPrimitive = null;
|
||||
private DataType char8GhidraPrimitive = null;
|
||||
|
||||
//private Map<Integer, DataType> booleanGhidraPrimitives = new HashMap<>();
|
||||
private Map<Integer, DataType> integralGhidraPrimitives = new HashMap<>();
|
||||
@@ -108,6 +110,19 @@ public class PdbPrimitiveTypeApplicator {
|
||||
return unsignedCharGhidraPrimitive;
|
||||
}
|
||||
|
||||
// 8-bit char8_t type from C++20 standard
|
||||
// Note that std::is_same_v<unsigned char, char8_t> is suppose to return false
|
||||
// So we are creating and storing off a separate type here. Whether ghidra thinks they are
|
||||
// the same or not is up to the type system or up to our changing what we do in these two
|
||||
// methods (the one above and this one). If we care to make them different, then do it here.
|
||||
DataType getChar8Type() {
|
||||
if (char8GhidraPrimitive == null) {
|
||||
DataType dataType = new UnsignedCharDataType(getDataTypeManager());
|
||||
char8GhidraPrimitive = resolve(dataType);
|
||||
}
|
||||
return char8GhidraPrimitive;
|
||||
}
|
||||
|
||||
DataType getUnicode16Type() {
|
||||
// For now, we are returning WideChar16 for Unicode16.
|
||||
return new WideChar16DataType(getDataTypeManager());
|
||||
|
||||
+44
@@ -426,6 +426,50 @@ public class PrimitiveTypeApplier extends MsDataTypeApplier {
|
||||
primitiveApplicator.getUnicode32Type());
|
||||
break;
|
||||
|
||||
//=======================================
|
||||
// 8-bit char8_t type from C++20 standard
|
||||
// Note that std::is_same_v<unsigned char, char8_t> is suppose to return false
|
||||
//=======================================
|
||||
// char8_t
|
||||
case 0x007c:
|
||||
primitiveDataType = primitiveApplicator.getChar8Type();
|
||||
break;
|
||||
// 16-bit pointer to a char8_t
|
||||
case 0x017c:
|
||||
primitiveDataType = primitiveApplicator.get16NearPointerType(type,
|
||||
primitiveApplicator.getChar8Type());
|
||||
break;
|
||||
// 16:16 far pointer to a char8_t
|
||||
case 0x027c:
|
||||
primitiveDataType = primitiveApplicator.get1616FarPointerType(type,
|
||||
primitiveApplicator.getChar8Type());
|
||||
break;
|
||||
// 16:16 huge pointer to a char8_t
|
||||
case 0x037c:
|
||||
primitiveDataType = primitiveApplicator.get1616HugePointerType(type,
|
||||
primitiveApplicator.getChar8Type());
|
||||
break;
|
||||
// 32-bit pointer to a char8_t
|
||||
case 0x047c:
|
||||
primitiveDataType = primitiveApplicator.get32PointerType(type,
|
||||
primitiveApplicator.getChar8Type());
|
||||
break;
|
||||
// 16:32 pointer to a char8_t
|
||||
case 0x057c:
|
||||
primitiveDataType = primitiveApplicator.get1632PointerType(type,
|
||||
primitiveApplicator.getChar8Type());
|
||||
break;
|
||||
// 64-bit pointer to a char8_t
|
||||
case 0x067c:
|
||||
primitiveDataType = primitiveApplicator.get64PointerType(type,
|
||||
primitiveApplicator.getChar8Type());
|
||||
break;
|
||||
// 128-bit near pointer to a char8_t (LLVM doc on 0x0700)
|
||||
case 0x077c:
|
||||
primitiveDataType = primitiveApplicator.get128PointerType(type,
|
||||
primitiveApplicator.getChar8Type());
|
||||
break;
|
||||
|
||||
//=======================================
|
||||
// 8-bit int types
|
||||
//=======================================
|
||||
|
||||
Reference in New Issue
Block a user