diff options
author | Zachary Turner <zturner@google.com> | 2016-07-15 22:17:08 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2016-07-15 22:17:08 +0000 |
commit | 5e534c7fb357a157793e9a47c8a00880bdb18799 (patch) | |
tree | d0df9f3be4f297dbfb463891e8961c62d9973561 /llvm/lib/DebugInfo/PDB/Raw/NameMapBuilder.cpp | |
parent | faa554b2fd6c327cb9cc0ac9983bd3c178f2276c (diff) | |
download | llvm-5e534c7fb357a157793e9a47c8a00880bdb18799.zip llvm-5e534c7fb357a157793e9a47c8a00880bdb18799.tar.gz llvm-5e534c7fb357a157793e9a47c8a00880bdb18799.tar.bz2 |
[pdb] Round trip the NameMap data structure to YAML.
llvm-svn: 275628
Diffstat (limited to 'llvm/lib/DebugInfo/PDB/Raw/NameMapBuilder.cpp')
-rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/NameMapBuilder.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/llvm/lib/DebugInfo/PDB/Raw/NameMapBuilder.cpp b/llvm/lib/DebugInfo/PDB/Raw/NameMapBuilder.cpp index fe033c3..41c6c2c 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/NameMapBuilder.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/NameMapBuilder.cpp @@ -10,17 +10,41 @@ #include "llvm/DebugInfo/PDB/Raw/NameMapBuilder.h" #include "llvm/DebugInfo/PDB/Raw/NameMap.h" +#include "llvm/Support/Endian.h" using namespace llvm; using namespace llvm::pdb; NameMapBuilder::NameMapBuilder() {} +void NameMapBuilder::addMapping(StringRef Name, uint32_t Mapping) { + StringDataBytes += Name.size() + 1; + Map.insert({Name, Mapping}); +} + Expected<std::unique_ptr<NameMap>> NameMapBuilder::build() { - return llvm::make_unique<NameMap>(); + auto Result = llvm::make_unique<NameMap>(); + Result->Mapping = Map; + return std::move(Result); } uint32_t NameMapBuilder::calculateSerializedLength() const { - // For now we write an empty name map, nothing else. - return 5 * sizeof(uint32_t); + uint32_t TotalLength = 0; + + TotalLength += sizeof(support::ulittle32_t); // StringDataBytes value + TotalLength += StringDataBytes; // actual string data + + TotalLength += sizeof(support::ulittle32_t); // Hash Size + TotalLength += sizeof(support::ulittle32_t); // Max Number of Strings + TotalLength += sizeof(support::ulittle32_t); // Num Present Words + // One bitmask word for each present entry + TotalLength += Map.size() * sizeof(support::ulittle32_t); + TotalLength += sizeof(support::ulittle32_t); // Num Deleted Words + + // For each present word, which we are treating as equivalent to the number of + // entries in the table, we have a pair of integers. An offset into the + // string data, and a corresponding stream number. + TotalLength += Map.size() * 2 * sizeof(support::ulittle32_t); + + return TotalLength; } |