<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/57331>57331</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missing Guard EH Continuation Table when linking with lld-link
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
alvinhochun
</td>
</tr>
</table>
<pre>
With this source code:
```c++
#include <cstdio>
struct my_exception_t {
int code;
};
__attribute__((noinline))
void do_test(bool should_throw) {
printf("Starting test, should_throw = %d\n", should_throw);
try {
if (should_throw) {
throw my_exception_t { 1234 };
}
puts("Exception not thrown.");
} catch (my_exception_t ex) {
printf("Caught exception with value %d.\n", ex.code);
}
}
int main(int argc, char *argv[]) {
if (argc > 1) {
do_test(true);
} else {
do_test(false);
}
return 0;
}
```
When linked with `link.exe`, the output contains a Guard EH Continuation Table:
```
C:\>clang++ ehcont_guard_msvc.cpp -o ehcont_guard_msvc.exe -target x86_64-pc-windows-msvc -Xclang -ehcontguard -O -Wl,-guard:cf,-guard:ehcont
C:\>llvm-readobj --coff-load-config ehcont_guard_msvc.exe
...
LoadConfig [
...
GuardEHContinuationTable: 0x1400152F0
GuardEHContinuationCount: 14
]
GuardFidTable [
...
]
GuardEHContTable [
0x140001035
...
]
```
But when linked with LLD, the Guard EH Continuation Table is missing:
```
C:\>clang++ ehcont_guard_msvc.cpp -o ehcont_guard_msvc.exe -target x86_64-pc-windows-msvc -Xclang -ehcontguard -O -Wl,-guard:ehcont -fuse-ld=lld
C:\>llvm-readobj --coff-load-config ehcont_guard_msvc.exe
...
LoadConfig [
...
GuardEHContinuationTable: 0x0
GuardEHContinuationCount: 0
]
GuardFidTable [
...
]
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzVVc-PqzYQ_mvgMgKBCQk5cHibH32HrXpope0NGeOAXx07AjvJ_vcd4-RtyGajqqc2sgj2fDPzzfgzrnXzXr4J04HpxACDtj3jwHTDg-xbkKyD5PqcJ36wgLy44VdJJhSTtuEQZCs2mEboINvcOg6mt8zA_r3iZ8YPRmhVGQgWlwiAP6HMJeU17GL98T4-q4oa04vaGl5VASlwKC2UFIoHZOnGCDtq0UCjK8MHg5BaawlDp61sKtP1-oTAaepDj8l3Y0Dyu6G9EaoF772aeGJ9awhI3gT5SiH43u4oZDeBTf8-zTQWusMQxVNC159P-rlrkJJsBrcNunq4tcnCwZrBV7a5xgCljQ-t4rGIKWkMAYwa1jmad7n5-SHX2wauqG07h7xmOzlhHam0fGxdfNM7fo7HLf_M4EMCN_vvJLKnAr0L90r7lrkorKM9hv6G82OQvwT5-hNJ33PngFu4gfRhFR-SQbU-IgVcDvyZ344i4Mtq3KTnxvYKkonKp2frtuK3jitAff_FG99HtLtpzM_cQbF603HQ1uA-4_FRBtszAIVfLO0b2HyHFa4JZem4FX_QWn55pv105cw5PjdMUtX6cw68c7Gr1kWt9sORxexwgEg_MCAziPAQtdzAuZhX81l0YNFJqEafhshBIPpzjA2R9x6dAaLfIHqTWFI0LiAPtrudefA9SymP-6jntNH1D4gipne7SGra4JvaifYxQR8kjmP_8or4lYc7_UyN4Hu5-X7byWsjITmnsyRJc7JNnsBX2iJzhKezS9Pzy66P4K1oxoAPsk-BPuodFi4kkjTJ8q_cH6rrBTVzulfY6-v6KqsnIgK8J_ZiGPBL-f_RkzdDtLMDjySurCU-_2uC-kdCSv6tjn5uT8jLdD5PM7IoZkXYlFmzzJY0NMJIXv7qt_apAn4qxwFH6WA3I7cQ2l6WnTGHwXWVbHG0aLc1fu33OHEtvvxFh17_4Aw_nltMaTneVdt8kWVp2JWMZIzyWZ6n2ZynNE_TpM7nGW_y-WJZLJNQ0hq_yKWrlhDFTzCGcHdLvg5FSRJCkoLMkkW-IEWc8DpbFGk-p0tWNzUJZgnH20TGjkes-zbsy5FSbdsBjVIMZvgwUuxIqzgv_RUTUms63ZdUHoXqNOusCsf05Uj_b5_EvYk">