[llvm] r178943 - Don't use InMemoryStruct in getRelocation.

Rafael Espindola rafael.espindola at gmail.com
Fri Apr 5 18:24:11 PDT 2013


Author: rafael
Date: Fri Apr  5 20:24:11 2013
New Revision: 178943

URL: http://llvm.org/viewvc/llvm-project?rev=178943&view=rev
Log:
Don't use InMemoryStruct in getRelocation.

Modified:
    llvm/trunk/include/llvm/Object/MachO.h
    llvm/trunk/lib/Object/MachOObjectFile.cpp

Modified: llvm/trunk/include/llvm/Object/MachO.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/MachO.h?rev=178943&r1=178942&r2=178943&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/MachO.h (original)
+++ llvm/trunk/include/llvm/Object/MachO.h Fri Apr  5 20:24:11 2013
@@ -55,6 +55,11 @@ namespace MachOFormat {
     support::ulittle32_t Reserved2;
     support::ulittle32_t Reserved3;
   };
+
+  struct RelocationEntry {
+    support::ulittle32_t Word0;
+    support::ulittle32_t Word1;
+  };
 }
 
 typedef MachOObject::LoadCommandInfo LoadCommandInfo;
@@ -161,11 +166,10 @@ private:
   void moveToNextSymbol(DataRefImpl &DRI) const;
   const MachOFormat::Section *getSection(DataRefImpl DRI) const;
   const MachOFormat::Section64 *getSection64(DataRefImpl DRI) const;
-  void getRelocation(DataRefImpl Rel,
-                     InMemoryStruct<macho::RelocationEntry> &Res) const;
+  const MachOFormat::RelocationEntry *getRelocation(DataRefImpl Rel) const;
   std::size_t getSectionIndex(DataRefImpl Sec) const;
 
-  void printRelocationTargetName(InMemoryStruct<macho::RelocationEntry>& RE,
+  void printRelocationTargetName(const MachOFormat::RelocationEntry *RE,
                                  raw_string_ostream &fmt) const;
 };
 

Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=178943&r1=178942&r2=178943&view=diff
==============================================================================
--- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/MachOObjectFile.cpp Fri Apr  5 20:24:11 2013
@@ -699,9 +699,8 @@ section_iterator MachOObjectFile::end_se
 
 /*===-- Relocations -------------------------------------------------------===*/
 
