23l: DR exec-watch verified working end-to-end by micro-test on this kernel (SIGTRAP+DR6 correct); contradiction isolated to process/thread targeting in tracer, single remaining hypothesis documented with debug protocol

This commit is contained in:
2026-08-24 02:22:55 +03:00
parent baafbb6dc6
commit 56edd3c0f4
2 changed files with 28 additions and 3 deletions
+14
View File
@@ -2461,3 +2461,17 @@ resweep-CONT чурн); (в) по хиту — дамп rcx(bands)/rdx(scratch)
(г) если рендер опять не стартовал — просто перезапустить (флак ~50%).
После дампа bands[] в момент param-change: сравнить с R-кривой, восстановить
G, декодировать потребителя через backtrace ([rsp]) из того же хита.
### 23l (короткое): DR-механизм верифицирован микротестом; расхождение локализовано
Микротест /tmp/opencode/dtest.py на fork+exec ребёнке: DR0 exec-watch срабатывает
(SIGTRAP, rip==target, DR6 bit0) — ядро/CPU полностью поддерживают аппаратные
ловушки через POKEUSER 0x350/0x388. При этом fnexec с ранним армированием
(до создания экземпляра, наследование через TRACECLONE + армирование при
рождении каждого треда) даёт 0 попаданий на {529fe0, loop-head, design×2,
dispatcher, bidir} при подтверждённых рендерах и 8–12/8–12 армированных тредов.
Одновременно: disp32-скан показывает, что ВЕСЬ доступ к scratch/FIR идёт только
из декодированного цикла 52bxxx. Прямое противоречие ⇒ остался ровно один
неисключённый вариант: **трассируется не тот процесс/треды умирают до арма**.
Следующий шаг: в fnexec логировать КАЖДЫЙ stop (rip,dr6,pid) без фильтра +
счётчик всех SIGTRAP; если трапов нет вообще на тредах, которые заведомо
выполняют модульный код — сравнивать /proc/pid/task состав до/после.