summaryrefslogtreecommitdiff
path: root/lib/Object/MachOObjectFile.cpp
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-10-12 22:37:10 +0000
committerOwen Anderson <resistor@mac.com>2011-10-12 22:37:10 +0000
commit95f8db4d4d0110182d721586a006748b30e4fc82 (patch)
treea2b389f37adbf72e806b274202104d8ce4ee497b /lib/Object/MachOObjectFile.cpp
parenta046d2ff9a6ef1a5ecf1068d9fce714db7557c2a (diff)
downloadllvm-95f8db4d4d0110182d721586a006748b30e4fc82.tar.gz
llvm-95f8db4d4d0110182d721586a006748b30e4fc82.tar.bz2
llvm-95f8db4d4d0110182d721586a006748b30e4fc82.tar.xz
The VMAs stored in the symbol table of a MachO file are absolute addresses, not offsets from the section.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141828 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Object/MachOObjectFile.cpp')
-rw-r--r--lib/Object/MachOObjectFile.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp
index 86d87ed0f2..507df5865e 100644
--- a/lib/Object/MachOObjectFile.cpp
+++ b/lib/Object/MachOObjectFile.cpp
@@ -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;
}