Changeset View
Changeset View
Standalone View
Standalone View
sys/cddl/dev/dtrace/amd64/dtrace_isa.c
Show First 20 Lines • Show All 470 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) | ||||
{ | { | ||||
/* This table is dependent on reg.d. */ | /* This table is dependent on reg.d. */ | ||||
int regmap[] = { | int regmap[] = { | ||||
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 22 Lines | if (reg <= GS) { | ||||
reg = regmap[reg]; | reg = regmap[reg]; | ||||
} else { | } else { | ||||
/* This is dependent on reg.d. */ | /* This is dependent on reg.d. */ | ||||
reg -= GS + 1; | reg -= GS + 1; | ||||
} | } | ||||
switch (reg) { | switch (reg) { | ||||
case REG_RDI: | case REG_RDI: | ||||
return (rp->tf_rdi); | return (frame->tf_rdi); | ||||
case REG_RSI: | case REG_RSI: | ||||
return (rp->tf_rsi); | return (frame->tf_rsi); | ||||
case REG_RDX: | case REG_RDX: | ||||
return (rp->tf_rdx); | return (frame->tf_rdx); | ||||
case REG_RCX: | case REG_RCX: | ||||
return (rp->tf_rcx); | return (frame->tf_rcx); | ||||
case REG_R8: | case REG_R8: | ||||
return (rp->tf_r8); | return (frame->tf_r8); | ||||
case REG_R9: | case REG_R9: | ||||
return (rp->tf_r9); | return (frame->tf_r9); | ||||
case REG_RAX: | case REG_RAX: | ||||
return (rp->tf_rax); | return (frame->tf_rax); | ||||
case REG_RBX: | case REG_RBX: | ||||
return (rp->tf_rbx); | return (frame->tf_rbx); | ||||
case REG_RBP: | case REG_RBP: | ||||
return (rp->tf_rbp); | return (frame->tf_rbp); | ||||
case REG_R10: | case REG_R10: | ||||
return (rp->tf_r10); | return (frame->tf_r10); | ||||
case REG_R11: | case REG_R11: | ||||
return (rp->tf_r11); | return (frame->tf_r11); | ||||
case REG_R12: | case REG_R12: | ||||
return (rp->tf_r12); | return (frame->tf_r12); | ||||
case REG_R13: | case REG_R13: | ||||
return (rp->tf_r13); | return (frame->tf_r13); | ||||
case REG_R14: | case REG_R14: | ||||
return (rp->tf_r14); | return (frame->tf_r14); | ||||
case REG_R15: | case REG_R15: | ||||
return (rp->tf_r15); | return (frame->tf_r15); | ||||
case REG_DS: | case REG_DS: | ||||
return (rp->tf_ds); | return (frame->tf_ds); | ||||
case REG_ES: | case REG_ES: | ||||
return (rp->tf_es); | return (frame->tf_es); | ||||
case REG_FS: | case REG_FS: | ||||
return (rp->tf_fs); | return (frame->tf_fs); | ||||
case REG_GS: | case REG_GS: | ||||
return (rp->tf_gs); | return (frame->tf_gs); | ||||
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_rip); | return (frame->tf_rip); | ||||
case REG_CS: | case REG_CS: | ||||
return (rp->tf_cs); | return (frame->tf_cs); | ||||
case REG_SS: | case REG_SS: | ||||
return (rp->tf_ss); | return (frame->tf_ss); | ||||
case REG_RFL: | case REG_RFL: | ||||
return (rp->tf_rflags); | return (frame->tf_rflags); | ||||
case REG_RSP: | case REG_RSP: | ||||
return (rp->tf_rsp); | return (frame->tf_rsp); | ||||
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 154 Lines • Show Last 20 Lines |