Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linking issues when using Emscripten + Rust + pthread #14419

Closed
RReverser opened this issue Jun 9, 2021 · 21 comments
Closed

Linking issues when using Emscripten + Rust + pthread #14419

RReverser opened this issue Jun 9, 2021 · 21 comments

Comments

@RReverser
Copy link
Collaborator

I've uploaded a sample trying to use std::thread API in Rust + Emscripten here: https://github.com/RReverser/emscripten-rust-test

Here's what my config looks like - I ended up enabling atomics feature for Rust to know it's compiled with threads support, and linking -pthread for Emscripten: https://github.com/RReverser/emscripten-rust-test/blob/38d01ad5f80b95f0c2168791667cc32cf721039a/.cargo/config#L2

When trying to build it with emsdk version from #14394, it fails with linking errors suggesting conflict between regular libc and libc-mt:

   Compiling emscripten-rust-test v0.1.0 (/usr/local/google/home/rreverser/emscripten-rust-test)
error: linking with `emcc` failed: exit code: 1
  |
  = note: "emcc" "-s" "DISABLE_EXCEPTION_CATCHING=0" "-L" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib" "-L" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/self-contained" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.0.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.1.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.10.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.11.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.12.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.13.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.14.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.15.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.2.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.3.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.4.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.5.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.6.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.7.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.8.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.9.rcgu.o" "-o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.js" "-s" "EXPORTED_FUNCTIONS=[\"_main\",\"_rust_eh_personality\"]" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.2mgomy6ngcwuvfyk.rcgu.o" "-O0" "--memory-init-file" "0" "-g4" "-s" "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=[]" "-L" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps" "-L" "/usr/local/google/home/rreverser/emscripten-rust-test/target/debug/deps" "-L" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libstd-28368703ab79076a.rlib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libpanic_unwind-c6cbccdff18b55f7.rlib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_demangle-a5ffc5310c14c91c.rlib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libhashbrown-08c349e57dac68c0.rlib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_alloc-ce3363c7b27912b6.rlib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libunwind-686deac84d1c117a.rlib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcfg_if-1aefc0615f4a87c4.rlib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/liblibc-35a51890c8428321.rlib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/liballoc-d41456f5d5a426f6.rlib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_core-2a7cc4e4deb2c4e8.rlib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcore-997b7450818c8186.rlib" "/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcompiler_builtins-68f9d21fef2c27f2.rlib" "-l" "c" "-pthread" "-s" "PTHREAD_POOL_SIZE=1" "-s" "ERROR_ON_UNDEFINED_SYMBOLS=1" "-s" "ASSERTIONS=1" "-s" "ABORTING_MALLOC=0" "-Wl,--fatal-warnings"
  = note: wasm-ld: error: duplicate symbol: __libc
          >>> defined in /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc.a(libc.o)
          >>> defined in /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc-mt.a(libc.o)
          
          wasm-ld: error: duplicate symbol: __progname
          >>> defined in /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc.a(libc.o)
          >>> defined in /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc-mt.a(libc.o)
          
          wasm-ld: error: duplicate symbol: __progname_full
          >>> defined in /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc.a(libc.o)
          >>> defined in /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc-mt.a(libc.o)
          
          wasm-ld: error: duplicate symbol: __hwcap
          >>> defined in /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc.a(libc.o)
          >>> defined in /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc-mt.a(libc.o)
          
          wasm-ld: error: duplicate symbol: __sysinfo
          >>> defined in /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc.a(libc.o)
          >>> defined in /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc-mt.a(libc.o)
          emcc: error: '/usr/local/google/home/rreverser/emsdk/upstream/bin/wasm-ld -o /tmp/emscripten_temp_t2h9lh30/emscripten_rust_test.wasm -L/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib -L/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/self-contained /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.0.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.1.rcgu.o -L/usr/local/google/home/rreverser/emsdk/upstream/emscripten/system/local/lib /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.10.rcgu.o -L/usr/local/google/home/rreverser/emsdk/upstream/emscripten/system/lib /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.11.rcgu.o -L/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.12.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.13.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.14.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.15.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.2.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.3.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.4.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.5.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.6.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.7.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.8.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.9.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.2mgomy6ngcwuvfyk.rcgu.o -L/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps -L/usr/local/google/home/rreverser/emscripten-rust-test/target/debug/deps -L/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libstd-28368703ab79076a.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libpanic_unwind-c6cbccdff18b55f7.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_demangle-a5ffc5310c14c91c.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libhashbrown-08c349e57dac68c0.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_alloc-ce3363c7b27912b6.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libunwind-686deac84d1c117a.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcfg_if-1aefc0615f4a87c4.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/liblibc-35a51890c8428321.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/liballoc-d41456f5d5a426f6.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_core-2a7cc4e4deb2c4e8.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcore-997b7450818c8186.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcompiler_builtins-68f9d21fef2c27f2.rlib /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc.a --fatal-warnings /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc-mt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libcompiler_rt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc-wasm.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc++-mt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc++abi-mt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libdlmalloc-mt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libpthread-mt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc_rt_wasm.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libsockets-mt.a -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --allow-undefined --import-memory --import-table --shared-memory --export main --export rust_eh_personality --export malloc --export free --export stackSave --export stackRestore --export stackAlloc --export __data_end --export __wasm_call_ctors --export fflush --export __errno_location --export emscripten_get_global_libc --export __pthread_tsd_run_dtors --export pthread_self --export __emscripten_pthread_data_constructor --export emscripten_futex_wake --export memalign --export __cxa_is_pointer_type --export __cxa_can_catch --export htonl --export htons --export ntohs --export emscripten_main_thread_process_queued_calls --export _ZSt18uncaught_exceptionv --export __cxa_find_matching_catch --export setThrew -z stack-size=5242880 --initial-memory=16777216 --no-entry --max-memory=16777216 --global-base=1024' failed (1)

@kripken @tlively

@kripken
Copy link
Member

kripken commented Jun 9, 2021

Does removing "-l" "c" fix it? If so, then I wonder if this has been fixed by one of @sbc100 recent linking fixes to use the right variants. And if it works then for now getting rust to avoid emitting that would avoid the issue.

@RReverser
Copy link
Collaborator Author

I don't have control over those flags, it's just debug output. I think they're hardcoded in Rust compiler as part of the integration.

@RReverser
Copy link
Collaborator Author

I don't have control over those flags, it's just debug output.

Or, I guess, to clarify - I can add to the list but not remove those already there.

@kripken
Copy link
Member

kripken commented Jun 9, 2021

Can you run the command directly (manually) to see if it works? Or are there temp files etc. that rust would have created that are missing? I'm just trying to find out if this is the issue or not.

Another option might be to patch rust just to see what happens without that flag. Or to patch emcc.py with this:

diff --git a/emcc.py b/emcc.py
index 9eebdb910..4e2b36415 100755
--- a/emcc.py
+++ b/emcc.py
@@ -563,6 +563,8 @@ def get_all_js_syms(temp_files):
 
 def filter_link_flags(flags, using_lld):
   def is_supported(f):
+    if f.startswith('-l'):
+      return False, False
     if using_lld:
       for flag, takes_arg in UNSUPPORTED_LLD_FLAGS.items():
         # lld allows various flags to have either a single -foo or double --foo

@sbc100
Copy link
Collaborator

sbc100 commented Jun 9, 2021

I recently made some change to how we handle -lc being passed on the command line. It used to be completely ignored. Now it should be converted correctly to -lc or -lc-mt according the other flags.

If you pass -lc without something like -nostdlib you will get -lc twice on the command line (just like you would with clang or gcc). However as long as they are same libc this is harmless enough. The problem is that -lc was not internally converted correctly into -lc-mt.

The relevant changes on the emscripten side the effect this behaviour landed last week.

  1. Map user-specified system libraries to correct variants #14355 - this is the change that should map -lc to -lc-mt internally
  2. Fix for -lGL + AUTO_NATIVE_LIBRARIES=0 #14337 - this change specifically stops swallowing -lc and instead passed it through.
  3. Fix for test_dynamic_link_glemu #14403 - this change fixes a bug there the filesystem was search *before" -lc was mapped to -lc-mt.

I think you will need to either have non of these or all these in order to fix this issue. Specifically I think any revision after #14403 should be good.

@sbc100
Copy link
Collaborator

sbc100 commented Jun 9, 2021

Oh I see the sdk you are using is probably before any of those changes. Do you have the emscripten revision that you are using by chance?

@sbc100
Copy link
Collaborator

sbc100 commented Jun 9, 2021

Its probably not very interesting to you, but passing -lc explictly like rust is doing (without also passing -nostdlib) is kind of bad form. Its the compiler drivers's (clang's) job to add the correct stdlibs to the link line.. but since it works with gcc and clang I guess its not a big deal and this is clearly and emscripten bug here.

