[PATCH] D151276: Weaken MFI Max Call Frame Size Assertion
Oskar Wirga via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue May 23 18:27:41 PDT 2023
oskarwirga created this revision.
oskarwirga added a reviewer: MatzeB.
Herald added subscribers: hiraditya, kristof.beyls.
Herald added a project: All.
oskarwirga requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
A year ago when I was not invested at all into compilers, I found an assertion error when building an AArch64 debug build with LTO + CFI, among other combinations.
It was posted as a github issue here: https://github.com/llvm/llvm-project/issues/54088
I took it upon myself to revisit the issue now that I have spent some more time working on LLVM.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D151276
Files:
llvm/lib/CodeGen/PrologEpilogInserter.cpp
llvm/test/CodeGen/AArch64/compute-call-frame-size-unreachable-pass.ll
Index: llvm/test/CodeGen/AArch64/compute-call-frame-size-unreachable-pass.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/AArch64/compute-call-frame-size-unreachable-pass.ll
@@ -0,0 +1,29 @@
+; RUN: llc < %s
+
+; This tests that the unreachableblockelim pass computes the size
+; of the call frame before exiting
+
+target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
+target triple = "aarch64-none-linux-android21"
+
+%struct.ngtcp2_crypto_aead = type { i8*, i64 }
+%struct.ngtcp2_crypto_aead_ctx = type { i8* }
+
+; Function Attrs: noinline optnone
+define internal fastcc void @decrypt_pkt() unnamed_addr #0 !type !0 !type !1 {
+entry:
+ br i1 false, label %cont, label %trap, !nosanitize !2
+
+trap: ; preds = %entry
+ unreachable, !nosanitize !2
+
+cont: ; preds = %entry
+ %call = call i32 undef(i8* undef, %struct.ngtcp2_crypto_aead* undef, %struct.ngtcp2_crypto_aead_ctx* undef, i8* undef, i64 undef, i8* undef, i64 undef, i8* undef, i64 undef)
+ ret void
+}
+
+attributes #0 = { noinline optnone }
+
+!0 = !{i64 0, !"_ZTSFlPhPK18ngtcp2_crypto_aeadPKhmS4_mlP16ngtcp2_crypto_kmPFiS_S2_PK22ngtcp2_crypto_aead_ctxS4_mS4_mS4_mEE"}
+!1 = !{i64 0, !"_ZTSFlPvPKvS1_mS1_mlS_S_E.generalized"}
+!2 = !{}
Index: llvm/lib/CodeGen/PrologEpilogInserter.cpp
===================================================================
--- llvm/lib/CodeGen/PrologEpilogInserter.cpp
+++ llvm/lib/CodeGen/PrologEpilogInserter.cpp
@@ -376,7 +376,7 @@
}
assert(!MFI.isMaxCallFrameSizeComputed() ||
- (MFI.getMaxCallFrameSize() == MaxCallFrameSize &&
+ (MFI.getMaxCallFrameSize() >= MaxCallFrameSize &&
MFI.adjustsStack() == AdjustsStack));
MFI.setAdjustsStack(AdjustsStack);
MFI.setMaxCallFrameSize(MaxCallFrameSize);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D151276.524966.patch
Type: text/x-patch
Size: 1915 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230524/d27142b0/attachment.bin>
More information about the llvm-commits
mailing list