コード例 #1
0
int
gdb_rx_mem(unsigned char *addr, size_t size)
{
	unsigned char *p;
	void *prev;
	void *wctx;
	jmp_buf jb;
	size_t cnt;
	int ret;
	unsigned char c;

	if (size * 2 != gdb_rxsz)
		return (-1);

	wctx = gdb_begin_write();
	prev = kdb_jmpbuf(jb);
	ret = setjmp(jb);
	if (ret == 0) {
		p = addr;
		cnt = size;
		while (cnt-- > 0) {
			c = (C2N(gdb_rxp[0]) << 4) & 0xf0;
			c |= C2N(gdb_rxp[1]) & 0x0f;
			*p++ = c;
			gdb_rxsz -= 2;
			gdb_rxp += 2;
		}
		kdb_cpu_sync_icache(addr, size);
	}
	(void)kdb_jmpbuf(prev);
	gdb_end_write(wctx);
	return ((ret == 0) ? 1 : 0);
}
コード例 #2
0
int
db_write_bytes(vm_offset_t addr, size_t size, char *data)
{
	jmp_buf jb;
	void *prev_jb;
	char *dst;
	size_t cnt;
	int ret;

	prev_jb = kdb_jmpbuf(jb);
	ret = setjmp(jb);
	if (ret == 0) {
		dst = (char *)addr;
		cnt = size;

		while (cnt-- > 0)
			*dst++ = *data++;
		kdb_cpu_sync_icache((void *)addr, size);
	}
	(void)kdb_jmpbuf(prev_jb);
	return (ret);
}