forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			123 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===- DumpOutputStyle.h -------------------------------------- *- C++ --*-===//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #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;
 | |
| class TypeReferenceTracker;
 | |
| 
 | |
| 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;
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   using KindAndStat = std::pair<uint32_t, Stat>;
 | |
| 
 | |
|   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;
 | |
| 
 | |
|   std::vector<KindAndStat> getStatsSortedBySize() const;
 | |
| };
 | |
| 
 | |
| class DumpOutputStyle : public OutputStyle {
 | |
| 
 | |
| public:
 | |
|   DumpOutputStyle(InputFile &File);
 | |
|   ~DumpOutputStyle() override;
 | |
| 
 | |
|   Error dump() override;
 | |
| 
 | |
| private:
 | |
|   PDBFile &getPdb();
 | |
|   object::COFFObjectFile &getObj();
 | |
| 
 | |
|   void printStreamNotValidForObj();
 | |
|   void printStreamNotPresent(StringRef StreamName);
 | |
| 
 | |
|   Error dumpFileSummary();
 | |
|   Error dumpStreamSummary();
 | |
|   Error dumpSymbolStats();
 | |
|   Error dumpUdtStats();
 | |
|   Error dumpTypeStats();
 | |
|   Error dumpNamedStreams();
 | |
|   Error dumpStringTable();
 | |
|   Error dumpStringTableFromPdb();
 | |
|   Error dumpStringTableFromObj();
 | |
|   Error dumpLines();
 | |
|   Error dumpInlineeLines();
 | |
|   Error dumpXmi();
 | |
|   Error dumpXme();
 | |
|   Error dumpFpo();
 | |
|   Error dumpOldFpo(PDBFile &File);
 | |
|   Error dumpNewFpo(PDBFile &File);
 | |
|   Error dumpTpiStream(uint32_t StreamIdx);
 | |
|   Error dumpTypesFromObjectFile();
 | |
|   Error dumpTypeRefStats();
 | |
|   Error dumpModules();
 | |
|   Error dumpModuleFiles();
 | |
|   Error dumpModuleSymsForPdb();
 | |
|   Error dumpModuleSymsForObj();
 | |
|   Error dumpGSIRecords();
 | |
|   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;
 | |
|   std::unique_ptr<TypeReferenceTracker> RefTracker;
 | |
|   LinePrinter P;
 | |
|   SmallVector<StreamInfo, 32> StreamPurposes;
 | |
| };
 | |
| } // namespace pdb
 | |
| } // namespace llvm
 | |
| 
 | |
| #endif
 |