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);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to