Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/amd64/db_interface.c
Show All 31 Lines | |||||
*/ | */ | ||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/kdb.h> | #include <sys/kdb.h> | ||||
#include <sys/pcpu.h> | #include <sys/pcpu.h> | ||||
#include <machine/cpufunc.h> | #include <machine/cpufunc.h> | ||||
#include <machine/md_var.h> | |||||
#include <machine/specialreg.h> | #include <machine/specialreg.h> | ||||
#include <ddb/ddb.h> | #include <ddb/ddb.h> | ||||
/* | /* | ||||
* Read bytes from kernel address space for debugger. | * Read bytes from kernel address space for debugger. | ||||
*/ | */ | ||||
int | int | ||||
Show All 22 Lines | |||||
* memory. | * memory. | ||||
*/ | */ | ||||
int | int | ||||
db_write_bytes(vm_offset_t addr, size_t size, char *data) | db_write_bytes(vm_offset_t addr, size_t size, char *data) | ||||
{ | { | ||||
jmp_buf jb; | jmp_buf jb; | ||||
void *prev_jb; | void *prev_jb; | ||||
char *dst; | char *dst; | ||||
u_long cr0save; | bool old_wp; | ||||
int ret; | int ret; | ||||
cr0save = rcr0(); | old_wp = false; | ||||
prev_jb = kdb_jmpbuf(jb); | prev_jb = kdb_jmpbuf(jb); | ||||
ret = setjmp(jb); | ret = setjmp(jb); | ||||
if (ret == 0) { | if (ret == 0) { | ||||
load_cr0(cr0save & ~CR0_WP); | old_wp = disable_wp(); | ||||
dst = (char *)addr; | dst = (char *)addr; | ||||
while (size-- > 0) | while (size-- > 0) | ||||
*dst++ = *data++; | *dst++ = *data++; | ||||
} | } | ||||
load_cr0(cr0save); | restore_wp(old_wp); | ||||
(void)kdb_jmpbuf(prev_jb); | (void)kdb_jmpbuf(prev_jb); | ||||
return (ret); | return (ret); | ||||
} | } | ||||
void | void | ||||
db_show_mdpcpu(struct pcpu *pc) | db_show_mdpcpu(struct pcpu *pc) | ||||
{ | { | ||||
db_printf("curpmap = %p\n", pc->pc_curpmap); | db_printf("curpmap = %p\n", pc->pc_curpmap); | ||||
db_printf("tssp = %p\n", pc->pc_tssp); | db_printf("tssp = %p\n", pc->pc_tssp); | ||||
db_printf("commontssp = %p\n", pc->pc_commontssp); | db_printf("commontssp = %p\n", pc->pc_commontssp); | ||||
db_printf("rsp0 = 0x%lx\n", pc->pc_rsp0); | db_printf("rsp0 = 0x%lx\n", pc->pc_rsp0); | ||||
db_printf("gs32p = %p\n", pc->pc_gs32p); | db_printf("gs32p = %p\n", pc->pc_gs32p); | ||||
db_printf("ldt = %p\n", pc->pc_ldt); | db_printf("ldt = %p\n", pc->pc_ldt); | ||||
db_printf("tss = %p\n", pc->pc_tss); | db_printf("tss = %p\n", pc->pc_tss); | ||||
} | } |