diff options
Diffstat (limited to 'lib/DebugInfo/PDB/Native/PDBFileBuilder.cpp')
| -rw-r--r-- | lib/DebugInfo/PDB/Native/PDBFileBuilder.cpp | 27 | 
1 files changed, 25 insertions, 2 deletions
| diff --git a/lib/DebugInfo/PDB/Native/PDBFileBuilder.cpp b/lib/DebugInfo/PDB/Native/PDBFileBuilder.cpp index 12b0c3b36c1dd..9f35fd73629cd 100644 --- a/lib/DebugInfo/PDB/Native/PDBFileBuilder.cpp +++ b/lib/DebugInfo/PDB/Native/PDBFileBuilder.cpp @@ -18,6 +18,7 @@  #include "llvm/DebugInfo/PDB/Native/InfoStream.h"  #include "llvm/DebugInfo/PDB/Native/InfoStreamBuilder.h"  #include "llvm/DebugInfo/PDB/Native/PDBStringTableBuilder.h" +#include "llvm/DebugInfo/PDB/Native/PublicsStreamBuilder.h"  #include "llvm/DebugInfo/PDB/Native/RawError.h"  #include "llvm/DebugInfo/PDB/Native/TpiStream.h"  #include "llvm/DebugInfo/PDB/Native/TpiStreamBuilder.h" @@ -33,6 +34,8 @@ using namespace llvm::support;  PDBFileBuilder::PDBFileBuilder(BumpPtrAllocator &Allocator)      : Allocator(Allocator) {} +PDBFileBuilder::~PDBFileBuilder() {} +  Error PDBFileBuilder::initialize(uint32_t BlockSize) {    auto ExpectedMsf = MSFBuilder::create(Allocator, BlockSize);    if (!ExpectedMsf) @@ -71,6 +74,12 @@ PDBStringTableBuilder &PDBFileBuilder::getStringTableBuilder() {    return Strings;  } +PublicsStreamBuilder &PDBFileBuilder::getPublicsBuilder() { +  if (!Publics) +    Publics = llvm::make_unique<PublicsStreamBuilder>(*Msf); +  return *Publics; +} +  Error PDBFileBuilder::addNamedStream(StringRef Name, uint32_t Size) {    auto ExpectedStream = Msf->addStream(Size);    if (!ExpectedStream) @@ -96,8 +105,6 @@ Expected<msf::MSFLayout> PDBFileBuilder::finalizeMsfLayout() {      return std::move(EC);    if (auto EC = addNamedStream("/LinkInfo", 0))      return std::move(EC); -  if (auto EC = addNamedStream("/src/headerblock", 0)) -    return std::move(EC);    if (Info) {      if (auto EC = Info->finalizeMsfLayout()) @@ -115,6 +122,14 @@ Expected<msf::MSFLayout> PDBFileBuilder::finalizeMsfLayout() {      if (auto EC = Ipi->finalizeMsfLayout())        return std::move(EC);    } +  if (Publics) { +    if (auto EC = Publics->finalizeMsfLayout()) +      return std::move(EC); +    if (Dbi) { +      Dbi->setPublicsStreamIndex(Publics->getStreamIndex()); +      Dbi->setSymbolRecordStreamIndex(Publics->getRecordStreamIdx()); +    } +  }    return Msf->build();  } @@ -194,5 +209,13 @@ Error PDBFileBuilder::commit(StringRef Filename) {        return EC;    } +  if (Publics) { +    auto PS = WritableMappedBlockStream::createIndexedStream( +        Layout, Buffer, Publics->getStreamIndex(), Allocator); +    BinaryStreamWriter PSWriter(*PS); +    if (auto EC = Publics->commit(PSWriter)) +      return EC; +  } +    return Buffer.commit();  } | 
