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>
This commit is contained in:
		
							parent
							
								
									8a94b8ca53
								
							
						
					
					
						commit
						c76c8416be
					
				@ -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,7 +2298,7 @@ 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 |
 | 
			
		||||
                                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;
 | 
			
		||||
                                        }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user