Skip to content

Ship a stub libprivileged-service-client.so for the AU7200, gated to installs where the engine has failed (issue 105) - #119

Merged
PatrickSt1991 merged 1 commit into
mainfrom
stub-privileged-service
Oct 3, 2026
Merged

PatrickSt1991 merged 1 commit into
mainfrom
stub-privileged-service

Conversation

@PatrickSt1991

Copy link
Copy Markdown
Contributor

The build-e1a648d page from the AU7200 (2026-10-03, one relaunch, no install) carries the finished import census, taken ahead of the engine in 1.4 s: 115 needed (2 refused: libwgt-manifest-handlers.so.1, libprivileged-service-client.so), 2520 imports, 27 unresolved (23 C++).

Read with what the census records beside each name, that is two readings at once:

  • The 23 C++ names are all wgt::parse — the exports of libwgt-manifest-handlers.so.1, whose refusal was undefined symbol: _ZTIN6parser15ManifestHandlerE, a typeinfo that libmanifest-parser.so.1 provides and which is later on the same DT_NEEDED list. Opened alone and RTLD_LOCAL it fails; under the engine, with the whole list in one scope, it loads. Not a wall.
  • The 4 plain C names — PS_Mknod, PS_Mount, PS_Umount, PS_ErrorToString — are the blocked library's whole surface as the engine uses it. That is the first reading written down in INTERNALS before the page existed: a no-op stub is buildable, and the build after ships it.

So this build does two things:

  • The census takes a second pass. A library refused for an undefined symbol is held back, the loaded libraries are promoted with RTLD_NOLOAD|RTLD_GLOBAL (nothing new loaded), and it is asked again. The next page should read 4 unresolved: PS_Mknod (FUNC), PS_Mount (FUNC), PS_Umount (FUNC), PS_ErrorToString (FUNC). tools/engineimports gains an underlinked scenario that builds exactly that shape and holds the census to 0 refused, 0 unresolved; all scenarios pass.
  • The stub ships. Overscan6/res/libprivileged-service-client.so (5 KB) from tools/elfprobe/psstub.s: four functions returning 0 (an empty string for PS_ErrorToString), SONAME libprivileged-service-client.so, no NEEDED, no TEXTREL (PC-relative, so the loader never needs a writable code page). EngineStub dlopens it RTLD_NOW|RTLD_GLOBAL by absolute path from OnCreate, after the census and before ewk_init, so the loader finds the soname already in the process and never opens the file in /usr/lib it may not.

Two gates stand in for the "diagnostics go behind the engine" rule, since this is the thing being tried and has to be in front:

  • Never on a set where the engine starts: the gate is NativeProbe.EngineFailedHere(), the ledger that only exists on an install whose engine has failed. Everywhere else the header says engine stub: shipped, not loaded — the engine has not failed on this install.
  • At most twice where it does not help: engine-stub.txt in data/ gets trying before the dlopen and came back once the engine answers either way. Two trying lines with nothing behind them and the stub is withheld, the failure screen returns, the report says so.

Only the tizen6 package carries the file. ./build.sh all builds all five; unzip -l dist/Overscan-tizen6.tpk shows res/libprivileged-service-client.so; OverscanProbe compiles. tools/elfprobe/build.sh now builds both libraries; the probe library is left at its committed bytes.

INTERNALS has the reading of the page and, written before the next report exists, what each of its five possible shapes means — including the one that means the AU7200 runs Overscan and the one that ends the stub route.

…installs where the engine has failed (issue 105)

The build-e1a648d census is read: of its 27 unresolved names, 23 are wgt::parse
exports of libwgt-manifest-handlers.so.1, which the census refused for an
undefined typeinfo that libmanifest-parser.so.1 (later on the same list)
provides — an order, not a wall. The four left are the blocked library's whole
surface as the engine uses it: PS_Mknod, PS_Mount, PS_Umount, PS_ErrorToString,
all plain C functions.

So the census takes a second pass — a library refused for an undefined symbol
is held back, the loaded ones are promoted RTLD_NOLOAD|RTLD_GLOBAL, and it is
asked again — and the stub ships: tools/elfprobe/psstub.s, four no-op functions
under the engine's soname, no NEEDED, no TEXTREL, in Overscan6/res/. EngineStub
dlopens it RTLD_NOW|RTLD_GLOBAL before ewk_init, only on an install whose ledger
says the engine already failed there, and withholds it after two launches that
never came back with it in. Both report pages carry an `engine stub:` line.

tools/engineimports gains the underlinked scenario; tools/elfprobe/build.sh
builds both libraries. INTERNALS has the reading of the page and what each
possible next report means.
@PatrickSt1991
PatrickSt1991 merged commit 91f53ce into main Oct 3, 2026
7 checks passed
@PatrickSt1991
PatrickSt1991 deleted the stub-privileged-service branch October 3, 2026 07:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant