[llvm-branch-commits] ELF: Introduce R_AARCH64_PATCHINST relocation type. (PR #133534)
Peter Smith via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Jul 11 08:45:44 PDT 2025
================
@@ -0,0 +1,41 @@
+# RUN: rm -rf %t && split-file %s %t
+# RUN: llvm-mc -filetype=obj -triple=aarch64 %t/use.s -o %t/use-le.o
+# RUN: llvm-mc -filetype=obj -triple=aarch64 %t/def.s -o %t/def-le.o
+
+## Deactivation symbol used without being defined: instruction emitted as usual.
+# RUN: ld.lld -o %t/undef-le %t/use-le.o
+# RUN: llvm-objdump -d %t/undef-le | FileCheck --check-prefix=UNDEF %s
+
+## Deactivation symbol defined: instructions overwritten with NOPs.
+# RUN: ld.lld -o %t/def-le %t/use-le.o %t/def-le.o
+# RUN: llvm-objdump -d %t/def-le | FileCheck --check-prefix=DEF %s
+
+## Behavior unchanged by endianness: relocation always written as little endian.
+# RUN: llvm-mc -filetype=obj -triple=aarch64_be %t/use.s -o %t/use-be.o
+# RUN: llvm-mc -filetype=obj -triple=aarch64_be %t/def.s -o %t/def-be.o
+# RUN: ld.lld -o %t/undef-be %t/use-be.o
+# RUN: llvm-objdump -d %t/undef-be | FileCheck --check-prefix=UNDEF %s
+# RUN: ld.lld -o %t/def-be %t/use-be.o %t/def-be.o
+# RUN: llvm-objdump -d %t/def-be | FileCheck --check-prefix=DEF %s
+
+#--- use.s
+.weak ds
+# This instruction has a single relocation: the DS relocation.
+# UNDEF: add x0, x1, x2
+# DEF: nop
+.reloc ., R_AARCH64_PATCHINST, ds
+add x0, x1, x2
+# This instruction has two relocations: the DS relocation and the JUMP26 to f1.
+# Make sure that the DS relocation takes precedence.
+.reloc ., R_AARCH64_PATCHINST, ds
----------------
smithp35 wrote:
Could be worth a test with emit-relocs to show both relocations coming out.
Thinking of Bolt, which relies on emit-relocs, I expect that it would just ignore the R_AARCH_PATCHINST relocations on their own as it wouldn't know how to recreate the original value [1]. It would have to discard any relocation at the same location. We're hoping to create a binary analysis ABI supplement soon to document conventions that binary analysis tools are using. First step https://github.com/ARM-software/abi-aa/pull/333
[1] In theory if we did want to let Bolt reverse a patch, the emit-relocs output could give the reverse patch.
https://github.com/llvm/llvm-project/pull/133534
More information about the llvm-branch-commits
mailing list