Module Name: src
Committed By: nisimura
Date: Fri Aug 25 22:23:59 UTC 2017
Modified Files:
src/sys/arch/aarch64/aarch64: locore.S trap.c
Log Message:
- reorder faultbuf member.
- introduce trap() and interrupt(). now brk insn work.
-
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/aarch64/aarch64/locore.S
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/aarch64/aarch64/trap.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/locore.S
diff -u src/sys/arch/aarch64/aarch64/locore.S:1.3 src/sys/arch/aarch64/aarch64/locore.S:1.4
--- src/sys/arch/aarch64/aarch64/locore.S:1.3 Fri Aug 25 21:43:49 2017
+++ src/sys/arch/aarch64/aarch64/locore.S Fri Aug 25 22:23:59 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.3 2017/08/25 21:43:49 nisimura Exp $ */
+/* $NetBSD: locore.S,v 1.4 2017/08/25 22:23:59 nisimura Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
#include "opt_ddb.h"
-RCSID("$NetBSD: locore.S,v 1.3 2017/08/25 21:43:49 nisimura Exp $")
+RCSID("$NetBSD: locore.S,v 1.4 2017/08/25 22:23:59 nisimura Exp $")
// XXX:AARCH64
lr .req x30
@@ -304,10 +304,10 @@ ENTRY(cpu_set_onfault)
stp x23, x24, [x0, #32]
stp x25, x26, [x0, #48]
stp x27, x28, [x0, #64]
- stp x29, x9, [x0, #80]
- stp lr, x1, [x0, #96]
- mrs x3, tpidr_el1 /* curcpu */
- ldr x2, [x3, #CI_CURLWP] /* curlwp */
+ stp x29, lr, [x0, #80]
+ stp x9, x1, [x0, #96]
+ mrs x3, tpidr_el1
+ ldr x2, [x3, #CI_CURLWP] /* curlwp = curcpu()->ci_curlwp */
str x0, [x2, #L_MD_ONFAULT] /* l_md.md_onfault = fb */
mov x0, #0
END(cpu_set_onfault)
Index: src/sys/arch/aarch64/aarch64/trap.c
diff -u src/sys/arch/aarch64/aarch64/trap.c:1.2 src/sys/arch/aarch64/aarch64/trap.c:1.3
--- src/sys/arch/aarch64/aarch64/trap.c:1.2 Wed Aug 16 22:48:11 2017
+++ src/sys/arch/aarch64/aarch64/trap.c Fri Aug 25 22:23:59 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: trap.c,v 1.2 2017/08/16 22:48:11 nisimura Exp $ */
+/* $NetBSD: trap.c,v 1.3 2017/08/25 22:23:59 nisimura Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -31,21 +31,105 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: trap.c,v 1.2 2017/08/16 22:48:11 nisimura Exp $");
+__KERNEL_RCSID(1, "$NetBSD: trap.c,v 1.3 2017/08/25 22:23:59 nisimura Exp $");
#include <sys/param.h>
#include <sys/types.h>
#include <sys/cpu.h>
+#include <sys/proc.h>
#include <sys/userret.h>
+#include <sys/systm.h>
+
+#include <sys/signal.h>
+#include <sys/signalvar.h>
+#include <sys/siginfo.h>
#include <aarch64/locore.h>
+static void
+dump_trapframe(struct trapframe *tf, void (*pr)(const char *, ...))
+{
+ (*pr)("trapframe @ %p:\n", tf);
+ (*pr)("esr=%016"PRIxREGISTER
+ ", pc=%016"PRIxREGISTER
+ ", lr=%016"PRIxREGISTER
+ ", sp=%016"PRIxREGISTER"\n",
+ tf->tf_esr, tf->tf_pc, tf->tf_lr, tf->tf_sp);
+ (*pr)(" x0=%016"PRIxREGISTER
+ ", x1=%016"PRIxREGISTER
+ ", x2=%016"PRIxREGISTER
+ ", x3=%016"PRIxREGISTER"\n",
+ tf->tf_reg[0], tf->tf_reg[1], tf->tf_reg[2], tf->tf_reg[3]);
+ (*pr)(" x4=%016"PRIxREGISTER
+ ", x5=%016"PRIxREGISTER
+ ", x6=%016"PRIxREGISTER
+ ", x7=%016"PRIxREGISTER"\n",
+ tf->tf_reg[4], tf->tf_reg[5], tf->tf_reg[6], tf->tf_reg[7]);
+ (*pr)(" x8=%016"PRIxREGISTER
+ ", x9=%016"PRIxREGISTER
+ ", x10=%016"PRIxREGISTER
+ ", x11=%016"PRIxREGISTER"\n",
+ tf->tf_reg[8], tf->tf_reg[9], tf->tf_reg[10], tf->tf_reg[11]);
+ (*pr)("x12=%016"PRIxREGISTER
+ ", x13=%016"PRIxREGISTER
+ ", x14=%016"PRIxREGISTER
+ ", x15=%016"PRIxREGISTER"\n",
+ tf->tf_reg[12], tf->tf_reg[13], tf->tf_reg[14], tf->tf_reg[15]);
+ (*pr)("x16=%016"PRIxREGISTER
+ ", x17=%016"PRIxREGISTER
+ ", x18=%016"PRIxREGISTER
+ ", x19=%016"PRIxREGISTER"\n",
+ tf->tf_reg[16], tf->tf_reg[17], tf->tf_reg[18], tf->tf_reg[19]);
+ (*pr)("x20=%016"PRIxREGISTER
+ ", x21=%016"PRIxREGISTER
+ ", x22=%016"PRIxREGISTER
+ ", x23=%016"PRIxREGISTER"\n",
+ tf->tf_reg[20], tf->tf_reg[21], tf->tf_reg[22], tf->tf_reg[23]);
+ (*pr)("x24=%016"PRIxREGISTER
+ ", x25=%016"PRIxREGISTER
+ ", x26=%016"PRIxREGISTER
+ ", x27=%016"PRIxREGISTER"\n",
+ tf->tf_reg[24], tf->tf_reg[25], tf->tf_reg[26], tf->tf_reg[27]);
+ (*pr)("x28=%016"PRIxREGISTER
+ ", x29=%016"PRIxREGISTER
+ ", x30=%016"PRIxREGISTER"\n",
+ tf->tf_reg[28], tf->tf_reg[29], tf->tf_reg[30]);
+}
+
void
userret(struct lwp *l, struct trapframe *tf)
{
mi_userret(l);
}
+void
+trap(struct trapframe *tf, int reason)
+{
+ struct lwp * const l = curlwp;
+ size_t code = tf->tf_esr & 0xffff;
+ bool usertrap_p = tf->tf_esr & 01;
+ bool ok = true;
+ ksiginfo_t ksi;
+
+ code = code;
+ dump_trapframe(tf, printf);
+
+ if (usertrap_p) {
+ if (!ok)
+ (*l->l_proc->p_emul->e_trapsignal)(l, &ksi);
+ userret(l, tf);
+ }
+ else if (!ok) {
+ dump_trapframe(tf, printf);
+ panic("%s: fatal kernel trap", __func__);
+ }
+}
+
+void
+interrupt(struct trapframe *tf)
+{
+}
+
// XXXAARCH64 might be populated in frame.h in future
#define FB_X19 0
@@ -59,8 +143,8 @@ userret(struct lwp *l, struct trapframe
#define FB_X27 8
#define FB_X28 9
#define FB_X29 10
-#define FB_SP 11
-#define FB_LR 12
+#define FB_LR 11
+#define FB_SP 12
#define FB_V0 13
#define FB_MAX 14