aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-04-11 02:21:31 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-04-11 02:21:31 +0000
commit8bf80061ba44af16b4597627ca7d6d7fc1bed64e (patch)
treefb8ecf30dd70e1d29f6a02346356100888d2e6a9
parent4b040294816e49413c739825d801042bc76171a7 (diff)
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.h20
-rw-r--r--lib/Object/MachOObjectFile.cpp6
2 files changed, 8 insertions, 18 deletions
diff --git a/include/llvm/Object/MachO.h b/include/llvm/Object/MachO.h
index 49800fc381..b02e1ac100 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 f4df8e012c..c846206e6e 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 -----------------------------------------------------===*/