mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-20 20:38:48 +00:00
Use a pointer as the relocation iterator.
Since the relocation iterator walks only the relocations in one section, we can just use a pointer and avoid fetching information about the section at every reference. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180262 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
956ca7265c
commit
e5330f77cf
@ -758,31 +758,47 @@ MachOObjectFile::sectionContainsSymbol(DataRefImpl Sec, DataRefImpl Symb,
|
|||||||
}
|
}
|
||||||
|
|
||||||
relocation_iterator MachOObjectFile::getSectionRelBegin(DataRefImpl Sec) const {
|
relocation_iterator MachOObjectFile::getSectionRelBegin(DataRefImpl Sec) const {
|
||||||
DataRefImpl ret;
|
uint32_t Offset;
|
||||||
ret.d.b = Sec.d.a;
|
if (is64Bit()) {
|
||||||
return relocation_iterator(RelocationRef(ret, this));
|
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));
|
||||||
}
|
}
|
||||||
|
|
||||||
relocation_iterator
|
relocation_iterator
|
||||||
MachOObjectFile::getSectionRelEnd(DataRefImpl Sec) const {
|
MachOObjectFile::getSectionRelEnd(DataRefImpl Sec) const {
|
||||||
uint32_t LastReloc;
|
uint32_t Offset;
|
||||||
|
uint32_t Num;
|
||||||
if (is64Bit()) {
|
if (is64Bit()) {
|
||||||
macho::Section64 Sect = getSection64(Sec);
|
macho::Section64 Sect = getSection64(Sec);
|
||||||
LastReloc = Sect.NumRelocationTableEntries;
|
Offset = Sect.RelocationTableOffset;
|
||||||
|
Num = Sect.NumRelocationTableEntries;
|
||||||
} else {
|
} else {
|
||||||
macho::Section Sect = getSection(Sec);
|
macho::Section Sect = getSection(Sec);
|
||||||
LastReloc = Sect.NumRelocationTableEntries;
|
Offset = Sect.RelocationTableOffset;
|
||||||
|
Num = Sect.NumRelocationTableEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const macho::RelocationEntry *P =
|
||||||
|
reinterpret_cast<const macho::RelocationEntry*>(getPtr(this, Offset));
|
||||||
|
|
||||||
DataRefImpl Ret;
|
DataRefImpl Ret;
|
||||||
Ret.d.a = LastReloc;
|
Ret.p = reinterpret_cast<uintptr_t>(P + Num);
|
||||||
Ret.d.b = Sec.d.a;
|
|
||||||
return relocation_iterator(RelocationRef(Ret, this));
|
return relocation_iterator(RelocationRef(Ret, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
error_code MachOObjectFile::getRelocationNext(DataRefImpl Rel,
|
error_code MachOObjectFile::getRelocationNext(DataRefImpl Rel,
|
||||||
RelocationRef &Res) const {
|
RelocationRef &Res) const {
|
||||||
++Rel.d.a;
|
const macho::RelocationEntry *P =
|
||||||
|
reinterpret_cast<const macho::RelocationEntry *>(Rel.p);
|
||||||
|
Rel.p = reinterpret_cast<uintptr_t>(P + 1);
|
||||||
Res = RelocationRef(Rel, this);
|
Res = RelocationRef(Rel, this);
|
||||||
return object_error::success;
|
return object_error::success;
|
||||||
}
|
}
|
||||||
@ -1378,19 +1394,8 @@ MachOObjectFile::getLinkeditDataLoadCommand(const MachOObjectFile::LoadCommandIn
|
|||||||
|
|
||||||
macho::RelocationEntry
|
macho::RelocationEntry
|
||||||
MachOObjectFile::getRelocation(DataRefImpl Rel) const {
|
MachOObjectFile::getRelocation(DataRefImpl Rel) const {
|
||||||
uint32_t RelOffset;
|
const char *P = reinterpret_cast<const char *>(Rel.p);
|
||||||
DataRefImpl Sec;
|
return getStruct<macho::RelocationEntry>(this, P);
|
||||||
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 {
|
macho::Header MachOObjectFile::getHeader() const {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user