<div dir="ltr">Hi Jb,<div><br></div><div>It's good to see someone step up and take a shot as this again. I dropped this because it seems to me it wasn't a high priority task for LLVM/Clang.</div><div><br></div><div>
Implementing SEH is more of LLVM work than Clang work.</div><div><br></div><div>For 32-bit SEH, there are prologue/epilogue instruction sequence to emit, setting try-level ([ebp-4]), recovering EBP ([ebp-18h]), and all these can only happen in LLVM, not Clang. In my opinion, we should implement these as LLVM intrinsics, like the gcc ones: see <a href="http://llvm.org/docs/ExceptionHandling.html#exception-handling-intrinsics">http://llvm.org/docs/ExceptionHandling.html#exception-handling-intrinsics</a>. Also, we should emit the tables for each function, which is not a simple task either.</div>
<div><br></div><div>For 64-bit SEH, things are simpler. There are no more instructions to emit than no-SEH code. We have only two tasks: emit the table for each function, and place some code right. If I remember it correctly, __finally block code should be replicated at 2 places: one in the original function as part of the normal execution path, and other one separately if anything in __try block goes south.</div>
<div>As for the table part, I've seen some commits from Kai(as CC'ed in this email) doing it, you should ask him for details.</div><div><br></div><div>Thanks again.<br clear="all"><div><br></div>-- <br>Best Regards, Tong Shen (沈彤)
</div></div>