Revert r145180 as it is causing test failures on all the bots.
[oota-llvm.git] / lib / Object / MachOObjectFile.cpp
index bb4f6a275b0f7ed90107f0377e9b502438f6b93c..65ce5f882a06bc055a6b11480bf757ba21f32e82 100644 (file)
@@ -125,27 +125,23 @@ error_code MachOObjectFile::getSymbolName(DataRefImpl DRI,
   return object_error::success;
 }
 
-error_code MachOObjectFile::getSymbolFileOffset(DataRefImpl DRI,
-                                                uint64_t &Result) const {
+error_code MachOObjectFile::getSymbolOffset(DataRefImpl DRI,
+                                             uint64_t &Result) const {
+  uint64_t SectionOffset;
+  uint8_t SectionIndex;
   if (MachOObj->is64Bit()) {
     InMemoryStruct<macho::Symbol64TableEntry> Entry;
     getSymbol64TableEntry(DRI, Entry);
     Result = Entry->Value;
-    if (Entry->SectionIndex) {
-      InMemoryStruct<macho::Section64> Section;
-      getSection64(Sections[Entry->SectionIndex-1], Section);
-      Result += Section->Offset - Section->Address;
-    }
+    SectionIndex = Entry->SectionIndex;
   } else {
     InMemoryStruct<macho::SymbolTableEntry> Entry;
     getSymbolTableEntry(DRI, Entry);
     Result = Entry->Value;
-    if (Entry->SectionIndex) {
-      InMemoryStruct<macho::Section> Section;
-      getSection(Sections[Entry->SectionIndex-1], Section);
-      Result += Section->Offset - Section->Address;
-    }
+    SectionIndex = Entry->SectionIndex;
   }
+  getSectionAddress(Sections[SectionIndex-1], SectionOffset);
+  Result -= SectionOffset;
 
   return object_error::success;
 }
@@ -166,50 +162,7 @@ error_code MachOObjectFile::getSymbolAddress(DataRefImpl DRI,
 
 error_code MachOObjectFile::getSymbolSize(DataRefImpl DRI,
                                           uint64_t &Result) const {
-  uint32_t LoadCommandCount = MachOObj->getHeader().NumLoadCommands;
-  uint64_t BeginOffset;
-  uint64_t EndOffset = 0;
-  uint8_t SectionIndex;
-  if (MachOObj->is64Bit()) {
-    InMemoryStruct<macho::Symbol64TableEntry> Entry;
-    getSymbol64TableEntry(DRI, Entry);
-    BeginOffset = Entry->Value;
-    SectionIndex = Entry->SectionIndex;
-    if (!SectionIndex) {
-      Result = UnknownAddressOrSize;
-      return object_error::success;
-    }
-    DRI.d.b++;
-    moveToNextSymbol(DRI);
-    if (DRI.d.a < LoadCommandCount) {
-      getSymbol64TableEntry(DRI, Entry);
-      if (Entry->SectionIndex == SectionIndex)
-        EndOffset += Entry->Value;
-    }
-  } else {
-    InMemoryStruct<macho::SymbolTableEntry> Entry;
-    getSymbolTableEntry(DRI, Entry);
-    BeginOffset = Entry->Value;
-    SectionIndex = Entry->SectionIndex;
-    if (!SectionIndex) {
-      Result = UnknownAddressOrSize;
-      return object_error::success;
-    }
-    DRI.d.b++;
-    moveToNextSymbol(DRI);
-    if (DRI.d.a < LoadCommandCount) {
-      getSymbolTableEntry(DRI, Entry);
-      if (Entry->SectionIndex == SectionIndex)
-        EndOffset += Entry->Value;
-    }
-  }
-  if (!EndOffset) {
-    uint64_t Size;
-    getSectionSize(Sections[SectionIndex-1], Size);
-    getSectionAddress(Sections[SectionIndex-1], EndOffset);
-    EndOffset += Size;
-  }
-  Result = EndOffset - BeginOffset;
+  Result = UnknownAddressOrSize;
   return object_error::success;
 }
 
@@ -322,7 +275,7 @@ error_code MachOObjectFile::getSymbolSection(DataRefImpl Symb,
   if (index == 0)
     Res = end_sections();
   else
-    Res = section_iterator(SectionRef(Sections[index-1], this));
+    Res = section_iterator(SectionRef(Sections[index], this));
 
   return object_error::success;
 }
@@ -661,7 +614,7 @@ error_code MachOObjectFile::getRelocationAddress(DataRefImpl Rel,
   bool isScattered = (Arch != Triple::x86_64) &&
                      (RE->Word0 & macho::RF_Scattered);
   uint64_t RelAddr = 0;
-  if (isScattered)
+  if (isScattered) 
     RelAddr = RE->Word0 & 0xFFFFFF;
   else
     RelAddr = RE->Word0;
@@ -669,20 +622,6 @@ error_code MachOObjectFile::getRelocationAddress(DataRefImpl Rel,
   Res = reinterpret_cast<uintptr_t>(sectAddress + RelAddr);
   return object_error::success;
 }
-error_code MachOObjectFile::getRelocationOffset(DataRefImpl Rel,
-                                                uint64_t &Res) const {
-  InMemoryStruct<macho::RelocationEntry> RE;
-  getRelocation(Rel, RE);
-
-  unsigned Arch = getArch();
-  bool isScattered = (Arch != Triple::x86_64) &&
-                     (RE->Word0 & macho::RF_Scattered);
-  if (isScattered)
-    Res = RE->Word0 & 0xFFFFFF;
-  else
-    Res = RE->Word0;
-  return object_error::success;
-}
 error_code MachOObjectFile::getRelocationSymbol(DataRefImpl Rel,
                                                 SymbolRef &Res) const {
   InMemoryStruct<macho::RelocationEntry> RE;