Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
- Loading branch information
1 parent
5285748
commit 7e83a7f
Showing
4 changed files
with
43 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
# PR49821: Check that R_MIPS_LO16 relocs do not wrap around with large addends. | ||
|
||
# RUN: llvm-mc %s -triple mips-unknown-unknown -filetype=obj | \ | ||
# RUN: llvm-objdump -d -r --no-show-raw-insn - | \ | ||
# RUN: FileCheck -check-prefix=MIPS32 %s | ||
|
||
# RUN: llvm-mc %s -triple mips64-unknown-unknown -filetype=obj | \ | ||
# RUN: llvm-objdump -d -r --no-show-raw-insn - | \ | ||
# RUN: FileCheck -check-prefix=MIPS64 %s | ||
|
||
.text | ||
foo: | ||
lui $2, %hi(bar) | ||
# MIPS32: 00000000: R_MIPS_HI16 bar | ||
# MIPS64: 0000000000000000: R_MIPS_HI16/R_MIPS_NONE/R_MIPS_NONE .rodata.str1.1+0x8000 | ||
addiu $2, $2, %lo(bar) | ||
# MIPS32: 00000004: R_MIPS_LO16 bar | ||
# MIPS64: 0000000000000004: R_MIPS_LO16/R_MIPS_NONE/R_MIPS_NONE .rodata.str1.1+0x8000 | ||
.section .rodata.str1.1,"aMS",@progbits,1 | ||
.zero 0x8000 | ||
bar: | ||
.asciz "hello" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters