Skip to content

Commit

Permalink
Use "main" instead of start function
Browse files Browse the repository at this point in the history
This allows us to avoid abusing "start" section which has a special
meaning in WASM and also makes it easier to generate the correct WASM
module for Rust programs where adding "start" section in not trivial.
  • Loading branch information
aborg-dev committed Mar 5, 2024
1 parent ba69743 commit 951a419
Show file tree
Hide file tree
Showing 794 changed files with 805 additions and 800 deletions.
6 changes: 4 additions & 2 deletions cranelift/filetests/src/test_zkasm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ mod tests {
linker.func_wrap("env", "assert_eq_i64", |a: i64, b: i64| {
assert_eq!(a, b);
})?;
linker.instantiate(&mut store, &module)?;
let instance = linker.instantiate(&mut store, &module)?;
let main = instance.get_typed_func::<(), ()>(&mut store, "main")?;
main.call(&mut store, ())?;
Ok(())
}

Expand Down Expand Up @@ -118,7 +120,7 @@ mod tests {
testcase.push_str(&format!("\t{function_type}.{}\n", function_name));
}
testcase.push_str(&format!(
"\t{}\n\tcall $assert_eq_{})\n (start $main))\n",
"\t{}\n\tcall $assert_eq_{})\n (export \"main\" (func $main)))\n",
expected_result.trim(),
assert_type
));
Expand Down
15 changes: 9 additions & 6 deletions cranelift/filetests/src/zkasm_codegen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,16 @@ pub fn generate_zkasm(settings: &ZkasmSettings, wasm_module: &[u8]) -> String {

let mut program: Vec<String> = Vec::new();

let start_func = zkasm_environ
let main_func = zkasm_environ
.info
.start_func
.expect("Must have a start function");
.functions
.iter()
.find(|&(_, exportable_func)| exportable_func.export_names.contains(&"main".to_string()))
.expect("Must have a `main` function");

// TODO: Preamble should be generated by a linker and/or clift itself.
program.append(&mut generate_preamble(
start_func.index(),
main_func.0.index(),
&zkasm_environ.info.global_inits,
&zkasm_environ.info.data_inits,
));
Expand Down Expand Up @@ -87,7 +90,7 @@ fn handle_zkasm_settings(

/// Generates a preamble.
pub fn generate_preamble(
start_func_index: usize,
main_func_index: usize,
globals: &[(cranelift_wasm::GlobalIndex, cranelift_wasm::GlobalInit)],
data_segments: &[(u64, Vec<u8>)],
) -> Vec<String> {
Expand Down Expand Up @@ -142,7 +145,7 @@ pub fn generate_preamble(
// Stack memory is a separate region that is independent from the heap.
program.push(" 0xffff => SP".to_string());
program.push(" zkPC + 2 => RR".to_string());
program.push(format!(" :JMP(function_{})", start_func_index));
program.push(format!(" :JMP(function_{})", main_func_index));
program.push(" :JMP(finalizeExecution)".to_string());
program
}
Expand Down
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/_should_fail_unreachable.wat
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
(func $main
unreachable
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/add.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
i32.add
i32.const 1999999999
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/add_func.wat
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
(local.get $rhs)
)
)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/analyze-zkasm/testfiles/simple.wat
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
(module
(func $main
nop)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/and.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
i32.and
i32.const 0
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@
(local.get $fp)
(i64.const -2872092127636481573)
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/counter.wat
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@
(local.get $counter)
(i32.const 10)
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/div.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
i32.div_s
i32.const 2
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/eqz.wat
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@
i32.eqz
i32.const 1
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/global.wat
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@
i32.add
i32.const 1
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/i32_add_overflows.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
i32.add
i32.const 0
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/i32_const.wat
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
i32.const 4
i32.const 4
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/i32_mul_overflows.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
i32.mul
i32.const 0
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/i64_const.wat
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
i64.const 9223372036854775807
i64.const 9223372036854775807
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/i64_div.wat
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@
i64.div_s
i64.const 214748366
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/i64_mul.wat
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
i64.mul
i64.mul
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/i64_mul_overflows.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
i64.mul
i64.const 0
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/i64_rem.wat
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@
i64.rem_s
i64.const 2
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/locals.wat
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
(local.get $z)
(i32.const 5)
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/locals_simple.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
(local.get $x)
(i32.const 2)
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/lt_s.wat
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@
i32.lt_s
i32.const 0
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/lt_u.wat
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@
i32.lt_u
i32.const 0
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/memory.wat
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@
i32.add
i32.const 5
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/memory_i32.wat
Original file line number Diff line number Diff line change
Expand Up @@ -103,5 +103,5 @@
i32.load offset=25 align=4
i32.const 122
call $assert_eq_i32)
(start $main)
(export "main" (func $main))
)
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/mul.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
i32.mul
i32.const 1999999999
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/ne.wat
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@
i32.ne
i32.const 1
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/nop.wat
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
nop
i32.const 0
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/or.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
i32.or
i32.const 0
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/rem.wat
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@
i32.rem_s
i32.const 2
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const -1
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const 0xffffffff
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const 0x00000000
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const 0x00000001
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const -100000
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const 0x80000000
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const 0x7fffffff
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const 0x00000000
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const 0xffffffff
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const 0x00000001
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const 0
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i32.wrap_i64
i32.const 0x9abcdef0
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_s
i64.const 0
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_s
i64.const 10000
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_s
i64.const -10000
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_s
i64.const -1
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_s
i64.const 0x000000007fffffff
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_s
i64.const 0xffffffff80000000
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_u
i64.const 0
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_u
i64.const 10000
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_u
i64.const 0x00000000ffffd8f0
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_u
i64.const 0xffffffff
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_u
i64.const 0x000000007fffffff
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
i64.extend_i32_u
i64.const 0x0000000080000000
call $assert_eq_i64)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/spectest/i32/add_1.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
i32.add
i32.const 2
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/spectest/i32/add_2.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
i32.add
i32.const 1
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
2 changes: 1 addition & 1 deletion cranelift/zkasm_data/spectest/i32/add_3.wat
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
i32.add
i32.const -2
call $assert_eq_i32)
(start $main))
(export "main" (func $main)))
Loading

0 comments on commit 951a419

Please sign in to comment.