w6a: branch labels stay out of the symtab (isglobal wired)
Every interned symbol -- including branch labels defined via p.label -- was emitted STB_GLOBAL, so labels were collide-able across objects and the header's "GLOBAL symbols only" contract was enforced nowhere (asym.isglobal was set but never read). Labels stay interned for fixup resolution; the symtab now carries only exported definitions, undefined externs, and reloc-referenced syms (a reloc pre-pass marks those). rt/ensure.o drops from 15 emitted syms to 2. Bootstrap 991-995 hold byte-identical on the new format.
This commit is contained in:
@@ -170,6 +170,7 @@ type asym = struct {
|
||||
istext: i32,
|
||||
isdata: i32, // mutually exclusive with istext; DATAW symbols
|
||||
isglobal: i32,
|
||||
hasreloc: i32, // referenced by a relocation — must be in the symtab
|
||||
addr: u64, // offset within its section (.text or .data)
|
||||
idx: i32,
|
||||
snext: *asym,
|
||||
|
||||
Reference in New Issue
Block a user