carlokok opened Issue #2049:
<!-- Please try to describe precisely what you would like to do in
Cranelift/Wasmtime and/or expect from it. You can answer the questions below if
they're relevant and delete this text before submitting. Thanks for opening an
issue! -->Feature
Cranelift currently doesn't support SEH (but has some support for finally I think). This is a feature request to support properly exception (landingpads on Posix, SEH on windows, maybe SLJL for others)
Benefit
WASM has plans to support exceptions, at which point it's going to be needed. Win64 has partial SEH support (iirc it just emits what's needed, nothing more), this would allow for c++ /java/.net exception support.
Implementation
Tricky one. I know LLVM has two alternative ways of doing this. I think with that in mind it should be possible to do a single implementation. What's basically needed is a way to say:
from here
[code]till here is a protected block, on exceptions go to X, for finalization go to Y. For the handler itself it should be possible to define the personality to call.
Throw, Rethrow etc can all probably be done on a library level.
Alternatives
The only alternative is to not do it.
bjorn3 commented on Issue #2049:
Duplicate of https://github.com/bytecodealliance/wasmtime/issues/1677
carlokok commented on Issue #2049:
I agree it's related, but unwind and catch are slightly distinct actions and your issue doesn't cover that?
bjorn3 commented on Issue #2049:
Catch is implemented by returning
_URC_HANDLER_FOUND
instead of_URC_INSTALL_CONTEXT
from the personality function and then jumping from the landing pad to the block handling the catch instead of calling_Unwind_Resume
like for cleanup.
bjorn3 commented on Issue #2049:
Given the above comments I think this can be closed as duplicate.
carlokok commented on Issue #2049:
I missed your reply last year but does that cover windows at all? Windows doesn't use personalities? At least not like that?
bjorn3 commented on Issue #2049:
SEH seems to use exception handlers and termination handlers. I think catching an exception instead of doing cleanup is done by using an exception handler instead of termination handler. This is based on a cursory reading of the docs though, so I may be wrong. In any case both catching exceptions and cleanup needs the same codegen handling to support an alternative location to which a call can "return".
Last updated: Dec 23 2024 at 12:05 UTC