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}