mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-06-22 09:17:57 +00:00
exec.c: Use cpu_get_phys_page_attrs_debug
Use cpu_get_phys_page_attrs_debug() when doing virtual-to-physical conversions in debug related code, so that we can obtain the right address space index and thus select the correct AddressSpace, rather than always using cpu->as. Backports commit 5232e4c798ba7a46261d3157b73d08fc598e7dcb from qemu
This commit is contained in:
parent
1dfba71bef
commit
73efe6cda3
18
qemu/exec.c
18
qemu/exec.c
|
@ -444,9 +444,11 @@ static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
|
||||||
#else
|
#else
|
||||||
static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
|
static void breakpoint_invalidate(CPUState *cpu, target_ulong pc)
|
||||||
{
|
{
|
||||||
hwaddr phys = cpu_get_phys_page_debug(cpu, pc);
|
MemTxAttrs attrs;
|
||||||
|
hwaddr phys = cpu_get_phys_page_attrs_debug(cpu, pc, &attrs);
|
||||||
|
int asidx = cpu_asidx_from_attrs(cpu, attrs);
|
||||||
if (phys != -1) {
|
if (phys != -1) {
|
||||||
tb_invalidate_phys_addr(cpu->as,
|
tb_invalidate_phys_addr(cpu->cpu_ases[asidx].as,
|
||||||
phys | (pc & ~TARGET_PAGE_MASK));
|
phys | (pc & ~TARGET_PAGE_MASK));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2782,8 +2784,12 @@ int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
|
||||||
target_ulong page;
|
target_ulong page;
|
||||||
|
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
|
int asidx;
|
||||||
|
MemTxAttrs attrs;
|
||||||
|
|
||||||
page = addr & TARGET_PAGE_MASK;
|
page = addr & TARGET_PAGE_MASK;
|
||||||
phys_addr = cpu_get_phys_page_debug(cpu, page);
|
phys_addr = cpu_get_phys_page_attrs_debug(cpu, page, &attrs);
|
||||||
|
asidx = cpu_asidx_from_attrs(cpu, attrs);
|
||||||
/* if no physical page mapped, return an error */
|
/* if no physical page mapped, return an error */
|
||||||
if (phys_addr == -1)
|
if (phys_addr == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -2792,9 +2798,11 @@ int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
|
||||||
l = len;
|
l = len;
|
||||||
phys_addr += (addr & ~TARGET_PAGE_MASK);
|
phys_addr += (addr & ~TARGET_PAGE_MASK);
|
||||||
if (is_write) {
|
if (is_write) {
|
||||||
cpu_physical_memory_write_rom(cpu->as, phys_addr, buf, l);
|
cpu_physical_memory_write_rom(cpu->cpu_ases[asidx].as,
|
||||||
|
phys_addr, buf, l);
|
||||||
} else {
|
} else {
|
||||||
address_space_rw(cpu->as, phys_addr, MEMTXATTRS_UNSPECIFIED,
|
address_space_rw(cpu->cpu_ases[asidx].as, phys_addr,
|
||||||
|
MEMTXATTRS_UNSPECIFIED,
|
||||||
buf, l, 0);
|
buf, l, 0);
|
||||||
}
|
}
|
||||||
len -= l;
|
len -= l;
|
||||||
|
|
Loading…
Reference in a new issue