code wiki / _hdl_build / nx_asm_canary.nx

nx_asm_canary.nx source

↩ module page · 56 lines · 3255 B

1// nx_asm_canary.nx -- the ASSEMBLER CANARY law as an executable organ (2026-06-10): no nxasm build 2// is trusted until it assembles the canary (_mb_gate.s) and the result RUNS and exits 42. This module: 3// 1. runner-builds nxasm_x86_main (retry-guarded -> /tmp/nxasm_x86_main.sov.elf) 4// 2. new build assembles _mb_gate.s -> /tmp/canary.elf 5// 3. runs canary.elf -> exit MUST be 42 (signal-aware) 6// 4. emits CANARY PASS/REJECT line to /tmp/nishi_ladder.log ; exit 0=blessed, 1=rejected 7// Closes the failure class where a parse-broken 1-shot build (reg->r15, imm->0xAB) masqueraded as a 8// source bug and burned a session (and likely created the May30 "landmine" verdict). license_tier: ORIGINAL 9import "nx_syscalls.nx" 10 11func ac_w(fd: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(fd,s,n); return 0 } 12 13func ac_run(path: *u8, a1: *u8, a2: *u8) -> i64 { 14 let envp: *i64 = sys_mmap(32) as *i64 15 envp[0] = "PATH=/usr/bin:/bin" as *u8 as i64; envp[1] = 0 16 let av: *i64 = sys_mmap(40) as *i64 17 av[0] = path as i64; av[1] = a1 as i64; av[2] = a2 as i64; av[3] = 0 18 let pid: i64 = sys_fork() 19 if pid == 0 { sys_execve(path, av, envp); sys_exit(127) } 20 let st: *i64 = sys_mmap(16) as *i64 21 sys_wait4(pid, st, 0) 22 let sig: i64 = st[0] & 0x7f 23 if sig != 0 { return 128 + sig } 24 return (st[0] >> 8) & 0xff 25} 26 27func main() -> i64 { 28 ac_w(1, "[asm-canary] runner-building nxasm...\n" as *u8) 29 ac_run("/tmp/nx_sov_build_run.elf" as *u8, "nxasm_x86_main" as *u8, 0 as *u8) 30 ac_w(1, "[asm-canary] assembling canary...\n" as *u8) 31 let rca: i64 = ac_run("/tmp/nxasm_x86_main.sov.elf" as *u8, "_mb_gate.s" as *u8, "/tmp/canary.elf" as *u8) 32 // PER-STEP LOUDNESS (2026-06-10, the feat-gate lesson): a verdict organ MUST name which 33 // step failed -- assemble-fail vs wrong-exit are different bugs (tool vs encoding). 34 ac_w(1, "[asm-canary] assemble rc=" as *u8) 35 let b1: *u8 = sys_mmap(8); b1[0] = (48 + (rca - (rca/10)*10)) as u8 36 if rca >= 100 { ac_w(1, "1xx" as *u8) } 37 if rca < 100 { if rca >= 10 { let bt: *u8 = sys_mmap(8); bt[0] = (48 + rca/10) as u8; sys_write(1, bt, 1) } sys_write(1, b1, 1) } 38 ac_w(1, "\n" as *u8) 39 var rc: i64 = 0 - 1 40 if rca == 0 { rc = ac_run("/tmp/canary.elf" as *u8, 0 as *u8, 0 as *u8) } 41 ac_w(1, "[asm-canary] canary-run rc=" as *u8) 42 var rv: i64 = rc; if rv < 0 { rv = 0 - rv; ac_w(1, "-" as *u8) } 43 let b2: *u8 = sys_mmap(8) 44 if rv >= 100 { ac_w(1, "1xx" as *u8) } 45 if rv < 100 { if rv >= 10 { let bu: *u8 = sys_mmap(8); bu[0] = (48 + rv/10) as u8; sys_write(1, bu, 1) } b2[0] = (48 + (rv - (rv/10)*10)) as u8; sys_write(1, b2, 1) } 46 ac_w(1, " (42=PASS)\n" as *u8) 47 let lfd: i64 = sys_openat_append("/tmp/nishi_ladder.log" as *u8, 0x1a4) 48 if rc == 42 { 49 ac_w(lfd, "CANARY asm=nxasm_x86_main verdict=PASS gate=exit42 date=2026-06-10\n" as *u8) 50 ac_w(1, "[asm-canary] PASS exit42 -- build BLESSED (and movb imm->reg works)\n" as *u8) 51 sys_close(lfd); sys_exit(0); return 0 52 } 53 ac_w(lfd, "CANARY asm=nxasm_x86_main verdict=REJECT gate=exit42 date=2026-06-10\n" as *u8) 54 ac_w(1, "[asm-canary] REJECT -- do NOT use this build\n" as *u8) 55 sys_close(lfd); sys_exit(1); return 1 56}