[llvm] [MC] Support specifying unwind handler in Masm proc directive (PR #181152)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 19 11:46:22 PST 2026
https://github.com/Qwinci updated https://github.com/llvm/llvm-project/pull/181152
>From c266bde9f5c8965282cf33db838a3dcaf516844e Mon Sep 17 00:00:00 2001
From: Qwinci <qwinci222 at gmail.com>
Date: Thu, 12 Feb 2026 16:17:45 +0200
Subject: [PATCH] [MC] Support specifying unwind handler in Masm proc directive
---
llvm/lib/MC/MCParser/COFFMasmParser.cpp | 7 +++++
.../tools/llvm-ml/proc_frame_ehandler.asm | 30 +++++++++++++++++++
2 files changed, 37 insertions(+)
create mode 100644 llvm/test/tools/llvm-ml/proc_frame_ehandler.asm
diff --git a/llvm/lib/MC/MCParser/COFFMasmParser.cpp b/llvm/lib/MC/MCParser/COFFMasmParser.cpp
index db796a3ad2ed8..bc8d783a78921 100644
--- a/llvm/lib/MC/MCParser/COFFMasmParser.cpp
+++ b/llvm/lib/MC/MCParser/COFFMasmParser.cpp
@@ -472,6 +472,13 @@ bool COFFMasmParser::parseDirectiveProc(StringRef Directive, SMLoc Loc) {
Framed = true;
getStreamer().emitWinCFIStartProc(Sym, Loc);
}
+ if (Framed && getLexer().is(AsmToken::Colon)) {
+ Lex();
+ MCSymbol *HandlerSym;
+ if (getParser().parseSymbol(HandlerSym))
+ return Error(Loc, "expected identifier for unwind handler");
+ getStreamer().emitWinEHHandler(HandlerSym, true, true, Loc);
+ }
getStreamer().emitLabel(Sym, Loc);
CurrentProcedures.push_back(Sym->getName());
diff --git a/llvm/test/tools/llvm-ml/proc_frame_ehandler.asm b/llvm/test/tools/llvm-ml/proc_frame_ehandler.asm
new file mode 100644
index 0000000000000..1f45fb6a95e8c
--- /dev/null
+++ b/llvm/test/tools/llvm-ml/proc_frame_ehandler.asm
@@ -0,0 +1,30 @@
+; RUN: llvm-ml64 -filetype=s %s /Fo - | FileCheck %s
+
+.code
+
+t1 PROC FRAME: ehandler
+ push rbp
+ .pushreg rbp
+ mov rbp, rsp
+ .setframe rbp, 0
+ pushfq
+ .allocstack 8
+ .endprolog
+ ret
+t1 ENDP
+
+; CHECK: .seh_proc t1
+; CHECK: .seh_handler ehandler, @unwind, @except
+
+; CHECK: t1:
+; CHECK: push rbp
+; CHECK: .seh_pushreg rbp
+; CHECK: mov rbp, rsp
+; CHECK: .seh_setframe rbp, 0
+; CHECK: pushfq
+; CHECK: .seh_stackalloc 8
+; CHECK: .seh_endprologue
+; CHECK: ret
+; CHECK: .seh_endproc
+
+END
More information about the llvm-commits
mailing list