[llvm-branch-commits] [llvm] release/20.x: [MC, COFF] .safeseh: avoid changeSection (#132624) (PR #133591)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sat Mar 29 10:32:52 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mc
Author: None (llvmbot)
<details>
<summary>Changes</summary>
Backport ece72e2731350d9840c6446db9276b04d593cc23
Requested by: @<!-- -->MaskRay
---
Full diff: https://github.com/llvm/llvm-project/pull/133591.diff
2 Files Affected:
- (modified) llvm/lib/MC/MCWinCOFFStreamer.cpp (+3-1)
- (modified) llvm/test/CodeGen/X86/win32-eh.ll (+9)
``````````diff
diff --git a/llvm/lib/MC/MCWinCOFFStreamer.cpp b/llvm/lib/MC/MCWinCOFFStreamer.cpp
index 8fd46bc8b0255..3720d6e26fe46 100644
--- a/llvm/lib/MC/MCWinCOFFStreamer.cpp
+++ b/llvm/lib/MC/MCWinCOFFStreamer.cpp
@@ -299,7 +299,8 @@ void MCWinCOFFStreamer::emitCOFFSafeSEH(MCSymbol const *Symbol) {
return;
MCSection *SXData = getContext().getObjectFileInfo()->getSXDataSection();
- changeSection(SXData);
+ pushSection();
+ switchSection(SXData);
SXData->ensureMinAlignment(Align(4));
insert(getContext().allocFragment<MCSymbolIdFragment>(Symbol));
@@ -310,6 +311,7 @@ void MCWinCOFFStreamer::emitCOFFSafeSEH(MCSymbol const *Symbol) {
// function. Go ahead and oblige it here.
CSymbol->setType(COFF::IMAGE_SYM_DTYPE_FUNCTION
<< COFF::SCT_COMPLEX_TYPE_SHIFT);
+ popSection();
}
void MCWinCOFFStreamer::emitCOFFSymbolIndex(MCSymbol const *Symbol) {
diff --git a/llvm/test/CodeGen/X86/win32-eh.ll b/llvm/test/CodeGen/X86/win32-eh.ll
index 82dc4beaf972b..d3d19ede546d6 100644
--- a/llvm/test/CodeGen/X86/win32-eh.ll
+++ b/llvm/test/CodeGen/X86/win32-eh.ll
@@ -1,4 +1,5 @@
; RUN: llc -mtriple=i686-pc-windows-msvc < %s | FileCheck %s
+; RUN: llc -mtriple=i686-pc-windows-msvc -filetype=obj < %s -o %t
declare void @may_throw_or_crash()
declare i32 @_except_handler3(...)
@@ -208,6 +209,14 @@ catch:
; CHECK-NEXT: .long 0
; CHECK-NEXT: .long 1
+; CHECK-LABEL: inlineasm:
+; CHECK: .safeseh my_handler
+define i32 @inlineasm() {
+entry:
+ call void asm sideeffect ".safeseh my_handler", "~{dirflag},~{fpsr},~{flags}"()
+ ret i32 0
+}
+
; CHECK-LABEL: ___ehhandler$use_CxxFrameHandler3:
; CHECK: movl $L__ehtable$use_CxxFrameHandler3, %eax
; CHECK-NEXT: jmp ___CxxFrameHandler3 # TAILCALL
``````````
</details>
https://github.com/llvm/llvm-project/pull/133591
More information about the llvm-branch-commits
mailing list