[clang] [llvm] [Offloading] Extend OffloadBinary format to support multiple metadata entries (PR #169425)
Joseph Huber via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 3 18:47:01 PST 2025
================
@@ -33,31 +33,47 @@ namespace {
/// binary format.
Error extractOffloadFiles(MemoryBufferRef Contents,
SmallVectorImpl<OffloadFile> &Binaries) {
- uint64_t Offset = 0;
- // There could be multiple offloading binaries stored at this section.
- while (Offset < Contents.getBuffer().size()) {
- std::unique_ptr<MemoryBuffer> Buffer =
- MemoryBuffer::getMemBuffer(Contents.getBuffer().drop_front(Offset), "",
- /*RequiresNullTerminator*/ false);
- if (!isAddrAligned(Align(OffloadBinary::getAlignment()),
- Buffer->getBufferStart()))
- Buffer = MemoryBuffer::getMemBufferCopy(Buffer->getBuffer(),
- Buffer->getBufferIdentifier());
- auto BinaryOrErr = OffloadBinary::create(*Buffer);
- if (!BinaryOrErr)
- return BinaryOrErr.takeError();
- OffloadBinary &Binary = **BinaryOrErr;
-
- // Create a new owned binary with a copy of the original memory.
- std::unique_ptr<MemoryBuffer> BufferCopy = MemoryBuffer::getMemBufferCopy(
- Binary.getData().take_front(Binary.getSize()),
- Contents.getBufferIdentifier());
- auto NewBinaryOrErr = OffloadBinary::create(*BufferCopy);
- if (!NewBinaryOrErr)
- return NewBinaryOrErr.takeError();
- Binaries.emplace_back(std::move(*NewBinaryOrErr), std::move(BufferCopy));
-
- Offset += Binary.getSize();
+ if (Contents.getBuffer().size() == 0)
+ return Error::success();
+
+ std::unique_ptr<MemoryBuffer> Buffer =
+ MemoryBuffer::getMemBuffer(Contents.getBuffer(), "",
+ /*RequiresNullTerminator*/ false);
+ auto HeaderOrErr = OffloadBinary::extractHeader(*Buffer);
+ if (!HeaderOrErr)
+ return HeaderOrErr.takeError();
+ const OffloadBinary::Header *Header = *HeaderOrErr;
+
+ switch (Header->Version) {
+ case 1: {
----------------
jhuber6 wrote:
The version just changes the count, right? Might be easier to just initialize the count to one and set it to the proper size if the version is version 2. That way we should be able to share the code
https://github.com/llvm/llvm-project/pull/169425
More information about the llvm-commits
mailing list