D077 - The vendor segment begins with a fingerprint region, and leaving it out moves everything

Status: decided, 2026-08-29.

A real executable's string table does not start at offset zero of the vendor segment. It starts at 0x18, behind sixteen bytes of build identifier and eight of padding, and DT_SCE_FINGERPRINT carries that region's offset - which is zero.

Omitting it shifts every table in the segment down by 0x18, and the loader's layout calculation refuses the file with ENOEXEC while printing that every tag it wanted was present. The counts were all correct; the addresses they carried were not where the layout expected them.

The region is written as zeroes, like every digest and signature area here. A fingerprint identifies a build and authenticates nothing, and a plausible-looking one would be a value nothing here can justify. The console reads it back and reports it, which is how the reservation was confirmed to be the right size:

# /app0/eboot.bin
#  fingerprint: 0000000000000000000000000000000000000000

against a real library's 85b56188ae90acbce809687c007960fa00000000 - twenty bytes displayed, sixteen of them meaningful, inside the 0x18 reserved.

With this, a package built entirely by this toolchain installs, mounts, loads and executes on real hardware for the first time:

<311> EXEC /app0/eboot.bin [user], vm#1, dmem#1 abi=ps4 category=ps4_game
[AppMgr Trace]: New Process, pid=0x137, created.  New App, appId=0x2018, created
[ResArbitrator] BigApp[0x2018] Changed state "RUNNING"