This version of the 'info pg' command adopts Peter Maydell's request to write guest-agnostic page table iterator and accessor code, along with architecture-specific hooks. The first patch in this series contributes a generic page table iterator and an x86 instantiation. As a client, we first introduce an 'info pg' monitor command, as well as a compressing callback hook for creating succinct page table representations.
After this, each successive patch replaces an exisitng x86 page table walker with a use of common iterator code. I could use advice on how to ensure this is sufficiently well tested. I used 'make check' and 'make check-avocado', which both pass; what is the typical standard for testing something like a page table related change? As far as generality, I have only attempted this on x86, but I expect the design would work for any similar radix-tree style page table. I am still new enough to the code base that I wasn't certain about where to put the generic code, as well as naming conventions. Per David Gilbert's suggestion, I was careful to ensure that monitor calls do not perturb TLB state (see the read-only flag in some functions). Version 3 of this patch series moves 'info pg' into common monitor code and implements the architecture-specific code hooks. I did not do this with the 'info mem' and 'info tlb' commands, since they have implementations on other ISAs. Don Porter (6): Add an "info pg" command that prints the current page tables Convert 'info tlb' to use generic iterator Convert 'info mem' to use generic iterator Convert x86_cpu_get_memory_mapping() to use generic iterators Move tcg implementation of x86 get_physical_address into common helper code. Convert x86_mmu_translate() to use common code. hmp-commands-info.hx | 13 + hw/core/cpu-sysemu.c | 140 ++++++ include/hw/core/cpu.h | 34 +- include/hw/core/sysemu-cpu-ops.h | 169 +++++++ include/monitor/hmp-target.h | 1 + include/monitor/monitor.h | 4 + monitor/hmp-cmds-target.c | 198 ++++++++ target/i386/arch_memory_mapping.c | 621 ++++++++++++++--------- target/i386/cpu.c | 12 + target/i386/cpu.h | 63 +++ target/i386/helper.c | 523 +++++++++++++++---- target/i386/monitor.c | 724 +++++++++------------------ target/i386/tcg/sysemu/excp_helper.c | 555 +------------------- 13 files changed, 1688 insertions(+), 1369 deletions(-) -- 2.34.1