From 68d287d19e6918f46e58456fdd237c049efe372e Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Sat, 6 Apr 2013 03:50:05 +0000 Subject: [PATCH] Remove last use of InMemoryStruct from MachOObjectFile.cpp. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178948 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Object/MachO.h | 32 ++++++++++++++++++++++++++++++++ lib/Object/MachOObjectFile.cpp | 23 +++++++++++++++++++---- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/include/llvm/Object/MachO.h b/include/llvm/Object/MachO.h index d6abaf1be22..8543ecc8291 100644 --- a/include/llvm/Object/MachO.h +++ b/include/llvm/Object/MachO.h @@ -85,6 +85,34 @@ namespace MachOFormat { support::ulittle32_t StringTableOffset; support::ulittle32_t StringTableSize; }; + + struct SegmentLoadCommand { + support::ulittle32_t Type; + support::ulittle32_t Size; + char Name[16]; + support::ulittle32_t VMAddress; + support::ulittle32_t VMSize; + support::ulittle32_t FileOffset; + support::ulittle32_t FileSize; + support::ulittle32_t MaxVMProtection; + support::ulittle32_t InitialVMProtection; + support::ulittle32_t NumSections; + support::ulittle32_t Flags; + }; + + struct Segment64LoadCommand { + support::ulittle32_t Type; + support::ulittle32_t Size; + char Name[16]; + support::ulittle64_t VMAddress; + support::ulittle64_t VMSize; + support::ulittle64_t FileOffset; + support::ulittle64_t FileSize; + support::ulittle32_t MaxVMProtection; + support::ulittle32_t InitialVMProtection; + support::ulittle32_t NumSections; + support::ulittle32_t Flags; + }; } typedef MachOObject::LoadCommandInfo LoadCommandInfo; @@ -204,6 +232,10 @@ private: const MachOFormat::RelocationEntry *getRelocation(DataRefImpl Rel) const; const MachOFormat::SymtabLoadCommand * getSymtabLoadCommand(LoadCommandInfo LCI) const; + const MachOFormat::SegmentLoadCommand * + getSegmentLoadCommand(LoadCommandInfo LCI) const; + const MachOFormat::Segment64LoadCommand * + getSegment64LoadCommand(LoadCommandInfo LCI) const; std::size_t getSectionIndex(DataRefImpl Sec) const; void printRelocationTargetName(const MachOFormat::RelocationEntry *RE, diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp index e2b0468b9a5..1eb14f31ff4 100644 --- a/lib/Object/MachOObjectFile.cpp +++ b/lib/Object/MachOObjectFile.cpp @@ -68,6 +68,21 @@ MachOObjectFile::getSymtabLoadCommand(LoadCommandInfo LCI) const { return reinterpret_cast(Data.data()); } +const MachOFormat::SegmentLoadCommand * +MachOObjectFile::getSegmentLoadCommand(LoadCommandInfo LCI) const { + StringRef Data = MachOObj->getData(LCI.Offset, + sizeof(MachOFormat::SegmentLoadCommand)); + return reinterpret_cast(Data.data()); +} + +const MachOFormat::Segment64LoadCommand * +MachOObjectFile::getSegment64LoadCommand(LoadCommandInfo LCI) const { + StringRef Data = MachOObj->getData(LCI.Offset, + sizeof(MachOFormat::Segment64LoadCommand)); + return + reinterpret_cast(Data.data()); +} + void MachOObjectFile::moveToNextSymbol(DataRefImpl &DRI) const { uint32_t LoadCommandCount = MachOObj->getHeader().NumLoadCommands; while (DRI.d.a < LoadCommandCount) { @@ -436,13 +451,13 @@ void MachOObjectFile::moveToNextSection(DataRefImpl &DRI) const { while (DRI.d.a < LoadCommandCount) { LoadCommandInfo LCI = MachOObj->getLoadCommandInfo(DRI.d.a); if (LCI.Command.Type == macho::LCT_Segment) { - InMemoryStruct SegmentLoadCmd; - MachOObj->ReadSegmentLoadCommand(LCI, SegmentLoadCmd); + const MachOFormat::SegmentLoadCommand *SegmentLoadCmd = + getSegmentLoadCommand(LCI); if (DRI.d.b < SegmentLoadCmd->NumSections) return; } else if (LCI.Command.Type == macho::LCT_Segment64) { - InMemoryStruct Segment64LoadCmd; - MachOObj->ReadSegment64LoadCommand(LCI, Segment64LoadCmd); + const MachOFormat::Segment64LoadCommand *Segment64LoadCmd = + getSegment64LoadCommand(LCI); if (DRI.d.b < Segment64LoadCmd->NumSections) return; }