code wiki / (root) / nx_wasm_layout_gate.nx

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}