code wiki / _hdl_build / _dcb_probe2.nx
_dcb_probe2.nx source
↩ module page · 29 lines · 1247 B
1// _dcb_probe2.nx -- raw wait-status probe: exec the KG-built elf (which
2// exits 0 from bash, empty-env included) from a sovereign-compiled parent
3// and print the UNDECODED wait4 status word. license_tier: ORIGINAL
4import "nx_syscalls.nx"
5
6func p2_w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
7func p2_n(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m; sys_write(1,"-" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48;k=1}; while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 }
8
9func main() -> i64 {
10 let st: *i64 = sys_mmap(16) as *i64
11 st[0] = 999999
12 let pid: i64 = sys_fork()
13 if pid == 0 {
14 let argv: *i64 = sys_mmap(32) as *i64
15 argv[0] = "/tmp/_dcbp0.elf" as *u8 as i64
16 argv[1] = 0
17 let envp: *i64 = sys_mmap(16) as *i64
18 envp[0] = 0
19 sys_execve("/tmp/_dcbp0.elf" as *u8, argv, envp)
20 sys_exit(125)
21 }
22 let wr: i64 = sys_wait4(pid, st, 0)
23 p2_w("RAWWAIT pid=" as *u8); p2_n(pid)
24 p2_w(" wait_ret=" as *u8); p2_n(wr)
25 p2_w(" st0=" as *u8); p2_n(st[0])
26 p2_w("\n" as *u8)
27 sys_exit(0)
28 return 0
29}