@kripken
Copy link
Member

kripken commented Jun 9, 2021

This is using a version between 1.39.19 and 1.39.20 (as that is when LLVM12 was branched, which is what Rust may be using), c147c60c6a1f65c9b8e14b4ffeca3789c962b5be (my diff above for testing purposes is for there).

@RReverser
Copy link
Collaborator Author

Yeah looks like I can and removing "-l" "c" does help. I got past that error, but here's the next one:

wasm-ld: error: --shared-memory is disallowed by std-28368703ab79076a.std.ajl47k1n-cgu.0.rcgu.o because it was not compiled with 'atomics' or 'bulk-memory' features.
emcc: error: '/usr/local/google/home/rreverser/emsdk/upstream/bin/wasm-ld -o /tmp/emscripten_temp_uoftbgz5/emscripten_rust_test.wasm -L/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib -L/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/self-contained /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.0.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.1.rcgu.o -L/usr/local/google/home/rreverser/emsdk/upstream/emscripten/system/local/lib /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.10.rcgu.o -L/usr/local/google/home/rreverser/emsdk/upstream/emscripten/system/lib /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.11.rcgu.o -L/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.12.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.13.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.14.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.15.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.2.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.3.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.4.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.5.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.6.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.7.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.8.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.emscripten_rust_test.91u23cx7-cgu.9.rcgu.o /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.2mgomy6ngcwuvfyk.rcgu.o -L/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps -L/usr/local/google/home/rreverser/emscripten-rust-test/target/debug/deps -L/usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libstd-28368703ab79076a.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libpanic_unwind-c6cbccdff18b55f7.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_demangle-a5ffc5310c14c91c.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libhashbrown-08c349e57dac68c0.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_alloc-ce3363c7b27912b6.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libunwind-686deac84d1c117a.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcfg_if-1aefc0615f4a87c4.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/liblibc-35a51890c8428321.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/liballoc-d41456f5d5a426f6.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/librustc_std_workspace_core-2a7cc4e4deb2c4e8.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcore-997b7450818c8186.rlib /usr/local/google/home/rreverser/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcompiler_builtins-68f9d21fef2c27f2.rlib --fatal-warnings /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc-mt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libcompiler_rt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc-wasm.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc++-mt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc++abi-mt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libdlmalloc-mt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libpthread-mt.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc_rt_wasm.a /usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libsockets-mt.a -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --allow-undefined --import-memory --import-table --shared-memory --export main --export rust_eh_personality --export malloc --export free --export stackSave --export stackRestore --export stackAlloc --export __data_end --export __wasm_call_ctors --export fflush --export __errno_location --export emscripten_get_global_libc --export __pthread_tsd_run_dtors --export pthread_self --export __emscripten_pthread_data_constructor --export emscripten_futex_wake --export memalign --export __cxa_is_pointer_type --export __cxa_can_catch --export htonl --export htons --export ntohs --export emscripten_main_thread_process_queued_calls --export _ZSt18uncaught_exceptionv --export __cxa_find_matching_catch --export setThrew -z stack-size=5242880 --initial-memory=16777216 --no-entry --max-memory=16777216 --global-base=1024' failed (1)

