mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-23 14:25:07 +00:00
PowerPC: EH adjustments
This patch adjust the r171506 to make all DWARF enconding pc-relative for PPC64. It also adds the R_PPC64_REL32 relocation handling in MCJIT (since the eh_frame will not generate PIC-relative relocation) and also adds the emission of stubs created by the TTypeEncoding. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171979 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -523,7 +523,7 @@ void RuntimeDyldELF::resolvePPC64Relocation(const SectionEntry &Section,
|
||||
case ELF::R_PPC64_ADDR32 : {
|
||||
int32_t Result = static_cast<int32_t>(Value + Addend);
|
||||
if (SignExtend32<32>(Result) != Result)
|
||||
llvm_unreachable("Relocation R_PPC64_REL32 overflow");
|
||||
llvm_unreachable("Relocation R_PPC64_ADDR32 overflow");
|
||||
writeInt32BE(LocalAddress, Result);
|
||||
} break;
|
||||
case ELF::R_PPC64_REL24 : {
|
||||
@@ -534,6 +534,13 @@ void RuntimeDyldELF::resolvePPC64Relocation(const SectionEntry &Section,
|
||||
// Generates a 'bl <address>' instruction
|
||||
writeInt32BE(LocalAddress, 0x48000001 | (delta & 0x03FFFFFC));
|
||||
} break;
|
||||
case ELF::R_PPC64_REL32 : {
|
||||
uint64_t FinalAddress = (Section.LoadAddress + Offset);
|
||||
int32_t delta = static_cast<int32_t>(Value - FinalAddress + Addend);
|
||||
if (SignExtend32<32>(delta) != delta)
|
||||
llvm_unreachable("Relocation R_PPC64_REL32 overflow");
|
||||
writeInt32BE(LocalAddress, delta);
|
||||
} break;
|
||||
case ELF::R_PPC64_ADDR64 :
|
||||
writeInt64BE(LocalAddress, Value + Addend);
|
||||
break;
|
||||
|
Reference in New Issue
Block a user