diff options
author | br <br@FreeBSD.org> | 2016-05-05 13:54:50 +0000 |
---|---|---|
committer | br <br@FreeBSD.org> | 2016-05-05 13:54:50 +0000 |
commit | 229f59004efd5514c40b23e3e6a5dd5d5dda54fd (patch) | |
tree | 23085370f80688f94edf3d8791087c4e675d38fe /sys/mips | |
parent | ee35e1301377ddf7b2236efed36e044da05faa1a (diff) | |
download | FreeBSD-src-229f59004efd5514c40b23e3e6a5dd5d5dda54fd.zip FreeBSD-src-229f59004efd5514c40b23e3e6a5dd5d5dda54fd.tar.gz |
Implement FBT provider (MD part) for DTrace on MIPS.
Tested on MIPS64.
Sponsored by: DARPA, AFRL
Sponsored by: HEIF5
Diffstat (limited to 'sys/mips')
-rw-r--r-- | sys/mips/mips/exception.S | 7 | ||||
-rw-r--r-- | sys/mips/mips/trap.c | 12 |
2 files changed, 11 insertions, 8 deletions
diff --git a/sys/mips/mips/exception.S b/sys/mips/mips/exception.S index ed02e5a..725ae65 100644 --- a/sys/mips/mips/exception.S +++ b/sys/mips/mips/exception.S @@ -69,13 +69,6 @@ #ifdef KDTRACE_HOOKS .data - .globl dtrace_invop_jump_addr - .align 4 - .type dtrace_invop_jump_addr, @object - .size dtrace_invop_jump_addr, 8 -dtrace_invop_jump_addr: - .word 0 - .word 0 .globl dtrace_invop_calltrap_addr .align 4 .type dtrace_invop_calltrap_addr, @object diff --git a/sys/mips/mips/trap.c b/sys/mips/mips/trap.c index f3ef629..f98fc97 100644 --- a/sys/mips/mips/trap.c +++ b/sys/mips/mips/trap.c @@ -160,6 +160,8 @@ static void log_bad_page_fault(char *, struct trapframe *, int); static void log_frame_dump(struct trapframe *frame); static void get_mapping_info(vm_offset_t, pd_entry_t **, pt_entry_t **); +int (*dtrace_invop_jump_addr)(struct trapframe *); + #ifdef TRAP_DEBUG static void trap_frame_dump(struct trapframe *frame); #endif @@ -808,11 +810,19 @@ dofault: return (trapframe->pc); } -#ifdef DDB +#if defined(KDTRACE_HOOKS) || defined(DDB) case T_BREAK: +#ifdef KDTRACE_HOOKS + if (!usermode && dtrace_invop_jump_addr != 0) { + dtrace_invop_jump_addr(trapframe); + return (trapframe->pc); + } +#endif +#ifdef DDB kdb_trap(type, 0, trapframe); return (trapframe->pc); #endif +#endif case T_BREAK + T_USER: { |