diff options
author | 2020-06-24 20:19:14 +0000 | |
---|---|---|
committer | 2020-06-24 20:19:14 +0000 | |
commit | bf74634c57442c28061010e2bea93eccfb8599c1 (patch) | |
tree | fc2171abd6b0f2b3f8ad3bfa07d0f16118796508 /sys | |
parent | Properly document the return values of EVP_PKEY_base_id(3) (diff) | |
download | wireguard-openbsd-bf74634c57442c28061010e2bea93eccfb8599c1.tar.xz wireguard-openbsd-bf74634c57442c28061010e2bea93eccfb8599c1.zip |
Terminate stack trace at userland boundary.
ok gkoehler@
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/powerpc64/powerpc64/db_trace.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/arch/powerpc64/powerpc64/db_trace.c b/sys/arch/powerpc64/powerpc64/db_trace.c index ed6bda6328a..f2b4ef32a6e 100644 --- a/sys/arch/powerpc64/powerpc64/db_trace.c +++ b/sys/arch/powerpc64/powerpc64/db_trace.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_trace.c,v 1.5 2020/06/22 18:49:36 kettenis Exp $ */ +/* $OpenBSD: db_trace.c,v 1.6 2020/06/24 20:19:14 kettenis Exp $ */ /* $NetBSD: db_trace.c,v 1.15 1996/02/22 23:23:41 gwr Exp $ */ /* @@ -97,6 +97,7 @@ db_stack_trace_print(db_expr_t addr, int have_addr, db_expr_t count, char c, *cp = modif; Elf_Sym *sym; int has_frame, trace_proc = 0; + int end_trace = 0; while ((c = *cp++) != 0) { if (c == 't') @@ -163,6 +164,9 @@ db_stack_trace_print(db_expr_t addr, int have_addr, db_expr_t count, frame->exc); } + if (frame->srr1 & PSL_PR) + end_trace = 1; + sp = frame->fixreg[1]; lr = frame->srr0 + 4; } else if (!has_frame) { @@ -180,6 +184,11 @@ db_stack_trace_print(db_expr_t addr, int have_addr, db_expr_t count, } callpc = lr - 4; + if (end_trace) { + (*pr)("End of kernel: 0x%lx lr 0x%lx\n", sp, callpc); + break; + } + --count; } } |