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:
@@ -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 состав до/после.
|
||||
|
||||
Reference in New Issue
Block a user