diff options
Diffstat (limited to 'llvm/lib/DebugInfo/PDB')
| -rw-r--r-- | llvm/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp | 33 | ||||
| -rw-r--r-- | llvm/lib/DebugInfo/PDB/PDBExtras.cpp | 25 |
2 files changed, 36 insertions, 22 deletions
diff --git a/llvm/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp b/llvm/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp index abe0ab55e56..21b9a7aef82 100644 --- a/llvm/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp +++ b/llvm/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp @@ -22,49 +22,60 @@ Variant VariantFromVARIANT(const VARIANT &V) { Variant Result; switch (V.vt) { case VT_I1: - Result.Int8 = V.cVal; + Result.Value.Int8 = V.cVal; Result.Type = PDB_VariantType::Int8; break; case VT_I2: - Result.Int16 = V.iVal; + Result.Value.Int16 = V.iVal; Result.Type = PDB_VariantType::Int16; break; case VT_I4: - Result.Int32 = V.intVal; + Result.Value.Int32 = V.intVal; Result.Type = PDB_VariantType::Int32; break; case VT_I8: - Result.Int64 = V.llVal; + Result.Value.Int64 = V.llVal; Result.Type = PDB_VariantType::Int64; break; case VT_UI1: - Result.UInt8 = V.bVal; + Result.Value.UInt8 = V.bVal; Result.Type = PDB_VariantType::UInt8; break; case VT_UI2: - Result.UInt16 = V.uiVal; + Result.Value.UInt16 = V.uiVal; Result.Type = PDB_VariantType::UInt16; break; case VT_UI4: - Result.UInt32 = V.uintVal; + Result.Value.UInt32 = V.uintVal; Result.Type = PDB_VariantType::UInt32; break; case VT_UI8: - Result.UInt64 = V.ullVal; + Result.Value.UInt64 = V.ullVal; Result.Type = PDB_VariantType::UInt64; break; case VT_BOOL: - Result.Bool = (V.boolVal == VARIANT_TRUE) ? true : false; + Result.Value.Bool = (V.boolVal == VARIANT_TRUE) ? true : false; Result.Type = PDB_VariantType::Bool; break; case VT_R4: - Result.Single = V.fltVal; + Result.Value.Single = V.fltVal; Result.Type = PDB_VariantType::Single; break; case VT_R8: - Result.Double = V.dblVal; + Result.Value.Double = V.dblVal; Result.Type = PDB_VariantType::Double; break; + case VT_BSTR: { + const char *SrcBytes = reinterpret_cast<const char *>(V.bstrVal); + llvm::ArrayRef<char> SrcByteArray(SrcBytes, SysStringByteLen(V.bstrVal)); + std::string Result8; + if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8)) + Result.Value.String = nullptr; + Result.Value.String = new char[Result8.length() + 1]; + ::strcpy(Result.Value.String, Result8.c_str()); + Result.Type = PDB_VariantType::String; + break; + } default: Result.Type = PDB_VariantType::Unknown; break; diff --git a/llvm/lib/DebugInfo/PDB/PDBExtras.cpp b/llvm/lib/DebugInfo/PDB/PDBExtras.cpp index 29c0c32601d..52328db42c1 100644 --- a/llvm/lib/DebugInfo/PDB/PDBExtras.cpp +++ b/llvm/lib/DebugInfo/PDB/PDBExtras.cpp @@ -284,37 +284,40 @@ raw_ostream &llvm::operator<<(raw_ostream &OS, const PDB_UniqueId &Id) { raw_ostream &llvm::operator<<(raw_ostream &OS, const Variant &Value) { switch (Value.Type) { case PDB_VariantType::Bool: - OS << (Value.Bool ? "true" : "false"); + OS << (Value.Value.Bool ? "true" : "false"); break; case PDB_VariantType::Double: - OS << Value.Double; + OS << Value.Value.Double; break; case PDB_VariantType::Int16: - OS << Value.Int16; + OS << Value.Value.Int16; break; case PDB_VariantType::Int32: - OS << Value.Int32; + OS << Value.Value.Int32; break; case PDB_VariantType::Int64: - OS << Value.Int64; + OS << Value.Value.Int64; break; case PDB_VariantType::Int8: - OS << static_cast<int>(Value.Int8); + OS << static_cast<int>(Value.Value.Int8); break; case PDB_VariantType::Single: - OS << Value.Single; + OS << Value.Value.Single; break; case PDB_VariantType::UInt16: - OS << Value.Double; + OS << Value.Value.Double; break; case PDB_VariantType::UInt32: - OS << Value.UInt32; + OS << Value.Value.UInt32; break; case PDB_VariantType::UInt64: - OS << Value.UInt64; + OS << Value.Value.UInt64; break; case PDB_VariantType::UInt8: - OS << static_cast<unsigned>(Value.UInt8); + OS << static_cast<unsigned>(Value.Value.UInt8); + break; + case PDB_VariantType::String: + OS << Value.Value.String; break; default: OS << Value.Type; |

