[llvm] [llvm-readobj][COFF] Dump .modmeta section (PR #201695)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 9 06:31:39 PDT 2026


================
@@ -2558,3 +2561,74 @@ void COFFDumper::printCOFFTLSDirectory(
                ArrayRef(ImageSectionCharacteristics),
                COFF::SectionCharacteristics(COFF::IMAGE_SCN_ALIGN_MASK));
 }
+
+void COFFDumper::printCOFFCxxModuleMetadata() {
+  SectionRef Sect;
+  for (const SectionRef &S : Obj->sections()) {
+    StringRef SectionName = unwrapOrError(Obj->getFileName(), S.getName());
+    if (SectionName == ".modmeta") {
+      Sect = S;
+      break;
+    }
+  }
+  if (Sect == SectionRef())
+    return;
+
+  StringRef Contents = unwrapOrError(Obj->getFileName(), Sect.getContents());
+  COFFCxxModuleMetadata ModMap =
+      unwrapOrError(Obj->getFileName(), parseCOFFCxxModuleMetadata(Contents));
+
+  DictScope D(W, "CxxModuleMetadata");
+  W.printNumber("Version", ModMap.Version);
+  W.printNumber("Reserved", ModMap.Reserved);
+  W.printNumber("ModuleIndexWidth", ModMap.ModuleIndexWidth);
+  W.printNumber("SymbolIndexWidth", ModMap.SymbolIndexWidth);
+
+  COFFCxxModuleMetadataReader Reader(ModMap);
+
+  SmallSet<uint32_t, 8> HeaderUnits;
+  Error Err = Reader.readModuleList(makeVisitor([&](auto A) {
+    for (auto V : A)
+      HeaderUnits.insert(V);
+  }));
+  if (Err)
+    reportError(std::move(Err), Obj->getFileName());
----------------
Nerixyz wrote:

Done.

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


More information about the llvm-commits mailing list