forked from OSchip/llvm-project
[NFC] Refactor llvm::zlib namespace
* Refactor compression namespaces across the project, making way for a possible introduction of alternatives to zlib compression. Changes are as follows: * Relocate the `llvm::zlib` namespace to `llvm::compression::zlib`. Reviewed By: MaskRay, leonardchan, phosek Differential Revision: https://reviews.llvm.org/D128953
This commit is contained in:
parent
eb1ffd817c
commit
ea61750c35
|
@ -190,9 +190,9 @@ public:
|
|||
RawTable.append(std::string(S));
|
||||
RawTable.push_back(0);
|
||||
}
|
||||
if (llvm::zlib::isAvailable()) {
|
||||
if (llvm::compression::zlib::isAvailable()) {
|
||||
llvm::SmallString<1> Compressed;
|
||||
llvm::zlib::compress(RawTable, Compressed);
|
||||
llvm::compression::zlib::compress(RawTable, Compressed);
|
||||
write32(RawTable.size(), OS);
|
||||
OS << Compressed;
|
||||
} else {
|
||||
|
@ -223,7 +223,7 @@ llvm::Expected<StringTableIn> readStringTable(llvm::StringRef Data) {
|
|||
llvm::SmallString<1> UncompressedStorage;
|
||||
if (UncompressedSize == 0) // No compression
|
||||
Uncompressed = R.rest();
|
||||
else if (llvm::zlib::isAvailable()) {
|
||||
else if (llvm::compression::zlib::isAvailable()) {
|
||||
// Don't allocate a massive buffer if UncompressedSize was corrupted
|
||||
// This is effective for sharded index, but not big monolithic ones, as
|
||||
// once compressed size reaches 4MB nothing can be ruled out.
|
||||
|
@ -233,8 +233,8 @@ llvm::Expected<StringTableIn> readStringTable(llvm::StringRef Data) {
|
|||
return error("Bad stri table: uncompress {0} -> {1} bytes is implausible",
|
||||
R.rest().size(), UncompressedSize);
|
||||
|
||||
if (llvm::Error E = llvm::zlib::uncompress(R.rest(), UncompressedStorage,
|
||||
UncompressedSize))
|
||||
if (llvm::Error E = llvm::compression::zlib::uncompress(
|
||||
R.rest(), UncompressedStorage, UncompressedSize))
|
||||
return std::move(E);
|
||||
Uncompressed = UncompressedStorage;
|
||||
} else
|
||||
|
|
|
@ -391,7 +391,7 @@ TEST(SerializationTest, NoCrashOnBadArraySize) {
|
|||
// Check we detect invalid string table size size without allocating it first.
|
||||
// If this detection fails, the test should allocate a huge array and crash.
|
||||
TEST(SerializationTest, NoCrashOnBadStringTableSize) {
|
||||
if (!llvm::zlib::isAvailable()) {
|
||||
if (!llvm::compression::zlib::isAvailable()) {
|
||||
log("skipping test, no zlib");
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1144,7 +1144,7 @@ static void RenderDebugInfoCompressionArgs(const ArgList &Args,
|
|||
if (Value == "none") {
|
||||
CmdArgs.push_back("--compress-debug-sections=none");
|
||||
} else if (Value == "zlib") {
|
||||
if (llvm::zlib::isAvailable()) {
|
||||
if (llvm::compression::zlib::isAvailable()) {
|
||||
CmdArgs.push_back(
|
||||
Args.MakeArgString("--compress-debug-sections=" + Twine(Value)));
|
||||
} else {
|
||||
|
|
|
@ -1462,13 +1462,13 @@ bool ASTReader::ReadSLocEntry(int ID) {
|
|||
unsigned RecCode = MaybeRecCode.get();
|
||||
|
||||
if (RecCode == SM_SLOC_BUFFER_BLOB_COMPRESSED) {
|
||||
if (!llvm::zlib::isAvailable()) {
|
||||
if (!llvm::compression::zlib::isAvailable()) {
|
||||
Error("zlib is not available");
|
||||
return nullptr;
|
||||
}
|
||||
SmallString<0> Uncompressed;
|
||||
if (llvm::Error E =
|
||||
llvm::zlib::uncompress(Blob, Uncompressed, Record[0])) {
|
||||
if (llvm::Error E = llvm::compression::zlib::uncompress(
|
||||
Blob, Uncompressed, Record[0])) {
|
||||
Error("could not decompress embedded file contents: " +
|
||||
llvm::toString(std::move(E)));
|
||||
return nullptr;
|
||||
|
|
|
@ -2001,8 +2001,8 @@ static void emitBlob(llvm::BitstreamWriter &Stream, StringRef Blob,
|
|||
// Compress the buffer if possible. We expect that almost all PCM
|
||||
// consumers will not want its contents.
|
||||
SmallString<0> CompressedBuffer;
|
||||
if (llvm::zlib::isAvailable()) {
|
||||
llvm::zlib::compress(Blob.drop_back(1), CompressedBuffer);
|
||||
if (llvm::compression::zlib::isAvailable()) {
|
||||
llvm::compression::zlib::compress(Blob.drop_back(1), CompressedBuffer);
|
||||
RecordDataType Record[] = {SM_SLOC_BUFFER_BLOB_COMPRESSED, Blob.size() - 1};
|
||||
Stream.EmitRecordWithBlob(SLocBufferBlobCompressedAbbrv, Record,
|
||||
CompressedBuffer);
|
||||
|
|
|
@ -951,7 +951,7 @@ static bool getCompressDebugSections(opt::InputArgList &args) {
|
|||
return false;
|
||||
if (s != "zlib")
|
||||
error("unknown --compress-debug-sections value: " + s);
|
||||
if (!zlib::isAvailable())
|
||||
if (!compression::zlib::isAvailable())
|
||||
error("--compress-debug-sections: zlib is not available");
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ InputSectionBase::InputSectionBase(InputFile *file, uint64_t flags,
|
|||
// If SHF_COMPRESSED is set, parse the header. The legacy .zdebug format is no
|
||||
// longer supported.
|
||||
if (flags & SHF_COMPRESSED) {
|
||||
if (!zlib::isAvailable())
|
||||
if (!compression::zlib::isAvailable())
|
||||
error(toString(file) + ": contains a compressed section, " +
|
||||
"but zlib is not available");
|
||||
invokeELFT(parseCompressedHeader);
|
||||
|
@ -122,7 +122,8 @@ void InputSectionBase::uncompress() const {
|
|||
uncompressedBuf = bAlloc().Allocate<char>(size);
|
||||
}
|
||||
|
||||
if (Error e = zlib::uncompress(toStringRef(rawData), uncompressedBuf, size))
|
||||
if (Error e = compression::zlib::uncompress(toStringRef(rawData),
|
||||
uncompressedBuf, size))
|
||||
fatal(toString(this) +
|
||||
": uncompress failed: " + llvm::toString(std::move(e)));
|
||||
rawData = makeArrayRef((uint8_t *)uncompressedBuf, size);
|
||||
|
@ -1217,7 +1218,8 @@ template <class ELFT> void InputSection::writeTo(uint8_t *buf) {
|
|||
// to the buffer.
|
||||
if (uncompressedSize >= 0) {
|
||||
size_t size = uncompressedSize;
|
||||
if (Error e = zlib::uncompress(toStringRef(rawData), (char *)buf, size))
|
||||
if (Error e = compression::zlib::uncompress(toStringRef(rawData),
|
||||
(char *)buf, size))
|
||||
fatal(toString(this) +
|
||||
": uncompress failed: " + llvm::toString(std::move(e)));
|
||||
uint8_t *bufEnd = buf + size;
|
||||
|
|
|
@ -202,6 +202,11 @@ Changes to the C API
|
|||
* Add ``LLVMDeleteInstruction`` function which allows deleting instructions that
|
||||
are not inserted into a basic block.
|
||||
|
||||
* Refactor compression namespaces across the project, making way for a possible
|
||||
introduction of alternatives to zlib compression in the llvm toolchain.
|
||||
Changes are as follows:
|
||||
* Relocate the ``llvm::zlib`` namespace to ``llvm::compression::zlib``.
|
||||
|
||||
Changes to the Go bindings
|
||||
--------------------------
|
||||
|
||||
|
|
|
@ -20,6 +20,8 @@ template <typename T> class SmallVectorImpl;
|
|||
class Error;
|
||||
class StringRef;
|
||||
|
||||
namespace compression {
|
||||
|
||||
namespace zlib {
|
||||
|
||||
static constexpr int NoCompression = 0;
|
||||
|
@ -41,7 +43,9 @@ Error uncompress(StringRef InputBuffer,
|
|||
|
||||
uint32_t crc32(StringRef Buffer);
|
||||
|
||||
} // End of namespace zlib
|
||||
} // End of namespace zlib
|
||||
|
||||
} // End of namespace compression
|
||||
|
||||
} // End of namespace llvm
|
||||
|
||||
|
|
|
@ -876,8 +876,9 @@ void ELFWriter::writeSectionData(const MCAssembler &Asm, MCSection &Sec,
|
|||
Asm.writeSectionData(VecOS, &Section, Layout);
|
||||
|
||||
SmallVector<char, 128> CompressedContents;
|
||||
zlib::compress(StringRef(UncompressedData.data(), UncompressedData.size()),
|
||||
CompressedContents);
|
||||
compression::zlib::compress(
|
||||
StringRef(UncompressedData.data(), UncompressedData.size()),
|
||||
CompressedContents);
|
||||
|
||||
bool ZlibStyle = MAI->compressDebugSections() == DebugCompressionType::Z;
|
||||
if (!maybeWriteCompression(UncompressedData.size(), CompressedContents,
|
||||
|
|
|
@ -468,8 +468,9 @@ Error ELFSectionWriter<ELFT>::visit(const DecompressedSection &Sec) {
|
|||
Sec.OriginalData.size() - DataOffset);
|
||||
|
||||
SmallVector<char, 128> DecompressedContent;
|
||||
if (Error Err = zlib::uncompress(CompressedContent, DecompressedContent,
|
||||
static_cast<size_t>(Sec.Size)))
|
||||
if (Error Err =
|
||||
compression::zlib::uncompress(CompressedContent, DecompressedContent,
|
||||
static_cast<size_t>(Sec.Size)))
|
||||
return createStringError(errc::invalid_argument,
|
||||
"'" + Sec.Name + "': " + toString(std::move(Err)));
|
||||
|
||||
|
@ -544,9 +545,10 @@ CompressedSection::CompressedSection(const SectionBase &Sec,
|
|||
DebugCompressionType CompressionType)
|
||||
: SectionBase(Sec), CompressionType(CompressionType),
|
||||
DecompressedSize(Sec.OriginalData.size()), DecompressedAlign(Sec.Align) {
|
||||
zlib::compress(StringRef(reinterpret_cast<const char *>(OriginalData.data()),
|
||||
OriginalData.size()),
|
||||
CompressedData);
|
||||
compression::zlib::compress(
|
||||
StringRef(reinterpret_cast<const char *>(OriginalData.data()),
|
||||
OriginalData.size()),
|
||||
CompressedData);
|
||||
|
||||
assert(CompressionType != DebugCompressionType::None);
|
||||
Flags |= ELF::SHF_COMPRESSED;
|
||||
|
|
|
@ -19,7 +19,7 @@ using namespace object;
|
|||
|
||||
Expected<Decompressor> Decompressor::create(StringRef Name, StringRef Data,
|
||||
bool IsLE, bool Is64Bit) {
|
||||
if (!zlib::isAvailable())
|
||||
if (!compression::zlib::isAvailable())
|
||||
return createError("zlib is not available");
|
||||
|
||||
Decompressor D(Data);
|
||||
|
@ -94,5 +94,5 @@ bool Decompressor::isCompressedELFSection(uint64_t Flags, StringRef Name) {
|
|||
|
||||
Error Decompressor::decompress(MutableArrayRef<char> Buffer) {
|
||||
size_t Size = Buffer.size();
|
||||
return zlib::uncompress(SectionData, Buffer.data(), Size);
|
||||
return compression::zlib::uncompress(SectionData, Buffer.data(), Size);
|
||||
}
|
||||
|
|
|
@ -119,7 +119,7 @@ Error RawCoverageFilenamesReader::read(CovMapVersion Version) {
|
|||
return Err;
|
||||
|
||||
if (CompressedLen > 0) {
|
||||
if (!zlib::isAvailable())
|
||||
if (!compression::zlib::isAvailable())
|
||||
return make_error<CoverageMapError>(
|
||||
coveragemap_error::decompression_failed);
|
||||
|
||||
|
@ -129,8 +129,8 @@ Error RawCoverageFilenamesReader::read(CovMapVersion Version) {
|
|||
// Read compressed filenames.
|
||||
StringRef CompressedFilenames = Data.substr(0, CompressedLen);
|
||||
Data = Data.substr(CompressedLen);
|
||||
auto Err =
|
||||
zlib::uncompress(CompressedFilenames, StorageBuf, UncompressedLen);
|
||||
auto Err = compression::zlib::uncompress(CompressedFilenames, StorageBuf,
|
||||
UncompressedLen);
|
||||
if (Err) {
|
||||
consumeError(std::move(Err));
|
||||
return make_error<CoverageMapError>(
|
||||
|
|
|
@ -47,10 +47,11 @@ void CoverageFilenamesSectionWriter::write(raw_ostream &OS, bool Compress) {
|
|||
}
|
||||
|
||||
SmallString<128> CompressedStr;
|
||||
bool doCompression =
|
||||
Compress && zlib::isAvailable() && DoInstrProfNameCompression;
|
||||
bool doCompression = Compress && compression::zlib::isAvailable() &&
|
||||
DoInstrProfNameCompression;
|
||||
if (doCompression)
|
||||
zlib::compress(FilenamesStr, CompressedStr, zlib::BestSizeCompression);
|
||||
compression::zlib::compress(FilenamesStr, CompressedStr,
|
||||
compression::zlib::BestSizeCompression);
|
||||
|
||||
// ::= <num-filenames>
|
||||
// <uncompressed-len>
|
||||
|
|
|
@ -467,8 +467,9 @@ Error collectPGOFuncNameStrings(ArrayRef<std::string> NameStrs,
|
|||
}
|
||||
|
||||
SmallString<128> CompressedNameStrings;
|
||||
zlib::compress(StringRef(UncompressedNameStrings), CompressedNameStrings,
|
||||
zlib::BestSizeCompression);
|
||||
compression::zlib::compress(StringRef(UncompressedNameStrings),
|
||||
CompressedNameStrings,
|
||||
compression::zlib::BestSizeCompression);
|
||||
|
||||
return WriteStringToResult(CompressedNameStrings.size(),
|
||||
CompressedNameStrings);
|
||||
|
@ -488,7 +489,7 @@ Error collectPGOFuncNameStrings(ArrayRef<GlobalVariable *> NameVars,
|
|||
NameStrs.push_back(std::string(getPGOFuncNameVarInitializer(NameVar)));
|
||||
}
|
||||
return collectPGOFuncNameStrings(
|
||||
NameStrs, zlib::isAvailable() && doCompression, Result);
|
||||
NameStrs, compression::zlib::isAvailable() && doCompression, Result);
|
||||
}
|
||||
|
||||
Error readPGOFuncNameStrings(StringRef NameStrings, InstrProfSymtab &Symtab) {
|
||||
|
@ -504,14 +505,14 @@ Error readPGOFuncNameStrings(StringRef NameStrings, InstrProfSymtab &Symtab) {
|
|||
SmallString<128> UncompressedNameStrings;
|
||||
StringRef NameStrings;
|
||||
if (isCompressed) {
|
||||
if (!llvm::zlib::isAvailable())
|
||||
if (!llvm::compression::zlib::isAvailable())
|
||||
return make_error<InstrProfError>(instrprof_error::zlib_unavailable);
|
||||
|
||||
StringRef CompressedNameStrings(reinterpret_cast<const char *>(P),
|
||||
CompressedSize);
|
||||
if (Error E =
|
||||
zlib::uncompress(CompressedNameStrings, UncompressedNameStrings,
|
||||
UncompressedSize)) {
|
||||
if (Error E = compression::zlib::uncompress(CompressedNameStrings,
|
||||
UncompressedNameStrings,
|
||||
UncompressedSize)) {
|
||||
consumeError(std::move(E));
|
||||
return make_error<InstrProfError>(instrprof_error::uncompress_failed);
|
||||
}
|
||||
|
|
|
@ -877,7 +877,7 @@ std::error_code SampleProfileReaderExtBinaryBase::decompressSection(
|
|||
if (std::error_code EC = CompressSize.getError())
|
||||
return EC;
|
||||
|
||||
if (!llvm::zlib::isAvailable())
|
||||
if (!llvm::compression::zlib::isAvailable())
|
||||
return sampleprof_error::zlib_unavailable;
|
||||
|
||||
StringRef CompressedStrings(reinterpret_cast<const char *>(Data),
|
||||
|
@ -885,7 +885,7 @@ std::error_code SampleProfileReaderExtBinaryBase::decompressSection(
|
|||
char *Buffer = Allocator.Allocate<char>(DecompressBufSize);
|
||||
size_t UCSize = DecompressBufSize;
|
||||
llvm::Error E =
|
||||
zlib::uncompress(CompressedStrings, Buffer, UCSize);
|
||||
compression::zlib::uncompress(CompressedStrings, Buffer, UCSize);
|
||||
if (E)
|
||||
return sampleprof_error::uncompress_failed;
|
||||
DecompressBuf = reinterpret_cast<const uint8_t *>(Buffer);
|
||||
|
|
|
@ -78,7 +78,7 @@ SampleProfileWriterExtBinaryBase::markSectionStart(SecType Type,
|
|||
}
|
||||
|
||||
std::error_code SampleProfileWriterExtBinaryBase::compressAndOutput() {
|
||||
if (!llvm::zlib::isAvailable())
|
||||
if (!llvm::compression::zlib::isAvailable())
|
||||
return sampleprof_error::zlib_unavailable;
|
||||
std::string &UncompressedStrings =
|
||||
static_cast<raw_string_ostream *>(LocalBufStream.get())->str();
|
||||
|
@ -86,8 +86,8 @@ std::error_code SampleProfileWriterExtBinaryBase::compressAndOutput() {
|
|||
return sampleprof_error::success;
|
||||
auto &OS = *OutputStream;
|
||||
SmallString<128> CompressedStrings;
|
||||
zlib::compress(UncompressedStrings, CompressedStrings,
|
||||
zlib::BestSizeCompression);
|
||||
compression::zlib::compress(UncompressedStrings, CompressedStrings,
|
||||
compression::zlib::BestSizeCompression);
|
||||
encodeULEB128(UncompressedStrings.size(), OS);
|
||||
encodeULEB128(CompressedStrings.size(), OS);
|
||||
OS << CompressedStrings.str();
|
||||
|
|
|
@ -22,11 +22,9 @@
|
|||
#endif
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvm::compression;
|
||||
|
||||
#if LLVM_ENABLE_ZLIB
|
||||
static Error createError(StringRef Err) {
|
||||
return make_error<StringError>(Err, inconvertibleErrorCode());
|
||||
}
|
||||
|
||||
static StringRef convertZlibCodeToString(int Code) {
|
||||
switch (Code) {
|
||||
|
@ -70,15 +68,17 @@ Error zlib::uncompress(StringRef InputBuffer, char *UncompressedBuffer,
|
|||
// Tell MemorySanitizer that zlib output buffer is fully initialized.
|
||||
// This avoids a false report when running LLVM with uninstrumented ZLib.
|
||||
__msan_unpoison(UncompressedBuffer, UncompressedSize);
|
||||
return Res ? createError(convertZlibCodeToString(Res)) : Error::success();
|
||||
return Res ? make_error<StringError>(convertZlibCodeToString(Res),
|
||||
inconvertibleErrorCode())
|
||||
: Error::success();
|
||||
}
|
||||
|
||||
Error zlib::uncompress(StringRef InputBuffer,
|
||||
SmallVectorImpl<char> &UncompressedBuffer,
|
||||
size_t UncompressedSize) {
|
||||
UncompressedBuffer.resize_for_overwrite(UncompressedSize);
|
||||
Error E =
|
||||
uncompress(InputBuffer, UncompressedBuffer.data(), UncompressedSize);
|
||||
Error E = zlib::uncompress(InputBuffer, UncompressedBuffer.data(),
|
||||
UncompressedSize);
|
||||
UncompressedBuffer.truncate(UncompressedSize);
|
||||
return E;
|
||||
}
|
||||
|
|
|
@ -403,7 +403,7 @@ int main(int argc, char **argv) {
|
|||
MAI->setRelaxELFRelocations(RelaxELFRel);
|
||||
|
||||
if (CompressDebugSections != DebugCompressionType::None) {
|
||||
if (!zlib::isAvailable()) {
|
||||
if (!compression::zlib::isAvailable()) {
|
||||
WithColor::error(errs(), ProgName)
|
||||
<< "build tools with zlib to enable -compress-debug-sections";
|
||||
return 1;
|
||||
|
|
|
@ -739,7 +739,7 @@ objcopy::parseObjcopyOptions(ArrayRef<const char *> RawArgsArr,
|
|||
.str()
|
||||
.c_str());
|
||||
}
|
||||
if (!zlib::isAvailable())
|
||||
if (!compression::zlib::isAvailable())
|
||||
return createStringError(
|
||||
errc::invalid_argument,
|
||||
"LLVM was not compiled with LLVM_ENABLE_ZLIB: can not compress");
|
||||
|
@ -998,7 +998,7 @@ objcopy::parseObjcopyOptions(ArrayRef<const char *> RawArgsArr,
|
|||
"--decompress-debug-sections");
|
||||
}
|
||||
|
||||
if (Config.DecompressDebugSections && !zlib::isAvailable())
|
||||
if (Config.DecompressDebugSections && !compression::zlib::isAvailable())
|
||||
return createStringError(
|
||||
errc::invalid_argument,
|
||||
"LLVM was not compiled with LLVM_ENABLE_ZLIB: cannot decompress");
|
||||
|
|
|
@ -1147,14 +1147,16 @@ TEST_P(MaybeSparseInstrProfTest, instr_prof_symtab_compression_test) {
|
|||
// Compressing:
|
||||
std::string FuncNameStrings1;
|
||||
EXPECT_THAT_ERROR(collectPGOFuncNameStrings(
|
||||
FuncNames1, (DoCompression && zlib::isAvailable()),
|
||||
FuncNames1,
|
||||
(DoCompression && compression::zlib::isAvailable()),
|
||||
FuncNameStrings1),
|
||||
Succeeded());
|
||||
|
||||
// Compressing:
|
||||
std::string FuncNameStrings2;
|
||||
EXPECT_THAT_ERROR(collectPGOFuncNameStrings(
|
||||
FuncNames2, (DoCompression && zlib::isAvailable()),
|
||||
FuncNames2,
|
||||
(DoCompression && compression::zlib::isAvailable()),
|
||||
FuncNameStrings2),
|
||||
Succeeded());
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace llvm;
|
||||
using namespace llvm::compression;
|
||||
|
||||
namespace {
|
||||
|
||||
|
|
Loading…
Reference in New Issue