[llvm] [AArch64] Fix the size passed to __trampoline_setup (PR #118234)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Dec 1 15:11:28 PST 2024
https://github.com/ssijaric-nv created https://github.com/llvm/llvm-project/pull/118234
The trampoline size is 36 bytes on AArch64. The runtime function __trampoline_setup
aborts as it expects the trampoline size of at least 36 bytes, and the size passed
is 20 bytes. Fix the inconsistency in AArch64TargetLowering::LowerINIT_TRAMPOLINE.
>From 557cd59f0a2fdb02cd256ff8139bbe03c0d5341a Mon Sep 17 00:00:00 2001
From: Sanjin Sijaric <ssijaric at nvidia.com>
Date: Sun, 1 Dec 2024 14:25:13 -0800
Subject: [PATCH] [AArch64] Fix the size passed to __trampoline_setup
The trampoline size is 36 bytes on AArch64. The runtime function __trampoline_setup
aborts as it expects the trampoline size of at least 36 bytes, and the size passed
is 20 bytes. Fix the inconsistency in AArch64TargetLowering::LowerINIT_TRAMPOLINE.
---
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | 11 +++++++++--
llvm/test/CodeGen/AArch64/trampoline.ll | 1 +
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index e1be825fcf7bf3..418cef075ba65f 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -7148,9 +7148,16 @@ SDValue AArch64TargetLowering::LowerINIT_TRAMPOLINE(SDValue Op,
Entry.Ty = IntPtrTy;
Entry.Node = Trmp;
Args.push_back(Entry);
- Entry.Node = DAG.getConstant(20, dl, MVT::i64);
- Args.push_back(Entry);
+ if (auto *FI = dyn_cast<FrameIndexSDNode>(Trmp.getNode())) {
+ MachineFunction &MF = DAG.getMachineFunction();
+ MachineFrameInfo &MFI = MF.getFrameInfo();
+ Entry.Node =
+ DAG.getConstant(MFI.getObjectSize(FI->getIndex()), dl, MVT::i64);
+ } else
+ Entry.Node = DAG.getConstant(36, dl, MVT::i64);
+
+ Args.push_back(Entry);
Entry.Node = FPtr;
Args.push_back(Entry);
Entry.Node = Nest;
diff --git a/llvm/test/CodeGen/AArch64/trampoline.ll b/llvm/test/CodeGen/AArch64/trampoline.ll
index 293e538a7459d4..217cda1a4ce1ca 100644
--- a/llvm/test/CodeGen/AArch64/trampoline.ll
+++ b/llvm/test/CodeGen/AArch64/trampoline.ll
@@ -12,6 +12,7 @@ define i64 @main() {
%val = alloca i64
%nval = bitcast ptr %val to ptr
%tramp = alloca [36 x i8], align 8
+ ; CHECK: mov w1, #36
; CHECK: bl __trampoline_setup
call void @llvm.init.trampoline(ptr %tramp, ptr @f, ptr %nval)
%fp = call ptr @llvm.adjust.trampoline(ptr %tramp)
More information about the llvm-commits
mailing list