svn commit: r361533 - in head/sys: cddl/dev/dtrace/riscv riscv/riscv
Ruslan Bukin
br at FreeBSD.org
Tue May 26 16:44:05 UTC 2020
Author: br
Date: Tue May 26 16:44:05 2020
New Revision: 361533
URL: https://svnweb.freebsd.org/changeset/base/361533
Log:
Fix entering KDB with dtrace-enabled kernel.
Reviewed by: markj, jhb
Differential Revision: https://reviews.freebsd.org/D24018
Modified:
head/sys/cddl/dev/dtrace/riscv/dtrace_subr.c
head/sys/riscv/riscv/trap.c
Modified: head/sys/cddl/dev/dtrace/riscv/dtrace_subr.c
==============================================================================
--- head/sys/cddl/dev/dtrace/riscv/dtrace_subr.c Tue May 26 16:40:40 2020 (r361532)
+++ head/sys/cddl/dev/dtrace/riscv/dtrace_subr.c Tue May 26 16:44:05 2020 (r361533)
@@ -255,6 +255,8 @@ dtrace_invop_start(struct trapframe *frame)
int invop;
invop = dtrace_invop(frame->tf_sepc, frame, frame->tf_sepc);
+ if (invop == 0)
+ return (-1);
if (match_opcode(invop, (MATCH_SD | RS2_RA | RS1_SP),
(MASK_SD | RS2_MASK | RS1_MASK))) {
@@ -291,6 +293,10 @@ dtrace_invop_start(struct trapframe *frame)
frame->tf_sepc = frame->tf_ra;
return (0);
}
+
+#ifdef INVARIANTS
+ panic("Instruction %x doesn't match any opcode.", invop);
+#endif
return (-1);
}
Modified: head/sys/riscv/riscv/trap.c
==============================================================================
--- head/sys/riscv/riscv/trap.c Tue May 26 16:40:40 2020 (r361532)
+++ head/sys/riscv/riscv/trap.c Tue May 26 16:44:05 2020 (r361533)
@@ -274,10 +274,9 @@ do_trap_supervisor(struct trapframe *frame)
break;
case EXCP_BREAKPOINT:
#ifdef KDTRACE_HOOKS
- if (dtrace_invop_jump_addr != 0) {
- dtrace_invop_jump_addr(frame);
- break;
- }
+ if (dtrace_invop_jump_addr != NULL &&
+ dtrace_invop_jump_addr(frame) == 0)
+ break;
#endif
#ifdef KDB
kdb_trap(exception, 0, frame);
More information about the svn-src-head
mailing list