S40 · SOURCE-BOUND GATE EVIDENCE
RPi5 G7d timer-preemption paketi hazırlandı; fiziksel BOOT7D bekliyor
Operations komutu/kapı ailesi → gerçek repository yürütme sözleşmesi Bu sayfa yalnız S40 kapısına aittir; komşu kapıların kaynakları bu kabulün içine katılmaz.
S40Komut / fiziksel sözleşmeOperations id exactsource SHA exact
operation: rpi5-g7d-timer-preemption-package-staged
script/Makefile/config · Operations · 2 exact excerpt
sequence-bound=true · implementation-bound=false
01 · Yürütme sözleşmesi
Gerçek script / Makefile / config kaynağı
tam dosyaL1–L114
scripts/verify-rpi5-g7d-layout.sh::verify-rpi5-g7d-layout.sh
#!/bin/sh
set -eu
if [ "$#" -ne 2 ]; then
echo "usage: $0 <llvm-objdump> <rpi5-kernel-elf>" >&2
exit 2
fi
objdump=$1
kernel=$2
for path in "$objdump" "$kernel"; do
if [ ! -f "$path" ] || [ ! -r "$path" ]; then
echo "HATA: G7d gate okuyamıyor: $path" >&2
exit 1
fi
done
disassembly=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g7d-dis.XXXXXX")
el1_irq=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g7d-el1irq.XXXXXX")
el0_irq=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g7d-el0irq.XXXXXX")
task_a=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g7d-taska.XXXXXX")
task_b=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g7d-taskb.XXXXXX")
irq_switch=$(mktemp "${TMPDIR:-/tmp}/aselsanos-g7d-switch.XXXXXX")
trap 'rm -f "$disassembly" "$el1_irq" "$el0_irq" "$task_a" "$task_b" "$irq_switch"' EXIT HUP INT TERM
"$objdump" -d --demangle --no-show-raw-insn "$kernel" > "$disassembly"
extract_symbol() {
symbol=$1
output=$2
awk -v header="<$symbol>:" '
index($0, header) { capture = 1 }
capture && /^[[:space:]]*$/ { exit }
capture { print }
' "$disassembly" > "$output"
if [ ! -s "$output" ]; then
echo "HATA: G7d makine-kodu sembolü bulunamadı: $symbol" >&2
exit 1
fi
}
extract_symbol el1_spx_irq "$el1_irq"
extract_symbol el0_aarch64_irq "$el0_irq"
extract_symbol rpi5_g7d_task_a "$task_a"
extract_symbol rpi5_g7d_task_b "$task_b"
extract_symbol rpi5_g7d_on_timer_irq "$irq_switch"
verify_irq_trampoline() {
file=$1
label=$2
for contract in \
'sub[[:space:]]+sp, sp, #0x110' \
'stp[[:space:]]+x0, x1, \[sp\]' \
'stp[[:space:]]+x28, x29, \[sp, #0xe0\]' \
'mrs[[:space:]]+x9, ELR_EL1' \
'mrs[[:space:]]+x10, SPSR_EL1' \
'stp[[:space:]]+x30, x9, \[sp, #0xf0\]' \
'str[[:space:]]+x10, \[sp, #0x100\]' \
'bl[[:space:]]+.*<rust_irq_handler>' \
'mov[[:space:]]+sp, x0' \
'msr[[:space:]]+SPSR_EL1, x10' \
'msr[[:space:]]+ELR_EL1, x9' \
'add[[:space:]]+sp, sp, #0x110' \
'[[:space:]]eret([[:space:]]|$)'; do
if ! grep -Eq "$contract" "$file"; then
echo "HATA: $label integer exception-frame sözleşmesi eksik: $contract" >&2
exit 1
fi
done
if ! awk '
/bl[[:space:]]+.*<rust_irq_handler>/ { called = 1; next }
called && /mov[[:space:]]+sp, x0/ { redirected = 1; exit }
called && /^[[:space:]]*[[:xdigit:]]+:/ { exit }
END { exit redirected ? 0 : 1 }
' "$file"; then
echo "HATA: $label rust_irq_handler dönüşünü hemen SP'ye bağlamıyor" >&2
exit 1
fi
}
verify_irq_trampoline "$el1_irq" el1_spx_irq
verify_irq_trampoline "$el0_irq" el0_aarch64_irq
for task in "$task_a" "$task_b"; do
if grep -Eq '(^|[[:space:],\[])(([qv][0-9]+)|([sd][0-9]+))([[:space:],\]]|$)' "$task"; then
echo "HATA: G7d FP=UNUSED task FP/SIMD register talimatı içeriyor" >&2
cat "$task" >&2
exit 1
fi
done
if grep -Eq '<context_switch>|msr[[:space:]]+DAIFClr' "$irq_switch"; then
echo "HATA: G7d IRQ dispatcher generic context_switch veya erken IRQ açma içeriyor" >&2
exit 1
fi
for marker in \
'ASELSAN/G7D0 CPU=0 MODE=PREEMPT IRQ=PPI27 TASKS=2 QUANTUM=' \
'ASELSAN/G7D1' \
'ASELSAN/G7D2' \
'ASELSAN/G7D3' \
'ASELSAN/G7D4' \
'ASELSAN/BOOT7D PREEMPT=OK IRQ=PPI27 ORDER=ABABA SWITCHES=4 QUANTUM=' \
'ASELSAN/G7DERR'; do
if ! strings "$kernel" | grep -Fq "$marker"; then
echo "HATA: G7d marker ELF içinde yok: $marker" >&2
exit 1
fi
done
echo "PASS: G7d full integer exception-frame redirect, static task stacks and FP=UNUSED machine-code contract verified"
snippet sha256: 58cd800e5b60…file sha256: 58cd800e5b60…
02 · Kapı kimlik kaydı
Operations sıra, kimlik ve başlık bağı
tam Operations kaydıL33658–L33767
website/src/lib/operations.ts::rpi5-g7d-timer-preemption-package-staged
{
id: "rpi5-g7d-timer-preemption-package-staged",
date: "2026-08-20",
sequence: 40,
status: "partial",
title:
"RPi5 G7d timer-preemption paketi hazırlandı; fiziksel BOOT7D bekliyor",
summary:
"G7c fiziksel BOOT7C sınırı korunarak yalnız board-rpi5 için çalışan dar bir G7d yolu hazırlandı. PPI27 timer IRQ'su iki sabit EL1 kernel görevi arasında tam integer exception frame'i ve iki ayrı 64 KiB statik stack'i yönlendiriyor; dört involuntary switch'te A→B→A→B→A sırası, resume sonrası ilerleme, canary'ler ve EL1h monitörüne dönüş fail-closed sözleşmeyle denetleniyor. G7d hedef testleri 16/16, workspace 84/84, üç kart build'i, QEMU runtime smoke, RPi5 makine-kodu kapısı ve paket manifesti geçti. 230560 baytlık 0927d195…39f9 imaj yalnız build/rpi5 içinde hazırdır; microSD yazılmadı ve gerçek UART10 G7D0–G7D4/BOOT7D kanıtı alınmadığı için kayıt staged/partial tutulur.",
evidence: [
"G7d yalnız CPU0'da iki sabit EL1 kernel görevi ve dört switch için etkinleşir. Genel scheduler task yaşam döngüsü, heap tahsisi ve generic context_switch yolu kullanılmaz.",
"İki ayrı 64 KiB, 16 bayt hizalı statik stack'in altında canary bulunur. 272 baytlık exception frame x0–x30, ELR_EL1 ve SPSR_EL1'i taşır; frame pointer aynı zamanda restore edilecek SP'dir.",
"Hem el1_spx_irq hem el0_aarch64_irq bütün integer register'ları kaydediyor; rust_irq_handler'ın döndürdüğü frame pointer restore başlamadan hemen önce SP'ye alınıyor ve seçilen frame eret ile devam ediyor.",
"GIC EOI frame yönlendirmesinden önce tamamlanıyor. Handler nested IRQ açmıyor; IRQ maskesi yalnız seçilen SPSR_EL1 ile eret dönüşünde eski haline geliyor.",
"Quantum tam 10 teslim edilmiş timer tick'i. Switch marker'ları başlangıçtan 11, 21, 31 ve 41 tick sonra A→B→A→B→A sırasını kanıtlamak üzere exact alan sözleşmesiyle üretiliyor.",
"A ve B progress sayaçlarının her biri resume sonrasında ilk değerini aşmadan BOOT7D kabul edilmez. Dördüncü switch sonrası başlangıç EL1h monitor frame'i geri yüklenir; iki stack canary'si, en az 100 tick ve son switch sonrası ilişkili SEC örneği zorunludur.",
"Görevler FP/SIMD kullanmaz ve marker sözleşmesi FP=UNUSED taşır. Bu paket FP/SIMD context save/restore iddiası kurmaz.",
"make verify-rpi5-g7d-host exit 0 verdi: kaynak/ABI/ordering testleri 6/6 ve strict UART/adversarial transcript testleri 10/10; toplam G7d hedef testi 16/16 PASS.",
"cargo test --workspace toplam 84/84 PASS verdi. make verify-core exit 0 ile QEMU, RPi4 ve RPi5 build'lerini, QEMU runtime smoke'u, G7c geriye dönük kapısını ve RPi5 paketini tamamladı.",
"QEMU smoke exact ‘hello ELF + IPC ELF + scheduler SEC 5; fault marker yok’ sonucunu verdi. G7d marker'ları QEMU ve RPi4 ELF'lerinde sıfır; G7D0/G7D1/BOOT7D/G7DERR yalnız RPi5 ELF'inde birer kez bulundu.",
"scripts/verify-rpi5-g7d-layout.sh iki IRQ trampoline'ının tam frame save/restore dizisini, dönüş frame pointer'ını, GIC EOI sırasını, statik stack kullanımını, generic context_switch yokluğunu ve FP=UNUSED kapsamını dondurulmuş RPi5 makine kodunda PASS kabul etti.",
"Yeni aselsanos-rpi5.img exact 230560 bayt / 0927d195432c8a9c61813f35438bb09d3323e2ce94e10fa791de47f0b01239f9; RPi5 ELF 6904536 bayt / fe8df97cdf0ba7eb6b6f2dabf0f0871d2099ad517b1c752a4333e77ab142dfdd olarak sabitlendi.",
"Sabit DTB 78703 bayt / 40a2fbe9…ca00 ve config.txt 501 bayt / 1248275c…d76b kaldı. SHA256SUMS 248 bayt / fc2f2268…be71 ve üç payload için manifest 3/3 OK verdi.",
"Fiziksel Pi kapalı tutuldu; microSD'deki 226448 bayt / 276d568b…a99d0 G7c paketi değiştirilmedi. Teknik ve fiziksel kabul sınırı docs/M8.1-RPi5-G7d-Timer-Preemption-Staged-Proof.md içinde donduruldu.",
],
commands: [
"make verify-rpi5-g7d-host",
"cargo test --workspace",
"make verify-core",
"make verify-qemu",
"make kernel-rpi4",
"make image-rpi5",
"cd build/rpi5 && shasum -a 256 -c SHA256SUMS",
"QEMU/RPi4/RPi5 ELF G7d marker isolation audit",
"shasum -a 256 RPi5 ELF + image + DTB + config + manifest",
],
terminalSessionsNote:
"Bu oturumlar 20 Ağustos 2026'da dondurulmuş nihai G7d kaynağı üzerinde yeniden çalıştırıldı. Uzun, tekrarlayan mevcut compiler warning'leri seçili çıktıda kısaltılmıştır; bütün gösterilen komutlar exit 0 verdi. Fixture çıktısı gerçek UART olarak sunulmaz.",
terminalSessions: [
{
id: "g7d-host-tests",
title: "G7d kaynak/ABI · strict UART negatif matris",
commandLines: ["make verify-rpi5-g7d-host"],
outputLines: [
"Running tests/rpi5_g7d_source.rs",
"test result: ok. 6 passed; 0 failed",
"Running tests/rpi5_g7d_uart.rs",
"test result: ok. 10 passed; 0 failed",
],
exitCode: 0,
outputMode: "selected",
outputNote: "İki G7d hedef test binary'sinin sonuç satırları seçildi.",
},
{
id: "g7d-core-matrix",
title: "Workspace · üç board · QEMU runtime",
commandLines: ["make verify-core"],
outputLines: [
"cargo test --workspace: 84 passed; 0 failed",
"QEMU kernel build: PASS",
"QEMU smoke PASS: hello ELF + IPC ELF + scheduler SEC 5; fault marker yok",
"Raspberry Pi 4 kernel build: PASS",
"Raspberry Pi 5 kernel build: PASS",
"RPi5 G7c + G7d machine-code/layout package: PASS",
],
exitCode: 0,
outputMode: "selected",
outputNote:
"Uzun mevcut compiler warning dökümü yerine matris sonuçları seçildi; komut exit 0 verdi.",
},
{
id: "g7d-machine-code-package",
title: "G7d makine-kodu kapısı ve dondurulmuş paket",
commandLines: ["make image-rpi5", "shasum -a 256 build/rpi5/*"],
outputLines: [
"PASS: RPi5 PMM publish SCTLR_EL1 + ISB sonrasında; _start_rust pre-MMU gövdesinde exclusive atomik yok",
"PASS: G7c trusted ELF, exact SVC ABI, cache/TLB publish ve sanitized first-ERET doğrulandı",
"PASS: G7d full integer exception-frame redirect, static task stacks and FP=UNUSED machine-code contract verified",
"aselsanos-rpi5.img: OK · bcm2712-rpi-5-b.dtb: OK · config.txt: OK",
"0927d195432c8a9c61813f35438bb09d3323e2ce94e10fa791de47f0b01239f9 aselsanos-rpi5.img",
"fc2f2268c09d50d872bf6cb80d65ab948171782e2d2f41dc388d2be83e8abe71 SHA256SUMS",
],
exitCode: 0,
outputMode: "selected",
outputNote:
"Makine-kodu ve manifest kabul satırları ile exact hashler seçildi.",
},
{
id: "g7d-board-marker-isolation",
title: "G7d board marker izolasyonu",
commandLines: ["strings QEMU/RPi4/RPi5 ELF · G7D marker sayımı"],
outputLines: [
"qemu G7D0=0 G7D1=0 BOOT7D=0 G7DERR=0",
"rpi4 G7D0=0 G7D1=0 BOOT7D=0 G7DERR=0",
"rpi5 G7D0=1 G7D1=1 BOOT7D=1 G7DERR=1",
],
exitCode: 0,
outputMode: "complete",
},
],
limitations: [
"0927d195…39f9 G7d paketi yalnız build/rpi5 içinde hazırdır; microSD'ye yazılmadı. Fiziksel kartta gerçek BOOT7C PASS veren 276d568b…a99d0 G7c paketi bulunur ve Pi kapalıdır.",
"G7D0–G7D4 ve BOOT7D henüz gerçek Raspberry Pi 5 UART10 kaydında gözlenmedi; G7d fiziksel PASS değildir. Fixture'daki tick/progress değerleri sentetik validator girdisidir.",
"Bu yol yalnız CPU0, iki sabit EL1 kernel görevi, dört involuntary switch ve tek kısa boot smoke'udur; genel scheduler, EL0 task preemption, task lifecycle, fairness, SMP veya uzun soak değildir.",
"Yalnız integer frame kanıtlanır. FP/SIMD, SVE/SME, debug register'ları, PAC/MTE ve diğer genişletilmiş mimari durumlar kapsam dışıdır.",
"64 KiB stack canary'leri guard page, yüksek-su ölçümü, taşma kurtarma veya allocator izolasyonu değildir; iki statik stack bu dar yol için kalıcı BSS alanıdır.",
"QEMU regression ve cfg izolasyonu sağlar; RPi5 ELF marker presence, disassembly ve sentetik fixture gerçek timer IRQ execution/UART kanıtının yerini tutmaz.",
"G8 PSCI/SMP ayrı kapıdır.",
],
},snippet sha256: 112b0884910f…file sha256: 9726dbf00f84…
Kayıtlı yürütme/kanıt komutu
make verify-rpi5-g7d-hostRegistry schema v5 · generator
website/scripts/generate-code-gates.mjs · Tam SHA-256: 3050638b71a684d8f8f947a8a6faa237a17fa8db5dc0db04fb207b668b462af9