public:
DIARawSymbol(const DIASession &PDBSession, CComPtr<IDiaSymbol> DiaSymbol);
- void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
+ void dump(raw_ostream &OS, int Indent) const override;
CComPtr<IDiaSymbol> getDiaSymbol() const { return Symbol; }
public:
virtual ~IPDBRawSymbol();
- virtual void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const = 0;
+ virtual void dump(raw_ostream &OS, int Indent) const = 0;
virtual std::unique_ptr<IPDBEnumSymbols>
findChildren(PDB_SymType Type) const = 0;
public:
virtual ~IPDBSourceFile();
- void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const;
+ void dump(raw_ostream &OS, int Indent) const;
virtual std::string getFileName() const = 0;
virtual uint32_t getUniqueId() const = 0;
/// override the behavior to only dump known fields.
virtual void dump(raw_ostream &OS, int Indent,
PDBSymDumper &Dumper) const = 0;
- void defaultDump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const;
+ void defaultDump(raw_ostream &OS, int Indent) const;
PDB_SymType getSymTag() const;
DIA = 0,
};
-enum class PDB_DumpLevel {
- Compact,
- Normal,
- Detailed,
-};
-
-enum PDB_DumpFlags {
- PDB_DF_None = 0x0,
- PDB_DF_Functions = 0x1, // Dump functions
- PDB_DF_Data = 0x2, // Dump variables and constants
- PDB_DF_Labels = 0x4, // Dump labels
- PDB_DF_PublicSyms = 0x8, // Dump public symbols
- PDB_DF_Classes = 0x10, // Dump class types
- PDB_DF_Enums = 0x20, // Dump enums
- PDB_DF_Funcsigs = 0x40, // Dump function signatures
- PDB_DF_VTables = 0x80, // Dump virtual function tables
- PDB_DF_Thunks = 0x100, // Dump thunks
- PDB_DF_ObjFiles = 0x200, // Dump object files (compilands)
- PDB_DF_Typedefs = 0x400, // Dump typedefs
- PDB_DF_Children = 0x800, // Dump children of the current symbol
- PDB_DF_Hidden = 0x1000, // Dump everything. This is not simply a bitwise
- // or of the previous flags. It will find symbols
- // that would otherwise be missed, but can lead to
- // much slower dumps for large input files.
- PDB_DF_All = 0x7FF
-};
-inline PDB_DumpFlags operator|(PDB_DumpFlags LHS, PDB_DumpFlags RHS) {
- return static_cast<PDB_DumpFlags>((int)LHS | (int)RHS);
-}
-
-inline PDB_DumpFlags operator&(PDB_DumpFlags LHS, PDB_DumpFlags RHS) {
- return static_cast<PDB_DumpFlags>((int)LHS & (int)RHS);
-}
-
-inline PDB_DumpFlags operator~(PDB_DumpFlags LHS) {
- return static_cast<PDB_DumpFlags>(~(int)LHS);
-}
-inline PDB_DumpFlags &operator|=(PDB_DumpFlags &LHS, PDB_DumpFlags RHS) {
- return (LHS = (LHS | RHS));
-}
-inline PDB_DumpFlags &operator&=(PDB_DumpFlags &LHS, PDB_DumpFlags RHS) {
- return (LHS = (LHS & RHS));
-}
-
/// Defines a 128-bit unique identifier. This maps to a GUID on Windows, but
/// is abstracted here for the purposes of non-Windows platforms that don't have
/// the GUID structure defined.
#define RAW_METHOD_DUMP(Stream, Method) \
DumpDIAValue(Stream, Indent, StringRef(#Method), Symbol, &IDiaSymbol::Method);
-void DIARawSymbol::dump(raw_ostream &OS, int Indent,
- PDB_DumpLevel Level) const {
+void DIARawSymbol::dump(raw_ostream &OS, int Indent) const {
RAW_METHOD_DUMP(OS, get_access)
RAW_METHOD_DUMP(OS, get_addressOffset)
RAW_METHOD_DUMP(OS, get_addressSection)
IPDBSourceFile::~IPDBSourceFile() {}
-void IPDBSourceFile::dump(raw_ostream &OS, int Indent,
- PDB_DumpLevel Level) const {
- if (Level == PDB_DumpLevel::Compact) {
- OS.indent(Indent);
- PDB_Checksum ChecksumType = getChecksumType();
- OS << "[";
- if (ChecksumType != PDB_Checksum::None) {
- OS << ChecksumType << ": ";
- std::string Checksum = getChecksum();
- for (uint8_t c : Checksum)
- OS << format_hex_no_prefix(c, 2, true);
- } else
- OS << "No checksum";
- OS << "] " << getFileName() << "\n";
- }
+void IPDBSourceFile::dump(raw_ostream &OS, int Indent) const {
+ OS.indent(Indent);
+ PDB_Checksum ChecksumType = getChecksumType();
+ OS << "[";
+ if (ChecksumType != PDB_Checksum::None) {
+ OS << ChecksumType << ": ";
+ std::string Checksum = getChecksum();
+ for (uint8_t c : Checksum)
+ OS << format_hex_no_prefix(c, 2, true);
+ } else
+ OS << "No checksum";
+ OS << "] " << getFileName() << "\n";
}
#define ELSE_TRY_DUMP_TYPE(Type, Dumper) else TRY_DUMP_TYPE(Type, Dumper)
-void PDBSymbol::defaultDump(raw_ostream &OS, int Indent,
- PDB_DumpLevel Level) const {
- RawSymbol->dump(OS, Indent, Level);
+void PDBSymbol::defaultDump(raw_ostream &OS, int Indent) const {
+ RawSymbol->dump(OS, Indent);
}
PDB_SymType PDBSymbol::getSymTag() const { return RawSymbol->getSymTag(); }
if (Count > 0)
OS << newline(Indent);
OS << "}";
- OS.flush();
}
int ClassDefinitionDumper::dumpAccessGroup(PDB_MemberAccess Access,
OS << newline(Indent);
TypedefDumper Dumper;
Dumper.start(Symbol, OS, Indent);
- OS.flush();
}
void ClassDefinitionDumper::dump(const PDBSymbolTypeUDT &Symbol,
OS << ", ";
}
}
- OS.flush();
OS << ")";
if (Symbol.isConstType())
OS << " const";
raw_ostream &OS, int Indent) {
// PDBSymbolTypeFunctionArg is just a shim over the real argument. Just drill
// through to the real thing and dump it.
- Symbol.defaultDump(OS, Indent, PDB_DumpLevel::Detailed);
- OS.flush();
+ Symbol.defaultDump(OS, Indent);
uint32_t TypeId = Symbol.getTypeId();
auto Type = Symbol.getSession().getSymbolById(TypeId);
if (!Type)
TypedefDumper Dumper;
Dumper.start(Symbol, OS, Indent);
- OS.flush();
}
void TypeDumper::dump(const PDBSymbolTypeUDT &Symbol, raw_ostream &OS,
Pointer = FunctionDumper::PointerType::Reference;
FunctionDumper NestedDumper;
NestedDumper.start(*FuncSig, Pointer, OS);
- OS.flush();
} else {
PointeeType->dump(OS, Indent, *this);
OS << ((Symbol.isReference()) ? "&" : "*");
case PDB_LocType::ThisRel: {
int Offset = Var.getOffset();
OS << "+" << format_hex(Var.getOffset(), 4) << " ";
- OS.flush();
dumpSymbolTypeAndName(*VarType, Var.getName(), OS);
break;
}
MockRawSymbol(PDB_SymType SymType)
: Type(SymType) {}
- void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override {}
+ void dump(raw_ostream &OS, int Indent) const override {}
std::unique_ptr<IPDBEnumSymbols>
findChildren(PDB_SymType Type) const override {