code wiki / _hdl_build / nx_stage_live_execution_gate_t188.nx
nx_stage_live_execution_gate_t188.nx source
↩ module page · 28 lines · 1212 B
1import "nx_syscalls.nx"
2import "nx_gate_verdict.nx"
3func cli188_run(path:*u8,av:*i64,env:*i64,out:i64,err:i64)->i64{
4 let status:*i64=sys_mmap(8) as *i64
5 let pid:i64=sys_fork();if pid<0{return pid}
6 if pid==0{
7 if out<0||err<0{sys_exit(125)}
8 if sys_dup3(out,1,0)<0||sys_dup3(err,2,0)<0{sys_exit(126)}
9 sys_execve(path,av,env);sys_exit(127)
10 }
11 let waited:i64=sys_wait4(pid,status,0)
12 if waited!=pid{return 0-1}
13 return wait_status_rc(status[0])
14}
15func main()->i64{
16 let c:*i64=gv_ctr();let env:*i64=sys_mmap(8) as *i64;env[0]=0
17 let av:*i64=sys_mmap(16) as *i64
18 let path:*u8="knowledge/gates/stage-live-manager-t188.elf.new"
19 av[0]=path as i64;av[1]=0
20 let out:i64=sys_openat_wr("knowledge/gates/stage-live-manager-usage-t188.log",MODE_0644)
21 let rc:i64=cli188_run(path,av,env,out,out);sys_close(out)
22 gv_check("live stage output executes actual manager usage rather than exec127",rc==1,c)
23 let n:*i64=sys_mmap(8) as *i64
24 let bytes:*u8=sys_read_file("knowledge/gates/stage-live-manager-usage-t188.log",n)
25 if *n>0{sys_write(1,bytes,*n)}
26 gv_check("expected full manager usage extent",*n==77,c)
27 return gv_verdict("live-stage-execution",c,"Actual output of deployed stage; manager itself not activated")
28}