code wiki / _hdl_build / nx_cc_evidence.nx
nx_cc_evidence.nx source
↩ module page · 88 lines · 5730 B
1// nx_cc_evidence.nx -- INDEPENDENT-OBJECTIVE evidence gate for the compiler rung. Does NOT accept any asserted
2// number: it BUILDS gcc's fannkuch, RUNS both the sovereign ELF and gcc's ELF, captures their REAL stdout,
3// verifies the checksums AGREE (differential correctness vs the incumbent -- catches bugs/poison), and computes
4// the speed score FROM the captured microseconds. Independent (gcc grades us), objective (us, reproducible),
5// differential (both must compute checksum 556355), real benchmark (CLBG fannkuch-11). This is the caliber the
6// SOTA ledger must require; a capability without evidence like this has NO position, only a claim.
7import "nx_syscalls.nx"
8import "nx_itoa_lib.nx" // shared MSB-first emitter (zero-alloc)
9const G_MAGIC_556355: i64 = 556355
10const G_MODE: i64 = 0x1a4
11const BUFSZ: i64 = 16384
12
13func 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 }
14// MIGRATED to the shared emitter (debt 1785563586). The old body mmapped a scratch buffer
15// per call and never freed it. At PAGE granularity that is 4096B leaked PER CALL -- the
16// defect that took 28.5GB of a 36GB host in nx_ts_lumadiff (2MB input, ~3.66M calls).
17// nxi_* is MSB-first, allocates NOTHING, and emits identical bytes including the sign.
18func g_putn(v: i64) -> i64 { nxi_out(v); return 0 }
19
20func g_run(path: *u8, argv: *i64, envp: *i64, redir_out: i64) -> i64 {
21 let pid: i64 = sys_fork()
22 if pid == 0 {
23 if redir_out >= 0 { sys_dup3(redir_out, 1, 0) }
24 sys_execve(path, argv, envp)
25 sys_exit(127)
26 }
27 let st: *i64 = sys_mmap(16) as *i64
28 sys_wait4(pid, st, 0)
29 let sig: i64 = st[0] & 0x7f
30 if sig != 0 { return 128 + sig }
31 return (st[0] >> 8) & 0xff
32}
33func g_slurp(path: *u8, buf: *u8) -> i64 {
34 let fd: i64 = sys_openat_rd(path)
35 if fd < 0 { return 0 }
36 var total: i64 = 0
37 var n: i64 = sys_read(fd, (buf + total) as *u8, BUFSZ - 1 - total)
38 while n > 0 { total = total + n; n = sys_read(fd, (buf + total) as *u8, BUFSZ - 1 - total) }
39 sys_close(fd); buf[total] = 0 as u8; return total
40}
41func g_match_at(buf: *u8, i: i64, key: *u8) -> i64 { var j: i64=0; while key[j]!=(0 as u8){ if buf[i+j]!=key[j]{return 0} j=j+1 } return 1 }
42func g_parse_after(buf: *u8, blen: i64, key: *u8, nf: i64) -> i64 {
43 var i: i64=0; var hit: i64=0-1
44 while i<blen { if hit<0 { if g_match_at(buf,i,key)==1 { hit=i } } i=i+1 }
45 if hit<0 { return nf }
46 var p: i64=hit; while key[p-hit]!=(0 as u8){ p=p+1 }
47 var val: i64=0; var any: i64=0; var go: i64=1
48 while go==1 { let ch: i64=buf[p] as i64; if ch<48{go=0}; if ch>57{go=0}; if go==1 { val=val*10+(ch-48); any=1; p=p+1 } }
49 if any==0 { return nf }
50 return val
51}
52func main() -> i64 {
53 g_puts("=== COMPILER RUNG: independent-objective evidence (nx_cc vs gcc -O2, live) ===\n" as *u8)
54 let envp: *i64 = sys_mmap(32) as *i64
55 envp[0] = "PATH=/usr/bin:/bin" as *u8 as i64; envp[1] = 0
56 // (1) BUILD gcc's fannkuch from the identical-algorithm C oracle -> /tmp/fk_gcc
57 let ga: *i64 = sys_mmap(64) as *i64
58 ga[0]="/usr/bin/gcc" as *u8 as i64; ga[1]="-O2" as *u8 as i64; ga[2]="fannkuch_ref.c" as *u8 as i64
59 ga[3]="-o" as *u8 as i64; ga[4]="/tmp/fk_gcc" as *u8 as i64; ga[5]=0
60 let brc: i64 = g_run("/usr/bin/gcc" as *u8, ga, envp, 0-1)
61 if brc != 0 { g_puts("verdict=RED reason=gcc-build-failed rc=" as *u8); g_putn(brc); g_puts("\n" as *u8); sys_exit(1); return 1 }
62 // (2) RUN sovereign ELF, capture stdout
63 let sfd: i64 = sys_openat_wr("/tmp/ev_sov.txt" as *u8, G_MODE)
64 let sa: *i64 = sys_mmap(16) as *i64; sa[0]="/tmp/nx_fkbench.sov.elf" as *u8 as i64; sa[1]=0
65 g_run("/tmp/nx_fkbench.sov.elf" as *u8, sa, envp, sfd); sys_close(sfd)
66 let sbuf: *u8 = sys_mmap(BUFSZ); let slen: i64 = g_slurp("/tmp/ev_sov.txt" as *u8, sbuf)
67 let sov_chk: i64 = g_parse_after(sbuf, slen, "checksum=" as *u8, 0-1)
68 let sov_us: i64 = g_parse_after(sbuf, slen, "sov_us=" as *u8, 0-1)
69 // (3) RUN gcc ELF, capture stdout
70 let gfd: i64 = sys_openat_wr("/tmp/ev_gcc.txt" as *u8, G_MODE)
71 let gr: *i64 = sys_mmap(16) as *i64; gr[0]="/tmp/fk_gcc" as *u8 as i64; gr[1]=0
72 g_run("/tmp/fk_gcc" as *u8, gr, envp, gfd); sys_close(gfd)
73 let gbuf: *u8 = sys_mmap(BUFSZ); let glen: i64 = g_slurp("/tmp/ev_gcc.txt" as *u8, gbuf)
74 let gcc_chk: i64 = g_parse_after(gbuf, glen, "checksum=" as *u8, 0-1)
75 let gcc_us: i64 = g_parse_after(gbuf, glen, "c_us=" as *u8, 0-1)
76 // (4) evidence + differential + score-from-real-numbers
77 g_puts(" RAW: sov checksum=" as *u8); g_putn(sov_chk); g_puts(" sov_us=" as *u8); g_putn(sov_us)
78 g_puts(" | gcc checksum=" as *u8); g_putn(gcc_chk); g_puts(" gcc_us=" as *u8); g_putn(gcc_us); g_puts("\n" as *u8)
79 if sov_chk != gcc_chk { g_puts("verdict=RED reason=DIFFERENTIAL-MISMATCH (ours disagrees with gcc = bug/poison; NO position)\n" as *u8); sys_exit(1); return 1 }
80 if sov_chk != G_MAGIC_556355 { g_puts("verdict=RED reason=wrong-golden-checksum\n" as *u8); sys_exit(1); return 1 }
81 if sov_us <= 0 { g_puts("verdict=RED reason=no-sov-timing\n" as *u8); sys_exit(1); return 1 }
82 let score: i64 = gcc_us * 1000 / sov_us
83 g_puts(" DIFFERENTIAL-CORRECT (both compute 556355). score=" as *u8); g_putn(score)
84 g_puts(" permille of gcc-O2 speed (1000=match). gcc is " as *u8); g_putn(sov_us*100/gcc_us); g_puts("% faster-ratio x0.01\n" as *u8)
85 if score >= 1000 { g_puts("verdict=GREEN-SOTA: matched/exceeded gcc -- REAL independent evidence.\n" as *u8) }
86 else { g_puts("verdict=EVIDENCE-RECORDED: score " as *u8); g_putn(score); g_puts("/1000 -- we are BEHIND gcc, measured honestly. This is a real position; the debt is exact.\n" as *u8) }
87 return 0
88}