[llvm] [llvm-readobj] Dump callgraph section info for ELF (PR #157499)
Paul Kirth via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 22 14:06:10 PDT 2025
================
@@ -5260,6 +5307,247 @@ template <class ELFT> void GNUELFDumper<ELFT>::printCGProfile() {
OS << "GNUStyle::printCGProfile not implemented\n";
}
+template <class ELFT>
+static std::optional<object::SectionRef>
+getCallGraphSection(const object::ELFObjectFile<ELFT> &ObjF) {
+ // Get the .callgraph section.
+ StringRef CallGraphSectionName(".callgraph");
+ std::optional<object::SectionRef> CallGraphSection;
+ for (auto Sec : ObjF.sections()) {
+ StringRef Name;
+ if (Expected<StringRef> NameOrErr = Sec.getName())
+ Name = *NameOrErr;
+ else
+ consumeError(NameOrErr.takeError());
+
+ if (Name == CallGraphSectionName)
+ return Sec;
+ }
+ return CallGraphSection;
+}
+
+template <class ELFT> bool ELFDumper<ELFT>::processCallGraphSection() {
+ const Elf_Shdr *CGSection = findSectionByName(".callgraph");
+ if (!CGSection) {
+ Error NoSectionErr = createError("No .callgraph section found.");
+ reportError(std::move(NoSectionErr), "Missing section");
+ }
+
+ Expected<ArrayRef<uint8_t>> SectionBytesOrErr =
+ Obj.getSectionContents(*CGSection);
+ if (!SectionBytesOrErr) {
+ Error SectionReadErr = SectionBytesOrErr.takeError();
+ reportError(std::move(SectionReadErr),
+ "Unable to read the .callgraph section");
+ }
+
+ auto PrintMalformedError = [&](Error &E, Twine FuncPC, StringRef Component) {
+ // auto Msg = llvm::Twine("Malformed callgraph section while reading [") +
+ // Component + llvm::Twine("] .\n");
+ std::string Msg =
+ (StringRef("While reading call graph info's [") + Component +
+ StringRef("] for function at [0x") + StringRef(FuncPC.str()) + "]")
+ .str();
----------------
ilovepi wrote:
```suggestion
(Twine("While reading call graph info's [") + Component +
"] for function at [0x" + FuncPC + "]").str();
```
But I'd think you'd typically just construct this below in the call to `reportError()`
https://github.com/llvm/llvm-project/pull/157499
More information about the llvm-commits
mailing list