This problem is familiar though - it's because Rust is shipping prebuild stdlib without those Wasm features, so it ends up being incompatible. It's an issue for the wasm32-unknown-unknown target too and requires a stdlib rebuild.

Let me try that...

@RReverser
Copy link
Collaborator Author

Its probably not very interesting to you, but passing -lc explictly like rust is doing (without also passing -nostdlib) is kind of bad form. Its the compiler drivers's (clang's) job to add the correct stdlibs to the link line.

Rust doesn't always link to libc - it depends on the system - so I think it's just not special-casing it in any way and links in the same way as any other discovered external dependency.

@RReverser
Copy link
Collaborator Author

It's an issue for the wasm32-unknown-unknown target too and requires a stdlib rebuild.

Let me try that...

Okay, if I do that (with nightly Rust), I'm running into a different issue:

error: linking with `emcc` failed: exit status: 1
  |
  = note: "emcc" "-s" "DISABLE_EXCEPTION_CATCHING=0" "-L" "/usr/local/google/home/rreverser/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib" "-L" "/usr/local/google/home/rreverser/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/self-contained" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.10c6aknl86nsadzb.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.10qkscqn0lk1vg3m.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.19gx6o2d8f8yw24h.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.19h7usb5c34afm7x.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1c7n8ala87knmev3.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1mwj6q9gwcxlbuvv.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1upp89zhyug1dj7u.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1ur6xhfcvsrg7zbq.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1vmck6c53kjwmcyh.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1yeoye0c014vp5s3.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.2ondu97o8dlj5fp7.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.2zv1u4oearl9qpck.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.35fyz1c273w8tjwu.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3a3jz84npt778czc.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3flpgm8a36tt6wzc.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3gdf4u11je9nb1np.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3l2p58l4iodgi4de.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3nbw2zpdvjq1q6zm.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3so0tp3ope34hpoi.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.4izskd83cciibom6.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.4l97q63twpsad7mf.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.4mpslojb4cp26xn7.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.4ovsw0q04b02n2wy.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.4q1c8qz3i62zgnvl.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.50vsh92t3qhfsg6p.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.58bho0n0cvz8dryb.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.5dshxqms46wndbqo.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.7pv3iuzok4bw7yc.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.qgq21zdvi291kko.rcgu.o" "-o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.js" "-s" "EXPORTED_FUNCTIONS=[\"_main\",\"_rust_eh_personality\"]" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.2mgomy6ngcwuvfyk.rcgu.o" "-O0" "--memory-init-file" "0" "-g4" "-s" "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=[]" "-L" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps" "-L" "/usr/local/google/home/rreverser/emscripten-rust-test/target/debug/deps" "-L" "/usr/local/google/home/rreverser/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libstd-5c197dc43b84d266.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libpanic_unwind-5b43ad753fe7387e.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libstd_detect-9e02fe8354ed531b.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/librustc_demangle-5ab98af3f7806bcc.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libhashbrown-f4c243a84bf9aadb.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/librustc_std_workspace_alloc-b363f5165f29ed7b.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libunwind-6bcb34ecf8219f84.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libcfg_if-40b7f98c5443619d.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/liblibc-3167e9f8d3213d35.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/liballoc-498348f41ca393ef.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/librustc_std_workspace_core-2c974e4c636dba96.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libcore-0af68ee05f233079.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libcompiler_builtins-e0db4ac8fcd2f860.rlib" "-l" "c" "-pthread" "-s" "PTHREAD_POOL_SIZE=1" "-s" "ERROR_ON_UNDEFINED_SYMBOLS=1" "-s" "ASSERTIONS=1" "-s" "ABORTING_MALLOC=0" "-Wl,--fatal-warnings"
  = note: cache:INFO: generating system asset: is_vanilla.txt... (this will be cached in "/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/is_vanilla.txt" for subsequent builds)
          cache:INFO:  - ok
          cache:INFO: generating system library: libc-mt.a... (this will be cached in "/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc-mt.a" for subsequent builds)
          cache:INFO:  - ok
          cache:INFO: generating system library: libcompiler_rt.a... (this will be cached in "/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libcompiler_rt.a" for subsequent builds)
          cache:INFO:  - ok
          cache:INFO: generating system library: libc-wasm.a... (this will be cached in "/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc-wasm.a" for subsequent builds)
          cache:INFO:  - ok
          cache:INFO: generating system library: libc++-mt.a... (this will be cached in "/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc++-mt.a" for subsequent builds)
          cache:INFO:  - ok
          cache:INFO: generating system library: libc++abi-mt.a... (this will be cached in "/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc++abi-mt.a" for subsequent builds)
          cache:INFO:  - ok
          cache:INFO: generating system library: libdlmalloc-mt.a... (this will be cached in "/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libdlmalloc-mt.a" for subsequent builds)
          cache:INFO:  - ok
          cache:INFO: generating system library: libpthread-mt.a... (this will be cached in "/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libpthread-mt.a" for subsequent builds)
          cache:INFO:  - ok
          cache:INFO: generating system library: libc_rt_wasm.a... (this will be cached in "/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libc_rt_wasm.a" for subsequent builds)
          cache:INFO:  - ok
          cache:INFO: generating system library: libsockets-mt.a... (this will be cached in "/usr/local/google/home/rreverser/emsdk/upstream/emscripten/cache/wasm/libsockets-mt.a" for subsequent builds)
          cache:INFO:  - ok
          wasm-ld: error: /usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1upp89zhyug1dj7u.rcgu.o: Bad relocation type: 
          emcc: error: '/usr/local/google/home/rreverser/emsdk/upstream/bin/wasm-ld @/tmp/emscripten_w8_rj767.rsp' failed (1)

@kripken
Copy link
Member

kripken commented Jun 9, 2021

"Bad relocation type" may be due to using incompatible LLVMs. So we need to figure out if Rust is using LLVM from July 2020 or April 2021. If it's the latter, then trying emsdk install 756ea3d4647108e1449de290eb56b1e73931500e might work (but that is not precise enough without knowing the specific LLVM commit Rust uses, and not just the date).

@tlively
Copy link
Member

tlively commented Jun 9, 2021

Please try with 2.0.13, which is the first release after llvmorg-13-init (see #14394 (comment)).

@RReverser
Copy link
Collaborator Author

Running again into libc vs libc-mt errors (I guess 2.0.13 didn't yet have those patches).

So again, I copy-paste command and manually remove "-l" "c" and now running into another error:

error: undefined symbol: __gxx_personality_v0 (referenced by top-level compiled C/C++ code)
warning: Link with `-s LLD_REPORT_UNDEFINED` to get more information on undefined symbols
warning: To disable errors for undefined symbols use `-s ERROR_ON_UNDEFINED_SYMBOLS=0`
warning: ___gxx_personality_v0 may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
Error: Aborting compilation due to previous errors

@sbc100
Copy link
Collaborator

sbc100 commented Jun 9, 2021

Can you include the full failing link command? __gxx_personality_v0 looks related to exception handling.. I think this symbol should not exist if the emscripten exception handling lowering passes are run. Are the rust objects not built with wasm32-emscripten perhaps? Perhaps compiling them with -fno-exceptions would help?

@sbc100
Copy link
Collaborator

sbc100 commented Jun 9, 2021

You could also give LLD_REPORT_UNDEFINED a go.. it should tell which which object exactly if referring to that symbol.

@RReverser
Copy link
Collaborator Author

Can you include the full failing link command?

Sure:

"emcc" "-s" "DISABLE_EXCEPTION_CATCHING=0" "-L" "/usr/local/google/home/rreverser/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib" "-L" "/usr/local/google/home/rreverser/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/self-contained" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.10c6aknl86nsadzb.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.10qkscqn0lk1vg3m.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.19gx6o2d8f8yw24h.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.19h7usb5c34afm7x.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1c7n8ala87knmev3.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1mwj6q9gwcxlbuvv.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1upp89zhyug1dj7u.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1ur6xhfcvsrg7zbq.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1vmck6c53kjwmcyh.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.1yeoye0c014vp5s3.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.2ondu97o8dlj5fp7.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.2zv1u4oearl9qpck.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.35fyz1c273w8tjwu.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3a3jz84npt778czc.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3flpgm8a36tt6wzc.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3gdf4u11je9nb1np.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3l2p58l4iodgi4de.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3nbw2zpdvjq1q6zm.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.3so0tp3ope34hpoi.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.4izskd83cciibom6.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.4l97q63twpsad7mf.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.4mpslojb4cp26xn7.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.4ovsw0q04b02n2wy.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.4q1c8qz3i62zgnvl.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.50vsh92t3qhfsg6p.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.58bho0n0cvz8dryb.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.5dshxqms46wndbqo.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.7pv3iuzok4bw7yc.rcgu.o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.qgq21zdvi291kko.rcgu.o" "-o" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.js" "-s" "EXPORTED_FUNCTIONS=[\"_main\",\"_rust_eh_personality\"]" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/emscripten_rust_test.2mgomy6ngcwuvfyk.rcgu.o" "-O0" "--memory-init-file" "0" "-g4" "-s" "DEFAULT_LIBRARY_FUNCS_TO_INCLUDE=[]" "-L" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps" "-L" "/usr/local/google/home/rreverser/emscripten-rust-test/target/debug/deps" "-L" "/usr/local/google/home/rreverser/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libstd-5c197dc43b84d266.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libpanic_unwind-5b43ad753fe7387e.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libstd_detect-9e02fe8354ed531b.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/librustc_demangle-5ab98af3f7806bcc.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libhashbrown-f4c243a84bf9aadb.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/librustc_std_workspace_alloc-b363f5165f29ed7b.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libunwind-6bcb34ecf8219f84.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libcfg_if-40b7f98c5443619d.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/liblibc-3167e9f8d3213d35.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/liballoc-498348f41ca393ef.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/librustc_std_workspace_core-2c974e4c636dba96.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libcore-0af68ee05f233079.rlib" "/usr/local/google/home/rreverser/emscripten-rust-test/target/wasm32-unknown-emscripten/debug/deps/libcompiler_builtins-e0db4ac8fcd2f860.rlib" "-pthread" "-s" "PTHREAD_POOL_SIZE=1" "-s" "ERROR_ON_UNDEFINED_SYMBOLS=1" "-s" "ASSERTIONS=1" "-s" "ABORTING_MALLOC=0" "-Wl,--fatal-warnings"

FWIW that's the same error that was reported by someone on StackOverflow (which is where this whole investigation started): https://stackoverflow.com/questions/67474533/error-in-compiling-rust-into-webassembly-using-emscripten-on-windows

@RReverser
Copy link
Collaborator Author

RReverser commented Jun 9, 2021

Perhaps compiling them with -fno-exceptions would help?

I think that's compile-time flag? I can't modify those if so (well I probably can via those env vars you once shown me, but that's not very accessible). I can only add link flags in the config.

That said, it looks like command already has "-s" "DISABLE_EXCEPTION_CATCHING=0" so it shouldn't matter?

Trying -s LLD_REPORT_UNDEFINED...

@RReverser
Copy link
Collaborator Author

It didn't give me more details (or maybe missed it), but removing ERROR_ON_UNDEFINED_SYMBOLS=1 from command above helped and I could finally execute the result in Node.

It's all pretty difficult right now due to those issues, but it's good to know it can work. I've pushed changes and description of issues to the same repo if someone wants to take a look and play with it: https://github.com/RReverser/emscripten-rust-test

@tmarkovski
Copy link

May be fixed by disabling the duplicate error abort. See comment - rust-lang/rust#85821 (comment)

@RReverser
Copy link
Collaborator Author

Looks like the original repo now compiles & runs successfully, so closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants