mirror of
https://github.com/RPCSX/llvm.git
synced 2026-01-31 01:05:23 +01:00
Summary: This is a first step towards getting line info to show up in VS and windbg. So far, only llvm-pdbutil can parse the PDBs that we produce. cvdump doesn't like something about our file checksum tables. I'll have to dig into that next. This patch adds a new DebugSubsectionRecordBuilder which takes bytes directly from some other producer, such as a linker, and sticks it into the PDB. Line tables only need to be relocated. No data needs to be rewritten. File checksums and string tables, on the other hand, need to be re-done. Reviewers: zturner, ruiu Subscribers: llvm-commits, hiraditya Differential Revision: https://reviews.llvm.org/D34257 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@305713 91177308-0d34-0410-b5e6-96231b3b80d8
100 lines
2.7 KiB
C++
100 lines
2.7 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 setObjFileName(StringRef Name);
|
|
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;
|
|
|
|
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;
|
|
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
|