[PATCH] D159513: [Bolt] fix a relocation bug for R_AARCH64_CALL26
Sinan Lin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 14 04:31:07 PDT 2023
sinan updated this revision to Diff 556772.
sinan added a comment.
Merged into test case bolt/test/AArch64/reloc-call26.s
1. Enhanced the test for relocations against functions with both higher and lower addresses.
2. Added --force-patch option in the test case; otherwise, `encodeValueAArch64` won't be invoked.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D159513/new/
https://reviews.llvm.org/D159513
Files:
bolt/lib/Core/Relocation.cpp
bolt/test/AArch64/reloc-call26.s
Index: bolt/test/AArch64/reloc-call26.s
===================================================================
--- bolt/test/AArch64/reloc-call26.s
+++ bolt/test/AArch64/reloc-call26.s
@@ -6,24 +6,30 @@
# RUN: llvm-mc -filetype=obj -triple aarch64-unknown-unknown \
# RUN: %s -o %t.o
# RUN: %clang %cflags %t.o -o %t.exe -Wl,-q
-# RUN: llvm-bolt %t.exe -o %t.bolt --funcs=func1
+# RUN: llvm-bolt %t.exe -o %t.bolt --funcs=func1,func2 --force-patch
# RUN: llvm-objdump -d --disassemble-symbols='_start' %t.bolt | \
# RUN: FileCheck %s
# CHECK: {{.*}} bl {{.*}} <func1>
+# CHECK: {{.*}} bl {{.*}} <func2>
.text
.align 4
+ .global func1
+ .type func1, %function
+func1:
+ ret
+ .size func1, .-func1
.global _start
.type _start, %function
_start:
bl func1
+ bl func2
mov w8, #93
svc #0
.size _start, .-_start
-
- .global func1
- .type func1, %function
-func1:
+ .global func2
+ .type func2, %function
+func2:
ret
- .size func1, .-func1
+ .size func2, .-func2
Index: bolt/lib/Core/Relocation.cpp
===================================================================
--- bolt/lib/Core/Relocation.cpp
+++ bolt/lib/Core/Relocation.cpp
@@ -352,7 +352,7 @@
assert(isInt<28>(Value) && "only PC +/- 128MB is allowed for direct call");
// Immediate goes in bits 25:0 of BL.
// OP 1001_01 goes in bits 31:26 of BL.
- Value = (Value >> 2) | 0x94000000ULL;
+ Value = ((Value >> 2) & 0x3ffffff) | 0x94000000ULL;
break;
}
return Value;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D159513.556772.patch
Type: text/x-patch
Size: 1506 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230914/2ddbde9f/attachment.bin>
More information about the llvm-commits
mailing list