db_interface.c revision 170473
1168404Spjd/* $FreeBSD: head/sys/powerpc/powerpc/db_interface.c 170473 2007-06-09 21:55:17Z marcel $ */ 2168404Spjd/* $NetBSD: db_interface.c,v 1.20 2002/05/13 20:30:09 matt Exp $ */ 3168404Spjd/* $OpenBSD: db_interface.c,v 1.2 1996/12/28 06:21:50 rahnds Exp $ */ 4168404Spjd 5168404Spjd 6168404Spjd#include <sys/param.h> 7168404Spjd#include <sys/systm.h> 8168404Spjd#include <sys/cons.h> 9168404Spjd#include <sys/kdb.h> 10168404Spjd#include <sys/ktr.h> 11168404Spjd#include <sys/lock.h> 12168404Spjd#include <sys/pcpu.h> 13168404Spjd#include <sys/proc.h> 14168404Spjd#include <sys/smp.h> 15168404Spjd 16168404Spjd#include <machine/kdb.h> 17168404Spjd#include <machine/md_var.h> 18168404Spjd 19168404Spjd#include <vm/vm.h> 20168404Spjd#include <vm/pmap.h> 21168404Spjd 22168404Spjd#include <ddb/ddb.h> 23219089Spjd#include <ddb/db_sym.h> 24228103Smm#include <ddb/db_command.h> 25236155Smm#include <ddb/db_access.h> 26168404Spjd#include <ddb/db_output.h> 27168404Spjd 28168404Spjd#include <dev/ofw/openfirm.h> 29168404Spjd 30168404Spjdint 31168404Spjddb_read_bytes(vm_offset_t addr, size_t size, char *data) 32168404Spjd{ 33168404Spjd jmp_buf jb; 34168404Spjd void *prev_jb; 35168404Spjd char *src; 36168404Spjd int ret; 37168404Spjd 38168404Spjd prev_jb = kdb_jmpbuf(jb); 39168404Spjd ret = setjmp(jb); 40168404Spjd if (ret == 0) { 41168404Spjd src = (char *)addr; 42185029Spjd 43213197Smm if (size == 4) 44219089Spjd *((int *)data) = *((int *)src); 45168404Spjd else if (size == 2) 46168404Spjd *((short *)data) = *((short *)src); 47168404Spjd else 48168404Spjd while (size-- > 0) 49168404Spjd *data++ = *src++; 50168404Spjd } 51168404Spjd (void)kdb_jmpbuf(prev_jb); 52168404Spjd return (ret); 53168404Spjd} 54168404Spjd 55168404Spjdint 56168404Spjddb_write_bytes(vm_offset_t addr, size_t size, char *data) 57168404Spjd{ 58168404Spjd jmp_buf jb; 59168404Spjd void *prev_jb; 60168404Spjd char *dst; 61168404Spjd size_t cnt; 62168404Spjd int ret; 63185029Spjd 64168404Spjd prev_jb = kdb_jmpbuf(jb); 65168404Spjd ret = setjmp(jb); 66219089Spjd if (ret == 0) { 67168404Spjd dst = (char *)addr; 68168404Spjd cnt = size; 69168404Spjd 70168404Spjd while (cnt-- > 0) 71168404Spjd *dst++ = *data++; 72168404Spjd kdb_cpu_sync_icache((void *)addr, size); 73168404Spjd } 74168404Spjd (void)kdb_jmpbuf(prev_jb); 75168404Spjd return (ret); 76168404Spjd} 77168404Spjd 78168404Spjdvoid 79168404Spjddb_show_mdpcpu(struct pcpu *pc) 80168404Spjd{ 81168404Spjd} 82168404Spjd