Sync icache before returning from db_write_bytes so that we don't get

stuck at a ddb breakpoint.
This commit is contained in:
uwe 2008-06-07 03:25:13 +00:00
parent 1e2b0fc5a1
commit 5a5542fb41
1 changed files with 12 additions and 10 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: db_memrw.c,v 1.8 2006/02/24 00:57:19 uwe Exp $ */
/* $NetBSD: db_memrw.c,v 1.9 2008/06/07 03:25:13 uwe Exp $ */
/*
* Mach Operating System
@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: db_memrw.c,v 1.8 2006/02/24 00:57:19 uwe Exp $");
__KERNEL_RCSID(0, "$NetBSD: db_memrw.c,v 1.9 2008/06/07 03:25:13 uwe Exp $");
#include <sys/param.h>
#include <sys/proc.h>
@ -42,6 +42,7 @@ __KERNEL_RCSID(0, "$NetBSD: db_memrw.c,v 1.8 2006/02/24 00:57:19 uwe Exp $");
#include <uvm/uvm_extern.h>
#include <sh3/cache.h>
#include <machine/db_machdep.h>
#include <ddb/db_access.h>
@ -70,8 +71,10 @@ db_read_bytes(vaddr_t addr, size_t size, char *data)
*data++ = *src++;
}
/*
* Write bytes to kernel address space for debugger.
* XXX: need support for writing to P3 read-only text pages.
*/
void
db_write_bytes(vaddr_t addr, size_t size, const char *data)
@ -79,17 +82,16 @@ db_write_bytes(vaddr_t addr, size_t size, const char *data)
char *dst = (char *)addr;
/* properly aligned 4-byte */
if (size == 4 && ((addr & 3) == 0) && (((uintptr_t)data & 3) == 0)) {
if (size == 4 && ((addr & 3) == 0) && (((uintptr_t)data & 3) == 0))
*(uint32_t *)dst = *(const uint32_t *)data;
return;
}
/* properly aligned 2-byte */
if (size == 2 && ((addr & 1) == 0) && (((uintptr_t)data & 1) == 0)) {
else if (size == 2 && ((addr & 1) == 0) && (((uintptr_t)data & 1) == 0))
*(uint16_t *)dst = *(const uint16_t *)data;
return;
}
while (size-- > 0)
*dst++ = *data++;
else
while (size-- > 0)
*dst++ = *data++;
sh_icache_sync_all();
}