Module Name: src
Committed By: martin
Date: Fri Sep 20 09:30:52 UTC 2024
Modified Files:
src/sys/arch/sparc64/sparc64 [netbsd-10]: db_trace.c
Log Message:
Pull up following revision(s) (requested by rin in ticket #883):
sys/arch/sparc64/sparc64/db_trace.c: revision 1.56
sys/arch/sparc64/sparc64/db_trace.c: revision 1.57
sparc64/db_trace.c: Nix trailing whitespace.
No functional change intended.
sparc64/db_trace.c: Don't dereference; use db_read_bytes.
Makes crash(8) and ddb match, and avoids crashing in ddb when you
feed in a bad lwp pointer!
To generate a diff of this commit:
cvs rdiff -u -r1.55 -r1.55.20.1 src/sys/arch/sparc64/sparc64/db_trace.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/sparc64/sparc64/db_trace.c
diff -u src/sys/arch/sparc64/sparc64/db_trace.c:1.55 src/sys/arch/sparc64/sparc64/db_trace.c:1.55.20.1
--- src/sys/arch/sparc64/sparc64/db_trace.c:1.55 Sun May 31 11:28:52 2020
+++ src/sys/arch/sparc64/sparc64/db_trace.c Fri Sep 20 09:30:52 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: db_trace.c,v 1.55 2020/05/31 11:28:52 martin Exp $ */
+/* $NetBSD: db_trace.c,v 1.55.20.1 2024/09/20 09:30:52 martin Exp $ */
/*
* Copyright (c) 1996-2002 Eduardo Horvath. All rights reserved.
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.55 2020/05/31 11:28:52 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.55.20.1 2024/09/20 09:30:52 martin Exp $");
#include <sys/param.h>
#include <sys/proc.h>
@@ -57,7 +57,7 @@ void db_print_window(uint64_t);
#endif
#ifdef _KERNEL
-#define KLOAD(x) probeget((paddr_t)(u_long)&(x), ASI_PRIMARY, sizeof(x))
+#define KLOAD(x) probeget((paddr_t)(u_long)&(x), ASI_PRIMARY, sizeof(x))
#else
static long
kload(db_addr_t addr)
@@ -127,12 +127,8 @@ db_stack_trace_print(db_expr_t addr, boo
}
(*pr)("lid %d ", l.l_lid);
pcb = lwp_getpcb(&l);
-#ifndef _KERNEL
db_read_bytes((db_addr_t)&pcb->pcb_sp,
sizeof(frame), (char *)&frame);
-#else
- frame = (vaddr_t)pcb->pcb_sp;
-#endif
(*pr)("at %p\n", frame);
} else {
frame = (vaddr_t)addr;
@@ -153,12 +149,12 @@ db_stack_trace_print(db_expr_t addr, boo
if (frame & 1) {
f64 = (struct frame64 *)(frame + BIAS);
pc = (db_addr_t)KLOAD(f64->fr_pc);
-
+
frame = KLOAD(f64->fr_fp);
} else {
f32 = (struct frame32 *)(frame);
pc = (db_addr_t)KLOAD(f32->fr_pc);
-
+
frame = (long)KLOAD(f32->fr_fp);
}
@@ -175,13 +171,13 @@ db_stack_trace_print(db_expr_t addr, boo
if (!INKERNEL(frame))
break;
#endif
-
+
db_find_sym_and_offset(pc, &name, &offset);
if (name == NULL)
name = "?";
-
+
(*pr)("%s(", name);
-
+
/*
* Print %i0..%i5; hope these still reflect the
* actual arguments somewhat...
@@ -216,7 +212,7 @@ db_dump_window(db_expr_t addr, bool have
/* Traverse window stack */
for (i=0; i<addr && frame; i++) {
- if (frame & 1)
+ if (frame & 1)
frame = (uint64_t)((struct frame64 *)(u_long)(frame + BIAS))->fr_fp;
else frame = (uint64_t)((struct frame32 *)(u_long)frame)->fr_fp;
}
@@ -226,13 +222,13 @@ db_dump_window(db_expr_t addr, bool have
}
#endif
-void
+void
db_print_window(uint64_t frame)
{
if (frame & 1) {
struct frame64* f = (struct frame64*)(u_long)(frame + BIAS);
- db_printf("frame64 %p locals, ins:\n", f);
+ db_printf("frame64 %p locals, ins:\n", f);
if (INKERNEL(f)) {
db_printf("%llx %llx %llx %llx ",
(unsigned long long)f->fr_local[0],
@@ -245,12 +241,12 @@ db_print_window(uint64_t frame)
(unsigned long long)f->fr_local[6],
(unsigned long long)f->fr_local[7]);
db_printf("%llx %llx %llx %llx ",
- (unsigned long long)f->fr_arg[0],
+ (unsigned long long)f->fr_arg[0],
(unsigned long long)f->fr_arg[1],
(unsigned long long)f->fr_arg[2],
(unsigned long long)f->fr_arg[3]);
db_printf("%llx %llx %llx=sp %llx=pc:",
- (unsigned long long)f->fr_arg[4],
+ (unsigned long long)f->fr_arg[4],
(unsigned long long)f->fr_arg[5],
(unsigned long long)f->fr_fp,
(unsigned long long)f->fr_pc);
@@ -276,7 +272,7 @@ db_print_window(uint64_t frame)
(unsigned long long)f->fr_arg[5],
(unsigned long long)f->fr_fp,
(unsigned long long)f->fr_pc);
- db_printf("\n");
+ db_printf("\n");
}
} else {
struct frame32* f = (struct frame32*)(u_long)frame;
@@ -297,14 +293,14 @@ db_print_window(uint64_t frame)
if (copyin(f, &fr, sizeof(fr))) return;
f = &fr;
db_printf("%8x %8x %8x %8x %8x %8x %8x %8x\n",
- f->fr_local[0], f->fr_local[1],
+ f->fr_local[0], f->fr_local[1],
f->fr_local[2], f->fr_local[3],
- f->fr_local[4], f->fr_local[5],
+ f->fr_local[4], f->fr_local[5],
f->fr_local[6], f->fr_local[7]);
db_printf("%8x %8x %8x %8x %8x %8x %8x=sp %8x=pc\n",
- f->fr_arg[0], f->fr_arg[1],
+ f->fr_arg[0], f->fr_arg[1],
f->fr_arg[2], f->fr_arg[3],
- f->fr_arg[4], f->fr_arg[5],
+ f->fr_arg[4], f->fr_arg[5],
f->fr_fp, f->fr_pc);
}
}
@@ -391,7 +387,7 @@ db_dump_trap(db_expr_t addr, bool have_a
tf, (unsigned long long)tf->tf_tstate,
(unsigned long long)tf->tf_pc,
(unsigned long long)tf->tf_npc);
- db_printf("y: %x\tpil: %d\toldpil: %d\tfault: %llx\ttt: %x\tGlobals:\n",
+ db_printf("y: %x\tpil: %d\toldpil: %d\tfault: %llx\ttt: %x\tGlobals:\n",
(int)tf->tf_y, (int)tf->tf_pil, (int)tf->tf_oldpil,
(unsigned long long)tf->tf_fault, (int)tf->tf_tt);
db_printf("%016llx %016llx %016llx %016llx\n",