D235 - "Not present on this platform" was a claim the harness could not support
A check whose symbol did not resolve reported:
OBS|res|080-video/open|skip||the symbol is not present on this platform
That is a statement about the platform, made from an observation about the loader, and on a console the two came apart badly.
A title is given far fewer libraries than it asks for. Of the eboot's
twelve DT_NEEDED, five were mapped; the other seven were
silently not provided, and every check behind them said the platform did
not have those symbols. The same run's census, resolving the same
libraries at run time through sceKernelLoadStartModule,
found libScePad, libSceAudioOut,
libSceUserService, libSceGnmDriver,
libSceNetCtl and libSceVideoOut all
partly present. The symbols were there. Twenty-one checks
reported otherwise, and the sentence read as a finding about the console
rather than about the build.
So the library is now asked before anything is claimed, and there are three outcomes where there was one:
| the symbol is not present on this platform | genuinely absent, asked and answered |
| the symbol exists in its library but this build did not link it | the title was not given that library |
| the loader did not resolve this symbol, and this platform cannot be asked | no module resolution here (D232) |
Only the first is a finding about the platform. The second is a finding about how a title is loaded, which is worth more - it is the difference between "the console cannot do this" and "a title cannot reach this the way we asked for it".
The fix was nearly worse than the fault
The first version answered the question by loading the library and resolving through it. That is the wrong place to ask. A skip is the one path in the harness loop that is supposed to do nothing, and putting a module load in it gave the inert path side effects - in a program whose first principle is that a check announces before it acts.
It was caught on hardware within one sweep iteration: passing
105-record loaded libSceVideoRecording, which
is one of the ten libraries that end the process, and a
thirteen-thousand-record run became three hundred. The census sweep
found it because the sweep rebuilds from source each iteration, so it
picked the change up and the record count collapsed.
The skip now says only what was seen -
the loader did not resolve this symbol for this build - and
whether the symbol exists is left to the census, which asks that
question in the section built for it, last, where loading modules is the
point rather than a side effect.
The same mistake, a third time
D232 was a census reporting libkernel absent while
calling into it. D233 was a channel reporting success into nothing. This
is a check reporting a platform gap that was a link gap. All three are
the same shape: an observation reported as the thing it was
evidence for, and in every case the honest fix was to separate
the two and say which one was seen.
obs_address_is_callable guards a call. It cannot answer
why an address is null, and for three sessions it was read as though it
could.