As documented:
* @get_phys_addr_debug: Callback for obtaining a physical address.
* This must be able to handle a non-page-aligned address, and will
* return the physical address corresponding to that address.
When MMU is enabled, hexagon_cpu_get_phys_addr_debug() returns the
physical address page-aligned, not corrected to reflect the exact byte
the virtual addr maps to within the page. Let's fix that. The
MMU-disabled case is already correct.
This would break semihosting argument reads when it is added for Hexagon.
Reviewed-by: Pierrick Bouvier <[email protected]>
Signed-off-by: Matheus Tavares Bernardino <[email protected]>
---
target/hexagon/cpu.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c
index eac355497d8..73a799da877 100644
--- a/target/hexagon/cpu.c
+++ b/target/hexagon/cpu.c
@@ -570,7 +570,9 @@ static hwaddr hexagon_cpu_get_phys_addr_debug(CPUState *cs,
vaddr addr)
if (get_physical_address(env, &phys_addr, &prot, &page_size, &excp,
addr, 0, mmu_idx)) {
+ vaddr page_offset = addr & (TARGET_PAGE_SIZE - 1);
find_qemu_subpage(&addr, &phys_addr, page_size);
+ phys_addr += hexagon_cpu_mmu_enabled(env) ? page_offset : 0;
return phys_addr;
}
--
2.37.2