diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-09 14:49:08 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-09 14:49:08 +0000 |
commit | f6cfc15705140cc958b784a1bc98f7f0f09be6be (patch) | |
tree | 9481eebb2dc98f8adf2c67e452fd1ac8815e0513 /tools/llvm-readobj | |
parent | 32a3e78304a94ea214aee5fe82b10dd110e8863a (diff) | |
download | external_llvm-f6cfc15705140cc958b784a1bc98f7f0f09be6be.zip external_llvm-f6cfc15705140cc958b784a1bc98f7f0f09be6be.tar.gz external_llvm-f6cfc15705140cc958b784a1bc98f7f0f09be6be.tar.bz2 |
Convert MachOObjectFile to a template.
For now it is templated only on being 64 or 32 bits. I will add little/big
endian next.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179097 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-readobj')
-rw-r--r-- | tools/llvm-readobj/MachODumper.cpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/tools/llvm-readobj/MachODumper.cpp b/tools/llvm-readobj/MachODumper.cpp index 8940280..3dad4d6 100644 --- a/tools/llvm-readobj/MachODumper.cpp +++ b/tools/llvm-readobj/MachODumper.cpp @@ -27,7 +27,7 @@ namespace { class MachODumper : public ObjDumper { public: - MachODumper(const llvm::object::MachOObjectFile *Obj, StreamWriter& Writer) + MachODumper(const llvm::object::MachOObjectFileBase *Obj, StreamWriter& Writer) : ObjDumper(Writer) , Obj(Obj) { } @@ -43,7 +43,7 @@ private: void printRelocation(section_iterator SecI, relocation_iterator RelI); - const llvm::object::MachOObjectFile *Obj; + const llvm::object::MachOObjectFileBase *Obj; }; } // namespace @@ -54,7 +54,7 @@ namespace llvm { error_code createMachODumper(const object::ObjectFile *Obj, StreamWriter& Writer, OwningPtr<ObjDumper> &Result) { - const MachOObjectFile *MachOObj = dyn_cast<MachOObjectFile>(Obj); + const MachOObjectFileBase *MachOObj = dyn_cast<MachOObjectFileBase>(Obj); if (!MachOObj) return readobj_error::unsupported_obj_file_format; @@ -157,11 +157,11 @@ namespace { }; } -static void getSection(const MachOObjectFile *Obj, +static void getSection(const MachOObjectFileBase *Obj, DataRefImpl DRI, MachOSection &Section) { - if (Obj->is64Bit()) { - const MachOFormat::Section<true> *Sect = Obj->getSection64(DRI); + if (const MachOObjectFile<true> *O = dyn_cast<MachOObjectFile<true> >(Obj)) { + const MachOObjectFile<true>::Section *Sect = O->getSection(DRI); Section.Address = Sect->Address; Section.Size = Sect->Size; @@ -173,7 +173,8 @@ static void getSection(const MachOObjectFile *Obj, Section.Reserved1 = Sect->Reserved1; Section.Reserved2 = Sect->Reserved2; } else { - const MachOFormat::Section<false> *Sect = Obj->getSection(DRI); + const MachOObjectFile<false> *O2 = cast<MachOObjectFile<false> >(Obj); + const MachOObjectFile<false>::Section *Sect = O2->getSection(DRI); Section.Address = Sect->Address; Section.Size = Sect->Size; @@ -187,20 +188,21 @@ static void getSection(const MachOObjectFile *Obj, } } -static void getSymbol(const MachOObjectFile *Obj, +static void getSymbol(const MachOObjectFileBase *Obj, DataRefImpl DRI, MachOSymbol &Symbol) { - if (Obj->is64Bit()) { - const MachOFormat::SymbolTableEntry<true> *Entry = - Obj->getSymbol64TableEntry(DRI); + if (const MachOObjectFile<true> *O = dyn_cast<MachOObjectFile<true> >(Obj)) { + const MachOObjectFile<true>::SymbolTableEntry *Entry = + O->getSymbolTableEntry(DRI); Symbol.StringIndex = Entry->StringIndex; Symbol.Type = Entry->Type; Symbol.SectionIndex = Entry->SectionIndex; Symbol.Flags = Entry->Flags; Symbol.Value = Entry->Value; } else { - const MachOFormat::SymbolTableEntry<false> *Entry = - Obj->getSymbolTableEntry(DRI); + const MachOObjectFile<false> *O2 = cast<MachOObjectFile<false> >(Obj); + const MachOObjectFile<false>::SymbolTableEntry *Entry = + O2->getSymbolTableEntry(DRI); Symbol.StringIndex = Entry->StringIndex; Symbol.Type = Entry->Type; Symbol.SectionIndex = Entry->SectionIndex; |