Files
clang-p2996/lld/test/ELF/mips-pc64.s
Simon Atanasyan b00f0d4238 [mips] Support 64-bit relative relocations
MIPS 64-bit ABI does not provide special PC-relative relocation like
R_MIPS_PC32 in 32-bit case. But we can use a "chain of relocation"
defined by N64 ABIs. In that case one relocation record might contain up
to three relocations which applied sequentially. Width of a final relocation
mask applied to the result of relocation depends on the last relocation
in the chain. In case of 64-bit PC-relative relocation we need the following
chain: `R_MIPS_PC32 | R_MIPS_64`. The first relocation calculates an
offset, but does not truncate the result. The second relocation just
apply calculated result as a 64-bit value.

The 64-bit PC-relative relocation might be useful in generation of
`.eh_frame` sections to escape passing `-Wl,-z,notext` flags to linker.

Differential Revision: https://reviews.llvm.org/D80390
2020-06-02 11:44:11 +03:00

25 lines
583 B
ArmAsm

# REQUIRES: mips
# Check handling of 64-bit pc-realtive relocation.
# RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux %s -o %t.o
# RUN: echo 'SECTIONS { \
# RUN: .text 0x10000 : { *(.text) } \
# RUN: .data 0x30000 : { *(.data) } \
# RUN: }' > %t.script
# RUN: ld.lld -shared %t.o -T %t.script -o %t
# RUN: llvm-readelf -x .data %t | FileCheck %s
# CHECK: Hex dump of section '.data':
# CHECK-NEXT: 0x00030000 ffffffff fffffff0 00000001 fffdffe8
.option pic2
.text
foo:
nop
.data
v0:
.quad foo+0x1fff0-.
v1:
.quad foo+0x1fffffff0-.