-void MachOObjectFile::
-getRelocation(DataRefImpl Rel,
-              InMemoryStruct<macho::RelocationEntry> &Res) const {
+const MachOFormat::RelocationEntry *
+MachOObjectFile::getRelocation(DataRefImpl Rel) const {
   uint32_t relOffset;
   if (MachOObj->is64Bit()) {
     const MachOFormat::Section64 *Sect = getSection64(Sections[Rel.d.b]);
@@ -710,8 +709,12 @@ getRelocation(DataRefImpl Rel,
     const MachOFormat::Section *Sect = getSection(Sections[Rel.d.b]);
     relOffset = Sect->RelocationTableOffset;
   }
-  MachOObj->ReadRelocationEntry(relOffset, Rel.d.a, Res);
+  uint64_t Offset = relOffset + Rel.d.a * sizeof(MachOFormat::RelocationEntry);
+  StringRef Data =
+    MachOObj->getData(Offset, sizeof(MachOFormat::RelocationEntry));
+  return reinterpret_cast<const MachOFormat::RelocationEntry*>(Data.data());
 }
+
 error_code MachOObjectFile::getRelocationNext(DataRefImpl Rel,
                                               RelocationRef &Res) const {
   ++Rel.d.a;
@@ -728,8 +731,7 @@ error_code MachOObjectFile::getRelocatio
     const MachOFormat::Section *Sect = getSection(Sections[Rel.d.b]);
     sectAddress += Sect->Address;
   }
-  InMemoryStruct<macho::RelocationEntry> RE;
-  getRelocation(Rel, RE);
+  const MachOFormat::RelocationEntry *RE = getRelocation(Rel);
 
   unsigned Arch = getArch();
   bool isScattered = (Arch != Triple::x86_64) &&
@@ -745,8 +747,7 @@ error_code MachOObjectFile::getRelocatio
 }
 error_code MachOObjectFile::getRelocationOffset(DataRefImpl Rel,
                                                 uint64_t &Res) const {
-  InMemoryStruct<macho::RelocationEntry> RE;
-  getRelocation(Rel, RE);
+  const MachOFormat::RelocationEntry *RE = getRelocation(Rel);
 
   unsigned Arch = getArch();
   bool isScattered = (Arch != Triple::x86_64) &&
@@ -759,8 +760,7 @@ error_code MachOObjectFile::getRelocatio
 }
 error_code MachOObjectFile::getRelocationSymbol(DataRefImpl Rel,
                                                 SymbolRef &Res) const {
-  InMemoryStruct<macho::RelocationEntry> RE;
-  getRelocation(Rel, RE);
+  const MachOFormat::RelocationEntry *RE = getRelocation(Rel);
   uint32_t SymbolIdx = RE->Word1 & 0xffffff;
   bool isExtern = (RE->Word1 >> 27) & 1;
 
@@ -779,8 +779,7 @@ error_code MachOObjectFile::getRelocatio
 }
 error_code MachOObjectFile::getRelocationType(DataRefImpl Rel,
                                               uint64_t &Res) const {
-  InMemoryStruct<macho::RelocationEntry> RE;
-  getRelocation(Rel, RE);
+  const MachOFormat::RelocationEntry *RE = getRelocation(Rel);
   Res = RE->Word0;
   Res <<= 32;
   Res |= RE->Word1;
@@ -790,8 +789,7 @@ error_code MachOObjectFile::getRelocatio
                                           SmallVectorImpl<char> &Result) const {
   // TODO: Support scattered relocations.
   StringRef res;
-  InMemoryStruct<macho::RelocationEntry> RE;
-  getRelocation(Rel, RE);
+  const MachOFormat::RelocationEntry *RE = getRelocation(Rel);
 
   unsigned Arch = getArch();
   bool isScattered = (Arch != Triple::x86_64) &&
@@ -888,8 +886,7 @@ error_code MachOObjectFile::getRelocatio
 }
 error_code MachOObjectFile::getRelocationAdditionalInfo(DataRefImpl Rel,
                                                         int64_t &Res) const {
-  InMemoryStruct<macho::RelocationEntry> RE;
-  getRelocation(Rel, RE);
+  const MachOFormat::RelocationEntry *RE = getRelocation(Rel);
   bool isExtern = (RE->Word1 >> 27) & 1;
   Res = 0;
   if (!isExtern) {
@@ -923,7 +920,7 @@ void advanceTo(T &it, size_t Val) {
 }
 
 void MachOObjectFile::printRelocationTargetName(
-                                     InMemoryStruct<macho::RelocationEntry>& RE,
+                                     const MachOFormat::RelocationEntry *RE,
                                      raw_string_ostream &fmt) const {
   unsigned Arch = getArch();
   bool isScattered = (Arch != Triple::x86_64) &&
@@ -994,8 +991,7 @@ void MachOObjectFile::printRelocationTar
 
 error_code MachOObjectFile::getRelocationValueString(DataRefImpl Rel,
                                           SmallVectorImpl<char> &Result) const {
-  InMemoryStruct<macho::RelocationEntry> RE;
-  getRelocation(Rel, RE);
+  const MachOFormat::RelocationEntry *RE = getRelocation(Rel);
 
   unsigned Arch = getArch();
   bool isScattered = (Arch != Triple::x86_64) &&
@@ -1032,10 +1028,9 @@ error_code MachOObjectFile::getRelocatio
         break;
       }
       case macho::RIT_X86_64_Subtractor: { // X86_64_RELOC_SUBTRACTOR
-        InMemoryStruct<macho::RelocationEntry> RENext;
         DataRefImpl RelNext = Rel;
         RelNext.d.a++;
-        getRelocation(RelNext, RENext);
+        const MachOFormat::RelocationEntry *RENext = getRelocation(RelNext);
 
         // X86_64_SUBTRACTOR must be followed by a relocation of type
         // X86_64_RELOC_UNSIGNED.
@@ -1080,10 +1075,9 @@ error_code MachOObjectFile::getRelocatio
       case macho::RIT_Pair: // GENERIC_RELOC_PAIR - prints no info
         return object_error::success;
       case macho::RIT_Difference: { // GENERIC_RELOC_SECTDIFF
-        InMemoryStruct<macho::RelocationEntry> RENext;
         DataRefImpl RelNext = Rel;
         RelNext.d.a++;
-        getRelocation(RelNext, RENext);
+        const MachOFormat::RelocationEntry *RENext = getRelocation(RelNext);
 
         // X86 sect diff's must be followed by a relocation of type
         // GENERIC_RELOC_PAIR.
@@ -1110,10 +1104,9 @@ error_code MachOObjectFile::getRelocatio
       // handled in the generic code.
       switch (Type) {
         case macho::RIT_Generic_LocalDifference:{// GENERIC_RELOC_LOCAL_SECTDIFF
-          InMemoryStruct<macho::RelocationEntry> RENext;
           DataRefImpl RelNext = Rel;
           RelNext.d.a++;
-          getRelocation(RelNext, RENext);
+          const MachOFormat::RelocationEntry *RENext = getRelocation(RelNext);
 
           // X86 sect diff's must be followed by a relocation of type
           // GENERIC_RELOC_PAIR.
@@ -1160,10 +1153,9 @@ error_code MachOObjectFile::getRelocatio
             fmt << ":lower16:(";
           printRelocationTargetName(RE, fmt);
 
-          InMemoryStruct<macho::RelocationEntry> RENext;
           DataRefImpl RelNext = Rel;
           RelNext.d.a++;
-          getRelocation(RelNext, RENext);
+          const MachOFormat::RelocationEntry *RENext = getRelocation(RelNext);
 
           // ARM half relocs must be followed by a relocation of type
           // ARM_RELOC_PAIR.
@@ -1209,8 +1201,7 @@ error_code MachOObjectFile::getRelocatio
 
 error_code MachOObjectFile::getRelocationHidden(DataRefImpl Rel,
                                                 bool &Result) const {
-  InMemoryStruct<macho::RelocationEntry> RE;
-  getRelocation(Rel, RE);
+  const MachOFormat::RelocationEntry *RE = getRelocation(Rel);
 
   unsigned Arch = getArch();
   bool isScattered = (Arch != Triple::x86_64) &&
@@ -1233,8 +1224,7 @@ error_code MachOObjectFile::getRelocatio
     if (Type == macho::RIT_X86_64_Unsigned && Rel.d.a > 0) {
       DataRefImpl RelPrev = Rel;
       RelPrev.d.a--;
-      InMemoryStruct<macho::RelocationEntry> REPrev;
-      getRelocation(RelPrev, REPrev);
+      const MachOFormat::RelocationEntry *REPrev = getRelocation(RelPrev);
 
       unsigned PrevType = (REPrev->Word1 >> 28) & 0xF;
 





More information about the llvm-commits mailing list