OSDN Git Service

Remove last use of InMemoryStruct from MachOObjectFile.cpp.
authorRafael Espindola <rafael.espindola@gmail.com>
Sat, 6 Apr 2013 03:50:05 +0000 (03:50 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sat, 6 Apr 2013 03:50:05 +0000 (03:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178948 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/MachO.h
lib/Object/MachOObjectFile.cpp

index d6abaf1..8543ecc 100644 (file)
@@ -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,
index e2b0468..1eb14f3 100644 (file)
@@ -68,6 +68,21 @@ MachOObjectFile::getSymtabLoadCommand(LoadCommandInfo LCI) const {
   return reinterpret_cast<const MachOFormat::SymtabLoadCommand*>(Data.data());
 }
 
+const MachOFormat::SegmentLoadCommand *
+MachOObjectFile::getSegmentLoadCommand(LoadCommandInfo LCI) const {
+  StringRef Data = MachOObj->getData(LCI.Offset,
+                                     sizeof(MachOFormat::SegmentLoadCommand));
+  return reinterpret_cast<const MachOFormat::SegmentLoadCommand*>(Data.data());
+}
+
+const MachOFormat::Segment64LoadCommand *
+MachOObjectFile::getSegment64LoadCommand(LoadCommandInfo LCI) const {
+  StringRef Data = MachOObj->getData(LCI.Offset,
+                                     sizeof(MachOFormat::Segment64LoadCommand));
+  return
+    reinterpret_cast<const MachOFormat::Segment64LoadCommand*>(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<macho::SegmentLoadCommand> 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<macho::Segment64LoadCommand> Segment64LoadCmd;
-      MachOObj->ReadSegment64LoadCommand(LCI, Segment64LoadCmd);
+      const MachOFormat::Segment64LoadCommand *Segment64LoadCmd =
+        getSegment64LoadCommand(LCI);
       if (DRI.d.b < Segment64LoadCmd->NumSections)
         return;
     }