OSDN Git Service

The VMAs stored in the symbol table of a MachO file are absolute addresses, not offse...
authorOwen Anderson <resistor@mac.com>
Wed, 12 Oct 2011 22:37:10 +0000 (22:37 +0000)
committerOwen Anderson <resistor@mac.com>
Wed, 12 Oct 2011 22:37:10 +0000 (22:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141828 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/MachOObjectFile.cpp

index 86d87ed..507df58 100644 (file)
@@ -126,36 +126,36 @@ error_code MachOObjectFile::getSymbolName(DataRefImpl DRI,
 
 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;
+    SectionIndex = Entry->SectionIndex;
   } else {
     InMemoryStruct<macho::SymbolTableEntry> Entry;
     getSymbolTableEntry(DRI, Entry);
     Result = Entry->Value;
+    SectionIndex = Entry->SectionIndex;
   }
+  getSectionAddress(Sections[SectionIndex-1], SectionOffset);
+  Result -= SectionOffset;
+
   return object_error::success;
 }
 
 error_code MachOObjectFile::getSymbolAddress(DataRefImpl DRI,
                                              uint64_t &Result) const {
-  uint64_t SymbolOffset;
-  uint8_t SectionIndex;
   if (MachOObj->is64Bit()) {
     InMemoryStruct<macho::Symbol64TableEntry> Entry;
     getSymbol64TableEntry(DRI, Entry);
-    SymbolOffset = Entry->Value;
-    SectionIndex = Entry->SectionIndex;
+    Result = Entry->Value;
   } else {
     InMemoryStruct<macho::SymbolTableEntry> Entry;
     getSymbolTableEntry(DRI, Entry);
-    SymbolOffset = Entry->Value;
-    SectionIndex = Entry->SectionIndex;
+    Result = Entry->Value;
   }
-  getSectionAddress(Sections[SectionIndex-1], Result);
-  Result += SymbolOffset;
-
   return object_error::success;
 }