code wiki / _hdl_build / nx_byte_diff_begin.nx

nx_byte_diff_begin.nx source

↩ module page · 69 lines · 4278 B

1// nx_byte_diff_begin.nx -- BEGIN PM item-1: build a target via sovereign nxasm_x86 AND gcc from the same 2// .s, then byte-compare the .text. First concrete S-class measurement; result flagged to the PM review log. 3// NishiLang fork/exec (no .sh). license_tier: ORIGINAL 4 5import "nx_byte_diff.nx" 6import "nx_pm_review_log.nx" 7import "nx_syscalls.nx" 8 9func _puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 10func _putn(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);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 } 11func _exitcode(s: i64) -> i64 { return (s >> 8) & 0xff } 12func _run(path: *u8, argv: *i64, envp: *i64, redir: i64) -> i64 { 13 let pid: i64 = sys_fork() 14 if pid == 0 { if redir >= 0 { sys_dup3(redir, 1, 0) } sys_execve(path, argv, envp) sys_exit(127) } 15 let st: *i64 = sys_mmap(16) as *i64; sys_wait4(pid, st, 0); return _exitcode(st[0]) 16} 17 18func main() -> i64 { 19 _puts("=== BEGIN item-1: x86 byte-exact differential (sovereign nxasm_x86 vs gcc .text) ===\n" as *u8) 20 let cc: *u8 = "_offc/nx_cc_known_good.elf" as *u8 21 let gcc: *u8 = "/usr/bin/gcc" as *u8 22 let tool: *u8 = "/tmp/nxasm_x86" as *u8 23 let envp: *i64 = sys_mmap(8*4) as *i64 24 envp[0] = "PATH=/usr/bin:/bin" as *u8 as i64; envp[1] = 0 25 26 // bootstrap the assembler tool 27 let bsfd: i64 = sys_openat_wr("/tmp/nxasm_x86.s" as *u8, 0x1a4) 28 let bac: *i64 = sys_mmap(8*4) as *i64; bac[0]=cc as i64; bac[1]="nxasm/nxasm_x86_main.nx" as *u8 as i64; bac[2]=0 29 _run(cc, bac, envp, bsfd); sys_close(bsfd) 30 let bal: *i64 = sys_mmap(8*12) as *i64 31 bal[0]=gcc as i64; bal[1]="-nostdlib" as *u8 as i64; bal[2]="-no-pie" as *u8 as i64; bal[3]="-static" as *u8 as i64 32 bal[4]="/tmp/nxasm_x86.s" as *u8 as i64; bal[5]="-o" as *u8 as i64; bal[6]=tool as i64; bal[7]=0 33 _run(gcc, bal, envp, 0 - 1) 34 35 // compile target -> .s 36 let sfd: i64 = sys_openat_wr("/tmp/_bd.s" as *u8, 0x1a4) 37 let cac: *i64 = sys_mmap(8*4) as *i64; cac[0]=cc as i64; cac[1]="runtime/_hdl_build/_min42.nx" as *u8 as i64; cac[2]=0 38 _run(cc, cac, envp, sfd); sys_close(sfd) 39 // sovereign assemble 40 let aa: *i64 = sys_mmap(8*4) as *i64; aa[0]=tool as i64; aa[1]="/tmp/_bd.s" as *u8 as i64; aa[2]="/tmp/_bd.sov" as *u8 as i64; aa[3]=0 41 _run(tool, aa, envp, 0 - 1) 42 // gcc assemble 43 let ga: *i64 = sys_mmap(8*12) as *i64 44 ga[0]=gcc as i64; ga[1]="-nostdlib" as *u8 as i64; ga[2]="-no-pie" as *u8 as i64; ga[3]="-static" as *u8 as i64 45 ga[4]="/tmp/_bd.s" as *u8 as i64; ga[5]="-o" as *u8 as i64; ga[6]="/tmp/_bd.gcc" as *u8 as i64; ga[7]=0 46 _run(gcc, ga, envp, 0 - 1) 47 48 // read both ELFs + compare .text 49 let la: *i64 = sys_mmap(16) as *i64 50 let lb: *i64 = sys_mmap(16) as *i64 51 let bufA: *u8 = sys_read_file("/tmp/_bd.sov" as *u8, la) 52 let bufB: *u8 = sys_read_file("/tmp/_bd.gcc" as *u8, lb) 53 if (bufA as i64) == 0 { _puts(" could not read sovereign ELF\n" as *u8); sys_exit(1); return 1 } 54 if (bufB as i64) == 0 { _puts(" could not read gcc ELF\n" as *u8); sys_exit(1); return 1 } 55 let c: *BdCmp = bd_compare(bufA, la[0], bufB, lb[0]) 56 57 _puts(" .text sovereign=" as *u8); _putn(c.sizeA); _puts("B gcc=" as *u8); _putn(c.sizeB); _puts("B matching-bytes=" as *u8); _putn(c.common_match) 58 _puts(" exact=" as *u8); _putn(c.exact); _puts(" first-mismatch@" as *u8); _putn(c.first_mismatch); _puts("\n" as *u8) 59 60 let pm: i64 = pm_open("/tmp/nishi_pm_review.log" as *u8) 61 if c.exact == 1 { 62 pm_deliverable(pm, "toolchain/x86_64" as *u8, "item1 byte-exact" as *u8, "_min42 .text BYTE-EXACT vs gcc -- sovereign nxasm_x86 replicates gas encoding exactly; triangulated S-class evidence" as *u8) 63 } else { 64 pm_gap(pm, "toolchain/x86_64" as *u8, "NEEDS-LOGIC" as *u8, "item1 byte-exact" as *u8, "_min42 .text differs from gcc -- localized first mismatch; inspect encoding choice (may be an equivalent valid encoding, verify then align)" as *u8) 65 } 66 sys_close(pm) 67 _puts(" first byte-exact measurement flagged to /tmp/nishi_pm_review.log (item-1 underway)\n" as *u8) 68 sys_exit(0); return 0 69}