summaryrefslogtreecommitdiffstats
path: root/sys/mips
diff options
context:
space:
mode:
authorbr <br@FreeBSD.org>2016-05-05 13:54:50 +0000
committerbr <br@FreeBSD.org>2016-05-05 13:54:50 +0000
commit229f59004efd5514c40b23e3e6a5dd5d5dda54fd (patch)
tree23085370f80688f94edf3d8791087c4e675d38fe /sys/mips
parentee35e1301377ddf7b2236efed36e044da05faa1a (diff)
downloadFreeBSD-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.S7
-rw-r--r--sys/mips/mips/trap.c12
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:
{
OpenPOWER on IntegriCloud