forked from OSchip/llvm-project
ELF: Add support for R_AARCH64_ADR_PREL_PG_HI21_NC relocation.
Differential Revision: https://reviews.llvm.org/D64456 llvm-svn: 365662
This commit is contained in:
parent
893f8d719c
commit
d37edd0c79
|
@ -103,6 +103,7 @@ RelExpr AArch64::getRelExpr(RelType type, const Symbol &s,
|
|||
case R_AARCH64_LD_PREL_LO19:
|
||||
return R_PC;
|
||||
case R_AARCH64_ADR_PREL_PG_HI21:
|
||||
case R_AARCH64_ADR_PREL_PG_HI21_NC:
|
||||
return R_AARCH64_PAGE_PC;
|
||||
case R_AARCH64_LD64_GOT_LO12_NC:
|
||||
case R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC:
|
||||
|
@ -270,6 +271,8 @@ void AArch64::relocateOne(uint8_t *loc, RelType type, uint64_t val) const {
|
|||
case R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21:
|
||||
case R_AARCH64_TLSDESC_ADR_PAGE21:
|
||||
checkInt(loc, val, 33, type);
|
||||
LLVM_FALLTHROUGH;
|
||||
case R_AARCH64_ADR_PREL_PG_HI21_NC:
|
||||
write32AArch64Addr(loc, val >> 12);
|
||||
break;
|
||||
case R_AARCH64_ADR_PREL_LO21:
|
||||
|
|
|
@ -4,8 +4,10 @@
|
|||
// CHECK: relocation R_AARCH64_ADR_PREL_PG_HI21 cannot be used against symbol dat; recompile with -fPIC
|
||||
// CHECK: >>> defined in {{.*}}.o
|
||||
// CHECK: >>> referenced by {{.*}}.o:(.text+0x0)
|
||||
// CHECK: relocation R_AARCH64_ADR_PREL_PG_HI21_NC cannot be used against symbol dat; recompile with -fPIC
|
||||
|
||||
adrp x0, dat
|
||||
adrp x0, :pg_hi21_nc:dat
|
||||
.data
|
||||
.globl dat
|
||||
dat:
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
// REQUIRES: aarch64
|
||||
// RUN: llvm-mc -filetype=obj -triple=aarch64-unknown-linux %s -o %t.o
|
||||
// RUN: ld.lld %t.o -o %t
|
||||
// RUN: llvm-objdump -d %t | FileCheck %s
|
||||
|
||||
foo = . + 0x1100000000000000
|
||||
// CHECK: adrp x0, #0
|
||||
adrp x0, :pg_hi21_nc:foo
|
Loading…
Reference in New Issue