aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2021-11-29 09:48:59 -0800
committerGitHub <noreply@github.com>2021-11-29 09:48:59 -0800
commit0266ef52ea94554bf71c741b963461b21ac82dba (patch)
tree75bf06362f93bf0fd990ad126f0c1a65b25acce0
parentd649367a1386609da3d10e9e6d388f98781dd35f (diff)
downloadriscv-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-xdebug/gdbserver.py4
-rw-r--r--debug/programs/translate.c8
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: