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
 

Reply via email to