Skip to content

emcc fails to create an executable if ASYNCIFY + EM_ASYNC_JS macro is used: the compiler doesn't find the function used within the EM_ASYNC_JS macro #26179

@leopatras

Description

@leopatras

I have an emscripten project which relies on the -sASYNCIFY features. Trying to compile it with fsanitize=address as additional argument to reveal problems fails because the functions wrapped with the EM_ASYNC_JS macro are then not seen by the compiler anymore.

I have a function addPersistentDirs exposed via the EM_ASYNC_JS macro
EM_ASYNC_JS(void,addPersistentDirsInt,(),...
and as soon as adding -fsanitize=address the linking fails with the function not found.
-fsanitze=leak works fine btw.

Version of emscripten/emsdk:
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 4.0.22 (0f3d2e6)
clang version 22.0.0git (https:/github.com/llvm/llvm-project c7706d9472fe880ba1d3418919ad4185710c9559)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /Users/leo/w/github/emsdk/upstream/bin

Failing command line in full:
emcc
-O2
--pre-js pre.js
-s MAIN_MODULE=1
-s FORCE_FILESYSTEM=1
-s EXPORT_ALL=1
-s ASSERTIONS=1
-s STACK_SIZE=200000
-s ASYNCIFY
-s ASYNCIFY_STACK_SIZE=200000
-s MAXIMUM_MEMORY=4GB
-s STACK_OVERFLOW_CHECK=2
-s EXIT_RUNTIME=1
-s ALLOW_MEMORY_GROWTH=1
-lidbfs.js
-lproxyfs.js
-fsanitize=address
main.c -o main.html
error: undefined symbol: addPersistentDirsInt (referenced by root reference (e.g. compiled C/C++ code))
warning: To disable errors for undefined symbols use -sERROR_ON_UNDEFINED_SYMBOLS=0
warning: _addPersistentDirsInt may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
Error: Aborting compilation due to previous errors
at finalCombiner (file:///Users/leo/w/github/emsdk/upstream/emscripten/src/jsifier.mjs:889:13)
at Module.runJSify (file:///Users/leo/w/github/emsdk/upstream/emscripten/src/jsifier.mjs:925:5)
at file:///Users/leo/w/github/emsdk/upstream/emscripten/tools/compiler.mjs:108:17
emcc: error: '/Users/leo/w/github/emsdk/node/20.18.0_64bit/bin/node /Users/leo/w/github/emsdk/upstream/emscripten/tools/compiler.mjs -' failed (returned 1)
make: *** [main.html] Error 1

Full link command and output with -v appended:
emcc
-v
-O2
--pre-js pre.js
-s MAIN_MODULE=1
-s FORCE_FILESYSTEM=1
-s EXPORT_ALL=1
-s ASSERTIONS=1
-s STACK_SIZE=200000
-s ASYNCIFY
-s ASYNCIFY_STACK_SIZE=200000
-s MAXIMUM_MEMORY=4GB
-s STACK_OVERFLOW_CHECK=2
-s EXIT_RUNTIME=1
-s ALLOW_MEMORY_GROWTH=1
-lidbfs.js
-lproxyfs.js
-fsanitize=address
main.c -o main.html
/Users/leo/w/github/emsdk/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -fPIC -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/Users/leo/w/github/emsdk/upstream/emscripten/cache/sysroot -DEMSCRIPTEN -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -O2 -fsanitize=address -c main.c -o /var/folders/fv/7l4yvm9d2bvbsvl80kmhp8b40000gn/T/emscripten_temp_mx_9x87n/main.o
clang version 22.0.0git (https:/github.com/llvm/llvm-project c7706d9472fe880ba1d3418919ad4185710c9559)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /Users/leo/w/github/emsdk/upstream/bin
(in-process)
"/Users/leo/w/github/emsdk/upstream/bin/clang-22" -cc1 -triple wasm32-unknown-emscripten -O2 -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model pic -pic-level 2 -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-feature +mutable-globals -target-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/Users/leo/tmp/em_fsanitize_address -v -fcoverage-compilation-dir=/Users/leo/tmp/em_fsanitize_address -resource-dir /Users/leo/w/github/emsdk/upstream/lib/clang/22 -D EMSCRIPTEN -isysroot /Users/leo/w/github/emsdk/upstream/emscripten/cache/sysroot -internal-isystem /Users/leo/w/github/emsdk/upstream/lib/clang/22/include -internal-isystem /Users/leo/w/github/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten -internal-isystem /Users/leo/w/github/emsdk/upstream/emscripten/cache/sysroot/include -ferror-limit 19 -fmessage-length=98 -fvisibility=default -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -fcolor-diagnostics -vectorize-loops -vectorize-slp -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -fsanitize=address -fno-sanitize-memory-param-retval -fsanitize-address-use-after-scope -fsanitize-address-globals-dead-stripping -fno-assume-sane-operator-new -o /var/folders/fv/7l4yvm9d2bvbsvl80kmhp8b40000gn/T/emscripten_temp_mx_9x87n/main.o -x c main.c
clang -cc1 version 22.0.0git based upon LLVM 22.0.0git default target
ignoring nonexistent directory "/Users/leo/w/github/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"
#include "..." search starts here:
#include <...> search starts here:
/Users/leo/w/github/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl
/Users/leo/w/github/emsdk/upstream/emscripten/cache/sysroot/include/compat
/Users/leo/w/github/emsdk/upstream/lib/clang/22/include
/Users/leo/w/github/emsdk/upstream/emscripten/cache/sysroot/include
End of search list.
/Users/leo/w/github/emsdk/upstream/bin/clang --version
/Users/leo/w/github/emsdk/upstream/bin/wasm-ld -o main.wasm -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --export-if-defined=setThrew --export-if-defined=_emscripten_stack_restore --export-if-defined=emscripten_stack_get_current --export-if-defined=_emscripten_find_dylib --export-if-defined=strerror --export-if-defined=_emscripten_stack_alloc --export-if-defined=emscripten_get_sbrk_ptr --export-if-defined=__heap_base --export-if-defined=calloc --export-if-defined=malloc --export-if-defined=free --export-if-defined=_emscripten_tempret_get --export-if-defined=_emscripten_tempret_set --export-if-defined=htons --export-if-defined=ntohs --export-if-defined=htonl --export-if-defined=_emscripten_timeout --export-if-defined=realloc --export-if-defined=memalign --export-if-defined=emscripten_builtin_malloc --export-if-defined=emscripten_builtin_free --export-if-defined=emscripten_builtin_memalign --export-if-defined=emscripten_builtin_calloc --export-if-defined=emscripten_builtin_realloc --export-if-defined=emscripten_stack_get_base --export-if-defined=emscripten_stack_get_end --export-if-defined=__cxa_can_catch --export-if-defined=__cxa_increment_exception_refcount --export-if-defined=__cxa_get_exception_ptr --export-if-defined=__cxa_decrement_exception_refcount --export-if-defined=fileno --export-if-defined=__dl_seterr --export-if-defined=memcmp --export-if-defined=memcpy --export-if-defined=emscripten_stack_set_limits --export-if-defined=__cxa_demangle /var/folders/fv/7l4yvm9d2bvbsvl80kmhp8b40000gn/T/tmp6yued_4mlibemscripten_js_symbols.so --export-dynamic -Bdynamic --export=__stack_pointer --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=malloc --export=calloc --export=realloc --export=memalign --export=free --export=emscripten_builtin_malloc --export=emscripten_builtin_calloc --export=emscripten_builtin_realloc --export=emscripten_builtin_memalign --export=emscripten_builtin_free --export=__asan_loadN --export=__asan_storeN --export=__funcs_on_exit --export=__wasm_call_ctors --export=setThrew --export=_emscripten_stack_restore --export=_emscripten_find_dylib --export=strerror --export=emscripten_get_sbrk_ptr --export=__heap_base --export=_emscripten_tempret_get --export=_emscripten_tempret_set --export=htons --export=ntohs --export=htonl --export=_emscripten_timeout --export=__cxa_can_catch --export=__cxa_increment_exception_refcount --export=__cxa_get_exception_ptr --export=__cxa_decrement_exception_refcount --export=fileno --export=__dl_seterr --export=memcmp --export=memcpy --export=emscripten_stack_set_limits --export=__cxa_demangle --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --experimental-pic --unresolved-symbols=import-dynamic --export-table --growable-table -z stack-size=200000 --max-memory=4294967296 --initial-memory=630390784 --no-entry --no-stack-first --table-base=1 --global-base=613572608 --whole-archive /var/folders/fv/7l4yvm9d2bvbsvl80kmhp8b40000gn/T/emscripten_temp_mx_9x87n/main.o -L/Users/leo/w/github/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/pic -L/Users/leo/w/github/emsdk/upstream/emscripten/src/lib -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lc-asan-debug -ldlmalloc-debug -lcompiler_rt -lc++-debug-noexcept -lc++abi-debug-noexcept -lsockets -lasan_rt -lubsan_rt -llsan_common_rt -lsanitizer_common_rt --no-whole-archive
/Users/leo/w/github/emsdk/upstream/bin/llvm-objcopy main.wasm main.wasm '--remove-section=.debug*' --remove-section=producers
/Users/leo/w/github/emsdk/upstream/bin/wasm-emscripten-finalize -g --bigint --no-legalize-javascript-ffi --check-stack-overflow main.wasm -o main.wasm --detect-features
/Users/leo/w/github/emsdk/node/20.18.0_64bit/bin/node /Users/leo/w/github/emsdk/upstream/emscripten/tools/compiler.mjs -
error: undefined symbol: addPersistentDirsInt (referenced by root reference (e.g. compiled C/C++ code))
warning: To disable errors for undefined symbols use -sERROR_ON_UNDEFINED_SYMBOLS=0
warning: _addPersistentDirsInt may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
Error: Aborting compilation due to previous errors
at finalCombiner (file:///Users/leo/w/github/emsdk/upstream/emscripten/src/jsifier.mjs:889:13)
at Module.runJSify (file:///Users/leo/w/github/emsdk/upstream/emscripten/src/jsifier.mjs:925:5)
at file:///Users/leo/w/github/emsdk/upstream/emscripten/tools/compiler.mjs:108:17
emcc: error: '/Users/leo/w/github/emsdk/node/20.18.0_64bit/bin/node /Users/leo/w/github/emsdk/upstream/emscripten/tools/compiler.mjs -' failed (returned 1)

em_fsanitize_address.zip

github sample

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions