diff options
author | Tim Newsome <tim@sifive.com> | 2021-11-29 09:48:59 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-29 09:48:59 -0800 |
commit | 0266ef52ea94554bf71c741b963461b21ac82dba (patch) | |
tree | 75bf06362f93bf0fd990ad126f0c1a65b25acce0 | |
parent | d649367a1386609da3d10e9e6d388f98781dd35f (diff) | |
download | riscv-tests-0266ef52ea94554bf71c741b963461b21ac82dba.zip riscv-tests-0266ef52ea94554bf71c741b963461b21ac82dba.tar.gz riscv-tests-0266ef52ea94554bf71c741b963461b21ac82dba.tar.bz2 |
Fix TranslateTests. (#365)
They used to set U, A, D, in intermediate page table entries which is no
longer allowed.
-rwxr-xr-x | debug/gdbserver.py | 4 | ||||
-rw-r--r-- | debug/programs/translate.c | 8 |
2 files changed, 7 insertions, 5 deletions
diff --git a/debug/gdbserver.py b/debug/gdbserver.py index 4476ea8..e75cbdf 100755 --- a/debug/gdbserver.py +++ b/debug/gdbserver.py @@ -1591,14 +1591,13 @@ class CheckMisa(GdbTest): misa = self.gdb.p("$misa") assertEqual(misa, hart.misa) -class TranslateTest(GdbTest): +class TranslateTest(GdbSingleHartTest): compile_args = ("programs/translate.c", ) def setup(self): self.disable_pmp() self.gdb.load() - self.parkOtherHarts() self.gdb.b("main") output = self.gdb.c() assertRegex(output, r"\bmain\b") @@ -1621,6 +1620,7 @@ class TranslateTest(GdbTest): self.gdb.b("error") self.gdb.b("handle_trap") self.gdb.b("main:active") + output = self.gdb.c() assertRegex(output, r"\bmain\b") assertEqual(0xdeadbeef, self.gdb.p("physical[0]")) diff --git a/debug/programs/translate.c b/debug/programs/translate.c index c0424bf..19f72ff 100644 --- a/debug/programs/translate.c +++ b/debug/programs/translate.c @@ -141,7 +141,7 @@ void add_entry(char *table, unsigned level, uint64_t virtual, uint64_t physical) // Create a new page void *new_page = get_page(); setup_page_table(new_page, current_level - 1, virtual); - entry_set(table, index, PTE_V | PTE_U | PTE_A | PTE_D | + entry_set(table, index, PTE_V | ((((reg_t) new_page) >> 2) & ~((1 << 10) - 1))); table = new_page; } else { @@ -177,9 +177,11 @@ int main() // Address translation is enabled. physical[0] = 0xdeadbeef; - assert(virtual[0] == physical[0]); virtual[1] = 0x55667788; - assert(virtual[1] == physical[1]); + assert(virtual[0] == 0xdeadbeef); + assert(physical[0] == 0xdeadbeef); + assert(virtual[1] == 0x55667788); + assert(physical[1] == 0x55667788); active: end: |