D230 - The generation probe asked by linking, and could have killed what it was probing
obs_current_present read
&sceAgcCreateShader != NULL. Taking that address
imports the name, which puts libSceAgcDriver in
DT_NEEDED, which makes a system loader load it
before this program runs.
The two AGC libraries are current-generation graphics and a package
installs under a ps4_game category, so of the fourteen an
eboot required they were the two a title was least likely to be given -
and a DT_NEEDED a title cannot meet is a console that dies
with nothing on record (D226). The check that answers "which console is
this?" could have taken the console down before it could answer.
It asks at run time now, through obs_module_open and
obs_module_symbol. Same two markers, same meaning, and the
driver either loads or does not - either way there is a value to report.
The eboot requires 12 libraries, every one of them a
library an ordinary previous-generation title links.
The helper moved to the harness, which is where it belonged
obs_module_open and obs_module_symbol
started in surface.c and are now in harness.c
beside obs_address_is_callable, because they answer the
same kind of question one layer up. obs_address_is_callable
guards calling a function that may be absent; these guard
needing a library that may be absent, which is the layer D226
showed had no guard at all. A second caller appearing within the hour is
the usual sign a thing was in the wrong place.
harness.c includes platform.h for the first
time as a result. The harness runs checks and the checks called the
platform; asking whether a library is there is not any one check's
business, so the two calls that make it possible live with the
harness.