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