w6l: pass reloc-kind + dyn vidx if-ladders -> switch (Wave-2 structural)

relocate() reloc-kind ladder -> switch(k): PC32+PLT32 share a
byte-identical body (comma-case), R_X86_64_64 absolute, default =
unsupported-reloc errs+=1. loadso() vidx ladder -> switch(vidx):
LOCAL not-exported, GLOBAL+BASE(1) unversioned (comma-case), default
= verdef name lookup. Regenerated w6l/main.combined.ww.
This commit is contained in:
2026-06-03 01:45:47 +09:00
parent 63e070db10
commit 9f76e816d7
3 changed files with 26 additions and 36 deletions

View File

@@ -105,15 +105,12 @@ export fn relocate(l: *lnk, textva: u64, datava: u64) i32 = {
let symva: u64 = textva + r.sym.val;
if (r.sym.indata != 0) { symva = datava + r.sym.val; };
let k: i32 = r.kind;
if (k == R_X86_64_PC32) {
switch (k) {
case R_X86_64_PC32,R_X86_64_PLT32:
let site: u64 = textva + r.off;
let rel: i64 = (symva: i64 - site: i64) + r.addend;
patchu32(l.text + r.off, rel: u32);
} else { if (k == R_X86_64_PLT32) {
let site: u64 = textva + r.off;
let rel: i64 = (symva: i64 - site: i64) + r.addend;
patchu32(l.text + r.off, rel: u32);
} else { if (k == R_X86_64_64) {
case R_X86_64_64:
// Absolute 64-bit. Currently used only
// for DATAR slots in .data.
let v: u64 = (symva: i64 + r.addend): u64;
@@ -122,10 +119,10 @@ export fn relocate(l: *lnk, textva: u64, datava: u64) i32 = {
} else {
patchu64(l.text + r.off, v);
};
} else {
case:
os.write(2, "w6l: unsupported reloc kind\n".ptr, 27u64);
l.errs += 1;
};};};
};
};
};
r = r.rnext;