Skip to content

Crash in wasm-ld (20.0.0) with Full LTO #122166

@fs-eire

Description

@fs-eire

I try to upgrade emsdk to 3.1.74 for onnxruntime and got this crash with build. The build was fine with emsdk 3.1.59.

Error logs:

2025-01-08 12:09:00,886 build [INFO] - C:\Program Files\CMake\bin\cmake.EXE --build C:\code\onnxruntime\\build\Windows\Release --config Release --target onnxruntime_webassembly
[0/2] Re-checking globbed directories...
[1/1] Linking CXX executable ort-wasm-simd-threaded.mjs
FAILED: ort-wasm-simd-threaded.mjs
C:\Windows\system32\cmd.exe /C "cd . && C:\code\onnxruntime\cmake\external\emsdk\upstream\emscripten\em++.bat -ffunction-sections -fdata-sections -flto -msimd128 -pthread -Wno-pthreads-mem-growth -O3 -DNDEBUG -s ALLOW_UNIMPLEMENTED_SYSCALLS=1 -s DEFAULT_TO_CXX=1    --post-js C:/code/onnxruntime/onnxruntime/wasm/js_post_js.js -s EXPORTED_RUNTIME_METHODS=[stackAlloc,stackRestore,stackSave,UTF8ToString,stringToUTF8,lengthBytesUTF8,getValue,setValue] -s EXPORTED_FUNCTIONS=_malloc,_free -s MAXIMUM_MEMORY=4294967296 -s EXIT_RUNTIME=0 -s ALLOW_MEMORY_GROWTH=1 -s MODULARIZE=1 -s EXPORT_ALL=0 -s VERBOSE=0 -s FILESYSTEM=0 -s INCOMING_MODULE_JS_API=[locateFile,instantiateWasm,wasmBinary] -s WASM_BIGINT=1 "-s DISABLE_EXCEPTION_CATCHING=0" --no-entry --pre-js C:/code/onnxruntime/onnxruntime/wasm/pre.js -s MALLOC=dlmalloc -s STACK_SIZE=5242880 -s ASSERTIONS=0 -s SAFE_HEAP=0 -s STACK_OVERFLOW_CHECK=0 --closure 1 -s DISABLE_EXCEPTION_THROWING=0 -s EXPORT_NAME=ortWasmThreaded -s DEFAULT_PTHREAD_STACK_SIZE=131072 -s PTHREAD_POOL_SIZE=Module[\"numThreads\"]-1 @CMakeFiles\onnxruntime_webassembly.rsp -o ort-wasm-simd-threaded.mjs && cd ."
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: C:/code/onnxruntime/cmake/external/emsdk/upstream/bin\\wasm-ld.exe -o ort-wasm-simd-threaded.wasm -LC:\\code\\onnxruntime\\cmake\\external\\emsdk\\upstream\\emscripten\\cache\\sysroot\\lib\\wasm32-emscripten\\lto CMakeFiles/onnxruntime_webassembly.dir/C_/code/onnxruntime/onnxruntime/wasm/api.cc.o _deps/protobuf-build/libprotobuf-lite.a _deps/onnx-build/libonnx.a _deps/onnx-build/libonnx_proto.a libonnxruntime_common.a libonnxruntime_lora.a libonnxruntime_flatbuffers.a libonnxruntime_framework.a libonnxruntime_graph.a libonnxruntime_mlas.a libonnxruntime_optimizer.a libonnxruntime_providers.a libonnxruntime_session.a libonnxruntime_util.a _deps/re2-build/libre2.a _deps/protobuf-build/libprotobuf-lite.a libonnxruntime_lora.a libonnxruntime_framework.a lib/libortcustomops.a lib/libocos_operators.a lib/libnoexcep_operators.a _deps/re2-build/libre2.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_reflection.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_private_handle_accessor.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_internal.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_commandlineflag.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_commandlineflag_internal.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_marshalling.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_config.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_program_name.a _deps/abseil_cpp-build/absl/strings/libabsl_cord.a _deps/abseil_cpp-build/absl/strings/libabsl_cordz_info.a _deps/abseil_cpp-build/absl/strings/libabsl_cord_internal.a _deps/abseil_cpp-build/absl/strings/libabsl_cordz_functions.a _deps/abseil_cpp-build/absl/strings/libabsl_cordz_handle.a _deps/abseil_cpp-build/absl/crc/libabsl_crc_cord_state.a _deps/abseil_cpp-build/absl/crc/libabsl_crc32c.a _deps/abseil_cpp-build/absl/crc/libabsl_crc_internal.a _deps/abseil_cpp-build/absl/crc/libabsl_crc_cpu_detect.a _deps/abseil_cpp-build/absl/container/libabsl_raw_hash_set.a _deps/abseil_cpp-build/absl/container/libabsl_hashtablez_sampler.a _deps/abseil_cpp-build/absl/profiling/libabsl_exponential_biased.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_conditions.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_check_op.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_message.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_format.a _deps/abseil_cpp-build/absl/strings/libabsl_str_format_internal.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_log_sink_set.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_globals.a _deps/abseil_cpp-build/absl/log/libabsl_log_sink.a _deps/abseil_cpp-build/absl/log/libabsl_log_entry.a _deps/abseil_cpp-build/absl/log/libabsl_log_globals.a _deps/abseil_cpp-build/absl/hash/libabsl_hash.a _deps/abseil_cpp-build/absl/hash/libabsl_city.a _deps/abseil_cpp-build/absl/hash/libabsl_low_level_hash.a _deps/abseil_cpp-build/absl/types/libabsl_bad_variant_access.a _deps/abseil_cpp-build/absl/log/libabsl_vlog_config_internal.a _deps/abseil_cpp-build/absl/synchronization/libabsl_synchronization.a _deps/abseil_cpp-build/absl/synchronization/libabsl_kernel_timeout_internal.a _deps/abseil_cpp-build/absl/time/libabsl_time.a _deps/abseil_cpp-build/absl/time/libabsl_time_zone.a _deps/abseil_cpp-build/absl/time/libabsl_civil_time.a _deps/abseil_cpp-build/absl/synchronization/libabsl_graphcycles_internal.a _deps/abseil_cpp-build/absl/types/libabsl_bad_optional_access.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_fnmatch.a _deps/abseil_cpp-build/absl/debugging/libabsl_examine_stack.a _deps/abseil_cpp-build/absl/debugging/libabsl_symbolize.a _deps/abseil_cpp-build/absl/base/libabsl_malloc_internal.a _deps/abseil_cpp-build/absl/debugging/libabsl_demangle_internal.a _deps/abseil_cpp-build/absl/debugging/libabsl_demangle_rust.a _deps/abseil_cpp-build/absl/debugging/libabsl_decode_rust_punycode.a _deps/abseil_cpp-build/absl/debugging/libabsl_utf8_for_code_point.a _deps/abseil_cpp-build/absl/debugging/libabsl_stacktrace.a _deps/abseil_cpp-build/absl/debugging/libabsl_debugging_internal.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_proto.a _deps/abseil_cpp-build/absl/base/libabsl_strerror.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_nullguard.a _deps/abseil_cpp-build/absl/strings/libabsl_strings.a _deps/abseil_cpp-build/absl/strings/libabsl_strings_internal.a _deps/abseil_cpp-build/absl/numeric/libabsl_int128.a _deps/abseil_cpp-build/absl/strings/libabsl_string_view.a _deps/abseil_cpp-build/absl/base/libabsl_base.a _deps/abseil_cpp-build/absl/base/libabsl_spinlock_wait.a _deps/abseil_cpp-build/absl/base/libabsl_throw_delegate.a _deps/abseil_cpp-build/absl/base/libabsl_raw_logging_internal.a _deps/abseil_cpp-build/absl/base/libabsl_log_severity.a C:\\code\\onnxruntime\\cmake\\external\\emsdk\\upstream\\emscripten\\cache\\sysroot\\lib\\wasm32-emscripten\\lto\\crtbegin.o -lGL-mt-getprocaddr -lal -lhtml5 -lbulkmemory -lstubs -lnoexit -lc-mt -ldlmalloc-mt -lcompiler_rt-mt -lc++-mt-noexcept -lc++abi-mt-noexcept -lsockets-mt -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr C:\\Users\\yulongw\\AppData\\Local\\Temp\\tmpul8tk14rlibemscripten_js_symbols.so --import-memory --shared-memory --strip-debug -u__cxa_atexit --export=malloc --export=free --export=_emscripten_stack_alloc --export=_emscripten_thread_free_data --export=_emscripten_thread_crashed --export=__wasm_call_ctors --export=_emscripten_tls_init --export=_emscripten_thread_init --export=emscripten_stack_get_current --export=_emscripten_stack_restore --export=emscripten_stack_set_limits --export=_emscripten_thread_exit --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-table -z stack-size=5242880 --max-memory=4294967296 --initial-memory=16777216 --no-entry --table-base=1 --global-base=1024
1.      Running pass "cgscc(function-attrs)" on module "ld-temp.o"
Exception Code: 0xC0000005
 #0 0x00007ff63b177ea9 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x707ea9)
 #1 0x00007ff63b17952c (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x70952c)
 #2 0x00007ff63b178aab (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x708aab)
 #3 0x00007ff63b688f8b (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0xc18f8b)
 #4 0x00007ff63b9091de (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0xe991de)
 #5 0x00007ff63b68ab31 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0xc1ab31)
 #6 0x00007ff63b474837 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0xa04837)
 #7 0x00007ff63b0f2fd0 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x682fd0)
 #8 0x00007ff63b0f5116 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x685116)
 #9 0x00007ff63ac1d8d6 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x1ad8d6)
