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: