[PATCH] D96619: [LLD][COFF] PR49068: Include the IMAGE_REL_BASED_HIGHLOW relocation base type when the machine is 64 bits and the relocation type is ADDR32

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri May 21 13:46:09 PDT 2021


This revision was automatically updated to reflect the committed changes.
Closed by commit rG4fb131b49795: [LLD][COFF] PR49068: Include the IMAGE_REL_BASED_HIGHLOW relocation base type… (authored by ayrivera, committed by mstorsjo).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D96619

Files:
  lld/COFF/Chunks.cpp
  lld/test/COFF/reloc-x64-add32.s


Index: lld/test/COFF/reloc-x64-add32.s
===================================================================
--- /dev/null
+++ lld/test/COFF/reloc-x64-add32.s
@@ -0,0 +1,42 @@
+# REQUIRES: x86
+# RUN: llvm-mc %s -filetype=obj -o %t.obj -triple=x86_64-windows-msvc
+# RUN: lld-link /entry:main /out:%t.exe /LARGEADDRESSAWARE:NO %t.obj
+# RUN: llvm-readobj --coff-basereloc %t.exe | FileCheck %s --check-prefix=CHECKPASS
+
+# This test case checks that the "ADDR32" relocation symbol is collected
+# when linking a 64bit executable, and the output contains the HIGHLOW
+# relocated symbol.
+
+# Check that the HIGHLOW relocation base type is in the generated executable
+# CHECKPASS: Format: COFF-x86-64
+# CHECKPASS: Arch: x86_64
+# CHECKPASS: AddressSize: 64bit
+# CHECKPASS: BaseReloc
+# CHECKPASS:   Entry {
+# CHECKPASS-NEXT:     Type: HIGHLOW
+
+    .text
+    .def     main;
+    .scl    2;
+    .type   32;
+    .endef
+    .intel_syntax noprefix
+    .globl  main
+    .p2align        4, 0x90
+
+main: # @main
+    sub rsp, 40
+
+    mov dword ptr [rip + arr + 24], 7
+
+    mov eax, 1
+    mov ecx, 20
+    mov eax, dword ptr [rcx + 4 * rax + arr]
+
+    ret
+
+    .globl  arr
+    .p2align        4
+arr:
+    .zero 40
+
Index: lld/COFF/Chunks.cpp
===================================================================
--- lld/COFF/Chunks.cpp
+++ lld/COFF/Chunks.cpp
@@ -482,6 +482,8 @@
   case AMD64:
     if (rel.Type == IMAGE_REL_AMD64_ADDR64)
       return IMAGE_REL_BASED_DIR64;
+    if (rel.Type == IMAGE_REL_AMD64_ADDR32)
+      return IMAGE_REL_BASED_HIGHLOW;
     return IMAGE_REL_BASED_ABSOLUTE;
   case I386:
     if (rel.Type == IMAGE_REL_I386_DIR32)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D96619.347115.patch
Type: text/x-patch
Size: 1668 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210521/2c497a97/attachment.bin>


More information about the llvm-commits mailing list