From 18262cfb1b079cb14c98d3d5e5859351bafd36d9 Mon Sep 17 00:00:00 2001 From: Per Lindgren <per.lindgren@ltu.se> Date: Thu, 15 Nov 2018 14:57:00 +0100 Subject: [PATCH] create args and run opt --- src/main.rs | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index fa72331..7758096 100644 --- a/src/main.rs +++ b/src/main.rs @@ -80,7 +80,7 @@ fn main() { // print full command for debugging purposes eprintln!("{:?}", c); - // spawn process and drive it completion while replicating its stderr in ours + // spawn process and drive it until completion while replicating its stderr in ours let mut p = c.spawn().unwrap(); let mut pstderr = p.stderr.take().unwrap(); let mut buf = [0; 1024]; @@ -102,6 +102,44 @@ fn main() { let out = parse_out(str::from_utf8(&output).unwrap()); println!("{:?}", out); + + use std::fmt::Write; + let mut s = String::new(); + write!( + &mut s, + "{}/{}{}.ll", + out.out_dir.expect("--out-dir missing"), + out.crate_name.expect("--crate-name missing"), + out.hash.expect("extra-filename missing") + ) + .expect("internal error"); + + println!("s: {}", s); + + let mut c = Command::new("opt"); + c.arg("-analyze").arg("-print-callgraph").arg(s); + + let mut p = c.spawn().unwrap(); + let mut pstderr = p.stderr.take().unwrap(); + let mut buf = [0; 1024]; + let mut output = vec![]; + + let stderr = io::stderr(); + let mut stderr = stderr.lock(); + loop { + if let Ok(n) = pstderr.read(&mut buf) { + stderr.write(&buf[..n]).unwrap(); + output.extend_from_slice(&buf[..n]); + } + + if let Some(status) = p.try_wait().unwrap() { + assert!(status.success()); + break; + } + } + + // -analyze -print-callgraph /home/pln/rust/stack-test/target/thumbv7m-none-eabi/release/deps/stack_test-87f399c0e9e1fb93.ll + // } else { // panic!("could not determine hash, please recompile in `--release` mode"); // } -- GitLab