summaryrefslogtreecommitdiff
path: root/sys/arch/m68k
diff options
context:
space:
mode:
authorNiklas Hallqvist <niklas@cvs.openbsd.org>1996-04-19 06:18:17 +0000
committerNiklas Hallqvist <niklas@cvs.openbsd.org>1996-04-19 06:18:17 +0000
commitc913f8ce2d2e0c69d32752c2e4b62eb3f58a821d (patch)
treec67b9537c3e21fb1cb4e9beee3ee189267de6443 /sys/arch/m68k
parent959e287f6fb20068b466afe1116ec6148211751c (diff)
NetBSD 960317 merge
Diffstat (limited to 'sys/arch/m68k')
-rw-r--r--sys/arch/m68k/conf/files.m68k5
-rw-r--r--sys/arch/m68k/include/ansi.h4
-rw-r--r--sys/arch/m68k/include/frame.h79
-rw-r--r--sys/arch/m68k/m68k/db_interface.c83
-rw-r--r--sys/arch/m68k/m68k/db_trace.c8
5 files changed, 102 insertions, 77 deletions
diff --git a/sys/arch/m68k/conf/files.m68k b/sys/arch/m68k/conf/files.m68k
index 817eb414464..0612af701ae 100644
--- a/sys/arch/m68k/conf/files.m68k
+++ b/sys/arch/m68k/conf/files.m68k
@@ -1,10 +1,11 @@
-# $OpenBSD: files.m68k,v 1.2 1996/03/21 00:04:55 niklas Exp $
-# $NetBSD: files.m68k,v 1.12 1996/02/14 15:59:57 gwr Exp $
+# $OpenBSD: files.m68k,v 1.3 1996/04/19 06:18:12 niklas Exp $
+# $NetBSD: files.m68k,v 1.13 1996/02/24 12:59:47 briggs Exp $
#
file arch/m68k/m68k/db_disasm.c ddb
file arch/m68k/m68k/db_interface.c ddb
file arch/m68k/m68k/db_trace.c ddb
file arch/m68k/m68k/in_cksum.c inet
file arch/m68k/m68k/oc_cksum.s inet
+file arch/m68k/m68k/ns_cksum.c ns
file arch/m68k/m68k/process_machdep.c
file arch/m68k/m68k/random.s
diff --git a/sys/arch/m68k/include/ansi.h b/sys/arch/m68k/include/ansi.h
index 0e64d6c9db1..0da4f53d0ed 100644
--- a/sys/arch/m68k/include/ansi.h
+++ b/sys/arch/m68k/include/ansi.h
@@ -1,4 +1,5 @@
-/* $NetBSD: ansi.h,v 1.5 1994/10/26 07:50:40 cgd Exp $ */
+/* $OpenBSD: ansi.h,v 1.2 1996/04/19 06:18:13 niklas Exp $ */
+/* $NetBSD: ansi.h,v 1.6 1996/03/16 01:31:52 jtc Exp $ */
/*-
* Copyright (c) 1990, 1993
@@ -69,6 +70,7 @@
* defined for ctype.h.
*/
#define _BSD_WCHAR_T_ int /* wchar_t */
+#define _BSD_WINT_T_ int /* wint_t */
#define _BSD_RUNE_T_ int /* rune_t */
#endif /* _ANSI_H_ */
diff --git a/sys/arch/m68k/include/frame.h b/sys/arch/m68k/include/frame.h
index a71b485bd06..7aca8fbef53 100644
--- a/sys/arch/m68k/include/frame.h
+++ b/sys/arch/m68k/include/frame.h
@@ -1,4 +1,5 @@
-/* $NetBSD: frame.h,v 1.10 1995/05/12 12:45:24 mycroft Exp $ */
+/* $OpenBSD: frame.h,v 1.2 1996/04/19 06:18:14 niklas Exp $ */
+/* $NetBSD: frame.h,v 1.11 1996/03/12 22:21:51 is Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -61,6 +62,14 @@ struct frame {
u_int f_ea;
} F_fmt3;
+ struct fmt4 {
+ u_int f_fa;
+ u_int f_fslw;
+ /* for 060FP type 4 FP disabled frames: */
+#define f_fea f_fa
+#define f_pcfi f_fslw
+ } F_fmt4;
+
struct fmt7 {
u_int f_ea;
u_short f_ssw;
@@ -116,6 +125,7 @@ struct frame {
#define f_vector F_t.tf_vector
#define f_fmt2 F_u.F_fmt2
#define f_fmt3 F_u.F_fmt3
+#define f_fmt4 F_u.F_fmt4
#define f_fmt7 F_u.F_fmt7
#define f_fmt9 F_u.F_fmt9
#define f_fmtA F_u.F_fmtA
@@ -127,12 +137,13 @@ struct switchframe {
/* common frame size */
#define CFSIZE (sizeof(struct frame) - sizeof(union F_u))
-#define NFMTSIZE 8
+#define NFMTSIZE 9
#define FMT0 0x0
#define FMT1 0x1
#define FMT2 0x2
#define FMT3 0x3
+#define FMT4 0x4
#define FMT7 0x7
#define FMT9 0x9
#define FMTA 0xA
@@ -143,6 +154,7 @@ struct switchframe {
#define FMT1SIZE 0
#define FMT2SIZE sizeof(struct fmt2)
#define FMT3SIZE sizeof(struct fmt3)
+#define FMT4SIZE sizeof(struct fmt4)
#define FMT7SIZE sizeof(struct fmt7)
#define FMT9SIZE sizeof(struct fmt9)
#define FMTASIZE sizeof(struct fmtA)
@@ -185,6 +197,42 @@ struct switchframe {
#define SSW4_TMKD 0x0005
#define SSW4_TMKC 0x0006
+/* 060 Fault Status Long Word (FPSP) */
+
+#define FSLW_MA 0x08000000
+#define FSLW_LK 0x02000000
+#define FSLW_RW 0x01800000
+#define FSLW_SIZE 0x00600000
+
+/*
+ * We better define the FSLW_SIZE values here, as the table given in the
+ * MC68060UM/AD rev. 0/1 p. 8-23 is wrong, and was corrected in the errata
+ * document.
+ */
+#define FSLW_SIZE_LONG 0x00000000
+#define FSLW_SIZE_BYTE 0x00200000
+#define FSLW_SIZE_WORD 0x00400000
+#define FSLW_SIZE_MV16 0x00600000
+
+#define FLSW_TT 0x00180000
+#define FSLW_TM 0x00070000
+
+#define FSLW_IO 0x00008000
+#define FSLW_PBE 0x00004000
+#define FSLW_SBE 0x00002000
+#define FSLW_PTA 0x00001000
+#define FSLW_PTB 0x00000800
+#define FSLW_IL 0x00000400
+#define FSLW_PF 0x00000200
+#define FSLW_SP 0x00000100
+#define FSLW_WP 0x00000080
+#define FSLW_TWE 0x00000040
+#define FSLW_RE 0x00000020
+#define FSLW_WE 0x00000010
+#define FSLW_TTR 0x00000008
+#define FSLW_BPE 0x00000004
+#define FSLW_SEE 0x00000001
+
struct fpframe {
union FPF_u1 {
u_int FPF_null;
@@ -225,3 +273,30 @@ struct fpframe {
#define fpf_idle FPF_u2.FPF_idle
#define fpf_busy FPF_u2.FPF_busy
#define fpf_unimp FPF_u2.FPF_unimp
+
+/*
+ * This is incompatible with the earlier one; expecially, an earlier frame
+ * must not be FRESTOREd on a 060 or vv, because a frame error exception is
+ * not guaranteed.
+ */
+
+
+struct fpframe060 {
+ u_short fpf6_excp_exp;
+ u_char fpf6_frmfmt;
+#define FPF6_FMT_NULL 0x00
+#define FPF6_FMT_IDLE 0x60
+#define FPF6_FMT_EXCP 0xe0
+
+ u_char fpf6_v;
+#define FPF6_V_BSUN 0
+#define FPF6_V_INEX12 1
+#define FPF6_V_DZ 2
+#define FPF6_V_UNFL 3
+#define FPF6_V_OPERR 4
+#define FPF6_V_OVFL 5
+#define FPF6_V_SNAN 6
+#define FPF6_V_UNSUP 7
+
+ u_long fpf6_upper, fpf6_lower;
+};
diff --git a/sys/arch/m68k/m68k/db_interface.c b/sys/arch/m68k/m68k/db_interface.c
index e06f6c05aaf..e28fa329341 100644
--- a/sys/arch/m68k/m68k/db_interface.c
+++ b/sys/arch/m68k/m68k/db_interface.c
@@ -1,5 +1,5 @@
-/* $OpenBSD: db_interface.c,v 1.2 1996/03/21 00:07:42 niklas Exp $ */
-/* $NetBSD: db_interface.c,v 1.17 1996/02/09 21:51:39 gwr Exp $ */
+/* $OpenBSD: db_interface.c,v 1.3 1996/04/19 06:18:15 niklas Exp $ */
+/* $NetBSD: db_interface.c,v 1.18 1996/02/22 23:23:23 gwr Exp $ */
/*
* Mach Operating System
@@ -28,7 +28,7 @@
*/
/*
- * Interface to new debugger.
+ * Interface to the "ddb" kernel debugger.
*/
#include <sys/param.h>
#include <sys/proc.h>
@@ -40,11 +40,9 @@
#include <machine/trap.h>
#include <machine/db_machdep.h>
-short exframesize[];
extern label_t *db_recover;
int db_active = 0;
-int ddb_regs_ssp; /* system stack pointer */
/*
* Received keyboard interrupt sequence.
@@ -66,7 +64,6 @@ kdb_trap(type, regs)
int type;
register struct mc68020_saved_state *regs;
{
- int fsize;
switch (type) {
case T_TRACE: /* single-step */
@@ -82,19 +79,21 @@ kdb_trap(type, regs)
db_error("Caught exception in ddb.\n");
/*NOTREACHED*/
}
+ /*
+ * Tell caller "We did NOT handle the trap."
+ * Caller should panic or whatever.
+ */
return (0);
}
- /* XXX - Should switch to kdb's own stack here. */
+ /*
+ * We'd like to be on a separate debug stack here, but
+ * that's easier to do in locore.s before we get here.
+ * See sun3/locore.s:T_TRACE for stack switch code.
+ */
ddb_regs = *regs;
- /* Get System Stack Pointer (SSP) */
- ddb_regs_ssp = (int)(&regs[1]);
- fsize = exframesize[regs->stkfmt];
- if (fsize > 0)
- ddb_regs_ssp += fsize;
-
db_active++;
cnpollc(TRUE); /* set polling mode, unblank video */
@@ -103,8 +102,6 @@ kdb_trap(type, regs)
cnpollc(FALSE); /* resume interrupt mode */
db_active--;
- /* Can't easily honor change in ssp. Oh well. */
-
*regs = ddb_regs;
/*
@@ -113,15 +110,11 @@ kdb_trap(type, regs)
* trace bit in the current SR (and trapping while exiting KDB).
*/
(void) spl7();
-#if 0
- if (!USERMODE(regs->sr) && (regs->sr & SR_T1) && (current_thread())) {
- current_thread()->pcb->pcb_flag |= TRACE_KDB;
- }
- if ((regs->sr & SR_T1) && (current_thread())) {
- current_thread()->pcb->flag |= TRACE_KDB;
- }
-#endif
+ /*
+ * Tell caller "We HAVE handled the trap."
+ * Caller will return to locore and rte.
+ */
return(1);
}
@@ -148,47 +141,3 @@ Debugger()
asm ("trap #15");
}
-#if !defined(sun3) && !defined(amiga) && !defined(atari)
-
-/*
- * Read bytes from kernel address space for debugger.
- * XXX - Each port should provide one of these...
- * (See arch/sun3/sun3/db_machdep.c for example.)
- */
-void
-db_read_bytes(addr, size, data)
- vm_offset_t addr;
- register int size;
- register char *data;
-{
- register char *src;
-
- src = (char *)addr;
- while (--size >= 0)
- *data++ = *src++;
-}
-
-/*
- * Write bytes to kernel address space for debugger.
- * XXX - Each port should provide one of these...
- * (See arch/sun3/sun3/db_machdep.c for example.)
- */
-void
-db_write_bytes(addr, size, data)
- vm_offset_t addr;
- register int size;
- register char *data;
-{
- register char *dst;
-
- int oldmap0 = 0;
- int oldmap1 = 0;
- vm_offset_t addr1;
- extern char etext;
-
- dst = (char *)addr;
- while (--size >= 0)
- *dst++ = *data++;
-
-}
-#endif /* !defined(sun3) && !defined(amiga) && !defined(atari) */
diff --git a/sys/arch/m68k/m68k/db_trace.c b/sys/arch/m68k/m68k/db_trace.c
index d9e9c98ed0a..d9eeeb95648 100644
--- a/sys/arch/m68k/m68k/db_trace.c
+++ b/sys/arch/m68k/m68k/db_trace.c
@@ -1,5 +1,5 @@
-/* $OpenBSD: db_trace.c,v 1.2 1996/03/21 00:12:55 niklas Exp $ */
-/* $NetBSD: db_trace.c,v 1.14 1996/02/13 17:34:46 gwr Exp $ */
+/* $OpenBSD: db_trace.c,v 1.3 1996/04/19 06:18:16 niklas Exp $ */
+/* $NetBSD: db_trace.c,v 1.15 1996/02/22 23:23:41 gwr Exp $ */
/*
* Mach Operating System
@@ -42,7 +42,6 @@ extern label_t *db_recover;
* Register list
*/
static int db_var_short(struct db_variable *, db_expr_t *, int);
-extern int ddb_regs_ssp;
struct db_variable db_regs[] = {
{ "d0", (int *)&ddb_regs.d0, FCN_NULL },
{ "d1", (int *)&ddb_regs.d1, FCN_NULL },
@@ -59,8 +58,7 @@ struct db_variable db_regs[] = {
{ "a4", (int *)&ddb_regs.a4, FCN_NULL },
{ "a5", (int *)&ddb_regs.a5, FCN_NULL },
{ "a6", (int *)&ddb_regs.a6, FCN_NULL },
- { "ssp",&ddb_regs_ssp, FCN_NULL },
- { "usp",(int *)&ddb_regs.sp, FCN_NULL },
+ { "sp", (int *)&ddb_regs.sp, FCN_NULL },
{ "pc", (int *)&ddb_regs.pc, FCN_NULL },
{ "sr", (int *)&ddb_regs.sr, db_var_short }
};