emscripten_scan_registers and emscripten_scan_stack (#9121) These functions can help conservative GCs. emscripten_scan_stack provides an easy way to find where the C stack is in memory. emscripten_scan_registers allows scanning "registers" - things *not* in memory. In wasm that means local vars, including in functions higher up the stack. This uses Asyncify in order to be able to spill all the local state and unwind the stack, at which point it is possible to scan the data, then we rewind and resume. This does incur Asyncify's overhead, so unlike emscripten_scan_stack it has a downside.
Emscripten is an LLVM-to-JavaScript compiler. It takes LLVM bitcode - which can be generated from C/C++, using llvm-gcc (DragonEgg) or clang, or any other language that can be converted into LLVM - and compiles that into JavaScript, which can be run on the web (or anywhere else JavaScript can run).
Links to demos, tutorial, FAQ, etc: https://github.com/emscripten-core/emscripten/wiki
Main project page: http://emscripten.org
Emscripten is available under 2 licenses, the MIT license and the University of Illinois/NCSA Open Source License.
Both are permissive open source licenses, with little if any practical difference between them.
The reason for offering both is that (1) the MIT license is well-known, while (2) the University of Illinois/NCSA Open Source License allows Emscripten's code to be integrated upstream into LLVM, which uses that license, should the opportunity arise.
See LICENSE for the full content of the licenses.