================
@@ -43,13 +44,65 @@ static StringRef getImageName(const OffloadBinary &OB) {
   }
 }
 
+static void printOffloadBinaryMetadata(const OffloadBinary &OB,
+                                       uint64_t level) {
+  const std::string Indent(level * 2, ' ');
+
+  outs() << Indent << left_justify("kind", 16) << getImageName(OB) << "\n";
+  outs() << Indent << left_justify("arch", 16) << OB.getArch() << "\n";
+  outs() << Indent << left_justify("triple", 16) << OB.getTriple() << "\n";
+  outs() << Indent << left_justify("producer", 16)
+         << getOffloadKindName(OB.getOffloadKind()) << "\n";
+
+  StringRef InnerImage = OB.getImage();
+  outs() << Indent << left_justify("image size", 16) << InnerImage.size()
+         << " bytes\n";
+}
+
+/// Print information about nested OffloadBinary (inner layer)
+static void printNestedOffloadBinary(const OffloadBinary &OuterOB,
+                                     uint64_t Index) {
+  StringRef ImageData = OuterOB.getImage();
+
+  // Parse inner OffloadBinary
+  MemoryBufferRef InnerBuffer(ImageData, "inner-offload-binary");
+  auto InnerBinariesOrErr = OffloadBinary::create(InnerBuffer);
+  if (!InnerBinariesOrErr) {
+    reportWarning("failed to parse nested OffloadBinary: " +
+                      toString(InnerBinariesOrErr.takeError()),
+                  OuterOB.getFileName());
+    return;
+  }
+
+  auto &InnerBinaries = *InnerBinariesOrErr;
+  if (InnerBinaries.empty()) {
+    reportWarning("nested OffloadBinary contains no entries",
+                  OuterOB.getFileName());
+    return;
+  }
+
+  outs() << "  [Nested OffloadBinary format detected]\n";
+  outs() << "  Number of inner images: " << InnerBinaries.size() << "\n";
+
+  // Display information for each inner image
+  for (uint64_t I = 0, E = InnerBinaries.size(); I != E; ++I) {
+    const OffloadBinary *InnerOB = InnerBinaries[I].get();
+
+    if (InnerBinaries.size() > 1)
+      outs() << "  Inner image [" << I << "]:\n";
+
+    printOffloadBinaryMetadata(*InnerOB, 1);
----------------
adurang wrote:

No, I don't think it would be too complicated (I think I said easily, didn't 
I?) other than making sure the format spacing remains more or less consistent.

https://github.com/llvm/llvm-project/pull/185425
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to