toolchain: banner purge + WHY-only comment sweep (rule 8)
selfhost/, cmd/, internal/ join the tree-wide sweep: every section banner dies (91 selfhost + the cmd C-style dividers -> 0); narration and stale contracts deleted (pre-#22 bundler notes, retired single-PT_LOAD and no-archive claims, superseded ABI tables); every ref/harec/qbe cite, task cite, encoding/ELF contract, and rule-10 twin pointer kept; lost lifetime/rationale lines restored where the sweep over-cut (elf_globals ownership, kwtab linear-scan). Comment- only proven: all five wwstage tool binaries byte-identical across the sweep; test-commit, test-byteid (161+1399, 0 pinned-divergent), and test-bootstrap (fixed point + 991-995 byte-id) all exit 0. The read-through banked 66 latent-bug leads (checkpoint).
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// selfhost/cmd/w6a/obj.ww — port of cmd/w6a/obj.c.
|
||||
// Port of cmd/w6a/obj.c.
|
||||
//
|
||||
// Emit a tiny ELF64 relocatable object. Layout (in file order):
|
||||
// [0] ELF header
|
||||
@@ -36,7 +36,6 @@ fn wrdrop(fd: i32, p: *u8, n: u64) void = {
|
||||
};
|
||||
};
|
||||
|
||||
// ---- ELF constants ----------------------------------------------------
|
||||
def ELFCLASS64: u8 = 2u8;
|
||||
def ELFDATA2LSB: u8 = 1u8;
|
||||
def EV_CURRENT_W: u32 = 1u32;
|
||||
@@ -59,14 +58,11 @@ def STT_NOTYPE: u8 = 0u8;
|
||||
def STT_OBJECT: u8 = 1u8;
|
||||
def STT_FUNC: u8 = 2u8;
|
||||
|
||||
// Sizes of fixed structures.
|
||||
def EHDR_SZ: u64 = 64u64;
|
||||
def SHDR_SZ: u64 = 64u64;
|
||||
def SYM_SZ: u64 = 24u64;
|
||||
def RELA_SZ: u64 = 24u64;
|
||||
|
||||
// ---- LE byte writers (own the bytes — write into a *u8 + offset) ----
|
||||
|
||||
fn wru8(p: *u8, off: u64, v: u8) void = { p[off] = v; };
|
||||
fn wru16(p: *u8, off: u64, v: u16) void = {
|
||||
p[off] = (v & 255u16): u8;
|
||||
@@ -83,8 +79,6 @@ fn wru64(p: *u8, off: u64, v: u64) void = {
|
||||
wru32(p, off + 4u64, ((v >> 32u64) & 4294967295u64): u32);
|
||||
};
|
||||
|
||||
// ---- growable byte buffer ---------------------------------------------
|
||||
|
||||
type buf = struct {
|
||||
p: *u8,
|
||||
n: u64,
|
||||
@@ -128,8 +122,6 @@ fn bufputcstr(b: *buf, s: str) u32 = {
|
||||
return off;
|
||||
};
|
||||
|
||||
// ---- emitelf ---------------------------------------------------------
|
||||
|
||||
export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
let shstr: buf; bufinit(&shstr);
|
||||
let str_: buf; bufinit(&str_);
|
||||
@@ -174,9 +166,9 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
let SH_STRTAB: u16 = SH_SYMTAB + 1u16;
|
||||
let SH_SHSTR: u16 = SH_STRTAB + 1u16;
|
||||
|
||||
// Section name offsets. Append .data / .rela.data only when
|
||||
// used so the .shstrtab buffer stays byte-identical for the
|
||||
// no-DATAW case (test 991 byte-diff invariant).
|
||||
// Append .data / .rela.data names only when used so the
|
||||
// .shstrtab buffer stays byte-identical for the no-DATAW case
|
||||
// (test 991 byte-diff invariant).
|
||||
let shntext: u32 = bufputcstr(&shstr, ".text");
|
||||
let shnrela: u32 = bufputcstr(&shstr, ".rela.text");
|
||||
let shndata: u32 = 0u32;
|
||||
@@ -195,7 +187,6 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
for (zi < 24) { zsym[zi] = 0u8; zi += 1; };
|
||||
bufputb(&sym, zsym.ptr, 24u64);
|
||||
|
||||
// Build symbols.
|
||||
let idx: i32 = 1;
|
||||
let s: *asym = a.syms;
|
||||
for (s != nil) {
|
||||
@@ -223,7 +214,6 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
s = s.snext;
|
||||
};
|
||||
|
||||
// Build relocations — split into text vs data buffers.
|
||||
let r: *areloc = a.relocs;
|
||||
for (r != nil) {
|
||||
let entry: [24]u8;
|
||||
@@ -239,7 +229,6 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
r = r.rnext;
|
||||
};
|
||||
|
||||
// File offsets.
|
||||
let off: u64 = EHDR_SZ;
|
||||
let offtext: u64 = off; off = off + a.textlen;
|
||||
let offrela: u64 = off; off = off + rela.n;
|
||||
@@ -258,7 +247,6 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
else { NSECT = 7u16; };
|
||||
};
|
||||
|
||||
// ---- Ehdr ----
|
||||
let eh: [64]u8;
|
||||
let i: i32 = 0;
|
||||
for (i < 64) { eh[i] = 0u8; i += 1; };
|
||||
@@ -321,13 +309,11 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
written += 1u64;
|
||||
};
|
||||
|
||||
// Section header table — 6 headers of 64 bytes each = 384 bytes.
|
||||
let shbuf: [64]u8;
|
||||
// SHT_NULL
|
||||
let sn: i32 = 0;
|
||||
for (sn < 64) { shbuf[sn] = 0u8; sn += 1; };
|
||||
wrdrop(fd, shbuf.ptr, 64u64);
|
||||
// .text
|
||||
sn = 0;
|
||||
for (sn < 64) { shbuf[sn] = 0u8; sn += 1; };
|
||||
wru32(shbuf.ptr, 0u64, shntext);
|
||||
@@ -337,7 +323,6 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
wru64(shbuf.ptr, 32u64, a.textlen);
|
||||
wru64(shbuf.ptr, 48u64, 1u64); // sh_addralign
|
||||
wrdrop(fd, shbuf.ptr, 64u64);
|
||||
// .rela.text
|
||||
sn = 0;
|
||||
for (sn < 64) { shbuf[sn] = 0u8; sn += 1; };
|
||||
wru32(shbuf.ptr, 0u64, shnrela);
|
||||
@@ -351,7 +336,6 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
wru64(shbuf.ptr, 56u64, RELA_SZ);
|
||||
wrdrop(fd, shbuf.ptr, 64u64);
|
||||
if (hasdata) {
|
||||
// .data
|
||||
sn = 0;
|
||||
for (sn < 64) { shbuf[sn] = 0u8; sn += 1; };
|
||||
wru32(shbuf.ptr, 0u64, shndata);
|
||||
@@ -362,7 +346,6 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
wru64(shbuf.ptr, 48u64, 8u64); // sh_addralign
|
||||
wrdrop(fd, shbuf.ptr, 64u64);
|
||||
if (hasdatarelocs) {
|
||||
// .rela.data
|
||||
sn = 0;
|
||||
for (sn < 64) { shbuf[sn] = 0u8; sn += 1; };
|
||||
wru32(shbuf.ptr, 0u64, shnrelad);
|
||||
@@ -377,7 +360,6 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
wrdrop(fd, shbuf.ptr, 64u64);
|
||||
};
|
||||
};
|
||||
// .symtab
|
||||
sn = 0;
|
||||
for (sn < 64) { shbuf[sn] = 0u8; sn += 1; };
|
||||
wru32(shbuf.ptr, 0u64, shnsymtab);
|
||||
@@ -389,7 +371,6 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
wru64(shbuf.ptr, 48u64, 8u64);
|
||||
wru64(shbuf.ptr, 56u64, SYM_SZ);
|
||||
wrdrop(fd, shbuf.ptr, 64u64);
|
||||
// .strtab
|
||||
sn = 0;
|
||||
for (sn < 64) { shbuf[sn] = 0u8; sn += 1; };
|
||||
wru32(shbuf.ptr, 0u64, shnstrtab);
|
||||
@@ -398,7 +379,6 @@ export fn emitelf(a: *asm_, fd: i32) i32 = {
|
||||
wru64(shbuf.ptr, 32u64, str_.n);
|
||||
wru64(shbuf.ptr, 48u64, 1u64);
|
||||
wrdrop(fd, shbuf.ptr, 64u64);
|
||||
// .shstrtab
|
||||
sn = 0;
|
||||
for (sn < 64) { shbuf[sn] = 0u8; sn += 1; };
|
||||
wru32(shbuf.ptr, 0u64, shnshstrtab);
|
||||
|
||||
Reference in New Issue
Block a user