2026-09-03 - (/loop) Six absences, and the tag that made them mean something
tests 1991 -> 1991 (investigation; no code)
D495 left one question: what does the platform start when
the guest calls sceKernelLoadStartModule on a module it
ships. Six places could name code to run at load. None of them does.
The search, in order, siblings first
| where | what is there |
|---|---|
| obSCEne / prosperous / selfish docs | nothing on module start semantics |
DT_INIT_ARRAY / DT_INIT_ARRAYSZ |
both 0x0 (D491) |
DT_PREINIT_ARRAY |
not in the tag list at all |
module_start / module_stop /
module_prolog |
none of the three hashes exported (D492) |
| ELF entry point | 0x0 - on all three modules the title ships |
PT_SCE_MODULE_PARAM |
SDK versions, per selfish's own writer |
Six absences is a closed search rather than a shrug, which is the point of listing them.
And a correction to D491, which I had reused twice
D491 recorded DT_INIT = 0x10 as "not an address -
base + 0x10 is the ELF header". I have since repeated that
reasoning in two loop prompts.
It is not the header. Segment 0 is
PT_LOAD, executable, mapped at the module base, and its
contents begin at file offset 0x4000.
base + 0x10 is inside the executable segment. What is
actually there:
vaddr 0x10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Zeros. So the conclusion survives - calling it executes padding, not
a constructor - and the reason was wrong, which matters because
the reason is the part a reader reuses. Checked because "could
base+0x10 be code?" is the same question that caught D490
and D491 themselves, turned on my own note.
DT_FINI is
what makes the absences evidence
The same module's DT_FINI is
0x1487860 - a real offset, eighty-two
bytes from the end of segment 0's copied run, exactly where a last
.text function sits.
So the toolchain that left DT_INIT pointing at padding
wrote a genuine offset for the finaliser in the next tag. A
missing tag beside its populated twin is a statement, not a gap in my
understanding of the format. Without that comparison the six
absences would only mean "I have not found it yet".
Where that leaves the wall
Either the platform runs nothing at LoadStartModule and
the .bss is filled by the game calling in, or it runs
something no part of the module names. The first is now cheaper and fits
what D495 measured: two of five bound exports called, one string
written, 318,490 words of .bss untouched, dies in the
second call.
Not concluded. Six absences are not a proof, and the run that settles it is on hardware - obSCEne can load a module it built and report whether anything of its own ran before the caller touched it. Worth banking with R3/R4 for the next console session.
State
cargo test --workspace green - 117 suites, 1991
tests, 0 failures. fmt clean, identity scan clean. No code
changed this tick.
Nothing committed. The day holds worklogs 292-346 and D466-D496.
Next: the encoder path probes - 48 outstanding hardware measurements that the 537-module manifest makes answerable, and a change of subject after four ticks on one global.