Writes from GDB to memory-mapped IO regions are currently silently dropped. cpu_memory_rw_debug() calls address_space_write_rom(), which calls address_space_write_rom_internal(), which ignores all non-ram/rom regions.
Add a check for MMIO regions and direct those to address_space_rw() instead. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/213 Signed-off-by: Perry Hung <pe...@mosi.io> --- system/physmem.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/system/physmem.c b/system/physmem.c index 342b7a8fd4..013cdd2ab1 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -3508,7 +3508,10 @@ int cpu_memory_rw_debug(CPUState *cpu, vaddr addr, if (l > len) l = len; phys_addr += (addr & ~TARGET_PAGE_MASK); - if (is_write) { + if (cpu_physical_memory_is_io(phys_addr)) { + res = address_space_rw(cpu->cpu_ases[asidx].as, phys_addr, attrs, + buf, l, is_write); + } else if (is_write) { res = address_space_write_rom(cpu->cpu_ases[asidx].as, phys_addr, attrs, buf, l); } else { -- 2.45.0