//===----------------------------------------------------------------------===//
#include <utility>
+#include "llvm/DebugInfo/PDB/PDBExtras.h"
#include "llvm/DebugInfo/PDB/PDBSymbolData.h"
+#include "llvm/Support/Format.h"
+
using namespace llvm;
PDBSymbolData::PDBSymbolData(const IPDBSession &PDBSession,
std::unique_ptr<IPDBRawSymbol> DataSymbol)
: PDBSymbol(PDBSession, std::move(DataSymbol)) {}
-void PDBSymbolData::dump(llvm::raw_ostream &OS) const {}
\ No newline at end of file
+void PDBSymbolData::dump(raw_ostream &OS, int Indent,
+ PDB_DumpLevel Level) const {
+ OS.indent(Indent);
+ if (Level == PDB_DumpLevel::Compact) {
+ PDB_LocType Loc = getLocationType();
+ OS << Loc << " data [";
+ switch (Loc) {
+ case PDB_LocType::Static:
+ OS << format_hex(getRelativeVirtualAddress(), 10);
+ break;
+ case PDB_LocType::TLS:
+ OS << getAddressSection() << ":" << format_hex(getAddressOffset(), 10);
+ break;
+ case PDB_LocType::RegRel:
+ OS << getRegisterId() << " + " << getOffset() << "]";
+ break;
+ case PDB_LocType::ThisRel:
+ OS << "this + " << getOffset() << "]";
+ break;
+ case PDB_LocType::Enregistered:
+ OS << getRegisterId() << "]";
+ break;
+ case PDB_LocType::BitField: {
+ uint32_t Offset = getOffset();
+ uint32_t BitPos = getBitPosition();
+ uint32_t Length = getLength();
+ uint32_t StartBits = 8 - BitPos;
+ uint32_t MiddleBytes = (Length - StartBits) / 8;
+ uint32_t EndBits = Length - StartBits - MiddleBytes * 8;
+ OS << format_hex(Offset, 10) << ":" << BitPos;
+ OS << " - " << format_hex(Offset + MiddleBytes, 10) << ":" << EndBits;
+ break;
+ }
+ case PDB_LocType::Slot:
+ OS << getSlot();
+ case PDB_LocType::IlRel:
+ case PDB_LocType::MetaData:
+ case PDB_LocType::Constant:
+ default:
+ OS << "???";
+ }
+ OS << "] ";
+ }
+ OS << getName() << "\n";
+}
\ No newline at end of file