OK, so I found the cause for this issue. Seems like things get astray
inside jsifier.js when using the LIBRARY_DEBUG=1 flag in parallel to
USE_PTHREADS=1. Both flags cause pattern-matching inside the generated
Javascript code, replacing it with other stuff. This is...ahem...an
interesting choice for a compiler backend. ;-) Anyway, both features
effectively patch up the generated Javascript, conflicting with one another.
Removing the LIBRARY_DEBUG=1 flag seemingly fixes the problem.
Soeren
On Wednesday, March 13, 2019 at 2:23:03 PM UTC+10, Soeren Balko wrote:
>
> We have noted a regression pertaining to threads support, which has
> occurred somewhere between 1.28.16 and 1.38.29 (still bisecting). For
> standard library functions that must be dispatched to the main thread such
> as getenv(...), Emscripten used to generate code like this:
>
> function _getenv(name) {
> if (ENVIRONMENT_IS_PTHREAD) return
> _emscripten_sync_run_in_browser_thread_ii(1, name);
> // char *getenv(const char *name);
> //
> http://pubs.opengroup.org/onlinepubs/009695399/functions/getenv.html
> if (name === 0) return 0;
> name = Pointer_stringify(name);
> if (!ENV.hasOwnProperty(name)) return 0;
>
> if (_getenv.ret) _free(_getenv.ret);
> _getenv.ret = allocateUTF8(ENV[name]);
> return _getenv.ret;
> }
>
>
> This has now changed into something like that:
>
> function _getenv(name) { var ret = (function() {
> if (ENVIRONMENT_IS_PTHREAD) return
> _emscripten_proxy_to_main_thread_js(21, 1, );
> if (runtimeDebug) err("[library call:_getenv: " +
> Array.prototype.slice.call(arguments).map(pret$
> // char *getenv(const char *name);
> //
> http://pubs.opengroup.org/onlinepubs/009695399/functions/getenv.html
> if (name === 0) return 0;
> name = UTF8ToString(name);
> if (!ENV.hasOwnProperty(name)) return 0;
>
> if (_getenv.ret) _free(_getenv.ret);
> _getenv.ret = allocateUTF8(ENV[name]);
> return _getenv.ret;
> }).apply(this, arguments); if (runtimeDebug && typeof ret !==
> "undefined") err(" [ return:$
> }
>
>
> Note that _emscripten_sync_run_in_browser_thread_ii(...) was turned into
> _emscripten_proxy_to_main_thread_js(...) and that the arguments to the
> latter are truncated. I checked all calls to
> _emscripten_proxy_to_main_thread_js in the generated code and all but one
> seem to suffer from that. The oine that doesn't have the problem is for
> tzset(), which doesn't take any parameters. The ones that do have the
> problem are for:
>
> - sysconf(...)
> - __syscall140(...)
> - __syscall145(...)
> - __syscall146(...)
> - __syscall192(...)
> - __syscall195(...)
> - __syscall197(...)
> - __syscall220(...)
> - __syscall221(...)
> - __syscall3(...)
> - __syscall33(...)
> - __syscall340(...)
> - __syscall38(...)
> - __syscall4(...)
> - __syscall5(...)
> - __syscall54(...)
> - __syscall6(...)
> - __syscall75(...)
> - __syscall77(...)
> - __syscall91(...)
> - emscripten_set_canvas_element_size_main_thread(...)
> - getenv(...)
>
> So this looks like a regression to me. Our settings are this:
>
> -s ENVIRONMENT=worker \
> -s USE_PTHREADS=1 \
> -s EXCEPTION_DEBUG=1 \
> -s LIBRARY_DEBUG=1 \
> -s SYSCALL_DEBUG=1 \
> -s PTHREADS_DEBUG=1
> -s PTHREAD_POOL_SIZE=8 \
> -s TOTAL_MEMORY=536870912 \
> -s PROXY_TO_PTHREAD=1 \
> -s ASSERTIONS=2
> -s USE_OGG=1 \
> -s USE_VORBIS=1 \
> -s USE_ZLIB=1 \
> -s PRECISE_F32=2 \
> -s DOUBLE_MODE=0 \
> -s INVOKE_RUN=0 \
>
>
> I'll play around with the latter to confirm that nothing in there is
> causing this. Would be great though to get some confirmation from others
> that this is a bug/regression.
>
> Thanks.
> Soeren
>
>
--
You received this message because you are subscribed to the Google Groups
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.