[llvm] b27d6ff - [RuntimeDyld] Fix R_AARCH64_TSTBR14 relocation

Vladislav Khmelevsky via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 5 06:41:30 PDT 2022


Author: Vladislav Khmelevsky
Date: 2022-07-05T16:40:42+03:00
New Revision: b27d6ffe4e4aebde3cf032be74c3dbfcbaeea909

URL: https://github.com/llvm/llvm-project/commit/b27d6ffe4e4aebde3cf032be74c3dbfcbaeea909
DIFF: https://github.com/llvm/llvm-project/commit/b27d6ffe4e4aebde3cf032be74c3dbfcbaeea909.diff

LOG: [RuntimeDyld] Fix R_AARCH64_TSTBR14 relocation

Wrong mask was used to get branch instruction imm value.

Differential Revision: https://reviews.llvm.org/D128740

Added: 
    llvm/test/ExecutionEngine/RuntimeDyld/AArch64/ELF_ARM64_TSTBR14.s

Modified: 
    llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
index da1102fc9f071..c702584b7a33e 100644
--- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
+++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp
@@ -479,7 +479,7 @@ void RuntimeDyldELF::resolveAArch64Relocation(const SectionEntry &Section,
 
     *TargetPtr &= 0xfff8001fU;
     // Immediate:15:2 goes in bits 18:5 of TBZ, TBNZ
-    or32le(TargetPtr, (BranchImm & 0x0FFFFFFC) << 3);
+    or32le(TargetPtr, (BranchImm & 0x0000FFFC) << 3);
     break;
   }
   case ELF::R_AARCH64_CALL26: // fallthrough

diff  --git a/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/ELF_ARM64_TSTBR14.s b/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/ELF_ARM64_TSTBR14.s
new file mode 100644
index 0000000000000..2fc9b3d32e51e
--- /dev/null
+++ b/llvm/test/ExecutionEngine/RuntimeDyld/AArch64/ELF_ARM64_TSTBR14.s
@@ -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


        


More information about the llvm-commits mailing list