about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2021-06-04 16:35:19 +0200
committerbjorn3 <bjorn3@users.noreply.github.com>2022-06-03 16:46:20 +0000
commita2591639ec714a4c415ae432353ae3413ac18b67 (patch)
treefeba7108159014a81e5ee6543767e2eaf25ca446
parent62a4f91a5a7c8c89e3eb681e6218d637ef419181 (diff)
downloadrust-a2591639ec714a4c415ae432353ae3413ac18b67.tar.gz
rust-a2591639ec714a4c415ae432353ae3413ac18b67.zip
Avoid rustc_serialize in linker.rs
-rw-r--r--compiler/rustc_codegen_ssa/src/back/linker.rs29
1 files changed, 13 insertions, 16 deletions
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);