Module Name: src
Committed By: jakllsch
Date: Sat Sep 15 19:47:48 UTC 2018
Modified Files:
src/sys/arch/aarch64/aarch64: db_disasm.c db_machdep.c db_trace.c
disasm.c
src/sys/arch/aarch64/include: db_machdep.h machdep.h pmap.h
src/usr.sbin/crash: Makefile
Log Message:
make kernel-groveling crash(8) work on aarch64
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/aarch64/aarch64/db_disasm.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/aarch64/aarch64/db_machdep.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/aarch64/aarch64/db_trace.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/aarch64/aarch64/disasm.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/aarch64/include/db_machdep.h
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/aarch64/include/machdep.h
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/aarch64/include/pmap.h
cvs rdiff -u -r1.40 -r1.41 src/usr.sbin/crash/Makefile
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_disasm.c
diff -u src/sys/arch/aarch64/aarch64/db_disasm.c:1.3 src/sys/arch/aarch64/aarch64/db_disasm.c:1.4
--- src/sys/arch/aarch64/aarch64/db_disasm.c:1.3 Tue Jul 17 10:07:49 2018
+++ src/sys/arch/aarch64/aarch64/db_disasm.c Sat Sep 15 19:47:48 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: db_disasm.c,v 1.3 2018/07/17 10:07:49 ryo Exp $ */
+/* $NetBSD: db_disasm.c,v 1.4 2018/09/15 19:47:48 jakllsch Exp $ */
/*
* Copyright (c) 2017 Ryo Shimizu <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_disasm.c,v 1.3 2018/07/17 10:07:49 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_disasm.c,v 1.4 2018/09/15 19:47:48 jakllsch Exp $");
#include <sys/param.h>
#include <machine/db_machdep.h>
@@ -35,6 +35,7 @@ __KERNEL_RCSID(0, "$NetBSD: db_disasm.c,
#include <ddb/db_sym.h>
#include <ddb/db_output.h>
#include <ddb/db_access.h>
+#include <ddb/db_user.h>
#include <arch/aarch64/aarch64/disasm.h>
Index: src/sys/arch/aarch64/aarch64/db_machdep.c
diff -u src/sys/arch/aarch64/aarch64/db_machdep.c:1.7 src/sys/arch/aarch64/aarch64/db_machdep.c:1.8
--- src/sys/arch/aarch64/aarch64/db_machdep.c:1.7 Tue Aug 14 05:51:54 2018
+++ src/sys/arch/aarch64/aarch64/db_machdep.c Sat Sep 15 19:47:48 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: db_machdep.c,v 1.7 2018/08/14 05:51:54 ryo Exp $ */
+/* $NetBSD: db_machdep.c,v 1.8 2018/09/15 19:47:48 jakllsch Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_machdep.c,v 1.7 2018/08/14 05:51:54 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_machdep.c,v 1.8 2018/09/15 19:47:48 jakllsch Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -55,6 +55,7 @@ __KERNEL_RCSID(0, "$NetBSD: db_machdep.c
#include <ddb/db_sym.h>
#include <ddb/db_extern.h>
#include <ddb/db_interface.h>
+#include <ddb/db_user.h>
#include <dev/cons.h>
@@ -78,6 +79,7 @@ const struct db_command db_machine_comma
NULL, NULL)
},
#endif
+#if defined(_KERNEL)
{
DDB_ADD_CMD(
"cpuinfo", db_md_cpuinfo_cmd, 0,
@@ -124,6 +126,7 @@ const struct db_command db_machine_comma
"<param>",
"\tparam: <address> | <#>")
},
+#endif
{
DDB_ADD_CMD(NULL, NULL, 0,
NULL,
@@ -215,6 +218,7 @@ dump_trapframe(struct trapframe *tf, voi
tf->tf_reg[30], tf->tf_sp);
}
+#if defined(_KERNEL)
void
db_md_cpuinfo_cmd(db_expr_t addr, bool have_addr, db_expr_t count,
const char *modif)
@@ -715,6 +719,7 @@ db_md_watch_cmd(db_expr_t addr, bool hav
show_watchpoints();
}
+#endif
#ifdef MULTIPROCESSOR
volatile struct cpu_info *db_trigger;
@@ -755,6 +760,7 @@ db_md_switch_cpu_cmd(db_expr_t addr, boo
#endif /* _KERNEL */
#endif /* MULTIPROCESSOR */
+#ifdef DDB
int
kdb_trap(int type, struct trapframe *tf)
{
@@ -846,3 +852,4 @@ kdb_trap(int type, struct trapframe *tf)
return 1;
}
+#endif
Index: src/sys/arch/aarch64/aarch64/db_trace.c
diff -u src/sys/arch/aarch64/aarch64/db_trace.c:1.5 src/sys/arch/aarch64/aarch64/db_trace.c:1.6
--- src/sys/arch/aarch64/aarch64/db_trace.c:1.5 Sat Sep 15 19:16:58 2018
+++ src/sys/arch/aarch64/aarch64/db_trace.c Sat Sep 15 19:47:48 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: db_trace.c,v 1.5 2018/09/15 19:16:58 jakllsch Exp $ */
+/* $NetBSD: db_trace.c,v 1.6 2018/09/15 19:47:48 jakllsch Exp $ */
/*
* Copyright (c) 2017 Ryo Shimizu <[email protected]>
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.5 2018/09/15 19:16:58 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.6 2018/09/15 19:47:48 jakllsch Exp $");
#include <sys/param.h>
#include <sys/proc.h>
@@ -53,8 +53,9 @@ __KERNEL_RCSID(0, "$NetBSD: db_trace.c,v
#define MAXBACKTRACE 128 /* against infinite loop */
+__CTASSERT(VM_MIN_ADDRESS == 0);
#define IN_USER_VM_ADDRESS(addr) \
- ((VM_MIN_ADDRESS <= (addr)) && ((addr) < VM_MAX_ADDRESS))
+ ((addr) < VM_MAX_ADDRESS)
#define IN_KERNEL_VM_ADDRESS(addr) \
((VM_MIN_KERNEL_ADDRESS <= (addr)) && ((addr) < VM_MAX_KERNEL_ADDRESS))
@@ -74,6 +75,7 @@ is_lwp(void *p)
static const char *
getlwpnamebysp(uint64_t sp)
{
+#if defined(_KERNEL)
lwp_t *lwp;
for (lwp = db_lwp_first(); lwp != NULL; lwp = db_lwp_next(lwp)) {
@@ -82,6 +84,7 @@ getlwpnamebysp(uint64_t sp)
return lwp->l_name;
}
}
+#endif
return "unknown";
}
@@ -157,6 +160,7 @@ db_stack_trace_print(db_expr_t addr, boo
}
}
+#if defined(_KERNEL)
if (!have_addr) {
if (trace_lwp) {
addr = (db_expr_t)curlwp;
@@ -166,6 +170,7 @@ db_stack_trace_print(db_expr_t addr, boo
tf = DDB_REGS;
}
}
+#endif
if (trace_thread) {
proc_t *pp, p;
@@ -193,12 +198,15 @@ db_stack_trace_print(db_expr_t addr, boo
db_read_bytes(addr, sizeof(l), (char *)&l);
db_read_bytes((db_addr_t)l.l_proc, sizeof(p), (char *)&p);
- if (addr == (db_addr_t)curlwp) {
+#if defined(_KERNEL)
+ if (addr == (db_expr_t)curlwp) {
fp = (uint64_t)&DDB_REGS->tf_reg[29]; /* ®[29]={fp,lr} */
tf = DDB_REGS;
(*pr)("trace: pid %d lid %d (curlwp) at tf %p\n",
p.p_pid, l.l_lid, tf);
- } else {
+ } else
+#endif
+ {
tf = l.l_md.md_ktf;
db_read_bytes((db_addr_t)&tf->tf_reg[29], sizeof(fp), (char *)&fp);
(*pr)("trace: pid %d lid %d at tf %p\n",
@@ -215,12 +223,14 @@ db_stack_trace_print(db_expr_t addr, boo
count = MAXBACKTRACE;
if (tf != NULL) {
+#if defined(_KERNEL)
(*pr)("---- trapframe %p (%zu bytes) ----\n",
tf, sizeof(*tf));
dump_trapframe(tf, pr);
(*pr)("------------------------"
"------------------------\n");
+#endif
lastfp = lastlr = lr = fp = 0;
db_read_bytes((db_addr_t)&tf->tf_pc, sizeof(lr), (char *)&lr);
db_read_bytes((db_addr_t)&tf->tf_reg[29], sizeof(fp), (char *)&fp);
@@ -243,6 +253,7 @@ db_stack_trace_print(db_expr_t addr, boo
if (!trace_user && IN_USER_VM_ADDRESS(lr))
break;
+#if defined(_KERNEL)
extern char el1_trap[]; /* XXX */
extern char el0_trap[]; /* XXX */
if (((char *)(lr - 4) == (char *)el0_trap) ||
@@ -281,7 +292,9 @@ db_stack_trace_print(db_expr_t addr, boo
pr_traceaddr("fp", fp, lr, flags, pr);
- } else {
+ } else
+#endif
+ {
pr_traceaddr("fp", fp, lr - 4, flags, pr);
}
}
Index: src/sys/arch/aarch64/aarch64/disasm.c
diff -u src/sys/arch/aarch64/aarch64/disasm.c:1.4 src/sys/arch/aarch64/aarch64/disasm.c:1.5
--- src/sys/arch/aarch64/aarch64/disasm.c:1.4 Sat Jul 28 09:54:32 2018
+++ src/sys/arch/aarch64/aarch64/disasm.c Sat Sep 15 19:47:48 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: disasm.c,v 1.4 2018/07/28 09:54:32 ryo Exp $ */
+/* $NetBSD: disasm.c,v 1.5 2018/09/15 19:47:48 jakllsch Exp $ */
/*
* Copyright (c) 2018 Ryo Shimizu <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disasm.c,v 1.4 2018/07/28 09:54:32 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disasm.c,v 1.5 2018/09/15 19:47:48 jakllsch Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -35,6 +35,10 @@ __KERNEL_RCSID(0, "$NetBSD: disasm.c,v 1
#include <arch/aarch64/aarch64/disasm.h>
+#ifndef _KERNEL
+#include <stdio.h>
+#include <stdbool.h>
+#endif
#define PRINTF di->di_printf
#define PRINTADDR di->di_printaddr
Index: src/sys/arch/aarch64/include/db_machdep.h
diff -u src/sys/arch/aarch64/include/db_machdep.h:1.6 src/sys/arch/aarch64/include/db_machdep.h:1.7
--- src/sys/arch/aarch64/include/db_machdep.h:1.6 Tue Jul 17 10:07:49 2018
+++ src/sys/arch/aarch64/include/db_machdep.h Sat Sep 15 19:47:48 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: db_machdep.h,v 1.6 2018/07/17 10:07:49 ryo Exp $ */
+/* $NetBSD: db_machdep.h,v 1.7 2018/09/15 19:47:48 jakllsch Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -68,6 +68,7 @@
#include <sys/types.h>
#include <aarch64/frame.h>
+#include <ddb/db_user.h>
typedef long long int db_expr_t;
#define DDB_EXPR_FMT "ll"
@@ -214,6 +215,7 @@ void aarch64_watchpoint_set(int, vaddr_t
#define WATCHPOINT_ACCESS_LOADSTORE 0x03
#define WATCHPOINT_ACCESS_MASK 0x03
+#define DB_ELF_SYMBOLS
#elif defined(__arm__)
Index: src/sys/arch/aarch64/include/machdep.h
diff -u src/sys/arch/aarch64/include/machdep.h:1.4 src/sys/arch/aarch64/include/machdep.h:1.5
--- src/sys/arch/aarch64/include/machdep.h:1.4 Sun Aug 5 06:48:50 2018
+++ src/sys/arch/aarch64/include/machdep.h Sat Sep 15 19:47:48 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.h,v 1.4 2018/08/05 06:48:50 skrll Exp $ */
+/* $NetBSD: machdep.h,v 1.5 2018/09/15 19:47:48 jakllsch Exp $ */
/*
* Copyright (c) 2017 Ryo Shimizu <[email protected]>
@@ -36,6 +36,7 @@
// initarm_common
#include <machine/bootconfig.h>
+struct boot_physmem;
static inline paddr_t
aarch64_kern_vtophys(vaddr_t va)
@@ -108,6 +109,7 @@ void ucas_ras_check(struct trapframe *);
int cpu_set_onfault(struct faultbuf *) __returns_twice;
void cpu_jump_onfault(struct trapframe *, const struct faultbuf *, int);
+#if defined(_KERNEL)
static inline void
cpu_unset_onfault(void)
{
@@ -128,6 +130,7 @@ cpu_disable_onfault(void)
curlwp->l_md.md_onfault = NULL;
return fb;
}
+#endif
/* fpu.c */
void fpu_attach(struct cpu_info *);
Index: src/sys/arch/aarch64/include/pmap.h
diff -u src/sys/arch/aarch64/include/pmap.h:1.9 src/sys/arch/aarch64/include/pmap.h:1.10
--- src/sys/arch/aarch64/include/pmap.h:1.9 Mon Sep 10 15:14:50 2018
+++ src/sys/arch/aarch64/include/pmap.h Sat Sep 15 19:47:48 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.h,v 1.9 2018/09/10 15:14:50 maxv Exp $ */
+/* $NetBSD: pmap.h,v 1.10 2018/09/15 19:47:48 jakllsch Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -34,6 +34,7 @@
#ifdef __aarch64__
+#ifdef _KERNEL
#include <sys/types.h>
#include <sys/pool.h>
#include <sys/queue.h>
@@ -216,6 +217,8 @@ bool pmap_extract_coherency(pmap_t, vadd
#define PMAP_MAPSIZE1 L2_SIZE
+#endif /* _KERNEL */
+
#elif defined(__arm__)
#include <arm/pmap.h>
Index: src/usr.sbin/crash/Makefile
diff -u src/usr.sbin/crash/Makefile:1.40 src/usr.sbin/crash/Makefile:1.41
--- src/usr.sbin/crash/Makefile:1.40 Sun May 20 03:09:02 2018
+++ src/usr.sbin/crash/Makefile Sat Sep 15 19:47:48 2018
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.40 2018/05/20 03:09:02 christos Exp $
+# $NetBSD: Makefile,v 1.41 2018/09/15 19:47:48 jakllsch Exp $
PROG= crash
MAN= crash.8
@@ -19,6 +19,7 @@ DPADD+= ${LIBUTIL} ${LIBKVM} ${LIBEDIT}
|| ${MACHINE} == "sparc" \
|| ${MACHINE} == "sparc64" \
|| ${MACHINE_CPU} == "arm" \
+ || ${MACHINE_CPU} == "aarch64" \
|| ${MACHINE_ARCH} == "m68k"
SRCS+= db_trace.c
.if ${MACHINE_ARCH} != "m68k"
@@ -68,6 +69,9 @@ MACHINE_FAMILY = ${MACHINE_CPU}
.PATH: ${S}/arch/arm/arm32
SRCS+=disassem.c cpufunc_asm.S
.endif
+.if ${MACHINE_CPU} == "aarch64"
+SRCS+=disasm.c
+.endif
.PATH: ${S}/arch/${MACHINE_FAMILY}/${MACHINE_FAMILY}