[llvm] [llvm-readobj][ELF] Implement JSON output for --dynamic-table (PR #95976)
Fred Grim via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 21 07:59:18 PDT 2024
================
@@ -7365,6 +7369,55 @@ template <class ELFT> void LLVMELFDumper<ELFT>::printDynamicTable() {
W.startLine() << "]\n";
}
+template <class ELFT>
+void JSONELFDumper<ELFT>::printAuxillaryDynamicTableEntryInfo(
+ const Elf_Dyn &Entry) {
+ switch (Entry.getTag()) {
+ case DT_SONAME:
+ this->W.printString("Name", this->getDynamicString(Entry.getVal()));
+ break;
+ case DT_AUXILIARY:
+ LLVM_FALLTHROUGH;
+ case DT_FILTER:
+ LLVM_FALLTHROUGH;
+ case DT_NEEDED: {
+ ListScope L(this->W, "Libraries");
+ this->W.printString(this->getDynamicString(Entry.getVal()));
+ } break;
+ case DT_USED: {
+ ListScope L(this->W, "Objects");
+ this->W.printString(this->getDynamicString(Entry.getVal()));
+ } break;
+ case DT_RPATH:
+ LLVM_FALLTHROUGH;
+ case DT_RUNPATH: {
+ ListScope L(this->W, "Path");
+ this->W.printString(this->getDynamicString(Entry.getVal()));
+ } break;
+ case DT_FLAGS:
+ LLVM_FALLTHROUGH;
+ case DT_FLAGS_1:
+ this->W.printString("Flags",
+ this->getDynamicEntry(Entry.getTag(), Entry.getVal()));
+ break;
+ default:
+ break;
+ }
+}
+
+template <class ELFT> void JSONELFDumper<ELFT>::printDynamicTable() {
+ Elf_Dyn_Range Table = this->dynamic_table();
+ ListScope L(this->W, "DynamicSection");
+ for (const auto &Entry : Table) {
+ DictScope D(this->W);
+ uintX_t Tag = Entry.getTag();
+ this->W.printHex("Tag", Tag);
+ this->W.printHex("Value", Entry.getVal());
+ this->printAuxillaryDynamicTableEntryInfo(Entry);
+ this->W.printString("Type", this->Obj.getDynamicTagAsString(Tag));
----------------
feg208 wrote:
done
https://github.com/llvm/llvm-project/pull/95976
More information about the llvm-commits
mailing list