mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
5139ea485d
r342003 added support for emitting FPO data from the DEBUG_S_FRAMEDATA subsection of the .debug$S section to the PDB file. However, that is not the end of the story. FPO can end up in two different destinations in a PDB, each corresponding to a different FPO data source. The case handled by r342003 involves copying data from the DEBUG_S_FRAMEDATA subsection of the .debug$S section to the "New FPO" stream in the PDB, which is then referred to by the DBI stream. The case handled by this patch involves copying records from the .debug$F section of an object file to the "FPO" stream (or perhaps more aptly, the "Old FPO" stream) in the PDB file, which is also referred to by the DBI stream. The formats are largely similar, and the difference is mostly only visible in masm generated object files, such as some of the low-level CRT object files like memcpy. MASM doesn't appear to support writing the DEBUG_S_FRAMEDATA subsection, and instead just writes these records to the .debug$F section. Although clang-cl does not emit a .debug$F section ever, lld still needs to support it so we have good debugging for CRT functions. Differential Revision: https://reviews.llvm.org/D51958 llvm-svn: 342080
115 lines
2.6 KiB
C++
115 lines
2.6 KiB
C++
//===- 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();
|
|
|
|
void printStreamNotValidForObj();
|
|
void printStreamNotPresent(StringRef StreamName);
|
|
|
|
Error dumpFileSummary();
|
|
Error dumpStreamSummary();
|
|
Error dumpSymbolStats();
|
|
Error dumpUdtStats();
|
|
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 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;
|
|
LinePrinter P;
|
|
SmallVector<StreamInfo, 32> StreamPurposes;
|
|
};
|
|
} // namespace pdb
|
|
} // namespace llvm
|
|
|
|
#endif
|