diff options
| author | Zachary Turner <zturner@google.com> | 2017-01-25 21:17:40 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2017-01-25 21:17:40 +0000 |
| commit | 29da5db7a0bb0fefbebc1e8ecaa1da557130cd4d (patch) | |
| tree | 26eecd515187d7a13ee811dd2a3eddcac2e0fbe2 /llvm/lib/DebugInfo/PDB | |
| parent | 6ec3b468ddd4448814194091a42e63f026adadeb (diff) | |
| download | bcm5719-llvm-29da5db7a0bb0fefbebc1e8ecaa1da557130cd4d.tar.gz bcm5719-llvm-29da5db7a0bb0fefbebc1e8ecaa1da557130cd4d.zip | |
[pdb] Correctly parse the hash adjusters table from TPI stream.
This is not a list of pairs, it is a hash table data structure. We now
correctly parse this out and dump it from llvm-pdbdump.
We still need to understand the conditions that lead to a type
getting an entry in the hash adjuster table. That will be done
in a followup investigation / patch.
Differential Revision: https://reviews.llvm.org/D29090
llvm-svn: 293090
Diffstat (limited to 'llvm/lib/DebugInfo/PDB')
| -rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp index a1167cd9845..a2cba6bcc23 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp @@ -113,11 +113,11 @@ Error TpiStream::reload() { if (auto EC = HSR.readArray(TypeIndexOffsets, NumTypeIndexOffsets)) return EC; - HSR.setOffset(Header->HashAdjBuffer.Off); - uint32_t NumHashAdjustments = - Header->HashAdjBuffer.Length / sizeof(TypeIndexOffset); - if (auto EC = HSR.readArray(HashAdjustments, NumHashAdjustments)) - return EC; + if (Header->HashAdjBuffer.Length > 0) { + HSR.setOffset(Header->HashAdjBuffer.Off); + if (auto EC = HashAdjusters.load(HSR)) + return EC; + } HashStream = std::move(HS); @@ -164,10 +164,7 @@ TpiStream::getTypeIndexOffsets() const { return TypeIndexOffsets; } -FixedStreamArray<TypeIndexOffset> -TpiStream::getHashAdjustments() const { - return HashAdjustments; -} +HashTable &TpiStream::getHashAdjusters() { return HashAdjusters; } iterator_range<CVTypeArray::Iterator> TpiStream::types(bool *HadError) const { |

