[llvm] [Object] Beginnings of SFrame parser and dumper (PR #147294)

James Henderson via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 15 01:47:05 PDT 2025


================
@@ -6428,6 +6432,55 @@ template <typename ELFT> void ELFDumper<ELFT>::printMemtag() {
   printMemtag(DynamicEntries, AndroidNoteDesc, GlobalDescriptors);
 }
 
+template <typename ELFT>
+void ELFDumper<ELFT>::printSectionsAsSFrame(ArrayRef<std::string> Sections) {
+  constexpr endianness E = ELFT::Endianness;
+  for (object::SectionRef Section :
+       getSectionRefsByNameOrIndex(ObjF, Sections)) {
+    StringRef SectionName = unwrapOrError(FileName, Section.getName());
+    W.getOStream() << '\n';
+    W.startLine() << "Contents of SFrame section '" << SectionName << "':\n";
+
+    StringRef SectionContent = unwrapOrError(FileName, Section.getContents());
+    Expected<object::SFrameParser<E>> Parser =
+        object::SFrameParser<E>::create(arrayRefFromStringRef(SectionContent));
+    if (!Parser) {
+      reportWarning(Parser.takeError(), FileName);
+      continue;
+    }
+
+    W.indent();
+    W.objectBegin("Header");
+
+    const sframe::Preamble<E> &Preamble = Parser->getPreamble();
+    W.printHex("Magic", Preamble.Magic.value());
+    W.printEnum("Version", Preamble.Version.value(), sframe::getVersions());
+    W.printFlags("Flags", Preamble.Flags.value(), sframe::getFlags());
+
+    const sframe::Header<E> &Header = Parser->getHeader();
+    W.printEnum("ABI", Header.ABIArch.value(), sframe::getABIs());
+
+    W.printNumber(("CFA fixed RA offset" +
+                   Twine(Parser->usesFixedRAOffset() ? "" : " (unused)"))
+                      .str(),
+                  Header.CFAFixedRAOffset.value());
+
+    W.printNumber(("CFA fixed FP offset" +
----------------
jh7370 wrote:

According to the spec, the FP offset appears before the RA offset field, so is it worth printing it first, so that the printing order matches the structure order?

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


More information about the llvm-commits mailing list