外观
P2 Startup 挂起源就绪屏障 v1 方案
E4 修正依据
- iOS 17 挂起启动屏障证明
SIGCONT可恢复同一 PID,但 marker begin 仍早于 CoreProfile 最早真实 KDebug 记录约 172 ms;startack 不等于数据窗口已打开。 - 目标进程在 CoreProfile 启动前已挂起存在,因此首 chunk 的 trace header 可直接提供目标 PID/TID 归属,不再需要“运行后动态发现”的
0x07000000/0x25010000订阅。
最终屏障时序
text
launch target suspended, obtain PID
→ CoreProfile setConfig/start/ack
→ single consumer receives and persists first non-empty trace chunk
→ validate timebase and confirm target PID exists in trace header
→ SIGCONT same PID
→ persist launch.requested.raw at resume boundaryStartup 过滤集收窄为 decoder 的 4 组阶段事件:
text
startupSuspendedFilters = {
0x1F070000, 0x2BDC0000, 0x2B870000, 0x31CA0000
}公式与质量门禁
text
preResumeSourceReady = firstChunk.byteLength > 0
AND firstChunk.timeConfig.numer > 0
AND firstChunk.timeConfig.denom > 0
AND traceHeader.threadPidMap contains suspendedPID
resumeAllowed = targetSuspended AND preResumeSourceReady
filterSetExact = actualKdebugFilters == startupSuspendedFilterslaunchBarrierMode=process-control-suspended-source-ready-v1。- 首 chunk 先写入 immutable Session,再恢复进程;
launch.requested.raw仍以 resume 边界计时。 - trace header 不含挂起 PID、首 chunk 空、timebase 缺失、resume 失败均 fail closed,指标保持
null/—。 - 不改包、不注入、不增加第二 DTX socket。
验收
- E2:锁定 suspended PID → first chunk 写盘 → resume → launch envelope 顺序,并锁定 4 组过滤集。
- E4:iOS 17/18 各执行 control、willFinish 300 ms、didFinish 300 ms 单轮,要求 identity verified、drop=0、marker 完整且窗口内。
- 单轮通过后再进入 3×3;未通过前正式 mapping 仍为 0。
回滚
恢复 process-control-suspended-v1 ack 屏障或 v12 的非挂起首 chunk 屏障;历史 Session 不回写。