Hi and thanks for the input, A few quick points:
- the wildcard doesn't seem to work with '*' either: warning: Asyncify whitelist contained a non-existing function name: __pyx_pf_5renpy_2gl_6gldraw_6GLDraw_* ($__pyx_pf_5renpy_2gl_6gldraw_6GLDraw_*) - I was using tot-upstream, '-s ASSERTIONS=1 -g', and '-s ASYNCIFY_STACK_SIZE=65535' (just in case) - I'm using my patch from https://github.com/emscripten-ports/SDL2/issues/70 hence emscripten_sleep() On Wed, Sep 04, 2019 at 04:22:17PM -0700, Alon Zakai wrote: > On Wed, Sep 4, 2019 at 2:10 PM Beuc <[email protected]> wrote: > > > Hi, > > > > Trying to test my Emscripten project with Asyncify, I recompiled it with > > tot-upstream, with the same whitelist, but this is failing: > > > > Part 1) Handling function names that change (work-around) > > > > I read that using function prefixes worked as limited wildcard but that > > doesn't seem to be the case - did I do something wrong? > > > > Wildcards like "__py*" should work (with "*"). But the "*" can only be at > the end currently, I believe. > > -s ASYNCIFY_WHITELIST='["__pyx_pf_5renpy_2gl_6gldraw_6GLDraw_"...' > > warning: Asyncify whitelist contained a non-existing function name: > > __pyx_pf_5renpy_2gl_6gldraw_6GLDraw_ ($__pyx_pf_5renpy_2gl_6gldraw_6GLDraw_) > > > > Also llvm-nm doesn't seem to support listing WASM. > > > > Correct, llvm-nm is only aware of LLVM IR. Wasm object files contain wasm. > To see the names in them, build with something like -g or --profiling (so > names are kept) and use binaryen's wasm-dis. You can also inspect the > binary directly. > > I managed to find the function through emcc ... -o fat.llvm && llvm-nm > > fat.llvm : > > 003832c5 t __pyx_pf_5renpy_2gl_6gldraw_6GLDraw_28draw_screen > > > > > LLVM IR may encode the name differently than in wasm, as LLVM IR will use > standard name mangling while wasm names will be "human-readable" (contain > things like parentheses, types, ::, etc. - the output of c++filt). > > > > Part 2) Run-time failure > > > > With the updated WHITELIST, I got the dreaded: > > > > RuntimeError: unreachable executed index.wasm:386701:1 > > > > An unreachable can be several things. If it in the binaryen API, it could > be the asyncify stack is too small. But here it looks like it's in a user > function - it could be that an import was called that started a sleep, but > asyncify was not aware of it, and control flow ends up in the wrong place. > Adding some debug logging in your sleep function, and making sure > ASYNCIFY_IMPORTS is correct, might help. > > Note that in ASSERTIONS mode we improved debug errors for that pretty > recently, not sure if in the last version or since then. > > > > __pyx_pw_11pygame_sdl2_7display_21flip > > http://localhost:8000/index.wasm:386701 > > emu$__pyx_pw_11pygame_sdl2_7display_21flip > > http://localhost:8000/index.wasm:8749855 > > 15 http://localhost:8000/index.wasm:2587748 > > __pyx_pf_5renpy_2gl_6gldraw_6GLDraw_28draw_screen > > http://localhost:8000/index.wasm:2845914 > > __pyx_pw_5renpy_2gl_6gldraw_6GLDraw_29draw_screen > > http://localhost:8000/index.wasm:2813529 > > emu$__pyx_pw_5renpy_2gl_6gldraw_6GLDraw_29draw_screen > > http://localhost:8000/index.wasm:8760622 > > PyCFunction_Call http://localhost:8000/index.wasm:5272869 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5750951 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > function_call http://localhost:8000/index.wasm:5167287 > > emu$function_call http://localhost:8000/index.wasm:8793327 > > PyObject_Call http://localhost:8000/index.wasm:5030529 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5754056 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > function_call http://localhost:8000/index.wasm:5167287 > > emu$function_call http://localhost:8000/index.wasm:8793327 > > PyObject_Call http://localhost:8000/index.wasm:5030529 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5754056 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5734704 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5734704 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > fast_function http://localhost:8000/index.wasm:5767904 > > PyEval_EvalFrameEx http://localhost:8000/index.wasm:5751409 > > PyEval_EvalCodeEx http://localhost:8000/index.wasm:5714071 > > PyEval_EvalCode http://localhost:8000/index.wasm:5710418 > > PyRun_FileExFlags http://localhost:8000/index.wasm:5955369 > > PyRun_SimpleFileExFlags http://localhost:8000/index.wasm:5954716 > > pyapp_runmain http://localhost:8000/index.wasm:58353 > > x http://localhost:8000/index.js:17649 > > handleSleep http://localhost:8000/index.js:17712 > > safeSetTimeout http://localhost:8000/index.js:9068 > > > > My whitelist: > > -s ASYNCIFY_WHITELIST='["main", "pyapp_runmain", "SDL_WaitEvent", > > "SDL_WaitEventTimeout", "SDL_Delay", "SDL_RenderPresent", > > "GLES2_RenderPresent", "SDL_GL_SwapWindow", "Emscripten_GLES_SwapWindow", > > "PyRun_SimpleFileExFlags", "PyRun_FileExFlags", "PyEval_EvalCode", > > "PyEval_EvalCodeEx", "PyEval_EvalFrameEx", "PyCFunction_Call", > > "PyObject_Call", "fast_function", "function_call", "instancemethod_call", > > "slot_tp_call", "__pyx_pw_11pygame_sdl2_5event_7wait", > > "__pyx_pw_11pygame_sdl2_7display_21flip", > > "__pyx_pw_11pygame_sdl2_7display_6Window_13flip", > > "__pyx_pf_5renpy_2gl_6gldraw_6GLDraw_28draw_screen", > > "__pyx_pw_5renpy_2gl_6gldraw_6GLDraw_29draw_screen", > > "__Pyx_PyObject_CallNoArg", "__pyx_pf_10emscripten_6sleep", > > "__pyx_pw_10emscripten_7sleep", "__pyx_pf_10emscripten_8sleep_with_yield", > > "__pyx_pw_10emscripten_9sleep_with_yield", "gen_send", "gen_send_ex", > > "gen_iternext", "type_call", "slot_tp_init", "builtin_eval"]' > > > > Not sure if all the "emu$" and "fastfunction" are properly handled :/ > > > > Any clue? > > > > Cheers! > > Beuc -- 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]. To view this discussion on the web visit https://groups.google.com/d/msgid/emscripten-discuss/20190904234513.l5kzpleqznv7b7ja%40mail.beuc.net.
