Open
Description
An 8-byte store to address 0xffc, for example, should store 4 bytes to one page and 4 to the next page. When paging is enabled, two separate translations are required.
The Sail model is only translating the first page, then storing 8 bytes to contiguous physical addresses.
- No tablewalk occurs for the second page
- No exceptions are taken if the second page has unacceptable permissions
- The physical address for the second half of the store is incorrect
I created a repo with a test to recreate the issue. Instruction 128 shows the problem. There is one tablewalk, then 8 bytes loaded from 0x80003FFC.
This should take an exception (with mtval
0x0000003a177df000) because the second page's access bit is 0. The handler will repair the access bit, then re-execute the instruction. The second attempt should succeed, loading the second half of the access from a different physical page.
(Fetches across pages seem to work correctly.)