[PATCH] asm: Use SEH assembly when building with clang in MSVC mode

Martin Storsjo martin at martin.st
Fri Dec 18 16:37:12 CST 2020


In MSVC mode, the __SEH__ macro isn't defined, but the .seh directives
are supported in assembly. In these cases, we have to hardcode which
architectures we know clang supports SEH directives in as it's not
exposed otherwise.

Signed-off-by: Martin Storsjo <martin at martin.st>

---
This is admittedly rather ugly, but fixes a few unwinding cases with
a wine in PE mode, built with clang in MSVC mode.
---
 include/wine/asm.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/wine/asm.h b/include/wine/asm.h
index ed44a7dd6dd..236b35cf8fe 100644
--- a/include/wine/asm.h
+++ b/include/wine/asm.h
@@ -41,7 +41,7 @@
 # define __ASM_CFI(str)
 #endif
 
-#ifdef __SEH__
+#if defined(__SEH__) || (defined(_MSC_VER) && defined(__clang__) && (defined(__x86_64__) || defined(__aarch64__)))
 # if defined(__aarch64__) && defined(__clang_major__) && (__clang_major__ < 12 || defined(__apple_build_version__))
    /* Clang got support for aarch64 SEH assembly directives in Clang 12,
     * before that, only .seh_startproc/.seh_endproc but nothing else was
-- 
2.17.1




More information about the wine-devel mailing list