[llvm] [llvm][MC][ARM][Assembly] Emit relocations for ADRs and big-endian targets (PR #73834)

David Spickett via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 1 01:48:53 PST 2023


================
@@ -0,0 +1,23 @@
+@ RUN: llvm-mc -filetype=obj --triple=thumbv6m-none-eabi %s -o %t
+@ RUN: llvm-readelf -r %t | FileCheck %s --check-prefix=RELOC
+@ RUN: llvm-objdump -d --triple=thumbv6m-none-eabi %t | FileCheck %s --check-prefix=ADDEND
+
+    .section .text._func1, "ax"
+
+    .balign 4
+    .global _func1
+    .type _func1, %function
+_func1:
+    adr r0, _func2
+@ RELOC: R_ARM_THM_PC8
+    bx lr
+
+// Checking the encoding only, as the disassembly is not quite correct here.
+
+// Thumb16 encoding supports only adding of the encoded immediate (not
+// subtracting, see [Arm ARM]), therefore sign change is required if the pcrel
+// offset is negative. This makes the calculation of the addend for
+// R_ARM_THM_PC8 more complex, for details see [ELF for the Arm 32-bit
+// architecture].
+@ ADDEND: a0ff
----------------
DavidSpickett wrote:

How exactly is the disassembly not correct?

This check could be fooled by the number a0ff appearing anywhere in the output, so we at least need to check for something else on or immediately before that line.

https://github.com/llvm/llvm-project/pull/73834


More information about the llvm-commits mailing list