[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:
@@ -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 *>(
|
||||
|
||||
Reference in New Issue
Block a user