code wiki / _hdl_build / nx_mmap_shared_gate.nx

nx_mmap_shared_gate.nx source

↩ module page · 46 lines · 2152 B

1// nx_mmap_shared_gate.nx -- proves sys_mmap_shared gives ONE region across fork() 2// (the foundation for the fork-per-connection video relay). Positive: a child's 3// write into a shared region is visible to the parent. Neg-control: a private 4// (sys_mmap) region is NOT shared (parent keeps its own copy). No false-green. 5// license_tier: ORIGINAL 6import "nx_syscalls.nx" 7import "nx_gate_verdict.nx" 8 9func g_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 10func g_check(name: *u8, cond: i64) -> i64 { 11 if cond==1 { g_puts(" PASS " as *u8) } else { g_puts(" FAIL " as *u8) } 12 g_puts(name); g_puts("\n" as *u8); return cond 13} 14 15func main() -> i64 { 16 g_puts("nx_mmap_shared gate (shared memory across fork)\n" as *u8) 17 var pass: i64 = 0; var total: i64 = 0 18 let st: *i64 = sys_mmap(16) as *i64 19 20 // positive: shared region, child writes 222, parent must see it 21 let p: *i64 = sys_mmap_shared(64) as *i64 22 p[0] = 111 23 let pid: i64 = sys_fork() 24 if pid == 0 { p[0] = 222; sys_exit(0); return 0 } 25 sys_wait4(pid, st, 0) 26 pass = pass + g_check("child write visible to parent (MAP_SHARED)" as *u8, p[0] == 222); total=total+1 27 28 // neg-control: private region, child write must NOT reach parent 29 let q: *i64 = sys_mmap(64) as *i64 30 q[0] = 111 31 let pid2: i64 = sys_fork() 32 if pid2 == 0 { q[0] = 222; sys_exit(0); return 0 } 33 sys_wait4(pid2, st, 0) 34 pass = pass + g_check("private mmap NOT shared (neg-control)" as *u8, q[0] == 111); total=total+1 35 36 g_puts("---- mmap-shared gate: passed " as *u8) 37 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 38 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 39 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 40 let ctr__dry: *i64 = gv_ctr() 41 ctr__dry[0] = pass 42 ctr__dry[1] = total 43 let rc__dry: i64 = gv_verdict("MMAP-SHARED-GATE" as *u8, ctr__dry, "teeth unchanged; verdict emission migrated onto the shared base class" as *u8) 44 sys_exit(rc__dry) 45 return rc__dry 46}