Changeset View
Changeset View
Standalone View
Standalone View
sys/cddl/dev/dtrace/i386/dtrace_isa.c
Show First 20 Lines • Show All 492 Lines • ▼ Show 20 Lines | dtrace_getstackdepth(int aframes) | ||||
} | } | ||||
if (depth < aframes) | if (depth < aframes) | ||||
return 0; | return 0; | ||||
else | else | ||||
return depth - aframes; | return depth - aframes; | ||||
} | } | ||||
ulong_t | ulong_t | ||||
dtrace_getreg(struct trapframe *rp, uint_t reg) | dtrace_getreg(struct trapframe *frame, uint_t reg) | ||||
{ | { | ||||
struct pcb *pcb; | struct pcb *pcb; | ||||
int regmap[] = { /* Order is dependent on reg.d */ | int regmap[] = { /* Order is dependent on reg.d */ | ||||
REG_GS, /* 0 GS */ | REG_GS, /* 0 GS */ | ||||
REG_FS, /* 1 FS */ | REG_FS, /* 1 FS */ | ||||
REG_ES, /* 2 ES */ | REG_ES, /* 2 ES */ | ||||
REG_DS, /* 3 DS */ | REG_DS, /* 3 DS */ | ||||
REG_RDI, /* 4 EDI */ | REG_RDI, /* 4 EDI */ | ||||
Show All 28 Lines | dtrace_getreg(struct trapframe *frame, uint_t reg) | ||||
switch(reg) { | switch(reg) { | ||||
case REG_GS: | case REG_GS: | ||||
if ((pcb = curthread->td_pcb) == NULL) { | if ((pcb = curthread->td_pcb) == NULL) { | ||||
DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP); | DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP); | ||||
return (0); | return (0); | ||||
} | } | ||||
return (pcb->pcb_gs); | return (pcb->pcb_gs); | ||||
case REG_FS: | case REG_FS: | ||||
return (rp->tf_fs); | return (frame->tf_fs); | ||||
case REG_ES: | case REG_ES: | ||||
return (rp->tf_es); | return (frame->tf_es); | ||||
case REG_DS: | case REG_DS: | ||||
return (rp->tf_ds); | return (frame->tf_ds); | ||||
case REG_RDI: | case REG_RDI: | ||||
return (rp->tf_edi); | return (frame->tf_edi); | ||||
case REG_RSI: | case REG_RSI: | ||||
return (rp->tf_esi); | return (frame->tf_esi); | ||||
case REG_RBP: | case REG_RBP: | ||||
return (rp->tf_ebp); | return (frame->tf_ebp); | ||||
case REG_RSP: | case REG_RSP: | ||||
return (rp->tf_isp); | return (frame->tf_isp); | ||||
case REG_RBX: | case REG_RBX: | ||||
return (rp->tf_ebx); | return (frame->tf_ebx); | ||||
case REG_RCX: | case REG_RCX: | ||||
return (rp->tf_ecx); | return (frame->tf_ecx); | ||||
case REG_RAX: | case REG_RAX: | ||||
return (rp->tf_eax); | return (frame->tf_eax); | ||||
case REG_TRAPNO: | case REG_TRAPNO: | ||||
return (rp->tf_trapno); | return (frame->tf_trapno); | ||||
case REG_ERR: | case REG_ERR: | ||||
return (rp->tf_err); | return (frame->tf_err); | ||||
case REG_RIP: | case REG_RIP: | ||||
return (rp->tf_eip); | return (frame->tf_eip); | ||||
case REG_CS: | case REG_CS: | ||||
return (rp->tf_cs); | return (frame->tf_cs); | ||||
case REG_RFL: | case REG_RFL: | ||||
return (rp->tf_eflags); | return (frame->tf_eflags); | ||||
#if 0 | #if 0 | ||||
case REG_RSP: | case REG_RSP: | ||||
return (rp->tf_esp); | return (frame->tf_esp); | ||||
#endif | #endif | ||||
case REG_SS: | case REG_SS: | ||||
return (rp->tf_ss); | return (frame->tf_ss); | ||||
default: | default: | ||||
DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP); | DTRACE_CPUFLAG_SET(CPU_DTRACE_ILLOP); | ||||
return (0); | return (0); | ||||
} | } | ||||
} | } | ||||
static int | static int | ||||
dtrace_copycheck(uintptr_t uaddr, uintptr_t kaddr, size_t size) | dtrace_copycheck(uintptr_t uaddr, uintptr_t kaddr, size_t size) | ||||
▲ Show 20 Lines • Show All 87 Lines • Show Last 20 Lines |