diff --git a/src/all_stark.rs b/src/all_stark.rs index 12bd1eb5..9d98c4b1 100644 --- a/src/all_stark.rs +++ b/src/all_stark.rs @@ -51,9 +51,9 @@ impl, const D: usize> Default for AllStark { } impl, const D: usize> AllStark { - pub(crate) fn num_lookups_helper_columns(&self, config: &StarkConfig) -> [usize; 5] { + pub(crate) fn num_lookups_helper_columns(&self, config: &StarkConfig) -> [usize; 6] { [ - // self.arithmetic_stark.num_lookup_helper_columns(config), + self.arithmetic_stark.num_lookup_helper_columns(config), // self.byte_packing_stark.num_lookup_helper_columns(config), self.cpu_stark.num_lookup_helper_columns(config), self.keccak_stark.num_lookup_helper_columns(config), diff --git a/src/cpu/kernel/assembler.rs b/src/cpu/kernel/assembler.rs index 4b56e43c..8093f297 100644 --- a/src/cpu/kernel/assembler.rs +++ b/src/cpu/kernel/assembler.rs @@ -2,6 +2,9 @@ use keccak_hash::keccak; use once_cell::sync::Lazy; use serde::{Deserialize, Serialize}; use std::collections::HashMap; +use std::fs::File; +use std::io::BufReader; +use std::io::Read; #[derive(PartialEq, Eq, Debug, Serialize, Deserialize)] pub struct Kernel { @@ -15,14 +18,21 @@ pub struct Kernel { pub(crate) global_labels: HashMap, } +// FIXME +pub const KERNLE_FILE: &str = "test-vectors/hello"; + // FIXME: impl the mips vm pub(crate) fn combined_kernel() -> Kernel { - let code: Vec = vec![]; + let mut reader = BufReader::new(File::open("test-vectors/hello").unwrap()); + let mut code = Vec::new(); + reader.read_to_end(&mut code).unwrap(); + let code_hash_bytes = keccak(&code).0; let code_hash_be = core::array::from_fn(|i| { u32::from_le_bytes(core::array::from_fn(|j| code_hash_bytes[i * 4 + j])) }); let code_hash = code_hash_be.map(u32::from_be); + log::debug!("code_hash: {:?}", code_hash); Kernel { code, diff --git a/src/cpu/kernel/load_elf.rs b/src/cpu/kernel/load_elf.rs index 95daffa3..27dbdfc0 100644 --- a/src/cpu/kernel/load_elf.rs +++ b/src/cpu/kernel/load_elf.rs @@ -107,10 +107,12 @@ mod test { let mut buffer = Vec::new(); reader.read_to_end(&mut buffer).unwrap(); let max_mem = 0x40000000; - let p = Program::load_elf(&buffer, max_mem).unwrap(); - println!("entry: {}", p.entry); + let _p = Program::load_elf(&buffer, max_mem).unwrap(); + /* + log::debug!("entry: {}", p.entry); p.image.iter().for_each(|(k, v)| { - println!("{}: {}", k, v); + log::debug!("{}: {}", k, v); }) + */ } } diff --git a/src/witness/state.rs b/src/witness/state.rs index 63d6c796..1bee0054 100644 --- a/src/witness/state.rs +++ b/src/witness/state.rs @@ -4,6 +4,10 @@ const KERNEL_CONTEXT: usize = 0; #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub struct RegistersState { + pub gprs: [usize; 32], + pub lo: usize, + pub hi: usize, + pub heap: usize, pub program_counter: usize, pub is_kernel: bool, pub context: usize, @@ -23,7 +27,11 @@ impl Default for RegistersState { fn default() -> Self { Self { // FIXME: fill in pc - program_counter: 0, + gprs: Default::default(), + lo: 0, + hi: 0, + heap: 0, + program_counter: KERNEL.global_labels["entry"], is_kernel: true, context: 0, } diff --git a/test-vectors/hello b/test-vectors/hello new file mode 100644 index 00000000..8145ba23 Binary files /dev/null and b/test-vectors/hello differ