[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