mirror of https://github.com/WebAssembly/wasi-sdk
LLVM 19 + setjmp/longjmp doc (#480)
* llvmorg-19.1.0-rc3 * document setjmp/longjmp support * README.md: mention SetjmpLongjmp.md * bump wasi-libc For following changes: * https://github.com/WebAssembly/wasi-libc/pull/526 * https://github.com/WebAssembly/wasi-libc/pull/529 * bump llvm to llvmorg-19.1.0-rc4 * bump llvm to llvmorg-19.1.0pull/491/head
parent
adbbf2c07f
commit
54545d51b3
@ -0,0 +1,75 @@
|
||||
# C setjmp/longjmp support
|
||||
|
||||
## Build an application
|
||||
|
||||
To build an application using setjmp/longjmp, you need two things:
|
||||
|
||||
* Enable the necessary LLVM translation (`-mllvm -wasm-enable-sjlj`)
|
||||
|
||||
* Link the setjmp library (`-lsetjmp`)
|
||||
|
||||
### Example without LTO
|
||||
|
||||
```shell
|
||||
clang -Os -mllvm -wasm-enable-sjlj -o your_app.wasm your_app.c -lsetjmp
|
||||
```
|
||||
|
||||
### Example with LTO
|
||||
|
||||
```shell
|
||||
clang -Os -flto=full -mllvm -wasm-enable-sjlj -Wl,-mllvm,-wasm-enable-sjlj -o your_app.wasm your_app.c -lsetjmp
|
||||
```
|
||||
|
||||
## Run an application
|
||||
|
||||
To run the application built as in the previous section,
|
||||
you need to use a runtime with [exception handling proposal] support.
|
||||
|
||||
Unfortunately, there are two incompatible versions of
|
||||
[exception handling proposal], which is commonly implemented by runtimes.
|
||||
|
||||
* The latest version with `exnref`
|
||||
|
||||
* The [phase3] version
|
||||
|
||||
### Example with the latest exception handling proposal
|
||||
|
||||
Because the current version of WASI-SDK produces an old version
|
||||
of [exception handling proposal] instructions, if your runtime
|
||||
implements the latest version of the proposal, you need to convert
|
||||
your module to the latest version.
|
||||
|
||||
[toywasm] is an example of such runtimes.
|
||||
|
||||
You can use binaryen `wasm-opt` command for the conversion.
|
||||
|
||||
```shell
|
||||
wasm-opt --translate-to-exnref -all -o your_app.exnref.wasm your_app.wasm
|
||||
```
|
||||
|
||||
Then you can run it with a runtime supporting the latest version of
|
||||
[exception handling proposal].
|
||||
|
||||
```shell
|
||||
toywasm --wasi your_app.exnref.wasm
|
||||
```
|
||||
(You may need to enable the support with `-D TOYWASM_ENABLE_WASM_EXCEPTION_HANDLING=ON`.)
|
||||
|
||||
### Example with the phase3 exception handling proposal (a bit older version)
|
||||
|
||||
If your runtime supports the [phase3] version of
|
||||
[exception handling proposal], which is the same version as what WASI-SDK
|
||||
currently produces, you can run the produced module as it is.
|
||||
|
||||
For example, the classic interpreter of [wasm-micro-runtime] is
|
||||
one of such runtimes.
|
||||
|
||||
```shell
|
||||
iwasm your_app.wasm
|
||||
```
|
||||
(You may need to enable the support with `-D WAMR_BUILD_EXCE_HANDLING=1 -D WAMR_BUILD_FAST_INTERP=0`.)
|
||||
|
||||
[exception handling proposal]: https://github.com/WebAssembly/exception-handling/
|
||||
[phase3]: https://github.com/WebAssembly/exception-handling/tree/main/proposals/exception-handling/legacy
|
||||
[toywasm]: https://github.com/yamt/toywasm
|
||||
[wasm-micro-runtime]: https://github.com/bytecodealliance/wasm-micro-runtime
|
@ -1 +1 @@
|
||||
Subproject commit 26a1d6601d727a96f4301d0d8647b5a42760ae0c
|
||||
Subproject commit a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4
|
@ -1 +1 @@
|
||||
Subproject commit b9ef79d7dbd47c6c5bafdae760823467c2f60b70
|
||||
Subproject commit 1b19fc65ad84b223876c50dd4fcd7d5a08c311dc
|
Loading…
Reference in new issue