[clang] [llvm] [WebAssembly] Implement an alternative translation for -wasm-enable-sjlj (PR #84137)
Heejin Ahn via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 15 17:33:56 PDT 2024
================
@@ -129,27 +129,21 @@
///
/// If there are calls to setjmp()
///
-/// 2) In the function entry that calls setjmp, initialize setjmpTable and
-/// sejmpTableSize as follows:
-/// setjmpTableSize = 4;
-/// setjmpTable = (int *) malloc(40);
-/// setjmpTable[0] = 0;
-/// setjmpTable and setjmpTableSize are used to call saveSetjmp() function in
-/// Emscripten compiler-rt.
+/// 2) In the function entry that calls setjmp, initialize
+/// functionInvocationId as follows:
+///
+/// functionInvocationId = alloca(4)
+///
+/// Note: the alloca size is not important as this pointer is
+/// merely used for pointer comparisions.
///
/// 3) Lower
/// setjmp(env)
/// into
-/// setjmpTable = saveSetjmp(env, label, setjmpTable, setjmpTableSize);
-/// setjmpTableSize = getTempRet0();
-/// For each dynamic setjmp call, setjmpTable stores its ID (a number which
-/// is incrementally assigned from 0) and its label (a unique number that
-/// represents each callsite of setjmp). When we need more entries in
-/// setjmpTable, it is reallocated in saveSetjmp() in Emscripten's
-/// compiler-rt and it will return the new table address, and assign the new
-/// table size in setTempRet0(). saveSetjmp also stores the setjmp's ID into
-/// the buffer 'env'. A BB with setjmp is split into two after setjmp call in
-/// order to make the post-setjmp BB the possible destination of longjmp BB.
+/// __wasm_setjmp(env, label, functionInvocationId)
+///
+/// A BB with setjmp is split into two after setjmp call in order to
+/// make the post-setjmp BB the possible destination of longjmp BB.
----------------
aheejin wrote:
I think it's helpful to mention what `__wasm_setjmp` does: It saves `functionInvocationId` and `label` into `env`.
https://github.com/llvm/llvm-project/pull/84137
More information about the cfe-commits
mailing list