2022-06-20 20:32:29 -07:00
|
|
|
//! Loads each kernel assembly file and concatenates them.
|
|
|
|
|
|
|
|
|
|
use itertools::Itertools;
|
2022-07-14 11:31:47 -07:00
|
|
|
use once_cell::sync::Lazy;
|
2022-06-20 20:32:29 -07:00
|
|
|
|
|
|
|
|
use super::assembler::{assemble, Kernel};
|
2022-08-01 14:49:28 -07:00
|
|
|
use crate::cpu::kernel::constants::evm_constants;
|
2022-06-20 20:32:29 -07:00
|
|
|
use crate::cpu::kernel::parser::parse;
|
|
|
|
|
|
2022-07-14 11:31:47 -07:00
|
|
|
pub static KERNEL: Lazy<Kernel> = Lazy::new(combined_kernel);
|
2022-06-20 20:32:29 -07:00
|
|
|
|
|
|
|
|
pub(crate) fn combined_kernel() -> Kernel {
|
|
|
|
|
let files = vec![
|
2022-07-28 15:46:36 -07:00
|
|
|
include_str!("asm/core/bootloader.asm"),
|
|
|
|
|
include_str!("asm/core/create.asm"),
|
|
|
|
|
include_str!("asm/core/create_addresses.asm"),
|
|
|
|
|
include_str!("asm/core/intrinsic_gas.asm"),
|
2022-08-30 13:06:03 -07:00
|
|
|
include_str!("asm/core/invalid.asm"),
|
2022-11-20 12:46:15 -08:00
|
|
|
include_str!("asm/core/jumpdest_analysis.asm"),
|
2022-07-28 15:46:36 -07:00
|
|
|
include_str!("asm/core/nonce.asm"),
|
|
|
|
|
include_str!("asm/core/process_txn.asm"),
|
2022-11-07 12:29:28 -08:00
|
|
|
include_str!("asm/core/syscall.asm"),
|
|
|
|
|
include_str!("asm/core/syscall_stubs.asm"),
|
2022-07-28 15:46:36 -07:00
|
|
|
include_str!("asm/core/terminate.asm"),
|
|
|
|
|
include_str!("asm/core/transfer.asm"),
|
|
|
|
|
include_str!("asm/core/util.asm"),
|
2022-07-30 22:24:11 -07:00
|
|
|
include_str!("asm/curve/bn254/curve_add.asm"),
|
2022-07-31 09:24:04 -07:00
|
|
|
include_str!("asm/curve/bn254/curve_mul.asm"),
|
2022-07-30 22:24:11 -07:00
|
|
|
include_str!("asm/curve/bn254/moddiv.asm"),
|
|
|
|
|
include_str!("asm/curve/common.asm"),
|
|
|
|
|
include_str!("asm/curve/secp256k1/curve_mul.asm"),
|
|
|
|
|
include_str!("asm/curve/secp256k1/curve_add.asm"),
|
2022-07-31 09:24:04 -07:00
|
|
|
include_str!("asm/curve/secp256k1/ecrecover.asm"),
|
2022-07-30 22:24:11 -07:00
|
|
|
include_str!("asm/curve/secp256k1/inverse_scalar.asm"),
|
2022-07-31 09:24:04 -07:00
|
|
|
include_str!("asm/curve/secp256k1/lift_x.asm"),
|
|
|
|
|
include_str!("asm/curve/secp256k1/moddiv.asm"),
|
2022-10-03 14:10:10 -07:00
|
|
|
include_str!("asm/exp.asm"),
|
2022-10-20 16:18:41 -04:00
|
|
|
include_str!("asm/fields/fp6_macros.asm"),
|
|
|
|
|
include_str!("asm/fields/fp6_mul.asm"),
|
|
|
|
|
include_str!("asm/fields/fp12_mul.asm"),
|
2022-07-28 04:36:33 +10:00
|
|
|
include_str!("asm/halt.asm"),
|
2022-11-30 17:46:11 -08:00
|
|
|
include_str!("asm/hash/blake/addresses.asm"),
|
2022-11-09 10:29:13 -08:00
|
|
|
include_str!("asm/hash/blake/compression.asm"),
|
|
|
|
|
include_str!("asm/hash/blake/g_functions.asm"),
|
2022-11-30 17:46:11 -08:00
|
|
|
include_str!("asm/hash/blake/hash.asm"),
|
2022-11-09 13:48:56 -08:00
|
|
|
include_str!("asm/hash/blake/iv.asm"),
|
|
|
|
|
include_str!("asm/hash/blake/ops.asm"),
|
|
|
|
|
include_str!("asm/hash/blake/permutations.asm"),
|
|
|
|
|
include_str!("asm/hash/blake/store.asm"),
|
2022-11-10 15:24:08 -08:00
|
|
|
include_str!("asm/hash/blake/util.asm"),
|
2022-12-09 09:34:12 -08:00
|
|
|
include_str!("asm/hash/ripemd/box.asm"),
|
|
|
|
|
include_str!("asm/hash/ripemd/compression.asm"),
|
|
|
|
|
include_str!("asm/hash/ripemd/constants.asm"),
|
|
|
|
|
include_str!("asm/hash/ripemd/functions.asm"),
|
|
|
|
|
include_str!("asm/hash/ripemd/main.asm"),
|
|
|
|
|
include_str!("asm/hash/ripemd/memory.asm"),
|
|
|
|
|
include_str!("asm/hash/ripemd/update.asm"),
|
|
|
|
|
include_str!("asm/hash/sha2/compression.asm"),
|
|
|
|
|
include_str!("asm/hash/sha2/constants.asm"),
|
|
|
|
|
include_str!("asm/hash/sha2/message_schedule.asm"),
|
|
|
|
|
include_str!("asm/hash/sha2/ops.asm"),
|
|
|
|
|
include_str!("asm/hash/sha2/store_pad.asm"),
|
|
|
|
|
include_str!("asm/hash/sha2/temp_words.asm"),
|
|
|
|
|
include_str!("asm/hash/sha2/write_length.asm"),
|
2022-09-29 23:09:32 -07:00
|
|
|
include_str!("asm/main.asm"),
|
2022-08-03 22:09:36 -07:00
|
|
|
include_str!("asm/memory/core.asm"),
|
|
|
|
|
include_str!("asm/memory/memcpy.asm"),
|
2022-08-03 22:54:17 -07:00
|
|
|
include_str!("asm/memory/metadata.asm"),
|
|
|
|
|
include_str!("asm/memory/packing.asm"),
|
2022-12-06 23:05:47 -08:00
|
|
|
include_str!("asm/memory/syscalls.asm"),
|
2022-08-03 22:09:36 -07:00
|
|
|
include_str!("asm/memory/txn_fields.asm"),
|
2022-10-17 11:31:08 -07:00
|
|
|
include_str!("asm/mpt/accounts.asm"),
|
2022-10-16 22:55:09 -07:00
|
|
|
include_str!("asm/mpt/delete/delete.asm"),
|
|
|
|
|
include_str!("asm/mpt/hash/hash.asm"),
|
|
|
|
|
include_str!("asm/mpt/hash/hash_trie_specific.asm"),
|
2022-09-30 13:04:16 -07:00
|
|
|
include_str!("asm/mpt/hex_prefix.asm"),
|
2022-10-16 22:55:09 -07:00
|
|
|
include_str!("asm/mpt/insert/insert.asm"),
|
|
|
|
|
include_str!("asm/mpt/insert/insert_extension.asm"),
|
|
|
|
|
include_str!("asm/mpt/insert/insert_leaf.asm"),
|
|
|
|
|
include_str!("asm/mpt/insert/insert_trie_specific.asm"),
|
|
|
|
|
include_str!("asm/mpt/load/load.asm"),
|
|
|
|
|
include_str!("asm/mpt/load/load_trie_specific.asm"),
|
2022-09-18 09:45:31 -07:00
|
|
|
include_str!("asm/mpt/read.asm"),
|
2022-10-17 11:31:08 -07:00
|
|
|
include_str!("asm/mpt/storage/storage_read.asm"),
|
|
|
|
|
include_str!("asm/mpt/storage/storage_write.asm"),
|
2022-09-18 09:45:31 -07:00
|
|
|
include_str!("asm/mpt/util.asm"),
|
2022-10-03 14:57:04 -07:00
|
|
|
include_str!("asm/ripemd/box.asm"),
|
|
|
|
|
include_str!("asm/ripemd/compression.asm"),
|
|
|
|
|
include_str!("asm/ripemd/constants.asm"),
|
|
|
|
|
include_str!("asm/ripemd/functions.asm"),
|
|
|
|
|
include_str!("asm/ripemd/main.asm"),
|
|
|
|
|
include_str!("asm/ripemd/memory.asm"),
|
|
|
|
|
include_str!("asm/ripemd/update.asm"),
|
2022-12-09 09:34:12 -08:00
|
|
|
include_str!("asm/rlp/encode.asm"),
|
2022-10-03 14:10:10 -07:00
|
|
|
include_str!("asm/rlp/decode.asm"),
|
2022-12-06 23:05:47 -08:00
|
|
|
include_str!("asm/rlp/encode.asm"),
|
|
|
|
|
include_str!("asm/rlp/encode_rlp_string.asm"),
|
2022-10-03 14:40:49 -07:00
|
|
|
include_str!("asm/rlp/num_bytes.asm"),
|
2022-10-03 14:10:10 -07:00
|
|
|
include_str!("asm/rlp/read_to_memory.asm"),
|
2022-11-09 10:47:15 +11:00
|
|
|
include_str!("asm/shift.asm"),
|
2022-07-06 19:47:58 -07:00
|
|
|
include_str!("asm/transactions/router.asm"),
|
|
|
|
|
include_str!("asm/transactions/type_0.asm"),
|
|
|
|
|
include_str!("asm/transactions/type_1.asm"),
|
|
|
|
|
include_str!("asm/transactions/type_2.asm"),
|
2022-07-31 09:28:16 -07:00
|
|
|
include_str!("asm/util/assertions.asm"),
|
|
|
|
|
include_str!("asm/util/basic_macros.asm"),
|
2022-10-17 11:31:08 -07:00
|
|
|
include_str!("asm/util/keccak.asm"),
|
2022-10-21 18:11:27 +02:00
|
|
|
include_str!("asm/account_code.asm"),
|
2022-10-28 11:15:43 +02:00
|
|
|
include_str!("asm/balance.asm"),
|
2022-06-20 20:32:29 -07:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
let parsed_files = files.iter().map(|f| parse(f)).collect_vec();
|
2022-07-25 09:36:26 -07:00
|
|
|
assemble(parsed_files, evm_constants(), true)
|
2022-06-20 20:32:29 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
|
mod tests {
|
2022-08-08 11:37:35 -07:00
|
|
|
use env_logger::{try_init_from_env, Env, DEFAULT_FILTER_ENV};
|
2022-07-13 09:53:44 -07:00
|
|
|
use log::debug;
|
2022-07-07 18:06:24 +02:00
|
|
|
|
2022-08-01 16:36:36 -07:00
|
|
|
use crate::cpu::kernel::aggregator::combined_kernel;
|
2022-06-20 20:32:29 -07:00
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn make_kernel() {
|
2022-07-31 09:22:13 -07:00
|
|
|
let _ = try_init_from_env(Env::default().filter_or(DEFAULT_FILTER_ENV, "debug"));
|
2022-07-13 09:53:44 -07:00
|
|
|
|
2022-06-20 20:32:29 -07:00
|
|
|
// Make sure we can parse and assemble the entire kernel.
|
2022-07-07 08:59:53 -07:00
|
|
|
let kernel = combined_kernel();
|
2022-07-30 22:31:07 -07:00
|
|
|
debug!("Total kernel size: {} bytes", kernel.code.len());
|
2022-06-20 20:32:29 -07:00
|
|
|
}
|
|
|
|
|
}
|