forked from OSchip/llvm-project
[ELF][RISCV] Error on R_RISCV_PCREL_LO12_[IS] that point to absolute symbols
The referenced symbol is expected to point to an R_RISCV_*_HI20 relocation. An absolute symbol has no associated section, therefore there cannot be a matching R_RISCV_*_HI20. This fixes the crash reported by PR42038. For reference, ld.bfd errors: (.init+0x4): dangerous relocation: %pcrel_lo missing matching %pcrel_hi Differential Revision: https://reviews.llvm.org/D63273 llvm-svn: 365049
This commit is contained in:
parent
b9bc9f67f5
commit
4e225deab4
|
@ -570,6 +570,11 @@ static uint64_t getARMStaticBase(const Symbol &Sym) {
|
|||
// R_RISCV_PCREL_LO12's symbol and addend.
|
||||
static Relocation *getRISCVPCRelHi20(const Symbol *Sym, uint64_t Addend) {
|
||||
const Defined *D = cast<Defined>(Sym);
|
||||
if (!D->Section) {
|
||||
error("R_RISCV_PCREL_LO12 relocation points to an absolute symbol: " +
|
||||
Sym->getName());
|
||||
return nullptr;
|
||||
}
|
||||
InputSection *IS = cast<InputSection>(D->Section);
|
||||
|
||||
if (Addend != 0)
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
# REQUIRES: riscv
|
||||
# RUN: llvm-mc -filetype=obj -triple=riscv64 %s -o %t.o
|
||||
# RUN: not ld.lld %t.o --defsym external=0 2>&1 | FileCheck %s
|
||||
|
||||
# CHECK: error: R_RISCV_PCREL_LO12 relocation points to an absolute symbol: external
|
||||
|
||||
addi sp,sp,%pcrel_lo(external)
|
Loading…
Reference in New Issue