109467b48Spatrick //===- PDBExtras.cpp - helper functions and classes for PDBs --------------===//
209467b48Spatrick //
309467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
409467b48Spatrick // See https://llvm.org/LICENSE.txt for license information.
509467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
609467b48Spatrick //
709467b48Spatrick //===----------------------------------------------------------------------===//
809467b48Spatrick
909467b48Spatrick #include "llvm/DebugInfo/PDB/PDBExtras.h"
1009467b48Spatrick #include "llvm/Support/raw_ostream.h"
1109467b48Spatrick
1209467b48Spatrick using namespace llvm;
1309467b48Spatrick using namespace llvm::pdb;
1409467b48Spatrick
1509467b48Spatrick #define CASE_OUTPUT_ENUM_CLASS_STR(Class, Value, Str, Stream) \
1609467b48Spatrick case Class::Value: \
1709467b48Spatrick Stream << Str; \
1809467b48Spatrick break;
1909467b48Spatrick
2009467b48Spatrick #define CASE_OUTPUT_ENUM_CLASS_NAME(Class, Value, Stream) \
2109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(Class, Value, #Value, Stream)
2209467b48Spatrick
operator <<(raw_ostream & OS,const PDB_VariantType & Type)2309467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS,
2409467b48Spatrick const PDB_VariantType &Type) {
2509467b48Spatrick switch (Type) {
2609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_VariantType, Bool, OS)
2709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_VariantType, Single, OS)
2809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_VariantType, Double, OS)
2909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_VariantType, Int8, OS)
3009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_VariantType, Int16, OS)
3109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_VariantType, Int32, OS)
3209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_VariantType, Int64, OS)
3309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_VariantType, UInt8, OS)
3409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_VariantType, UInt16, OS)
3509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_VariantType, UInt32, OS)
3609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_VariantType, UInt64, OS)
3709467b48Spatrick default:
3809467b48Spatrick OS << "Unknown";
3909467b48Spatrick }
4009467b48Spatrick return OS;
4109467b48Spatrick }
4209467b48Spatrick
operator <<(raw_ostream & OS,const PDB_BuiltinType & Type)4309467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS,
4409467b48Spatrick const PDB_BuiltinType &Type) {
4509467b48Spatrick switch (Type) {
4609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, None, OS)
4709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Void, OS)
4809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Char, OS)
4909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, WCharT, OS)
5009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Int, OS)
5109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, UInt, OS)
5209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Float, OS)
5309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, BCD, OS)
5409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Bool, OS)
5509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Long, OS)
5609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, ULong, OS)
5709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Currency, OS)
5809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Date, OS)
5909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Variant, OS)
6009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Complex, OS)
6109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Bitfield, OS)
6209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, BSTR, OS)
6309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, HResult, OS)
6409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Char16, OS)
6509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Char32, OS)
66*d415bd75Srobert CASE_OUTPUT_ENUM_CLASS_NAME(PDB_BuiltinType, Char8, OS)
6709467b48Spatrick }
6809467b48Spatrick return OS;
6909467b48Spatrick }
7009467b48Spatrick
operator <<(raw_ostream & OS,const PDB_CallingConv & Conv)7109467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS,
7209467b48Spatrick const PDB_CallingConv &Conv) {
7309467b48Spatrick OS << "__";
7409467b48Spatrick switch (Conv) {
7509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, NearC , "cdecl", OS)
7609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, FarC , "cdecl", OS)
7709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, NearPascal , "pascal", OS)
7809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, FarPascal , "pascal", OS)
7909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, NearFast , "fastcall", OS)
8009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, FarFast , "fastcall", OS)
8109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, NearStdCall, "stdcall", OS)
8209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, FarStdCall , "stdcall", OS)
8309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, NearSysCall, "syscall", OS)
8409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, FarSysCall , "syscall", OS)
8509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, ThisCall , "thiscall", OS)
8609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, MipsCall , "mipscall", OS)
8709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, Generic , "genericcall", OS)
8809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, AlphaCall , "alphacall", OS)
8909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, PpcCall , "ppccall", OS)
9009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, SHCall , "superhcall", OS)
9109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, ArmCall , "armcall", OS)
9209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, AM33Call , "am33call", OS)
9309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, TriCall , "tricall", OS)
9409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, SH5Call , "sh5call", OS)
9509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, M32RCall , "m32rcall", OS)
9609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, ClrCall , "clrcall", OS)
9709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, Inline , "inlinecall", OS)
9809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_CallingConv, NearVector , "vectorcall", OS)
9909467b48Spatrick }
10009467b48Spatrick return OS;
10109467b48Spatrick }
10209467b48Spatrick
operator <<(raw_ostream & OS,const PDB_DataKind & Data)10309467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS, const PDB_DataKind &Data) {
10409467b48Spatrick switch (Data) {
10509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_DataKind, Unknown, "unknown", OS)
10609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_DataKind, Local, "local", OS)
10709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_DataKind, StaticLocal, "static local", OS)
10809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_DataKind, Param, "param", OS)
10909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_DataKind, ObjectPtr, "this ptr", OS)
11009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_DataKind, FileStatic, "static global", OS)
11109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_DataKind, Global, "global", OS)
11209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_DataKind, Member, "member", OS)
11309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_DataKind, StaticMember, "static member", OS)
11409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_DataKind, Constant, "const", OS)
11509467b48Spatrick }
11609467b48Spatrick return OS;
11709467b48Spatrick }
11809467b48Spatrick
operator <<(raw_ostream & OS,const llvm::codeview::CPURegister & CpuReg)11909467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS,
12009467b48Spatrick const llvm::codeview::CPURegister &CpuReg) {
12173471bf0Spatrick if (CpuReg.Cpu == llvm::codeview::CPUType::ARMNT) {
12273471bf0Spatrick switch (CpuReg.Reg) {
12373471bf0Spatrick #define CV_REGISTERS_ARM
12473471bf0Spatrick #define CV_REGISTER(name, val) \
12573471bf0Spatrick case codeview::RegisterId::name: \
12673471bf0Spatrick OS << #name; \
12773471bf0Spatrick return OS;
12873471bf0Spatrick #include "llvm/DebugInfo/CodeView/CodeViewRegisters.def"
12973471bf0Spatrick #undef CV_REGISTER
13073471bf0Spatrick #undef CV_REGISTERS_ARM
13173471bf0Spatrick
13273471bf0Spatrick default:
13373471bf0Spatrick break;
13473471bf0Spatrick }
13573471bf0Spatrick } else if (CpuReg.Cpu == llvm::codeview::CPUType::ARM64) {
13609467b48Spatrick switch (CpuReg.Reg) {
13709467b48Spatrick #define CV_REGISTERS_ARM64
13809467b48Spatrick #define CV_REGISTER(name, val) \
13909467b48Spatrick case codeview::RegisterId::name: \
14009467b48Spatrick OS << #name; \
14109467b48Spatrick return OS;
14209467b48Spatrick #include "llvm/DebugInfo/CodeView/CodeViewRegisters.def"
14309467b48Spatrick #undef CV_REGISTER
14409467b48Spatrick #undef CV_REGISTERS_ARM64
14509467b48Spatrick
14609467b48Spatrick default:
14709467b48Spatrick break;
14809467b48Spatrick }
14909467b48Spatrick } else {
15009467b48Spatrick switch (CpuReg.Reg) {
15109467b48Spatrick #define CV_REGISTERS_X86
15209467b48Spatrick #define CV_REGISTER(name, val) \
15309467b48Spatrick case codeview::RegisterId::name: \
15409467b48Spatrick OS << #name; \
15509467b48Spatrick return OS;
15609467b48Spatrick #include "llvm/DebugInfo/CodeView/CodeViewRegisters.def"
15709467b48Spatrick #undef CV_REGISTER
15809467b48Spatrick #undef CV_REGISTERS_X86
15909467b48Spatrick
16009467b48Spatrick default:
16109467b48Spatrick break;
16209467b48Spatrick }
16309467b48Spatrick }
16409467b48Spatrick OS << static_cast<int>(CpuReg.Reg);
16509467b48Spatrick return OS;
16609467b48Spatrick }
16709467b48Spatrick
operator <<(raw_ostream & OS,const PDB_LocType & Loc)16809467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS, const PDB_LocType &Loc) {
16909467b48Spatrick switch (Loc) {
17009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_LocType, Static, "static", OS)
17109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_LocType, TLS, "tls", OS)
17209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_LocType, RegRel, "regrel", OS)
17309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_LocType, ThisRel, "thisrel", OS)
17409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_LocType, Enregistered, "register", OS)
17509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_LocType, BitField, "bitfield", OS)
17609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_LocType, Slot, "slot", OS)
17709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_LocType, IlRel, "IL rel", OS)
17809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_LocType, MetaData, "metadata", OS)
17909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_LocType, Constant, "constant", OS)
18009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_LocType, RegRelAliasIndir,
18109467b48Spatrick "regrelaliasindir", OS)
18209467b48Spatrick default:
18309467b48Spatrick OS << "Unknown";
18409467b48Spatrick }
18509467b48Spatrick return OS;
18609467b48Spatrick }
18709467b48Spatrick
operator <<(raw_ostream & OS,const codeview::ThunkOrdinal & Thunk)18809467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS,
18909467b48Spatrick const codeview::ThunkOrdinal &Thunk) {
19009467b48Spatrick switch (Thunk) {
19109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, BranchIsland, OS)
19209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, Pcode, OS)
19309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, Standard, OS)
19409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, ThisAdjustor, OS)
19509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, TrampIncremental, OS)
19609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, UnknownLoad, OS)
19709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, Vcall, OS)
19809467b48Spatrick }
19909467b48Spatrick return OS;
20009467b48Spatrick }
20109467b48Spatrick
operator <<(raw_ostream & OS,const PDB_Checksum & Checksum)20209467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS,
20309467b48Spatrick const PDB_Checksum &Checksum) {
20409467b48Spatrick switch (Checksum) {
20509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Checksum, None, OS)
20609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Checksum, MD5, OS)
20709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Checksum, SHA1, OS)
20809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Checksum, SHA256, OS)
20909467b48Spatrick }
21009467b48Spatrick return OS;
21109467b48Spatrick }
21209467b48Spatrick
operator <<(raw_ostream & OS,const PDB_Lang & Lang)21309467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS, const PDB_Lang &Lang) {
21409467b48Spatrick switch (Lang) {
21509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, C, OS)
21609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_Lang, Cpp, "C++", OS)
21709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Fortran, OS)
21809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Masm, OS)
21909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Pascal, OS)
22009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Basic, OS)
22109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Cobol, OS)
22209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Link, OS)
22309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Cvtres, OS)
22409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Cvtpgd, OS)
22509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, CSharp, OS)
22609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, VB, OS)
22709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, ILAsm, OS)
22809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Java, OS)
22909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, JScript, OS)
23009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, MSIL, OS)
23109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, HLSL, OS)
23209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, D, OS)
23309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Swift, OS)
234*d415bd75Srobert CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Rust, OS)
23509467b48Spatrick }
23609467b48Spatrick return OS;
23709467b48Spatrick }
23809467b48Spatrick
operator <<(raw_ostream & OS,const PDB_SymType & Tag)23909467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS, const PDB_SymType &Tag) {
24009467b48Spatrick switch (Tag) {
24109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Exe, OS)
24209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Compiland, OS)
24309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, CompilandDetails, OS)
24409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, CompilandEnv, OS)
24509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Function, OS)
24609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Block, OS)
24709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Data, OS)
24809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Annotation, OS)
24909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Label, OS)
25009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, PublicSymbol, OS)
25109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, UDT, OS)
25209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Enum, OS)
25309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, FunctionSig, OS)
25409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, PointerType, OS)
25509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, ArrayType, OS)
25609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, BuiltinType, OS)
25709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Typedef, OS)
25809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, BaseClass, OS)
25909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Friend, OS)
26009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, FunctionArg, OS)
26109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, FuncDebugStart, OS)
26209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, FuncDebugEnd, OS)
26309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, UsingNamespace, OS)
26409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, VTableShape, OS)
26509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, VTable, OS)
26609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Custom, OS)
26709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Thunk, OS)
26809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, CustomType, OS)
26909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, ManagedType, OS)
27009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Dimension, OS)
27109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, CallSite, OS)
27209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, InlineSite, OS)
27309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, BaseInterface, OS)
27409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, VectorType, OS)
27509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, MatrixType, OS)
27609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, HLSLType, OS)
27709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Caller, OS)
27809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Callee, OS)
27909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Export, OS)
28009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, HeapAllocationSite, OS)
28109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, CoffGroup, OS)
28209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Inlinee, OS)
28309467b48Spatrick default:
28409467b48Spatrick OS << "Unknown SymTag " << uint32_t(Tag);
28509467b48Spatrick }
28609467b48Spatrick return OS;
28709467b48Spatrick }
28809467b48Spatrick
operator <<(raw_ostream & OS,const PDB_MemberAccess & Access)28909467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS,
29009467b48Spatrick const PDB_MemberAccess &Access) {
29109467b48Spatrick switch (Access) {
29209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_MemberAccess, Public, "public", OS)
29309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_MemberAccess, Protected, "protected", OS)
29409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_MemberAccess, Private, "private", OS)
29509467b48Spatrick }
29609467b48Spatrick return OS;
29709467b48Spatrick }
29809467b48Spatrick
operator <<(raw_ostream & OS,const PDB_UdtType & Type)29909467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS, const PDB_UdtType &Type) {
30009467b48Spatrick switch (Type) {
30109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_UdtType, Class, "class", OS)
30209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_UdtType, Struct, "struct", OS)
30309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_UdtType, Interface, "interface", OS)
30409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_UdtType, Union, "union", OS)
30509467b48Spatrick }
30609467b48Spatrick return OS;
30709467b48Spatrick }
30809467b48Spatrick
operator <<(raw_ostream & OS,const PDB_Machine & Machine)30909467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS,
31009467b48Spatrick const PDB_Machine &Machine) {
31109467b48Spatrick switch (Machine) {
31209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, Am33, OS)
31309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, Amd64, OS)
31409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, Arm, OS)
31509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, ArmNT, OS)
31609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, Ebc, OS)
31709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, x86, OS)
31809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, Ia64, OS)
31909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, M32R, OS)
32009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, Mips16, OS)
32109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, MipsFpu, OS)
32209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, MipsFpu16, OS)
32309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, PowerPC, OS)
32409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, PowerPCFP, OS)
32509467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, R4000, OS)
32609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, SH3, OS)
32709467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, SH3DSP, OS)
32809467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, SH4, OS)
32909467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, SH5, OS)
33009467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, Thumb, OS)
33109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Machine, WceMipsV2, OS)
33209467b48Spatrick default:
33309467b48Spatrick OS << "Unknown";
33409467b48Spatrick }
33509467b48Spatrick return OS;
33609467b48Spatrick }
33709467b48Spatrick
dumpPDBSourceCompression(raw_ostream & OS,uint32_t Compression)33809467b48Spatrick raw_ostream &llvm::pdb::dumpPDBSourceCompression(raw_ostream &OS,
33909467b48Spatrick uint32_t Compression) {
34009467b48Spatrick switch (Compression) {
34109467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SourceCompression, None, OS)
34209467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SourceCompression, Huffman, OS)
34309467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SourceCompression, LZ, OS)
34409467b48Spatrick CASE_OUTPUT_ENUM_CLASS_STR(PDB_SourceCompression, RunLengthEncoded, "RLE",
34509467b48Spatrick OS)
34609467b48Spatrick CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SourceCompression, DotNet, OS)
34709467b48Spatrick default:
34809467b48Spatrick OS << "Unknown (" << Compression << ")";
34909467b48Spatrick }
35009467b48Spatrick return OS;
35109467b48Spatrick }
35209467b48Spatrick
operator <<(raw_ostream & OS,const Variant & Value)35309467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS, const Variant &Value) {
35409467b48Spatrick switch (Value.Type) {
35509467b48Spatrick case PDB_VariantType::Bool:
35609467b48Spatrick OS << (Value.Value.Bool ? "true" : "false");
35709467b48Spatrick break;
35809467b48Spatrick case PDB_VariantType::Double:
35909467b48Spatrick OS << Value.Value.Double;
36009467b48Spatrick break;
36109467b48Spatrick case PDB_VariantType::Int16:
36209467b48Spatrick OS << Value.Value.Int16;
36309467b48Spatrick break;
36409467b48Spatrick case PDB_VariantType::Int32:
36509467b48Spatrick OS << Value.Value.Int32;
36609467b48Spatrick break;
36709467b48Spatrick case PDB_VariantType::Int64:
36809467b48Spatrick OS << Value.Value.Int64;
36909467b48Spatrick break;
37009467b48Spatrick case PDB_VariantType::Int8:
37109467b48Spatrick OS << static_cast<int>(Value.Value.Int8);
37209467b48Spatrick break;
37309467b48Spatrick case PDB_VariantType::Single:
37409467b48Spatrick OS << Value.Value.Single;
37509467b48Spatrick break;
37609467b48Spatrick case PDB_VariantType::UInt16:
37709467b48Spatrick OS << Value.Value.UInt16;
37809467b48Spatrick break;
37909467b48Spatrick case PDB_VariantType::UInt32:
38009467b48Spatrick OS << Value.Value.UInt32;
38109467b48Spatrick break;
38209467b48Spatrick case PDB_VariantType::UInt64:
38309467b48Spatrick OS << Value.Value.UInt64;
38409467b48Spatrick break;
38509467b48Spatrick case PDB_VariantType::UInt8:
38609467b48Spatrick OS << static_cast<unsigned>(Value.Value.UInt8);
38709467b48Spatrick break;
38809467b48Spatrick case PDB_VariantType::String:
38909467b48Spatrick OS << Value.Value.String;
39009467b48Spatrick break;
39109467b48Spatrick default:
39209467b48Spatrick OS << Value.Type;
39309467b48Spatrick }
39409467b48Spatrick return OS;
39509467b48Spatrick }
39609467b48Spatrick
operator <<(raw_ostream & OS,const VersionInfo & Version)39709467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS,
39809467b48Spatrick const VersionInfo &Version) {
39909467b48Spatrick OS << Version.Major << "." << Version.Minor << "." << Version.Build;
40009467b48Spatrick return OS;
40109467b48Spatrick }
40209467b48Spatrick
operator <<(raw_ostream & OS,const TagStats & Stats)40309467b48Spatrick raw_ostream &llvm::pdb::operator<<(raw_ostream &OS, const TagStats &Stats) {
40409467b48Spatrick for (auto Tag : Stats) {
40509467b48Spatrick OS << Tag.first << ":" << Tag.second << " ";
40609467b48Spatrick }
40709467b48Spatrick return OS;
40809467b48Spatrick }
409