forked from OSchip/llvm-project
[RuntimeDyld] Fix R_AARCH64_TSTBR14 relocation
Wrong mask was used to get branch instruction imm value. Differential Revision: https://reviews.llvm.org/D128740
This commit is contained in:
parent
e4d1d0cc2c
commit
b27d6ffe4e
|
@ -479,7 +479,7 @@ void RuntimeDyldELF::resolveAArch64Relocation(const SectionEntry &Section,
|
||||||
|
|
||||||
*TargetPtr &= 0xfff8001fU;
|
*TargetPtr &= 0xfff8001fU;
|
||||||
// Immediate:15:2 goes in bits 18:5 of TBZ, TBNZ
|
// Immediate:15:2 goes in bits 18:5 of TBZ, TBNZ
|
||||||
or32le(TargetPtr, (BranchImm & 0x0FFFFFFC) << 3);
|
or32le(TargetPtr, (BranchImm & 0x0000FFFC) << 3);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ELF::R_AARCH64_CALL26: // fallthrough
|
case ELF::R_AARCH64_CALL26: // fallthrough
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
# RUN: llvm-mc -triple=arm64-none-linux-gnu -filetype=obj -o %t %s
|
||||||
|
# RUN: llvm-rtdyld -triple=aarch64_be-none-linux-gnu -verify -check=%s %t
|
||||||
|
|
||||||
|
.section .text.1,"ax"
|
||||||
|
.globl foo
|
||||||
|
foo:
|
||||||
|
ret
|
||||||
|
|
||||||
|
.globl _main
|
||||||
|
_main:
|
||||||
|
tbnz x0, #1, foo
|
||||||
|
|
||||||
|
## Branch 1 instruction back from _main
|
||||||
|
# rtdyld-check: *{4}(_main) = 0x370FFFE0
|
Loading…
Reference in New Issue