diff options
| author | Sergey Pepyakin <s.pepyakin@gmail.com> | 2017-01-19 22:31:57 +0300 |
|---|---|---|
| committer | Sergey Pepyakin <s.pepyakin@gmail.com> | 2017-01-19 22:33:15 +0300 |
| commit | 2bafbba655888c288e43ce107cc4bfdf6e758ca3 (patch) | |
| tree | de46384c7a3ae8e6027292dcc0f855c115e903da | |
| parent | 47965f51e6d91ae33bf2b0da0f5510f03766feac (diff) | |
| download | rust-2bafbba655888c288e43ce107cc4bfdf6e758ca3.tar.gz rust-2bafbba655888c288e43ce107cc4bfdf6e758ca3.zip | |
tell emcc stip exception handling if panic rt used
| -rw-r--r-- | src/librustc_back/target/asmjs_unknown_emscripten.rs | 1 | ||||
| -rw-r--r-- | src/librustc_back/target/mod.rs | 5 | ||||
| -rw-r--r-- | src/librustc_back/target/wasm32_unknown_emscripten.rs | 1 | ||||
| -rw-r--r-- | src/librustc_trans/back/link.rs | 6 |
4 files changed, 13 insertions, 0 deletions
diff --git a/src/librustc_back/target/asmjs_unknown_emscripten.rs b/src/librustc_back/target/asmjs_unknown_emscripten.rs index 2dbaeaf26e9..4d38b0d1705 100644 --- a/src/librustc_back/target/asmjs_unknown_emscripten.rs +++ b/src/librustc_back/target/asmjs_unknown_emscripten.rs @@ -22,6 +22,7 @@ pub fn target() -> Result<Target, String> { linker_is_gnu: true, allow_asm: false, obj_is_bitcode: true, + is_like_emscripten: true, max_atomic_width: Some(32), post_link_args: vec!["-s".to_string(), "ERROR_ON_UNDEFINED_SYMBOLS=1".to_string()], target_family: Some("unix".to_string()), diff --git a/src/librustc_back/target/mod.rs b/src/librustc_back/target/mod.rs index 5afa85d1552..9c30057d418 100644 --- a/src/librustc_back/target/mod.rs +++ b/src/librustc_back/target/mod.rs @@ -330,6 +330,10 @@ pub struct TargetOptions { /// Whether the target toolchain is like Android's. Only useful for compiling against Android. /// Defaults to false. pub is_like_android: bool, + /// Whether the target toolchain is like Emscripten's. Only useful for compiling with + /// Emscripten toolchain. + /// Defaults to false. + pub is_like_emscripten: bool, /// Whether the linker support GNU-like arguments such as -O. Defaults to false. pub linker_is_gnu: bool, /// The MinGW toolchain has a known issue that prevents it from correctly @@ -428,6 +432,7 @@ impl Default for TargetOptions { is_like_solaris: false, is_like_windows: false, is_like_android: false, + is_like_emscripten: false, is_like_msvc: false, linker_is_gnu: false, allows_weak_linkage: true, diff --git a/src/librustc_back/target/wasm32_unknown_emscripten.rs b/src/librustc_back/target/wasm32_unknown_emscripten.rs index a06980767fd..b1967fa8f37 100644 --- a/src/librustc_back/target/wasm32_unknown_emscripten.rs +++ b/src/librustc_back/target/wasm32_unknown_emscripten.rs @@ -24,6 +24,7 @@ pub fn target() -> Result<Target, String> { linker_is_gnu: true, allow_asm: false, obj_is_bitcode: true, + is_like_emscripten: true, max_atomic_width: Some(32), post_link_args: vec!["-s".to_string(), "BINARYEN=1".to_string(), "-s".to_string(), "ERROR_ON_UNDEFINED_SYMBOLS=1".to_string()], diff --git a/src/librustc_trans/back/link.rs b/src/librustc_trans/back/link.rs index defbb44448a..2da042da8aa 100644 --- a/src/librustc_trans/back/link.rs +++ b/src/librustc_trans/back/link.rs @@ -29,6 +29,7 @@ use rustc::dep_graph::DepNode; use rustc::hir::def_id::CrateNum; use rustc::hir::svh::Svh; use rustc_back::tempdir::TempDir; +use rustc_back::PanicStrategy; use rustc_incremental::IncrementalHashesMap; use std::ascii; @@ -712,6 +713,11 @@ fn link_natively(sess: &Session, cmd.arg(root.join(obj)); } + if sess.target.target.options.is_like_emscripten && + sess.panic_strategy() == PanicStrategy::Abort { + cmd.arg("-s DISABLE_EXCEPTION_CATCHING=1"); + } + { let mut linker = trans.linker_info.to_linker(&mut cmd, &sess); link_args(&mut *linker, sess, crate_type, tmpdir, |
