1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 02:52:53 +02:00

[llvm-readobj] Replace arch-specific ObjDumper methods by the single printArchSpecificInfo

Initially llvm-readobj supports multiple command line options like
`--arm-attributes` and `--mips-plt-got` for display ELF arch-specific
information. Now all these options are superseded by the
`--arch-specific` one. It makes sense to have a single `printArchSpecificInfo`
method in the base `ObjDumper`, and hide all ELF/target specific details
in the `ELFDumper::printArchSpecificInfo` override.

Differential Revision: https://reviews.llvm.org/D68385

llvm-svn: 373731
This commit is contained in:
Simon Atanasyan 2019-10-04 11:59:06 +00:00
parent bae3718e6a
commit 861303204d
3 changed files with 27 additions and 35 deletions

View File

@ -173,11 +173,7 @@ public:
void printVersionInfo() override; void printVersionInfo() override;
void printGroupSections() override; void printGroupSections() override;
void printAttributes() override; void printArchSpecificInfo() override;
void printMipsPLTGOT() override;
void printMipsABIFlags() override;
void printMipsReginfo() override;
void printMipsOptions() override;
void printStackMap() const override; void printStackMap() const override;
@ -218,6 +214,12 @@ private:
S->sh_entsize, ObjF->getFileName()}); S->sh_entsize, ObjF->getFileName()});
} }
void printAttributes();
void printMipsPLTGOT();
void printMipsABIFlags();
void printMipsReginfo();
void printMipsOptions();
std::pair<const Elf_Phdr *, const Elf_Shdr *> std::pair<const Elf_Phdr *, const Elf_Shdr *>
findDynamic(const ELFFile<ELFT> *Obj); findDynamic(const ELFFile<ELFT> *Obj);
void loadDynamicTable(const ELFFile<ELFT> *Obj); void loadDynamicTable(const ELFFile<ELFT> *Obj);
@ -2210,6 +2212,23 @@ template <typename ELFT> void ELFDumper<ELFT>::printLoadName() {
W.printString("LoadName", SOName); W.printString("LoadName", SOName);
} }
template <class ELFT> void ELFDumper<ELFT>::printArchSpecificInfo() {
const ELFFile<ELFT> *Obj = ObjF->getELFFile();
switch (Obj->getHeader()->e_machine) {
case EM_ARM:
printAttributes();
break;
case EM_MIPS:
printMipsABIFlags();
printMipsOptions();
printMipsReginfo();
printMipsPLTGOT();
break;
default:
break;
}
}
template <class ELFT> void ELFDumper<ELFT>::printAttributes() { template <class ELFT> void ELFDumper<ELFT>::printAttributes() {
W.startLine() << "Attributes not implemented.\n"; W.startLine() << "Attributes not implemented.\n";
} }

View File

@ -69,15 +69,7 @@ public:
virtual void printNotes() {} virtual void printNotes() {}
virtual void printELFLinkerOptions() {} virtual void printELFLinkerOptions() {}
virtual void printStackSizes() {} virtual void printStackSizes() {}
virtual void printArchSpecificInfo() { }
// Only implemented for ARM ELF at this time.
virtual void printAttributes() { }
// Only implemented for MIPS ELF at this time.
virtual void printMipsPLTGOT() { }
virtual void printMipsABIFlags() { }
virtual void printMipsReginfo() { }
virtual void printMipsOptions() { }
// Only implemented for PE/COFF. // Only implemented for PE/COFF.
virtual void printCOFFImports() { } virtual void printCOFFImports() { }

View File

@ -397,17 +397,6 @@ void reportWarning(Error Err, StringRef Input) {
} // namespace llvm } // namespace llvm
static bool isMipsArch(unsigned Arch) {
switch (Arch) {
case llvm::Triple::mips:
case llvm::Triple::mipsel:
case llvm::Triple::mips64:
case llvm::Triple::mips64el:
return true;
default:
return false;
}
}
namespace { namespace {
struct ReadObjTypeTableBuilder { struct ReadObjTypeTableBuilder {
ReadObjTypeTableBuilder() ReadObjTypeTableBuilder()
@ -502,16 +491,8 @@ static void dumpObject(const ObjectFile *Obj, ScopedPrinter &Writer,
if (Obj->isELF()) { if (Obj->isELF()) {
if (opts::ELFLinkerOptions) if (opts::ELFLinkerOptions)
Dumper->printELFLinkerOptions(); Dumper->printELFLinkerOptions();
if (opts::ArchSpecificInfo) { if (opts::ArchSpecificInfo)
if (Obj->getArch() == llvm::Triple::arm) Dumper->printArchSpecificInfo();
Dumper->printAttributes();
else if (isMipsArch(Obj->getArch())) {
Dumper->printMipsABIFlags();
Dumper->printMipsOptions();
Dumper->printMipsReginfo();
Dumper->printMipsPLTGOT();
}
}
if (opts::SectionGroups) if (opts::SectionGroups)
Dumper->printGroupSections(); Dumper->printGroupSections();
if (opts::HashHistogram) if (opts::HashHistogram)