about summary refs log tree commit diff
diff options
context:
space:
mode:
authorWeihang Lo <me@weihanglo.tw>2022-11-24 00:58:58 +0000
committerWeihang Lo <me@weihanglo.tw>2022-11-24 00:59:04 +0000
commit433d471a1a06b5852c7f6b5d276725933d8ddce6 (patch)
tree9907b66ff95cf86897e9ba48a3718c289003db79
parent70f8737b2f5d3bf7d6b784fad00b663b7ff9feda (diff)
downloadrust-433d471a1a06b5852c7f6b5d276725933d8ddce6.tar.gz
rust-433d471a1a06b5852c7f6b5d276725933d8ddce6.zip
rustc_codegen_ssa: write `.dwp` in a streaming fashion
-rw-r--r--compiler/rustc_codegen_ssa/src/back/link.rs9
1 files changed, 5 insertions, 4 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs
index 2091730af22..762430c6187 100644
--- a/compiler/rustc_codegen_ssa/src/back/link.rs
+++ b/compiler/rustc_codegen_ssa/src/back/link.rs
@@ -676,8 +676,7 @@ fn link_dwarf_object<'a>(
             thorin::MissingReferencedObjectBehaviour::Skip,
         )?;
 
-        let output = package.finish()?.write()?;
-        let mut output_stream = BufWriter::new(
+        let output_stream = BufWriter::new(
             OpenOptions::new()
                 .read(true)
                 .write(true)
@@ -685,8 +684,10 @@ fn link_dwarf_object<'a>(
                 .truncate(true)
                 .open(dwp_out_filename)?,
         );
-        output_stream.write_all(&output)?;
-        output_stream.flush()?;
+        let mut output_stream = object::write::StreamingBuffer::new(output_stream);
+        package.finish()?.emit(&mut output_stream)?;
+        output_stream.result()?;
+        output_stream.into_inner().flush()?;
 
         Ok(())
     }) {