nx_craft_emit_child_status_gate.nx source
↩ module page · 43 lines · 2717 B
1// ORIGINAL. Usage: gate.elf <absolute path to own reviewed child fixture ELF>.
2// No build, compiler, emitter, publication, or live-process signal is invoked.
3import "nx_craft_emit.nx"
4import "nx_gate_verdict.nx"
5func main(argc: i64,args: *i64) -> i64 {
6 if argc != 2 { return 2 }
7 let fixture: *u8 = args[1] as *u8
8 if fixture[0] != (47 as u8) { return 2 }
9 let ctr: *i64 = gv_ctr()
10 gv_head("craft emitter controlled child status qualification" as *u8)
11 let argv: *i64 = sys_mmap(3*8) as *i64
12 if (argv as i64) <= 0 { return 3 }
13 let zero: *u8 = "zero" as *u8; let seven: *u8 = "seven" as *u8; let pipe: *u8 = "pipe" as *u8
14 argv[0] = fixture as i64; argv[1] = zero as i64; argv[2] = 0
15 gv_check_eq("null argv refused before fork" as *u8,ce_run_argv(fixture,0 as *i64),127,ctr)
16 gv_check_eq("null executable refused before fork" as *u8,ce_run_argv(0 as *u8,argv),127,ctr)
17 gv_check_eq("own child clean exit stays zero" as *u8,ce_run_argv(fixture,argv),0,ctr)
18 argv[1] = seven as i64
19 gv_check_eq("own child ordinary exit stays seven" as *u8,ce_run_argv(fixture,argv),7,ctr)
20 argv[1] = pipe as i64
21 // Independent raw-status witness proves real signal death, rather than a
22 // fixture returning a matching numeric exit code or a guarded SIGSEGV exit.
23 let envp: *i64 = sys_mmap(8) as *i64
24 if (envp as i64) <= 0 { return 3 }
25 let st: *i64 = sys_mmap(16) as *i64
26 if (st as i64) <= 0 { return 3 }
27 envp[0] = 0
28 let pid: i64 = sys_fork()
29 if pid < 0 { return 3 }
30 if pid == 0 { sys_execve(fixture,argv,envp); sys_exit(127) }
31 let reaped: i64 = sys_wait4(pid,st,0)
32 gv_check_eq("witness reaps only its own fixture child" as *u8,reaped,pid,ctr)
33 if reaped != pid { return 3 }
34 gv_check_eq("fixture really dies from SIGPIPE" as *u8,wait_term_signal(st[0]),13,ctr)
35 gv_check_eq("old exit-only accessor exhibits false success" as *u8,wait_exit_code(st[0]),0,ctr)
36 gv_check_eq("actual emitter runner reports signal as nonzero141" as *u8,ce_run_argv(fixture,argv),141,ctr)
37 gv_check_eq("retained two-argument wrapper preserves exit7" as *u8,ce_run(fixture,seven,0 as *u8),7,ctr)
38 gv_check_eq("retained five-argument wrapper preserves true signal" as *u8,ce_run5(fixture,pipe,0 as *u8,0 as *u8,0 as *u8,0 as *u8),141,ctr)
39 let absent: *u8 = "/tmp/nx-craft-emit-child-status-missing/no-such-fixture.elf" as *u8
40 argv[0] = absent as i64; argv[1] = zero as i64
41 gv_check_eq("exec failure is nonzero127" as *u8,ce_run_argv(absent,argv),127,ctr)
42 return gv_verdict("NX-CRAFT-EMIT-CHILD-STATUS" as *u8,ctr,"real owned children only; allocation failure returns are source-reviewed, no forced memory exhaustion" as *u8)
43}