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