ページフォルトについて
uClinux 調査環境について - まだ見えない先の
詳解LINUXカーネル p.401
uClinux では,arch/arm/head.S にて MMU を有効にしていないためページ変換フォルトによるアボートは発生しない.
ページ変換フォルトによりアボートされたアクセスがデータアクセスかキャッシュ保守操作の場合、データアボート例外が発生する*1.
Linux では,データアボート例外ハンドラを arch/arm/kernel/entry-armv.S にてセットしている*2.データアボート例外時は arch/arm/mm/fault.c do_DataAbort() が呼ばれる.
asmlinkage void __exception do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
例外原因をフォルトステータスレジスタ fsr から割り出す.ページ変換フォルトによるデータアボート例外時,fsr は 0x0b00111 となる*3.
const struct fsr_info *inf = fsr_info + (fsr & 15) + ((fsr & (1 << 10)) >> 6); => inf = fsr_info[7] => { do_page_fault, SIGSEGV, SEGV_MAPERR, "page translation fault" },
となり,fault.c do_page_fault() が呼ばれる.