QEMU에서는 잘 되던 ldaxr, 라즈베리파이 5에서 예외를 던진 이유

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

floss 운영체제를 AArch64용으로 만들면서 스핀락을 구현한 저자는 QEMU에서는 문제없이 돌아가던 ldaxr 명령이 라즈베리파이 5 실기기에서 Data Abort 예외를 일으킨다는 사실을 발견한다. 원인은 SCTLR.C 비트가 0으로 설정되어 데이터 캐시가 꺼져 있었고, 그 결과 메모리가 Non-cacheable로 취급되어 exclusive 접근이 실패한 것이었다. MAIR 설정 실험을 통해 Write-Back 속성이 있어야만 ldaxr이 정상 동작한다는 점도 확인한다.

흥미롭게도, 각 코어의 전역 캐시 가능성 설정을 SCTLR.C를 1로 설정해 활성화하더라도, MAIR 속성을 Write-Back이 활성화되지 않은 값으로 바꾸면 동일한 예외가 발생한다.

이 날의 다른 글

2026-10-11