mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 20:29:53 +00:00
[RuntimeDyldELF] Handle GOTPCRELX/REX_GOTPCRELX.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@267309 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e37fa30e4c
commit
b50e1f0066
@ -1708,7 +1708,9 @@ relocation_iterator RuntimeDyldELF::processRelocationRef(
|
||||
Value.Offset);
|
||||
addRelocationForSection(RE, Value.SectionID);
|
||||
}
|
||||
} else if (RelType == ELF::R_X86_64_GOTPCREL) {
|
||||
} else if (RelType == ELF::R_X86_64_GOTPCREL ||
|
||||
RelType == ELF::R_X86_64_GOTPCRELX ||
|
||||
RelType == ELF::R_X86_64_REX_GOTPCRELX) {
|
||||
uint64_t GOTOffset = allocateGOTEntries(SectionID, 1);
|
||||
resolveGOTOffsetRelocation(SectionID, Offset, GOTOffset + Addend);
|
||||
|
||||
@ -1869,6 +1871,8 @@ bool RuntimeDyldELF::relocationNeedsStub(const RelocationRef &R) const {
|
||||
|
||||
|
||||
case ELF::R_X86_64_GOTPCREL:
|
||||
case ELF::R_X86_64_GOTPCRELX:
|
||||
case ELF::R_X86_64_REX_GOTPCRELX:
|
||||
case ELF::R_X86_64_PC32:
|
||||
case ELF::R_X86_64_PC64:
|
||||
case ELF::R_X86_64_64:
|
||||
|
8
test/ExecutionEngine/RuntimeDyld/X86/ELF-relaxed.s
Normal file
8
test/ExecutionEngine/RuntimeDyld/X86/ELF-relaxed.s
Normal file
@ -0,0 +1,8 @@
|
||||
# RUN: llvm-mc -triple=x86_64-pc-linux -relocation-model=pic -filetype=obj -o %T/file.o %p/Inputs/ELF_STT_FILE_GLOBAL.s
|
||||
# RUN: llvm-mc -triple=x86_64-pc-linux -relax-relocations -relocation-model=pic -filetype=obj -o %T/relaxed.o %s
|
||||
# RUN: llvm-rtdyld -triple=x86_64-pc-linux -verify %T/file.o %T/relaxed.o
|
||||
|
||||
# Test that RTDyldELF does not crash with 'unimplemented relocation'
|
||||
|
||||
_main:
|
||||
movq foo.c@GOTPCREL(%rip), %rax
|
Loading…
Reference in New Issue
Block a user