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}