Module Name:    src
Committed By:   ryo
Date:           Sun May 29 16:13:41 UTC 2022

Modified Files:
        src/sys/arch/aarch64/aarch64: db_trace.c vm_machdep.c

Log Message:
Simplified termination conditions for ddb backtrace.

Exit backtrace when the user trapframe is invalid. (Mainly in kernel threads).


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/aarch64/aarch64/db_trace.c
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/aarch64/aarch64/vm_machdep.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/aarch64/aarch64/db_trace.c
diff -u src/sys/arch/aarch64/aarch64/db_trace.c:1.14 src/sys/arch/aarch64/aarch64/db_trace.c:1.15
--- src/sys/arch/aarch64/aarch64/db_trace.c:1.14	Sat Nov 27 14:11:04 2021
+++ src/sys/arch/aarch64/aarch64/db_trace.c	Sun May 29 16:13:41 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: db_trace.c,v 1.14 2021/11/27 14:11:04 riastradh Exp $ */
+/* $NetBSD: db_trace.c,v 1.15 2022/05/29 16:13:41 ryo Exp $ */
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org>
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.14 2021/11/27 14:11:04 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.15 2022/05/29 16:13:41 ryo Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -288,7 +288,7 @@ db_stack_trace_print(db_expr_t addr, boo
 		db_read_bytes(lastfp + 8, sizeof(lr), (char *)&lr);
 		lr = aarch64_strip_pac(lr);
 
-		if (!trace_user && IN_USER_VM_ADDRESS(lr))
+		if (lr == 0 || (!trace_user && IN_USER_VM_ADDRESS(lr)))
 			break;
 
 #if defined(_KERNEL)
@@ -319,14 +319,6 @@ db_stack_trace_print(db_expr_t addr, boo
 			    (char *)&fp);
 			lr = aarch64_strip_pac(lr);
 
-			/*
-			 * no need to display the frame of el0_trap
-			 * of kernel thread
-			 */
-			if (((char *)(lastlr - 4) == (char *)el0_trap) &&
-			    (lr == 0))
-				break;
-
 			pr_traceaddr("tf", (db_addr_t)tf, lastlr - 4, flags, pr);
 
 			if (lr == 0)

Index: src/sys/arch/aarch64/aarch64/vm_machdep.c
diff -u src/sys/arch/aarch64/aarch64/vm_machdep.c:1.12 src/sys/arch/aarch64/aarch64/vm_machdep.c:1.13
--- src/sys/arch/aarch64/aarch64/vm_machdep.c:1.12	Mon Aug 30 22:54:40 2021
+++ src/sys/arch/aarch64/aarch64/vm_machdep.c	Sun May 29 16:13:41 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: vm_machdep.c,v 1.12 2021/08/30 22:54:40 jmcneill Exp $ */
+/* $NetBSD: vm_machdep.c,v 1.13 2022/05/29 16:13:41 ryo Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #include "opt_ddb.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.12 2021/08/30 22:54:40 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.13 2022/05/29 16:13:41 ryo Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -162,9 +162,9 @@ cpu_lwp_fork(struct lwp *l1, struct lwp 
 	struct trapframe * const ktf = utf - 1;
 	ktf->tf_reg[27] = (uint64_t)func;
 	ktf->tf_reg[28] = (uint64_t)arg;
-	ktf->tf_reg[29] = 0;
 	ktf->tf_lr = (uintptr_t)lwp_trampoline;
 #ifdef DDB
+	ktf->tf_reg[29] = (uint64_t)utf;
 	ktf->tf_pc = (uint64_t)&&backtrace_here;
 	ktf->tf_sp = 0;	/* mark as switchframe */
  backtrace_here:

Reply via email to