nx_wasm_layout_gate.nx source
↩ module page · 46 lines · 2397 B
1import "nx_wasm_layout_lib.nx"
2import "nx_gate_verdict.nx"
3
4func main() -> i64 {
5 let c: *i64=gv_ctr()
6 let m: *Module=ir_module_new("layout-fixture" as *u8)
7 ir_add_global_string(m,"A" as *u8,1)
8 ir_add_global_bss(m,"state" as *u8,5,65528)
9 ir_add_global_data(m,"value" as *u8,5,7,8)
10 let out: *u8=sys_mmap(168)
11 let h: *i64=out as *i64
12 out[160]=165 as u8
13 gv_check_eq("mixed shared record extent",wl_record(m,1,1,out,160),160,c)
14 gv_check_eq("record first magic byte",out[0] as i64,78,c)
15 gv_check_eq("record version",h[1],1,c)
16 gv_check_eq("all globals represented",h[2],3,c)
17 gv_check_eq("arena extent",h[3],65536,c)
18 gv_check_eq("declared pages",h[4],3,c)
19 gv_check_eq("state after all reservations",h[5],131080,c)
20 gv_check_eq("state full scalar reservation",h[6],8,c)
21 gv_check_eq("string includes terminator",h[10],2,c)
22 gv_check_eq("BSS aligned address",h[13],65544,c)
23 gv_check_eq("BSS full extent",h[14],65528,c)
24 gv_check_eq("BSS flags",h[15],5,c)
25 gv_check_eq("initialized data follows BSS",h[17],131072,c)
26 gv_check_eq("output guard",out[160] as i64,165,c)
27 gv_check_eq("plain record extent",wl_record(m,1,0,out,160),160,c)
28 gv_check_eq("plain has no initialization cell",h[5]+h[6],0,c)
29 let edge: *Module=ir_module_new("page-edge" as *u8)
30 ir_add_global_bss(edge,"edge" as *u8,4,65536)
31 gv_check_eq("page boundary plain record",wl_record(edge,1,0,out,160),96,c)
32 gv_check_eq("plain BSS ends at page boundary",h[4],2,c)
33 gv_check_eq("page boundary shared record",wl_record(edge,1,1,out,160),96,c)
34 gv_check_eq("state adds one page",h[4],3,c)
35 gv_check_eq("state at BSS end",h[5],131072,c)
36 out[0]=165 as u8
37 gv_check_eq("short destination refused",wl_record(m,1,1,out,159),0,c)
38 gv_check_eq("refusal preserves destination",out[0] as i64,165,c)
39 gv_check_eq("negative arena refused",wl_record(m,0-1,1,out,160),0,c)
40 gv_check_eq("invalid memory mode refused",wl_record(m,1,2,out,160),0,c)
41 gv_check_eq("oversize arena refused",wl_record(m,65537,1,out,160),0,c)
42 let empty: *Module=ir_module_new("empty" as *u8)
43 gv_check_eq("empty layout record",wl_record(empty,1,1,out,160),64,c)
44 gv_check_eq("empty has no data initializer",h[5]+h[6],0,c)
45 return gv_verdict("WASM-LAYOUT",c,"source-derived reservation record only; packaging and pair verification pending")
46}