================
@@ -1331,32 +1351,66 @@ CompressedOffloadBundle::decompress(const
llvm::MemoryBuffer &Input,
// List bundle IDs. Return true if an error was found.
Error OffloadBundler::ListBundleIDsInFile(
StringRef InputFileName, const OffloadBundlerConfig &BundlerConfig) {
+
+ size_t Offset = 0;
+ size_t NextbundleStart = 0;
+ StringRef Magic; // = OFFLOAD_BUNDLER_MAGIC_STR;
+ std::unique_ptr<MemoryBuffer> Buffer;
+
// Open Input file.
- ErrorOr<std::unique_ptr<MemoryBuffer>> CodeOrErr =
+ ErrorOr<std::unique_ptr<MemoryBuffer>> Contents =
MemoryBuffer::getFileOrSTDIN(InputFileName, /*IsText=*/true);
- if (std::error_code EC = CodeOrErr.getError())
+ if (std::error_code EC = Contents.getError())
return createFileError(InputFileName, EC);
- // Decompress the input if necessary.
- Expected<std::unique_ptr<MemoryBuffer>> DecompressedBufferOrErr =
- CompressedOffloadBundle::decompress(**CodeOrErr, BundlerConfig.Verbose);
- if (!DecompressedBufferOrErr)
- return createStringError(
- inconvertibleErrorCode(),
- "Failed to decompress input: " +
- llvm::toString(DecompressedBufferOrErr.takeError()));
+ // There may be multiple bundles.
+ while ((NextbundleStart != StringRef::npos) &&
+ (Offset < (**Contents).getBufferSize())) {
+ Buffer = MemoryBuffer::getMemBuffer(
+ (**Contents).getBuffer().drop_front(Offset), "",
+ /*RequiresNullTerminator=*/false);
+
+ if (identify_magic((*Buffer).getBuffer()) ==
+ file_magic::offload_bundle_compressed) {
+ Magic = "CCOB";
+ NextbundleStart = (*Buffer).getBuffer().find(Magic, Magic.size());
----------------
david-salinas wrote:
yup
https://github.com/llvm/llvm-project/pull/182579
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits