[all-commits] [llvm/llvm-project] fec90b: Reland "[MC][ELF] Work around R_MIPS_LO16 relocati...

Dimitry Andric via All-commits all-commits at lists.llvm.org
Tue Jun 8 16:16:16 PDT 2021


  Branch: refs/heads/release/12.x
  Home:   https://github.com/llvm/llvm-project
  Commit: fec90b2cebc3d1bb7d9562bec5170d697db39a84
      https://github.com/llvm/llvm-project/commit/fec90b2cebc3d1bb7d9562bec5170d697db39a84
  Author: Dimitry Andric <dimitry at andric.com>
  Date:   2021-06-08 (Tue, 08 Jun 2021)

  Changed paths:
    M llvm/lib/MC/ELFObjectWriter.cpp
    M llvm/test/MC/Mips/elf-relsym.s
    A llvm/test/MC/Mips/mips_lo16.s
    M llvm/test/MC/Mips/xgot.s

  Log Message:
  -----------
  Reland "[MC][ELF] Work around R_MIPS_LO16 relocation handling problem"

This fixes PR49821, and avoids "ld.lld: error: test.o:(.rodata.str1.1):
offset is outside the section" errors when linking MIPS objects with
negative R_MIPS_LO16 implicit addends.

ld.lld handles R_MIPS_HI16/R_MIPS_LO16 separately, not as a whole, so it
doesn't know that an R_MIPS_HI16 with implicit addend 1 and an
R_MIPS_LO16 with implicit addend -32768 represents 32768, which is in
range of a MergeInputSection. We could introduce a new RelExpr member
(like R_RISCV_PC_INDIRECT for R_RISCV_PCREL_HI20 / R_RISCV_PCREL_LO12)
but the complexity is unnecessary given that GNU as keeps the original
symbol for this case as well.

Adds a new test case for PR49821, and also updates two other test cases
that are affected by this change.

Reviewed By: atanasyan, MaskRay

Differential Revision: https://reviews.llvm.org/D101773

(cherry picked from commit 7e83a7f1fdfcc2edde61f0a535f9d7a56f531db9)




More information about the All-commits mailing list