diff --git a/llvm/test/tools/llvm-readobj/ELF/file-summary-json.test b/llvm/test/tools/llvm-readobj/ELF/file-summary-json.test --- a/llvm/test/tools/llvm-readobj/ELF/file-summary-json.test +++ b/llvm/test/tools/llvm-readobj/ELF/file-summary-json.test @@ -16,7 +16,13 @@ # SINGLE-NEXT: "Format": "elf64-x86-64", # SINGLE-NEXT: "Arch": "x86_64", # SINGLE-NEXT: "AddressSize": "64bit", -# SINGLE-NEXT: "LoadName": "" +# SINGLE-NEXT: "LoadName": "", +# SINGLE-NEXT: "AllocSections": 0, +# SINGLE-NEXT: "AllocSize": 0, +# SINGLE-NEXT: "DebugSections": 0, +# SINGLE-NEXT: "DebugSize": 0, +# SINGLE-NEXT: "RemainingSections": 3, +# SINGLE-NEXT: "RemainingSize": 20 # SINGLE-NEXT: } # SINGLE-NEXT: } # SINGLE-NEXT:] @@ -33,7 +39,13 @@ # MULTI-NEXT: "Format": "elf64-x86-64", # MULTI-NEXT: "Arch": "x86_64", # MULTI-NEXT: "AddressSize": "64bit", -# MULTI-NEXT: "LoadName": "" +# MULTI-NEXT: "LoadName": "", +# MULTI-NEXT: "AllocSections": 0, +# MULTI-NEXT: "AllocSize": 0, +# MULTI-NEXT: "DebugSections": 0, +# MULTI-NEXT: "DebugSize": 0, +# MULTI-NEXT: "RemainingSections": 3, +# MULTI-NEXT: "RemainingSize": 20 # MULTI-NEXT: } # MULTI-NEXT: }, # MULTI-NEXT: { @@ -42,7 +54,13 @@ # MULTI-NEXT: "Format": "elf64-x86-64", # MULTI-NEXT: "Arch": "x86_64", # MULTI-NEXT: "AddressSize": "64bit", -# MULTI-NEXT: "LoadName": "" +# MULTI-NEXT: "LoadName": "", +# MULTI-NEXT: "AllocSections": 0, +# MULTI-NEXT: "AllocSize": 0, +# MULTI-NEXT: "DebugSections": 0, +# MULTI-NEXT: "DebugSize": 0, +# MULTI-NEXT: "RemainingSections": 3, +# MULTI-NEXT: "RemainingSize": 20 # MULTI-NEXT: } # MULTI-NEXT: } # MULTI-NEXT:] @@ -61,7 +79,13 @@ # ARCH-SINGLE-NEXT: "Format": "elf64-x86-64", # ARCH-SINGLE-NEXT: "Arch": "x86_64", # ARCH-SINGLE-NEXT: "AddressSize": "64bit", -# ARCH-SINGLE-NEXT: "LoadName": "" +# ARCH-SINGLE-NEXT: "LoadName": "", +# ARCH-SINGLE-NEXT: "AllocSections": 0, +# ARCH-SINGLE-NEXT: "AllocSize": 0, +# ARCH-SINGLE-NEXT: "DebugSections": 0, +# ARCH-SINGLE-NEXT: "DebugSize": 0, +# ARCH-SINGLE-NEXT: "RemainingSections": 3, +# ARCH-SINGLE-NEXT: "RemainingSize": 20 # ARCH-SINGLE-NEXT: } # ARCH-SINGLE-NEXT: } # ARCH-SINGLE-NEXT:] @@ -80,7 +104,13 @@ # ARCH-MULTI-NEXT: "Format": "elf64-x86-64", # ARCH-MULTI-NEXT: "Arch": "x86_64", # ARCH-MULTI-NEXT: "AddressSize": "64bit", -# ARCH-MULTI-NEXT: "LoadName": "" +# ARCH-MULTI-NEXT: "LoadName": "", +# ARCH-MULTI-NEXT: "AllocSections": 0, +# ARCH-MULTI-NEXT: "AllocSize": 0, +# ARCH-MULTI-NEXT: "DebugSections": 0, +# ARCH-MULTI-NEXT: "DebugSize": 0, +# ARCH-MULTI-NEXT: "RemainingSections": 3, +# ARCH-MULTI-NEXT: "RemainingSize": 20 # ARCH-MULTI-NEXT: } # ARCH-MULTI-NEXT: }, # ARCH-MULTI-NEXT: { @@ -89,7 +119,13 @@ # ARCH-MULTI-NEXT: "Format": "elf64-x86-64", # ARCH-MULTI-NEXT: "Arch": "x86_64", # ARCH-MULTI-NEXT: "AddressSize": "64bit", -# ARCH-MULTI-NEXT: "LoadName": "" +# ARCH-MULTI-NEXT: "LoadName": "", +# ARCH-MULTI-NEXT: "AllocSections": 0, +# ARCH-MULTI-NEXT: "AllocSize": 0, +# ARCH-MULTI-NEXT: "DebugSections": 0, +# ARCH-MULTI-NEXT: "DebugSize": 0, +# ARCH-MULTI-NEXT: "RemainingSections": 3, +# ARCH-MULTI-NEXT: "RemainingSize": 20 # ARCH-MULTI-NEXT: } # ARCH-MULTI-NEXT: } # ARCH-MULTI-NEXT:] diff --git a/llvm/test/tools/llvm-readobj/ELF/pretty-print.test b/llvm/test/tools/llvm-readobj/ELF/pretty-print.test --- a/llvm/test/tools/llvm-readobj/ELF/pretty-print.test +++ b/llvm/test/tools/llvm-readobj/ELF/pretty-print.test @@ -14,7 +14,13 @@ # NO-PRETTY-SAME:"Format":"elf64-x86-64", # NO-PRETTY-SAME:"Arch":"x86_64", # NO-PRETTY-SAME:"AddressSize":"64bit", -# NO-PRETTY-SAME:"LoadName":"" +# NO-PRETTY-SAME:"LoadName":"", +# NO-PRETTY-SAME:"AllocSections":0, +# NO-PRETTY-SAME:"AllocSize":0, +# NO-PRETTY-SAME:"DebugSections":0, +# NO-PRETTY-SAME:"DebugSize":0, +# NO-PRETTY-SAME:"RemainingSections":3, +# NO-PRETTY-SAME:"RemainingSize":20 # NO-PRETTY-SAME:} # NO-PRETTY-SAME:} # NO-PRETTY-SAME:] @@ -31,7 +37,13 @@ # PRETTY-NEXT: "Format": "elf64-x86-64", # PRETTY-NEXT: "Arch": "x86_64", # PRETTY-NEXT: "AddressSize": "64bit", -# PRETTY-NEXT: "LoadName": "" +# PRETTY-NEXT: "LoadName": "", +# PRETTY-NEXT: "AllocSections": 0, +# PRETTY-NEXT: "AllocSize": 0, +# PRETTY-NEXT: "DebugSections": 0, +# PRETTY-NEXT: "DebugSize": 0, +# PRETTY-NEXT: "RemainingSections": 3, +# PRETTY-NEXT: "RemainingSize": 20 # PRETTY-NEXT: } # PRETTY-NEXT: } # PRETTY-NEXT:] diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -7883,6 +7883,34 @@ "AddressSize", std::string(formatv("{0}bit", 8 * Obj.getBytesInAddress()))); this->printLoadName(); + + uint64_t RemainingSections = 0; + uint64_t AllocSections = 0; + uint64_t RemainingSize = 0; + uint64_t AllocSize = 0; + uint64_t DebugSections = 0; + uint64_t DebugSize = 0; + std::vector> FlagsList = + getSectionFlagsForTarget(this->Obj.getHeader().e_ident[ELF::EI_OSABI], + this->Obj.getHeader().e_machine); + for (const Elf_Shdr &Sec : cantFail(this->Obj.sections())) { + if (Sec.sh_flags & SHF_ALLOC) { + ++AllocSections; + AllocSize += Sec.sh_size; + } else if (this->getPrintableSectionName(Sec).startswith(".debug")) { + ++DebugSections; + DebugSize += Sec.sh_size; + } else { + ++RemainingSections; + RemainingSize += Sec.sh_size; + } + } + this->W.printNumber("AllocSections", AllocSections); + this->W.printNumber("AllocSize", AllocSize); + this->W.printNumber("DebugSections", DebugSections); + this->W.printNumber("DebugSize", DebugSize); + this->W.printNumber("RemainingSections", RemainingSections); + this->W.printNumber("RemainingSize", RemainingSize); } template