Warum ldaxr auf echter Hardware crasht, in QEMU aber nicht

When Ldaxr Doesn't Work: Exclusive Accesses and Cacheability on AArch64

Beim Bau seines AArch64-Betriebssystems floss stieß der Autor auf ein rätselhaftes Data-Abort-Exception auf einem Raspberry Pi 5, ausgelöst durch die ldaxr-Instruktion in einem Spinlock. QEMU zeigte das Problem nie. Die Ursache lag in der Cacheability: Das SCTLR.C-Bit war standardmäßig deaktiviert, wodurch der Speicher als nicht cachebar behandelt wurde. Exklusive Zugriffe erfordern jedoch Write-Back-Cache-Attribute. Der Artikel erklärt die Zusammenhänge von Speichertypen, MAIR-Attributen und exklusiven Operationen.

Wenn der Daten-Cache deaktiviert ist, werden alle Lade- und Speicherbefehle auf cachebaren Speicher so behandelt, als wären sie nicht cachebar und inkohärent mit den Caches sowohl dieses Kerns als auch anderer Kerne im Cluster.

Mehr von diesem Tag

2026-10-11