mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 02:33:06 +01:00
[COFF] Fix ARM and ARM64 REL32 relocations to be relative to the end of the relocation
This matches how they are defined on X86. This should fix the relative lookup tables pass for COFF, allowing it to be reenabled. Differential Revision: https://reviews.llvm.org/D102217
This commit is contained in:
parent
79d2416a46
commit
b44324fc5c
@ -789,12 +789,16 @@ void WinCOFFObjectWriter::recordRelocation(MCAssembler &Asm,
|
||||
Reloc.Data.Type = TargetObjectWriter->getRelocType(
|
||||
Asm.getContext(), Target, Fixup, SymB, Asm.getBackend());
|
||||
|
||||
// FIXME: Can anyone explain what this does other than adjust for the size
|
||||
// of the offset?
|
||||
// The *_REL32 relocations are relative to the end of the relocation,
|
||||
// not to the start.
|
||||
if ((Header.Machine == COFF::IMAGE_FILE_MACHINE_AMD64 &&
|
||||
Reloc.Data.Type == COFF::IMAGE_REL_AMD64_REL32) ||
|
||||
(Header.Machine == COFF::IMAGE_FILE_MACHINE_I386 &&
|
||||
Reloc.Data.Type == COFF::IMAGE_REL_I386_REL32))
|
||||
Reloc.Data.Type == COFF::IMAGE_REL_I386_REL32) ||
|
||||
(Header.Machine == COFF::IMAGE_FILE_MACHINE_ARMNT &&
|
||||
Reloc.Data.Type == COFF::IMAGE_REL_ARM_REL32) ||
|
||||
(Header.Machine == COFF::IMAGE_FILE_MACHINE_ARM64 &&
|
||||
Reloc.Data.Type == COFF::IMAGE_REL_ARM64_REL32))
|
||||
FixedValue += 4;
|
||||
|
||||
if (Header.Machine == COFF::IMAGE_FILE_MACHINE_ARMNT) {
|
||||
|
@ -109,4 +109,4 @@ tbz x0, #0, target
|
||||
// DISASM: 4c: 20 1a 09 30 adr x0, #74565
|
||||
|
||||
// DATA: Contents of section .rdata:
|
||||
// DATA-NEXT: 0000 2c000000 04000000
|
||||
// DATA-NEXT: 0000 30000000 08000000
|
||||
|
@ -120,4 +120,4 @@ secrel:
|
||||
@ CHECK-RELOCATION: ]
|
||||
|
||||
@ CHECK-DATA: Contents of section .rdata:
|
||||
@ CHECK-DATA-NEXT: 0000 00000000 04000000
|
||||
@ CHECK-DATA-NEXT: 0000 04000000 08000000
|
||||
|
Loading…
Reference in New Issue
Block a user