mirror of
https://github.com/RPCS3/llvm.git
synced 2026-01-31 01:25:19 +01:00
Part of the DBI stream is a list of variable length structures describing each module that contributes to the final executable. One member of this structure is a section contribution entry that describes the first section contribution in the output file for the given module. We have been leaving this structure unpopulated until now, so with this patch it is now filled out correctly. Differential Revision: https://reviews.llvm.org/D45832 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330457 91177308-0d34-0410-b5e6-96231b3b80d8
107 lines
3.1 KiB
C++
107 lines
3.1 KiB
C++
//===- DbiModuleDescriptorBuilder.h - PDB module information ----*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_DEBUGINFO_PDB_RAW_DBIMODULEDESCRIPTORBUILDER_H
|
|
#define LLVM_DEBUGINFO_PDB_RAW_DBIMODULEDESCRIPTORBUILDER_H
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h"
|
|
#include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h"
|
|
#include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h"
|
|
#include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
|
|
#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
|
|
#include "llvm/DebugInfo/PDB/Native/RawTypes.h"
|
|
#include "llvm/Support/Error.h"
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace llvm {
|
|
class BinaryStreamWriter;
|
|
|
|
namespace codeview {
|
|
class DebugSubsectionRecordBuilder;
|
|
}
|
|
|
|
namespace msf {
|
|
class MSFBuilder;
|
|
struct MSFLayout;
|
|
}
|
|
namespace pdb {
|
|
|
|
class DbiModuleDescriptorBuilder {
|
|
friend class DbiStreamBuilder;
|
|
|
|
public:
|
|
DbiModuleDescriptorBuilder(StringRef ModuleName, uint32_t ModIndex,
|
|
msf::MSFBuilder &Msf);
|
|
~DbiModuleDescriptorBuilder();
|
|
|
|
DbiModuleDescriptorBuilder(const DbiModuleDescriptorBuilder &) = delete;
|
|
DbiModuleDescriptorBuilder &
|
|
operator=(const DbiModuleDescriptorBuilder &) = delete;
|
|
|
|
void setPdbFilePathNI(uint32_t NI);
|
|
void setObjFileName(StringRef Name);
|
|
void setFirstSectionContrib(const SectionContrib &SC);
|
|
void addSymbol(codeview::CVSymbol Symbol);
|
|
|
|
void
|
|
addDebugSubsection(std::shared_ptr<codeview::DebugSubsection> Subsection);
|
|
|
|
void
|
|
addDebugSubsection(const codeview::DebugSubsectionRecord &SubsectionContents);
|
|
|
|
uint16_t getStreamIndex() const;
|
|
StringRef getModuleName() const { return ModuleName; }
|
|
StringRef getObjFileName() const { return ObjFileName; }
|
|
|
|
unsigned getModuleIndex() const { return Layout.Mod; }
|
|
|
|
ArrayRef<std::string> source_files() const {
|
|
return makeArrayRef(SourceFiles);
|
|
}
|
|
|
|
uint32_t calculateSerializedLength() const;
|
|
|
|
/// Return the offset within the module symbol stream of the next symbol
|
|
/// record passed to addSymbol. Add four to account for the signature.
|
|
uint32_t getNextSymbolOffset() const { return SymbolByteSize + 4; }
|
|
|
|
void finalize();
|
|
Error finalizeMsfLayout();
|
|
|
|
Error commit(BinaryStreamWriter &ModiWriter, const msf::MSFLayout &MsfLayout,
|
|
WritableBinaryStreamRef MsfBuffer);
|
|
|
|
private:
|
|
uint32_t calculateC13DebugInfoSize() const;
|
|
|
|
void addSourceFile(StringRef Path);
|
|
msf::MSFBuilder &MSF;
|
|
|
|
uint32_t SymbolByteSize = 0;
|
|
uint32_t PdbFilePathNI = 0;
|
|
std::string ModuleName;
|
|
std::string ObjFileName;
|
|
std::vector<std::string> SourceFiles;
|
|
std::vector<codeview::CVSymbol> Symbols;
|
|
|
|
std::vector<std::unique_ptr<codeview::DebugSubsectionRecordBuilder>>
|
|
C13Builders;
|
|
|
|
ModuleInfoHeader Layout;
|
|
};
|
|
|
|
} // end namespace pdb
|
|
|
|
} // end namespace llvm
|
|
|
|
#endif // LLVM_DEBUGINFO_PDB_RAW_DBIMODULEDESCRIPTORBUILDER_H
|