[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
Axel Y. Rivera via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri May 21 07:06:34 PDT 2021
ayrivera updated this revision to Diff 347019.
ayrivera added a comment.
Fix for the observation made by @mstorsjo
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.347019.patch
Type: text/x-patch
Size: 1668 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210521/4a4b92e0/attachment.bin>
More information about the llvm-commits
mailing list