vars/
vars.rs

1/// Example of doing variable analysis to all variables that are unions
2use dwat::prelude::*;
3use dwat::Dwarf;
4use std::fs::File;
5use memmap2::Mmap;
6
7fn main() -> anyhow::Result<()> {
8    let mut args = std::env::args().skip(1);
9    let path = args.next().unwrap_or_else(|| {
10        eprintln!("Usage: vars <path>");
11        std::process::exit(1);
12    });
13
14    let file = File::open(path).unwrap();
15    let mmap = unsafe { Mmap::map(&file) }?;
16    let dwarf = Dwarf::load(&*mmap)?;
17
18    let vars = dwarf.get_named_types::<dwat::Variable>()?;
19
20    // find all variables that are of type union
21    // then print the union
22    for (name, var) in vars.into_iter() {
23        let typ = var.get_type(&dwarf)?;
24        if let dwat::Type::Union(u) = typ {
25            println!("{} : {}", name, u.to_string(&dwarf)?)
26        }
27    };
28
29    Ok(())
30}