Files
clang-p2996/lld/test/COFF/reloc-x64-add32.s
Axel Y. Rivera 4fb131b497 [LLD][COFF] PR49068: Include the IMAGE_REL_BASED_HIGHLOW relocation base type when the machine is 64 bits and the relocation type is ADDR32
The COFF driver produces an ABSOLUTE relocation base for an ADDR32
relocation type and the system is 64 bits (machine=AMD64). The
relocation information won't be added in the output and could
produce an incorrect address access during run-time. This change
set checks if the relocation type is IMAGE_REL_AMD64_ADDR32 and
if so, adds the relocated symbol as IMAGE_REL_BASED_HIGHLOW base.

Differential Revision: https://reviews.llvm.org/D96619
2021-05-21 23:45:55 +03:00

43 lines
1013 B
ArmAsm

# 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