1 use std::env;
2 use std::process::Command;
3 use wasmtime::{Result, bail, error::Context as _};
4
5 #[derive(Debug, Clone, Copy, PartialEq, Eq)]
6 pub enum DwarfDumpSection {
7 DebugInfo,
8 }
9
get_dwarfdump(obj: &str, section: DwarfDumpSection) -> Result<String>10 pub fn get_dwarfdump(obj: &str, section: DwarfDumpSection) -> Result<String> {
11 let dwarfdump = env::var("DWARFDUMP").unwrap_or("llvm-dwarfdump".to_string());
12 let section_flag = match section {
13 DwarfDumpSection::DebugInfo => "-debug-info",
14 };
15 let output = Command::new(&dwarfdump)
16 .args(&[section_flag, obj])
17 .output()
18 .with_context(|| format!("failed to spawn `{dwarfdump}`"))?;
19 if !output.status.success() {
20 bail!(
21 "failed to execute {}: {}",
22 dwarfdump,
23 String::from_utf8_lossy(&output.stderr),
24 );
25 }
26 Ok(String::from_utf8_lossy(&output.stdout).to_string())
27 }
28