[offload] Fix DeviceImage to handle OffloadBinary::create returning vector (#180003)

OffloadBinary::create() now returns
`Expected<SmallVector<unique_ptr<OffloadBinary>>>`
instead of a single unique_ptr, to support multiple entries in version 2
format.

Updated DeviceImageTy constructor to extract the first binary from the
returned
vector, with empty check. In this context, only one image per
OffloadBinary is expected.
This commit is contained in:
Yury Plyakhin
2026-02-05 10:41:03 -08:00
committed by GitHub
parent 4f97d093cd
commit ecd1767edb

View File

@@ -30,15 +30,21 @@ DeviceImageTy::DeviceImageTy(__tgt_bin_desc &BinaryDesc,
llvm::StringRef ImageStr(static_cast<char *>(Image.ImageStart),
utils::getPtrDiff(Image.ImageEnd, Image.ImageStart));
auto BinaryOrErr =
auto BinariesOrErr =
llvm::object::OffloadBinary::create(llvm::MemoryBufferRef(ImageStr, ""));
if (!BinaryOrErr) {
consumeError(BinaryOrErr.takeError());
if (!BinariesOrErr) {
consumeError(BinariesOrErr.takeError());
return;
}
Binary = std::move(*BinaryOrErr);
auto &Binaries = *BinariesOrErr;
if (Binaries.empty())
return;
// Offload Binary V2 supports multiple images, but in this context we only
// expect one image per Offload Binary.
Binary = std::move(Binaries[0]);
void *Begin = const_cast<void *>(
static_cast<const void *>(Binary->getImage().bytes_begin()));
void *End = const_cast<void *>(