[llvm] r180194 - Revert r180189.
Rafael Espindola
rafael.espindola at gmail.com
Wed Apr 24 09:10:49 PDT 2013
Author: rafael
Date: Wed Apr 24 11:10:49 2013
New Revision: 180194
URL: http://llvm.org/viewvc/llvm-project?rev=180194&view=rev
Log:
Revert r180189.
This should bring the ppc bots back. I will try to write a test that would
have found the problem on a little endian system too.
Modified:
llvm/trunk/lib/Object/MachOObjectFile.cpp
Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=180194&r1=180193&r2=180194&view=diff
==============================================================================
--- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/MachOObjectFile.cpp Wed Apr 24 11:10:49 2013
@@ -769,47 +769,31 @@ MachOObjectFile::sectionContainsSymbol(D
}
relocation_iterator MachOObjectFile::getSectionRelBegin(DataRefImpl Sec) const {
- uint32_t Offset;
- if (is64Bit()) {
- macho::Section64 Sect = getSection64(Sec);
- Offset = Sect.RelocationTableOffset;
- } else {
- macho::Section Sect = getSection(Sec);
- Offset = Sect.RelocationTableOffset;
- }
-
- DataRefImpl Ret;
- Ret.p = reinterpret_cast<uintptr_t>(getPtr(this, Offset));
- return relocation_iterator(RelocationRef(Ret, this));
+ DataRefImpl ret;
+ ret.d.b = Sec.d.a;
+ return relocation_iterator(RelocationRef(ret, this));
}
relocation_iterator
MachOObjectFile::getSectionRelEnd(DataRefImpl Sec) const {
- uint32_t Offset;
- uint32_t Num;
+ uint32_t LastReloc;
if (is64Bit()) {
macho::Section64 Sect = getSection64(Sec);
- Offset = Sect.RelocationTableOffset;
- Num = Sect.NumRelocationTableEntries;
+ LastReloc = Sect.NumRelocationTableEntries;
} else {
macho::Section Sect = getSection(Sec);
- Offset = Sect.RelocationTableOffset;
- Num = Sect.NumRelocationTableEntries;
+ LastReloc = Sect.NumRelocationTableEntries;
}
- const macho::RelocationEntry *P =
- reinterpret_cast<const macho::RelocationEntry*>(getPtr(this, Offset));
-
DataRefImpl Ret;
- Ret.p = reinterpret_cast<uintptr_t>(P + Num);
+ Ret.d.a = LastReloc;
+ Ret.d.b = Sec.d.a;
return relocation_iterator(RelocationRef(Ret, this));
}
-error_code MachOObjectFile::getRelocationNext(DataRefImpl Rel,
- RelocationRef &Res) const {
- const macho::RelocationEntry *P =
- reinterpret_cast<const macho::RelocationEntry *>(Rel.p);
- Rel.p = reinterpret_cast<uintptr_t>(P + 1);
+ error_code MachOObjectFile::getRelocationNext(DataRefImpl Rel,
+ RelocationRef &Res) const {
+ ++Rel.d.a;
Res = RelocationRef(Rel, this);
return object_error::success;
}
@@ -1402,8 +1386,19 @@ MachOObjectFile::getLinkeditDataLoadComm
macho::RelocationEntry
MachOObjectFile::getRelocation(DataRefImpl Rel) const {
- const char *P = reinterpret_cast<const char *>(Rel.p);
- return getStruct<macho::RelocationEntry>(this, P);
+ uint32_t RelOffset;
+ DataRefImpl Sec;
+ Sec.d.a = Rel.d.b;
+ if (is64Bit()) {
+ macho::Section64 Sect = getSection64(Sec);
+ RelOffset = Sect.RelocationTableOffset;
+ } else {
+ macho::Section Sect = getSection(Sec);
+ RelOffset = Sect.RelocationTableOffset;
+ }
+
+ uint64_t Offset = RelOffset + Rel.d.a * sizeof(macho::RelocationEntry);
+ return getStruct<macho::RelocationEntry>(this, getPtr(this, Offset));
}
macho::Header MachOObjectFile::getHeader() const {
More information about the llvm-commits
mailing list