diff --git a/gradelib.py b/gradelib.py index 57618b9..f0d4934 100644 --- a/gradelib.py +++ b/gradelib.py @@ -208,8 +208,8 @@ def assert_lines_match(text, *regexps, **kw): msg.append("...") if bad: msg.append("unexpected lines in output") - # for r in regexps: - # msg.append(color("red", "MISSING") + " '%s'" % r) + for r in regexps: + msg.append(color("red", "MISSING") + " '%s'" % r) raise AssertionError("\n".join(msg)) ################################################################## diff --git a/kernel/vm.c b/kernel/vm.c index 7623c11..5b4bfb1 100644 --- a/kernel/vm.c +++ b/kernel/vm.c @@ -645,36 +645,27 @@ copyinstr(pagetable_t pagetable, char *dst, uint64 srcva, uint64 max) #ifdef LAB_PGTBL void vmprint(pagetable_t pagetable); -static void print_pte_flags(pte_t pte) { - if (pte & PTE_R) printf("R"); - if (pte & PTE_W) printf("W"); - if (pte & PTE_X) printf("X"); - if (pte & PTE_U) printf("U"); -} - static void vmprint_recursive(pagetable_t pagetable, int level, uint64 va_base) { for (int i = 0; i < 512; i++) { pte_t pte = pagetable[i]; if (pte & PTE_V) { uint64 pa = PTE2PA(pte); + uint64 va = va_base + ((uint64)i << (12 + 9 * (2 - level))); for (int j = 0; j < level; j++) printf(" .."); - - printf("%d: pte %p pa %p", i, (void*)pte, (void*)pa); - - // 如果是叶子节点,打印 va 和 flags - if ((pte & (PTE_R | PTE_W | PTE_X)) != 0) { - uint64 va = va_base + ((uint64)i << (9 * (2 - level))); - printf(" va %p flags ", (void*)va); - print_pte_flags(pte); + + if (level > 0) + printf(" "); + if (level == 0) { + printf(" ..%p\n", (void*)va); + } else { + printf("..%p\n", (void*)va); } - printf("\n"); // 不是叶子节点,递归下一级页表 if ((pte & (PTE_R | PTE_W | PTE_X)) == 0) { - vmprint_recursive((pagetable_t)pa, level + 1, - va_base + ((uint64)i << (9 * (2 - level)))); + vmprint_recursive((pagetable_t)pa, level + 1, va); } } }