forked from OSchip/llvm-project
Support for 64-bit PC-relative relocations for X86_64
ELF files generated for X86_64 targets may contain 64-bit PC-relative relocations. For instance, an exception handler table entry contains the start of exception-throwing frame relative to the start of exception handler. As these two labels belong to different sections, their difference and so the relocation is 64-bit. An attempt to parse such file, i.e. in DWARFContext::create, results in "failed to compute relocation" error. This fix adds support for such relocations to RelocationResolver.cpp. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D67779 Patch by Oleg Pliss (Oleg.Pliss@azul.com) llvm-svn: 372447
This commit is contained in:
parent
c96d5545f0
commit
3e6590c451
|
@ -30,6 +30,7 @@ static bool supportsX86_64(uint64_t Type) {
|
|||
case ELF::R_X86_64_DTPOFF32:
|
||||
case ELF::R_X86_64_DTPOFF64:
|
||||
case ELF::R_X86_64_PC32:
|
||||
case ELF::R_X86_64_PC64:
|
||||
case ELF::R_X86_64_32:
|
||||
case ELF::R_X86_64_32S:
|
||||
return true;
|
||||
|
@ -47,6 +48,7 @@ static uint64_t resolveX86_64(RelocationRef R, uint64_t S, uint64_t A) {
|
|||
case ELF::R_X86_64_DTPOFF64:
|
||||
return S + getELFAddend(R);
|
||||
case ELF::R_X86_64_PC32:
|
||||
case ELF::R_X86_64_PC64:
|
||||
return S + getELFAddend(R) - R.getOffset();
|
||||
case ELF::R_X86_64_32:
|
||||
case ELF::R_X86_64_32S:
|
||||
|
|
Loading…
Reference in New Issue