This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# Phase 1.0D startup and import closure
|
||||
|
||||
## Pre-main closure
|
||||
|
||||
The SDK `_start` order is BSS clear; syscall bridge; kernel argument bridge;
|
||||
klog; `__isthreaded`; `__patch_init`; runtime linker; dependent library
|
||||
opening/relocation; init array; then `main`. Both Phase-1.0D artifacts have
|
||||
zero-byte init and fini arrays and no TLS sections or PT_TLS. Heap, signal, and
|
||||
pthread behavior is not an application constructor here, but the runtime and
|
||||
linked libraries remain able to resolve their normal facilities.
|
||||
|
||||
`__patch_init` is not side-effect-free: it reads then changes current-process
|
||||
capability/attribute bytes (including source comments for JIT shared memory
|
||||
and ptrace) and writes lower/upper syscall-address bounds through kernel
|
||||
copyin. The loader also prepares mappings and SDK resources before entry.
|
||||
These are pre-main failure points with no C1/D00 marker.
|
||||
|
||||
The SDK runtime linker can resolve and conditionally load
|
||||
`/system/common/lib/libSceSysmodule.sprx`; exact runtime module availability
|
||||
and whether that conditional path executes on firmware 9.60 are unproven.
|
||||
Hardened elfldr does not resolve the artifact's dynamic symbols; the SDK
|
||||
runtime path does.
|
||||
|
||||
## Canary imports
|
||||
|
||||
| Import | Class | Rationale |
|
||||
|---|---|---|
|
||||
| `memset` | CRT_PRE_MAIN / helper | request clearing may be compiler-lowered; SDK startup precedes it |
|
||||
| `sceKernelSendNotificationRequest` | CANARY_MAIN | only C1 output |
|
||||
| `nanosleep` | CANARY_MAIN | one two-second relative wait |
|
||||
| `_Exit` | SHUTDOWN | selected terminal call |
|
||||
|
||||
Required modules are `libkernel_web.sprx` and `libSceLibcInternal.sprx`.
|
||||
|
||||
## Early-diagnostic groups
|
||||
|
||||
The complete 141-symbol set is machine-readable in
|
||||
`manifests/retroarch/phase-1.0d-early-diag-artifact.json`. Its meaningful
|
||||
boundary grouping is:
|
||||
|
||||
- CRT_PRE_MAIN: SDK-owned syscall/kernel/klog/patch/runtime-linker operations
|
||||
are statically linked and may resolve libc/kernel facilities before D00.
|
||||
No target marker precedes them.
|
||||
- RETROARCH_PRE_VIDEO: libc/POSIX support, user service, system-service splash,
|
||||
notification, clock and bounded platform status.
|
||||
- VIDEO: direct memory, equeue, and every `sceVideoOut*` import.
|
||||
- INPUT: `scePadInit`, `scePadOpen`, `scePadReadState`, `scePadClose`.
|
||||
- AUDIO: `sceAudioOutInit`, `sceAudioOutOpen`, `sceAudioOutOutput`,
|
||||
`sceAudioOutClose`.
|
||||
- SHUTDOWN: `_Exit`, close/release/delete operations and bounded teardown.
|
||||
- UNREACHABLE_IN_PROFILE: generic RetroArch file-write strings and code may
|
||||
remain linked, but the profile routes mutating entrypoints through the
|
||||
write firewall and disables content/configuration; no socket/SceNet import
|
||||
is present.
|
||||
|
||||
The import list alone cannot prove reachability. Conversely, absent imports do
|
||||
not disprove statically linked behavior. The source profile, linker map,
|
||||
disassembly, undefined-symbol inventory, and host fault model are considered
|
||||
together. Generic localization strings such as netplay text and
|
||||
`udp://127.0.0.1:` remain in the binary; there is no target network callgraph
|
||||
or network import. SDK patch symbols also remain because normal CRT startup
|
||||
was an explicit requirement.
|
||||
|
||||
The earliest new marker that does not modify SDK CRT or loader architecture is
|
||||
therefore C1/D00 at application `main`. A notification earlier than that would
|
||||
require a separately reviewed CRT/loader change and is out of scope.
|
||||
Reference in New Issue
Block a user