[llvm-branch-commits] [BOLT] Allow builtin_unreachable to be at MaxSize address (PR #111771)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Oct 9 16:55:43 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-bolt
Author: Amir Ayupov (aaupov)
<details>
<summary>Changes</summary>
Lift the restriction that builtin_unreachable has to be strictly within
`MaxSize` of a function.
Test Plan: added builtin_unreachable.s
---
Full diff: https://github.com/llvm/llvm-project/pull/111771.diff
2 Files Affected:
- (modified) bolt/lib/Core/BinaryFunction.cpp (+3-2)
- (added) bolt/test/X86/builtin_unreachable.s (+33)
``````````diff
diff --git a/bolt/lib/Core/BinaryFunction.cpp b/bolt/lib/Core/BinaryFunction.cpp
index 27c8ccefedee10..8b1f441a3a01da 100644
--- a/bolt/lib/Core/BinaryFunction.cpp
+++ b/bolt/lib/Core/BinaryFunction.cpp
@@ -1365,8 +1365,9 @@ Error BinaryFunction::disassemble() {
if (containsAddress(TargetAddress)) {
TargetSymbol = getOrCreateLocalLabel(TargetAddress);
} else {
- if (TargetAddress == getAddress() + getSize() &&
- TargetAddress < getAddress() + getMaxSize() &&
+ if (BC.isELF() && !BC.getBinaryDataAtAddress(TargetAddress) &&
+ TargetAddress == getAddress() + getSize() &&
+ TargetAddress <= getAddress() + getMaxSize() &&
!(BC.isAArch64() &&
BC.handleAArch64Veneer(TargetAddress, /*MatchOnly*/ true))) {
// Result of __builtin_unreachable().
diff --git a/bolt/test/X86/builtin_unreachable.s b/bolt/test/X86/builtin_unreachable.s
new file mode 100644
index 00000000000000..ab533629d1a846
--- /dev/null
+++ b/bolt/test/X86/builtin_unreachable.s
@@ -0,0 +1,33 @@
+## Check that BOLT properly identifies a jump to builtin_unreachable
+
+# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s -o %t.o
+# RUN: ld.lld -q -o %t %t.o
+# RUN: llvm-bolt %t -o %t.null -lite=0 -print-disasm | FileCheck %s
+# CHECK: callq bar
+# CHECK-NEXT: nop
+
+.text
+.globl main
+.type main, @function
+main:
+ call foo
+ .size main, .-main
+
+.section .mytext.bar, "ax"
+.globl bar
+.type bar, @function
+bar:
+ ud2
+ .size bar, .-bar
+
+.section .mytext.foo, "ax"
+.globl foo
+.type foo, @function
+foo:
+.cfi_startproc
+ callq bar
+ jmp .Lunreachable
+ ret
+ .cfi_endproc
+ .size foo, .-foo
+.Lunreachable:
``````````
</details>
https://github.com/llvm/llvm-project/pull/111771
More information about the llvm-branch-commits
mailing list