[PATCH] D102217: [COFF] Fix ARM and ARM64 REL32 relocations to be relative to the end of the relocation

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 11 23:53:59 PDT 2021


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG382c505d9cfc: [COFF] Fix ARM and ARM64 REL32 relocations to be relative to the end of the… (authored by mstorsjo).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D102217/new/

https://reviews.llvm.org/D102217

Files:
  llvm/lib/MC/WinCOFFObjectWriter.cpp
  llvm/test/MC/AArch64/coff-relocations.s
  llvm/test/MC/ARM/coff-relocations.s


Index: llvm/test/MC/ARM/coff-relocations.s
===================================================================
--- llvm/test/MC/ARM/coff-relocations.s
+++ llvm/test/MC/ARM/coff-relocations.s
@@ -120,4 +120,4 @@
 @ CHECK-RELOCATION: ]
 
 @ CHECK-DATA: Contents of section .rdata:
-@ CHECK-DATA-NEXT: 0000 00000000 04000000
+@ CHECK-DATA-NEXT: 0000 04000000 08000000
Index: llvm/test/MC/AArch64/coff-relocations.s
===================================================================
--- llvm/test/MC/AArch64/coff-relocations.s
+++ llvm/test/MC/AArch64/coff-relocations.s
@@ -109,4 +109,4 @@
 // DISASM: 4c:       20 1a 09 30     adr     x0, #74565
 
 // DATA: Contents of section .rdata:
-// DATA-NEXT:  0000 2c000000 04000000
+// DATA-NEXT:  0000 30000000 08000000
Index: llvm/lib/MC/WinCOFFObjectWriter.cpp
===================================================================
--- llvm/lib/MC/WinCOFFObjectWriter.cpp
+++ llvm/lib/MC/WinCOFFObjectWriter.cpp
@@ -789,12 +789,16 @@
   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) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D102217.344687.patch
Type: text/x-patch
Size: 1903 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210512/dee711d8/attachment.bin>


More information about the llvm-commits mailing list