ldaxrが例外を投げる理由:AArch64のキャッシュ可能性と排他アクセス

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

自作OS「floss」をAArch64向けに開発中、スピンロックのldaxr命令がQEMUでは動作するのにRaspberry Pi 5の実機でData Abort例外を引き起こした。原因はSCTLR.Cビットが0でデータキャッシュが無効になっており、メモリが非キャッシュ可能として扱われていたこと。Write-Back属性のないメモリでは排他アクセスが機能しないことを実験で確認。実機とエミュレータの挙動の違いが浮き彫りになった。

データキャッシュが無効の場合、キャッシュ可能メモリへのすべてのロードおよびストア命令は非キャッシュ可能として扱われ、このコアとクラスタ内の他のコアの両方のキャッシュとコヒーレントでなくなる。ソフトウェアはこれを考慮に入れなければならない。

この日のほかの記事

2026-10-11