From a2591639ec714a4c415ae432353ae3413ac18b67 Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Fri, 4 Jun 2021 16:35:19 +0200 Subject: Avoid rustc_serialize in linker.rs --- compiler/rustc_codegen_ssa/src/back/linker.rs | 29 ++++++++++++--------------- 1 file changed, 13 insertions(+), 16 deletions(-) (limited to 'compiler/rustc_codegen_ssa/src') diff --git a/compiler/rustc_codegen_ssa/src/back/linker.rs b/compiler/rustc_codegen_ssa/src/back/linker.rs index e4236876463..dca11a8e00c 100644 --- a/compiler/rustc_codegen_ssa/src/back/linker.rs +++ b/compiler/rustc_codegen_ssa/src/back/linker.rs @@ -14,7 +14,6 @@ use rustc_hir::def_id::{CrateNum, LOCAL_CRATE}; use rustc_middle::middle::dependency_format::Linkage; use rustc_middle::middle::exported_symbols::{ExportedSymbol, SymbolExportInfo, SymbolExportKind}; use rustc_middle::ty::TyCtxt; -use rustc_serialize::{json, Encoder}; use rustc_session::config::{self, CrateType, DebugInfo, LinkerPluginLto, Lto, OptLevel, Strip}; use rustc_session::Session; use rustc_span::symbol::Symbol; @@ -1147,26 +1146,24 @@ impl<'a> Linker for EmLinker<'a> { } fn export_symbols(&mut self, _tmpdir: &Path, _crate_type: CrateType, symbols: &[String]) { + use std::fmt::Write; + debug!("EXPORTED SYMBOLS:"); + let mut encoded = "[".to_string(); + let mut symbols = symbols.iter(); + if let Some(first_symbol) = symbols.next() { + write!(encoded, "{:?}", first_symbol).unwrap(); + } + for symbol in symbols { + write!(encoded, ",{:?}", symbol).unwrap(); + } + encoded.push(']'); + debug!("{}", encoded); + self.cmd.arg("-s"); let mut arg = OsString::from("EXPORTED_FUNCTIONS="); - let mut encoded = String::new(); - - { - let mut encoder = json::Encoder::new(&mut encoded); - let res = encoder.emit_seq(symbols.len(), |encoder| { - for (i, sym) in symbols.iter().enumerate() { - encoder.emit_seq_elt(i, |encoder| encoder.emit_str(&("_".to_owned() + sym)))?; - } - Ok(()) - }); - if let Err(e) = res { - self.sess.fatal(&format!("failed to encode exported symbols: {}", e)); - } - } - debug!("{}", encoded); arg.push(encoded); self.cmd.arg(arg); -- cgit 1.4.1-3-g733a5 From 5cc3593c17360edd92977301ca66551a45119619 Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Fri, 6 May 2022 17:20:42 +0200 Subject: Fix emscripten linker invocation --- Cargo.lock | 1 + compiler/rustc_codegen_ssa/Cargo.toml | 1 + compiler/rustc_codegen_ssa/src/back/linker.rs | 19 ++++++------------- 3 files changed, 8 insertions(+), 13 deletions(-) (limited to 'compiler/rustc_codegen_ssa/src') diff --git a/Cargo.lock b/Cargo.lock index e0f6ee6c791..dd1869fb01f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3686,6 +3686,7 @@ dependencies = [ "rustc_span", "rustc_symbol_mangling", "rustc_target", + "serde_json", "smallvec", "snap", "tempfile", diff --git a/compiler/rustc_codegen_ssa/Cargo.toml b/compiler/rustc_codegen_ssa/Cargo.toml index 93b10a07e44..fd8c4f78b2f 100644 --- a/compiler/rustc_codegen_ssa/Cargo.toml +++ b/compiler/rustc_codegen_ssa/Cargo.toml @@ -16,6 +16,7 @@ jobserver = "0.1.22" tempfile = "3.2" thorin-dwp = "0.2" pathdiff = "0.2.0" +serde_json = "1.0.59" snap = "1" smallvec = { version = "1.6.1", features = ["union", "may_dangle"] } regex = "1.4" diff --git a/compiler/rustc_codegen_ssa/src/back/linker.rs b/compiler/rustc_codegen_ssa/src/back/linker.rs index dca11a8e00c..a24e4347839 100644 --- a/compiler/rustc_codegen_ssa/src/back/linker.rs +++ b/compiler/rustc_codegen_ssa/src/back/linker.rs @@ -1146,24 +1146,17 @@ impl<'a> Linker for EmLinker<'a> { } fn export_symbols(&mut self, _tmpdir: &Path, _crate_type: CrateType, symbols: &[String]) { - use std::fmt::Write; - debug!("EXPORTED SYMBOLS:"); - let mut encoded = "[".to_string(); - let mut symbols = symbols.iter(); - if let Some(first_symbol) = symbols.next() { - write!(encoded, "{:?}", first_symbol).unwrap(); - } - for symbol in symbols { - write!(encoded, ",{:?}", symbol).unwrap(); - } - encoded.push(']'); - debug!("{}", encoded); - self.cmd.arg("-s"); let mut arg = OsString::from("EXPORTED_FUNCTIONS="); + let encoded = serde_json::to_string( + &symbols.iter().map(|sym| "_".to_owned() + sym).collect::>(), + ) + .unwrap(); + debug!("{}", encoded); + arg.push(encoded); self.cmd.arg(arg); -- cgit 1.4.1-3-g733a5