template <class ELFT>
ArrayRef<uint8_t> InputSectionBase<ELFT>::getSectionData() const {
if (Compressed)
- return ArrayRef<uint8_t>((const uint8_t *)Uncompressed.data(),
- Uncompressed.size());
+ return ArrayRef<uint8_t>((const uint8_t *)UncompressedData.get(),
+ UncompressedDataSize);
return check(this->File->getObj().getSectionContents(this->Header));
}
fatal(getName(this) + ": unsupported compression type");
StringRef Buf((const char *)Data.data(), Data.size());
- if (zlib::uncompress(Buf, Uncompressed, Hdr->ch_size) != zlib::StatusOK)
+ UncompressedDataSize = Hdr->ch_size;
+ UncompressedData.reset(new char[UncompressedDataSize]);
+ if (zlib::uncompress(Buf, UncompressedData.get(), UncompressedDataSize) !=
+ zlib::StatusOK)
fatal(getName(this) + ": error uncompressing section");
}
StringRef Name;
- // If a section is compressed, this vector has uncompressed section data.
- SmallVector<char, 0> Uncompressed;
+ // If a section is compressed, this has the uncompressed section data.
+ std::unique_ptr<char[]> UncompressedData;
+ size_t UncompressedDataSize = 0;
std::vector<Relocation> Relocations;
};