diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-04-05 21:26:44 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-04-05 21:26:44 +0000 |
commit | b206103abcf358453ac4ed8d4373f44f4c88e5c0 (patch) | |
tree | 7cea7cb470eedc4aafa8579122e25dc4a0e0357d /lib/DebugInfo | |
parent | 48ee81c6798a415bc592255f385bdb8427b9ebcf (diff) | |
download | llvm-b206103abcf358453ac4ed8d4373f44f4c88e5c0.tar.gz llvm-b206103abcf358453ac4ed8d4373f44f4c88e5c0.tar.bz2 llvm-b206103abcf358453ac4ed8d4373f44f4c88e5c0.tar.xz |
Simplify compression API by decompressing into a SmallVector rather than a MemoryBuffer
This avoids an extra copy during decompression and avoids the use of
MemoryBuffer which is a weirdly esoteric device that includes unrelated
concepts like "file name" (its rather generic name is a bit misleading).
Similar refactoring of zlib::compress coming up.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205676 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/DebugInfo')
-rw-r--r-- | lib/DebugInfo/DWARFContext.cpp | 11 | ||||
-rw-r--r-- | lib/DebugInfo/DWARFContext.h | 2 |
2 files changed, 7 insertions, 6 deletions
diff --git a/lib/DebugInfo/DWARFContext.cpp b/lib/DebugInfo/DWARFContext.cpp index 60c5f6ab56..a287cf9edb 100644 --- a/lib/DebugInfo/DWARFContext.cpp +++ b/lib/DebugInfo/DWARFContext.cpp @@ -637,14 +637,15 @@ DWARFContextInMemory::DWARFContextInMemory(object::ObjectFile *Obj) if (!zlib::isAvailable() || !consumeCompressedDebugSectionHeader(data, OriginalSize)) continue; - std::unique_ptr<MemoryBuffer> UncompressedSection; - if (zlib::uncompress(data, UncompressedSection, OriginalSize) != - zlib::StatusOK) + UncompressedSections.resize(UncompressedSections.size() + 1); + if (zlib::uncompress(data, UncompressedSections.back(), OriginalSize) != + zlib::StatusOK) { + UncompressedSections.pop_back(); continue; + } // Make data point to uncompressed section contents and save its contents. name = name.substr(1); - data = UncompressedSection->getBuffer(); - UncompressedSections.push_back(std::move(UncompressedSection)); + data = UncompressedSections.back(); } StringRef *SectionData = diff --git a/lib/DebugInfo/DWARFContext.h b/lib/DebugInfo/DWARFContext.h index ad6841ae9e..6d1ae921ce 100644 --- a/lib/DebugInfo/DWARFContext.h +++ b/lib/DebugInfo/DWARFContext.h @@ -242,7 +242,7 @@ class DWARFContextInMemory : public DWARFContext { StringRef RangeDWOSection; StringRef AddrSection; - SmallVector<std::unique_ptr<MemoryBuffer>, 4> UncompressedSections; + SmallVector<SmallString<32>, 4> UncompressedSections; public: DWARFContextInMemory(object::ObjectFile *); |