From 75588c5a15dad18e2f69aee6a984065d314bffb7 Mon Sep 17 00:00:00 2001 From: marcel Date: Sat, 9 Jun 2007 21:55:17 +0000 Subject: Add kdb_cpu_sync_icache(), intended to synchronize instruction caches with data caches after writing to memory. This typically is required to make breakpoints work on ia64 and powerpc. For those architectures the function is implemented. --- sys/gdb/gdb_packet.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'sys/gdb/gdb_packet.c') diff --git a/sys/gdb/gdb_packet.c b/sys/gdb/gdb_packet.c index 753c9b7..d3e5a0a 100644 --- a/sys/gdb/gdb_packet.c +++ b/sys/gdb/gdb_packet.c @@ -33,6 +33,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -129,8 +130,10 @@ gdb_rx_equal(const char *str) int gdb_rx_mem(unsigned char *addr, size_t size) { + unsigned char *p; void *prev; jmp_buf jb; + size_t cnt; int ret; unsigned char c; @@ -140,13 +143,16 @@ gdb_rx_mem(unsigned char *addr, size_t size) prev = kdb_jmpbuf(jb); ret = setjmp(jb); if (ret == 0) { - while (size-- > 0) { + p = addr; + cnt = size; + while (cnt-- > 0) { c = (C2N(gdb_rxp[0]) << 4) & 0xf0; c |= C2N(gdb_rxp[1]) & 0x0f; - *addr++ = c; + *p++ = c; gdb_rxsz -= 2; gdb_rxp += 2; } + kdb_cpu_sync_icache(addr, size); } (void)kdb_jmpbuf(prev); return ((ret == 0) ? 1 : 0); -- cgit v1.1