diff options
author | Austin Clements <amdragon@MIT.EDU> | 2011-08-14 23:22:28 -0400 |
---|---|---|
committer | Blue Swirl <blauwirbel@gmail.com> | 2011-08-21 16:42:39 +0000 |
commit | c76c8416be5631dfdbd13799d3c67ad670637155 (patch) | |
tree | 8c9c338869a492e9916588a387696121ae2256da | |
parent | 8a94b8ca530a983dacc78bd165fa2afb95205cb0 (diff) |
monitor: Show combined protection bits in "info mem"
Previously, "info mem" considered and displayed only the last-level
protection bits for a memory range, which doesn't accurrately
represent the protection of that range. Now it shows the combined
protection.
Signed-off-by: Austin Clements <amdragon@mit.edu>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
-rw-r--r-- | monitor.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -2248,7 +2248,8 @@ static void mem_info_32(Monitor *mon, CPUState *env) pte = le32_to_cpu(pte); end = (l1 << 22) + (l2 << 12); if (pte & PG_PRESENT_MASK) { - prot = pte & (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); + prot = pte & pde & + (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); } else { prot = 0; } @@ -2297,8 +2298,8 @@ static void mem_info_pae32(Monitor *mon, CPUState *env) pte = le64_to_cpu(pte); end = (l1 << 30) + (l2 << 21) + (l3 << 12); if (pte & PG_PRESENT_MASK) { - prot = pte & (PG_USER_MASK | PG_RW_MASK | - PG_PRESENT_MASK); + prot = pte & pde & (PG_USER_MASK | PG_RW_MASK | + PG_PRESENT_MASK); } else { prot = 0; } @@ -2345,6 +2346,7 @@ static void mem_info_64(Monitor *mon, CPUState *env) if (pdpe & PG_PSE_MASK) { prot = pdpe & (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); + prot &= pml4e; mem_print(mon, &start, &last_prot, end, prot); } else { pd_addr = pdpe & 0x3fffffffff000ULL; @@ -2356,6 +2358,7 @@ static void mem_info_64(Monitor *mon, CPUState *env) if (pde & PG_PSE_MASK) { prot = pde & (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); + prot &= pml4e & pdpe; mem_print(mon, &start, &last_prot, end, prot); } else { pt_addr = pde & 0x3fffffffff000ULL; @@ -2369,6 +2372,7 @@ static void mem_info_64(Monitor *mon, CPUState *env) if (pte & PG_PRESENT_MASK) { prot = pte & (PG_USER_MASK | PG_RW_MASK | PG_PRESENT_MASK); + prot &= pml4e & pdpe & pde; } else { prot = 0; } |