[ELF2/AArch64] Support R_AARCH64_LDST64_ABS_LO12_NC relocation.
llvm-svn: 252415
This commit is contained in:
parent
189d7da1f5
commit
bbcc7f6115
|
@ -660,6 +660,10 @@ void AArch64TargetInfo::relocateOne(uint8_t *Loc, uint8_t *BufEnd,
|
|||
updateAArch64Adr(Loc, (X >> 12) & 0x1FFFFF); // X[32:12]
|
||||
break;
|
||||
}
|
||||
case R_AARCH64_LDST64_ABS_LO12_NC:
|
||||
// No overflow check needed.
|
||||
or32le(Loc, (SA & 0xFF8) << 7);
|
||||
break;
|
||||
case R_AARCH64_PREL16:
|
||||
if (!isInt<16>(SA))
|
||||
error("Relocation R_AARCH64_PREL16 out of range");
|
||||
|
|
|
@ -44,3 +44,16 @@ mystr:
|
|||
# CHECK: Disassembly of section .R_AARCH64_ADD_ABS_LO12_NC:
|
||||
# CHECK-NEXT: $x.4:
|
||||
# CHECK-NEXT: 1101b: 00 7c 00 91 add x0, x0, #31
|
||||
|
||||
.section .R_AARCH64_LDST64_ABS_LO12_NC,"ax",@progbits
|
||||
ldr x28, [x27, :lo12:foo]
|
||||
foo:
|
||||
.asciz "foo"
|
||||
.size mystr, 3
|
||||
|
||||
# S = 0x11024, A = 0x4
|
||||
# R = ((S + A) & 0xFFF) << 7 = 0x00001400
|
||||
# 0x00001400 | 0xf940177c = 0xf940177c
|
||||
# CHECK: Disassembly of section .R_AARCH64_LDST64_ABS_LO12_NC:
|
||||
# CHECK-NEXT: $x.6:
|
||||
# CHECK-NEXT: 11024: 7c 17 40 f9 ldr x28, [x27, #40]
|
||||
|
|
Loading…
Reference in New Issue