mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 11:26:08 +00:00
[ELF][MIPS] Check for overflow when writing R_MIPS_CALL16 and R_MIPS_TLS_GOTTPREL
Summary: These are 16 bit relocations and not part of a HI/LO pair so we need to check that they don't overflow. Reviewers: atanasyan Reviewed By: atanasyan Subscribers: ruiu, llvm-commits, emaste, sdardis Tags: #lld Differential Revision: https://reviews.llvm.org/D38614 llvm-svn: 315073
This commit is contained in:
parent
195a66f6eb
commit
f52a3b94e1
@ -501,21 +501,21 @@ void MIPS<ELFT>::relocateOne(uint8_t *Loc, uint32_t Type, uint64_t Val) const {
|
||||
writeMicroRelocation32<E>(Loc, Val, 16, 0);
|
||||
}
|
||||
break;
|
||||
case R_MIPS_CALL16:
|
||||
case R_MIPS_GOT_DISP:
|
||||
case R_MIPS_GOT_PAGE:
|
||||
case R_MIPS_GPREL16:
|
||||
case R_MIPS_TLS_GD:
|
||||
case R_MIPS_TLS_GOTTPREL:
|
||||
case R_MIPS_TLS_LDM:
|
||||
checkInt<16>(Loc, Val, Type);
|
||||
LLVM_FALLTHROUGH;
|
||||
case R_MIPS_CALL16:
|
||||
case R_MIPS_CALL_LO16:
|
||||
case R_MIPS_GOT_LO16:
|
||||
case R_MIPS_GOT_OFST:
|
||||
case R_MIPS_LO16:
|
||||
case R_MIPS_PCLO16:
|
||||
case R_MIPS_TLS_DTPREL_LO16:
|
||||
case R_MIPS_TLS_GOTTPREL:
|
||||
case R_MIPS_TLS_TPREL_LO16:
|
||||
writeRelocation<E>(Loc, Val, 16, 0);
|
||||
break;
|
||||
|
29
lld/test/ELF/mips-out-of-bounds-call16-reloc.s
Normal file
29
lld/test/ELF/mips-out-of-bounds-call16-reloc.s
Normal file
@ -0,0 +1,29 @@
|
||||
# Check that we create an error on an out-of-bounds R_MIPS_CALL_16
|
||||
|
||||
# REQUIRES: mips
|
||||
# RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux %s -o %t1.o
|
||||
# RUN: not ld.lld %t1.o -o %t.exe 2>&1 | FileCheck %s
|
||||
|
||||
# CHECK: relocation R_MIPS_CALL16 out of range
|
||||
|
||||
.macro generate_values
|
||||
.irp i, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
||||
.irp j, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
||||
.irp k, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
||||
.irp l, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
||||
.text
|
||||
.globl sym_\i\j\k\l
|
||||
sym_\i\j\k\l:
|
||||
nop
|
||||
lw $25,%call16(sym_\i\j\k\l)($28)
|
||||
.endr
|
||||
.endr
|
||||
.endr
|
||||
.endr
|
||||
.endm
|
||||
|
||||
generate_values
|
||||
|
||||
.globl __start
|
||||
__start:
|
||||
nop
|
Loading…
x
Reference in New Issue
Block a user