diff options
author | Alexey Samsonov <vonosmas@gmail.com> | 2015-06-04 19:34:14 +0000 |
---|---|---|
committer | Alexey Samsonov <vonosmas@gmail.com> | 2015-06-04 19:34:14 +0000 |
commit | 4fdbed38858b69c80fc18ea3743cca267b6c72ff (patch) | |
tree | 27b788932a1d804a0b11a4be5afe33284a6e3344 /llvm/lib/Object/MachOObjectFile.cpp | |
parent | 35b7f81f08d5572e36fc042f69e301d867b6ace4 (diff) | |
download | bcm5719-llvm-4fdbed38858b69c80fc18ea3743cca267b6c72ff.tar.gz bcm5719-llvm-4fdbed38858b69c80fc18ea3743cca267b6c72ff.zip |
[Object, MachO] Remove some code duplication. NFC.
llvm-svn: 239077
Diffstat (limited to 'llvm/lib/Object/MachOObjectFile.cpp')
-rw-r--r-- | llvm/lib/Object/MachOObjectFile.cpp | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp index 6c655224d2d..1620c1a6a91 100644 --- a/llvm/lib/Object/MachOObjectFile.cpp +++ b/llvm/lib/Object/MachOObjectFile.cpp @@ -180,6 +180,29 @@ static uint32_t getSectionFlags(const MachOObjectFile *O, return Sect.flags; } +static MachOObjectFile::LoadCommandInfo +getLoadCommandInfo(const MachOObjectFile *Obj, const char *Ptr) { + MachOObjectFile::LoadCommandInfo Load; + Load.Ptr = Ptr; + Load.C = getStruct<MachO::load_command>(Obj, Load.Ptr); + if (Load.C.cmdsize < 8) + report_fatal_error("Load command with size < 8 bytes."); + return Load; +} + +static MachOObjectFile::LoadCommandInfo +getFirstLoadCommandInfo(const MachOObjectFile *Obj) { + unsigned HeaderSize = Obj->is64Bit() ? sizeof(MachO::mach_header_64) + : sizeof(MachO::mach_header); + return getLoadCommandInfo(Obj, getPtr(Obj, HeaderSize)); +} + +static MachOObjectFile::LoadCommandInfo +getNextLoadCommandInfo(const MachOObjectFile *Obj, + const MachOObjectFile::LoadCommandInfo &L) { + return getLoadCommandInfo(Obj, L.Ptr + L.C.cmdsize); +} + MachOObjectFile::MachOObjectFile(MemoryBufferRef Object, bool IsLittleEndian, bool Is64bits, std::error_code &EC) : ObjectFile(getMachOType(IsLittleEndian, Is64bits), Object), @@ -203,7 +226,7 @@ MachOObjectFile::MachOObjectFile(MemoryBufferRef Object, bool IsLittleEndian, MachO::LoadCommandType SegmentLoadType = is64Bit() ? MachO::LC_SEGMENT_64 : MachO::LC_SEGMENT; - LoadCommandInfo Load = getFirstLoadCommandInfo(); + LoadCommandInfo Load = getFirstLoadCommandInfo(this); for (unsigned I = 0; I < LoadCommandCount; ++I) { LoadCommands.push_back(Load); if (Load.C.cmd == MachO::LC_SYMTAB) { @@ -271,7 +294,7 @@ MachOObjectFile::MachOObjectFile(MemoryBufferRef Object, bool IsLittleEndian, Libraries.push_back(Load.Ptr); } if (I < LoadCommandCount - 1) - Load = getNextLoadCommandInfo(Load); + Load = getNextLoadCommandInfo(this, Load); } assert(LoadCommands.size() == LoadCommandCount); } @@ -1974,29 +1997,6 @@ MachOObjectFile::getAnyRelocationSection( return SectionRef(DRI, this); } -MachOObjectFile::LoadCommandInfo -MachOObjectFile::getFirstLoadCommandInfo() const { - MachOObjectFile::LoadCommandInfo Load; - - unsigned HeaderSize = is64Bit() ? sizeof(MachO::mach_header_64) : - sizeof(MachO::mach_header); - Load.Ptr = getPtr(this, HeaderSize); - Load.C = getStruct<MachO::load_command>(this, Load.Ptr); - if (Load.C.cmdsize < 8) - report_fatal_error("Load command with size < 8 bytes."); - return Load; -} - -MachOObjectFile::LoadCommandInfo -MachOObjectFile::getNextLoadCommandInfo(const LoadCommandInfo &L) const { - MachOObjectFile::LoadCommandInfo Next; - Next.Ptr = L.Ptr + L.C.cmdsize; - Next.C = getStruct<MachO::load_command>(this, Next.Ptr); - if (Next.C.cmdsize < 8) - report_fatal_error("Load command with size < 8 bytes."); - return Next; -} - MachO::section MachOObjectFile::getSection(DataRefImpl DRI) const { assert(DRI.d.a < Sections.size() && "Should have detected this earlier"); return getStruct<MachO::section>(this, Sections[DRI.d.a]); |