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
This commit is contained in:
Rafael Espindola 2013-04-11 02:21:31 +00:00
parent 4b04029481
commit 8bf80061ba
2 changed files with 8 additions and 18 deletions

View File

@ -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;
@ -531,22 +531,6 @@ MachOObjectFile<MachOT>::getRelocationSymbol(DataRefImpl Rel,
return object_error::success;
}
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 {

View File

@ -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 -----------------------------------------------------===*/