selfhost: drop snake_case locals in dyn/dynout/obj + w6a + cgen + ww driver

This commit is contained in:
2026-05-11 16:33:02 +09:00
parent c64e96cbd6
commit 97ca76d2bb
18 changed files with 1795 additions and 1795 deletions

View File

@@ -200,51 +200,51 @@ fn elfglobals(a: *arena, buf: *u8, len: u64) *defent = {
let shnum: u32 = rdu16(buf, EHDR_SHNUM): u32;
let shstrndx: u32 = rdu16(buf, EHDR_SHSTRNDX): u32;
let shstr_sh_off: u64 = rdu64(buf, shoff + (shstrndx: u64) * SHDR_SIZE + SHDR_OFFSET);
let shstr: *u8 = buf + shstr_sh_off;
let shstrshoff: u64 = rdu64(buf, shoff + (shstrndx: u64) * SHDR_SIZE + SHDR_OFFSET);
let shstr: *u8 = buf + shstrshoff;
let idx_text: i32 = -1;
let idx_symtab: i32 = -1;
let idxtext: i32 = -1;
let idxsymtab: i32 = -1;
let i: u32 = 0u32;
for (i < shnum) {
let sh_off: u64 = shoff + (i: u64) * SHDR_SIZE;
let sh_type: u32 = rdu32(buf, sh_off + SHDR_TYPE);
let sh_name: u32 = rdu32(buf, sh_off + SHDR_NAME);
let nm: *u8 = shstr + (sh_name: u64);
if (sh_type == SHT_PROGBITS: u32) {
if (cstreq(nm, ".text")) { idx_text = i: i32; };
let secoff: u64 = shoff + (i: u64) * SHDR_SIZE;
let shtype: u32 = rdu32(buf, secoff + SHDR_TYPE);
let shname: u32 = rdu32(buf, secoff + SHDR_NAME);
let nm: *u8 = shstr + (shname: u64);
if (shtype == SHT_PROGBITS: u32) {
if (cstreq(nm, ".text")) { idxtext = i: i32; };
};
if (sh_type == SHT_SYMTAB: u32) { idx_symtab = i: i32; };
if (shtype == SHT_SYMTAB: u32) { idxsymtab = i: i32; };
i += 1u32;
};
if (idx_text < 0) { return nil; };
if (idx_symtab < 0) { return nil; };
if (idxtext < 0) { return nil; };
if (idxsymtab < 0) { return nil; };
let sym_sh: u64 = shoff + (idx_symtab: u64) * SHDR_SIZE;
let sym_off: u64 = rdu64(buf, sym_sh + SHDR_OFFSET);
let sym_size: u64 = rdu64(buf, sym_sh + SHDR_SIZE_F);
let sym_link: u32 = rdu32(buf, sym_sh + SHDR_LINK);
let nsyms: u64 = sym_size / SYM_SIZE;
let symsh: u64 = shoff + (idxsymtab: u64) * SHDR_SIZE;
let symoff: u64 = rdu64(buf, symsh + SHDR_OFFSET);
let symsize: u64 = rdu64(buf, symsh + SHDR_SIZE_F);
let symlink: u32 = rdu32(buf, symsh + SHDR_LINK);
let nsyms: u64 = symsize / SYM_SIZE;
let str_sh: u64 = shoff + (sym_link: u64) * SHDR_SIZE;
let str_off: u64 = rdu64(buf, str_sh + SHDR_OFFSET);
let strtab: *u8 = buf + str_off;
let strsh: u64 = shoff + (symlink: u64) * SHDR_SIZE;
let stroff: u64 = rdu64(buf, strsh + SHDR_OFFSET);
let strtab: *u8 = buf + stroff;
let head: *defent = nil;
let si: u64 = 1u64;
for (si < nsyms) {
let sym_p: u64 = sym_off + si * SYM_SIZE;
let st_name: u32 = rdu32(buf, sym_p + SYM_NAME);
let st_info: u8 = buf[sym_p + SYM_INFO];
let st_shndx: u16 = rdu16(buf, sym_p + SYM_SHNDX);
let bind: u32 = (st_info: u32) >> 4u32;
let symp: u64 = symoff + si * SYM_SIZE;
let stname: u32 = rdu32(buf, symp + SYM_NAME);
let stinfo: u8 = buf[symp + SYM_INFO];
let stshndx: u16 = rdu16(buf, symp + SYM_SHNDX);
let bind: u32 = (stinfo: u32) >> 4u32;
// STB_GLOBAL = 1; defined in .text.
if (bind == 1u32) {
if (st_shndx != 0u16) {
if ((st_shndx: i32) == idx_text) {
let nm_p: *u8 = strtab + (st_name: u64);
if (nm_p[0u64] != 0u8) {
let nm: str = cstrtostr(a, nm_p);
if (stshndx != 0u16) {
if ((stshndx: i32) == idxtext) {
let nmp: *u8 = strtab + (stname: u64);
if (nmp[0u64] != 0u8) {
let nm: str = cstrtostr(a, nmp);
let de: *defent = amalloc(a, 32u64): *defent;
de.name = nm;
de.dnext = head;
@@ -283,31 +283,31 @@ fn loadarchive(l: *lnk, path: *u8, buf: *u8, len: u64) i32 = {
let tail: *armember = nil;
let pos: u64 = 8u64; // past "!<arch>\n"
for (pos + 60u64 <= len) {
let hdr_size: u64 = arfield(buf + pos + 48u64, 10u64);
let hdr_end: u64 = pos + 60u64;
if (hdr_end + hdr_size > len) { break; };
let hdrsize: u64 = arfield(buf + pos + 48u64, 10u64);
let hdrend: u64 = pos + 60u64;
if (hdrend + hdrsize > len) { break; };
let first: u8 = buf[pos];
// Skip the symbol table ('/'), long-name table ('//'), and
// any padding entries (NUL or space leading byte).
if (first != 47u8) { if (first != 0u8) { if (first != 32u8) {
let m: *armember = amalloc(l.a, 48u64): *armember;
m.size = hdr_size;
let mb: *u8 = amalloc(l.a, hdr_size): *u8;
m.size = hdrsize;
let mb: *u8 = amalloc(l.a, hdrsize): *u8;
let i: u64 = 0u64;
for (i < hdr_size) {
mb[i] = buf[hdr_end + i];
for (i < hdrsize) {
mb[i] = buf[hdrend + i];
i += 1u64;
};
m.data = mb;
m.defs = elfglobals(l.a, mb, hdr_size);
m.defs = elfglobals(l.a, mb, hdrsize);
m.loaded = 0;
m.mnext = nil;
if (head == nil) { head = m; }
else { tail.mnext = m; };
tail = m;
}; }; };
pos = hdr_end + hdr_size;
if ((hdr_size & 1u64) != 0u64) { pos = pos + 1u64; };
pos = hdrend + hdrsize;
if ((hdrsize & 1u64) != 0u64) { pos = pos + 1u64; };
};
let changed: i32 = 1;
@@ -360,50 +360,50 @@ fn loadimage(l: *lnk, path: *u8, buf: *u8, len: u64) i32 = {
let shnum: u32 = rdu16(buf, EHDR_SHNUM): u32;
let shstrndx: u32 = rdu16(buf, EHDR_SHSTRNDX): u32;
let shstr_sh_off: u64 = rdu64(buf, shoff + (shstrndx: u64) * SHDR_SIZE + SHDR_OFFSET);
let shstr: *u8 = buf + shstr_sh_off;
let shstrshoff: u64 = rdu64(buf, shoff + (shstrndx: u64) * SHDR_SIZE + SHDR_OFFSET);
let shstr: *u8 = buf + shstrshoff;
// find .text, .symtab, .rela.text
let idx_text: i32 = -1;
let idx_symtab: i32 = -1;
let idx_rela: i32 = -1;
let idxtext: i32 = -1;
let idxsymtab: i32 = -1;
let idxrela: i32 = -1;
let i: u32 = 0u32;
for (i < shnum) {
let sh_off: u64 = shoff + (i: u64) * SHDR_SIZE;
let sh_type: u32 = rdu32(buf, sh_off + SHDR_TYPE);
let sh_name: u32 = rdu32(buf, sh_off + SHDR_NAME);
let nm: *u8 = shstr + (sh_name: u64);
if (sh_type == SHT_PROGBITS: u32) {
if (cstreq(nm, ".text")) { idx_text = i: i32; };
let secoff: u64 = shoff + (i: u64) * SHDR_SIZE;
let shtype: u32 = rdu32(buf, secoff + SHDR_TYPE);
let shname: u32 = rdu32(buf, secoff + SHDR_NAME);
let nm: *u8 = shstr + (shname: u64);
if (shtype == SHT_PROGBITS: u32) {
if (cstreq(nm, ".text")) { idxtext = i: i32; };
};
if (sh_type == SHT_SYMTAB: u32) { idx_symtab = i: i32; };
if (sh_type == SHT_RELA: u32) {
if (cstreq(nm, ".rela.text")) { idx_rela = i: i32; };
if (shtype == SHT_SYMTAB: u32) { idxsymtab = i: i32; };
if (shtype == SHT_RELA: u32) {
if (cstreq(nm, ".rela.text")) { idxrela = i: i32; };
};
i += 1u32;
};
if (idx_text < 0) {
if (idxtext < 0) {
os.write(2, "w6l: missing .text\n".ptr, 18u64);
return -1;
};
if (idx_symtab < 0) {
if (idxsymtab < 0) {
os.write(2, "w6l: missing .symtab\n".ptr, 20u64);
return -1;
};
let text_sh: u64 = shoff + (idx_text: u64) * SHDR_SIZE;
let text_off: u64 = rdu64(buf, text_sh + SHDR_OFFSET);
let text_size: u64 = rdu64(buf, text_sh + SHDR_SIZE_F);
let textsh: u64 = shoff + (idxtext: u64) * SHDR_SIZE;
let textoff: u64 = rdu64(buf, textsh + SHDR_OFFSET);
let textsize: u64 = rdu64(buf, textsh + SHDR_SIZE_F);
let sym_sh: u64 = shoff + (idx_symtab: u64) * SHDR_SIZE;
let sym_off: u64 = rdu64(buf, sym_sh + SHDR_OFFSET);
let sym_size: u64 = rdu64(buf, sym_sh + SHDR_SIZE_F);
let sym_link: u32 = rdu32(buf, sym_sh + SHDR_LINK);
let nsyms: u64 = sym_size / SYM_SIZE;
let symsh: u64 = shoff + (idxsymtab: u64) * SHDR_SIZE;
let symoff: u64 = rdu64(buf, symsh + SHDR_OFFSET);
let symsize: u64 = rdu64(buf, symsh + SHDR_SIZE_F);
let symlink: u32 = rdu32(buf, symsh + SHDR_LINK);
let nsyms: u64 = symsize / SYM_SIZE;
let str_sh: u64 = shoff + (sym_link: u64) * SHDR_SIZE;
let str_off: u64 = rdu64(buf, str_sh + SHDR_OFFSET);
let strtab: *u8 = buf + str_off;
let strsh: u64 = shoff + (symlink: u64) * SHDR_SIZE;
let stroff: u64 = rdu64(buf, strsh + SHDR_OFFSET);
let strtab: *u8 = buf + stroff;
// Track this object.
let ob: *lobj = amalloc(l.a, 64u64): *lobj;
@@ -411,28 +411,28 @@ fn loadimage(l: *lnk, path: *u8, buf: *u8, len: u64) i32 = {
ob.buf = buf;
ob.len = len;
ob.textoff = l.textlen;
ob.textsize = text_size;
ob.textsize = textsize;
ob.onext = l.objs;
l.objs = ob;
// Append .text bytes to the combined image.
emittext(l, buf + text_off, text_size);
emittext(l, buf + textoff, textsize);
// Walk symbols. We don't keep a per-object map[] of *lsym. Instead
// the reloc loop re-walks symtab and re-interns by name. Simpler
// than dancing around the cgen's u64-shift gaps.
let si: u64 = 1u64; // skip index 0 (always undef sentinel)
for (si < nsyms) {
let sym_p: u64 = sym_off + si * SYM_SIZE;
let st_name: u32 = rdu32(buf, sym_p + SYM_NAME);
let st_shndx: u16 = rdu16(buf, sym_p + SYM_SHNDX);
let st_value: u64 = rdu64(buf, sym_p + SYM_VALUE);
let nm_p: *u8 = strtab + (st_name: u64);
if (nm_p[0u64] != 0u8) {
let nm: str = cstrtostr(l.a, nm_p);
let symp: u64 = symoff + si * SYM_SIZE;
let stname: u32 = rdu32(buf, symp + SYM_NAME);
let stshndx: u16 = rdu16(buf, symp + SYM_SHNDX);
let stvalue: u64 = rdu64(buf, symp + SYM_VALUE);
let nmp: *u8 = strtab + (stname: u64);
if (nmp[0u64] != 0u8) {
let nm: str = cstrtostr(l.a, nmp);
let gs: *lsym = intern(l, nm);
if (st_shndx != 0u16) {
if ((st_shndx: i32) == idx_text) {
if (stshndx != 0u16) {
if ((stshndx: i32) == idxtext) {
if (gs.defined != 0) {
os.write(2, "w6l: duplicate symbol\n".ptr, 21u64);
l.errs += 1;
@@ -440,7 +440,7 @@ fn loadimage(l: *lnk, path: *u8, buf: *u8, len: u64) i32 = {
gs.defined = 1;
gs.owner = ob;
gs.idxinowner = si: i32;
gs.val = ob.textoff + st_value;
gs.val = ob.textoff + stvalue;
};
};
};
@@ -449,30 +449,30 @@ fn loadimage(l: *lnk, path: *u8, buf: *u8, len: u64) i32 = {
};
// Per-object relocation collection.
if (idx_rela >= 0) {
let rela_sh: u64 = shoff + (idx_rela: u64) * SHDR_SIZE;
let rela_off: u64 = rdu64(buf, rela_sh + SHDR_OFFSET);
let rela_size: u64 = rdu64(buf, rela_sh + SHDR_SIZE_F);
let nrel: u64 = rela_size / RELA_SIZE;
if (idxrela >= 0) {
let relash: u64 = shoff + (idxrela: u64) * SHDR_SIZE;
let relaoff: u64 = rdu64(buf, relash + SHDR_OFFSET);
let relasize: u64 = rdu64(buf, relash + SHDR_SIZE_F);
let nrel: u64 = relasize / RELA_SIZE;
let ri: u64 = 0u64;
for (ri < nrel) {
let rp: u64 = rela_off + ri * RELA_SIZE;
let r_off: u64 = rdu64(buf, rp + RELA_OFFSET);
let r_info: u64 = rdu64(buf, rp + RELA_INFO);
let r_addend: u64 = rdu64(buf, rp + RELA_ADDEND);
let r_sym_idx: u32 = (r_info >> 32u64): u32;
let r_kind: i32 = ((r_info & 4294967295u64): u32): i32;
let rp: u64 = relaoff + ri * RELA_SIZE;
let roff: u64 = rdu64(buf, rp + RELA_OFFSET);
let rinfo: u64 = rdu64(buf, rp + RELA_INFO);
let raddend: u64 = rdu64(buf, rp + RELA_ADDEND);
let rsymidx: u32 = (rinfo >> 32u64): u32;
let rkind: i32 = ((rinfo & 4294967295u64): u32): i32;
let nr: *lrel = amalloc(l.a, 48u64): *lrel;
nr.off = ob.textoff + r_off;
nr.kind = r_kind;
nr.addend = r_addend: i64;
nr.off = ob.textoff + roff;
nr.kind = rkind;
nr.addend = raddend: i64;
// Look up the referenced sym by name (re-walk symtab).
if ((r_sym_idx: u64) < nsyms) {
let s_p: u64 = sym_off + (r_sym_idx: u64) * SYM_SIZE;
let s_name: u32 = rdu32(buf, s_p + SYM_NAME);
let s_nm: *u8 = strtab + (s_name: u64);
if (s_nm[0u64] != 0u8) {
let nm: str = cstrtostr(l.a, s_nm);
if ((rsymidx: u64) < nsyms) {
let sp: u64 = symoff + (rsymidx: u64) * SYM_SIZE;
let sname: u32 = rdu32(buf, sp + SYM_NAME);
let snm: *u8 = strtab + (sname: u64);
if (snm[0u64] != 0u8) {
let nm: str = cstrtostr(l.a, snm);
nr.sym = intern(l, nm);
};
};