mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-14 15:39:00 +00:00
Separating ELF and MachO stub info functions for RuntimeDyld
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192737 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
977ce007ad
commit
72be32c633
@ -82,6 +82,30 @@ class RuntimeDyldELF : public RuntimeDyldImpl {
|
||||
uint32_t Type,
|
||||
int64_t Addend);
|
||||
|
||||
unsigned getMaxStubSize() {
|
||||
if (Arch == Triple::aarch64)
|
||||
return 20; // movz; movk; movk; movk; br
|
||||
if (Arch == Triple::arm || Arch == Triple::thumb)
|
||||
return 8; // 32-bit instruction and 32-bit address
|
||||
else if (Arch == Triple::mipsel || Arch == Triple::mips)
|
||||
return 16;
|
||||
else if (Arch == Triple::ppc64 || Arch == Triple::ppc64le)
|
||||
return 44;
|
||||
else if (Arch == Triple::x86_64)
|
||||
return 6; // 2-byte jmp instruction + 32-bit relative address
|
||||
else if (Arch == Triple::systemz)
|
||||
return 16;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned getStubAlignment() {
|
||||
if (Arch == Triple::systemz)
|
||||
return 8;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint64_t findPPC64TOC() const;
|
||||
void findOPDEntrySection(ObjectImage &Obj,
|
||||
ObjSectionToIDMap &LocalSections,
|
||||
|
@ -186,29 +186,8 @@ protected:
|
||||
Triple::ArchType Arch;
|
||||
bool IsTargetLittleEndian;
|
||||
|
||||
inline unsigned getMaxStubSize() {
|
||||
if (Arch == Triple::aarch64)
|
||||
return 20; // movz; movk; movk; movk; br
|
||||
if (Arch == Triple::arm || Arch == Triple::thumb)
|
||||
return 8; // 32-bit instruction and 32-bit address
|
||||
else if (Arch == Triple::mipsel || Arch == Triple::mips)
|
||||
return 16;
|
||||
else if (Arch == Triple::ppc64 || Arch == Triple::ppc64le)
|
||||
return 44;
|
||||
else if (Arch == Triple::x86_64)
|
||||
return 6; // 2-byte jmp instruction + 32-bit relative address
|
||||
else if (Arch == Triple::systemz)
|
||||
return 16;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline unsigned getStubAlignment() {
|
||||
if (Arch == Triple::systemz)
|
||||
return 8;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
virtual unsigned getMaxStubSize() = 0;
|
||||
virtual unsigned getStubAlignment() = 0;
|
||||
|
||||
bool HasError;
|
||||
std::string ErrorStr;
|
||||
|
@ -55,6 +55,19 @@ class RuntimeDyldMachO : public RuntimeDyldImpl {
|
||||
bool isPCRel,
|
||||
unsigned Size);
|
||||
|
||||
unsigned getMaxStubSize() {
|
||||
if (Arch == Triple::arm || Arch == Triple::thumb)
|
||||
return 8; // 32-bit instruction and 32-bit address
|
||||
else if (Arch == Triple::x86_64)
|
||||
return 8; // GOT entry
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned getStubAlignment() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct EHFrameRelatedSections {
|
||||
EHFrameRelatedSections() : EHFrameSID(RTDYLD_INVALID_SECTION_ID),
|
||||
TextSID(RTDYLD_INVALID_SECTION_ID),
|
||||
|
Loading…
Reference in New Issue
Block a user