[all-commits] [llvm/llvm-project] b00f0d: [mips] Support 64-bit relative relocations

Simon Atanasyan via All-commits all-commits at lists.llvm.org
Tue Jun 2 01:44:54 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: b00f0d4238cb34a54073cc5ab7e2060d58f69e3f
      https://github.com/llvm/llvm-project/commit/b00f0d4238cb34a54073cc5ab7e2060d58f69e3f
  Author: Simon Atanasyan <simon at atanasyan.com>
  Date:   2020-06-02 (Tue, 02 Jun 2020)

  Changed paths:
    A lld/test/ELF/mips-pc64.s
    M llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
    M llvm/test/MC/Mips/relocation-n64.s
    M llvm/test/MC/Mips/unsupported-relocation.s

  Log Message:
  -----------
  [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




More information about the All-commits mailing list