<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64585>64585</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Win64] EHcont just doesn't seem work with SEH
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
namazso
</td>
</tr>
</table>
<pre>
Reproducer:
```
#include <cstdio>
[[gnu::noinline]] void exception() {
*(char*)1 = 0;
}
__asm__(R"(
.text
.balign 16
.globl test_seh
.def test_seh; .scl 2; .type 32; .endef
.seh_proc test_seh
test_seh:
.seh_handler __C_specific_handler, @except
.seh_handlerdata
.long 1
.long (seh_begin)@IMGREL
.long (seh_end)@IMGREL
.long 1
.long (seh_except)@IMGREL
.text
seh_begin:
nop
int3
nop
seh_end:
seh_except:
ret
.seh_endproc
.section .gehcont$y,"dr"
.symidx seh_except
)");
extern "C" void test_seh();
int main() {
test_seh();
printf("Test from assembly worked!\n");
__try {
exception();
} __except(1) {
}
printf("Test from C worked!\n");
return 0;
}
```
Output (link.exe is used for linking due to [lld bug with EHcont](https://github.com/llvm/llvm-project/issues/64570)):
```
> clang-cl --version
clang version 16.0.6
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin
> clang-cl /guard:ehcont -fuse-ld=link test.cpp /link /guard:cf,ehcont
>.\test.exe
Test from assembly worked!
> echo %ERRORLEVEL%
-1073740791
```
I'll investigate a bit more to find out where the issue could be, as this functionality is supposedly tested by https://github.com/llvm/llvm-project/blob/345acac85d382998e5721073cc077e47e799311f/llvm/test/CodeGen/X86/ehcontguard.ll
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVt2O27gOfhrlhohhy5Z_LnLRyU9bYIoezCl6zl0gW4ytVpYMSZ5J9ukXcpxJMjvtYrFB4NAUP5KiPjLizslWI64IeyBss-Cj74xdad7zP5xZ1EacVk84WCPGBi1JP5B4Q-LLM4_n7_mVplI3ahQIJF03zgtpSLq9Q4QoD60eg6f0gzZSK6mRsA1hG3g2UgAeGxy8NJrQktAKSPFwxgIAEPqB0LLpuJ2kKgGSbiAm6WxDis1tuP2eu36_J7R8IpQGh5M68nj0s1hzJVsNST6_t8rUCjw6v3fYzUqBh6sqfYDINQroJPnTgJCeZdQCDzPEYbcfrGneuLp6mVOEybLjWii0sN-v927ARh5kc1ESugaSxee6XEpxixLc81e9MrqF5P6V0DKY19hKTWhFsvjzl49P28d3rVCLX9tcHN8jzpm9B7oW-prA685Bm-EiSu3TWX7VXrK5AG5iXX1Y9DcVRy1C0W85EDlsAp0garFrjPaEZidC14RSYQMrZqtTL8URbmLMnK4m5lRXik1PPHq0GgidHJ2Z-3q2E3HfAKT20HP5Lqt_AQxLg5XaH6YF-g2dh4M1PXDnsK_VCV6M_YmC0ISwtX6TaIDv996e7oOFz5seu4OQYgP71zMtk7_24KXHfp3f-veJWfSj1e-27ZuJMj2_jn4YfWCbkvpnhEcE6WB0KOBgLASl1C2IEcEbIOxBKQH12MKL9B1sP02HzjaElp33gwvkoTtCd6303VhHjekJ3Sn1fPlZDtb8wMYTupPOjegI3eUZK-KJDNXfDMF0C43iul02CpbLZ7Qu1Hlam_QwqyDJoziax843blsMtIZjme_zbDk0yxephXlxy949z4T-1lnkAnojUAXbwTh5PC991s5zpVBsZJjSsA5ZsvV_rGkt72EnFTrC1o-P378Qtq6lvtvCbc6hMCO3oe3O_QLLw-hwqQRJN6HWE12jZhiC6aS4gTQHQtdzn91HiAhbT0g84ryd3_H5TXrYdAYIZdunp69Pj9vv20dC2Xl5mcRFWmRxUSW_IdFnQgulQOpndF623CNwqKWH3tiJNwepBZjRw0uHQdMFlrkRoTFj4BOGOcwd-E46OIx6GipcSX8KbHTjMBiHQp2m8qCA-gT_mG61MjWhuzRjvOFNyURa0qoqkRU0bLJp4qLArMCiqtIkOVz9hJiE7tZG4EfUhO7-X-aE7s4HMZ1NpNRCrFJRpRVf4CrJqyRnZcbYolvFrK5KWsc0YQkVLD0kvEl4VuSc5hljuJArGtM0LpM4ruIiZVHFKMO6Sqs844emKML_U8-likI-kbHtYqrdKs9YyRaK16jc5YphV9Ou67F1JIuVdN5dYV56NV1G_id1noVLwbl_4cfoPAiDThNaeHCI_cSWc5P_d_tpMVq1-lcNXrI_AwAA__9cpKWf">