Add print-func command to waffle-util.
This commit is contained in:
parent
e84a5368ef
commit
1311069c6a
|
@ -5,7 +5,7 @@ use log::debug;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use structopt::StructOpt;
|
use structopt::StructOpt;
|
||||||
use waffle::InterpContext;
|
use waffle::InterpContext;
|
||||||
use waffle::{FrontendOptions, Module};
|
use waffle::{entity::EntityRef, FrontendOptions, Func, Module};
|
||||||
|
|
||||||
#[derive(Debug, StructOpt)]
|
#[derive(Debug, StructOpt)]
|
||||||
#[structopt(name = "waffle-util", about = "WAFFLE utility.")]
|
#[structopt(name = "waffle-util", about = "WAFFLE utility.")]
|
||||||
|
@ -40,6 +40,13 @@ enum Command {
|
||||||
#[structopt(help = "Wasm file to parse")]
|
#[structopt(help = "Wasm file to parse")]
|
||||||
wasm: PathBuf,
|
wasm: PathBuf,
|
||||||
},
|
},
|
||||||
|
#[structopt(name = "print-func", about = "Parse Wasm and print one function body")]
|
||||||
|
PrintFunc {
|
||||||
|
#[structopt(help = "Wasm file to parse")]
|
||||||
|
wasm: PathBuf,
|
||||||
|
#[structopt(help = "Index of Wasm function to print")]
|
||||||
|
func: usize,
|
||||||
|
},
|
||||||
#[structopt(name = "roundtrip", about = "Round-trip Wasm through IR")]
|
#[structopt(name = "roundtrip", about = "Round-trip Wasm through IR")]
|
||||||
RoundTrip {
|
RoundTrip {
|
||||||
#[structopt(help = "Wasm file to parse", short = "i")]
|
#[structopt(help = "Wasm file to parse", short = "i")]
|
||||||
|
@ -85,6 +92,19 @@ fn main() -> Result<()> {
|
||||||
apply_options(&opts, &mut module)?;
|
apply_options(&opts, &mut module)?;
|
||||||
println!("{}", module.display());
|
println!("{}", module.display());
|
||||||
}
|
}
|
||||||
|
Command::PrintFunc { wasm, func } => {
|
||||||
|
let bytes = std::fs::read(wasm)?;
|
||||||
|
debug!("Loaded {} bytes of Wasm data", bytes.len());
|
||||||
|
let mut module = Module::from_wasm_bytes(&bytes[..], &options)?;
|
||||||
|
apply_options(&opts, &mut module)?;
|
||||||
|
println!(
|
||||||
|
"{}",
|
||||||
|
module.funcs[Func::new(*func)]
|
||||||
|
.body()
|
||||||
|
.unwrap()
|
||||||
|
.display_verbose("", Some(&module))
|
||||||
|
);
|
||||||
|
}
|
||||||
Command::RoundTrip { input, output } => {
|
Command::RoundTrip { input, output } => {
|
||||||
let bytes = std::fs::read(input)?;
|
let bytes = std::fs::read(input)?;
|
||||||
debug!("Loaded {} bytes of Wasm data", bytes.len());
|
debug!("Loaded {} bytes of Wasm data", bytes.len());
|
||||||
|
|
Loading…
Reference in a new issue