From 00faba70ccc9b411b8e8d5405d009e31d811cacf Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Thu, 4 Jun 2015 19:34:14 +0000 Subject: [PATCH] [Object, MachO] Remove some code duplication. NFC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239077 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Object/MachO.h | 4 --- lib/Object/MachOObjectFile.cpp | 50 +++++++++++++++++----------------- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/include/llvm/Object/MachO.h b/include/llvm/Object/MachO.h index 75280bbc3b8..2bfde85c21a 100644 --- a/include/llvm/Object/MachO.h +++ b/include/llvm/Object/MachO.h @@ -429,10 +429,6 @@ public: } private: - // Walk load commands. - LoadCommandInfo getFirstLoadCommandInfo() const; - LoadCommandInfo getNextLoadCommandInfo(const LoadCommandInfo &L) const; - MachO::mach_header_64 Header64; typedef SmallVector SectionList; SectionList Sections; diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp index 6c655224d2d..1620c1a6a91 100644 --- a/lib/Object/MachOObjectFile.cpp +++ b/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(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(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(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(this, Sections[DRI.d.a]); -- 2.34.1