102155232SChris Fallin use std::env;
202155232SChris Fallin use std::process::Command;
394740588SNick Fitzgerald use wasmtime::{Result, bail, error::Context as _};
402155232SChris Fallin 
502155232SChris Fallin #[derive(Debug, Clone, Copy, PartialEq, Eq)]
602155232SChris Fallin pub enum DwarfDumpSection {
702155232SChris Fallin     DebugInfo,
802155232SChris Fallin }
902155232SChris Fallin 
get_dwarfdump(obj: &str, section: DwarfDumpSection) -> Result<String>1002155232SChris Fallin pub fn get_dwarfdump(obj: &str, section: DwarfDumpSection) -> Result<String> {
1102155232SChris Fallin     let dwarfdump = env::var("DWARFDUMP").unwrap_or("llvm-dwarfdump".to_string());
1202155232SChris Fallin     let section_flag = match section {
1302155232SChris Fallin         DwarfDumpSection::DebugInfo => "-debug-info",
1402155232SChris Fallin     };
1502155232SChris Fallin     let output = Command::new(&dwarfdump)
1602155232SChris Fallin         .args(&[section_flag, obj])
1702155232SChris Fallin         .output()
18*57b4bf56SNick Fitzgerald         .with_context(|| format!("failed to spawn `{dwarfdump}`"))?;
1902155232SChris Fallin     if !output.status.success() {
2002155232SChris Fallin         bail!(
2102155232SChris Fallin             "failed to execute {}: {}",
2202155232SChris Fallin             dwarfdump,
2302155232SChris Fallin             String::from_utf8_lossy(&output.stderr),
2402155232SChris Fallin         );
2502155232SChris Fallin     }
2602155232SChris Fallin     Ok(String::from_utf8_lossy(&output.stdout).to_string())
2702155232SChris Fallin }
28