diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-11 02:21:31 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-04-11 02:21:31 +0000 |
commit | 8bf80061ba44af16b4597627ca7d6d7fc1bed64e (patch) | |
tree | fb8ecf30dd70e1d29f6a02346356100888d2e6a9 | |
parent | 4b040294816e49413c739825d801042bc76171a7 (diff) | |
download | external_llvm-8bf80061ba44af16b4597627ca7d6d7fc1bed64e.zip external_llvm-8bf80061ba44af16b4597627ca7d6d7fc1bed64e.tar.gz external_llvm-8bf80061ba44af16b4597627ca7d6d7fc1bed64e.tar.bz2 |
Fix MachO's getRelocationAdditionalInfo.
It was returning the loaded address of the section containing the relocation,
which really doesn't seem to be the intent of this function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179255 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Object/MachO.h | 20 | ||||
-rw-r--r-- | lib/Object/MachOObjectFile.cpp | 6 |
2 files changed, 8 insertions, 18 deletions
diff --git a/include/llvm/Object/MachO.h b/include/llvm/Object/MachO.h index 49800fc..b02e1ac 100644 --- a/include/llvm/Object/MachO.h +++ b/include/llvm/Object/MachO.h @@ -271,6 +271,8 @@ protected: virtual error_code getLibraryNext(DataRefImpl LibData, LibraryRef &Res) const; virtual error_code getLibraryPath(DataRefImpl LibData, StringRef &Res) const; + virtual error_code getRelocationAdditionalInfo(DataRefImpl Rel, + int64_t &Res) const; std::size_t getSectionIndex(DataRefImpl Sec) const; @@ -346,8 +348,6 @@ public: virtual error_code getRelocationAddress(DataRefImpl Rel, uint64_t &Res) const; virtual error_code getRelocationOffset(DataRefImpl Rel, uint64_t &Res) const; virtual error_code getRelocationSymbol(DataRefImpl Rel, SymbolRef &Res) const; - virtual error_code getRelocationAdditionalInfo(DataRefImpl Rel, - int64_t &Res) const; virtual error_code getRelocationType(DataRefImpl Rel, uint64_t &Res) const; virtual error_code getRelocationTypeName(DataRefImpl Rel, SmallVectorImpl<char> &Result) const; @@ -532,22 +532,6 @@ MachOObjectFile<MachOT>::getRelocationSymbol(DataRefImpl Rel, } template<class MachOT> -error_code -MachOObjectFile<MachOT>::getRelocationAdditionalInfo(DataRefImpl Rel, - int64_t &Res) const { - const RelocationEntry *RE = getRelocation(Rel); - bool isExtern = (RE->Word1 >> 27) & 1; - Res = 0; - if (!isExtern) { - const uint8_t* sectAddress = base(); - const Section *Sect = getSection(Sections[Rel.d.b]); - sectAddress += Sect->Offset; - Res = reinterpret_cast<uintptr_t>(sectAddress); - } - return object_error::success; -} - -template<class MachOT> error_code MachOObjectFile<MachOT>::getRelocationType(DataRefImpl Rel, uint64_t &Res) const { const RelocationEntry *RE = getRelocation(Rel); diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp index f4df8e0..c846206 100644 --- a/lib/Object/MachOObjectFile.cpp +++ b/lib/Object/MachOObjectFile.cpp @@ -512,6 +512,12 @@ error_code MachOObjectFileBase::getLibraryPath(DataRefImpl LibData, report_fatal_error("Needed libraries unimplemented in MachOObjectFileBase"); } +error_code MachOObjectFileBase::getRelocationAdditionalInfo(DataRefImpl Rel, + int64_t &Res) const { + Res = 0; + return object_error::success; +} + /*===-- Miscellaneous -----------------------------------------------------===*/ |