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:
parent
bae3718e6a
commit
861303204d
@ -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";
|
||||||
}
|
}
|
||||||
|
@ -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() { }
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user