llvm.org GIT mirror llvm / c643a82 tools / llvm-pdbutil / DumpOutputStyle.h
c643a82

Tree @c643a82 (Download .tar.gz)

DumpOutputStyle.h @c643a82

0895032
041e9f2
 
 
 
 
 
 
 
0895032
 
041e9f2
7e5d31e
041e9f2
b6d8c58
041e9f2
b6d8c58
b18693c
435ba4a
6c8e8ae
041e9f2
435ba4a
 
041e9f2
822ef4e
d32a382
 
 
 
 
6ef51e8
 
 
 
041e9f2
4a753bd
6ef51e8
4a753bd
b6d8c58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0895032
b6d8c58
041e9f2
6ef51e8
041e9f2
3a4681d
61e0e27
041e9f2
6ef51e8
 
b18693c
7e5d31e
3a4681d
ae734ae
 
9c1e7a6
d9e5a1f
 
7b1eb00
 
68e216b
 
3a4681d
7c192ee
7e5d31e
e6f0d3c
6ef51e8
 
4a753bd
7e5d31e
4a753bd
6c8e8ae
3a4681d
 
 
6c8e8ae
 
6ef51e8
7e5d31e
b6d8c58
041e9f2
7e5d31e
 
041e9f2
 
//===- DumpOutputStyle.h -------------------------------------- *- C++ --*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_TOOLS_LLVMPDBDUMP_DUMPOUTPUTSTYLE_H
#define LLVM_TOOLS_LLVMPDBDUMP_DUMPOUTPUTSTYLE_H

#include "LinePrinter.h"
#include "OutputStyle.h"
#include "StreamUtil.h"

#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/DebugInfo/PDB/Native/RawConstants.h"

#include <string>

namespace llvm {
class BitVector;

namespace codeview {
class LazyRandomTypeCollection;
}

namespace object {
class COFFObjectFile;
}

namespace pdb {
class GSIHashTable;
class InputFile;

struct StatCollection {
  struct Stat {
    Stat() {}
    Stat(uint32_t Count, uint32_t Size) : Count(Count), Size(Size) {}
    uint32_t Count = 0;
    uint32_t Size = 0;

    void update(uint32_t RecordSize) {
      ++Count;
      Size += RecordSize;
    }
  };

  void update(uint32_t Kind, uint32_t RecordSize) {
    Totals.update(RecordSize);
    auto Iter = Individual.try_emplace(Kind, 1, RecordSize);
    if (!Iter.second)
      Iter.first->second.update(RecordSize);
  }
  Stat Totals;
  DenseMap<uint32_t, Stat> Individual;
};

class DumpOutputStyle : public OutputStyle {

public:
  DumpOutputStyle(InputFile &File);

  Error dump() override;

private:
  PDBFile &getPdb();
  object::COFFObjectFile &getObj();

  Error dumpFileSummary();
  Error dumpStreamSummary();
  Error dumpSymbolStats();
  Error dumpUdtStats();
  Error dumpStringTable();
  Error dumpStringTableFromPdb();
  Error dumpStringTableFromObj();
  Error dumpLines();
  Error dumpInlineeLines();
  Error dumpXmi();
  Error dumpXme();
  Error dumpTpiStream(uint32_t StreamIdx);
  Error dumpTypesFromObjectFile();
  Error dumpModules();
  Error dumpModuleFiles();
  Error dumpModuleSymsForPdb();
  Error dumpModuleSymsForObj();
  Error dumpGlobals();
  Error dumpPublics();
  Error dumpSymbolsFromGSI(const GSIHashTable &Table, bool HashExtras);
  Error dumpSectionHeaders();
  Error dumpSectionContribs();
  Error dumpSectionMap();

  void dumpSectionHeaders(StringRef Label, DbgHeaderType Type);

  InputFile &File;
  LinePrinter P;
  SmallVector<StreamInfo, 32> StreamPurposes;
};
} // namespace pdb
} // namespace llvm

#endif