#10 0x00007ff63af24b27 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x4b4b27)
#11 0x00007ff63aef40f4 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x4840f4)
#12 0x00007ff63ab3b396 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0xcb396)
#13 0x00007ff63ab355d5 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0xc55d5)
#14 0x00007ff63aa9ca1e (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x2ca1e)
#15 0x00007ff63aa71225 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x1225)
#16 0x00007ff63aa71dd4 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x1dd4)
#17 0x00007ff63d2f19f8 (C:\code\onnxruntime\cmake\external\emsdk\upstream\bin\wasm-ld.exe+0x28819f8)
#18 0x00007ffdbc34e8d7 (C:\Windows\System32\KERNEL32.DLL+0x2e8d7)
#19 0x00007ffdbe3dfbcc (C:\Windows\SYSTEM32\ntdll.dll+0xdfbcc)
em++: error: 'C:/code/onnxruntime/cmake/external/emsdk/upstream/bin\wasm-ld.exe -o ort-wasm-simd-threaded.wasm -LC:\code\onnxruntime\cmake\external\emsdk\upstream\emscripten\cache\sysroot\lib\wasm32-emscripten\lto CMakeFiles/onnxruntime_webassembly.dir/C_/code/onnxruntime/onnxruntime/wasm/api.cc.o _deps/protobuf-build/libprotobuf-lite.a _deps/onnx-build/libonnx.a _deps/onnx-build/libonnx_proto.a libonnxruntime_common.a libonnxruntime_lora.a libonnxruntime_flatbuffers.a libonnxruntime_framework.a libonnxruntime_graph.a libonnxruntime_mlas.a libonnxruntime_optimizer.a libonnxruntime_providers.a libonnxruntime_session.a libonnxruntime_util.a _deps/re2-build/libre2.a _deps/protobuf-build/libprotobuf-lite.a libonnxruntime_lora.a libonnxruntime_framework.a lib/libortcustomops.a lib/libocos_operators.a lib/libnoexcep_operators.a _deps/re2-build/libre2.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_reflection.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_private_handle_accessor.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_internal.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_commandlineflag.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_commandlineflag_internal.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_marshalling.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_config.a _deps/abseil_cpp-build/absl/flags/libabsl_flags_program_name.a _deps/abseil_cpp-build/absl/strings/libabsl_cord.a _deps/abseil_cpp-build/absl/strings/libabsl_cordz_info.a _deps/abseil_cpp-build/absl/strings/libabsl_cord_internal.a _deps/abseil_cpp-build/absl/strings/libabsl_cordz_functions.a _deps/abseil_cpp-build/absl/strings/libabsl_cordz_handle.a _deps/abseil_cpp-build/absl/crc/libabsl_crc_cord_state.a _deps/abseil_cpp-build/absl/crc/libabsl_crc32c.a _deps/abseil_cpp-build/absl/crc/libabsl_crc_internal.a _deps/abseil_cpp-build/absl/crc/libabsl_crc_cpu_detect.a _deps/abseil_cpp-build/absl/container/libabsl_raw_hash_set.a _deps/abseil_cpp-build/absl/container/libabsl_hashtablez_sampler.a _deps/abseil_cpp-build/absl/profiling/libabsl_exponential_biased.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_conditions.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_check_op.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_message.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_format.a _deps/abseil_cpp-build/absl/strings/libabsl_str_format_internal.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_log_sink_set.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_globals.a _deps/abseil_cpp-build/absl/log/libabsl_log_sink.a _deps/abseil_cpp-build/absl/log/libabsl_log_entry.a _deps/abseil_cpp-build/absl/log/libabsl_log_globals.a _deps/abseil_cpp-build/absl/hash/libabsl_hash.a _deps/abseil_cpp-build/absl/hash/libabsl_city.a _deps/abseil_cpp-build/absl/hash/libabsl_low_level_hash.a _deps/abseil_cpp-build/absl/types/libabsl_bad_variant_access.a _deps/abseil_cpp-build/absl/log/libabsl_vlog_config_internal.a _deps/abseil_cpp-build/absl/synchronization/libabsl_synchronization.a _deps/abseil_cpp-build/absl/synchronization/libabsl_kernel_timeout_internal.a _deps/abseil_cpp-build/absl/time/libabsl_time.a _deps/abseil_cpp-build/absl/time/libabsl_time_zone.a _deps/abseil_cpp-build/absl/time/libabsl_civil_time.a _deps/abseil_cpp-build/absl/synchronization/libabsl_graphcycles_internal.a _deps/abseil_cpp-build/absl/types/libabsl_bad_optional_access.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_fnmatch.a _deps/abseil_cpp-build/absl/debugging/libabsl_examine_stack.a _deps/abseil_cpp-build/absl/debugging/libabsl_symbolize.a _deps/abseil_cpp-build/absl/base/libabsl_malloc_internal.a _deps/abseil_cpp-build/absl/debugging/libabsl_demangle_internal.a _deps/abseil_cpp-build/absl/debugging/libabsl_demangle_rust.a _deps/abseil_cpp-build/absl/debugging/libabsl_decode_rust_punycode.a _deps/abseil_cpp-build/absl/debugging/libabsl_utf8_for_code_point.a _deps/abseil_cpp-build/absl/debugging/libabsl_stacktrace.a _deps/abseil_cpp-build/absl/debugging/libabsl_debugging_internal.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_proto.a _deps/abseil_cpp-build/absl/base/libabsl_strerror.a _deps/abseil_cpp-build/absl/log/libabsl_log_internal_nullguard.a _deps/abseil_cpp-build/absl/strings/libabsl_strings.a _deps/abseil_cpp-build/absl/strings/libabsl_strings_internal.a _deps/abseil_cpp-build/absl/numeric/libabsl_int128.a _deps/abseil_cpp-build/absl/strings/libabsl_string_view.a _deps/abseil_cpp-build/absl/base/libabsl_base.a _deps/abseil_cpp-build/absl/base/libabsl_spinlock_wait.a _deps/abseil_cpp-build/absl/base/libabsl_throw_delegate.a _deps/abseil_cpp-build/absl/base/libabsl_raw_logging_internal.a _deps/abseil_cpp-build/absl/base/libabsl_log_severity.a C:\code\onnxruntime\cmake\external\emsdk\upstream\emscripten\cache\sysroot\lib\wasm32-emscripten\lto\crtbegin.o -lGL-mt-getprocaddr -lal -lhtml5 -lbulkmemory -lstubs -lnoexit -lc-mt -ldlmalloc-mt -lcompiler_rt-mt -lc++-mt-noexcept -lc++abi-mt-noexcept -lsockets-mt -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr C:\Users\yulongw\AppData\Local\Temp\tmpul8tk14rlibemscripten_js_symbols.so --import-memory --shared-memory --strip-debug -u__cxa_atexit --export=malloc --export=free --export=_emscripten_stack_alloc --export=_emscripten_thread_free_data --export=_emscripten_thread_crashed --export=__wasm_call_ctors --export=_emscripten_tls_init --export=_emscripten_thread_init --export=emscripten_stack_get_current --export=_emscripten_stack_restore --export=emscripten_stack_set_limits --export=_emscripten_thread_exit --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-table -z stack-size=5242880 --max-memory=4294967296 --initial-memory=16777216 --no-entry --table-base=1 --global-base=1024' failed (returned 3221225477)
ninja: build stopped: subcommand failed.

wasm-ld version

C:\code\onnxruntime\cmake\external\emsdk\upstream\bin>wasm-ld --version
LLD 20.0.0 (Cswircachegitchromium.googlesource.com-external-github.com-llvm-llvm--project 322eb1a92e6d4266184060346616fa0dbe39e731)

Reproduce steps:

  1. clone https://github.com/microsoft/onnxruntime
    • install cmake, python, nodejs
    • pip install ninja
  2. use branch fs-eire/emsdk_upgrade_test
  3. build with build --config Release --build_wasm --enable_wasm_simd --enable_wasm_threads --use_extensions --cmake_extra_defines onnxruntime_WEBASSEMBLY_DEFAULT_EXTENSION_FLAGS=ON --target onnxruntime_webassembly --skip_tests --enable_wasm_api_exception_catching --disable_rtti

Please let me know if more information is needed for investigation.

Metadata

Metadata

Assignees

No one assigned

    Labels

    crashPrefer [crash-on-valid] or [crash-on-invalid]llvm:analysisIncludes value tracking, cost tables and constant folding

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions