[clang] [llvm] [Offloading] Extend OffloadBinary format to support multiple metadata entries (PR #169425)

Yury Plyakhin via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 5 10:00:43 PST 2025


================
@@ -182,19 +198,31 @@ OffloadBinary::create(MemoryBufferRef Buf) {
 
   const char *Start = Buf.getBufferStart();
   const Header *TheHeader = reinterpret_cast<const Header *>(Start);
-  if (TheHeader->Version != OffloadBinary::Version)
+  if (TheHeader->Version == 0 || TheHeader->Version > OffloadBinary::Version)
     return errorCodeToError(object_error::parse_failed);
 
   if (TheHeader->Size > Buf.getBufferSize() ||
       TheHeader->Size < sizeof(Entry) || TheHeader->Size < sizeof(Header))
     return errorCodeToError(object_error::unexpected_eof);
 
-  if (TheHeader->EntryOffset > TheHeader->Size - sizeof(Entry) ||
-      TheHeader->EntrySize > TheHeader->Size - sizeof(Header))
+  uint64_t EntriesSize = sizeof(Entry) * TheHeader->EntriesCount;
+  if (TheHeader->EntriesOffset > TheHeader->Size - EntriesSize ||
+      EntriesSize > TheHeader->Size - sizeof(Header))
     return errorCodeToError(object_error::unexpected_eof);
 
+  return TheHeader;
+}
+
+Expected<std::unique_ptr<OffloadBinary>>
+OffloadBinary::createV1(MemoryBufferRef Buf) {
----------------
YuriPlyakhin wrote:

Yes, I plan to get rid of createV1/createV2. Just did not clean up yet all cases introduced before.

https://github.com/llvm/llvm-project/pull/169425


More information about the llvm-commits mailing list