From e3834a5335834c50dab5d35ff659c94a79d99e1d Mon Sep 17 00:00:00 2001 From: Jacqueline Nabaglo Date: Mon, 27 Jun 2022 18:08:03 -0700 Subject: [PATCH] Util for assembling EVM code to hex (#586) This is just for debugging the kernel. It's fully disposable. --- evm/Cargo.toml | 8 ++++++++ evm/src/bin/assemble.rs | 13 +++++++++++++ evm/src/cpu/kernel/assembler.rs | 2 +- evm/src/cpu/kernel/mod.rs | 11 +++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 evm/src/bin/assemble.rs diff --git a/evm/Cargo.toml b/evm/Cargo.toml index 6522bf0e..513004fe 100644 --- a/evm/Cargo.toml +++ b/evm/Cargo.toml @@ -10,6 +10,7 @@ plonky2_util = { path = "../util" } anyhow = "1.0.40" env_logger = "0.9.0" ethereum-types = "0.13.1" +hex = { version = "0.4.3", optional = true } itertools = "0.10.3" log = "0.4.14" pest = "2.1.3" @@ -18,3 +19,10 @@ rayon = "1.5.1" rand = "0.8.5" rand_chacha = "0.3.1" keccak-rust = { git = "https://github.com/npwardberkeley/keccak-rust" } + +[features] +asmtools = ["hex"] + +[[bin]] +name = "assemble" +required-features = ["asmtools"] diff --git a/evm/src/bin/assemble.rs b/evm/src/bin/assemble.rs new file mode 100644 index 00000000..68eeadf8 --- /dev/null +++ b/evm/src/bin/assemble.rs @@ -0,0 +1,13 @@ +use std::env; +use std::fs; + +use hex::encode; +use plonky2_evm::cpu::kernel::assemble_to_bytes; + +fn main() { + let mut args = env::args(); + args.next(); + let file_contents: Vec<_> = args.map(|path| fs::read_to_string(path).unwrap()).collect(); + let assembled = assemble_to_bytes(&file_contents[..]); + println!("{}", encode(&assembled)); +} diff --git a/evm/src/cpu/kernel/assembler.rs b/evm/src/cpu/kernel/assembler.rs index 8c9c0c2e..fce2016c 100644 --- a/evm/src/cpu/kernel/assembler.rs +++ b/evm/src/cpu/kernel/assembler.rs @@ -13,7 +13,7 @@ const BYTES_PER_OFFSET: u8 = 3; #[derive(PartialEq, Eq, Debug)] pub struct Kernel { - code: Vec, + pub code: Vec, global_labels: HashMap, } diff --git a/evm/src/cpu/kernel/mod.rs b/evm/src/cpu/kernel/mod.rs index d2511063..4dcf9a6c 100644 --- a/evm/src/cpu/kernel/mod.rs +++ b/evm/src/cpu/kernel/mod.rs @@ -3,3 +3,14 @@ mod assembler; mod ast; mod opcodes; mod parser; + +use assembler::assemble; +use parser::parse; + +/// Assemble files, outputting bytes. +/// This is for debugging the kernel only. +pub fn assemble_to_bytes(files: &[String]) -> Vec { + let parsed_files: Vec<_> = files.iter().map(|f| parse(f)).collect(); + let kernel = assemble(parsed_files); + kernel.code +}