Index: /trunk/src/UPDATING
===================================================================
--- /trunk/src/UPDATING	(revision 151)
+++ /trunk/src/UPDATING	(revision 152)
@@ -1,3 +1,3 @@
-$NetBSD: UPDATING,v 1.178.2.1.2.1.2.1 2010/04/21 05:15:01 matt Exp $
+$NetBSD: UPDATING,v 1.178.2.1.2.1.2.2 2011/05/20 08:11:12 matt Exp $
 
 This file (UPDATING) is intended to be a brief reference to recent
@@ -16,4 +16,11 @@
 Recent changes:
 ^^^^^^^^^^^^^^^
+
+20090616:
+	Native Xorg was upgraded.  Builds will need a clean objdir for
+	src/external/mit/xorg.  Upgrading a system from sets will not
+	work properly yet as the /usr/X11R7/lib/X11/xkb/symbols/pc
+	subdirectory has been changed into a file, and this needs to
+	be manually "rm -r"'ed before installing xbase.tgz.
 
 20090530:
Index: /trunk/src/crypto/dist/openssl/ssl/s3_clnt.c
===================================================================
--- /trunk/src/crypto/dist/openssl/ssl/s3_clnt.c	(revision 151)
+++ /trunk/src/crypto/dist/openssl/ssl/s3_clnt.c	(revision 152)
@@ -1461,4 +1461,5 @@
 		ecdh=NULL;
 		BN_CTX_free(bn_ctx);
+		bn_ctx = NULL;
 		EC_POINT_free(srvr_ecpoint);
 		srvr_ecpoint = NULL;
Index: /trunk/src/crypto/dist/ssh/sftp-glob.c
===================================================================
--- /trunk/src/crypto/dist/ssh/sftp-glob.c	(revision 151)
+++ /trunk/src/crypto/dist/ssh/sftp-glob.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sftp-glob.c,v 1.13 2006/09/28 21:22:15 christos Exp $	*/
+/*	$NetBSD: sftp-glob.c,v 1.13.30.1 2011/05/20 08:11:13 matt Exp $	*/
 /* $OpenBSD: sftp-glob.c,v 1.22 2006/08/03 03:34:42 deraadt Exp $ */
 /*
@@ -18,5 +18,5 @@
 
 #include "includes.h"
-__RCSID("$NetBSD: sftp-glob.c,v 1.13 2006/09/28 21:22:15 christos Exp $");
+__RCSID("$NetBSD: sftp-glob.c,v 1.13.30.1 2011/05/20 08:11:13 matt Exp $");
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -122,4 +122,4 @@
 	cur.conn = conn;
 
-	return(glob(pattern, flags | GLOB_ALTDIRFUNC, errfunc, pglob));
+	return(glob(pattern, flags|GLOB_ALTDIRFUNC|GLOB_LIMIT, errfunc, pglob));
 }
Index: /trunk/src/crypto/dist/ssh/sftp.c
===================================================================
--- /trunk/src/crypto/dist/ssh/sftp.c	(revision 151)
+++ /trunk/src/crypto/dist/ssh/sftp.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sftp.c,v 1.23 2008/04/06 23:38:19 christos Exp $	*/
+/*	$NetBSD: sftp.c,v 1.23.14.1 2011/05/20 08:11:13 matt Exp $	*/
 /* $OpenBSD: sftp.c,v 1.99 2008/01/20 00:38:30 djm Exp $ */
 /*
@@ -18,5 +18,5 @@
 
 #include "includes.h"
-__RCSID("$NetBSD: sftp.c,v 1.23 2008/04/06 23:38:19 christos Exp $");
+__RCSID("$NetBSD: sftp.c,v 1.23.14.1 2011/05/20 08:11:13 matt Exp $");
 #include <sys/types.h>
 #include <sys/ioctl.h>
@@ -522,5 +522,5 @@
 	memset(&g, 0, sizeof(g));
 	debug3("Looking up %s", src);
-	if (glob(src, GLOB_NOCHECK, NULL, &g)) {
+	if (glob(src, GLOB_NOCHECK|GLOB_LIMIT, NULL, &g)) {
 		error("File \"%s\" not found.", src);
 		err = -1;
Index: /trunk/src/crypto/dist/ssh/ssh_config
===================================================================
--- /trunk/src/crypto/dist/ssh/ssh_config	(revision 151)
+++ /trunk/src/crypto/dist/ssh/ssh_config	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: ssh_config,v 1.14 2008/04/25 15:01:45 jmmv Exp $
+#	$NetBSD: ssh_config,v 1.14.12.1 2011/05/20 08:11:13 matt Exp $
 #	$OpenBSD: ssh_config,v 1.23 2007/06/08 04:40:40 pvalchev Exp $
 
@@ -40,5 +40,5 @@
 #   Cipher 3des
 #   Ciphers aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc
-#   MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
+#   MACs hmac-md5,hmac-sha1,hmac-ripemd160
 #   EscapeChar ~
 #   Tunnel no
Index: /trunk/src/crypto/dist/ssh/ssh_config.5
===================================================================
--- /trunk/src/crypto/dist/ssh/ssh_config.5	(revision 151)
+++ /trunk/src/crypto/dist/ssh/ssh_config.5	(revision 152)
@@ -1,3 +1,3 @@
-.\"	$NetBSD: ssh_config.5,v 1.16 2008/04/06 23:38:20 christos Exp $
+.\"	$NetBSD: ssh_config.5,v 1.16.14.1 2011/05/20 08:11:14 matt Exp $
 .\"  -*- nroff -*-
 .\"
@@ -652,5 +652,5 @@
 The default is:
 .Bd -literal -offset indent
-hmac-md5,hmac-sha1,umac-64@openssh.com,
+hmac-md5,hmac-sha1,
 hmac-ripemd160,hmac-sha1-96,hmac-md5-96
 .Ed
Index: /trunk/src/crypto/dist/ssh/sshd_config.5
===================================================================
--- /trunk/src/crypto/dist/ssh/sshd_config.5	(revision 151)
+++ /trunk/src/crypto/dist/ssh/sshd_config.5	(revision 152)
@@ -1,3 +1,3 @@
-.\"	$NetBSD: sshd_config.5,v 1.15 2008/04/06 23:38:20 christos Exp $
+.\"	$NetBSD: sshd_config.5,v 1.15.14.1 2011/05/20 08:11:14 matt Exp $
 .\"  -*- nroff -*-
 .\"
@@ -539,5 +539,5 @@
 The default is:
 .Bd -literal -offset indent
-hmac-md5,hmac-sha1,umac-64@openssh.com,
+hmac-md5,hmac-sha1,
 hmac-ripemd160,hmac-sha1-96,hmac-md5-96
 .Ed
Index: /trunk/src/dist/ipf/FWTK/ftp-gw.diff
===================================================================
--- /trunk/src/dist/ipf/FWTK/ftp-gw.diff	(revision 151)
+++ /trunk/src/dist/ipf/FWTK/ftp-gw.diff	(revision 152)
@@ -5,5 +5,5 @@
 --- 11,41 ----
    */
-  static	char	RcsId[] = "$Header: /cvsroot/src/dist/ipf/FWTK/ftp-gw.diff,v 1.1 1999/12/11 22:24:01 veego Exp $";
+  static	char	RcsId[] = "$Header: /cvsroot/src/dist/ipf/FWTK/ftp-gw.diff,v 1.1.1.1 1999/12/11 22:24:01 veego Exp $";
   
 + /*
Index: /trunk/src/dist/ipf/ipsd/Celler/ip_compat.h
===================================================================
--- /trunk/src/dist/ipf/ipsd/Celler/ip_compat.h	(revision 151)
+++ /trunk/src/dist/ipf/ipsd/Celler/ip_compat.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ip_compat.h,v 1.1 1999/12/11 22:24:07 veego Exp $	*/
+/*	$NetBSD: ip_compat.h,v 1.1.1.1 1999/12/11 22:24:07 veego Exp $	*/
 
 /*
Index: /trunk/src/dist/ipf/ipsend/.OLD/ip_compat.h
===================================================================
--- /trunk/src/dist/ipf/ipsend/.OLD/ip_compat.h	(revision 151)
+++ /trunk/src/dist/ipf/ipsend/.OLD/ip_compat.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ip_compat.h,v 1.1 1999/12/11 22:24:10 veego Exp $	*/
+/*	$NetBSD: ip_compat.h,v 1.1.1.1 1999/12/11 22:24:10 veego Exp $	*/
 
 /*
Index: /trunk/src/dist/ipf/ipsend/dltest.h
===================================================================
--- /trunk/src/dist/ipf/ipsend/dltest.h	(revision 151)
+++ /trunk/src/dist/ipf/ipsend/dltest.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: dltest.h,v 1.1 1999/12/11 22:24:07 veego Exp $	*/
+/*	$NetBSD: dltest.h,v 1.1.1.1 1999/12/11 22:24:07 veego Exp $	*/
 
 /*
Index: /trunk/src/dist/ipf/rules/example.1
===================================================================
--- /trunk/src/dist/ipf/rules/example.1	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.1	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.1,v 1.1 1999/12/11 22:24:11 veego Exp $
+#	$NetBSD: example.1,v 1.1.1.1 1999/12/11 22:24:11 veego Exp $
 #
 # block all incoming TCP packets on le0 from host 10.1.1.1 to any destination.
Index: /trunk/src/dist/ipf/rules/example.10
===================================================================
--- /trunk/src/dist/ipf/rules/example.10	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.10	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.10,v 1.1 1999/12/11 22:24:11 veego Exp $
+#	$NetBSD: example.10,v 1.1.1.1 1999/12/11 22:24:11 veego Exp $
 #
 # pass ack packets (ie established connection)
Index: /trunk/src/dist/ipf/rules/example.11
===================================================================
--- /trunk/src/dist/ipf/rules/example.11	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.11	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.11,v 1.1 1999/12/11 22:24:11 veego Exp $
+#	$NetBSD: example.11,v 1.1.1.1 1999/12/11 22:24:11 veego Exp $
 #
 # allow any TCP packets from the same subnet as foo is on through to host
Index: /trunk/src/dist/ipf/rules/example.12
===================================================================
--- /trunk/src/dist/ipf/rules/example.12	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.12	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.12,v 1.1 1999/12/11 22:24:11 veego Exp $
+#	$NetBSD: example.12,v 1.1.1.1 1999/12/11 22:24:11 veego Exp $
 #
 # get rid of all short IP fragments (too small for valid comparison)
Index: /trunk/src/dist/ipf/rules/example.13
===================================================================
--- /trunk/src/dist/ipf/rules/example.13	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.13	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.13,v 1.1 1999/12/11 22:24:11 veego Exp $
+#	$NetBSD: example.13,v 1.1.1.1 1999/12/11 22:24:11 veego Exp $
 #
 # Log all short TCP packets to qe3, with 10.3.3.3 as the intended
Index: /trunk/src/dist/ipf/rules/example.2
===================================================================
--- /trunk/src/dist/ipf/rules/example.2	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.2	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.2,v 1.1 1999/12/11 22:24:11 veego Exp $
+#	$NetBSD: example.2,v 1.1.1.1 1999/12/11 22:24:11 veego Exp $
 #
 # block all outgoing TCP packets on le0 from any host to port 23 of
Index: /trunk/src/dist/ipf/rules/example.3
===================================================================
--- /trunk/src/dist/ipf/rules/example.3	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.3	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.3,v 1.1 1999/12/11 22:24:11 veego Exp $
+#	$NetBSD: example.3,v 1.1.1.1 1999/12/11 22:24:11 veego Exp $
 #
 # block all inbound packets.
Index: /trunk/src/dist/ipf/rules/example.4
===================================================================
--- /trunk/src/dist/ipf/rules/example.4	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.4	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.4,v 1.1 1999/12/11 22:24:11 veego Exp $
+#	$NetBSD: example.4,v 1.1.1.1 1999/12/11 22:24:11 veego Exp $
 #
 # block all ICMP packets.
Index: /trunk/src/dist/ipf/rules/example.5
===================================================================
--- /trunk/src/dist/ipf/rules/example.5	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.5	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.5,v 1.1 1999/12/11 22:24:11 veego Exp $
+#	$NetBSD: example.5,v 1.1.1.1 1999/12/11 22:24:11 veego Exp $
 #
 # test ruleset
Index: /trunk/src/dist/ipf/rules/example.6
===================================================================
--- /trunk/src/dist/ipf/rules/example.6	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.6	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.6,v 1.1 1999/12/11 22:24:11 veego Exp $
+#	$NetBSD: example.6,v 1.1.1.1 1999/12/11 22:24:11 veego Exp $
 #
 # block all TCP packets with only the SYN flag set (this is the first
Index: /trunk/src/dist/ipf/rules/example.7
===================================================================
--- /trunk/src/dist/ipf/rules/example.7	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.7	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.7,v 1.1 1999/12/11 22:24:12 veego Exp $
+#	$NetBSD: example.7,v 1.1.1.1 1999/12/11 22:24:12 veego Exp $
 # block all ICMP packets.
 #
Index: /trunk/src/dist/ipf/rules/example.8
===================================================================
--- /trunk/src/dist/ipf/rules/example.8	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.8	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.8,v 1.1 1999/12/11 22:24:12 veego Exp $
+#	$NetBSD: example.8,v 1.1.1.1 1999/12/11 22:24:12 veego Exp $
 #
 # block all incoming TCP connections but send back a TCP-RST for ones to
Index: /trunk/src/dist/ipf/rules/example.sr
===================================================================
--- /trunk/src/dist/ipf/rules/example.sr	(revision 151)
+++ /trunk/src/dist/ipf/rules/example.sr	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: example.sr,v 1.1 1999/12/11 22:24:12 veego Exp $
+#	$NetBSD: example.sr,v 1.1.1.1 1999/12/11 22:24:12 veego Exp $
 #
 # log all inbound packet on le0 which has IP options present
Index: /trunk/src/distrib/amd64/floppies/common/boot.cfg
===================================================================
--- /trunk/src/distrib/amd64/floppies/common/boot.cfg	(revision 151)
+++ /trunk/src/distrib/amd64/floppies/common/boot.cfg	(revision 152)
@@ -2,10 +2,10 @@
 banner================================================================================
 banner=
-banner=These diskettes do not have support for ACPI and may not work on some
-banner=modern hardware.  If the floppy disk installation does not work, please
-banner=try installing using a CD-ROM image.
+banner=ACPI should work on all modern and legacy hardware, however if you have
+banner=problems, please try disabling it.
 banner=
 menu=Install NetBSD:boot netbsd
-menu=Install NetBSD (no SMP):boot netbsd -12
+menu=Install NetBSD (no ACPI):boot netbsd -2
+menu=Install NetBSD (no ACPI, no SMP):boot netbsd -12
 menu=Drop to boot prompt:prompt
 timeout=10
Index: /trunk/src/distrib/notes/common/contents
===================================================================
--- /trunk/src/distrib/notes/common/contents	(revision 151)
+++ /trunk/src/distrib/notes/common/contents	(revision 152)
@@ -1,3 +1,3 @@
-.\"	$NetBSD: contents,v 1.143.2.6 2009/04/25 23:16:34 snj Exp $
+.\"	$NetBSD: contents,v 1.143.2.6.4.1 2011/05/20 08:11:14 matt Exp $
 .\"
 .\" Copyright (c) 1999-2005 The NetBSD Foundation, Inc.
@@ -489,53 +489,53 @@
 .\" XXX set sizes can be calculated using list-setsizes.sh
 .\"
-.if \n[acorn26] .setsize 28 80
-.if \n[acorn32] .setsize 28 80
-.if \n[algor] .setsize 30 95
-.if \n[alpha] .setsize 33 102
-.if \n[amd64] .setsize 34 100
-.if \n[amiga] .setsize 25 75
-.if \n[arc] .setsize 30 95
-.if \n[atari] .setsize 26 75
-.if \n[cats] .setsize 28 80
-.if \n[cesfic] .setsize 25 75
-.if \n[cobalt] .setsize 30 95
-.if \n[dreamcast] .setsize 27 73
-.if \n[evbarm] .setsize 28 80
-.if \n[evbmips] .setsize 30 95
-.if \n[evbppc] .setsize 27 79
-.if \n[evbsh3] .setsize 28 73
-.if \n[hp300] .setsize 25 75
-.if \n[hp700] .setsize 30 85
-.if \n[hpcarm] .setsize 28 80
-.if \n[hpcmips] .setsize 30 95
-.if \n[hpcsh] .setsize 28 73
-.if \n[i386] .setsize 26 76
-.if \n[ibmnws] .setsize 28 83
-.if \n[iyonix] .setsize 28 80
-.if \n[landisk] .setsize 28 73
-.if \n[luna68k] .setsize 25 75
-.if \n[mac68k] .setsize 25 75
-.if \n[macppc] .setsize 29 83
-.if \n[mipsco] .setsize 30 95
-.if \n[mmeye] .setsize 28 73
-.if \n[mvme68k] .setsize 25 75
-.if \n[mvmeppc] .setsize 28 83
-.if \n[netwinder] .setsize 28 80
-.if \n[news68k] .setsize 25 75
-.if \n[newsmips] .setsize 30 95
-.if \n[next68k] .setsize 25 75
-.if \n[ofppc] .setsize 28 83
+.if \n[acorn26] .setsize 28 81
+.if \n[acorn32] .setsize 28 81
+.if \n[algor] .setsize 30 96
+.if \n[alpha] .setsize 33 103
+.if \n[amd64] .setsize 34 101
+.if \n[amiga] .setsize 26 76
+.if \n[arc] .setsize 30 96
+.if \n[atari] .setsize 26 76
+.if \n[cats] .setsize 28 81
+.if \n[cesfic] .setsize 26 75
+.if \n[cobalt] .setsize 30 96
+.if \n[dreamcast] .setsize 28 74
+.if \n[evbarm] .setsize 28 81
+.if \n[evbmips] .setsize 30 96
+.if \n[evbppc] .setsize 27 80
+.if \n[evbsh3] .setsize 28 74
+.if \n[hp300] .setsize 26 75
+.if \n[hp700] .setsize 31 86
+.if \n[hpcarm] .setsize 28 81
+.if \n[hpcmips] .setsize 30 96
+.if \n[hpcsh] .setsize 28 74
+.if \n[i386] .setsize 26 77
+.if \n[ibmnws] .setsize 29 84
+.if \n[iyonix] .setsize 28 81
+.if \n[landisk] .setsize 28 74
+.if \n[luna68k] .setsize 26 75
+.if \n[mac68k] .setsize 26 75
+.if \n[macppc] .setsize 29 84
+.if \n[mipsco] .setsize 30 96
+.if \n[mmeye] .setsize 28 74
+.if \n[mvme68k] .setsize 26 76
+.if \n[mvmeppc] .setsize 29 84
+.if \n[netwinder] .setsize 28 81
+.if \n[news68k] .setsize 26 75
+.if \n[newsmips] .setsize 30 96
+.if \n[next68k] .setsize 26 75
+.if \n[ofppc] .setsize 29 84
 .if \n[pmax] .setsize 30 96
-.if \n[prep] .setsize 29 83
-.if \n[sandpoint] .setsize 28 83
-.if \n[sbmips] .setsize 30 95
-.if \n[sgimips] .setsize 30 95
-.if \n[shark] .setsize 28 80
-.if \n[sparc] .setsize 27 80
-.if \n[sparc64] .setsize 33 103
-.if \n[sun2] .setsize 166 413
-.if \n[sun3] .setsize 25 75
-.if \n[vax] .setsize 25 70
-.if \n[x68k] .setsize 26 75
+.if \n[prep] .setsize 29 84
+.if \n[sandpoint] .setsize 29 84
+.if \n[sbmips] .setsize 30 96
+.if \n[sgimips] .setsize 30 96
+.if \n[shark] .setsize 28 81
+.if \n[sparc] .setsize 27 81
+.if \n[sparc64] .setsize 33 104
+.if \n[sun2] .setsize 166 415
+.if \n[sun3] .setsize 26 75
+.if \n[vax] .setsize 25 71
+.if \n[x68k] .setsize 26 76
 .showsize
 .
@@ -551,49 +551,49 @@
 all of the utilities it contains, as well as the
 system call and library manual pages.
-.if \n[acorn26] .setsize 41 140
-.if \n[acorn32] .setsize 41 140
-.if \n[algor] .setsize 37 139
-.if \n[alpha] .setsize 49 206
-.if \n[amd64] .setsize 58 218
+.if \n[acorn26] .setsize 41 141
+.if \n[acorn32] .setsize 41 141
+.if \n[algor] .setsize 37 140
+.if \n[alpha] .setsize 50 207
+.if \n[amd64] .setsize 59 219
 .if \n[amiga] .setsize 36 130
-.if \n[arc] .setsize 37 139
-.if \n[atari] .setsize 35 130
-.if \n[cats] .setsize 41 140
-.if \n[cesfic] .setsize 35 130
-.if \n[cobalt] .setsize 37 139
-.if \n[dreamcast] .setsize 38 125
-.if \n[evbarm] .setsize 41 140
-.if \n[evbmips] .setsize 37 139
-.if \n[evbppc] .setsize 44 153
-.if \n[evbsh3] .setsize 39 125
+.if \n[arc] .setsize 37 140
+.if \n[atari] .setsize 36 130
+.if \n[cats] .setsize 41 141
+.if \n[cesfic] .setsize 36 130
+.if \n[cobalt] .setsize 37 140
+.if \n[dreamcast] .setsize 39 126
+.if \n[evbarm] .setsize 41 141
+.if \n[evbmips] .setsize 37 140
+.if \n[evbppc] .setsize 44 154
+.if \n[evbsh3] .setsize 39 126
 .if \n[hp300] .setsize 36 130
-.if \n[hp700] .setsize 44 148
-.if \n[hpcarm] .setsize 41 140
-.if \n[hpcmips] .setsize 37 139
-.if \n[hpcsh] .setsize 38 126
-.if \n[i386] .setsize 37 131
-.if \n[ibmnws] .setsize 44 153
-.if \n[iyonix] .setsize 41 140
-.if \n[landisk] .setsize 38 126
-.if \n[luna68k] .setsize 35 130
+.if \n[hp700] .setsize 44 149
+.if \n[hpcarm] .setsize 41 141
+.if \n[hpcmips] .setsize 37 140
+.if \n[hpcsh] .setsize 39 126
+.if \n[i386] .setsize 38 131
+.if \n[ibmnws] .setsize 44 154
+.if \n[iyonix] .setsize 41 141
+.if \n[landisk] .setsize 39 126
+.if \n[luna68k] .setsize 36 130
 .if \n[mac68k] .setsize 36 130
-.if \n[macppc] .setsize 44 153
-.if \n[mipsco] .setsize 37 139
-.if \n[mmeye] .setsize 39 125
-.if \n[mvme68k] .setsize 35 130
-.if \n[mvmeppc] .setsize 44 153
-.if \n[netwinder] .setsize 41 140
+.if \n[macppc] .setsize 44 154
+.if \n[mipsco] .setsize 37 140
+.if \n[mmeye] .setsize 39 126
+.if \n[mvme68k] .setsize 36 130
+.if \n[mvmeppc] .setsize 44 154
+.if \n[netwinder] .setsize 41 141
 .if \n[news68k] .setsize 36 130
-.if \n[newsmips] .setsize 37 139
+.if \n[newsmips] .setsize 37 140
 .if \n[next68k] .setsize 36 130
-.if \n[ofppc] .setsize 44 153
-.if \n[pmax] .setsize 37 139
-.if \n[prep] .setsize 44 153
-.if \n[sandpoint] .setsize 44 153
-.if \n[sbmips] .setsize 37 139
-.if \n[sgimips] .setsize 37 139
-.if \n[shark] .setsize 41 140
-.if \n[sparc] .setsize 39 140
-.if \n[sparc64] .setsize 59 225
+.if \n[ofppc] .setsize 44 154
+.if \n[pmax] .setsize 37 140
+.if \n[prep] .setsize 44 154
+.if \n[sandpoint] .setsize 44 154
+.if \n[sbmips] .setsize 37 140
+.if \n[sgimips] .setsize 37 140
+.if \n[shark] .setsize 41 141
+.if \n[sparc] .setsize 39 141
+.if \n[sparc64] .setsize 59 226
 .if \n[sun2] .setsize 30 108
 .if \n[sun3] .setsize 36 130
@@ -1121,5 +1121,5 @@
 .if \n[sbmips] .setsize 7 23
 .if \n[sgimips] .setsize 8 25
-.if \n[shark] .setsize 7 22
+.if \n[shark] .setsize 8 22
 .if \n[sparc] .setsize 7 20
 .if \n[sparc64] .setsize 8 25
@@ -1133,9 +1133,9 @@
 The extra libraries and include files needed to compile X source code.
 .\" Shareable within MACHINE_ARCH (NIH)
-.if \n[acorn26] .setsize 14 48
-.if \n[acorn32] .setsize 14 48
+.if \n[acorn26] .setsize 14 49
+.if \n[acorn32] .setsize 14 49
 .if \n[algor] .setsize 11 42
 .if \n[alpha] .setsize 16 70
-.if \n[amd64] .setsize 16 62
+.if \n[amd64] .setsize 16 63
 .if \n[amiga] .setsize 11 43
 .if \n[arc] .setsize 11 42
@@ -1145,37 +1145,37 @@
 .if \n[cobalt] .setsize 11 42
 .if \n[dreamcast] .setsize 13 43
-.if \n[evbarm] .setsize 14 48
+.if \n[evbarm] .setsize 14 49
 .if \n[evbmips] .setsize 11 42
-.if \n[evbppc] .setsize 13 48
+.if \n[evbppc] .setsize 14 48
 .if \n[evbsh3] .setsize 13 43
 .if \n[hp300] .setsize 11 43
 .if \n[hp700] .setsize 15 51
-.if \n[hpcarm] .setsize 14 48
+.if \n[hpcarm] .setsize 14 49
 .if \n[hpcmips] .setsize 11 42
 .if \n[hpcsh] .setsize 13 43
 .if \n[i386] .setsize 14 48
-.if \n[ibmnws] .setsize 13 48
-.if \n[iyonix] .setsize 14 48
+.if \n[ibmnws] .setsize 14 48
+.if \n[iyonix] .setsize 14 49
 .if \n[landisk] .setsize 13 43
 .if \n[luna68k] .setsize 11 43
 .if \n[mac68k] .setsize 11 43
-.if \n[macppc] .setsize 16 55
+.if \n[macppc] .setsize 17 55
 .if \n[mipsco] .setsize 11 42
 .if \n[mmeye] .setsize 13 43
 .if \n[mvme68k] .setsize 11 43
-.if \n[mvmeppc] .setsize 13 48
-.if \n[netwinder] .setsize 14 48
+.if \n[mvmeppc] .setsize 14 48
+.if \n[netwinder] .setsize 14 49
 .if \n[news68k] .setsize 11 43
 .if \n[newsmips] .setsize 11 42
 .if \n[next68k] .setsize 11 43
-.if \n[ofppc] .setsize 13 48
+.if \n[ofppc] .setsize 14 48
 .if \n[pmax] .setsize 11 42
-.if \n[prep] .setsize 13 48
-.if \n[sandpoint] .setsize 13 48
+.if \n[prep] .setsize 14 48
+.if \n[sandpoint] .setsize 14 48
 .if \n[sbmips] .setsize 11 42
-.if \n[sgimips] .setsize 12 47
-.if \n[shark] .setsize 16 55
+.if \n[sgimips] .setsize 13 48
+.if \n[shark] .setsize 17 56
 .if \n[sparc] .setsize 13 47
-.if \n[sparc64] .setsize 16 65
+.if \n[sparc64] .setsize 17 65
 .if \n[sun2] .setsize -unknown- -unknown-
 .if \n[sun3] .setsize 11 43
@@ -1286,5 +1286,5 @@
 .if \n[algor] .setsize 5 15
 .if \n[alpha] .setsize 8 19
-.if \n[amd64] .setsize 14 44
+.if \n[amd64] .setsize 9 26
 .if \n[amiga] .setsize 5 11
 .if \n[arc] .setsize 5 15
@@ -1303,5 +1303,5 @@
 .if \n[hpcmips] .setsize 6 17
 .if \n[hpcsh] .setsize 5 11
-.if \n[i386] .setsize 12 34
+.if \n[i386] .setsize 8 21
 .if \n[ibmnws] .setsize 5 12
 .if \n[iyonix] .setsize 5 12
@@ -1309,5 +1309,5 @@
 .if \n[luna68k] .setsize 4 10
 .if \n[mac68k] .setsize 5 13
-.if \n[macppc] .setsize 12 34
+.if \n[macppc] .setsize 7 19
 .if \n[mipsco] .setsize 5 15
 .if \n[mmeye] .setsize 5 9
@@ -1323,8 +1323,8 @@
 .if \n[sandpoint] .setsize 5 12
 .if \n[sbmips] .setsize 5 15
-.if \n[sgimips] .setsize 7 21
-.if \n[shark] .setsize 10 26
+.if \n[sgimips] .setsize 5 15
+.if \n[shark] .setsize 5 14
 .if \n[sparc] .setsize 13 35
-.if \n[sparc64] .setsize 12 42
+.if \n[sparc64] .setsize 7 19
 .if \n[sun2] .setsize -unknown- -unknown-
 .if \n[sun3] .setsize 6 16
Index: /trunk/src/distrib/notes/common/xfer
===================================================================
--- /trunk/src/distrib/notes/common/xfer	(revision 151)
+++ /trunk/src/distrib/notes/common/xfer	(revision 152)
@@ -1,3 +1,3 @@
-.\"	$NetBSD: xfer,v 1.63.2.1 2009/04/25 23:16:34 snj Exp $
+.\"	$NetBSD: xfer,v 1.63.2.1.4.1 2011/05/20 08:11:14 matt Exp $
 .\"
 .\" Copyright (c) 1999-2004 The NetBSD Foundation, Inc.
@@ -656,8 +656,8 @@
 .Sy ftp.NetBSD.org
 is
-.Li 204.152.190.13
+.Li 204.152.190.15
 and the IPv6 address is
-.Li 2001:4f8:3:7:230:48ff:fe31:43f2
-(as of April, 2009).
+.Li 2001:4f8:3:7:230:48ff:fec6:9aaa:21
+(as of May, 2010).
 .Pp
 Once you have this information, you can proceed to the next
Index: /trunk/src/distrib/notes/macppc/prep.OPENFIRMWARE
===================================================================
--- /trunk/src/distrib/notes/macppc/prep.OPENFIRMWARE	(revision 151)
+++ /trunk/src/distrib/notes/macppc/prep.OPENFIRMWARE	(revision 152)
@@ -1,3 +1,3 @@
-.\"	$NetBSD: prep.OPENFIRMWARE,v 1.11.2.1 2009/04/25 23:16:35 snj Exp $
+.\"	$NetBSD: prep.OPENFIRMWARE,v 1.11.2.1.4.1 2011/05/20 08:11:15 matt Exp $
 .if \*[OF_VERSION_3] \{\
 .
@@ -1269,5 +1269,5 @@
 .Ic rawrite32.exe
 from
-.Lk http://www.duskware.com/rawrite32/
+.Lk http://www.NetBSD.org/~martin/rawrite32/
 .Pp
 .It
@@ -1573,5 +1573,5 @@
 .Ic rawrite32.exe
 from
-.Lk http://www.duskware.com/rawrite32/
+.Lk http://www.NetBSD.org/~martin/rawrite32/
 .Pp
 Be certain you have selected the correct disk, as it will erase the
Index: /trunk/src/distrib/sets/lists/comp/mi
===================================================================
--- /trunk/src/distrib/sets/lists/comp/mi	(revision 151)
+++ /trunk/src/distrib/sets/lists/comp/mi	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: mi,v 1.1201.2.9.2.1.2.4 2010/04/21 05:20:40 matt Exp $
+#	mi,v 1.1201.2.9.2.1.2.5 2011/04/29 07:43:18 matt Exp
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
@@ -45,4 +45,5 @@
 ./usr/bin/menuc					comp-c-bin
 ./usr/bin/mkstr					comp-c-bin
+./usr/bin/mkubootimage				comp-util-bin
 ./usr/bin/msgattrib				comp-c-bin
 ./usr/bin/msgc					comp-c-bin
@@ -2050,4 +2051,5 @@
 ./usr/include/sys/times.h			comp-c-include
 ./usr/include/sys/timex.h			comp-c-include
+./usr/include/sys/tls.h				comp-c-include
 ./usr/include/sys/tprintf.h			comp-obsolete		obsolete
 ./usr/include/sys/trace.h			comp-c-include
@@ -2892,4 +2894,5 @@
 ./usr/libdata/debug/usr/bin/mkstr.debug		comp-c-debug		debug
 ./usr/libdata/debug/usr/bin/mktemp.debug	comp-util-debug		debug
+./usr/libdata/debug/usr/bin/mkubootimage.debug	comp-util-debug		debug
 ./usr/libdata/debug/usr/bin/modstat.debug	comp-util-debug		!modular,debug
 ./usr/libdata/debug/usr/bin/mset.debug		comp-tn3270-debug	debug
Index: /trunk/src/distrib/utils/sysinst/Makefile.inc
===================================================================
--- /trunk/src/distrib/utils/sysinst/Makefile.inc	(revision 151)
+++ /trunk/src/distrib/utils/sysinst/Makefile.inc	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: Makefile.inc,v 1.47 2008/10/25 22:27:34 apb Exp $
+#	$NetBSD: Makefile.inc,v 1.47.8.1 2010/08/19 15:37:27 matt Exp $
 #
 # Makefile for sysinst
@@ -38,5 +38,6 @@
 
 CPPFLAGS+=	-I. -I${.CURDIR}/../.. -I${.CURDIR} \
-		-DREL=\"${DISTRIBVER}\" -DMACH=\"${MACHINE}\"
+		-DREL=\"${DISTRIBVER}\" -DMACH=\"${MACHINE}\" \
+		-DMACH_${MACHINE} -DARCH_${MACHINE_ARCH}
 
 .if defined(SMALLPROG_INET6) && (${USE_INET6} != "no")
Index: /trunk/src/distrib/utils/sysinst/arch/evbmips/md.h
===================================================================
--- /trunk/src/distrib/utils/sysinst/arch/evbmips/md.h	(revision 151)
+++ /trunk/src/distrib/utils/sysinst/arch/evbmips/md.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: md.h,v 1.2 2007/11/12 15:07:35 jmmv Exp $ */
+/* $NetBSD: md.h,v 1.2.22.2 2011/05/13 17:10:36 matt Exp $ */
 
 /*
@@ -51,11 +51,26 @@
  *  The standard sets are: base etc comp games man misc tests text
  */
+
+#if defined(ARCH_mipsel) || defined(ARCH_mipseb)
 #define SET_KERNEL_1_NAME	"kern-ALCHEMY"
 #define SET_KERNEL_2_NAME	"kern-AR531X"
 #define SET_KERNEL_3_NAME	"kern-DBAU1500"
 #define SET_KERNEL_4_NAME	"kern-DBAU1550"
-#define SET_KERNEL_5_NAME       "kern-MALTA"
-#define SET_KERNEL_6_NAME       "kern-MTX-1"
-#define SET_KERNEL_7_NAME       "kern-OMSAL400"
+#define SET_KERNEL_5_NAME	"kern-MALTA"
+#endif
+#if defined(ARCH_mipsel)
+#define SET_KERNEL_6_NAME	"kern-MTX-1"
+#define SET_KERNEL_7_NAME	"kern-OMSAL400"
+#endif
+
+#if defined(ARCH_mips64eb) || defined(ARCH_mips64el)
+#define SET_KERNEL_4_NAME	"kern-MALTA32"
+#define SET_KERNEL_3_NAME	"kern-MALTA64"
+#define SET_KERNEL_2_NAME	"kern-XLSATX32"
+#define SET_KERNEL_1_NAME	"kern-XLSATX64"
+#endif
+
+#undef evbmips
+#undef evbmips64
 
 #define MD_SETS_SELECTED	SET_SYSTEM
Index: /trunk/src/distrib/utils/sysinst/mbr.c
===================================================================
--- /trunk/src/distrib/utils/sysinst/mbr.c	(revision 151)
+++ /trunk/src/distrib/utils/sysinst/mbr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mbr.c,v 1.79.20.1 2010/04/21 05:20:43 matt Exp $ */
+/*	$NetBSD: mbr.c,v 1.79.20.2 2011/05/20 08:11:15 matt Exp $ */
 
 /*
@@ -1157,6 +1157,6 @@
 	msg_display(MSG_editparttable);
 
-	msg_table_add(MSG_part_header, dlsize/sizemult, multname, multname,
-	    multname, multname);
+	msg_table_add(MSG_part_header, (unsigned long)(dlsize/sizemult),
+	    multname, multname, multname, multname);
 
 	if (num_opts == 0) {
@@ -1283,4 +1283,8 @@
 	}
 
+	/* Default to MB, and use bios geometry for cylinder size */
+	set_sizemultname_meg();
+	current_cylsize = bhead * bsec;
+
 	mbr_menu = new_menu(NULL, NULL, 16, 0, -1, 15, 70,
 			MC_NOBOX | MC_ALWAYS_SCROLL | MC_NOCLEAR,
@@ -1289,8 +1293,4 @@
 	if (mbr_menu == -1)
 		return 0;
-
-	/* Default to MB, and use bios geometry for cylinder size */
-	set_sizemultname_meg();
-	current_cylsize = bhead * bsec;
 
 	for (;;) {
@@ -1378,4 +1378,43 @@
 }
 
+#ifdef BOOTSEL
+static int
+validate_and_set_names(mbr_info_t *mbri, const struct mbr_bootsel *src,
+    uint32_t ext_base)
+{
+	size_t i, l;
+	const unsigned char *p;
+
+	/*
+	 * The 16 bit magic used to detect wether mbr_bootsel is valid
+	 * or not is pretty week - collisions have been seen in the wild;
+	 * but maybe it is just foreign tools corruption reminiscents
+	 * of NetBSD MBRs. Anyway, before accepting a boot menu definition,
+	 * make sure it is kinda "sane".
+	 */
+
+	for (i = 0; i < MBR_PART_COUNT; i++) {
+		/*
+		 * Make sure the name does not contain controll chars
+		 * (not using iscntrl due to minimalistic locale support
+		 * in miniroot environments) and is properly 0-terminated.
+		 */
+		for (l = 0, p = (const unsigned char *)&src->mbrbs_nametab[i];
+		    *p != 0; l++, p++) {
+			if (l >	MBR_BS_PARTNAMESIZE)
+				return 0;
+			if (*p < ' ')	/* hacky 'iscntrl' */
+				return 0;
+		}
+	}
+
+	memcpy(&mbri->mbrb, src, sizeof(*src));
+
+	if (ext_base == 0)
+		return mbri->mbrb.mbrbs_defkey - SCAN_1;
+	return 0;
+}
+#endif
+
 int
 read_mbr(const char *disk, mbr_info_t *mbri)
@@ -1435,13 +1474,12 @@
 		if (mbrs->mbr_bootsel_magic == htole16(MBR_MAGIC)) {
 			/* old bootsel, grab bootsel info */
-			mbri->mbrb = *(struct mbr_bootsel *)
-				((uint8_t *)mbrs + MBR_BS_OLD_OFFSET);
-			if (ext_base == 0)
-				bootkey = mbri->mbrb.mbrbs_defkey - SCAN_1;
+			bootkey = validate_and_set_names(mbri, 
+				(struct mbr_bootsel *)
+				((uint8_t *)mbrs + MBR_BS_OLD_OFFSET),
+				ext_base);
 		} else if (mbrs->mbr_bootsel_magic == htole16(MBR_BS_MAGIC)) {
 			/* new location */
-			mbri->mbrb = mbrs->mbr_bootsel;
-			if (ext_base == 0)
-				bootkey = mbri->mbrb.mbrbs_defkey - SCAN_1;
+			bootkey = validate_and_set_names(mbri,
+			    &mbrs->mbr_bootsel, ext_base);
 		}
 		/* Save original flags for mbr code update tests */
Index: /trunk/src/distrib/utils/sysinst/msg.mbr.de
===================================================================
--- /trunk/src/distrib/utils/sysinst/msg.mbr.de	(revision 151)
+++ /trunk/src/distrib/utils/sysinst/msg.mbr.de	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: msg.mbr.de,v 1.8 2007/02/15 12:00:15 rillig Exp $	*/
+/*	$NetBSD: msg.mbr.de,v 1.8.28.1 2011/05/20 08:11:15 matt Exp $	*/
 
 /*
@@ -67,5 +67,5 @@
 /* the %s's will expand into three character strings */
 message part_header
-{   Festplattenkapazität insgesamt %d %s.
+{   Festplattenkapazität insgesamt %lu %s.
 
 .if BOOTSEL
Index: /trunk/src/distrib/utils/sysinst/msg.mbr.en
===================================================================
--- /trunk/src/distrib/utils/sysinst/msg.mbr.en	(revision 151)
+++ /trunk/src/distrib/utils/sysinst/msg.mbr.en	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: msg.mbr.en,v 1.13 2006/04/23 23:09:48 hubertf Exp $	*/
+/*	$NetBSD: msg.mbr.en,v 1.13.36.1 2011/05/20 08:11:15 matt Exp $	*/
 
 /*
@@ -68,5 +68,5 @@
 /* the %s's will expand into three character strings */
 message part_header
-{   Total disk size %d %s.
+{   Total disk size %lu %s.
 
 .if BOOTSEL
Index: /trunk/src/distrib/utils/sysinst/msg.mbr.es
===================================================================
--- /trunk/src/distrib/utils/sysinst/msg.mbr.es	(revision 151)
+++ /trunk/src/distrib/utils/sysinst/msg.mbr.es	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: msg.mbr.es,v 1.4 2005/12/08 16:51:45 xtraeme Exp $	*/
+/*	$NetBSD: msg.mbr.es,v 1.4.36.1 2011/05/20 08:11:15 matt Exp $	*/
 
 /*
@@ -67,5 +67,5 @@
 /* the %s's will expand into three character strings */
 message part_header
-{   Tamaño total del disco %d %s.
+{   Tamaño total del disco %lu %s.
 
 .if BOOTSEL
Index: /trunk/src/distrib/utils/sysinst/msg.mbr.fr
===================================================================
--- /trunk/src/distrib/utils/sysinst/msg.mbr.fr	(revision 151)
+++ /trunk/src/distrib/utils/sysinst/msg.mbr.fr	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: msg.mbr.fr,v 1.14 2006/09/04 22:00:52 hubertf Exp $	*/
+/*	$NetBSD: msg.mbr.fr,v 1.14.34.1 2011/05/20 08:11:15 matt Exp $	*/
 
 /*
@@ -64,5 +64,5 @@
 /* the %s's will expand into three character strings */
 message part_header
-{   Taille totale du disque %d %s.
+{   Taille totale du disque %lu %s.
 
 .if BOOTSEL
Index: /trunk/src/distrib/utils/sysinst/msg.mbr.pl
===================================================================
--- /trunk/src/distrib/utils/sysinst/msg.mbr.pl	(revision 151)
+++ /trunk/src/distrib/utils/sysinst/msg.mbr.pl	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: msg.mbr.pl,v 1.11 2006/09/19 14:47:10 hubertf Exp $	*/
+/*	$NetBSD: msg.mbr.pl,v 1.11.34.1 2011/05/20 08:11:15 matt Exp $	*/
 
 /*
@@ -62,5 +62,5 @@
 /* the %s's will expand into three character strings */
 message part_header
-{   Calkowity rozmiar dysku %d %s.
+{   Calkowity rozmiar dysku %lu %s.
 
 .if BOOTSEL
Index: /trunk/src/doc/3RDPARTY
===================================================================
--- /trunk/src/doc/3RDPARTY	(revision 151)
+++ /trunk/src/doc/3RDPARTY	(revision 152)
@@ -1,3 +1,3 @@
-#      $NetBSD: 3RDPARTY,v 1.647.2.6 2009/03/02 20:24:26 snj Exp $
+#      $NetBSD: 3RDPARTY,v 1.647.2.6.4.1 2011/05/20 08:11:15 matt Exp $
 #
 # This file contains a list of the software that has been integrated into
@@ -68,14 +68,14 @@
 
 Package:	ath-hal
-Version:	0.9.17.2
-Current Vers:	0.9.17.2
+Version:	FreeBSD SVN revision number 185521
+Current Vers:	FreeBSD SVN revision number 185521
 Maintainer:	Sam Leffler <sam@errno.com>
 Archive Site:	none
 Home Page:	none
 Mailing List:	none
-Responsible:	sam, dyoung, gdamore
-License:	Redistribution without changes (binary only)
-Notes:
-The HAL is binary only, and located in src/sys/contrib/dev/ath
+Responsible:	sam, alc
+License:	BSD-like (2 clause), ISC
+Notes:
+The HAL is located in src/sys/external/isc/atheros_hal
 
 Package:	bc
@@ -92,6 +92,6 @@
 
 Package:	bind/named
-Version:	libc/includes: 9.5.0, bind: 9.5.0
-Current Vers:	9.5.0-P2
+Version:	libc/includes: 9.5.0, bind: 9.5.2-P2
+Current Vers:	9.5.2-P2
 Maintainer:	Paul Vixie <vixie@vix.com>
 Archive Site:	ftp://ftp.isc.org/isc/bind9/
@@ -233,6 +233,6 @@
 
 Package:	dhcpcd
-Version:	4.0.10
-Current Vers:	4.0.10
+Version:	5.0.1
+Current Vers:	5.0.1
 Maintainer:	roy
 Archive Site:	ftp://roy.marples.name/pub/dhcpcd/
@@ -754,12 +754,12 @@
 
 Package:	postfix
-Version:	2.5.4
-Current Vers:	2.5.5
+Version:	2.6.5
+Current Vers:	2.6.5
 Maintainer:	Wietse Venema <wietse@porcupine.org>
 Archive Site:	ftp://postfix.cloud9.net/official/
 Home Page:	http://www.postfix.org/
 Mailing List:	postfix-users@postfix.org
-Responsible:	heas
-License:	IBM Public License. See also src/gnu/dist/postfix.
+Responsible:	christos, tron
+License:	IBM Public License. See also src/external/ibm-public/postfix/dist.
 Notes:
 HTML documentation should be kept in sync with the README_FILES.
Index: /trunk/src/doc/BUILDING.mdoc
===================================================================
--- /trunk/src/doc/BUILDING.mdoc	(revision 151)
+++ /trunk/src/doc/BUILDING.mdoc	(revision 152)
@@ -1,3 +1,3 @@
-.\"	$NetBSD: BUILDING.mdoc,v 1.67.2.2 2008/11/15 22:10:33 snj Exp $
+.\"	$NetBSD: BUILDING.mdoc,v 1.67.2.2.4.1 2011/05/20 08:11:16 matt Exp $
 .\"
 .\" Copyright (c) 2001-2008 The NetBSD Foundation, Inc.
@@ -34,5 +34,5 @@
 .ds toolprefix nb
 .
-.Dd September 10, 2008
+.Dd May 1, 2009
 .Dt BUILDING 8
 .Os NetBSD
@@ -513,4 +513,11 @@
 to include RCS IDs for use with
 .Xr ident 1 .
+.DFLTn
+.
+.It Sy MKSUBPIXEL
+.YorN
+For X builds, decides if subpixel rendering code in FreeType
+is turned on.
+Turned off by default because of patent issues.
 .DFLTn
 .
Index: /trunk/src/doc/CHANGES
===================================================================
--- /trunk/src/doc/CHANGES	(revision 151)
+++ /trunk/src/doc/CHANGES	(revision 152)
@@ -1,3 +1,3 @@
-# LIST OF CHANGES FROM LAST RELEASE:			<$Revision: 1.1142.2.7 $>
+# LIST OF CHANGES FROM LAST RELEASE:			<$Revision: 1.1142.2.7.4.1 $>
 #
 #
@@ -1162,2 +1162,6 @@
 		openssl API related security fix.  [kardel 20090108]
 	dhcpcd(8): Import 4.0.10 [roy 20090204]
+	dhcpcd(8): Import dhcpcd-5.0.1 [roy 20090510]
+	hdaudio(4): New standards-compliant Intel High Definition Audio driver
+		written to replace azalia(4). [sborrill 20090906]
+	ums(4):	Add touchpanel support. [mbalmer 20091127]
Index: unk/src/doc/CHANGES-5.0.1
===================================================================
--- /trunk/src/doc/CHANGES-5.0.1	(revision 151)
+++ 	(revision )
@@ -1,735 +1,0 @@
-# $NetBSD: CHANGES-5.0.1,v 1.1.2.44 2009/07/29 22:35:18 snj Exp $
-
-A complete list of changes from the NetBSD 5.0 release to the NetBSD 5.0.1
-release:
-
-gnu/usr.bin/groff/tmac/mdoc.local		patched by hand
-sys/sys/param.h					patched by hand
-
-	Welcome to 5.0.0_PATCH.
-	[snj]
-
-sys/kern/uipc_socket.c				1.189
-
-	PR kern/41311: Mutex error: mutex_vector_enter: locking against myself
-	[ad, ticket #731]
-
-sys/dev/ic/ncr53c9x.c				1.138
-
-	Add missing braces - patch from Kurt Lidl in PR port-vax/41314.
-	[martin, ticket #734]
-
-sys/netinet6/ip6_input.c			1.127
-
-	Add missing paranthesis - from Kurt Lidl in PR port-vax/41316
-	[martin, ticket #733]
-
-gnu/dist/binutils/bfd/elf32-vax.c		1.9
-
-	Allocate relocation section using bfd_zalloc() to ensure no garbage
-	relocations when not all the entries are used.
-	Fixes PR port-vax/39182.
-	[mhitch, ticket #738]
-
-sys/ufs/ffs/ffs_alloc.c				1.123 via patch
-
-	Fix random 'filesystem full' messages by trapping a couple of
-	32-bit overflow areas missed in rev 1.110 and switching cgbase().
-	[sborrill, ticket #726]
-
-usr.sbin/racoonctl/Makefile			1.5 via patch
-
-	Adjust the ADMINPORTDIR to match that of racoon (with which it'll
-	want to talk).  Fixes PR 41376.
-	[spz, ticket #740]
-
-sys/arch/hp700/include/intr.h			1.14
-
-	Add __insn_barrier after updating cpl in splraise. PR/41369.
-	[skrll, ticket #741]
-
-sys/arch/m68k/include/psl.h			1.14
-
-	Add memory clobber to the instructions that change the IPL in the
-	status register.  See also kern/38637.
-	[mhitch, ticket #743]
-
-sys/netinet/in_pcb.c				patch
-
-	Fix compilation with IPNOPRIVPORTS option.
-	[sborrill, ticket #745]
-
-share/man/man8/afterboot.8			1.39
-
-	Fix typo, from Shannon -jj Behrens in PR 41375.
-	[dholland, ticket #746]
-
-sys/dist/ipf/netinet/ip_fil_netbsd.c		1.50
-
-	Don't call callout_stop() without callout_init()
-	Fixes PR/41364
-	[kefren, ticket #748]
-
-sys/arch/sparc/include/math.h			1.5
-sys/arch/sparc64/include/math.h			1.7
-
-	merge these two files, makes sparc64 sparc/libc work again.
-	only provide __HAVE_LONG_DOUBLE if _LP64.
-	[mrg, ticket #750]
-
-sys/arch/amd64/amd64/lock_stubs.S		1.22, 1.23
-sys/arch/i386/i386/lock_stubs.S			1.23
-sys/arch/x86/include/mutex.h			1.6
-sys/arch/x86/x86/patch.c			1.18
-sys/kern/kern_rwlock.c				1.30
-
-	Add a workaround for a bug with some Opteron revisions where
-	locked operations sometimes do not serve as memory barriers,
-	allowing memory references to bleed outside of critical sections.
-	[ad, ticket #725]
-
-usr.sbin/postinstall/postinstall		1.95
-
-	Teach postinstall about /etc/dhcpcd.conf.
-	[jnemeth, ticket #752]
-
-usr.sbin/postinstall/postinstall		1.97
-
-	Fetch /etc/dhcpcd.conf from the correct place when building the
-	system from source.
-	[jnemeth, ticket #756]
-
-sys/kern/sys_mqueue.c				1.17
-
-	sys_mq_open: remove broken access flag check.
-	Noted by Stathis Kamperis.
-	[rmind, ticket #762]
-
-usr.sbin/schedctl/schedctl.c			1.14
-
-	Skip LSIDL and LSZOMB threads when retrieving info.
-	[rmind, ticket #763]
-
-sys/arch/sparc/include/psl.h			1.45
-
-	Add memory clobbers to the inline assembler modifying/testing the %psr
-	register, to avoid the compiler reordering instructions out of critical
-	sections. Should fix PR port-sparc/41372.
-	[martin, ticket #764]
-
-share/man/man7/sysctl.7				1.22 via patch
-
-	Document PROC_PID_LIMIT_SBSIZE.  From Greg A. Woods in PR lib/36463.
-	Wording is taken from getrlimit(2).
-	[snj, ticket #765]
-
-sys/arch/vax/include/mtpr.h			1.21, 1.22
-
-	Add "memory" clobber to mtpr for barrier.  See also kern/38637.
-	[mhitch, ticket #767]
-
-dist/ntp/ntpd/ntp_crypto.c			1.15
-
-	Fix CVE-2009-1252: Buffer overflow in ntpd crypto code. A remote
-	attacker can send a specially constructed request packet that
-	would overflow the sprintf()'ed buffer causing ntpd to crash.
-	[dholland, ticket #777]
-
-sys/arch/sparc64/sparc64/vm_machdep.c		1.88
-
-	When preparing the initial trap frame for a new forked lwp,
-	explicitly clear condition code. Otherwise we might catch a signal
-	(handlers are inherited from the parent) before we ever return to
-	userland. The current trapframe is converted into a ucontext and
-	after the signal handler returns, the lwp stays in userland and
-	directly uses the ucontext to return to the fork call.
-	Fixes PR 41302.
-	[martin, ticket #774]
-
-sys/kern/sys_mqueue.c				1.18
-
-	- Slightly rework the way permissions are checked. Neither
-	mq_receive() nor mq_send() should fail due to permissions.
-	- Check for empty message queue name (POSIX does not allow this
-	for regular files, and it's weird), check for DTYPE_MQUEUE, fix
-	permission check in mq_unlink(), clean up.
-	[rmind, ticket #779]
-
-sys/kern/kern_physio.c				1.91
-
-	Remove a race where physio_done() may use memory already
-	freed.  Fixes PR kern/39536.
-	[hannken, ticket #781]
-
-src/external/bsd/fetch/dist/libfetch/common.c	libfetch-2-23
-src/external/bsd/fetch/dist/libfetch/common.h	libfetch-2-23
-src/external/bsd/fetch/dist/libfetch/errlist.sh	libfetch-2-23
-src/external/bsd/fetch/dist/libfetch/fetch.3	libfetch-2-23
-src/external/bsd/fetch/dist/libfetch/fetch.c	libfetch-2-23
-src/external/bsd/fetch/dist/libfetch/fetch.cat3	libfetch-2-23
-src/external/bsd/fetch/dist/libfetch/fetch.h	libfetch-2-23
-src/external/bsd/fetch/dist/libfetch/file.c	libfetch-2-23
-src/external/bsd/fetch/dist/libfetch/ftp.c	libfetch-2-23
-src/external/bsd/fetch/dist/libfetch/ftp.errors	libfetch-2-23
-src/external/bsd/fetch/dist/libfetch/http.c	libfetch-2-23
-src/external/bsd/fetch/dist/libfetch/http.errors libfetch-2-23
-
-	Pull up libfetch-2.23:
-	- if-not-modified support
-	- document that struct URL is not part of the ABI
-	- fetchRestartCalls cleanup for signal handlers
-	- allow HTTP basic auth to be specified in the URL, allow : as part of
-	  the cleartext password
-	- fix a file descriptor leak in the file:// iteration code
-	[joerg, ticket #670]
-
-UPDATING					patch
-distrib/sets/lists/base/mi			patch
-distrib/sets/lists/etc/mi			patch
-distrib/sets/lists/man/mi			patch
-external/bsd/pkg_install/Makefile.inc		patch
-external/bsd/pkg_install/prepare-import.sh	patch
-external/bsd/pkg_install/dist/add/add.h		pkg_install-20090528
-external/bsd/pkg_install/dist/add/main.c	pkg_install-20090528
-external/bsd/pkg_install/dist/add/perform.c	pkg_install-20090528
-external/bsd/pkg_install/dist/add/pkg_add.1	pkg_install-20090528
-external/bsd/pkg_install/dist/admin/admin.h	pkg_install-20090528
-external/bsd/pkg_install/dist/admin/audit.c	pkg_install-20090528
-external/bsd/pkg_install/dist/admin/check.c	pkg_install-20090528
-external/bsd/pkg_install/dist/admin/main.c	pkg_install-20090528
-external/bsd/pkg_install/dist/admin/pkg_admin.1	pkg_install-20090528
-external/bsd/pkg_install/dist/bpm/bpm.1		pkg_install-20090528
-external/bsd/pkg_install/dist/create/build.c	pkg_install-20090528
-external/bsd/pkg_install/dist/create/create.h	pkg_install-20090528
-external/bsd/pkg_install/dist/create/main.c	pkg_install-20090528
-external/bsd/pkg_install/dist/create/perform.c	pkg_install-20090528
-external/bsd/pkg_install/dist/create/pkg_create.1 pkg_install-20090528
-external/bsd/pkg_install/dist/create/pl.c	pkg_install-20090528
-external/bsd/pkg_install/dist/create/util.c	pkg_install-20090528
-external/bsd/pkg_install/dist/delete/pkg_delete.1 pkg_install-20090528
-external/bsd/pkg_install/dist/info/info.h	pkg_install-20090528
-external/bsd/pkg_install/dist/info/main.c	pkg_install-20090528
-external/bsd/pkg_install/dist/info/perform.c	pkg_install-20090528
-external/bsd/pkg_install/dist/info/pkg_info.1	pkg_install-20090528
-external/bsd/pkg_install/dist/info/show.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/automatic.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/config.h.in	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/conflicts.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/decompress.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/dewey.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/fexec.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/file.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/global.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/iterate.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/lib.h		pkg_install-20090528
-external/bsd/pkg_install/dist/lib/lpkg.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/opattern.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/pkg_io.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/pkg_summary.5	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/pkgdb.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/plist.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/str.c		pkg_install-20090528
-external/bsd/pkg_install/dist/lib/var.c		pkg_install-20090528
-external/bsd/pkg_install/dist/lib/version.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/version.h	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/vulnerabilities-file.c pkg_install-20090528
-external/bsd/pkg_install/dist/admin/audit-packages.sh.in pkg_install-20090528
-external/bsd/pkg_install/dist/admin/download-vulnerability-list.sh.in pkg_install-20090528
-external/bsd/pkg_install/dist/delete/pkg_delete.c pkg_install-20090528
-external/bsd/pkg_install/dist/lib/gpgsig.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/license.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/parse-config.c pkg_install-20090528
-external/bsd/pkg_install/dist/lib/pkcs7.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/pkg_install.conf.5.in pkg_install-20090528
-external/bsd/pkg_install/dist/lib/pkg_signature.c: pkg_install-20090528
-external/bsd/pkg_install/dist/lib/remove.c	pkg_install-20090528
-external/bsd/pkg_install/dist/lib/xwrapper.c	pkg_install-20090528
-external/bsd/pkg_install/dist/x509/pkgsrc.cnf	pkg_install-20090528
-external/bsd/pkg_install/dist/x509/pkgsrc.sh	pkg_install-20090528
-external/bsd/pkg_install/dist/x509/signing.txt	pkg_install-20090528
-external/bsd/pkg_install/lib/Makefile		patch
-external/bsd/pkg_install/sbin/Makefile		patch
-external/bsd/pkg_install/sbin/Makefile.inc	patch
-external/bsd/pkg_install/sbin/pkg_add/Makefile	patch
-external/bsd/pkg_install/sbin/pkg_admin/Makefile patch
-external/bsd/pkg_install/sbin/pkg_create/Makefile patch
-external/bsd/pkg_install/sbin/pkg_delete/Makefile patch
-external/bsd/pkg_install/sbin/pkg_info/Makefile	patch
-external/bsd/pkg_install/dist/add/extract.c	removed
-external/bsd/pkg_install/dist/add/futil.c	removed
-external/bsd/pkg_install/dist/add/verify.c	removed
-external/bsd/pkg_install/dist/add/verify.h	removed
-external/bsd/pkg_install/dist/admin/config.c	removed
-external/bsd/pkg_install/dist/audit-packages/AUTHORS removed
-external/bsd/pkg_install/dist/audit-packages/COPYING removed
-external/bsd/pkg_install/dist/audit-packages/README removed
-external/bsd/pkg_install/dist/audit-packages/audit-packages.1.in removed
-external/bsd/pkg_install/dist/audit-packages/audit-packages.c removed
-external/bsd/pkg_install/dist/audit-packages/audit-packages.conf.5.in removed
-external/bsd/pkg_install/dist/audit-packages/audit-packages.conf.in removed
-external/bsd/pkg_install/dist/audit-packages/download-vulnerability-list.1.in removed
-external/bsd/pkg_install/dist/audit-packages/download-vulnerability-list.sh.in removed
-external/bsd/pkg_install/dist/delete/delete.h	removed
-external/bsd/pkg_install/dist/delete/main.c	removed
-external/bsd/pkg_install/dist/delete/perform.c	removed
-external/bsd/pkg_install/dist/lib/ftpio.c	removed
-external/bsd/pkg_install/dist/lib/path.c	removed
-external/bsd/pkg_install/dist/lib/path.h	removed
-external/bsd/pkg_install/dist/lib/pen.c		removed
-external/bsd/pkg_install/dist/lib/pexec.c	removed
-external/bsd/pkg_install/dist/view/linkfarm.1	removed
-external/bsd/pkg_install/dist/view/linkfarm.sh.in removed
-external/bsd/pkg_install/dist/view/pkg_view.1	removed
-external/bsd/pkg_install/dist/view/pkg_view.sh.in removed
-external/bsd/pkg_install/sbin/audit-packages/Makefile removed
-external/bsd/pkg_install/sbin/pkg_view/Makefile	removed
-
-	Merge pkg_install-20090528 from HEAD.
-	[joerg, ticket #784]
-
-usr.sbin/puffs/mount_sysctlfs/sysctlfs.c	1.11
-
-	Fix a crash while trying to read nodes on amd64, reported in
-	PR/41494.
-	[njoly, ticket #783]
-
-sys/arch/sparc64/include/cpu.h			1.86
-sys/arch/sparc64/sparc64/locore.s		1.291
-sys/arch/sparc64/sparc64/vm_machdep.c		1.89
-
-	cpu_setfunc() can not use lwp_trampoline, as that has additional
-	lwp startup semantics. Use a simpler setfunc_trampoline instead.
-	[martin, ticket #786]
-
-sys/arch/m68k/include/m68k.h			1.14
-sys/arch/m68k/m68k/switch_subr.s		1.22
-sys/arch/m68k/m68k/vm_machdep.c			1.28
-
-	Do not use lwp_trampoline for cpu_setfunc, we do not want to call
-	lwp_startup() after a setfunc. Grow a simplified setfunc_trampoline
-	instead.
-	[martin, ticket #787]
-
-sys/arch/hp700/hp700/locore.S			1.35
-sys/arch/hp700/include/cpu.h			1.34
-sys/arch/hppa/hppa/vm_machdep.c			1.36
-
-	Do not use lwp_trampoline for cpu_setfunc, but a simplified
-	setfunc_trampoline that does not call lwp_startup().
-	[skrll, ticket #793]
-
-distrib/common/parselist.awk			1.16
-distrib/sets/maketars				1.66
-share/dict/Makefile				1.17
-share/mk/bsd.README				1.249
-share/mk/bsd.hostprog.mk			1.55
-share/mk/bsd.kmodule.mk				1.19
-share/mk/bsd.lib.mk				1.298
-share/mk/bsd.links.mk				1.34
-share/mk/bsd.man.mk				1.100
-share/mk/bsd.prog.mk				1.241
-share/zoneinfo/Makefile				1.43
-usr.bin/xinstall/xinstall.c			1.106 - 1.108 via patch
-
-	Various METALOG fixes, including entries sorting to
-	fix inconsistent shared sets among builds as seen in
-	/pub/NetBSD-daily/netbsd-5/200904010000Z/shared/ and
-	/pub/NetBSD-daily/netbsd-5/200904010002Z/shared/ dirs.
-	Should fix PR 24457 and PR 41155.
-	[snj, ticket #790]
-
-sys/kern/sched_4bsd.c				1.25
-
-	sched_pstats_hook: fix estcpu decay.
-	this makes my desktop usable when running "make -j4".
-	[rmind, ticket #791]
-
-external/mit/xorg/server/drivers/xf86-video-s3/Makefile patch
-
-	Add missing object file to build a properly working s3 module.
-	Fixes PR xsrc/41206.
-	[ahoka, ticket #795]
-
-sys/arch/alpha/alpha/locore.s			1.114
-sys/arch/alpha/alpha/vm_machdep.c		1.100
-sys/arch/alpha/include/alpha.h			1.24
-
-	Do not use lwp_trampoline for cpu_setfunc, but a simplified
-	setfunc_trampoline that does not call lwp_startup() instead.
-	[martin, ticket #798]
-
-sys/arch/mips/include/locore.h			1.79
-sys/arch/mips/mips/locore_mips1.S		1.65
-sys/arch/mips/mips/mipsX_subr.S			1.28
-sys/arch/mips/mips/mips_machdep.c		1.211
-sys/arch/mips/mips/vm_machdep.c			1.123
-
-	Do not use the same trampoline for cpu_lwp_fork and
-	cpu_setfunc - only the former needs to call lwp_startup().
-	[martin, ticket #799]
-
-sys/arch/sparc/dev/zs.c				1.116
-
-	Properly initialize child attach args to zero - we could end
-	up with various devices having different ideas about being
-	console otherwise.
-	[martin, ticket #800]
-
-sys/arch/powerpc/powerpc/locore_subr.S		1.38
-sys/arch/powerpc/powerpc/vm_machdep.c		1.77
-
-	Do not use the same trampoline for cpu_setfunc and
-	cpu_lwp_fork, the latter does a lot more work.
-	[martin, ticket #801]
-
-share/man/man8/afterboot.8			1.40
-
-	Make some updates (most notably syncing the Postfix section
-	with reality). inspired by PR misc/39168.
-	[snj, ticket #804]
-
-sys/arch/sh3/sh3/locore_subr.S			1.52
-
-	Fix logic error in copyinstr() when deciding whether to return EFAULT
-	or ENAMETOOLONG.
-	[uwe, ticket #802]
-
-distrib/sets/lists/xbase/mi			1.76
-external/mit/xorg/bin/xvidtune/Makefile		1.2
-
-	fix xsrc/41577: install the Xvidtune app-defaults file, after the
-	necessary preprocessing and sed processing it needs.
-	[mrg, ticket #805]
-
-sys/compat/linux/common/linux_socket.c		1.100
-
-	In sendmsg(2), do copy the msghdr structure before trying to use it.
-	[njoly, ticket #806]
-
-sys/kern/subr_kobj.c				1.35
-
-	Fix a crash observed when trying to load a corrupted ELF kernel module.
-	[rmind, ticket #809]
-
-sys/netinet/tcp_usrreq.c			1.155
-
-	sysctl_inpcblist: fix a lock leak in error path
-	[rmind, ticket #812]
-
-sys/dev/pci/ehci_pci.c				1.45
-
-	Apply hw workaround required for all SB600 revisions and SB700
-	revisions A12 and A13 to avoid USB subsystem hang symptom.
-	The USB subsystem hang symptom is observed when the system has
-	multiple USB devices connected to it or one USB device is often
-	re-connected.
-	[cegger, ticket #814]
-
-lib/libpam/modules/pam_unix/pam_unix.c		1.13
-
-	Restore the good old UNIX behavior of root password changing: only root
-	may change the root password.
-	[tonnerre, ticket #817]
-
-sys/kern/sys_generic.c				1.122 via patch
-
-	Updates to f_flag need to be made with atomics.
-	[rmind, ticket #811]
-
-sys/kern/tty_pty.c				1.117
-
-	Writes on the controlling tty were not being awoken from blocks,
-	use the correct condvar to make this happen.
-	this fixes PR/41566
-	[plunky, ticket #807]
-
-distrib/hp300/miniroot/install.md		1.14
-
-	Make hp300's install.md script probe cd(4) devices properly.
-	[tsutsui, ticket #820]
-
-sys/compat/linux/common/linux_sched.c		1.59
-
-	In linux_sys_sched_getaffinity(), do not leak memory on error.
-	[njoly, ticket #822]
-
-external/bsd/pkg_install/dist/admin/pkg_admin.1:	1.1.1.7
-external/bsd/pkg_install/dist/lib/license.c: 		1.1.1.3
-external/bsd/pkg_install/dist/lib/version.h:		1.1.1.16
-
-	Merge pkg_install-20090610 from HEAD
-	[joerg, ticket #815]
-
-games/hunt/huntd/answer.c			1.10
-
-	Fix possible remote DoS of a running hunt game, and prevent
-	a possible theoretical attack involving >= 1 billion ammo.
-	[dholland, ticket #834]
-
-crypto/dist/ssh/cipher.c			1.22
-crypto/dist/ssh/cipher.h			1.3
-crypto/dist/ssh/packet.c			1.32
-
-	Add special handling for CBC cipher modes to make them appear
-	less favorable than CTR modes. Also, in order to avoid creating
-	oracles unnecessarily, change behavior in various situations
-	from "Drop connection" to "Ignore packets up to 256kB". This
-	affects CBC mode ciphers only.
-	[tonnerre, ticket #843]
-
-games/hack/extern.h				1.11
-games/hack/hack.do_name.c			1.9, 1.10
-games/hack/hack.eat.c				1.8
-games/hack/hack.end.c				1.12 via patch
-games/hack/hack.fight.c				1.10
-games/hack/hack.h				1.13 via patch
-games/hack/hack.invent.c			1.12, 1.13
-games/hack/hack.main.c				1.12, 1.13
-games/hack/hack.objnam.c			1.9
-games/hack/hack.options.c			1.9
-games/hack/hack.pri.c				1.11
-games/hack/hack.rip.c				1.10, 1.11
-games/hack/hack.shk.c				1.10
-games/hack/hack.topl.c				1.10, 1.11
-games/hack/hack.unix.c				1.12, 1.13
-
-	sprintf -> snprintf, plus some use of strlcpy/strlcat where
-	appropriate.
-	Fix two serious string-handling bugs (one exploitable, one
-	probably exploitable) and also add proper checking/paranoia in
-	several other places.
-	[dholland, ticket #844]
-
-sys/kern/init_sysctl.c				1.161
-
-	sysctl_doeproc: fix a bug in rev.1.135.  Don't forget to mark
-	our marker process PK_MARKER.  This fixes crashes in
-	sched_pstats, etc.
-	[rmind, ticket #835]
-
-sys/kern/kern_exit.c				1.221
-
-	exit1: fix a race with do_sys_wait/proc_free.
-	[rmind, ticket #836]
-
-sys/kern/kern_rwlock.c				1.31
-
-	lockdebug fixes for rw_tryupgrade/rw_downgrade.
-	[rmind, ticket #837]
-
-sys/kern/init_sysctl.c				1.162
-sys/kern/vfs_trans.c				1.25
-
-	Don't forget to skip marker processes.
-	[rmind, ticket #838]
-
-sys/kern/init_sysctl.c				1.163
-
-	sysctl_doeproc:
-		- simplify.
-	        - KERN_PROC: fix possible stale proc pointer dereference.
-	        - KERN_PROC: don't do copyout with proc_lock held.
-	[rmind, ticket #839]
-
-sys/kern/vfs_lockf.c				1.70
-
-	lf_split: cv_destroy a condvar before clobbering it.
-	[rmind, ticket #840]
-
-sys/kern/vfs_syscalls.c				1.392
-
-	do_sys_utimes: fix a bug introduced by rev.1.367.
-	VA_UTIMES_NULL is in va_vaflags, not va_flags.
-	[rmind, ticket #841]
-
-sys/kern/vfs_lockf.c				1.71
-
-	Don't make F_GETLK or the common case of F_UNLCK fail for
-	per-user limit.
-	[rmind, ticket #842]
-
-lib/libc/sys/getrlimit.2			1.31, 1.32
-
-	Document RLIMIT_AS.  Fixes PR#41517.
-	[mrg, ticket #846]
-
-xsrc/external/mit/freetype/dist/src/cff/cffload.c 1.2
-xsrc/external/mit/freetype/dist/src/lzw/ftzopen.c 1.2
-xsrc/external/mit/freetype/dist/src/sfnt/ttcmap.c 1.2
-xsrc/external/mit/freetype/dist/src/smooth/ftsmooth.c 1.2
-
-	Apply fixes from CVE-2009-0946.
-	[mrg, ticket #848]
-
-crypto/dist/openssl/crypto/pqueue/pqueue.c	1.2
-crypto/dist/openssl/crypto/pqueue/pqueue.h	1.2
-crypto/dist/openssl/ssl/d1_both.c		1.4
-crypto/dist/openssl/ssl/d1_pkt.c		1.2
-crypto/dist/openssl/ssl/s3_pkt.c		1.10
-crypto/dist/openssl/ssl/ssl.h			1.19
-crypto/dist/openssl/ssl/ssl_err.c		1.13
-
-	Fix various vulnerabilities in OpenSSL which have not previously
-	been addressed: CVE-2009-1377, CVE-2009-1378, CVE-2009-1379,
-	CVE-2009-1386 and CVE-2009-1387.
-	[tonnerre, ticket #850]
-
-crypto/dist/openssl/ssl/d1_both.c		1.5
-
-	Fix build problem from ticket 850 on non-64bit systems.
-	[spz, ticket #851]
-
-sys/netinet/ip_output.c				1.203
-
-	Fix PR kern/41659: add missing splx() in FAST_IPSEC code.
-	[martin, ticket #847]
-
-common/lib/libc/hash/sha2/sha2.c		1.8-1.18 via patch
-crypto/dist/openssl/crypto/evp/m_sha1.c		1.2-1.3 via patch
-distrib/sets/lists/base/md.amd64		1.51 via patch
-distrib/sets/lists/base/md.sparc64		1.46 via patch
-distrib/sets/lists/base/shl.mi			1.474 via patch
-distrib/sets/lists/comp/mi			1.1263 via patch
-lib/libc/hash/sha2/Makefile.inc			1.4 via patch
-lib/libc/hash/sha2/sha2.3			1.5 via patch
-lib/libc/hash/sha2/sha224hl.c			1.1 via patch
-lib/libc/include/namespace.h			1.138 via patch
-lib/libc/shlib_version				patch
-lib/libcrypto/libc-sha256.c			1.1 via patch
-lib/libcrypto/libc-sha512.c			1.1 via patch
-lib/libcrypto/sha.inc				1.10 via patch
-lib/libcrypto/shlib_version			patch
-sys/sys/sha2.h					1.3 via patch
-
-	Add SHA224 implementation to libc.
-	Make libcrypto use the SHA2 implementation of libc.
-	Bump minor versions of libc and libcrypto.
-	[joerg, ticket #855]
-
-dist/dhcp/client/dhclient.c			1.20
-
-	Limit the length of the address mask before we copy it.
-	Fixes CVE-2009-0692.
-	[tonnerre, ticket #856]
-
-dist/dhcp/server/dhcp.c				1.11
-
-	Fix behavior of dhcpd in the case where clientid and hardware
-	ethernet definitions are mixed. Fixes a refcount assertion.
-	[tonnerre, ticket #860]
-
-sys/netinet/tcp_input.c				1.296
-
-	Follow exactly the recommendation of
-	draft-ietf-tcpm-tcpsecure-11.txt: Don't check gainst the last
-	ack received, but the expected sequence number.  This makes RST
-	handling independent of delayed ACK.
-	[is, ticket #859]
-
-sys/dev/pci/if_wm.c				1.168, 1.170 and 1.173 via patch
-sys/dev/pci/if_wmreg.h				1.27
-
-	1) On i82563, the em driver says that the ready bit in the MDIC
-	register may be incorrectly set. Insert delay(200) like the em driver.
-	Fixes PR#41014
-	2) Add workaround for 82543GC. We need to force speed and duplex on
-	the MAC equal to what the PHY speed and duplex configuration is.
-	Fixes PR#36430.
-	3) Fix many problems and panic on TBI's cards (includes PR#32009).
-	[msaitoh, ticket #862]
-
-sys/kern/sys_mqueue.c				1.21 via patch
-
-	mq_send/mq_receive: while permission may allow that, return EBADF
-	if sending to read-only queue, or receiving from write-only queue.
-	[rmind, ticket #857]
-
-sys/kern/vfs_subr.c				1.379
-sys/sys/vnode.h					1.207
-
-	Put a flag bit into v_usecount to prevent vtryget during
-	getcleanvnode.  Fixes PR/41374.
-	[rmind, ticket #863]
-
-sys/arch/amd64/amd64/trap.c			1.56, 1.57
-
-	Handle protection fault properly.
-	[rmind, ticket #865]
-
-sys/dev/ic/ciss.c				1.15
-sys/dev/ic/tcic2.c				1.31
-sys/dev/isa/if_ntwoc_isa.c			1.18
-sys/dev/isa/isadma.c				1.59
-sys/dev/pci/if_sk.c				1.57
-sys/dev/pcmcia/if_cnw.c				1.46
-sys/dev/usb/ulpt.c				1.82
-
-	printf format fixes.
-	[dholland, ticket #874]
-
-lib/libc/sys/intro.2				1.53, 1.54
-
-	Mention, along with the behavior of succeeding system calls, the
-	normal behavior of succeeding library functions regarding errno.
-	(That is, they may leave arbitrary nonzero values in errno.)
-	[dholland, ticket #867]
-
-lib/libc/stdlib/strtol.3			1.25, 1.26
-lib/libc/stdlib/strtoul.3			1.22, 1.23
-
-	Clarify the description of the errno behavior, based on the recent
-	thread in tech-userlevel.
-	[dholland, ticket #868]
-
-sys/arch/pmax/pmax/machdep.c			1.233
-
-	Fix an #ifdef botch in rev 1.214 that causes
-	[ Kernel symbol table invalid! ] message at boot,
-	which means no ksyms(4) support even on GENERIC kernel.
-	[tsutsui, ticket #869]
-
-lib/libc/sys/intro.2				1.50 via patch
-
-	PR/40060 - Bug Hunting -- grammar fix
-	[dholland, ticket #872]
-
-sbin/wsconsctl/wsconsctl.8			1.26
-
-	PR/40059 - Bug Hunting -- add Xref to wscons.conf(5)
-	[dholland, ticket #873]
-
-external/bsd/pkg_install/dist/info/perform.c	pkg_install-20090724
-external/bsd/pkg_install/dist/lib/license.c	pkg_install-20090724
-external/bsd/pkg_install/dist/lib/pkg_install.conf.5.in pkg_install-20090724
-external/bsd/pkg_install/dist/lib/version.h	pkg_install-20090724
-
-	Import pkg_install-20070724:
-	- license handling: accept upper case letters. Keep license checks
-	 case-sensitive as done in the older pkgsrc logic. Document this.
-	- pkg_info:
-	 - fix handling of non-packages, that are valid archives
-	 - invert order of pkg_info -r to better match the expectations of
-	   make update.
-	[joerg, ticket #877]
-
-dist/bind/bin/named/update.c			patch
-
-	Fix CVE-2009-0696.
-	[christos, ticket #881]
-
-sys/conf/copyright				1.6
-
-	Update copyright notice for 2009.
-	[rmind, ticket #882]
-
-distrib/notes/common/main			patch
-
-	Update for 5.0.1.
-	[snj]
-
-gnu/usr.bin/groff/tmac/mdoc.local		patch
-sys/sys/param.h					patch
-
-	Welcome to 5.0.1!
-	[snj]
-
Index: /trunk/src/doc/CHANGES-5.1
===================================================================
--- /trunk/src/doc/CHANGES-5.1	(revision 151)
+++ /trunk/src/doc/CHANGES-5.1	(revision 152)
@@ -1,3 +1,3 @@
-# $NetBSD: CHANGES-5.1,v 1.1.2.133 2009/11/01 16:13:41 bouyer Exp $
+# $NetBSD: CHANGES-5.1,v 1.1.6.2 2011/05/20 08:11:16 matt Exp $
 
 A complete list of changes from the NetBSD 5.0 release to the NetBSD 5.1
@@ -2222,10 +2222,10 @@
 	[christos, ticket #915]
 
-sys/arch/macppc/dev/pbms.c			1.8
+sys/arch/macppc/dev/pbms.c			1.8, patch
 
 	- Use device_private() (led to immediate crash during attach)
 	- While there, fix the aspect ratio of the trackpad on the
 	geyser2 model
-	[aymeric, ticket #916]
+	[aymeric/tsutsui, ticket #916]
 
 sbin/tunefs/tunefs.c				1.40
@@ -14616,2 +14616,2931 @@
 	[ahoka, ticket #1111]
 
+sys/kern/uipc_usrreq.c				1.127
+
+	In uipc_usrreq(PRU_ACCEPT), grab the unp_streamlock before
+	unp_setpeerlocks().  This fixes a race where, for a short period
+	of time, so->so_lock and so2->so_lock are not sync. This makes
+	solocked2() and solocked() unreliable and cause DIAGNOSTIC kernel
+	panics. This also fixes a possible panic in unp_setaddr() which
+	expects the socket locked.  Should fix kern/38968.
+	[bouyer, ticket #932]
+
+dist/pppd/chat/chat.8				1.6
+usr.sbin/acpitools/amldb/amldb.8		1.4
+
+	Fix markup and backslashes.
+	[joerg, ticket #1122]
+
+sys/dev/pci/if_age.c				1.29, 1.30, 1.34
+sys/dev/pci/if_agereg.h				1.3
+sys/dev/pci/if_ale.c				1.9
+
+	age(4):
+	- Support flow control.
+	- Add TWSI registers.
+	- Don't access VPD even if hardware advertised the capability.
+	  It seems that some revisions of the controllers hang while
+	  accessing the VPD. Because VPD access routine is now unused,
+	  nuke it.
+	- Let TWSI reload EEPROM if VPD capability is detected. Reloading
+	  the EEPROM will also set the Ethernet address, so age(4) now
+	  reads AGE_PAR0 and AGE_PAR1 register to get the Ethernet address.
+	  This removes removes a lot of hacks and enhance readability a lot.
+	- Double PHY reset timeout as it takes more time to take the PHY out
+	  of power-saving state.
+	- Explicitly check power-saving state by checking undocumented PHY
+	  registers. If link is not up, poke undocumented registers to take
+	  PHY out of power-saving state. This is the same thing done by the
+	  Linux driver.
+	- Don't rely on auto-clearing feature of master reset bit, just wait
+	  1ms and check idle status of MAC.
+
+	age(4) and ale(4):
+	Use m_pullup to handle defragmentation.
+	Reinject mbuf into TX queue when it couldn't be loaded.
+	[cegger, ticket #1124]
+
+include/link_elf.h				1.8
+
+	typedef struct link_map as Link_map (for solaris-compat)
+	[pooka, ticket #1125]
+
+usr.sbin/postinstall/postinstall		1.106
+
+	/usr/X11R7/lib/X11/xkb/symbols/pc used to be a directory, but
+	changed to a file on 2009-06-12.  Fixing this requires removing
+	the directory (which we can do) and re-extracting the xbase set
+	(which we can't do), or at least adding that one file (which we
+	may be able to do if X11SRCDIR is available).
+	[apb, ticket #1126]
+
+sys/kern/vfs_subr.c				1.386
+sys/ufs/ufs/ufs_ihash.c				1.28
+
+	getcleanvnode(): don't vclean() the vnode if it has gained another
+	  reference while we were getting the v_interlock.
+	vget(): attempt prevent it from returning a clean vnode:
+	  if the vnode is being inactivated (by vrelel()), wait for
+	  vrelel() to complete (or return EBUSY if we can't wait), and
+	  return ENOENT if the vnode has been vclean'ed by vrelel()
+	Fixes kern/41147 in a better way, and hopefully fixes other related
+	race conditions.
+	[bouyer, ticket #1129]
+
+usr.bin/gzip/gzip.c				1.95-1.97
+usr.bin/gzip/unbzip2.c				1.12
+usr.bin/gzip/unpack.c				1.1
+
+	- Fix support for multi-section bzip2 files, as created by pbzip2.
+	- Add "pack" uncompression support.
+	- Avoid an overflow in suffix handling.
+	- Bump version number.
+	[mrg, ticket #1131]
+
+sys/nfs/nfs_socket.c				1.182
+
+	Handle EWOULDBLOCK the same way as EPIPE. It seems the TCP
+	socket layer can return EWOULDBLOCK on some occasion when
+	the connection is broken.
+	[bouyer, ticket #1128]
+
+sys/arch/amd64/include/Makefile.inc		1.1
+
+	Build kernel modules with -mno-red-zone like kernel is built.
+	This fixes frequent panics in amd64 zfs module, plus other
+	reported problems.
+	[cube, ticket #1140]
+
+external/mit/xorg/lib/dri/i915/Makefile		1.4
+external/mit/xorg/lib/dri/i965/Makefile		1.5
+
+	- Link in -ldrm_intel on i915 and i965 drivers.
+	- Build i915 driver with -DI915 -DDRM_VBLANK_FLIP=DRM_VBLANK_FLIP.
+	[mrg, ticket #1132]
+
+sys/dev/ic/hme.c				1.84 via patch
+
+	Use hme_init() to provide a non-NULL ifp->if_init.
+	[jakllsch, ticket #1133]
+
+sys/netinet6/ip6_forward.c			1.67
+
+	Clear cksum flags before any further processing like
+	ip_forward does. Many drivers set the UDP/TCP v4 flags even
+	for v6 traffic and if the packet is encapsulated with gif,
+	the IPv6 header would get corrupted by ip_output.
+	[joerg, ticket #1139]
+
+sys/dev/rnd.c					1.77
+
+	rnd_sample_allocate_isr: pass correct flag to pool_get().
+	Addresses PR/39325.
+	[rmind, ticket #1134]
+
+sys/arch/alpha/conf/Makefile.alpha		1.82
+
+	Loading the kernel at 0xfffffc0000300000 doesn't work on some
+        configurations of ES40.  Change the kernel text to 0xfffffc0000430000
+        (which is where Tru64 has its kernel).
+	[mhitch, ticket #1135]
+
+distrib/alpha/instkernel/cd-hd-tape/Makefile	1.20
+
+	The tarfs image in cdhdinstall used to get padded out to an 18KB
+        boundary (the size of the read used to read it) with the
+        alpha-specific image creation.  This got lost when moved to using
+        common routines, so that burning the cdhdinstall image onto a CDROM
+        resulted in a failure to read the last block of the tarfs image.
+        Use the provided option to have the image padded out to the full
+        image size.
+	[mhitch, ticket #1136]
+
+sys/arch/alpha/alpha/pmap.c			1.250
+
+	The tlb shootdown IPI can interrupt the pool_cache_get() in places
+	that can cause a deadlock or pool cache corruption.  Take the
+	shootdown job queue mutex before calling pool_cache_get(), which
+	will block the IPI interrupts and seems to fix the remaining tlb
+	shootdown deadlocks and pool cache corruption I've been seeing.
+	Should address both PR port-alpha/38335 and PR port-alpha/42174.
+	[mhitch, ticket #1137]
+
+sys/arch/sparc/sparc/pmap.c			1.336
+
+	Avoid unused variable warnings on sun4c-only kernels.
+	Fixes PR#42249. 
+	[jdc, ticket #1138]
+
+sys/netkey/keysock.c				1.53
+
+	Replace splsoftnet() with proper mutexes.  Fixes PR kren/40940.
+	[mlelstv, ticket #1142]
+
+sys/dev/pckbport/wskbdmap_mfii.c		1.18
+
+	Add support for Swiss german kezboard to wskbd.
+	[mbalmer, ticket #1144]
+
+etc/rc.d/named					1.20
+
+	PR/41273: Martin Mersberger: missing '/' in /etc/rc.d/named in
+	section named_migrate
+	[dholland, ticket #1146]
+
+sys/net/if_arcsubr.c				1.61
+sys/net/if_ethersubr.c				1.173
+sys/net/if_fddisubr.c				1.78
+sys/net/if_tokensubr.c				1.58 via patch
+sys/netinet/if_arp.c				1.149
+
+	ar_tha() can return NULL; treat this as an error.
+	[christos, ticket #1156]
+
+sys/kern/vfs_subr.c				1.387
+
+	Fix getcleanvnode() in previous: in the if (vp->v_usecount != 0)
+	case we didn't bump the refcount, so don't decrease it through
+	vrelel().  call mutex_exit() on v_interlock directly instead.
+	[bouyer, ticket #1152]
+
+external/bsd/dhcpcd/dist/compat			patch
+external/bsd/dhcpcd/dist/defs.h			patch
+external/bsd/dhcpcd/dist/arp.c			patch
+external/bsd/dhcpcd/dist/bind.c			patch
+external/bsd/dhcpcd/dist/common.c		patch
+external/bsd/dhcpcd/dist/common.h		patch
+external/bsd/dhcpcd/dist/config.h		patch
+external/bsd/dhcpcd/dist/configure.c		patch
+external/bsd/dhcpcd/dist/control.c		patch
+external/bsd/dhcpcd/dist/dhcp.c			patch
+external/bsd/dhcpcd/dist/dhcp.h			patch
+external/bsd/dhcpcd/dist/dhcpcd-run-hooks.8.in	patch
+external/bsd/dhcpcd/dist/dhcpcd-run-hooks.in	patch
+external/bsd/dhcpcd/dist/dhcpcd.8.in		patch
+external/bsd/dhcpcd/dist/dhcpcd.c		patch
+external/bsd/dhcpcd/dist/dhcpcd.conf		patch
+external/bsd/dhcpcd/dist/dhcpcd.conf.5.in	patch
+external/bsd/dhcpcd/dist/duid.c			patch
+external/bsd/dhcpcd/dist/if-bsd.c		patch
+external/bsd/dhcpcd/dist/if-options.c		patch
+external/bsd/dhcpcd/dist/if-options.h		patch
+external/bsd/dhcpcd/dist/if-pref.c		patch
+external/bsd/dhcpcd/dist/ipv4ll.c		patch
+external/bsd/dhcpcd/dist/net.c			patch
+external/bsd/dhcpcd/dist/net.h			patch
+external/bsd/dhcpcd/dist/signals.c		patch
+external/bsd/dhcpcd/dist/dhcpcd-hooks/10-mtu	patch
+external/bsd/dhcpcd/dist/dhcpcd-hooks/30-hostname patch
+external/bsd/dhcpcd/dist/dhcpcd-hooks/50-ntp.conf patch
+external/bsd/dhcpcd/sbin/dhcpcd/Makefile	patch
+
+	Update dhcpcd to 5.1.3.  Changes:
+	* Fixed correct dstaddr detection at startup on PtP links.
+	* Default to requesting an MTU.
+	* Fix crash on MIPS
+	* Save and restore interface MTU when changing
+	* IP whitelist
+	* Ensure that the lease and pidfile directories exist at startup
+	* Fix -f path/to/config
+	* -e, --env var=value for profile specific env vars
+	* Many issues resolved when running in test mode
+	* Don't print a (null) string when there is no NAK message
+	* Only allow hardware families we know by default (over-ridable)
+	* Fix persistent and timeout 0 options
+	* Fix parsing of escape code sequencies
+	* Don't bring up interfaces brought down when handling new interfaces
+	* Allow un-encapsulated vendor option
+	* Don't null terminate gratuitously when handling quotes.
+	* Fix various typos and grammatical errors. Thanks to Stephen Borrill.
+	* ClientID is now reported when interface starts
+	* -w, --wait forces dhcpcd to wait until an interface gets a lease ar
+	  times out
+	* 50-ypbind hook added for BSD style NIS
+	* Ensure DHCP socket is open when sending a DECLINE
+	* Uses new hwaddr if existing interface is downed and then changed.
+	* No longer works on firewire interfaces by default.
+	* waitip is enabled when running on a single interface.
+	* Classless Static Routes are now enabled by default in dhcpcd.conf
+	  instead of being always being requested.
+	[roy, ticket #1099]
+
+sys/dev/usb/uhidev.c				1.44
+sys/dev/usb/ums.c				1.75
+sys/dev/usb/usbdevs				1.536
+
+	Fix kern/41737. Add quirks to make MS Wireless Laser Mouse 6000 work.
+	[rafal, ticket #1162]
+
+sbin/newfs_msdos/newfs_msdos.c			1.30
+
+	Make fs size detection get proper size rather than disk size.
+	Without this, newfs_msdos(8) assumes the target fs size is
+	whole disk size, so newfs_msdos(8) will fail or create wrong fs.
+	[tsutsui, ticket #1163]
+
+sys/kern/tty_subr.c				1.38
+
+	Fix clrbits() so that it doesn't mask no bits out of the byte after
+	the range (when the last bit to be cleared is the msb of a byte).
+	Fixes PR/42312.
+	[dsl, ticket #1141]
+
+doc/CHANGES					1.320 via patch
+share/man/man4/ums.4				1.9
+sys/dev/usb/ums.c				1.77
+
+	Add support for USB HID devices that report absolute coordinates
+	instead of relative movement data, e.g. touchpanels.  Please
+	note that calibration must be done outside the wscons(4) driver
+	for now.
+	[mbalmer, ticket #1164]
+
+sys/arch/i386/stand/lib/pcio.c			1.26
+
+	Have the boot countdown on i386 display "starting in N seconds."
+	instead of "starting in N" and eliminate a use of sprintf.
+	[mbalmer, ticket #1143]
+
+dist/nvi/common/exf.c				1.4
+
+	fix format string bug, filename may contain % character, don't use it
+	as format string.
+	[tnozaki, ticket #1145]
+
+sys/compat/linux/common/linux_socket.c		1.105, 1.106
+sys/compat/linux/common/linux_sockio.h		1.17
+sys/compat/linux32/common/linux32_socket.c	1.11, 1.12
+sys/compat/linux32/common/linux32_sockio.h	1.3
+
+	Provide SIOCGIFNAME.
+	[joerg, ticket #1147]
+
+sys/net/if.c					1.241
+
+	Simplify ifreq_setaddr:
+	- Drop the INET6 block. The commands are never given to this function
+	  and truncating the sockaddr is arguably not the desired result anyway.
+	- Clear the address before copying. This fixes SIOCGIFNETMASK and
+	  possible other ioctls for users that don't check sa_len. This
+	  includes COMPAT_43 and Linux emulation.
+
+	[joerg, ticket #1148]
+
+share/man/man4/man4.sparc64/lom.4		1.3
+sys/arch/sparc64/dev/lom.c			1.2, 1.3
+
+	Merge changes between revision 1.16 and 1.19 of OpenBSD with
+	shutdownhook_establish(9) to pmf(9) conversion:
+	- LOMlite seems to get wedged from time to time; add some code to
+	  unwedge it.
+	- Make sure we don't insert and entry into the list of pending
+	  commends twice.
+	- Establish a shutdown hook to disable the watchdog timer to prevent
+	  watchdog triggers after the kernel has been halted.
+	- Handle LOMlite2 in an interrupt-driven way; avoids using delay(9)
+	  once the machine is up and running.
+
+	Add support for monitoring Fault LED and Alarms status.
+	[nakayama, ticket #1151]
+
+sys/fs/puffs/puffs_vnops.c			1.139
+
+	Send VOP_ABORTOP() as a FAF -- we don't care about the return value.
+	[pooka, ticket #1153]
+
+sys/fs/puffs/puffs_vnops.c			1.140
+
+	Send VOP_ABORTOP() in case attempting cross-dev rename, part of
+	PR kern/42210.  Also, fix a memory management error in said case.
+	[pooka, ticket #1154]
+
+lib/libpuffs/creds.c				1.15
+
+	In getgroups(), copy only up to the number of supplementary groups
+	that actually exist.
+	[pooka, ticket #1155]
+
+sbin/savecore/savecore.c			1.81
+
+	Instead of exiting with an obscure error message if -N /kernelname isn't
+	specified, blithely assume the kernel will consume around 20 megs.
+	[dogcow, ticket #1157]
+
+dist/nvi/ex/ex_cscope.c				1.5
+dist/nvi/ex/ex_tag.c				1.7
+
+	don't use pathname directly as msgq()'s first argument of format string.
+	[tnozaki, ticket #1159]
+
+sys/kern/vfs_subr.c				1.392
+
+	Previous caused a deadlock with layered FS: the vrele thread can
+	sleep on the vnode lock, while vget is sleeping on the
+	VI_INACTNOW flag (or the vget caller is looping on vget returning
+	failure because of the VI_INACTNOW flag). With layered FSes,
+	the upper and lower vnodes share the same lock, so the vget()
+	caller above can be already holding the vnode lock.
+	Fix by dropping VI_INACTNOW before sleeping on the vnode lock in
+	vrelel(), and check the ref count again once we have the lock.
+	If the vnode has more than one reference, don't VOP_INACTIVE it.
+	Fix PR kern/42318 and PR kern/42377
+	[bouyer, ticket #1171]
+
+sys/arch/amd64/amd64/machdep.c
+sys/arch/amd64/include/vmparam.h
+
+	On amd64, add a third free list distinct from the default free
+	list, holding RAM between 16Mb and 4Gb. This helps preventing
+	bus_dma(9) memory allocation failures for 32bit DMA on
+	large-memory machines.
+	[bouyer, ticket #1158]
+
+xsrc/external/mit/xf86-video-radeonhd/include/config.h
+
+	Regenerate xf86-video-radeonhd's config.h.
+	[rafal, ticket #1160]
+
+sys/arch/i386/pnpbios/fdc_pnpbios.c		1.15
+
+	Fix attaching fdc@pnpbios.  Closes PR#42374.
+	[cube, ticket #1161]
+
+sys/arch/amiga/amiga/machdep.c			1.222
+
+	Correct the IPL_VM interrupt level mask.
+	[mhitch, ticket #1166]
+
+xsrc/external/mit/xf86-video-ati/include/config.h
+
+	Regenerate xf86-video-ati's config.h.
+	[rafal, ticket #1176]
+
+usr.sbin/rpc.lockd/lockd_lock.c			1.31
+
+	Allow comparing v2 and v3 filehandles.
+	[tron, ticket #1174]
+
+external/mit/xorg/lib/pixman/Makefile		1.10
+xsrc/external/mit/pixman/config.h.in		patch
+xsrc/external/mit/pixman/configure		patch
+xsrc/external/mit/pixman/configure.ac 		patch
+xsrc/external/mit/pixman/pixman/Makefile.am	patch
+xsrc/external/mit/pixman/pixman/Makefile.in 	patch
+xsrc/external/mit/pixman/pixman/Makefile.win32	patch
+xsrc/external/mit/pixman/pixman/pixman-access.c	patch
+xsrc/external/mit/pixman/pixman/pixman-accessor.h patch
+xsrc/external/mit/pixman/pixman/pixman-arm-neon.c patch
+xsrc/external/mit/pixman/pixman/pixman-arm-simd.c patch
+xsrc/external/mit/pixman/pixman/pixman-bits-image.c patch
+xsrc/external/mit/pixman/pixman/pixman-combine.c.template patch
+xsrc/external/mit/pixman/pixman/pixman-combine.h.template patch
+xsrc/external/mit/pixman/pixman/pixman-combine32.c patch
+xsrc/external/mit/pixman/pixman/pixman-combine32.h patch
+xsrc/external/mit/pixman/pixman/pixman-combine64.c patch
+xsrc/external/mit/pixman/pixman/pixman-combine64.h patch
+xsrc/external/mit/pixman/pixman/pixman-conical-gradient.c patch
+xsrc/external/mit/pixman/pixman/pixman-cpu.c 	patch
+xsrc/external/mit/pixman/pixman/pixman-edge.c	patch
+xsrc/external/mit/pixman/pixman/pixman-fast-path.c patch
+xsrc/external/mit/pixman/pixman/pixman-general.c patch
+xsrc/external/mit/pixman/pixman/pixman-gradient-walker.c patch
+xsrc/external/mit/pixman/pixman/pixman-image.c	patch
+xsrc/external/mit/pixman/pixman/pixman-implementation.c patch
+xsrc/external/mit/pixman/pixman/pixman-linear-gradient.c patch
+xsrc/external/mit/pixman/pixman/pixman-mmx.c 	patch
+xsrc/external/mit/pixman/pixman/pixman-private.h patch
+xsrc/external/mit/pixman/pixman/pixman-radial-gradient.c patch
+xsrc/external/mit/pixman/pixman/pixman-region.c	patch
+xsrc/external/mit/pixman/pixman/pixman-solid-fill.c patch
+xsrc/external/mit/pixman/pixman/pixman-sse2.c	patch
+xsrc/external/mit/pixman/pixman/pixman-trap.c 	patch
+xsrc/external/mit/pixman/pixman/pixman-utils.c	patch
+xsrc/external/mit/pixman/pixman/pixman-version.h patch
+xsrc/external/mit/pixman/pixman/pixman-vmx.c	patch
+xsrc/external/mit/pixman/pixman/pixman-x86-mmx-emulation.h patch
+xsrc/external/mit/pixman/pixman/pixman.c 	patch
+xsrc/external/mit/pixman/pixman/pixman.h	patch
+xsrc/external/mit/pixman/test/Makefile.am 	patch
+xsrc/external/mit/pixman/test/Makefile.in	patch
+xsrc/external/mit/pixman/test/blitters-test.c	patch
+xsrc/external/mit/pixman/test/composite-test.c 	patch
+xsrc/external/mit/pixman/test/fetch-test.c	patch
+xsrc/external/mit/pixman/test/window-test.c	patch
+xsrc/external/mit/include/config.h 		patch
+
+	- Disable using SSE2 for i386.
+	- Update pixman to 0.16.2.
+	[mrg, ticket #1177]
+
+sys/dev/sdmmc/ld_sdmmc.c			1.4
+sys/dev/sdmmc/sdmmc_mem.c			1.3
+sys/dev/sdmmc/sdmmcvar.h			1.2
+
+	Always treat sector size as 512 bytes.
+	[nonaka, ticket #1167]
+
+sys/arch/arm/arm32/pmap.c			1.203
+
+	Work-around a possible process exit corner case which can
+	leave stale data in the cache after a context-switch.
+	Addresses kern/41058.
+	[scw, ticket #1168]
+
+libexec/ld.elf_so/rtld.c			1.127
+
+	If the environment is corrupt, die. From FreeBSD.
+	[tron, ticket #1179]
+
+sys/net/if_tap.c				1.60
+
+	Fix a potential leak on tap device close; purging the send
+	queue did not actually release the dequeued mbufs.
+	[plunky, ticket #1173]
+
+dist/bind/CHANGES				patch
+dist/bind/COPYRIGHT				patch
+dist/bind/FAQ					patch
+dist/bind/FAQ.xml				patch
+dist/bind/KNOWN-DEFECTS				deleted
+dist/bind/Makefile.in				patch
+dist/bind/README				patch
+dist/bind/README.idnkit				patch
+dist/bind/acconfig.h				patch
+dist/bind/bind.keys				new file
+dist/bind/config.guess				patch
+dist/bind/config.h.in				patch
+dist/bind/configure				patch
+dist/bind/configure.in				patch
+dist/bind/isc-config.sh.1			new file
+dist/bind/isc-config.sh.docbook			new file
+dist/bind/isc-config.sh.html			new file
+dist/bind/libtool.m4				patch
+dist/bind/ltmain.sh				patch
+dist/bind/version				patch
+dist/bind/bin/check/check-tool.c		patch
+dist/bind/bin/check/named-checkconf.8		patch
+dist/bind/bin/check/named-checkconf.c		patch
+dist/bind/bin/check/named-checkconf.html	patch
+dist/bind/bin/check/named-checkzone.8		patch
+dist/bind/bin/check/named-checkzone.c		patch
+dist/bind/bin/check/named-checkzone.docbook	patch
+dist/bind/bin/check/named-checkzone.html	patch
+dist/bind/bin/dig/dig.1				patch
+dist/bind/bin/dig/dig.c				patch
+dist/bind/bin/dig/dig.docbook			patch
+dist/bind/bin/dig/dig.html			patch
+dist/bind/bin/dig/dighost.c			patch
+dist/bind/bin/dig/host.1			patch
+dist/bind/bin/dig/host.c			patch
+dist/bind/bin/dig/host.docbook			patch
+dist/bind/bin/dig/host.html			patch
+dist/bind/bin/dig/nslookup.1			patch
+dist/bind/bin/dig/nslookup.c			patch
+dist/bind/bin/dig/nslookup.html			patch
+dist/bind/bin/dig/include/dig/dig.h		patch
+dist/bind/bin/dnssec/dnssec-keygen.8		patch
+dist/bind/bin/dnssec/dnssec-keygen.docbook	patch
+dist/bind/bin/dnssec/dnssec-keygen.html		patch
+dist/bind/bin/dnssec/dnssec-signzone.8		patch
+dist/bind/bin/dnssec/dnssec-signzone.c		patch
+dist/bind/bin/dnssec/dnssec-signzone.docbook	patch
+dist/bind/bin/dnssec/dnssec-signzone.html	patch
+dist/bind/bin/named/bind9.xsl			patch
+dist/bind/bin/named/bind9.xsl.h			patch
+dist/bind/bin/named/client.c			patch
+dist/bind/bin/named/config.c			patch
+dist/bind/bin/named/control.c			patch
+dist/bind/bin/named/controlconf.c		patch
+dist/bind/bin/named/convertxsl.pl		patch
+dist/bind/bin/named/interfacemgr.c		patch
+dist/bind/bin/named/log.c			patch
+dist/bind/bin/named/lwresd.8			patch
+dist/bind/bin/named/lwresd.c			patch
+dist/bind/bin/named/lwresd.docbook		patch
+dist/bind/bin/named/lwresd.html			patch
+dist/bind/bin/named/main.c			patch
+dist/bind/bin/named/named.8			patch
+dist/bind/bin/named/named.conf.5		patch
+dist/bind/bin/named/named.conf.docbook		patch
+dist/bind/bin/named/named.conf.html		patch
+dist/bind/bin/named/named.docbook		patch
+dist/bind/bin/named/named.html			patch
+dist/bind/bin/named/query.c			patch
+dist/bind/bin/named/server.c			patch
+dist/bind/bin/named/statschannel.c		patch
+dist/bind/bin/named/update.c			patch
+dist/bind/bin/named/xfrout.c			patch
+dist/bind/bin/named/zoneconf.c			patch
+dist/bind/bin/named/include/named/client.h	patch
+dist/bind/bin/named/include/named/globals.h	patch
+dist/bind/bin/named/include/named/log.h		patch
+dist/bind/bin/named/include/named/lwdclient.h	patch
+dist/bind/bin/named/include/named/notify.h	patch
+dist/bind/bin/named/include/named/server.h	patch
+dist/bind/bin/named/unix/os.c			patch
+dist/bind/bin/named/unix/include/named/os.h	patch
+dist/bind/bin/named/win32/ntservice.c		patch
+dist/bind/bin/named/win32/os.c			patch
+dist/bind/bin/named/win32/include/named/os.h	patch
+dist/bind/bin/nsupdate/Makefile.in		patch
+dist/bind/bin/nsupdate/nsupdate.1		new file
+dist/bind/bin/nsupdate/nsupdate.8		deleted
+dist/bind/bin/nsupdate/nsupdate.c		patch
+dist/bind/bin/nsupdate/nsupdate.docbook		patch
+dist/bind/bin/nsupdate/nsupdate.html		patch
+dist/bind/bin/rndc/rndc-confgen.8		patch
+dist/bind/bin/rndc/rndc-confgen.c		patch
+dist/bind/bin/rndc/rndc-confgen.html		patch
+dist/bind/bin/rndc/rndc.8			patch
+dist/bind/bin/rndc/rndc.c			patch
+dist/bind/bin/rndc/rndc.conf.5			patch
+dist/bind/bin/rndc/rndc.conf.html		patch
+dist/bind/bin/rndc/rndc.html			patch
+dist/bind/bin/rndc/include/rndc/os.h		patch
+dist/bind/bin/tests/cfg_test.c			patch
+dist/bind/bin/tests/sig0_test.c			patch
+dist/bind/bin/tests/sock_test.c			patch
+dist/bind/bin/tests/db/t_db.c			patch
+dist/bind/bin/tests/dst/Makefile.in		patch
+dist/bind/bin/tests/dst/dst_test.c		patch
+dist/bind/bin/tests/dst/t_dst.c			patch
+dist/bind/bin/tests/master/t_master.c		patch
+dist/bind/bin/tests/mem/t_mem.c			patch
+dist/bind/bin/tests/names/t_names.c		patch
+dist/bind/bin/tests/rbt/t_rbt.c			patch
+dist/bind/bin/tests/system/ifconfig.sh		patch
+dist/bind/bin/tests/system/acl/tests.sh		patch
+dist/bind/bin/tests/system/glue/ns1/named.conf	patch
+dist/bind/bin/tests/system/rrsetorder/tests.sh	patch
+dist/bind/bin/tests/system/tkey/ns1/named.conf.in patch
+dist/bind/bin/tests/tasks/t_tasks.c		patch
+dist/bind/bin/tests/timers/t_timers.c		patch
+dist/bind/bin/win32/BINDInstall/BINDInstall.rc	patch
+dist/bind/bin/win32/BINDInstall/BINDInstallDlg.cpp patch
+dist/bind/bin/win32/BINDInstall/BINDInstallDlg.h patch
+dist/bind/bin/win32/BINDInstall/VersionInfo.cpp patch
+dist/bind/bin/win32/BINDInstall/resource.h	patch
+dist/bind/contrib/dlz/config.dlz.in		patch
+dist/bind/contrib/dlz/drivers/dlz_bdb_driver.c	patch
+dist/bind/contrib/dlz/drivers/dlz_mysql_driver.c patch
+dist/bind/contrib/idn/idnkit-1.0-src/tools/idnconv/selectiveencode.h patch
+dist/bind/contrib/queryperf/utils/gen-data-queryperf.py patch
+dist/bind/contrib/sdb/pgsql/zonetodb.c		patch
+dist/bind/doc/arm/Bv9ARM-book.xml		patch
+dist/bind/doc/arm/Bv9ARM.ch01.html		patch
+dist/bind/doc/arm/Bv9ARM.ch02.html		patch
+dist/bind/doc/arm/Bv9ARM.ch03.html		patch
+dist/bind/doc/arm/Bv9ARM.ch04.html		patch
+dist/bind/doc/arm/Bv9ARM.ch05.html		patch
+dist/bind/doc/arm/Bv9ARM.ch06.html		patch
+dist/bind/doc/arm/Bv9ARM.ch07.html		patch
+dist/bind/doc/arm/Bv9ARM.ch08.html		patch
+dist/bind/doc/arm/Bv9ARM.ch09.html		patch
+dist/bind/doc/arm/Bv9ARM.ch10.html		patch
+dist/bind/doc/arm/Bv9ARM.html			patch
+dist/bind/doc/arm/Bv9ARM.pdf			patch
+dist/bind/doc/arm/Makefile.in			patch
+dist/bind/doc/arm/man.dig.html			patch
+dist/bind/doc/arm/man.dnssec-keygen.html	patch
+dist/bind/doc/arm/man.dnssec-signzone.html	patch
+dist/bind/doc/arm/man.host.html			patch
+dist/bind/doc/arm/man.named-checkconf.html	patch
+dist/bind/doc/arm/man.named-checkzone.html	patch
+dist/bind/doc/arm/man.named.html		patch
+dist/bind/doc/arm/man.rndc-confgen.html		patch
+dist/bind/doc/arm/man.rndc.conf.html		patch
+dist/bind/doc/arm/man.rndc.html			patch
+dist/bind/doc/draft/draft-ietf-dnsext-dhcid-rr-12.txt deleted
+dist/bind/doc/misc/Makefile.in			patch
+dist/bind/doc/misc/options			patch
+dist/bind/doc/rfc/index				patch
+dist/bind/doc/rfc/rfc4509.txt			new file
+dist/bind/doc/rfc/rfc4635.txt			new file
+dist/bind/doc/rfc/rfc4648.txt			new file
+dist/bind/doc/rfc/rfc4701.txt			new file
+dist/bind/doc/rfc/rfc4892.txt			new file
+dist/bind/doc/rfc/rfc5155.txt			new file
+dist/bind/doc/rfc/rfc5205.txt			new file
+dist/bind/doc/rfc/rfc5507.txt			new file
+dist/bind/doc/xsl/copyright.xsl			patch
+dist/bind/lib/bind/api				patch
+dist/bind/lib/bind/configure			patch
+dist/bind/lib/bind/configure.in			patch
+dist/bind/lib/bind/dst/dst_api.c		patch
+dist/bind/lib/bind/dst/hmac_link.c		patch
+dist/bind/lib/bind/dst/support.c		patch
+dist/bind/lib/bind/include/isc/assertions.h	patch
+dist/bind/lib/bind/inet/inet_net_pton.c		patch
+dist/bind/lib/bind/irs/dns_ho.c			patch
+dist/bind/lib/bind/isc/assertions.c		patch
+dist/bind/lib/bind/isc/bitncmp.c		patch
+dist/bind/lib/bind9/api				patch
+dist/bind/lib/bind9/check.c			patch
+dist/bind/lib/bind9/include/bind9/getaddresses.h patch
+dist/bind/lib/dns/acl.c				patch
+dist/bind/lib/dns/adb.c				patch
+dist/bind/lib/dns/api				patch
+dist/bind/lib/dns/cache.c			patch
+dist/bind/lib/dns/db.c				patch
+dist/bind/lib/dns/diff.c			patch
+dist/bind/lib/dns/dispatch.c			patch
+dist/bind/lib/dns/dlz.c				patch
+dist/bind/lib/dns/dnssec.c			patch
+dist/bind/lib/dns/dst_api.c			patch
+dist/bind/lib/dns/dst_parse.c			patch
+dist/bind/lib/dns/gen-unix.h			patch
+dist/bind/lib/dns/gen-win32.h			patch
+dist/bind/lib/dns/gssapi_link.c			patch
+dist/bind/lib/dns/iptable.c			patch
+dist/bind/lib/dns/journal.c			patch
+dist/bind/lib/dns/master.c			patch
+dist/bind/lib/dns/masterdump.c			patch
+dist/bind/lib/dns/message.c			patch
+dist/bind/lib/dns/nsec.c			patch
+dist/bind/lib/dns/openssl_link.c		patch
+dist/bind/lib/dns/openssldsa_link.c		patch
+dist/bind/lib/dns/opensslrsa_link.c		patch
+dist/bind/lib/dns/rbt.c				patch
+dist/bind/lib/dns/rbtdb.c			patch
+dist/bind/lib/dns/rdata.c			patch
+dist/bind/lib/dns/rdataset.c			patch
+dist/bind/lib/dns/rdataslab.c			patch
+dist/bind/lib/dns/request.c			patch
+dist/bind/lib/dns/resolver.c			patch
+dist/bind/lib/dns/sdb.c				patch
+dist/bind/lib/dns/sdlz.c			patch
+dist/bind/lib/dns/spnego.c			patch
+dist/bind/lib/dns/stats.c			patch
+dist/bind/lib/dns/time.c			patch
+dist/bind/lib/dns/tsig.c			patch
+dist/bind/lib/dns/validator.c			patch
+dist/bind/lib/dns/view.c			patch
+dist/bind/lib/dns/xfrin.c			patch
+dist/bind/lib/dns/zone.c			patch
+dist/bind/lib/dns/include/dns/Makefile.in	patch
+dist/bind/lib/dns/include/dns/acl.h		patch
+dist/bind/lib/dns/include/dns/compress.h	patch
+dist/bind/lib/dns/include/dns/db.h		patch
+dist/bind/lib/dns/include/dns/diff.h		patch
+dist/bind/lib/dns/include/dns/dispatch.h	patch
+dist/bind/lib/dns/include/dns/dlz.h		patch
+dist/bind/lib/dns/include/dns/events.h		patch
+dist/bind/lib/dns/include/dns/journal.h		patch
+dist/bind/lib/dns/include/dns/log.h		patch
+dist/bind/lib/dns/include/dns/lookup.h		patch
+dist/bind/lib/dns/include/dns/message.h		patch
+dist/bind/lib/dns/include/dns/name.h		patch
+dist/bind/lib/dns/include/dns/peer.h		patch
+dist/bind/lib/dns/include/dns/rbt.h		patch
+dist/bind/lib/dns/include/dns/rdata.h		patch
+dist/bind/lib/dns/include/dns/rdataset.h	patch
+dist/bind/lib/dns/include/dns/request.h		patch
+dist/bind/lib/dns/include/dns/resolver.h	patch
+dist/bind/lib/dns/include/dns/sdb.h		patch
+dist/bind/lib/dns/include/dns/sdlz.h		patch
+dist/bind/lib/dns/include/dns/stats.h		patch
+dist/bind/lib/dns/include/dns/tkey.h		patch
+dist/bind/lib/dns/include/dns/types.h		patch
+dist/bind/lib/dns/include/dns/validator.h	patch
+dist/bind/lib/dns/include/dns/view.h		patch
+dist/bind/lib/dns/include/dns/xfrin.h		patch
+dist/bind/lib/dns/include/dns/zone.h		patch
+dist/bind/lib/dns/include/dst/gssapi.h		patch
+dist/bind/lib/dns/rdata/generic/ipseckey_45.c	patch
+dist/bind/lib/dns/rdata/generic/loc_29.c	patch
+dist/bind/lib/dns/rdata/generic/nsec_47.c	patch
+dist/bind/lib/dns/rdata/generic/nsec_47.h	patch
+dist/bind/lib/dns/rdata/generic/soa_6.c		patch
+dist/bind/lib/dns/rdata/in_1/wks_11.c		patch
+dist/bind/lib/dns/win32/libdns.def		patch
+dist/bind/lib/dns/win32/libdns.mak		patch
+dist/bind/lib/isc/Makefile.in			patch
+dist/bind/lib/isc/api				patch
+dist/bind/lib/isc/assertions.c			patch
+dist/bind/lib/isc/entropy.c			patch
+dist/bind/lib/isc/hash.c			patch
+dist/bind/lib/isc/httpd.c			patch
+dist/bind/lib/isc/inet_aton.c			patch
+dist/bind/lib/isc/inet_ntop.c			patch
+dist/bind/lib/isc/log.c				patch
+dist/bind/lib/isc/mem.c				patch
+dist/bind/lib/isc/portset.c			new file
+dist/bind/lib/isc/radix.c			patch
+dist/bind/lib/isc/random.c			patch
+dist/bind/lib/isc/rwlock.c			patch
+dist/bind/lib/isc/sha2.c			patch
+dist/bind/lib/isc/stats.c			new file
+dist/bind/lib/isc/timer.c			patch
+dist/bind/lib/isc/alpha/include/isc/atomic.h	patch
+dist/bind/lib/isc/ia64/include/isc/atomic.h	patch
+dist/bind/lib/isc/include/isc/Makefile.in	patch
+dist/bind/lib/isc/include/isc/assertions.h	patch
+dist/bind/lib/isc/include/isc/entropy.h		patch
+dist/bind/lib/isc/include/isc/file.h		patch
+dist/bind/lib/isc/include/isc/fsaccess.h	patch
+dist/bind/lib/isc/include/isc/hash.h		patch
+dist/bind/lib/isc/include/isc/heap.h		patch
+dist/bind/lib/isc/include/isc/httpd.h		patch
+dist/bind/lib/isc/include/isc/lex.h		patch
+dist/bind/lib/isc/include/isc/log.h		patch
+dist/bind/lib/isc/include/isc/mem.h		patch
+dist/bind/lib/isc/include/isc/msgs.h		patch
+dist/bind/lib/isc/include/isc/netaddr.h		patch
+dist/bind/lib/isc/include/isc/netscope.h	patch
+dist/bind/lib/isc/include/isc/platform.h.in	patch
+dist/bind/lib/isc/include/isc/portset.h		new file
+dist/bind/lib/isc/include/isc/radix.h		patch
+dist/bind/lib/isc/include/isc/random.h		patch
+dist/bind/lib/isc/include/isc/ratelimiter.h	patch
+dist/bind/lib/isc/include/isc/resource.h	patch
+dist/bind/lib/isc/include/isc/serial.h		patch
+dist/bind/lib/isc/include/isc/sockaddr.h	patch
+dist/bind/lib/isc/include/isc/socket.h		patch
+dist/bind/lib/isc/include/isc/stats.h		new file
+dist/bind/lib/isc/include/isc/symtab.h		patch
+dist/bind/lib/isc/include/isc/task.h		patch
+dist/bind/lib/isc/include/isc/timer.h		patch
+dist/bind/lib/isc/include/isc/types.h		patch
+dist/bind/lib/isc/unix/app.c			patch
+dist/bind/lib/isc/unix/dir.c			patch
+dist/bind/lib/isc/unix/entropy.c		patch
+dist/bind/lib/isc/unix/file.c			patch
+dist/bind/lib/isc/unix/ifiter_ioctl.c		patch
+dist/bind/lib/isc/unix/net.c			patch
+dist/bind/lib/isc/unix/resource.c		patch
+dist/bind/lib/isc/unix/socket.c			patch
+dist/bind/lib/isc/unix/socket_p.h		patch
+dist/bind/lib/isc/unix/strerror.c		patch
+dist/bind/lib/isc/unix/include/isc/net.h	patch
+dist/bind/lib/isc/unix/include/isc/offset.h	patch
+dist/bind/lib/isc/unix/include/isc/strerror.h	patch
+dist/bind/lib/isc/unix/include/isc/time.h	patch
+dist/bind/lib/isc/win32/dir.c			patch
+dist/bind/lib/isc/win32/entropy.c		patch
+dist/bind/lib/isc/win32/errno2result.c		patch
+dist/bind/lib/isc/win32/interfaceiter.c		patch
+dist/bind/lib/isc/win32/libisc.def		patch
+dist/bind/lib/isc/win32/libisc.dsp		patch
+dist/bind/lib/isc/win32/libisc.mak		patch
+dist/bind/lib/isc/win32/net.c			patch
+dist/bind/lib/isc/win32/netdb.h			patch
+dist/bind/lib/isc/win32/resource.c		patch
+dist/bind/lib/isc/win32/socket.c		patch
+dist/bind/lib/isc/win32/time.c			patch
+dist/bind/lib/isc/win32/include/isc/mutex.h	patch
+dist/bind/lib/isc/win32/include/isc/net.h	patch
+dist/bind/lib/isc/win32/include/isc/platform.h	patch
+dist/bind/lib/isc/win32/include/isc/time.h	patch
+dist/bind/lib/isc/win32/include/isc/win32os.h	patch
+dist/bind/lib/isccfg/aclconf.c			patch
+dist/bind/lib/isccfg/api			patch
+dist/bind/lib/isccfg/namedconf.c		patch
+dist/bind/lib/isccfg/include/isccfg/log.h	patch
+dist/bind/lib/isccfg/include/isccfg/namedconf.h patch
+dist/bind/lib/isccfg/win32/libisccfg.mak	patch
+dist/bind/lib/lwres/api				patch
+dist/bind/lib/lwres/context.c			patch
+dist/bind/lib/lwres/context_p.h			patch
+dist/bind/lib/lwres/getaddrinfo.c		patch
+dist/bind/lib/lwres/getipnode.c			patch
+dist/bind/lib/lwres/lwconfig.c			patch
+dist/bind/lib/lwres/include/lwres/context.h	patch
+dist/bind/lib/lwres/include/lwres/netdb.h.in	patch
+dist/bind/lib/lwres/man/lwres.3			patch
+dist/bind/lib/lwres/man/lwres.html		patch
+dist/bind/lib/lwres/man/lwres_buffer.3		patch
+dist/bind/lib/lwres/man/lwres_buffer.html	patch
+dist/bind/lib/lwres/man/lwres_config.3		patch
+dist/bind/lib/lwres/man/lwres_config.html	patch
+dist/bind/lib/lwres/man/lwres_context.3		patch
+dist/bind/lib/lwres/man/lwres_context.html	patch
+dist/bind/lib/lwres/man/lwres_gabn.3		patch
+dist/bind/lib/lwres/man/lwres_gabn.html		patch
+dist/bind/lib/lwres/man/lwres_gai_strerror.3	patch
+dist/bind/lib/lwres/man/lwres_gai_strerror.html patch
+dist/bind/lib/lwres/man/lwres_getaddrinfo.3	patch
+dist/bind/lib/lwres/man/lwres_getaddrinfo.html	patch
+dist/bind/lib/lwres/man/lwres_gethostent.3	patch
+dist/bind/lib/lwres/man/lwres_gethostent.html	patch
+dist/bind/lib/lwres/man/lwres_getipnode.3	patch
+dist/bind/lib/lwres/man/lwres_getipnode.html	patch
+dist/bind/lib/lwres/man/lwres_getnameinfo.3	patch
+dist/bind/lib/lwres/man/lwres_getnameinfo.html	patch
+dist/bind/lib/lwres/man/lwres_getrrsetbyname.3	patch
+dist/bind/lib/lwres/man/lwres_getrrsetbyname.html patch
+dist/bind/lib/lwres/man/lwres_gnba.3		patch
+dist/bind/lib/lwres/man/lwres_gnba.html		patch
+dist/bind/lib/lwres/man/lwres_hstrerror.3	patch
+dist/bind/lib/lwres/man/lwres_hstrerror.html	patch
+dist/bind/lib/lwres/man/lwres_inetntop.3	patch
+dist/bind/lib/lwres/man/lwres_inetntop.html	patch
+dist/bind/lib/lwres/man/lwres_noop.3		patch
+dist/bind/lib/lwres/man/lwres_noop.html		patch
+dist/bind/lib/lwres/man/lwres_packet.3		patch
+dist/bind/lib/lwres/man/lwres_packet.html	patch
+dist/bind/lib/lwres/man/lwres_resutil.3		patch
+dist/bind/lib/lwres/man/lwres_resutil.html	patch
+dist/bind/lib/tests/t_api.c			patch
+dist/bind/make/rules.in				patch
+dist/bind/win32utils/makedefs.pl		patch
+dist/bind/win32utils/readme1st.txt		patch
+distrib/sets/lists/base/md.amd64		patch
+distrib/sets/lists/base/md.sparc64		patch
+distrib/sets/lists/base/shl.mi			patch
+distrib/sets/lists/man/mi			patch
+doc/3RDPARTY					patch
+lib/libdns/Makefile				patch
+lib/libisc/Makefile				patch
+lib/libisc/shlib_version			patch
+usr.sbin/bind/nsupdate/Makefile			patch
+
+	Update BIND server and tools to version 9.5.2-P1.
+	[tron, ticket #1178]
+
+sys/fs/tmpfs/tmpfs_vnops.c			1.63
+
+	Handle the following case correctly:
+	% ls
+	% touch a
+	% ln a b
+	% mv a b
+	[rmind, ticket #1072]
+
+dist/ntp/ntpd/ntp_request.c			patch
+
+	Fix CVE-2009-3563.            
+	[kardel, ticket #1185]        
+
+games/rogue/monster.c				1.16
+
+	Fix '=' for '==' in a test. PR 42177.
+	[jdarrow, ticket #1186]
+
+usr.bin/gzip/unbzip2.c				1.13
+
+	Avoid problems when reading from pipes.  Fixes a regression
+	introduced with the multi-part bz2 fixes.
+	[mrg, ticket #1182]
+
+sbin/raidctl/raidctl.8				1.57-1.59 via patch
+sbin/raidctl/raidctl.c				1.42 via patch
+sys/dev/raidframe/files.raidframe		1.8 via patch
+sys/dev/raidframe/raidframeio.h			1.6 via patch
+sys/dev/raidframe/raidframevar.h		1.13 via patch
+sys/dev/raidframe/rf_copyback.c			1.42 via patch
+sys/dev/raidframe/rf_disks.c			1.72 via patch
+sys/dev/raidframe/rf_driver.c			1.122 via patch
+sys/dev/raidframe/rf_engine.c			1.40 via patch
+sys/dev/raidframe/rf_kintf.h			1.21 via patch
+sys/dev/raidframe/rf_netbsdkintf.c		1.269 via patch
+sys/dev/raidframe/rf_paritymap.c		1.1-1.3 via patch
+sys/dev/raidframe/rf_paritymap.h		1.1 via patch
+sys/dev/raidframe/rf_parityscan.c		1.33 via patch
+sys/dev/raidframe/rf_parityscan.h		1.8 via patch
+sys/dev/raidframe/rf_raid.h			1.38 via patch
+sys/dev/raidframe/rf_reconstruct.c		1.108 via patch
+sys/dev/raidframe/rf_states.c			1.44 via patch
+
+	Pull up the RAIDframe parity map Summer Of Code project.
+	Drastically reduces the amount of time spent rewriting parity
+	after an unclean shutdown by keeping better track of which
+	regions might have had outstanding writes.  Enabled by default;
+	can be disabled on a per-set basis, or tuned, with the new
+	raidctl(8) commands.
+	[tron, ticket #1187]
+
+sys/kern/sys_mqueue.c				1.28 via patch
+
+	Fix some security critical bugs:
+	- an invalid signal number passed to mq_notify(2) could crash the
+	kernel on delivery -- add a boundary check
+	- mq_receive(2) from an empty queue crashed the kernel by NULL
+	dereference in timeout calculation -- handle the NULL case
+	- likewise for mq_send(2) to a full queue
+	- a user could set mq_maxmsg (the maximal number of messages in a
+	queue) to a huge value on mq_open(O_CREAT) and later use up all
+	kernel memory by mq_send(2) -- add a sysctl'able limit which defaults
+	to 16*mq_def_maxmsg
+	[tron, ticket #1188]
+
+sys/kern/kern_time.c				1.163
+
+	If a struct sigevent with SIGEV_SIGNAL is passed to timer_create(2),
+	check the signal number to be in the allowed range. An invalid
+	signal number could crash the kernel by overflowing the sigset_t
+	array.
+	[drochner, ticket #1189]
+
+lib/libcurses/curses.h				1.94
+lib/libcurses/keypad.c				1.11
+
+	Make keypad return an int instead of nothing, as the SUS and even
+	curses_input(3) [!] say it should.
+	[drochner, ticket #1190]
+
+sbin/raidctl/raidctl.c				1.43
+
+	Slight change to the wording of the parity map info: the parity
+	is "marked clean" after however much inactivity; it is *actually*
+	clean as soon as the component disks all do their thing (on the
+	order of ms, usually), just the same as before.
+	[tron, ticket #1191]
+
+sys/dev/pci/pcidevs				1.1003
+sys/dev/pci/pcidevs.h				regen
+sys/dev/pci/pcidevs_data.h			regen
+sys/dev/pci/piixide.c				1.52
+
+	Add Intel 3400 devices.  Add support to piixide(4).
+	[sborrill, ticket #1175]
+
+sys/arch/x86/x86/coretemp.c			1.13
+
+	CPU model and CPU extended model cannot simply be summed; the
+	extended model differentiates different CPUs within a given model
+	type (i.e., model 0xe with extended model 0x1 is NOT the same as a
+	model 0xf).  Modern Xeons do not support MSR_IA32_EXT_CONFIG, so
+	use model and extended model correctly to avoid it
+	[sborrill, ticket #1180]
+
+sys/arch/x86/x86/intel_busclock.c		1.9
+
+	Interim workaround for modern Xeons that don't have the simplistic
+	view of bus speed and therefore do not support MSR_FSB_FREQ (e.g.,
+	X3400).
+	[sborrill, ticket #1181]
+
+sys/fs/puffs/puffs_vnops.c			1.141 via patch
+
+	Push all information cached in the vnode to the file server before
+	issuing INACTIVE.  PR kern/42194.  Also, send setattr in fsync
+	asynchronously if FSYNC_WAIT is not set.
+	[pooka, ticket #1184]
+
+usr.bin/btkey/device.c				1.3
+usr.bin/btkey/btkey.c				1.3
+
+	- If HCI commands fail (CommandComplete status != 0) then indicate
+	  ENODEV "Operation Not Supported by Device" rather than random errno.
+	- Accept uppercase hex digits when parsing a provided key.
+	[plunky, ticket #1192]
+
+sys/arch/sparc64/dev/lom.c			1.4
+
+	Merge change of OpenBSD rev 1.20: Remove debug printf and properly
+	dequeue command instead when a read times out on LOMLite2.
+	[nakayama, ticket #1193]
+
+usr.bin/less/less/cmdbuf.c			1.8
+
+	Don't attempt to read or write ~/.lesshst if it's not a regular file
+	or a symlink to a regular file. Previously, symlinking to /dev/null
+	would cause less to trash /dev/null if run with sufficient
+	privileges, as seen in PR misc/42237.
+	[dholland, ticket #1194]
+
+etc/defaults/rc.conf				1.107
+
+	Make rtsold_flags default to -a as per PR 39657.
+	[dholland, ticket #1195]
+
+sys/sys/stat.h					1.59
+
+	Parenthesize S_IS*() macro arguments to prevent breakage with
+	certain arguments - see PR 41919.
+	[dholland, ticket #1196]
+
+sys/kern/vfs_syscalls.c				1.400
+
+	Use the kernel space version of the vfs name, not the
+	original userspace pointer. Avoids crashes on archs with
+	completely separate userspace VA.
+	[martin, ticket #1200]
+
+usr.bin/lex/flex.skl				1.23-1.25
+usr.bin/lex/initscan.c				1.18
+
+	If YY_NO_INPUT is defined, disable not only the declaration but
+	also the definition of yyinput() to avoid compiler warnings with
+	newer gcc. Addresses PR#41160.
+	Introduce ANSI prototypes for yyinput.
+	Conditionalize the yyinput/input() function definition the same
+	way as it's always been done in the prototype.
+	[hubertf, ticket #1197]
+
+sys/dev/pci/if_wm.c				1.176-1.179, 1.181-1.183
+sys/dev/pci/if_wmreg.h				1.28
+sys/dev/pci/if_wmvar.h				1.1-1.4
+sys/dev/mii/igphy.c				1.18-1.20 via patch
+
+	Many bugfixes:
+	- Some fixes for i80003 and ICH{8,9,10} from e1000 driver and
+          document:
+	  - Add setting for KABGTXD register for ICH{8,9,10}.
+	  - ICH9 and ICH10 has no FCAL, FCAH and FCT like ICH8.
+	  - Add special setting for FCTTV and TCTL_EXT register for i80003
+	  - The special setting for TIPG is only for i80003.
+	  - Some of kumeran settings are only for i80003's bugs.
+	  - Add some ICH10 fixes.
+	  - Fix the bug that another lock mechanism is used to access
+	    Kumeran registers on i80003 and ICHs.
+	  - Fix yet another i80003 ONLY workaround. The code to modifing
+	    TIPG register is only for i80003.
+	- Set the Re-Transmit on Late Collision(RTLC) flag for all devices.
+	- Fix a typo in a printf message.
+	- If the difference bettween last flag and new flag is only
+	  IFF_PROMISC or IFF_ALLMULTI, set multicast filter only to prevent
+	  link down. Tested by Mark Davies and me. Fixes PR#29126 for wm.
+	- Cleanup interrupt establish error messages. Do not mix
+	  aprint_error/aprint_normal/printf calls for a single line.
+	- Fix igphy's 82566 support.
+	  - Patch for the DSP code is only for 8254[17] and we have to
+	    apply the different patches between rev. 1 and rev. 2.
+	  - The workaround for analog fuse is only for 82547 rev. 1.
+	  - The workaround for smartspeed is only for 8254[17]
+	- Sync with Intel's original em driver:
+	  - Check PCI-X mode as e1000 driver.
+	  - Add dspcode for igp3 and use it when the EEPROM isn't available.
+	  - Add some delays.
+	  - Stop the PHY transmitter before patching the DSP code and
+	    restart it after writing.
+	  - Save and restore register 0x2f5b.
+	[msaitoh, ticket #1203]
+
+sbin/fdisk/fdisk.c				1.123
+
+	Change arguments to decimal() to be int64_t.  They need to be able
+	to hold disk sector numbers > 2^31 and also -1.  Fixes PR/34807.
+	[dsl, ticket #1201]
+
+usr.sbin/makefs/cd9660.c			1.25 via patch
+usr.sbin/makefs/cd9660.h			1.13 via patch
+usr.sbin/makefs/cd9660/cd9660_write.c		1.10
+usr.sbin/makefs/cd9660/iso9660_rrip.c		1.5-1.8
+usr.sbin/makefs/cd9660/iso9660_rrip.h		1.5
+
+	Keep makefs(8) from creating invalid ISO format on rockridge support
+	which causes fatal errors in ARC BIOS firmware on MIPS Magnum R4000
+	while booting from arccd-5.0.1.iso as described in PR bin/42410.
+	[tsutsui, ticket #1198]
+
+sys/netbt/rfcomm_session.c			1.16
+
+	When receiving a MCC PN response, the max frame size that the remote
+	party requests must be less than the one we asked for which will not
+	be greater than the max acceptable value so no need to test for that
+	but make sure that it is not smaller than minimum acceptable value.
+	[plunky, ticket #1221]
+
+sys/kern/sys_sig.c				1.24
+
+	sigtimedwait: fix a memory leak.  Likely the cause of PR/40750 and
+	indirect cause of PR/39283.
+	[rmind, ticket #1199]
+
+tools/compat/compat_defs.h			patch
+
+	Don't include grp.h  Fixes cross-build under Mac OS X 10.6.
+	[tron, ticket #1202]
+
+sys/dev/pud/pud_dev.c				1.5
+
+	Fix pasto: pud_cdev_close() should call doopenclose() with
+	PUD_CDEV_CLOSE, not PUD_CDEV_OPEN.
+	[pooka, ticket #1204]
+
+include/paths.h					1.35
+
+	+_PATH_PUD
+	[pooka, ticket #1205]
+
+sys/dev/pud/pud_dev.c				1.6 via patch
+
+	Handle DIOCGPART in-kernel because a userspace server doesn't have
+	a chance in phobos of handling it.  This makes it possible to do a
+	kernel mount of most file systems with the block device backed by
+	a pud userspace server.
+	[pooka, ticket #1206]
+
+sbin/fdisk/fdisk.c				1.128
+
+	Editing partitions larger than 1TB works better if 'decimal'
+	returns 64 bit integer values!
+	[dsl, ticket #1207]
+
+sys/kern/kern_event.c				1.69
+
+	Use sizeof correct type, not pointer to wrong type.
+	Fixes PR/42498.
+	[dsl, ticket #1208]
+
+dist/pdisk/pdisk.c				1.18
+distrib/amiga/floppies/upgr/upgrade.sh		1.9
+sbin/newfs_udf/newfs_udf.8			1.6
+sbin/newfs_udf/udf_create.c			1.17
+
+	Fix typo in command output.
+	[mbalmer, ticket #1209]
+
+sys/dev/pci/viaide.c				1.65
+
+	Initialize data32iot and data32ioh in via_sata_chip_map_new().
+	This makes 32bit UDMA xfer work properly on VIA VT6421.
+	[tsutsui, ticket #1210]
+
+sys/fs/puffs/puffs_msgif.c			1.76 via patch
+sys/fs/puffs/puffs_sys.h			1.73 via patch
+sys/fs/puffs/puffs_vfsops.c			1.84 via patch
+
+	Process flush requests from the file server in a separate thread
+	context.  This fixes a long-standing but seldomly seen deadlock,
+	where the kernel was holding pages busy (due to e.g. readahead
+	request) while waiting for the server to respond, and the server
+	made a callback into the kernel asking to invalidate those pages.
+	[pooka, ticket #1212]
+
+sys/dev/dkwedge/dk.c				1.52
+
+	Implement and use a dkminphys() that calls the parent device's
+	minphys function with b_dev temporarily adjusted to the parent
+	device's dev_t.  Fixes PR/37390.
+	[jakllsch, ticket #1213]
+
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_id.c 1.2
+
+	Fix incorrect LIST_END macro.  Fixes PR/41950.
+	[jakllsch, ticket #1214]
+
+share/man/man4/man4.sparc64/lom.4		1.4
+sys/arch/sparc64/dev/lom.c			1.5
+
+	Make fault LED and alarms status changeable via sysctl(8).
+	The sysctl entries are created under the hw.lomN MIB.
+	[nakayama, ticket #1216]
+
+distrib/utils/sysinst/disks.c			1.108
+
+	When creating /etc/fstab: for the first swap partition use type
+	"sw,dp" instead of "sw", so dump device gets configured correctly
+	if swap is not on the second partition.  Fixes PR install/42148.
+	[cegger, ticket #1217]
+
+sys/dev/usb/uhidev.c				1.46
+
+	The Dell DRAC5 gives us a zero-length report immediately following
+	a normal report.  Thus, ignore zero-length reports.  Move some
+	related report size insanity checking into the UHIDEV_DEBUG case.
+	Fixes PR/39911.
+	[jakllsch, ticket #1219]
+
+sys/arch/sparc/include/cpu.h			1.86
+sys/arch/sparc/sparc/locore.s			1.246
+sys/arch/sparc/sparc/vm_machdep.c		1.99, 1.100
+
+	Fix up cpu_setfunc():
+	- don't call lwp_startup for cpu_setfunc() users
+	- introduce lwp_setfunc_trampoline instead
+	- no need to set the "new" lwp for setfunc
+	[mrg, ticket #1223]
+
+dist/nvi/common/cut.c				1.3
+dist/nvi/common/cut.h				1.3
+dist/nvi/common/multibyte.h			1.5
+dist/nvi/ex/ex.c				1.6
+dist/nvi/ex/ex_subst.c				1.3
+dist/nvi/ex/ex_usage.c				1.4 via patch
+dist/nvi/vi/v_ulcase.c				1.2
+
+	Use wide char versions of tolower/toupper/islower/isupper where
+	appropriate. Fixes ~ command on big-endian architectures.
+	[mlelstv, ticket #1224]
+
+sys/dev/pci/viaide.c				1.66
+
+	Enable mem space if it isn't already enabled.  Several bioses leave
+	this not enabled, and viaide kind of depends upon it.  Idea from
+	PR 38011, but reworked a little.
+	[mrg, ticket #1227]
+
+external/mit/libpciaccess/dist/src/netbsd_pci.c	1.5
+
+	If a VGA device isn't enabled for io/mem/bus-master, do so here.
+	xorg-server 1.4.x and earlier would do this for us.  Partly fixes
+	dual-head support for various systems.
+	[mrg, ticket #1228]
+
+sys/dev/ata/atareg.h				1.33
+sys/dev/ata/wd.c				1.378
+
+	Add atap_max_lba member to ataparams for LBA48 Maximum Address.
+	While here, renumber some __reserved member names to be sequential.
+	Also, add a member for the World Wide Name.  Use atap_max_lba in
+	wd.c instead of offsets into a __reserved member.
+	[dsl, ticket #1231]
+
+sys/dev/ata/wd.c				1.380
+sys/dev/ata/wdvar.h				1.38
+
+	ATA sepcs changed the LBA48 boundary from 0xfffffff to 0xffffffe
+	between ATA6r1 and ATA6r3, which caused drives conform to ATA6r3
+	or later to reject LBA28 commands at sector 0xfffffff.
+	Get the right idea from the LBA48 boundary from IDENTIFY words 60-61.
+	Remove the WD_QUIRK_FORCE_LBA48 quirk, associated tables entries and
+	autodetect code, it's not needed any more.
+	[dsl, ticket #1220]
+
+sys/kern/vfs_subr.c				1.393
+
+	Make sure struct vattr contains no random bits of kernel memory
+	after vattr_null().  This is especially nice considering things
+	like puffs, where the contents are copied to userspace.
+	[pooka, ticket #1226]
+
+share/man/man4/faith.4				1.11
+
+	Various language fixes.
+	[mbalmer, ticket #1229]
+
+usr.sbin/postinstall/postinstall		1.107
+
+	Running "postinstall fix" should also say why fontconfig did not
+	work, like all other postinstall methods.
+	[christos, ticket #1232]
+
+external/mit/xorg/server/drivers/xf86-video-radeonhd/Makefile patch
+xsrc/external/mit/xf86-video-radeonhd/dist/ChangeLog patch
+xsrc/external/mit/xf86-video-radeonhd/dist/INSTALL patch
+xsrc/external/mit/xf86-video-radeonhd/dist/Makefile.in patch
+xsrc/external/mit/xf86-video-radeonhd/dist/README patch
+xsrc/external/mit/xf86-video-radeonhd/dist/acinclude.m4 patch
+xsrc/external/mit/xf86-video-radeonhd/dist/aclocal.m4 patch
+xsrc/external/mit/xf86-video-radeonhd/dist/config.guess patch
+xsrc/external/mit/xf86-video-radeonhd/dist/config.h.in patch
+xsrc/external/mit/xf86-video-radeonhd/dist/config.sub patch
+xsrc/external/mit/xf86-video-radeonhd/dist/configure patch
+xsrc/external/mit/xf86-video-radeonhd/dist/configure.ac patch
+xsrc/external/mit/xf86-video-radeonhd/dist/depcomp patch
+xsrc/external/mit/xf86-video-radeonhd/dist/install-sh patch
+xsrc/external/mit/xf86-video-radeonhd/dist/man/Makefile.in patch
+xsrc/external/mit/xf86-video-radeonhd/dist/man/radeonhd.man patch
+xsrc/external/mit/xf86-video-radeonhd/dist/shave-libtool.in patch
+xsrc/external/mit/xf86-video-radeonhd/dist/shave.in patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/Makefile.am patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/Makefile.in patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/atombios_rev.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/git_version.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/r5xx_accel.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/r600_exa.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/r600_reg.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/r600_reg_auto_r6xx.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/r600_reg_r6xx.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/r600_reg_r7xx.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/r600_shader.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/r600_state.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/r600_textured_videofuncs.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/r6xx_accel.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/r6xx_accel.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/radeon_3d.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/radeon_drm.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/radeon_exa_render.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/radeon_textured_videofuncs.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_atombios.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_atombios.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_atomout.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_acpi.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_acpi.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_audio.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_audio.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_biosscratch.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_connector.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_cs.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_cursor.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_cursor.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_dac.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_dig.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_dri.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_driver.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_hdmi.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_hdmi.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_i2c.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_id.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_lut.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_lut.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_lvtma.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_mc.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_mc.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_monitor.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_output.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_output.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_pll.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_pm.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_pm.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_randr.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_regs.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_tmds.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_video.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/src/rhd_video.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/utils/conntest/Makefile.am patch
+xsrc/external/mit/xf86-video-radeonhd/dist/utils/conntest/Makefile.in patch
+xsrc/external/mit/xf86-video-radeonhd/dist/utils/conntest/git_version.h patch
+xsrc/external/mit/xf86-video-radeonhd/dist/utils/conntest/rhd_conntest.c patch
+xsrc/external/mit/xf86-video-radeonhd/dist/utils/conntest/rhd_dump.c patch
+xsrc/external/mit/xf86-video-radeonhd/include/config.h patch
+
+	Update xf86-video-radeonhd to 1.3.0.
+	[veego, ticket #1233]
+
+xsrc/external/mit/libFS/include/config.h	patch
+xsrc/external/mit/pixman/include/config.h 	patch
+xsrc/external/mit/xf86-video-siliconmotion/include/config.h patch
+xsrc/external/mit/xmag/include/config.h		patch
+xsrc/external/mit/xwininfo/include/config.h 	patch
+
+	Regenerate a few config.h files.  Should have been done with the
+	big X.Org update.
+	[veego, ticket #1234]
+
+lib/libpthread/pthread.c			1.113
+
+	Don't just look only at the first element in the deadqueue to find
+	lwp's to reuse, because if we lose the race with the kernel we are
+	never going to reuse any elements. Look in the whole list instead.
+	[christos, ticket #1235]
+
+external/mit/xorg/lib/dri/i965/Makefile		1.6
+
+	Build the i965 drm module properly:
+	- fix a line continuation that stopped SRCS= from working
+	- don't include intel_dri.c here
+	[mrg, ticket #1236]
+
+crypto/dist/openssl/ssl/s3_lib.c 		patch
+crypto/dist/openssl/ssl/s3_pkt.c 		patch
+crypto/dist/openssl/ssl/s3_srvr.c 		patch
+crypto/dist/openssl/ssl/ssl_locl.h 		patch
+
+	Disable OpenSSL renegotiation, thus avoiding CVE-2009-3555.
+	[tonnerre, ticket #1237]
+
+gnu/usr.bin/xcvs/cvsbug/Makefile 		patch
+
+	Properly replace @MKTEMP_SH_FUNCTION@, @MKTEMP@, and @SENDMAIL@.
+	Fixes PR bin/39629.
+	[snj, ticket #1215]
+
+sys/kern/kern_sig.c				1.302
+
+	sigactsunshare(): set reference count in a case of new sigacts
+	allocation.
+	Bug (e.g. memory leak) can happen when using clone(2) call.
+	[rmind, ticket #1238]
+
+external/mit/xorg/lib/dri/i915/Makefile		1.5, 1.6
+external/mit/xorg/lib/dri/i965/Makefile		1.7, 1.8
+
+	replace LIBS with LIBDPLIBS.  makes these actually link against
+	drm_intel.  should fix a problem reported by snj@.
+	link in libOSMesa as well.
+	[mrg, ticket #1239]
+
+sys/kern/kern_runq.c				1.28
+
+	sched_catchlwp: fix the case when other CPU might see
+	curlwp->l_cpu != curcpu() while LWP is finishing context switch.
+	Should fix PR/42539, tested by martin@.
+	[rmind, ticket #1240]
+
+sys/kern/kern_softint.c				1.30
+
+	softint_execute: release/re-acquire kernel-lock depending on
+	SOFTINT_MPSAFE flag.  Keeping it held for MP-safe cases break the
+	lock order assumptions.  Per discussion with <martin>.
+	[rmind, ticket #1241]
+
+distrib/utils/sysinst/net.c			1.124
+
+	Use the proper structs for ioctls to fetch network configuration.
+	Might fix PR 42436.
+	[martin, ticket #1242]
+
+sys/dev/usb/ums.c				1.80
+sys/dev/usb/usbdevs				1.540
+sys/dev/usb/usbdevs.h				regen
+sys/dev/usb/usbdevs_data.h			regen
+
+	Make ums.c work with a "Microsoft Natural Ergonomic Desktop 7000" mouse.
+	XXX The tilt function still doesn't work for me.
+	[matthias, ticket #1243]
+
+sys/fs/puffs/puffs_vnops.c			1.142
+
+	Since VOP_GETATTR() does not require a locked vnode, resolve and
+	reference the puffs_node before sending the request to the file
+	server.  This diminishes the window where the inode can be reclaimed
+	and be invalidated before it is accessed (but does not completely
+	eliminate the race, as that is a caller problem which we cannot
+	fix here).
+	[pooka, ticket #1244]
+
+sys/arch/amd64/include/byte_swap.h		1.7
+
+	Provide inline assembly version of bswap64.
+	[joerg, ticket #1245]
+
+external/gpl2/libdevmapper/*			delete
+external/gpl2/lvm2tools/*			delete
+
+	Remove obsolete LVM sources.
+	[tron, ticket #1211]
+
+sys/lib/libkern/arc4random.c			1.21
+
+	Keep arc4_i and arc4_j synchronised after a rekeying. This
+	prevents accidentally ending up in a short ARC4 cycle.
+	[joerg, ticket #1253]
+
+sys/dev/pci/azalia.c				1.72
+sys/dev/pci/hdaudio/hdaudio_afg.c		1.19
+
+	Signedness bug/crash in azalia and hdaudio. Fixes PR 42604.
+	[tonnerre, ticket #1258]
+
+dist/bind/CHANGES				patch
+dist/bind/FAQ					patch
+dist/bind/FAQ.xml				patch
+dist/bind/bin/named/query.c			patch
+dist/bind/bin/tests/system/conf.sh.in		patch
+dist/bind/bin/tests/system/dnssec/ns1/sign.sh	patch
+dist/bind/bin/tests/system/dnssec/ns2/example.db.in patch
+dist/bind/bin/tests/system/dnssec/ns2/sign.sh	patch
+dist/bind/bin/tests/system/dnssec/tests.sh	patch
+dist/bind/bin/tests/system/pending/clean.sh	patch
+dist/bind/bin/tests/system/pending/ns1/named.conf patch
+dist/bind/bin/tests/system/pending/ns1/root.db.in patch
+dist/bind/bin/tests/system/pending/ns1/sign.sh	patch
+dist/bind/bin/tests/system/pending/ns2/example.com.db.in patch
+dist/bind/bin/tests/system/pending/ns2/example.db.in patch
+dist/bind/bin/tests/system/pending/ns2/forgery.db patch
+dist/bind/bin/tests/system/pending/ns2/named.conf patch
+dist/bind/bin/tests/system/pending/ns2/sign.sh	patch
+dist/bind/bin/tests/system/pending/ns3/hostile.db patch
+dist/bind/bin/tests/system/pending/ns3/mail.example.db patch
+dist/bind/bin/tests/system/pending/ns3/named.conf patch
+dist/bind/bin/tests/system/pending/ns4/named.conf patch
+dist/bind/bin/tests/system/pending/prereq.sh	patch
+dist/bind/bin/tests/system/pending/setup.sh	patch
+dist/bind/bin/tests/system/pending/tests.sh	patch
+dist/bind/doc/arm/Bv9ARM.pdf			patch
+dist/bind/doc/draft/draft-baba-dnsext-acl-reqts-01.txt delete
+dist/bind/doc/draft/draft-daigle-napstr-04.txt	delete
+dist/bind/doc/draft/draft-danisch-dns-rr-smtp-03.txt delete
+dist/bind/doc/draft/draft-dnsext-opcode-discover-02.txt delete
+dist/bind/doc/draft/draft-durand-dnsop-dynreverse-00.txt delete
+dist/bind/doc/draft/draft-ietf-6man-text-addr-representation-01.txt patch
+dist/bind/doc/draft/draft-ietf-behave-dns64-01.txt patch
+dist/bind/doc/draft/draft-ietf-dnsext-2929bis-01.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-axfr-clarify-05.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-axfr-clarify-12.txt patch
+dist/bind/doc/draft/draft-ietf-dnsext-dns-name-p-s-00.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-dns-tcp-requirements-01.txt patch
+dist/bind/doc/draft/draft-ietf-dnsext-dnssec-2535typecode-change-06.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-dnssec-bis-updates-01.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-dnssec-bis-updates-09.txt patch
+dist/bind/doc/draft/draft-ietf-dnsext-dnssec-experiments-03.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-dnssec-gost-05.txt patch
+dist/bind/doc/draft/draft-ietf-dnsext-dnssec-online-signing-02.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-dnssec-opt-in-07.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-dnssec-rsasha256-00.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-dnssec-trans-02.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-ds-sha256-05.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-forgery-resilience-00.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-keyrr-key-signing-flag-12.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-mdns-46.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-nsec3-12.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-nsid-01.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-rfc2536bis-dsa-07.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-rfc2539bis-dhk-07.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-rfc2671bis-edns0-02.txt patch
+dist/bind/doc/draft/draft-ietf-dnsext-rfc2672bis-dname-06.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-rfc2672bis-dname-18.txt patch
+dist/bind/doc/draft/draft-ietf-dnsext-rfc3597-bis-00.txt patch
+dist/bind/doc/draft/draft-ietf-dnsext-signed-nonexistence-requirements-01.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-tkey-renewal-mode-05.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-trustupdate-threshold-00.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-trustupdate-timers-05.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-tsig-md5-deprecated-03.txt patch
+dist/bind/doc/draft/draft-ietf-dnsext-tsig-sha-06.txt delete
+dist/bind/doc/draft/draft-ietf-dnsext-wcard-clarify-10.txt delete
+dist/bind/doc/draft/draft-ietf-dnsop-default-local-zones-03.txt delete
+dist/bind/doc/draft/draft-ietf-dnsop-default-local-zones-09.txt patch
+dist/bind/doc/draft/draft-ietf-dnsop-ipv6-dns-configuration-06.txt delete
+dist/bind/doc/draft/draft-ietf-dnsop-ipv6-dns-issues-11.txt delete
+dist/bind/doc/draft/draft-ietf-dnsop-ipv6-transport-guidelines-01.txt delete
+dist/bind/doc/draft/draft-ietf-dnsop-key-rollover-requirements-02.txt delete
+dist/bind/doc/draft/draft-ietf-dnsop-name-server-management-reqs-02.txt patch
+dist/bind/doc/draft/draft-ietf-dnsop-serverid-06.txt delete
+dist/bind/doc/draft/draft-ietf-enum-e164-gstn-np-05.txt delete
+dist/bind/doc/draft/draft-ietf-ipv6-node-requirements-08.txt delete
+dist/bind/doc/draft/draft-ietf-secsh-dns-05.txt	delete
+dist/bind/doc/draft/draft-ihren-dnsext-threshold-validation-00.txt delete
+dist/bind/doc/draft/draft-park-ipv6-extensions-dns-pnp-00.txt delete
+dist/bind/doc/rfc/index				patch
+dist/bind/doc/rfc/rfc1912.txt			patch
+dist/bind/doc/rfc/rfc3755.txt			patch
+dist/bind/doc/rfc/rfc4294.txt			patch
+dist/bind/doc/rfc/rfc4339.txt			patch
+dist/bind/doc/rfc/rfc4471.txt			patch
+dist/bind/doc/rfc/rfc4472.txt			patch
+dist/bind/doc/rfc/rfc4697.txt			patch
+dist/bind/doc/rfc/rfc4955.txt			patch
+dist/bind/doc/rfc/rfc4956.txt			patch
+dist/bind/doc/rfc/rfc5001.txt			patch
+dist/bind/doc/rfc/rfc5011.txt			patch
+dist/bind/doc/rfc/rfc5452.txt			patch
+dist/bind/doc/rfc/rfc5625.txt			patch
+dist/bind/doc/rfc/rfc5702.txt			patch
+dist/bind/lib/dns/include/dns/db.h		patch
+dist/bind/lib/dns/include/dns/types.h		patch
+dist/bind/lib/dns/rbtdb.c			patch
+dist/bind/lib/dns/resolver.c			patch
+dist/bind/lib/dns/validator.c			patch
+dist/bind/lib/lwres/man/lwres.html		patch
+dist/bind/lib/lwres/man/lwres_buffer.html	patch
+dist/bind/lib/lwres/man/lwres_config.html	patch
+dist/bind/lib/lwres/man/lwres_context.html	patch
+dist/bind/lib/lwres/man/lwres_gabn.html		patch
+dist/bind/lib/lwres/man/lwres_gai_strerror.html	patch
+dist/bind/lib/lwres/man/lwres_getaddrinfo.html	patch
+dist/bind/lib/lwres/man/lwres_gethostent.html	patch
+dist/bind/lib/lwres/man/lwres_getipnode.html	patch
+dist/bind/lib/lwres/man/lwres_getnameinfo.html	patch
+dist/bind/lib/lwres/man/lwres_getrrsetbyname.html patch
+dist/bind/lib/lwres/man/lwres_gnba.html		patch
+dist/bind/lib/lwres/man/lwres_hstrerror.html	patch
+dist/bind/lib/lwres/man/lwres_inetntop.html	patch
+dist/bind/lib/lwres/man/lwres_noop.html		patch
+dist/bind/lib/lwres/man/lwres_packet.html	patch
+dist/bind/lib/lwres/man/lwres_resutil.html	patch
+dist/bind/version				patch
+distrib/sets/lists/base/md.amd64		patch
+distrib/sets/lists/base/md.sparc64		patch
+distrib/sets/lists/base/shl.mi			patch
+doc/3RDPARTY					patch
+lib/libdns/shlib_version			patch
+
+	Update BIND to 9.5.2-P2.
+	[spz, ticket #1264]
+
+crypto/dist/openssl/crypto/comp/c_zlib.c	patch
+
+	Fix CVE-2009-4355.
+	[taca, ticket #1265]                     
+
+libexec/ld.elf_so/reloc.c			1.101
+libexec/ld.elf_so/rtld.h			1.87, 1.88
+
+	Restore backwards compatibility for binaries referencing the main
+	Obj_Entry.
+	[skrll, ticket #1249]
+
+games/fortune/strfile/strfile.8			1.13
+
+	The default output file extension is '.dat', not '.out'.
+	From Lars Nooden via OpenBSD.
+	[mbalmer, ticket #1250]
+
+distrib/sparc/miniroot/Makefile.inc		1.16
+distrib/sparc/ramdisk/dot.profile		1.20
+sys/arch/sparc/dev/audioamd.c			1.25
+sys/arch/sparc/dev/fd.c				1.147
+sys/arch/sparc/sparc/auxreg.h			1.13
+sys/arch/sparc/stand/common/promdev.c		1.23
+
+	Build miniroot binaries for sparc with -Os to shrink instfs.tgz
+	for the second boot floppy which use miniroot objects.
+	This is workaround for PR install/42146, and ok'ed by mrg@.
+
+	Don't try to read disklabel to check FS_RAID on floppy boot since
+	reopening floppy could cause Data Access Exception later.
+	Fixes PR port-sparc/42186, ok'ed by mrg@.
+
+	Disable "fast trap" handlers which invoke software interrupts
+	in sparc/amd7930intr.s and sparc/bsd_fdintr.s until they are
+	rewritten to adapt new MI softint(9) API.
+	No particular comments on PR port-sparc/42192, but
+	this fixes timeout problem on floppy access on my SPARCstation 1+.
+
+	Use /dev/fd0a rather than /dev/rfd0a to read instfs.tgz image from
+	floppy.  It looks newer (appearred after 1.6) gzip tries to read
+	less than DEV_BSIZE (to check header?) so we can't use raw device
+	directly.  (note sparc bootfs ramdisk doesn't have dd(1))
+	Workaround for PR port-sparc/42193, and would also fix PR install/28734.
+
+	Explicitly clear AUXIO4M_FTC bit in FTC_FLIP macro used on
+	pseudo-dma for floppy, as well as AUXIO4C_FTC bit for sun4c.
+	A comment in the macro says AUXIO4M_FTC bit is auto-clear,
+	but my two SS20s (including compatible) with 150MHz hyperSPARCs
+	get data_overrun without it, and no bad side effect on SS5
+	(works with and without this change).
+	Closes PR port-sparc/42516, which is the last one of a bunch of
+	floppy issue on NetBSD/sparc since NetBSD 2.0 days. See
+	http://mail-index.NetBSD.org/port-sparc/2009/12/20/msg000484.html
+	for details.
+	[tsutsui, ticket #1251]
+
+sys/dev/pci/pcidevs				1.1015
+sys/dev/pci/pcidevs.h				releng
+sys/dev/pci/pcidevs_data.h			releng
+
+	Add two IBM RSS devices.
+	[mbalmer, ticket #1254]
+
+sys/dev/pci/pucdata.c				1.59
+
+	Add the IBM 481033H SCC
+	[mbalmer, ticket #1255]
+
+lib/libevent/Makefile				patch
+	Make sure that the automatically generated file "event-config.h"
+	gets removed by the "cleandir" target.
+	[tron, ticket #1259]
+
+lib/libm/src/k_standard.c			1.13, 1.14
+
+	PR/42630 asin(2.0) and acos(2.0) doesn't return NaN.
+	reported by NARUSE, Yui -san, Thanks!
+	let the previous fix apply to acos rather than atan2,
+	and get rid of #ifdef vax
+	[tnozaki, ticket #1261]
+
+xsrc/dist/*					remove
+
+	Remove obsolete and never used sources.
+	[tron, ticket #1260]
+
+xsrc/external/mit/expat/dist/lib/xmlparse.c	1.2
+
+	Add patch from upstream CVS to fix CVE-2009-3560 (possible DOS due to
+	crash on bad input).
+	[tron, ticket #1283]
+
+xsrc/xfree/xc/extras/expat/lib/xmlparse.c	1.2
+
+	Add patch from upstream CVS to fix CVE-2009-3560 (possible DOS due to
+	crash on bad input).
+	[tron, ticket #1284]
+
+sys/dev/usb/usbdi.c				1.127
+
+	Fix leak of a usbd_xfer_handle when a interrupt pipe is aborted
+	then closed. Confirmed to fix the memory leak on close() with
+	umodem(4) and uplcom(4).
+	[bouyer, ticket #1247]
+
+sys/arch/sparc/conf/GENERIC			1.219
+sys/arch/sparc/conf/files.sparc			1.149
+sys/arch/sparc/dev/apc.c			1.1
+sys/arch/sparc/dev/apcreg.h			1.1
+sys/dev/DEVNAMES				1.255
+
+	Add apc(4), a driver for the Aurora Personality Chip (APC) found
+	on SPARCstation-4/5, and emulated by qemu to idle the simulator
+	when the CPU is idle. Infos about the registers from the linux driver.
+	Not enabled by default because it can cause some Sparc systems to
+	hang (so says the linux driver).
+	Only the CPU idle part implemented at this time; fan speed and
+	Convenience power outlet management to be added.
+	Tested on qemu.
+	[bouyer, ticket #1248]
+
+sys/ufs/ufs/ufs_quota.c				1.65
+
+	vclean() actually sets v_tag to VT_NON but doesn't touch v_type.
+	getcleanvnode() sets v_type to VNON after releasing v_interlock.
+	So the thread doing quotaon(), quotaoff() or qsync() could vget()
+	a vnode which is being recycled in getcleanvnode(), after it has
+	been cleaned and v_interlock released, but before v_type has been
+	reset, leading to KASSERT(vp->v_usecount == 1) firing in
+	getnewvnode(), or qsync() dereferencing a NULL pointer as in
+	PR kern/42205.
+	Fix by using the same tests as other ffs functions traversing the
+	mount list: also check for VTOI(vp) == NULL, and VI_XLOCK in
+	addition to VI_CLEAN.
+	[bouyer, ticket #1252]
+
+sys/dev/ic/mfi.c				1.21
+
+	Don't release CCB twice. Found by code inspection.
+	[bouyer, ticket #1256]
+
+sys/dev/ic/mfi.c				1.31
+
+	bio(4) is MP-safe but mfi(4) is not. So get the kernel_lock at
+	mfi_ioctl() entry and release it on exit.
+	[bouyer, #ticket 1257]
+
+usr.sbin/wpa/wpa_supplicant/Makefile		1.12
+usr.sbin/wpa/wpa_supplicant/wpa_supplicant.8	1.6, 1.7
+
+	Enable CONFIG_DEBUG_FILE option to allow debug messages to be sent to
+	a file instead of stdout.
+	-f is not mandatory.
+	[sborrill, ticket #1267]
+
+sys/dev/mii/miidevs				1.90 via patch
+sys/dev/mii/miidevs.h				regen
+sys/dev/mii/miidevs_data.h			regen
+sys/dev/pci/pcidevs				1.1001 via patch
+sys/dev/pci/pcidevs.h				regen
+sys/dev/pci/pcidevs_data.h			regen
+sys/dev/mii/brgphy.c				1.51 via patch
+sys/dev/microcode/bnx/bnxfw.h			1.3 via patch
+sys/dev/pci/if_bnx.c				1.29-1.30 via patch
+sys/dev/pci/if_bnxreg.h				1.9 via patch
+
+	Add support for the Broadcom BCM5709 and BCM5716 chips. Upgrade
+	the B06 firmware and add the B09 firmware required by the BCM5709.
+	Replace TX dmamap array with a dynamically-grown list.
+	Support associated BCM5709CAX and BCM5709C PHYs.
+	[bouyer, ticket #1268]
+
+sys/dev/pci/if_wm.c				1.184-1.192, 1.194 + patch
+sys/dev/pci/if_wmreg.h				1.29-1.35
+sys/dev/pci/if_wmvar.h				1.5-1.8 + patch
+sys/dev/pci/pcidevs		1.1006,1.1009-1.1010, 1.1012-1.1013 via patch
+sys/dev/pci/pcidevs.h				regen
+sys/dev/pci/pcidevs_data.h			regen
+sys/dev/mii/igphyreg.h				1.5
+sys/dev/mii/inbmphyreg.h			1.1
+
+	- Add support for i82583V.
+	- Add some ICH9 and ICH10 devices.
+	- Add support for PCH.
+	- Fix the bug that ICH9 can't found a PHY. Fixes PR#42237
+	- Fix an incorrect test for WM_F_EEPROM_INVALID since rev. 1.183.
+	  Some old chips don't set EECD_EE_PRES.
+	- Fix a bug that both WM_F_EEPROM_SPI and WM_F_EEPROM_FLASH are set.
+	- Add a missing decrement for a timeout reported by Wolfgang
+	  Stukenbrock in PR#42422.
+	- PBA setting for i82574 is not 12K but 20K.
+	- Enable checking the management mode on 82574.
+	- Fix the length of the delay() in wm_gmii_reset(). It fixed the
+	  problem that sometimes the driver misunderstood PHYs in
+	  mii_attach(). It was reported by MATSUI Yoshihiro. We observed
+	  it on ICH9.
+	- Fix the checking of jumbo frame function
+	- Remove the extra macro definition for the offset 0x1a in EEPROM.
+	- Add missing break in wm_reset()...
+	- Fix the offset of WMREG_PBS...
+	- Make wm_reset() and wm_gmii_reset() close to e1000 driver.
+	  At least, this change make wm_attach() stable on ICH9.
+	- Reset GMII interface after wm_reset() in wm_init().
+	- Rework for assigning mii_{read,write}reg(). Use PCI product ID
+	  to identify the PHY.
+	- Add code about LPLU(Low Power Link Up) function. It seems that
+	  we have to do the same work for ICH9.
+	- Fixes the rx stall problem on 82578 with a lot of workaround
+	  code. We need more work for 82577.
+	- Fix regression with i80003
+	[msaitoh, ticket #1277]
+
+libexec/ld.elf_so/map_object.c			1.39
+libexec/ld.elf_so/rtld.h			1.83
+libexec/ld.elf_so/symbol.c			1.49
+
+	Reset the COMBRELOC cache Obj_Entry if it was freed.
+	Fixes PR 41482.
+	[skrll, ticket #1266]
+
+sys/dev/cgd.c					1.69
+sys/dev/ata/wd.c				1.383 via patch
+sys/dev/dkwedge/dk.c				1.53
+sys/dev/vnd.c					1.206
+
+	struct buf::b_iodone is not called at splbio() any more.
+	Make sure non-MPsafe iodone callbacks raise the SPL as appropriate.
+	Fix buffer corruption issue in dk(4), and probably similar issues
+	in vnd(4) and cgd(4).
+	[bouyer, ticket #1269]
+
+external/mit/MesaLib/dist/src/mesa/glapi/glapi.c 1.2
+external/mit/MesaLib/dist/src/mesa/glapi/glapi_getproc.c 1.2
+external/mit/MesaLib/dist/src/mesa/glapi/glthread.c 1.2
+
+	Decorate some GL APIs with PUBLIC so they're available to link
+	against; otherwise, e.g., the swrast DRI module can't find
+	_glapi_check_multithread.
+	[rafal, ticket #1270]
+
+sys/arch/xen/xen/privcmd.c			1.40
+sys/arch/xen/x86/xen_bus_dma.c			1.16
+sys/arch/xen/xen/xengnt.c			1.17 via patch
+sys/arch/xen/xen/xennetback_xenbus.c		1.33
+
+	Fix address overflow with 32bit PAE.
+	[bouyer, ticket #1271]
+
+bin/pax/options.c				1.106
+
+	Don't use NOGLOB_MTCH for pax, only for tar. Fixes fix for PR 41167
+	and closes PR 42301.
+	[dholland, ticket #1272]
+
+etc/Makefile					1.377, 1.378
+
+	Fix installation permissions of /var/db/locate.database as per
+	PR misc/41544.
+	[dholland, ticket #1273]
+
+bin/sh/cd.c					1.40
+bin/sh/sh.1					1.95, 1.97 via patch
+
+	Make the cd builtin accept and ignore -P, which is a kshism that
+	has been allowed to leak into POSIX and selects the behavior cd
+	already implements.  Closes PR bin/42557 and also relevant to
+	PR pkg/42168.
+	[dholland, ticket #1274]
+
+common/lib/libc/hash/sha2/sha2.c		1.20
+
+	Fix unaligned access as reported in PR port-sparc/42273.
+	[joerg, ticket #1275]
+
+common/lib/libc/hash/sha2/sha2.c		1.21
+
+	Fix unaligned access in *_Final for SHA224/SHA256/SHA384.
+	Remaining part of PR 42273.
+	[joerg, ticket #1276]
+
+sys/external/bsd/drm/dist/bsd-core/drmP.h	1.16
+sys/external/bsd/drm/dist/bsd-core/drm_bufs.c	1.7
+sys/external/bsd/drm/dist/bsd-core/drm_memory.c	1.7
+
+	Support drm drivers (Intel G33/G45) submapping pci resources.
+	Fixes PR xsrc/42262.
+	[jmorse, ticket #1280]
+
+crypto/dist/ipsec-tools/src/racoon/isakmp.c	1.59
+crypto/dist/ipsec-tools/src/racoon/racoon.conf.5 1.57
+
+	Export ISAKMP SA identity as REMOTE_ID for phase1 up script.
+	[hubertf, ticket #1281]
+
+sys/dev/pckbport/pckbd.c			1.26
+sys/dev/pckbport/pms.c				1.28
+
+	Use aprint_error.
+	[hubertf, ticket #1282]
+
+share/man/man4/crypto.4				1.17
+
+	Fix typo: CIOCASSYMFEAT -> CIOCASYMFEAT
+	[hubertf, ticket #1285]
+
+dist/file/doc/file.1				patch
+dist/file/doc/libmagic.3			patch
+
+	Fix man page section numbers.
+	[dholland, ticket #1287]
+
+sys/kern/sys_aio.c				1.28 via patch
+
+	sys_aio_suspend, sys_lio_listio:
+	- fix the buffer sizes.
+	- use kmem_alloc instead of kmem_zalloc for buffers which we will
+	  overwrite soon.
+	[rmind, ticket #1288]
+
+external/bsd/fetch/dist/libfetch/common.c	libfetch-2-30
+external/bsd/fetch/dist/libfetch/common.h	libfetch-2-30
+external/bsd/fetch/dist/libfetch/errlist.sh	libfetch-2-30
+external/bsd/fetch/dist/libfetch/fetch.3	libfetch-2-30
+external/bsd/fetch/dist/libfetch/fetch.c	libfetch-2-30
+external/bsd/fetch/dist/libfetch/fetch.cat3 	libfetch-2-30
+external/bsd/fetch/dist/libfetch/fetch.h	libfetch-2-30
+external/bsd/fetch/dist/libfetch/file.c		libfetch-2-30
+external/bsd/fetch/dist/libfetch/ftp.c		libfetch-2-30
+external/bsd/fetch/dist/libfetch/ftp.errors	libfetch-2-30
+external/bsd/fetch/dist/libfetch/http.c		libfetch-2-30
+external/bsd/fetch/dist/libfetch/http.errors 	libfetch-2-30
+
+	Update libfetch to 2.30.
+	libfetch-2.25:
+	- address a number of lint warnings
+	- fix strict-alignment issues for GCC 4.4
+	- fix a bug in the line reading optimisation
+	- do not reuse a FTP connection if there is an active transfer on it
+
+	libfetch-2.26:
+	- Add support to aggressively cache directory listenings, useful for
+	  HTTP
+	- Avoid leaking memory in error cases. From Xavier from Arch Linux.
+
+	libfetch-2.30:
+	- Revamped connection cache, allowing more than one active session
+	- HTTP keep-alive support
+	[joerg, ticket #1294]
+
+external/bsd/pkg_install/dist/add/add.h		pkg_install-20100130
+external/bsd/pkg_install/dist/add/main.c	pkg_install-20100130
+external/bsd/pkg_install/dist/add/perform.c	pkg_install-20100130
+external/bsd/pkg_install/dist/add/pkg_add.1	pkg_install-20100130
+external/bsd/pkg_install/dist/admin/audit.c	pkg_install-20100130
+external/bsd/pkg_install/dist/admin/check.c	pkg_install-20100130
+external/bsd/pkg_install/dist/admin/main.c	pkg_install-20100130
+external/bsd/pkg_install/dist/admin/pkg_admin.1	pkg_install-20100130
+external/bsd/pkg_install/dist/bpm/bpm.1		pkg_install-20100130
+external/bsd/pkg_install/dist/create/build.c	pkg_install-20100130
+external/bsd/pkg_install/dist/create/create.h	pkg_install-20100130
+external/bsd/pkg_install/dist/create/main.c	pkg_install-20100130
+external/bsd/pkg_install/dist/create/perform.c	pkg_install-20100130
+external/bsd/pkg_install/dist/create/pkg_create.1 pkg_install-20100130
+external/bsd/pkg_install/dist/create/pl.c	pkg_install-20100130
+external/bsd/pkg_install/dist/delete/pkg_delete.1 pkg_install-20100130
+external/bsd/pkg_install/dist/delete/pkg_delete.1.in pkg_install-20100130
+external/bsd/pkg_install/dist/delete/pkg_delete.c pkg_install-20100130
+external/bsd/pkg_install/dist/info/info.h	pkg_install-20100130
+external/bsd/pkg_install/dist/info/main.c	pkg_install-20100130
+external/bsd/pkg_install/dist/info/perform.c	pkg_install-20100130
+external/bsd/pkg_install/dist/info/pkg_info.1	pkg_install-20100130
+external/bsd/pkg_install/dist/info/show.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/automatic.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/conflicts.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/decompress.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/dewey.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/fexec.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/file.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/global.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/gpgsig.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/iterate.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/lib.h		pkg_install-20100130
+external/bsd/pkg_install/dist/lib/license.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/lpkg.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/opattern.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/parse-config.c pkg_install-20100130
+external/bsd/pkg_install/dist/lib/pkcs7.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/pkg_install.conf.5.in pkg_install-20100130
+external/bsd/pkg_install/dist/lib/pkg_io.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/pkg_signature.c pkg_install-20100130
+external/bsd/pkg_install/dist/lib/pkg_summary.5	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/pkgdb.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/plist.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/remove.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/str.c		pkg_install-20100130
+external/bsd/pkg_install/dist/lib/var.c		pkg_install-20100130
+external/bsd/pkg_install/dist/lib/version.c	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/version.h	pkg_install-20100130
+external/bsd/pkg_install/dist/lib/vulnerabilities-file.c pkg_install-20100130
+external/bsd/pkg_install/dist/lib/xwrapper.c	pkg_install-20100130
+external/bsd/pkg_install/dist/x509/pkgsrc.cnf	pkg_install-20100130
+external/bsd/pkg_install/dist/x509/pkgsrc.sh	pkg_install-20100130
+
+	Update pkg_install to 20100130.
+	pkg_install-20091115:
+	Completely ignore @src in pkg_create. Silently ignore the -L
+	option.  The combination of -I and -p are used by pkgsrc for the
+	same result.
+
+	Do not overwrite a string with itself using snprintf. This breaks
+	setting the pkgdb directory internally on Linux. Explicitly check
+	if the string is the same and otherwise just use xstrdup.
+	
+	Add support to query arbitrary variables with pkg_admin config-var.
+	
+	pkg_install-20100130:
+	- pkg_add -U to rplace an installed version
+	- refactored man pages
+	- PKG_DBDIR / PKG_REFCOUNT_DBDIR as pkg_install.conf options
+	- synced license list
+	- use connection cache from libfetch
+	[joerg, ticket #1295]
+
+external/bsd/pkg_install/dist/add/perform.c		patch
+external/bsd/pkg_install/dist/bpm/bpm.1			patch
+external/bsd/pkg_install/dist/bpm/bpm.sh.in		patch
+external/bsd/pkg_install/dist/delete/pkg_delete.c	patch
+external/bsd/pkg_install/dist/lib/defs.h		patch
+external/bsd/pkg_install/dist/lib/lib.h			patch
+external/bsd/pkg_install/dist/lib/version.c		patch
+external/bsd/pkg_install/dist/lib/version.h		patch
+
+	Update pkg_install to 20100204.
+	- Restore PKG_PREFIX in pkg_delete (PR 42731)
+	- Ensure that the current pkg_install version is at least as new
+	  as the version used to build the package
+	[joerg, ticket #1298]
+
+sys/kern/vfs_syscalls.c				1.401
+sys/nfs/nfs_serv.c				1.149
+sys/sys/namei.src				1.14
+sys/sys/namei.h					regen
+
+	Define namei flag INRENAME and set it if a lookup operation is part
+	of rename.  This helps with building better asserts for rename in
+	the DELETE lookup ... the RENAME lookup is quite obviously a part
+	of rename.
+	[pooka, ticket #1289]
+
+sys/arch/x86/x86/pmap.c				1.100
+sys/arch/x86/x86/x86_autoconf.c			1.49
+sys/dev/pci/agp_via.c				1.18
+sys/kern/cnmagic.c				1.11
+sys/kern/init_main.c				1.415
+sys/kern/kern_ksyms.c				1.53
+sys/netipsec/ipsec.c				1.47
+sys/netipsec/key.c				1.63
+sys/netkey/key.c				1.176
+
+	Replace more printfs with aprint_normal / aprint_verbose
+	Makes "boot -z" go mostly silent for me.
+	[hubertf, ticket #1290]
+
+sys/opencrypto/cryptodev.c			1.52
+
+	Add missing "break" for CRYPTO_CAST_CBC, and some assorted comment
+	fixes.  openssl(1) checks for CAST (and others) on ~every startup.
+	[hubertf, ticket #1291]
+
+sys/kern/kern_malloc.c				1.128
+
+	Let kernel build when MALLOCLOG is defined but DIAGNOSTIC is not.
+	Else, hitmlog() is defined but not used, which triggers a warning.
+	[hubertf, ticket #1292]
+
+share/man/man9/opencrypto.9			1.9
+
+	Document sysctls
+	[hubertf, ticket #1293]
+
+etc/etc.sparc64/MAKEDEV.conf			1.14
+share/man/man4/man4.sparc64/sab.4		1.4
+sys/arch/sparc64/dev/sab.c			1.43, 1.44
+
+	Allow the RSC to be the console on an E250, by checking for
+	RSC-specific properties, and by not changing the port baud rate.
+	[jdc, ticket #1297]
+
+sys/ufs/ufs/ufs_lookup.c			1.102
+
+	Avoid undefined behavior. Code of the form
+
+	   vput(vp);
+	   error = VFS_VGET(vp->v_mount, ...);
+
+	just isn't right. Because of vnode caching this *probably* never bit
+	anyone, except maybe under very heavy load, but still.
+	[dholland, ticket #1300]
+
+sys/arch/hp700/conf/GENERIC			1.92
+
+	Add USERCONF as per all other GENERIC kernels
+	[skrll, ticket #1301]
+
+sys/dev/usb/ukbd.c				1.104, 1.107
+
+	Fix WSKBD_RAW mode ukbd -> pckbd translation for Pause/Break and
+	Print Screen/Sys Req keys so xf86-input-keyboard can figure out
+	what we want.
+	Additionally, fix dead URL, and add a note that this emulation
+	is not completely identical to a real pckbd.
+	[sborrill, ticket #1303]
+
+sys/arch/i386/stand/boot/boot2.c		1.48
+
+	When a password is set for the bootloader, make it actually inform
+	the user that the password is wrong when the password is entered wrong.
+	[hubertf, ticket #1304]
+
+distrib/pmax/instkernel/Makefile		patch
+
+	Bump the size of the pmax instkernel ramdisk to 2200k.
+	[snj, ticket #1305]
+
+sys/arch/i386/conf/XEN2_DOM0			patch
+sys/arch/i386/conf/XEN2_DOMU			patch
+sys/arch/amd64/conf/XEN3_DOM0			patch
+sys/arch/amd64/conf/XEN3_DOM0			patch
+
+	Enable cgd(4) support on all amd64 and i386 XEN kernels.
+	[tron, ticket #1306]
+
+sys/arch/i386/i386/ibcs2_machdep.c		1.40
+sys/arch/i386/i386/svr4_machdep.c		1.96
+
+	fix confused CS selector, fixes the panic reported by Mark Davis
+	per PR port-i386/42787 (the panic happens due to a GPF when a
+	privileged descriptor is tried to be loaded with the UPL bit set)
+	The original bug is very old (pre-2.0, i386/svr4_machdep.c rev. 1.69),
+	but it was relatively harmless until the order of GDT entries was
+	shuffled (pre-5.0, i386/segments.h rev. 1.42). Before, it caused
+	a userlevel data selector to be used for CS which broke the emulation
+	(likely the reason of PR port-i386/32424). The shuffle made that
+	a privileged selector was used, causing the GPF.
+	(recent -current doesn't panic on that GPF which seems to be a
+	side effect of another change)
+	[drochner, ticket #1307]
+
+tools/compat/getmode.c				1.8
+
+	include unistd.h where getmode is traditionally declared.
+	Fix build on OS X 10.6.
+	[snj, ticket #1308]
+
+sys/arch/xen/xen/isa_machdep.c			1.23
+sys/arch/xen/xen/pciide_machdep.c		1.17
+
+	Enlarge temporary buffer, so that event counter's name is not
+	truncated for ioapic interrupts.
+	[bouyer, ticket #1299]
+
+sys/ufs/ext2fs/ext2fs_inode.c			1.71
+sys/ufs/ffs/ffs_inode.c				1.104
+sys/ufs/lfs/lfs_inode.c				1.121
+sys/ufs/ufs/ufs_inode.c				1.79
+
+	Fix 2 issues with file system full or data block overquota
+	condition, which can lead to file data corruption, and eventually
+	metadata corruption:
+	- ufs_balloc_range(): on error, only PG_RELEASED the pages that
+	  were allocated to extend the file to the new size. Releasing all
+	  pages may release pages that contains previously-written data not
+	  yet flushed to disk. Should fix PR kern/35704
+	- {ffs,lfs,ext2fs}_truncate(): Even if the inode's size is the same
+	  as the new length, call uvm_vnp_setsize(). *_truncate() may have
+	  been called by *_write() in the error path (e.g. block allocation
+	  failure because of quota of file system full), and at this point
+	  v_writesize has been set to the desired size of the file and not
+	  reverted to the old size. Not adjusting v_writesize to the real
+	  size cause genfs_do_io() to write to disk past the real end of
+	  the file.
+	[bouyer, ticket #1302]
+
+usr.sbin/repquota/repquota.c			1.25
+
+	Make block fields one char wider; allows to sanely display quotas
+	up to 99.9GB while still fitting 80 columns.
+	[bouyer, ticket #1309]
+
+distrib/hp700/ramdisk/list			patch
+
+	Add dhclient to the hp700 install media.
+	[skrll, ticket #1311]
+
+sys/arch/hppa/hppa/vm_machdep.c			patch
+
+	Fix ticket #793: s/setfunc_trampoline/lwp_trampoline/.
+	[skrll, ticket #1312]
+
+sys/sys/atomic.h				1.11
+
+	Make atomics usable from C++.
+	[dholland, ticket #1314]
+
+sys/dev/raidframe/rf_netbsdkintf.c		1.272
+
+	Don't merge a good parity map with random stuff in the event that
+	the first component is missing.  (Since the merging just OR's the
+	maps, this isn't that big of a deal, as it will just over-estimate
+	the amount of checking that needs to be done.)
+	[oster, ticket #1324]
+
+sys/dev/raidframe/rf_paritymap.c		1.4
+
+	Don't attempt to read or write component label stuff from/to 'dead
+	disks'. Update used spares with the correct parity map bits too.
+	Addresses PR#42904.
+	[oster, ticket #1325]
+
+usr.bin/wc/wc.c					1.32-1.34
+usr.bin/wc/wc.1					1.14-1.15
+
+	Add support for "-L" option (longest line) as present in the GNU
+	and FreeBSD versions of "wc".
+	[tron, ticket #1313]
+
+include/math.h					1.51
+
+	Address PR#36988: ISO C99 mandates that HUGE_VAL, HUGE_VALF,
+	HUGE_VALL and INFINITY are constant expressions.
+	Use the GCC builtins if possible to implement them.
+	[joerg, ticket #1315]
+
+usr.sbin/altq/libaltq/qop_hfsc.c		1.9
+dist/pf/sbin/pfctl/pfctl_altq.c			1.9
+gnu/dist/binutils/libiberty/floatformat.c	patch
+gnu/dist/gcc4/libiberty/floatformat.c		1.2
+gnu/dist/gdb6/libiberty/floatformat.c		1.2
+
+	Fix standard-violating use of INFINITY in build of NetBSD/vax.
+	Use HUGE_VAL instead of INFINITY as positive infinity (or maximum
+	value) is good enough and the side effects of ISO C99 7.12 (4)
+	are not desired.
+	[joerg, ticket #1328]
+
+usr.bin/ldd/ldd.c				1.13
+
+	Mark each object as printed as visited and then print.
+	Fixes PR/42811. Improve print order.
+	[skrll, ticket #1318]
+
+crypto/dist/openssl/crypto/evp/m_sha1.c		patch
+
+	Ensure that SHA384 always calls the SHA384 functions.
+	Should fix PR#42881.
+	[joerg, ticket #1320]
+
+sys/dev/usb/umass.c				1.137 via patch
+sys/dev/usb/usbdevs				1.535 via patch
+sys/dev/usb/usbdevs.h				regen
+sys/dev/usb/usbdevs_data.h			regen
+
+	Add SuperTop and SuperTop IDE Bridge to usbdevs.
+	--
+	Max out the expected response size at the actual transfer length.
+	Fixes PR kern/42225.
+	[is/martin, ticket #1123]
+
+external/ibm-public/postfix/sbin/postconf/Makefile 1.2
+
+	Add nint_table.h and nint_vars.h to generated list files so that
+	they get removed during cleandir.
+	[veego, ticket #1329]
+
+sys/dev/usb/ugen.c				1.109
+
+	Replace USB_GET_SC() instances with USB_GET_SC_OPEN().  The latter
+	is exactly like the former, except it returns with ENXIO if sc is
+	NULL instead of continuing on to use it.  Most of the time this is
+	handled by the fd layer and you get EBADF, but sometimes it's
+	possible to race into the device method for whatever reason and
+	you get a kernel panic.
+	[pooka, ticket #1332]
+
+distrib/sets/lists/base/md.amd64		1.70 via patch
+distrib/sets/lists/base/md.sparc64		1.63 via patch
+distrib/sets/lists/base/shl.mi			1.495 via patch
+distrib/sets/lists/comp/mi			1.1317
+include/math.h					1.49
+lib/libm/Makefile				1.90
+lib/libm/man/fdim.3				1.1-1.3
+lib/libm/man/fmax.3				1.1-1.2
+lib/libm/shlib_version				1.10
+lib/libm/src/s_fdim.c				1.1-1.2
+lib/libm/src/s_fmax.c				1.1
+lib/libm/src/s_fmaxf.c				1.1
+lib/libm/src/s_fmaxl.c				1.1
+lib/libm/src/s_fmin.c				1.1
+lib/libm/src/s_fminf.c				1.1
+lib/libm/src/s_fminl.c				1.1
+
+	Add f{min,max,dim}{,l,f} from FreeBSD.
+	[snj, ticket #1330]
+
+lib/libc/stdlib/jemalloc.c			1.21
+
+	Fix race condition on reallocation of huge category. PR#42876.
+	[enami, ticket #1327]
+
+sys/dev/apm/apm.c				1.26
+
+	Fix apm(4) suspend/resume.
+	[bouyer, ticket #1337]
+
+lib/libpam/modules/pam_unix/pam_unix.c		1.14
+
+	When changing the password, don't clear PAM_AUTHTOK at the beginning.
+	[drochner, ticket #1336]
+
+usr.sbin/pppd/pppd/sys-bsd.c			1.62
+
+	PR/42943: Takashi Sogabe: pppd generates invalid netmask
+	[christos, ticket #1335]
+
+sys/arch/sparc64/sparc64/cpu.c			1.91 via patch
+
+	Don't print cache sizes * associativity.
+	[mrg, ticket #1331]
+
+sys/compat/common/vfs_syscalls_30.c		1.31
+sys/compat/ibcs2/ibcs2_misc.c			1.110
+sys/compat/irix/irix_dirent.c			1.24
+sys/compat/linux/common/linux_file64.c		1.50
+sys/compat/linux/common/linux_misc.c		1.214
+sys/compat/linux32/common/linux32_dirent.c	1.10
+sys/compat/sunos/sunos_misc.c			1.166
+sys/compat/sunos32/sunos32_misc.c		1.69
+sys/compat/svr4/svr4_misc.c			1.149
+sys/compat/svr4_32/svr4_32_misc.c		1.68
+
+	When implementing "read directory", when there are too many empty
+	entries in a row, and we need to try to read the next block, and
+	have passed a non-NULL cookie pointer to VOP_READDIR, ensure that
+	we free the cookie buffer before re-doing VOP_READDIR, so that we
+	don't leak memory.  This fix is similar to nfs_serv.c revisions
+	1.115 + 1.124.
+	This should fix the long-standing problem observed by e.g. using
+	Linux-emulated programs to take backup of servers, which is one of
+	the problems which were reported in PR#42661.
+	[he, ticket #1323]
+
+usr.bin/passwd/pam_passwd.c			1.6
+
+	Do not call pam_end with an invalid handle if pam_start failed.
+	[joerg, ticket #1333]
+
+sys/arch/sparc64/include/pmap.h			patch
+sys/arch/sparc64/sparc64/cache.h		patch
+sys/arch/sparc64/sparc64/ipifuncs.c		patch
+sys/arch/sparc64/sparc64/locore.s		patch
+sys/arch/sparc64/sparc64/machdep.c		patch
+sys/arch/sparc64/sparc64/pmap.c			patch
+
+	- flush the dcache around pmap_{zero,copy}_page()
+	- convert all blast_dcache() / dcache_flush_page() calls to
+	  properly handle flushes in all cpus as necessary
+	[mrg, ticket #1343]
+
+distrib/sets/lists/comp/mi			patch
+distrib/sets/lists/xcomp/md.macppc		patch
+distrib/sets/lists/xcomp/md.sgimips		patch
+distrib/sets/lists/xcomp/md.sparc		patch
+distrib/sets/lists/xcomp/md.sparc64		patch
+distrib/sets/lists/xcomp/mi			patch
+
+	Fix some set list issues with MKDEBUG=yes.
+	Fixes PR toolchain/42938.
+	[mrg, ticket #1342]
+
+sys/dev/wscons/wsemul_sun.c			1.28
+
+	Add mappings for KS_End/KS_KP_End, so that the `End' key actually
+	does something.
+	[jdc, ticket #1340]
+
+sys/sys/null.h					1.8
+
+	Enclose (void *)0 in an extra set of parenthese to make the result
+	usable in arbitrary expressions.  Fixes PR/41890.
+	[joerg, ticket #1344]
+
+sys/dev/ic/mfi.c				1.20, 1.23, 1.26, 1.30, 1.33 via patch
+sys/dev/ic/mfireg.h				1.4
+sys/dev/ic/mfivar.h				1.12, 1.14
+sys/dev/pci/mfi_pci.c				1.6-1.8, 1.10, 1.12
+sys/dev/pci/pcidevs				1.1020
+sys/dev/pci/pcidevs.h				regen
+sys/dev/pci/pcidevs_data.h			regen
+share/man/man4/mfi.4				1.9-1.10
+
+	Add support for MFI gen2 devices.  Mention newer devices, RAID 6 and
+	RAID60 in mfi.4.
+	[msaitoh, ticket #1326]
+
+crypto/dist/openssl/ssl/s3_pkt.c		patch
+
+	Apply patchset 19476 from openssl repository, fixing CVE-2010-0740.
+	From http://www.openssl.org/news/secadv_20100324.txt:
+	"In TLS connections, certain incorrectly formatted records can cause
+	an OpenSSL client or server to crash due to a read attempt at NULL".
+	[bouyer, ticket #1355]
+
+sys/kern/uipc_syscalls.c			patch
+
+	In do_sys_recvmsg(), call free(9) with the same type malloc(9) used.
+	[jakllsch, ticket #1352]                            
+ 
+sys/dev/ic/ahcisata_core.c			1.23, 1.24
+
+	- Clear port interrupt register before ahci_channel_start() which
+	  enables interrupts
+	- Wait 500ms after sata_reset_interface() before touching SERROR
+	  register.  This is what seems to fix the issue I'm seeming on ESB2
+	  controller.
+	- The 31s delay didn't cause the probe to fail because of a mismatch
+	  in loop index comparison; use a #define for delay after reset
+	  instead of numeric values, to avoid this kind of bugs in the
+	  future.
+	[bouyer, ticket #1317]
+
+crypto/dist/ipsec-tools/src/racoon/handler.c	1.31, 1.32 via patch
+
+	Fix a bug where racoon used a wrong IPsec-SA handle that was for
+	another peer if it received an ISAKMP message for IPsec-SA that has
+	the same message-id as the message-id that was received before.
+	[hubertf, ticket #1341]
+
+sys/external/bsd/drm/dist/bsd-core/drm_pci.c	1.8, 1.9
+
+	Fix some confusion between highest DMA address and the boundary not
+	to be crossed in a transfer.  Back out previous fixes which only
+	added to the confusion.
+	--
+	Don't pass "maxaddr" as a boundary in bus_dmamap_create() like rev
+	1.8 did for _alloc().
+	[mrg, ticket #1346]
+
+sys/arch/sparc64/dev/lom.c			1.6
+
+	Fix off-by-one in LOMlite hostname code.
+	[nakayama, ticket #1349]
+
+bin/pax/tar.1					1.28, 1.29
+
+	Document that the -X option of tar names a file containing exception
+	globs, not exception filenames, same as in gtar. Fixes PR bin/41168.
+	[dholland, ticket #1354]
+
+sys/arch/xen/xen/if_xennet.c			patch
+
+	Make it possible to use netbsd-5 domUs running on a Xen2 hypervisor.
+	This changes two panics to printfs.
+	[bad, ticket #1347]
+
+sys/dev/fss.c					1.64, 1.65
+sys/ufs/ffs/ffs_snapshot.c			1.96, 1.97
+sys/ufs/ufs/ufs_inode.c				1.80
+sys/ufs/ufs/ufs_vnops.c				1.180 via patch
+
+	sys/dev/fss.c:
+	- Fix a race where the backing store thread runs (and exits
+	  immediately) before kthread_create() returns.
+	- Remove unneeded vinvalbuf() on backing store as we don't use
+	  VOP_BMAP()/VOP_STRATEGY() here.
+
+	sys/ufs/ffs/ffs_snapshot.c:
+	- Fix a deadlock where fscow_disestablish() blocks because outstanding
+	  copy-on-write operations wait for si_snaplock.
+	- No longer abuse TAILQ internal data.
+
+	sys/ufs/ufs/ufs_inode.c:
+	- Allow ufs_inactive() while a file system is suspending.  Removes a
+	  possible deadlock between vrele() and ffs_sync() during suspension.
+
+	sys/ufs/ufs/ufs_vnops.c:
+	- ufs_rmdir(): move fstrans_done() after vput().  No more unlinked
+	  and zero-sized directory inodes in snapshots.
+	[hannken, ticket #1345]
+
+sys/arch/xen/x86/xen_bus_dma.c			1.20
+
+	Although Xen's documentation states that the address_bits field is
+	not used by XENMEM_decrease_reservation, it is checked by the
+	hypervisor. In certain circumstances (stack leak), the field could
+	have an improper value, leading to a fail of the hypercall.
+	Set it to 0 ("no addressing restriction") to avoid that.  This
+	should fix the rare "failed allocating DMA memory" encountered
+	under NetBSD dom0.
+	[jym, ticket #1334]
+
+xsrc/external/mit/xorg-server/dist/render/glyph.c 1.2
+
+	Merge fdo git change 185185eeb44a277c324be0f58a4b4a469b56b69b.
+	Fixes a crash when all glyphs of a given depth are freed, but not
+	all glyphsets.
+	<http://bugs.freedesktop.org/show_bug.cgi?id=20718>
+	[mrg, ticket #1361]
+
+external/mit/xorg/lib/dri/i915/Makefile		1.7
+external/mit/xorg/lib/dri/i965/Makefile		1.9
+external/mit/xorg/lib/dri/libmesa/Makefile	1.5
+
+	Fix a problem where GL applications would dump core when run under
+	the intel driver.  PR xsrc/42754.
+	[yhardy, ticket #1364]
+
+crypto/dist/openssl/ssl/s3_enc.c		1.2 via patch
+crypto/dist/openssl/ssl/s3_srvr.c		1.5 via patch
+crypto/dist/openssl/ssl/t1_enc.c		1.2 via patch
+
+	Fix crash in openssl: handshake_dgst[] may be used without being
+	allocated, causing NULL pointer dereference.
+	Fix by checking that handshake_dgst is not NULL before use.
+	[bouyer, ticket #1365]
+
+libexec/ftpd/popen.c				1.37
+libexec/ftpd/version.h				1.74
+
+	PR/43023: FTPD bug remote crash.  Since we specify NOCHECK, in the
+	NOMATCH case gl_pathv can be NULL.
+	Update version to 20100320.
+	[lukem, ticket #1372]
+
+external/bsd/openldap/dist/libraries/libldap/tls.c patch
+
+	Fix CVE-2009-3767.
+	[lukem, ticket #1374]
+
+sys/arch/amd64/amd64/locore.S			1.56
+
+	When kernel remaps to high memory in amd64 locore, the GDT used
+	before becomes invalid. As such, split it in two parts, one for
+	use when system boots in low memory, and one for use when it jumps
+	to high memory.
+	[jym, ticket #1376]
+
+sys/arch/x86/x86/identcpu.c			1.19
+
+	Fix a test semantic in cpu_probe(): check that the CPU currently
+	probed is the first one booting by comparing its struct cpu_info
+	address with cpu_info_primary, rather than supposing that
+	cpu_feature variables are set to 0.
+	[jym, ticket #1377]
+
+sys/arch/amd64/amd64/locore.S			patch
+sys/arch/amd64/amd64/machdep.c			patch
+sys/arch/amd64/amd64/mptramp.S			patch
+sys/arch/i386/i386/machdep.c			patch
+sys/arch/i386/isa/npx.c				patch
+sys/arch/x86/include/cpu.h			patch
+sys/arch/x86/include/cpuvar.h			patch
+sys/arch/x86/x86/cpu.c				patch
+sys/arch/x86/x86/cpu_topology.c			patch
+sys/arch/x86/x86/identcpu.c			patch
+sys/arch/x86/x86/pmap.c				patch
+sys/arch/xen/x86/cpu.c				patch
+
+	Fix the NX regression issue observed on amd64 kernels, where
+	per-page execution right was disabled (therefore leading to the
+	inability of the kernel to detect fraudulent use of memory mappings
+	marked as not being executable).
+	[jym, ticket #1380]
+
+distrib/notes/common/contents			patch
+distrib/notes/common/main			patch
+
+	Update for 5.1_RC1.
+	[snj]
+
+gnu/usr.bin/groff/tmac/mdoc.local		patch
+sys/sys/param.h					patch
+
+	Welcome to 5.1_RC1!
+	[snj]
+
+lib/libpthread/pthread.c			1.114, 1.115
+
+	Correctly set pt_lid in the child, after a fork
+	--
+	Fix the pthread pt_lid in the fork callback function that runs in
+	the child instead of a function that may be going away.
+	[explorer, ticket #1353]
+
+distrib/utils/sysinst/mbr.c			1.83
+
+	The 16bit "bootmenu valid" magic is slightly weak; collisions have
+	been seen in the wild. So, before accepting arbitrary strings from
+	there, validate at least slightly and ignore if the entries are
+	not properly 0 terminated or contain control characters.
+	[martin, ticket #1375]
+
+sys/net/bpf_filter.c				1.36
+
+	The correct check for BPF_K is with BPF_SRC for BPF_ALU ops.
+	Fixes possible division-by-zero crashes by evil filter expressions
+	like "len / 0 = 1".  Fixes PR kern/43185.
+	[drochner, ticket #1381]
+
+crypto/external/bsd/openssh/dist/ssh_config	1.3 via patch
+crypto/external/bsd/openssh/dist/ssh_config.5	1.3 via patch
+crypto/external/bsd/openssh/dist/sshd_config.5	1.4 via patch
+
+	Don't mention "umac-64@openssh.com" MAC algorithm which is not
+	enabled in our SSH client and daemon as it causes crashes on
+	architectures which strict aligment requirements (e.g.,
+	NetBSD/sparc64).  PR bin/43221.
+	[drochner, ticket #1384]
+
+sys/conf/copyright				1.7
+
+	Welcome to 2010.
+	[tsutsui, ticket #1388]
+
+distrib/utils/sysinst/mbr.c			1.84
+distrib/utils/sysinst/msg.mbr.de		1.10
+distrib/utils/sysinst/msg.mbr.en		1.14
+distrib/utils/sysinst/msg.mbr.es		1.5
+distrib/utils/sysinst/msg.mbr.fr		1.16
+distrib/utils/sysinst/msg.mbr.pl		1.12
+
+	Fix a varargs argument type mismatch on 32bit archs - change format
+	to explicitly use %lu and cast the passed value accordingly.
+	[martin, ticket #1396]
+
+distrib/amd64/floppies/common/boot.cfg		1.3
+
+	Update boot.cfg banner/menu to reflect that installation floppies
+	have ACPI support.
+	[dholland, ticket #1400]
+
+sys/arch/i386/i386/trap.c			1.251-1.253 via patch
+sys/arch/i386/i386/vector.S			1.50-1.51 via patch
+
+	If we fault on the 'iret' during return to userpace (eg if %eip is
+	outside the bounds of %cs) then hack the stack to contain a normal
+	fault frame for the signal setup code (etc).
+	Previously the code assumed that the original user trap frame was
+	still present - at it is for faults when loading the segment
+	registers.
+	--
+	If we fault on the iret during return to userspace, see if we need
+	to do a lazy update of %cs to make the stack executable.  If a
+	change is made, just retry the failing sequence.  Signal handlers
+	as gcc nested local functions now work!
+	--
+	Fix 'fault on load of %gs during retirn to userspace' to look for
+	the correct instruction bytes.  Take the 'fault on load segment
+	register' through the same path as 'fault on iret' so we don't have
+	to fixup the broken stackframe that contains a mix of user and
+	kernel registers. Update comments about how the faults during
+	return to userspace are processed.  Setting an invalid %gs in the
+	saved context of a signal handler causes a SIGSEGV handler to be
+	entered with what look like valid registers.
+	[riz, ticket #1401]
+
+sys/arch/i386/i386/pmc.c			patch
+sys/arch/x86/x86/via_padlock.c			patch
+
+	Fix build of the i386 ALL kernel.
+	[sborrill, ticket #1404]
+
+gnu/usr.bin/groff/tmac/mdoc.local		patch
+sys/sys/param.h					patch
+
+	Welcome to 5.1_RC2!
+	[snj]
+
+sys/netinet/tcp_input.c				1.304-305
+
+	Avoid KASSERT() in kern_timeout.c because pool_put() is called from
+	ipintr context.
+	[bouyer, ticket #1382]
+
+sys/kern/vfs_xattr.c				1.21 via patch
+
+	Don't namei while holding vnode lock.  kern/43328
+	[pooka, ticket #1405]
+
+sys/dev/usb/ehci.c				1.167
+
+	ehci(4) workaround for Nvidia controllers.  Fixes PR#37884.
+	[jakllsch, ticket #1409]
+
+sbin/disklabel/interact.c			1.34 via patch
+
+	Change getnum() to use intmax_t instead of int, so it doesn't overflow
+	between 2^31 and 2^32. Adjust call sites accordingly. PR 43354.
+	[dholland, ticket #1410]
+
+distrib/notes/common/xfer			1.68
+
+	Update IP addresses (both IPv4 and IPv6) of current ftp.NetBSD.org.
+	[tsutsui, ticket #1408]
+
+UPDATING					1.197 via patch
+
+	add a note about native xorg updates
+	[mrg, ticket #1413]
+
+sys/net/if.c					1.244
+
+	Correct the argument order of ifreqn2o conversion.  Fixes PR/42585.
+	[skrll, ticket #1416]
+
+gnu/usr.bin/groff/tmac/mdoc.local		patch
+sys/sys/param.h					patch
+
+	Welcome to 5.1_RC3!
+	[riz]
+
+usr.bin/sort/fsort.c				1.47
+usr.bin/sort/msort.c				1.30
+usr.bin/sort/sort.c				1.58
+usr.bin/sort/sort.h				1.31
+
+	Fix a segfault on large input files.
+	[dholland, ticket #1420]
+
+sys/arch/amiga/amiga/amiga_init.c		1.118
+sys/arch/amiga/amiga/locore.s			1.149 via patch
+sys/arch/amiga/dev/clock.c			1.51
+sys/arch/amiga/dev/kbd.c			1.53
+
+	Fix keyboard handshake problems with some A1200 models and
+	restore precision for short delays on DraCo systems.
+	[phx, ticket #1412]
+
+sys/nfs/nfs_bio.c				1.185
+
+	Fix memory leak during some NFS writes.
+	[jakllsch, ticket #1417]
+
+lib/libc/misc/initfini.c			1.6
+lib/libc/stdlib/exit.c				1.12
+
+	Ensure that initfini.c is referenced by exit.c. Fixes PR 37454.
+	[joerg, ticket #1423]
+
+sys/arch/amd64/amd64/netbsd32_machdep.c		patch
+sys/arch/i386/i386/trap.c			patch
+
+	Fix several panics that can be caused by applications using
+	bad segment register values with setcontext() or sigreturn().
+	[chs, ticket #1424]
+
+sys/netsmb/mchain.h				1.9
+sys/netsmb/smb_dev.h				1.7
+sys/netsmb/smb_subr.c				1.35
+sys/netsmb/smb_subr.h				1.19
+sys/netsmb/subr_mchain.c			1.19
+
+	Convert sizes/lengths to unsigned (size_t) or uint32_t
+	(for binary compatibility).
+	[christos, ticket #1426]
+
+gnu/dist/binutils/gas/config/atof-vax.c		patch
+gnu/dist/binutils/gas/atof-generic.c		patch
+
+	Fix vax FP handling, from Matt Thomas. PR#43303.
+	[jklos, ticket #1427]
+
+sys/netinet6/udp6_output.c			1.41 via patch
+
+	udp6_output(): call ip6_clearpktopts(&opt, ...) only if opt
+	was initialized.
+	[dyoung, ticket #1428]
+
+crypto/dist/ssh/sftp-glob.c			patch
+crypto/dist/ssh/sftp.c				patch
+lib/libc/gen/glob.3				1.37 via patch
+lib/libc/gen/glob.c				1.25-1.26
+
+	Fix globbing in libc and sftp.
+	[christos, ticket #1430]
+
+sys/coda/coda.h					1.16
+sys/coda/coda_venus.c				1.28
+sys/coda/coda_vnops.c				1.76
+
+	Correct incomplete size checks for the coda ioctls.
+	[christos, ticket #1431]
+
+sys/arch/x86/x86/intel_busclock.c		1.11
+
+	Some core i7 CPUs report model 0c. In this case, check for the extended
+	model value.
+	Required to avoid faulting on rdmsr(MSR_FSB_FREQ) early during boot.
+	[jym, ticket #1439]
+
+sys/kern/exec_subr.c				1.65
+sys/kern/kern_pax.c				1.24
+
+	Fix issues with stack allocation and pax aslr:
+	- since the size is unsigned, don't check just that it is > 0,
+	  but limit it to the MAXSSIZ
+	- if the stack size is reduced because of aslr, make sure we reduce
+	  the actual allocation by the same size so that the size does not
+	  wrap around.
+	[christos, ticket #1444]
+
+crypto/external/bsd/openssl/dist/ssl/s3_clnt.c	1.2 via patch
+
+	fix CVE-2010-2939:
+	a double free() in error case cause a SEGV, see the thread
+	"openssl-1.0.0a and glibc detected sthg ;)" in openssl-dev.
+	[drochner, ticket #1447]
+
+sys/miscfs/genfs/genfs_io.c			1.40 via patch
+sys/miscfs/genfs/genfs_node.h			1.20 via patch
+sys/miscfs/genfs/genfs_vnops.c			1.183 via patch
+sys/ufs/ufs/ufs_inode.c				1.83 via patch
+sys/uvm/uvm_pager.h				1.39 via patch
+
+	replace the earlier workaround for PR 40389 with a better fix.
+	the earlier change caused data corruption by freeing pages
+	without invaliding their mappings.  instead of the trylock/retry,
+	just take the genfs-node lock before calling VOP_GETPAGES()
+	and pass a new flag to tell it that we're already holding this lock.
+	[chs, ticket #1448]
+
+sys/arch/amd64/amd64/netbsd32_machdep.c		1.66, 1.67
+sys/arch/amd64/include/segments.h		1.21
+
+	in check_mcontext32(), accept the LDT selector for 32-bit user code
+	as well as the GDT selector.  fixes PR 43835.
+	accept the LDT selector in check_sigcontext32() too.
+	[chs, ticket #1449]
+
+lib/libc/stdlib/exit.c				1.13
+
+	Only do the __libc_init hack in libc, i.e. remove it from
+	ld.elf_so.  This fixes hppa ld.elf_so by reducing the number of
+	PLABELs required to the number before the hack was applied.
+	[skrll, ticket #1451]
+
+sys/dist/ipf/netinet/ip_fil_netbsd.c		1.56
+
+	- Fix mbuf corruption when sending ICMP errors for blocked IPv6
+	packets due to wrong buffer size computations. The corrupted
+	mbufs could lead to a panic.
+	- Fix computation of link mtu where the link mtu itself is
+	unspecified.
+	- Limit ICMP error packets for IPv6 to MMTU as required by RFC4443.
+	This also avoids dropped errors when the length exceeds the link
+	mtu.
+	[mlelstv, ticket #1453]
+
+sys/kern/vfs_wapbl.c				patch
+
+	Fix inconsistencies in the wapbl replay process which can lead to
+	a premature abort of the fsck run and possibly leave a corrupted
+	filesystem.  Addresses PR bin/43336.
+	[drochner, ticket #1454]
+
+gnu/usr.bin/groff/tmac/mdoc.local		patch
+sys/sys/param.h					patch
+
+	Welcome to 5.1_RC4!
+	[snj]
+
+dist/bzip2/decompress.c				1.2
+
+	Avoid integer overflow that can lead to buffer overflow.
+	[christos, ticket #1455]
+
+libexec/httpd/bozohttpd.c			patch
+
+	Fix a serious error in vhost handling; "Host:.." would allow
+	access to the next level directory from the virtual root directory.
+	[mrg, ticket #1456]
+
+share/man/man4/hdaudio.4			1.5, 1.6
+
+	Correct spelling: "HDAUDIO_AFG_DEBUG"
+	--
+	hdaudio appeared in 5.1. Add xref to hdaudioctl(8).
+	[wiz, ticket #1457]
+
+distrib/notes/common/main			1.467
+distrib/notes/macppc/prep.OPENFIRMWARE		1.14
+sys/arch/i386/stand/misc/Makefile		1.7
+sys/arch/i386/stand/misc/rawr32.exe.uue		1.1
+sys/arch/i386/stand/misc/rawr32.zip.uue		delete
+sys/arch/i386/stand/misc/rawr32src.zip.uue	delete
+
+	Update Rawrite32 to the latest version
+	[martin, ticket #1465]
+
+distrib/notes/common/main                       patch
+
+        Update for 5.1.
+        [pooka, snj, sborrill]
+
+doc/LAST_MINUTE					patch
+doc/README.files				patch
+gnu/usr.bin/groff/tmac/mdoc.local               patch
+sys/sys/param.h                                 patch
+
+        Welcome to 5.1!
+        [snj]
+
Index: /trunk/src/doc/LAST_MINUTE
===================================================================
--- /trunk/src/doc/LAST_MINUTE	(revision 151)
+++ /trunk/src/doc/LAST_MINUTE	(revision 152)
@@ -1,5 +1,5 @@
-#	$NetBSD: LAST_MINUTE,v 1.2.30.1 2008/10/31 03:49:53 agc Exp $
+#	$NetBSD: LAST_MINUTE,v 1.2.30.1.4.1 2011/05/20 08:11:16 matt Exp $
 
-This file contains important information on the NetBSD 5.0 release that
+This file contains important information on the NetBSD 5.1 release that
 did not make it into the main documentation.
 
Index: /trunk/src/doc/README.files
===================================================================
--- /trunk/src/doc/README.files	(revision 151)
+++ /trunk/src/doc/README.files	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: README.files,v 1.4.10.2 2009/04/24 06:33:06 snj Exp $
+#	$NetBSD: README.files,v 1.4.10.2.4.1 2011/05/20 08:11:16 matt Exp $
 
 What's in this directory:
@@ -6,4 +6,6 @@
 
 CHANGES-5.0	Changes between the initial 5.0 branch and final release of 5.0.
+
+CHANGES-5.1	Changes between the 5.0 and 5.1 releases.
 
 CHANGES.prev	Changes in previous NetBSD releases.
@@ -21,5 +23,5 @@
 In addition to the files and directories listed above, there is one
 directory per architecture, for each of the architectures for which
-NetBSD 5.0 has a binary distribution.  The contents of each
+NetBSD 5.1 has a binary distribution.  The contents of each
 architecture's directory are described in an "INSTALL" file found in
 that directory.
Index: /trunk/src/gnu/dist/binutils/bfd/aoutx.h
===================================================================
--- /trunk/src/gnu/dist/binutils/bfd/aoutx.h	(revision 151)
+++ /trunk/src/gnu/dist/binutils/bfd/aoutx.h	(revision 152)
@@ -797,4 +797,5 @@
 	case bfd_mach_mipsisa64r2:
 	case bfd_mach_mips_sb1:
+	case bfd_mach_mips_xlr:
 	  /* FIXME: These should be MIPS3, MIPS4, MIPS16, MIPS32, etc.  */
 	  arch_flags = M_MIPS2;
Index: /trunk/src/gnu/dist/binutils/bfd/archures.c
===================================================================
--- /trunk/src/gnu/dist/binutils/bfd/archures.c	(revision 151)
+++ /trunk/src/gnu/dist/binutils/bfd/archures.c	(revision 152)
@@ -156,4 +156,5 @@
 .#define bfd_mach_mips5                 5
 .#define bfd_mach_mips_sb1              12310201 {* octal 'SB', 01 *}
+.#define bfd_mach_mips_xlr              887682   {* decimal 'XLR'  *}
 .#define bfd_mach_mipsisa32             32
 .#define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/dist/binutils/bfd/bfd-in2.h
===================================================================
--- /trunk/src/gnu/dist/binutils/bfd/bfd-in2.h	(revision 151)
+++ /trunk/src/gnu/dist/binutils/bfd/bfd-in2.h	(revision 152)
@@ -1608,4 +1608,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/dist/binutils/bfd/cpu-mips.c
===================================================================
--- /trunk/src/gnu/dist/binutils/bfd/cpu-mips.c	(revision 151)
+++ /trunk/src/gnu/dist/binutils/bfd/cpu-mips.c	(revision 152)
@@ -87,4 +87,5 @@
   I_mipsisa64r2,
   I_sb1,
+  I_xlr
 };
 
@@ -119,5 +120,7 @@
   N (64, 64, bfd_mach_mipsisa64,  "mips:isa64",   FALSE, NN(I_mipsisa64)),
   N (64, 64, bfd_mach_mipsisa64r2,"mips:isa64r2", FALSE, NN(I_mipsisa64r2)),
-  N (64, 64, bfd_mach_mips_sb1, "mips:sb1",       FALSE, 0),
+  N (64, 64, bfd_mach_mips_sb1, "mips:sb1",       FALSE, NN(I_sb1)),
+  N (64, 64, bfd_mach_mips_xlr, "mips:xlr",       FALSE, 0)
+
 };
 
Index: /trunk/src/gnu/dist/binutils/bfd/elfxx-mips.c
===================================================================
--- /trunk/src/gnu/dist/binutils/bfd/elfxx-mips.c	(revision 151)
+++ /trunk/src/gnu/dist/binutils/bfd/elfxx-mips.c	(revision 152)
@@ -4688,4 +4688,7 @@
     case E_MIPS_MACH_SB1:
       return bfd_mach_mips_sb1;
+
+    case E_MIPS_MACH_XLR:
+      return bfd_mach_mips_xlr;
 
     default:
@@ -7987,4 +7990,8 @@
       break;
 
+    case bfd_mach_mips_xlr:
+      val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
+      break;
+
     case bfd_mach_mipsisa32:
       val = E_MIPS_ARCH_32;
@@ -9655,4 +9662,5 @@
   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
+  { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
 
   /* MIPS V extensions.  */
Index: /trunk/src/gnu/dist/binutils/binutils/readelf.c
===================================================================
--- /trunk/src/gnu/dist/binutils/binutils/readelf.c	(revision 151)
+++ /trunk/src/gnu/dist/binutils/binutils/readelf.c	(revision 152)
@@ -2047,4 +2047,5 @@
 	    case E_MIPS_MACH_SB1:  strcat (buf, ", sb1");  break;
 	    case E_MIPS_MACH_9000: strcat (buf, ", 9000"); break;
+	    case E_MIPS_MACH_XLR:  strcat (buf, ", xlr");  break;
 	    case 0:
 	    /* We simply ignore the field in this case to avoid confusion:
Index: /trunk/src/gnu/dist/binutils/gas/atof-generic.c
===================================================================
--- /trunk/src/gnu/dist/binutils/gas/atof-generic.c	(revision 151)
+++ /trunk/src/gnu/dist/binutils/gas/atof-generic.c	(revision 152)
@@ -124,4 +124,30 @@
   switch (first_digit[0])
     {
+    case 's':
+    case 'S':
+	if (!strncasecmp ("snan", first_digit, 4))
+	{
+	  address_of_generic_floating_point_number->sign = 0;
+	  address_of_generic_floating_point_number->exponent = 0;
+	  address_of_generic_floating_point_number->leader =
+	    address_of_generic_floating_point_number->low;
+	  *address_of_string_pointer = first_digit + 4;
+	  return 0;
+	}
+      break;
+
+    case 'q':
+    case 'Q':
+      if (!strncasecmp ("qnan", first_digit, 4))
+	{
+	  address_of_generic_floating_point_number->sign = 0;
+	  address_of_generic_floating_point_number->exponent = 0;
+	  address_of_generic_floating_point_number->leader =
+	    address_of_generic_floating_point_number->low;
+	  *address_of_string_pointer = first_digit + 4;
+	  return 0;
+	}
+      break;
+
     case 'n':
     case 'N':
Index: /trunk/src/gnu/dist/binutils/gas/config/atof-vax.c
===================================================================
--- /trunk/src/gnu/dist/binutils/gas/config/atof-vax.c	(revision 151)
+++ /trunk/src/gnu/dist/binutils/gas/config/atof-vax.c	(revision 152)
@@ -297,8 +297,25 @@
 	  LITTLENUM_TYPE word1;
 
-	  /* JF: Deal with new Nan, +Inf and -Inf codes */
 	  if (f->sign != '-' && f->sign != '+')
 	    {
-	      make_invalid_floating_point_number (words);
+	      if (f->sign == 0)
+		{
+		  /* All NaNs are 0.  */
+		  memset (words, 0x00, sizeof (LITTLENUM_TYPE) * precision);
+		}
+	      else if (f->sign == 'P')
+		{
+		  /* Positive Infinity.  */
+		  memset (words, 0xff, sizeof (LITTLENUM_TYPE) * precision);
+		  words[0] &= 0x7fff;
+		}
+	      else if (f->sign == 'N')
+		{
+		  /* Negative Infinity.  */
+		  memset (words, 0x00, sizeof (LITTLENUM_TYPE) * precision);
+		  words[0] = 0x0080;
+		}
+	      else
+		make_invalid_floating_point_number (words);
 	      return return_value;
 	    }
Index: /trunk/src/gnu/dist/binutils/gas/config/tc-mips.c
===================================================================
--- /trunk/src/gnu/dist/binutils/gas/config/tc-mips.c	(revision 151)
+++ /trunk/src/gnu/dist/binutils/gas/config/tc-mips.c	(revision 152)
@@ -5434,4 +5434,41 @@
       break;
 
+    case M_MSGSND:
+      {
+	unsigned long temp = (treg << 16) | (0x01);
+	macro_build (NULL, "c2", "C", temp);
+      }
+      /* AT is not used, just return */
+      return;
+
+    case M_MSGLD:
+      {
+	unsigned long temp = (0x02);
+	macro_build (NULL, "c2", "C", temp);
+      }
+      /* AT is not used, just return */
+      return;
+
+    case M_MSGLD_T:
+      {
+	unsigned long temp = (treg << 16) | (0x02);
+	macro_build (NULL, "c2", "C", temp);
+      }
+      /* AT is not used, just return */
+      return;
+
+    case M_MSGWAIT:
+      macro_build (NULL, "c2", "C", 3);
+      /* AT is not used, just return */
+      return;
+
+    case M_MSGWAIT_T:
+      {
+	unsigned long temp = (treg << 16) | 0x03;
+	macro_build (NULL, "c2", "C", temp);
+      }
+      /* AT is not used, just return */
+      return;
+
     case M_J_A:
       /* The j instruction may not be used in PIC code, since it
@@ -13799,4 +13836,7 @@
   { "sb1",            0,      ISA_MIPS64,     CPU_SB1 },
 
+  /* RMI Xlr */
+  { "xlr",	      0,      ISA_MIPS64,     CPU_XLR },
+
   /* End marker */
   { NULL, 0, 0, 0 }
Index: /trunk/src/gnu/dist/binutils/gas/doc/c-mips.texi
===================================================================
--- /trunk/src/gnu/dist/binutils/gas/doc/c-mips.texi	(revision 151)
+++ /trunk/src/gnu/dist/binutils/gas/doc/c-mips.texi	(revision 152)
@@ -192,5 +192,6 @@
 12000,
 mips32-4k,
-sb1
+sb1,
+xlr
 @end quotation
 
Index: /trunk/src/gnu/dist/binutils/gas/testsuite/gas/mips/mips.exp
===================================================================
--- /trunk/src/gnu/dist/binutils/gas/testsuite/gas/mips/mips.exp	(revision 151)
+++ /trunk/src/gnu/dist/binutils/gas/testsuite/gas/mips/mips.exp	(revision 152)
@@ -383,5 +383,6 @@
 			{ -march=sb1 -mtune=sb1 } { -mmips:sb1 } \
 			{ mipsisa64sb1-*-* mipsisa64sb1el-*-* }
-
+mips_arch_create xlr	64	mips64 {} \
+			{ -march=xlr -mtune=xlr } { -mmips:xlr }
 
 #
@@ -576,4 +577,5 @@
 	run_dump_test "sb1-ext-mdmx"
 	run_dump_test "sb1-ext-ps"
+	run_dump_test "xlr-ext"
     }
 
Index: /trunk/src/gnu/dist/binutils/gas/testsuite/gas/mips/xlr-ext.d
===================================================================
--- /trunk/src/gnu/dist/binutils/gas/testsuite/gas/mips/xlr-ext.d	(revision 152)
+++ /trunk/src/gnu/dist/binutils/gas/testsuite/gas/mips/xlr-ext.d	(revision 152)
@@ -0,0 +1,20 @@
+#objdump: -dr --prefix-addresses --show-raw-insn -mmips:xlr
+#name: XLRs native MIPS64 extensions
+#as: -march=xlr
+
+.*: +file format .*mips.*
+
+Disassembly of section .text:
+0+0000 <[^>]*> 3c000000 	lui	zero,0x0
+0+0004 <[^>]*> 8c010001 	lw	at,1\(zero\)
+0+0008 <[^>]*> 8c020002 	lw	v0,2\(zero\)
+0+000c <[^>]*> 70221838 	daddwc	v1,at,v0
+0+0010 <[^>]*> 70230010 	ldaddw	v1,at
+0+0014 <[^>]*> 70230011 	ldaddwu	v1,at
+0+0018 <[^>]*> 70230012 	ldaddd	v1,at
+0+001c <[^>]*> 70230014 	swapw	v1,at
+0+0020 <[^>]*> 70230015 	swapwu	v1,at
+0+0024 <[^>]*> 4a000003 	c2	0x3
+0+0028 <[^>]*> 4a000002 	c2	0x2
+0+002c <[^>]*> 4a000001 	c2	0x1
+	\.\.\.
Index: /trunk/src/gnu/dist/binutils/gas/testsuite/gas/mips/xlr-ext.s
===================================================================
--- /trunk/src/gnu/dist/binutils/gas/testsuite/gas/mips/xlr-ext.s	(revision 152)
+++ /trunk/src/gnu/dist/binutils/gas/testsuite/gas/mips/xlr-ext.s	(revision 152)
@@ -0,0 +1,27 @@
+# Source file used to test XLR's assembler instructions
+
+	.set 	noreorder
+	.set 	noat
+
+	.globl	text_label	.text
+text_label:	
+
+	lui     $0, 0x00
+	lw 	    $1, 0x01
+	lw 	    $2, 0x02
+	
+	daddwc	$3, $1, $2
+	
+	ldaddw	$3, $1
+	ldaddwu	$3, $1
+	ldaddd	$3, $1
+
+	swapw	$3, $1
+	swapwu	$3, $1
+	
+	msgwait
+	msgld	$0
+	msgsnd	$0
+
+# Force at least 8 (non-delay-slot) zero bytes, to make 'objdump' print ...
+	.space  8
Index: /trunk/src/gnu/dist/binutils/include/elf/mips.h
===================================================================
--- /trunk/src/gnu/dist/binutils/include/elf/mips.h	(revision 151)
+++ /trunk/src/gnu/dist/binutils/include/elf/mips.h	(revision 152)
@@ -210,4 +210,5 @@
 #define E_MIPS_MACH_4111	0x00880000
 #define E_MIPS_MACH_SB1         0x008a0000
+#define E_MIPS_MACH_XLR		0x008c0000
 #define E_MIPS_MACH_5400	0x00910000
 #define E_MIPS_MACH_5500	0x00980000
Index: /trunk/src/gnu/dist/binutils/include/opcode/mips.h
===================================================================
--- /trunk/src/gnu/dist/binutils/include/opcode/mips.h	(revision 151)
+++ /trunk/src/gnu/dist/binutils/include/opcode/mips.h	(revision 152)
@@ -411,4 +411,7 @@
 #define INSN_ISA64R2              0x00000100
 
+/* Masks used for Chip specific instructions.  */
+#define INSN_CHIP_MASK		  0xc3ff0820
+
 /* Masks used for MIPS-defined ASEs.  */
 #define INSN_ASE_MASK		  0x0000f000
@@ -443,4 +446,6 @@
 /* NEC VR5500 instruction.  */
 #define INSN_5500		  0x02000000
+/* RMI Xlr instruction.  */
+#define INSN_XLR		  0x00000020
 
 /* MIPS ISA defines, use instead of hardcoding ISA level.  */
@@ -490,4 +495,6 @@
 #define CPU_MIPS64R2	65
 #define CPU_SB1         12310201        /* octal 'SB', 01.  */
+#define CPU_XLR		887682		/* decimal 'XLR'   */
+
 
 /* Test for membership in an ISA including chip specific ISAs.  INSN
@@ -511,4 +518,5 @@
      || (cpu == CPU_VR5400 && ((insn)->membership & INSN_5400) != 0)	\
      || (cpu == CPU_VR5500 && ((insn)->membership & INSN_5500) != 0)	\
+     || (cpu == CPU_XLR && ((insn)->membership & INSN_XLR) != 0)	\
      || 0)	/* Please keep this term for easier source merging.  */
 
@@ -641,4 +649,9 @@
   M_LWR_AB,
   M_LWU_AB,
+  M_MSGSND,
+  M_MSGLD,
+  M_MSGLD_T,
+  M_MSGWAIT,
+  M_MSGWAIT_T,
   M_MOVE,
   M_MUL,
Index: /trunk/src/gnu/dist/binutils/ld/emulparams/elf64btsmip.sh
===================================================================
--- /trunk/src/gnu/dist/binutils/ld/emulparams/elf64btsmip.sh	(revision 151)
+++ /trunk/src/gnu/dist/binutils/ld/emulparams/elf64btsmip.sh	(revision 152)
@@ -14,4 +14,3 @@
 '
 
-#TEXT_START_ADDR="0x120000000"
-TEXT_START_ADDR="0x12000000"
+TEXT_START_ADDR="0x120000000"
Index: /trunk/src/gnu/dist/binutils/opcodes/mips-dis.c
===================================================================
--- /trunk/src/gnu/dist/binutils/opcodes/mips-dis.c	(revision 151)
+++ /trunk/src/gnu/dist/binutils/opcodes/mips-dis.c	(revision 152)
@@ -187,4 +187,5 @@
 static const struct mips_cp0sel_name mips_cp0sel_names_mips3264r2[] = {
   {  4, 1, "c0_contextconfig"	},
+  {  4, 2, "c0_userlocal"	},
   {  5, 1, "c0_pagegrain"	},
   { 12, 1, "c0_intctl"		},
@@ -274,4 +275,61 @@
   { 29, 3, "c0_datahi_d"	},
 };
+ 
+/* Xlr cop0 register names.  */
+static const char * const mips_cp0_names_xlr[32] = {
+  "c0_index",     "c0_random",    "c0_entrylo0",  "c0_entrylo1",
+  "c0_context",   "c0_pagemask",  "c0_wired",     "c0_hwrena",
+  "c0_badvaddr",  "c0_count",     "c0_entryhi",   "c0_compare",
+  "c0_status",    "c0_cause",     "c0_epc",       "c0_prid",
+  "c0_config",    "c0_lladdr",    "c0_watchlo",   "c0_watchhi",
+  "c0_xcontext",  "$21",          "c0_osscratch", "c0_debug",
+  "c0_depc",      "c0_perfcnt",   "c0_errctl",    "c0_cacheerr_i",
+  "c0_taglo_i",   "c0_taghi_i",   "c0_errorepc",  "c0_desave",
+};
+
+/* XLR's CP0 Select Registers.  */
+
+static const struct mips_cp0sel_name mips_cp0sel_names_xlr[] = {
+  {  9, 6, "c0_extintreq"       },
+  {  9, 7, "c0_extintmask"      },
+  { 15, 1, "c0_ebase"           },
+  { 16, 1, "c0_config1"         },
+  { 16, 2, "c0_config2"         },
+  { 16, 3, "c0_config3"         },
+  { 16, 7, "c0_procid2"         },
+  { 18, 1, "c0_watchlo,1"       },
+  { 18, 2, "c0_watchlo,2"       },
+  { 18, 3, "c0_watchlo,3"       },
+  { 18, 4, "c0_watchlo,4"       },
+  { 18, 5, "c0_watchlo,5"       },
+  { 18, 6, "c0_watchlo,6"       },
+  { 18, 7, "c0_watchlo,7"       },
+  { 19, 1, "c0_watchhi,1"       },
+  { 19, 2, "c0_watchhi,2"       },
+  { 19, 3, "c0_watchhi,3"       },
+  { 19, 4, "c0_watchhi,4"       },
+  { 19, 5, "c0_watchhi,5"       },
+  { 19, 6, "c0_watchhi,6"       },
+  { 19, 7, "c0_watchhi,7"       },
+  { 22, 1, "c0_osscratch,1"     },
+  { 22, 2, "c0_osscratch,2"     },
+  { 22, 3, "c0_osscratch,3"     },
+  { 22, 4, "c0_osscratch,4"     },
+  { 22, 5, "c0_osscratch,5"     },
+  { 22, 6, "c0_osscratch,6"     },
+  { 22, 7, "c0_osscratch,7"     },
+  { 25, 1, "c0_perfcnt,1"       },
+  { 25, 2, "c0_perfcnt,2"       },
+  { 25, 3, "c0_perfcnt,3"       },
+  { 25, 4, "c0_perfcnt,4"       },
+  { 25, 5, "c0_perfcnt,5"       },
+  { 25, 6, "c0_perfcnt,6"       },
+  { 25, 7, "c0_perfcnt,7"       },
+  { 27, 1, "c0_cacheerr,1"      },
+  { 27, 2, "c0_cacheerr,2"      },
+  { 27, 3, "c0_cacheerr,3"      },
+  { 28, 1, "c0_datalo"          },
+  { 29, 1, "c0_datahi"          }
+};
 
 static const char * const mips_hwr_names_numeric[32] = {
@@ -287,5 +345,5 @@
   "$8",   "$9",   "$10",  "$11",  "$12",  "$13",  "$14",  "$15",
   "$16",  "$17",  "$18",  "$19",  "$20",  "$21",  "$22",  "$23",
-  "$24",  "$25",  "$26",  "$27",  "$28",  "$29",  "$30",  "$31"
+  "$24",  "$25",  "$26",  "$27",  "$28",  "hwr_userlocal",  "$30",  "$31"
 };
 
@@ -396,4 +454,10 @@
     mips_cp0_names_sb1,
     mips_cp0sel_names_sb1, ARRAY_SIZE (mips_cp0sel_names_sb1),
+    mips_hwr_names_numeric },
+
+  { "xlr", 1, bfd_mach_mips_xlr, CPU_XLR,
+    ISA_MIPS64 | INSN_XLR,
+    mips_cp0_names_xlr,
+    mips_cp0sel_names_xlr, ARRAY_SIZE (mips_cp0sel_names_xlr),
     mips_hwr_names_numeric },
 
Index: /trunk/src/gnu/dist/binutils/opcodes/mips-opc.c
===================================================================
--- /trunk/src/gnu/dist/binutils/opcodes/mips-opc.c	(revision 151)
+++ /trunk/src/gnu/dist/binutils/opcodes/mips-opc.c	(revision 152)
@@ -110,4 +110,5 @@
 #define N54	INSN_5400
 #define N55	INSN_5500
+#define	XLR	INSN_XLR
 
 #define G1      (T3             \
@@ -472,4 +473,5 @@
 {"daddu",   "d,v,t",	0x0000002d, 0xfc0007ff, WR_d|RD_s|RD_t,		0,		I3	},
 {"daddu",   "t,r,I",	0,    (int) M_DADDU_I,	INSN_MACRO,		0,		I3	},
+{"daddwc",  "d,s,t", 	0x70000038, 0xfc0007ff, WR_d|RD_s|RD_t|WR_C0|RD_C0,	0,	XLR	},
 {"dbreak",  "",		0x7000003f, 0xffffffff,	0,			0,		N5	},
 {"dclo",    "U,s",      0x70000025, 0xfc0007ff, RD_s|WR_d|WR_t, 	0,		I64|N55 },
@@ -640,4 +642,7 @@
 {"ld",      "t,o(b)",	0,    (int) M_LD_OB,	INSN_MACRO,		0,		I1	},
 {"ld",      "t,A(b)",	0,    (int) M_LD_AB,	INSN_MACRO,		0,		I1	},
+{"ldaddw",  "t,b",	0x70000010, 0xfc00ffff,	SM|RD_t|WR_t|RD_b,	0,		XLR	},
+{"ldaddwu", "t,b",	0x70000011, 0xfc00ffff,	SM|RD_t|WR_t|RD_b,	0,		XLR	},
+{"ldaddd",  "t,b",	0x70000012, 0xfc00ffff,	SM|RD_t|WR_t|RD_b,	0,		XLR	},
 {"ldc1",    "T,o(b)",	0xd4000000, 0xfc000000, CLD|RD_b|WR_T|FP_D,	0,		I2	},
 {"ldc1",    "E,o(b)",	0xd4000000, 0xfc000000, CLD|RD_b|WR_T|FP_D,	0,		I2	},
@@ -743,4 +748,5 @@
 {"mfhi",    "d",	0x00000010, 0xffff07ff,	WR_d|RD_HI,		0,		I1	},
 {"mflo",    "d",	0x00000012, 0xffff07ff,	WR_d|RD_LO,		0,		I1	},
+{"mfcr",    "t,s",	0x70000018, 0xfc00ffff, WR_t,			0,		XLR	},
 {"min.ob",  "X,Y,Q",	0x78000006, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX|SB1	},
 {"min.ob",  "D,S,T",	0x4ac00006, 0xffe0003f,	WR_D|RD_S|RD_T,		0,		N54	},
@@ -783,4 +789,9 @@
 /* move is at the top of the table.  */
 {"msgn.qh", "X,Y,Q",	0x78200000, 0xfc20003f,	WR_D|RD_S|RD_T|FP_D,	0,		MX	},
+{"msgsnd",  "t",	0,    (int) M_MSGSND,	INSN_MACRO,		0,		XLR	},
+{"msgld",   "",		0,    (int) M_MSGLD,	INSN_MACRO,		0,		XLR	},
+{"msgld",   "t",	0,    (int) M_MSGLD_T,	INSN_MACRO,		0,		XLR	},
+{"msgwait", "",		0,    (int) M_MSGWAIT,	INSN_MACRO,		0,		XLR	},
+{"msgwait", "t",	0,    (int) M_MSGWAIT_T,INSN_MACRO,		0,		XLR	},
 {"msub.d",  "D,R,S,T",	0x4c000029, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_D, 0,		I4	},
 {"msub.s",  "D,R,S,T",	0x4c000028, 0xfc00003f, RD_R|RD_S|RD_T|WR_D|FP_S, 0,		I4	},
@@ -803,9 +814,8 @@
 {"mtc3",    "t,G",	0x4c800000, 0xffe007ff,	COD|RD_t|WR_C3|WR_CC,	0,		I1	},
 {"mtc3",    "t,G,H",    0x4c800000, 0xffe007f8, COD|RD_t|WR_C3|WR_CC,   0,		I32     },
-{"mfcr",    "t,s",	0x70000018, 0xfc00ffff,	WR_t|RD_s,		0,		I64	},
-{"mtcr",    "t,s",	0x70000019, 0xfc00ffff,	WR_t|RD_s,		0,		I64	},
 {"mtdr",    "t,G",	0x7080003d, 0xffe007ff,	COD|RD_t|WR_C0,		0,		N5	},
 {"mthi",    "s",	0x00000011, 0xfc1fffff,	RD_s|WR_HI,		0,		I1	},
 {"mtlo",    "s",	0x00000013, 0xfc1fffff,	RD_s|WR_LO,		0,		I1	},
+{"mtcr",    "t,s",	0x70000019, 0xfc00ffff, RD_t,			0,		XLR	},
 {"mul.d",   "D,V,T",	0x46200002, 0xffe0003f,	WR_D|RD_S|RD_T|FP_D,	0,		I1	},
 {"mul.s",   "D,V,T",	0x46000002, 0xffe0003f,	WR_D|RD_S|RD_T|FP_S,	0,		I1	},
@@ -1078,4 +1088,7 @@
 {"sw",      "t,o(b)",	0xac000000, 0xfc000000,	SM|RD_t|RD_b,		0,		I1	},
 {"sw",      "t,A(b)",	0,    (int) M_SW_AB,	INSN_MACRO,		0,		I1	},
+{"swapw",   "t,b",	0x70000014, 0xfc00ffff, SM|RD_t|WR_t|RD_b,	0,		XLR	},
+{"swapwu",  "t,b",	0x70000015, 0xfc00ffff, SM|RD_t|WR_t|RD_b,	0,		XLR	},
+{"swapd",   "t,b",	0x70000016, 0xfc00ffff, SM|RD_t|WR_t|RD_b,	0,		XLR	},
 {"swc0",    "E,o(b)",	0xe0000000, 0xfc000000,	SM|RD_C0|RD_b,		0,		I1	},
 {"swc0",    "E,A(b)",	0,    (int) M_SWC0_AB,	INSN_MACRO,		0,		I1	},
@@ -1201,9 +1214,4 @@
 {"mthc2",   "t,i",	0x48e00000, 0xffe00000,	COD|RD_t|WR_C2|WR_CC,	0,		I33	},
 
-/* RMI Coprocessor 2 ops */
-{"msgsnd",  "t",	0x4a000001, 0xffe0ffff,	COD|RD_t|WR_C2,		0,		I64	},
-{"msgld",   "t",	0x4a000002, 0xffe0ffff,	COD|RD_t|WR_C2,		0,		I64	},
-{"msgwait", "t",	0x4a000003, 0xffe0ffff,	COD|RD_t|WR_C2,		0,		I64	},
-
 /* No hazard protection on coprocessor instructions--they shouldn't
    change the state of the processor and if they do it's up to the
Index: /trunk/src/gnu/dist/gcc4/gcc/config/mips/netbsd64.h
===================================================================
--- /trunk/src/gnu/dist/gcc4/gcc/config/mips/netbsd64.h	(revision 151)
+++ /trunk/src/gnu/dist/gcc4/gcc/config/mips/netbsd64.h	(revision 152)
@@ -51,8 +51,2 @@
    %{bestGnum} %{call_shared} %{no_archive} %{exact_version} \
    %(netbsd_link_spec)"
-
-#undef LONG_DOUBLE_TYPE_SIZE
-#define LONG_DOUBLE_TYPE_SIZE 64
-
-#undef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
-#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
Index: /trunk/src/gnu/dist/gmake/doc/make.info
===================================================================
--- /trunk/src/gnu/dist/gmake/doc/make.info	(revision 151)
+++ /trunk/src/gnu/dist/gmake/doc/make.info	(revision 152)
@@ -1,3 +1,6 @@
-This is make.info, produced by makeinfo version 4.2 from make.texi.
+This is
+/u1/netbsd-nb5-cradlepoint/src/tools/gmake/../../gnu/dist/gmake/doc/make.info,
+produced by makeinfo version 4.8 from
+/u1/netbsd-nb5-cradlepoint/src/tools/gmake/../../gnu/dist/gmake/doc/make.texi.
 
 INFO-DIR-SECTION GNU Packages
@@ -25,157 +28,148 @@
 
 Indirect:
-make.info-1: 986
-make.info-2: 46780
-make.info-3: 96400
-make.info-4: 144046
-make.info-5: 192507
-make.info-6: 241383
-make.info-7: 289167
-make.info-8: 332460
-make.info-9: 376374
-make.info-10: 404952
-make.info-11: 449643
+make.info-1: 1122
+make.info-2: 299906
 
 Tag Table:
 (Indirect)
-Node: Top986
-Node: Overview13524
-Node: Preparing14528
-Node: Reading15500
-Node: Bugs16422
-Node: Introduction18247
-Node: Rule Introduction19834
-Node: Simple Makefile21573
-Node: How Make Works25197
-Node: Variables Simplify27688
-Node: make Deduces29894
-Node: Combine By Prerequisite31644
-Node: Cleanup32678
-Node: Makefiles34092
-Node: Makefile Contents34978
-Node: Makefile Names37925
-Node: Include39527
-Ref: Include-Footnote-143081
-Node: MAKEFILES Variable43215
-Node: MAKEFILE_LIST Variable44720
-Node: Special Variables46042
-Node: Remaking Makefiles46780
-Node: Overriding Makefiles51025
-Node: Reading Makefiles53078
-Node: Rules55617
-Node: Rule Example58288
-Node: Rule Syntax59140
-Node: Prerequisite Types61364
-Node: Wildcards63144
-Node: Wildcard Examples64831
-Node: Wildcard Pitfall66087
-Node: Wildcard Function67872
-Node: Directory Search69652
-Node: General Search70789
-Node: Selective Search72524
-Node: Search Algorithm75503
-Node: Commands/Search78013
-Node: Implicit/Search79361
-Node: Libraries/Search80296
-Node: Phony Targets82381
-Node: Force Targets87360
-Node: Empty Targets88400
-Node: Special Targets89701
-Node: Multiple Targets96400
-Node: Multiple Rules98272
-Node: Static Pattern100501
-Node: Static Usage101146
-Node: Static versus Implicit104879
-Node: Double-Colon106612
-Node: Automatic Prerequisites108262
-Node: Commands112519
-Node: Echoing114211
-Node: Execution115492
-Ref: Execution-Footnote-1119921
-Node: Parallel120067
-Node: Errors123653
-Node: Interrupts127291
-Node: Recursion128873
-Node: MAKE Variable130774
-Node: Variables/Recursion132756
-Node: Options/Recursion137904
-Node: -w Option143060
-Node: Sequences144046
-Node: Empty Commands147050
-Node: Using Variables148219
-Node: Reference151338
-Node: Flavors152907
-Node: Advanced158694
-Node: Substitution Refs159194
-Node: Computed Names160738
-Node: Values165308
-Node: Setting166225
-Node: Appending168266
-Node: Override Directive172184
-Node: Defining173563
-Node: Environment176019
-Node: Target-specific178294
-Node: Pattern-specific180693
-Node: Conditionals181888
-Node: Conditional Example182597
-Node: Conditional Syntax185184
-Node: Testing Flags190065
-Node: Functions191162
-Node: Syntax of Functions192507
-Node: Text Functions194701
-Node: File Name Functions202854
-Node: Foreach Function207296
-Node: If Function210499
-Node: Call Function211770
-Node: Value Function214655
-Node: Eval Function216092
-Node: Origin Function218400
-Node: Shell Function221622
-Node: Make Control Functions223269
-Node: Running224702
-Node: Makefile Arguments226690
-Node: Goals227401
-Node: Instead of Execution231959
-Node: Avoiding Compilation235240
-Node: Overriding237210
-Node: Testing239503
-Node: Options Summary241383
-Node: Implicit Rules250817
-Node: Using Implicit252963
-Node: Catalogue of Rules256494
-Node: Implicit Variables265480
-Node: Chained Rules269709
-Node: Pattern Rules273711
-Node: Pattern Intro275240
-Node: Pattern Examples278091
-Node: Automatic279890
-Node: Pattern Match287553
-Node: Match-Anything Rules289167
-Node: Canceling Rules293031
-Node: Last Resort293736
-Node: Suffix Rules295576
-Node: Implicit Rule Search299298
-Node: Archives302819
-Node: Archive Members303514
-Node: Archive Update305113
-Node: Archive Symbols307029
-Node: Archive Pitfalls308252
-Node: Archive Suffix Rules308968
-Node: Features310508
-Node: Missing319090
-Node: Makefile Conventions322823
-Node: Makefile Basics323606
-Node: Utilities in Makefiles326766
-Node: Command Variables328897
-Node: Directory Variables332460
-Node: Standard Targets343340
-Ref: Standard Targets-Footnote-1354597
-Node: Install Command Categories354697
-Node: Quick Reference359265
-Node: Error Messages368703
-Node: Complex Makefile376374
-Node: GNU Free Documentation License385057
-Node: Concept Index404952
-Node: Name Index449643
+Node: Top1122
+Node: Overview13657
+Node: Preparing14664
+Node: Reading15636
+Node: Bugs16563
+Node: Introduction18393
+Node: Rule Introduction19985
+Node: Simple Makefile21729
+Node: How Make Works25359
+Node: Variables Simplify27859
+Node: make Deduces30065
+Node: Combine By Prerequisite31805
+Node: Cleanup32834
+Node: Makefiles34253
+Node: Makefile Contents35140
+Node: Makefile Names38092
+Node: Include39703
+Ref: Include-Footnote-143266
+Node: MAKEFILES Variable43400
+Node: MAKEFILE_LIST Variable44910
+Node: Special Variables46222
+Node: Remaking Makefiles46965
+Node: Overriding Makefiles51214
+Node: Reading Makefiles53267
+Node: Rules55797
+Node: Rule Example58469
+Node: Rule Syntax59326
+Node: Prerequisite Types61555
+Node: Wildcards63340
+Node: Wildcard Examples65031
+Node: Wildcard Pitfall66296
+Node: Wildcard Function68085
+Node: Directory Search69869
+Node: General Search71011
+Node: Selective Search72755
+Node: Search Algorithm75743
+Node: Commands/Search78262
+Node: Implicit/Search79618
+Node: Libraries/Search80562
+Node: Phony Targets82656
+Node: Force Targets87588
+Node: Empty Targets88633
+Node: Special Targets89941
+Node: Multiple Targets96645
+Node: Multiple Rules98530
+Node: Static Pattern100766
+Node: Static Usage101418
+Node: Static versus Implicit105148
+Node: Double-Colon106892
+Node: Automatic Prerequisites108549
+Node: Commands112798
+Node: Echoing114491
+Node: Execution115777
+Ref: Execution-Footnote-1120211
+Node: Parallel120357
+Node: Errors123950
+Node: Interrupts127596
+Node: Recursion129183
+Node: MAKE Variable131090
+Node: Variables/Recursion133085
+Node: Options/Recursion138244
+Node: -w Option143409
+Node: Sequences144404
+Node: Empty Commands147416
+Node: Using Variables148590
+Node: Reference151712
+Node: Flavors153281
+Node: Advanced159070
+Node: Substitution Refs159575
+Node: Computed Names161128
+Node: Values165672
+Node: Setting166594
+Node: Appending168640
+Node: Override Directive172562
+Node: Defining173946
+Node: Environment176410
+Node: Target-specific178690
+Node: Pattern-specific181096
+Node: Conditionals182298
+Node: Conditional Example183008
+Node: Conditional Syntax185585
+Node: Testing Flags190471
+Node: Functions191573
+Node: Syntax of Functions192919
+Node: Text Functions195118
+Node: File Name Functions203276
+Node: Foreach Function207723
+Node: If Function210931
+Node: Call Function212207
+Node: Value Function215087
+Node: Eval Function216524
+Node: Origin Function218797
+Node: Shell Function222024
+Node: Make Control Functions223678
+Node: Running225108
+Node: Makefile Arguments227097
+Node: Goals227813
+Node: Instead of Execution232371
+Node: Avoiding Compilation235657
+Node: Overriding237632
+Node: Testing239930
+Node: Options Summary241815
+Node: Implicit Rules251254
+Node: Using Implicit253404
+Node: Catalogue of Rules256943
+Node: Implicit Variables265936
+Node: Chained Rules270208
+Node: Pattern Rules274219
+Node: Pattern Intro275755
+Node: Pattern Examples278625
+Node: Automatic280434
+Node: Pattern Match288114
+Node: Match-Anything Rules289739
+Node: Canceling Rules293614
+Node: Last Resort294330
+Node: Suffix Rules296177
+Node: Implicit Rule Search299906
+Node: Archives303434
+Node: Archive Members304132
+Node: Archive Update305738
+Node: Archive Symbols307661
+Node: Archive Pitfalls308895
+Node: Archive Suffix Rules309618
+Node: Features311165
+Node: Missing319750
+Node: Makefile Conventions323488
+Node: Makefile Basics324274
+Node: Utilities in Makefiles327441
+Node: Command Variables329579
+Node: Directory Variables333149
+Node: Standard Targets344036
+Ref: Standard Targets-Footnote-1355280
+Node: Install Command Categories355380
+Node: Quick Reference359955
+Node: Error Messages369412
+Node: Complex Makefile377103
+Node: GNU Free Documentation License385665
+Node: Concept Index405583
+Node: Name Index467359
 
 End Tag Table
Index: /trunk/src/gnu/dist/gmake/doc/make.info-1
===================================================================
--- /trunk/src/gnu/dist/gmake/doc/make.info-1	(revision 151)
+++ /trunk/src/gnu/dist/gmake/doc/make.info-1	(revision 152)
@@ -1,3 +1,6 @@
-This is make.info, produced by makeinfo version 4.2 from make.texi.
+This is
+/u1/netbsd-nb5-cradlepoint/src/tools/gmake/../../gnu/dist/gmake/doc/make.info,
+produced by makeinfo version 4.8 from
+/u1/netbsd-nb5-cradlepoint/src/tools/gmake/../../gnu/dist/gmake/doc/make.texi.
 
 INFO-DIR-SECTION GNU Packages
@@ -29,7 +32,7 @@
 ****
 
-   The GNU `make' utility automatically determines which pieces of a
-large program need to be recompiled, and issues the commands to
-recompile them.
+The GNU `make' utility automatically determines which pieces of a large
+program need to be recompiled, and issues the commands to recompile
+them.
 
    This edition of the `GNU Make Manual', last updated 08 July 2002,
@@ -277,8 +280,8 @@
 File: make.info,  Node: Overview,  Next: Introduction,  Prev: Top,  Up: Top
 
-Overview of `make'
-******************
-
-   The `make' utility automatically determines which pieces of a large
+1 Overview of `make'
+********************
+
+The `make' utility automatically determines which pieces of a large
 program need to be recompiled, and issues commands to recompile them.
 This manual describes GNU `make', which was implemented by Richard
@@ -287,5 +290,5 @@
 
    GNU `make' conforms to section 6.2 of `IEEE Standard 1003.2-1992'
-(POSIX.2).
+(POSIX.2).  
 
    Our examples show C programs, since they are most common, but you
@@ -329,8 +332,8 @@
 File: make.info,  Node: Reading,  Next: Bugs,  Prev: Preparing,  Up: Overview
 
-How to Read This Manual
-=======================
-
-   If you are new to `make', or are looking for a general introduction,
+1.1 How to Read This Manual
+===========================
+
+If you are new to `make', or are looking for a general introduction,
 read the first few sections of each chapter, skipping the later
 sections.  In each chapter, the first few sections contain introductory
@@ -350,8 +353,8 @@
 File: make.info,  Node: Bugs,  Prev: Reading,  Up: Overview
 
-Problems and Bugs
-=================
-
-   If you have problems with GNU `make' or think you've found a bug,
+1.2 Problems and Bugs
+=====================
+
+If you have problems with GNU `make' or think you've found a bug,
 please report it to the developers; we cannot promise to do anything but
 we might well want to fix it.
@@ -393,9 +396,9 @@
 File: make.info,  Node: Introduction,  Next: Makefiles,  Prev: Overview,  Up: Top
 
-An Introduction to Makefiles
-****************************
-
-   You need a file called a "makefile" to tell `make' what to do.  Most
-often, the makefile tells `make' how to compile and link a program.
+2 An Introduction to Makefiles
+******************************
+
+You need a file called a "makefile" to tell `make' what to do.  Most
+often, the makefile tells `make' how to compile and link a program.  
 
    In this chapter, we will discuss a simple makefile that describes
@@ -412,5 +415,5 @@
 Finally, if any source file has been recompiled, all the object files,
 whether newly made or saved from previous compilations, must be linked
-together to produce the new executable editor.
+together to produce the new executable editor.  
 
 * Menu:
@@ -427,8 +430,8 @@
 File: make.info,  Node: Rule Introduction,  Next: Simple Makefile,  Prev: Introduction,  Up: Introduction
 
-What a Rule Looks Like
-======================
-
-   A simple makefile consists of "rules" with the following shape:
+2.1 What a Rule Looks Like
+==========================
+
+A simple makefile consists of "rules" with the following shape:
 
      TARGET ... : PREREQUISITES ...
@@ -470,10 +473,10 @@
 File: make.info,  Node: Simple Makefile,  Next: How Make Works,  Prev: Rule Introduction,  Up: Introduction
 
-A Simple Makefile
-=================
-
-   Here is a straightforward makefile that describes the way an
-executable file called `edit' depends on eight object files which, in
-turn, depend on eight C source and three header files.
+2.2 A Simple Makefile
+=====================
+
+Here is a straightforward makefile that describes the way an executable
+file called `edit' depends on eight object files which, in turn, depend
+on eight C source and three header files.
 
    In this example, all the C files include `defs.h', but only those
@@ -485,5 +488,5 @@
              cc -o edit main.o kbd.o command.o display.o \
                         insert.o search.o files.o utils.o
-     
+
      main.o : main.c defs.h
              cc -c main.c
@@ -507,5 +510,5 @@
 
 We split each long line into two lines using backslash-newline; this is
-like using one long line, but is easier to read.
+like using one long line, but is easier to read.  
 
    To use this makefile to create the executable file called `edit',
@@ -539,5 +542,5 @@
 It is up to you to supply commands that will update the target file
 properly.  All `make' does is execute the commands in the rule you have
-specified when the target file needs to be updated.)
+specified when the target file needs to be updated.)  
 
    The target `clean' is not a file, but merely the name of an action.
@@ -550,16 +553,16 @@
 called "phony targets".  *Note Phony Targets::, for information about
 this kind of target.  *Note Errors in Commands: Errors, to see how to
-cause `make' to ignore errors from `rm' or any other command.
+cause `make' to ignore errors from `rm' or any other command.  
 
 
 File: make.info,  Node: How Make Works,  Next: Variables Simplify,  Prev: Simple Makefile,  Up: Introduction
 
-How `make' Processes a Makefile
-===============================
-
-   By default, `make' starts with the first target (not targets whose
+2.3 How `make' Processes a Makefile
+===================================
+
+By default, `make' starts with the first target (not targets whose
 names start with `.').  This is called the "default goal".  ("Goals"
 are the targets that `make' strives ultimately to update.  *Note
-Arguments to Specify the Goals: Goals.)
+Arguments to Specify the Goals: Goals.)  
 
    In the simple example of the previous section, the default goal is to
@@ -596,5 +599,5 @@
 not exist, or if any of the object files are newer than it.  If an
 object file was just recompiled, it is now newer than `edit', so `edit'
-is relinked.
+is relinked.  
 
    Thus, if we change the file `insert.c' and run `make', `make' will
@@ -607,9 +610,9 @@
 File: make.info,  Node: Variables Simplify,  Next: make Deduces,  Prev: How Make Works,  Up: Introduction
 
-Variables Make Makefiles Simpler
-================================
-
-   In our example, we had to list all the object files twice in the
-rule for `edit' (repeated here):
+2.4 Variables Make Makefiles Simpler
+====================================
+
+In our example, we had to list all the object files twice in the rule
+for `edit' (repeated here):
 
      edit : main.o kbd.o command.o display.o \
@@ -641,5 +644,5 @@
      objects = main.o kbd.o command.o display.o \
                insert.o search.o files.o utils.o
-     
+
      edit : $(objects)
              cc -o edit $(objects)
@@ -666,8 +669,8 @@
 File: make.info,  Node: make Deduces,  Next: Combine By Prerequisite,  Prev: Variables Simplify,  Up: Introduction
 
-Letting `make' Deduce the Commands
-==================================
-
-   It is not necessary to spell out the commands for compiling the
+2.5 Letting `make' Deduce the Commands
+======================================
+
+It is not necessary to spell out the commands for compiling the
 individual C source files, because `make' can figure them out: it has an
 "implicit rule" for updating a `.o' file from a correspondingly named
@@ -686,8 +689,8 @@
      objects = main.o kbd.o command.o display.o \
                insert.o search.o files.o utils.o
-     
+
      edit : $(objects)
              cc -o edit $(objects)
-     
+
      main.o : defs.h
      kbd.o : defs.h command.h
@@ -698,5 +701,5 @@
      files.o : defs.h buffer.h command.h
      utils.o : defs.h
-     
+
      .PHONY : clean
      clean :
@@ -713,8 +716,8 @@
 File: make.info,  Node: Combine By Prerequisite,  Next: Cleanup,  Prev: make Deduces,  Up: Introduction
 
-Another Style of Makefile
-=========================
-
-   When the objects of a makefile are created only by implicit rules, an
+2.6 Another Style of Makefile
+=============================
+
+When the objects of a makefile are created only by implicit rules, an
 alternative style of makefile is possible.  In this style of makefile,
 you group entries by their prerequisites instead of by their targets.
@@ -723,8 +726,8 @@
      objects = main.o kbd.o command.o display.o \
                insert.o search.o files.o utils.o
-     
+
      edit : $(objects)
              cc -o edit $(objects)
-     
+
      $(objects) : defs.h
      kbd.o command.o files.o : command.h
@@ -742,9 +745,9 @@
 File: make.info,  Node: Cleanup,  Prev: Combine By Prerequisite,  Up: Introduction
 
-Rules for Cleaning the Directory
-================================
-
-   Compiling a program is not the only thing you might want to write
-rules for.  Makefiles commonly tell how to do a few other things besides
+2.7 Rules for Cleaning the Directory
+====================================
+
+Compiling a program is not the only thing you might want to write rules
+for.  Makefiles commonly tell how to do a few other things besides
 compiling a program: for example, how to delete all the object files
 and executables so that the directory is `clean'.
@@ -781,9 +784,9 @@
 File: make.info,  Node: Makefiles,  Next: Rules,  Prev: Introduction,  Up: Top
 
-Writing Makefiles
-*****************
-
-   The information that tells `make' how to recompile a system comes
-from reading a data base called the "makefile".
+3 Writing Makefiles
+*******************
+
+The information that tells `make' how to recompile a system comes from
+reading a data base called the "makefile".
 
 * Menu:
@@ -803,8 +806,8 @@
 File: make.info,  Node: Makefile Contents,  Next: Makefile Names,  Prev: Makefiles,  Up: Makefiles
 
-What Makefiles Contain
-======================
-
-   Makefiles contain five kinds of things: "explicit rules", "implicit
+3.1 What Makefiles Contain
+==========================
+
+Makefiles contain five kinds of things: "explicit rules", "implicit
 rules", "variable definitions", "directives", and "comments".  Rules,
 variables, and directives are described at length in later chapters.
@@ -864,9 +867,9 @@
 File: make.info,  Node: Makefile Names,  Next: Include,  Prev: Makefile Contents,  Up: Makefiles
 
-What Name to Give Your Makefile
-===============================
-
-   By default, when `make' looks for the makefile, it tries the
-following names, in order: `GNUmakefile', `makefile' and `Makefile'.
+3.2 What Name to Give Your Makefile
+===================================
+
+By default, when `make' looks for the makefile, it tries the following
+names, in order: `GNUmakefile', `makefile' and `Makefile'.  
 
    Normally you should call your makefile either `makefile' or
@@ -891,13 +894,13 @@
 concatenated in the order specified.  The default makefile names
 `GNUmakefile', `makefile' and `Makefile' are not checked automatically
-if you specify `-f' or `--file'.
+if you specify `-f' or `--file'.  
 
 
 File: make.info,  Node: Include,  Next: MAKEFILES Variable,  Prev: Makefile Names,  Up: Makefiles
 
-Including Other Makefiles
-=========================
-
-   The `include' directive tells `make' to suspend reading the current
+3.3 Including Other Makefiles
+=============================
+
+The `include' directive tells `make' to suspend reading the current
 makefile and read one or more other makefiles before continuing.  The
 directive is a line in the makefile that looks like this:
@@ -905,5 +908,5 @@
      include FILENAMES...
 
-FILENAMES can contain shell file name patterns.
+FILENAMES can contain shell file name patterns.  
 
    Extra spaces are allowed and ignored at the beginning of the line,
@@ -942,5 +945,5 @@
 than that of somehow appending the prerequisites to the end of the main
 makefile as has been traditionally done with other versions of `make'.
-*Note Automatic Prerequisites::.
+*Note Automatic Prerequisites::.  
 
    If the specified name does not start with a slash, and the file is
@@ -980,8 +983,8 @@
 File: make.info,  Node: MAKEFILES Variable,  Next: MAKEFILE_LIST Variable,  Prev: Include,  Up: Makefiles
 
-The Variable `MAKEFILES'
-========================
-
-   If the environment variable `MAKEFILES' is defined, `make' considers
+3.4 The Variable `MAKEFILES'
+============================
+
+If the environment variable `MAKEFILES' is defined, `make' considers
 its value as a list of names (separated by whitespace) of additional
 makefiles to be read before the others.  This works much like the
@@ -1009,8 +1012,8 @@
 File: make.info,  Node: MAKEFILE_LIST Variable,  Next: Special Variables,  Prev: MAKEFILES Variable,  Up: Makefiles
 
-The Variable `MAKEFILE_LIST'
-============================
-
-   As `make' reads various makefiles, including any obtained from the
+3.5 The Variable `MAKEFILE_LIST'
+================================
+
+As `make' reads various makefiles, including any obtained from the
 `MAKEFILES' variable, the command line, the default files, or from
 `include' directives, their names will be automatically appended to the
@@ -1026,9 +1029,9 @@
 
      name1 := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
-     
+
      include inc.mk
-     
+
      name2 := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
-     
+
      all:
              @echo name1 = $(name1)
@@ -1048,9 +1051,9 @@
 File: make.info,  Node: Special Variables,  Next: Remaking Makefiles,  Prev: MAKEFILE_LIST Variable,  Up: Makefiles
 
-Other Special Variables
-=======================
-
-   GNU `make' also supports a special variable.  Note that any value
-you assign to this variable will be ignored; it will always return its
+3.6 Other Special Variables
+===========================
+
+GNU `make' also supports a special variable.  Note that any value you
+assign to this variable will be ignored; it will always return its
 special value.
 
@@ -1062,2 +1065,6084 @@
 variables which are only defined in a target-specific context.
 
+
+File: make.info,  Node: Remaking Makefiles,  Next: Overriding Makefiles,  Prev: Special Variables,  Up: Makefiles
+
+3.7 How Makefiles Are Remade
+============================
+
+Sometimes makefiles can be remade from other files, such as RCS or SCCS
+files.  If a makefile can be remade from other files, you probably want
+`make' to get an up-to-date version of the makefile to read in.
+
+   To this end, after reading in all makefiles, `make' will consider
+each as a goal target and attempt to update it.  If a makefile has a
+rule which says how to update it (found either in that very makefile or
+in another one) or if an implicit rule applies to it (*note Using
+Implicit Rules: Implicit Rules.), it will be updated if necessary.
+After all makefiles have been checked, if any have actually been
+changed, `make' starts with a clean slate and reads all the makefiles
+over again.  (It will also attempt to update each of them over again,
+but normally this will not change them again, since they are already up
+to date.)
+
+   If you know that one or more of your makefiles cannot be remade and
+you want to keep `make' from performing an implicit rule search on
+them, perhaps for efficiency reasons, you can use any normal method of
+preventing implicit rule lookup to do so.  For example, you can write an
+explicit rule with the makefile as the target, and an empty command
+string (*note Using Empty Commands: Empty Commands.).
+
+   If the makefiles specify a double-colon rule to remake a file with
+commands but no prerequisites, that file will always be remade (*note
+Double-Colon::).  In the case of makefiles, a makefile that has a
+double-colon rule with commands but no prerequisites will be remade
+every time `make' is run, and then again after `make' starts over and
+reads the makefiles in again.  This would cause an infinite loop:
+`make' would constantly remake the makefile, and never do anything
+else.  So, to avoid this, `make' will *not* attempt to remake makefiles
+which are specified as targets of a double-colon rule with commands but
+no prerequisites.
+
+   If you do not specify any makefiles to be read with `-f' or `--file'
+options, `make' will try the default makefile names; *note What Name to
+Give Your Makefile: Makefile Names.  Unlike makefiles explicitly
+requested with `-f' or `--file' options, `make' is not certain that
+these makefiles should exist.  However, if a default makefile does not
+exist but can be created by running `make' rules, you probably want the
+rules to be run so that the makefile can be used.
+
+   Therefore, if none of the default makefiles exists, `make' will try
+to make each of them in the same order in which they are searched for
+(*note What Name to Give Your Makefile: Makefile Names.)  until it
+succeeds in making one, or it runs out of names to try.  Note that it
+is not an error if `make' cannot find or make any makefile; a makefile
+is not always necessary.
+
+   When you use the `-t' or `--touch' option (*note Instead of
+Executing the Commands: Instead of Execution.), you would not want to
+use an out-of-date makefile to decide which targets to touch.  So the
+`-t' option has no effect on updating makefiles; they are really
+updated even if `-t' is specified.  Likewise, `-q' (or `--question')
+and `-n' (or `--just-print') do not prevent updating of makefiles,
+because an out-of-date makefile would result in the wrong output for
+other targets.  Thus, `make -f mfile -n foo' will update `mfile', read
+it in, and then print the commands to update `foo' and its prerequisites
+without running them.  The commands printed for `foo' will be those
+specified in the updated contents of `mfile'.
+
+   However, on occasion you might actually wish to prevent updating of
+even the makefiles.  You can do this by specifying the makefiles as
+goals in the command line as well as specifying them as makefiles.
+When the makefile name is specified explicitly as a goal, the options
+`-t' and so on do apply to them.
+
+   Thus, `make -f mfile -n mfile foo' would read the makefile `mfile',
+print the commands needed to update it without actually running them,
+and then print the commands needed to update `foo' without running
+them.  The commands for `foo' will be those specified by the existing
+contents of `mfile'.
+
+
+File: make.info,  Node: Overriding Makefiles,  Next: Reading Makefiles,  Prev: Remaking Makefiles,  Up: Makefiles
+
+3.8 Overriding Part of Another Makefile
+=======================================
+
+Sometimes it is useful to have a makefile that is mostly just like
+another makefile.  You can often use the `include' directive to include
+one in the other, and add more targets or variable definitions.
+However, if the two makefiles give different commands for the same
+target, `make' will not let you just do this.  But there is another way.
+
+   In the containing makefile (the one that wants to include the other),
+you can use a match-anything pattern rule to say that to remake any
+target that cannot be made from the information in the containing
+makefile, `make' should look in another makefile.  *Note Pattern
+Rules::, for more information on pattern rules.
+
+   For example, if you have a makefile called `Makefile' that says how
+to make the target `foo' (and other targets), you can write a makefile
+called `GNUmakefile' that contains:
+
+     foo:
+             frobnicate > foo
+
+     %: force
+             @$(MAKE) -f Makefile $@
+     force: ;
+
+   If you say `make foo', `make' will find `GNUmakefile', read it, and
+see that to make `foo', it needs to run the command `frobnicate > foo'.
+If you say `make bar', `make' will find no way to make `bar' in
+`GNUmakefile', so it will use the commands from the pattern rule: `make
+-f Makefile bar'.  If `Makefile' provides a rule for updating `bar',
+`make' will apply the rule.  And likewise for any other target that
+`GNUmakefile' does not say how to make.
+
+   The way this works is that the pattern rule has a pattern of just
+`%', so it matches any target whatever.  The rule specifies a
+prerequisite `force', to guarantee that the commands will be run even
+if the target file already exists.  We give `force' target empty
+commands to prevent `make' from searching for an implicit rule to build
+it--otherwise it would apply the same match-anything rule to `force'
+itself and create a prerequisite loop!
+
+
+File: make.info,  Node: Reading Makefiles,  Prev: Overriding Makefiles,  Up: Makefiles
+
+3.9 How `make' Reads a Makefile
+===============================
+
+GNU `make' does its work in two distinct phases.  During the first
+phase it reads all the makefiles, included makefiles, etc. and
+internalizes all the variables and their values, implicit and explicit
+rules, and constructs a dependency graph of all the targets and their
+prerequisites.  During the second phase, `make' uses these internal
+structures to determine what targets will need to be rebuilt and to
+invoke the rules necessary to do so.
+
+   It's important to understand this two-phase approach because it has a
+direct impact on how variable and function expansion happens; this is
+often a source of some confusion when writing makefiles.  Here we will
+present a summary of the phases in which expansion happens for different
+constructs within the makefile.  We say that expansion is "immediate"
+if it happens during the first phase: in this case `make' will expand
+any variables or functions in that section of a construct as the
+makefile is parsed.  We say that expansion is "deferred" if expansion
+is not performed immediately.  Expansion of deferred construct is not
+performed until either the construct appears later in an immediate
+context, or until the second phase.
+
+   You may not be familiar with some of these constructs yet.  You can
+reference this section as you become familiar with them, in later
+chapters.
+
+Variable Assignment
+-------------------
+
+Variable definitions are parsed as follows:
+
+     IMMEDIATE = DEFERRED
+     IMMEDIATE ?= DEFERRED
+     IMMEDIATE := IMMEDIATE
+     IMMEDIATE += DEFERRED or IMMEDIATE
+
+     define IMMEDIATE
+       DEFERRED
+     endef
+
+   For the append operator, `+=', the right-hand side is considered
+immediate if the variable was previously set as a simple variable
+(`:='), and deferred otherwise.
+
+Conditional Statements
+----------------------
+
+All instances of conditional syntax are parsed immediately, in their
+entirety; this includes the `ifdef', `ifeq', `ifndef', and `ifneq'
+forms.
+
+Rule Definition
+---------------
+
+A rule is always expanded the same way, regardless of the form:
+
+     IMMEDIATE : IMMEDIATE ; DEFERRED
+     	DEFERRED
+
+   That is, the target and prerequisite sections are expanded
+immediately, and the commands used to construct the target are always
+deferred.  This general rule is true for explicit rules, pattern rules,
+suffix rules, static pattern rules, and simple prerequisite definitions.
+
+
+File: make.info,  Node: Rules,  Next: Commands,  Prev: Makefiles,  Up: Top
+
+4 Writing Rules
+***************
+
+A "rule" appears in the makefile and says when and how to remake
+certain files, called the rule's "targets" (most often only one per
+rule).  It lists the other files that are the "prerequisites" of the
+target, and "commands" to use to create or update the target.
+
+   The order of rules is not significant, except for determining the
+"default goal": the target for `make' to consider, if you do not
+otherwise specify one.  The default goal is the target of the first
+rule in the first makefile.  If the first rule has multiple targets,
+only the first target is taken as the default.  There are two
+exceptions: a target starting with a period is not a default unless it
+contains one or more slashes, `/', as well; and, a target that defines
+a pattern rule has no effect on the default goal.  (*Note Defining and
+Redefining Pattern Rules: Pattern Rules.)
+
+   Therefore, we usually write the makefile so that the first rule is
+the one for compiling the entire program or all the programs described
+by the makefile (often with a target called `all').  *Note Arguments to
+Specify the Goals: Goals.
+
+* Menu:
+
+* Rule Example::                An example explained.
+* Rule Syntax::                 General syntax explained.
+* Prerequisite Types::          There are two types of prerequisites.
+* Wildcards::                   Using wildcard characters such as `*'.
+* Directory Search::            Searching other directories for source files.
+* Phony Targets::               Using a target that is not a real file's name.
+* Force Targets::               You can use a target without commands
+                                  or prerequisites to mark other
+                                  targets as phony.
+* Empty Targets::               When only the date matters and the
+                                  files are empty.
+* Special Targets::             Targets with special built-in meanings.
+* Multiple Targets::            When to make use of several targets in a rule.
+* Multiple Rules::              How to use several rules with the same target.
+* Static Pattern::              Static pattern rules apply to multiple targets
+                                  and can vary the prerequisites according to
+                                  the target name.
+* Double-Colon::                How to use a special kind of rule to allow
+                                  several independent rules for one target.
+* Automatic Prerequisites::     How to automatically generate rules giving
+                                  prerequisites from source files themselves.
+
+
+File: make.info,  Node: Rule Example,  Next: Rule Syntax,  Prev: Rules,  Up: Rules
+
+4.1 Rule Example
+================
+
+Here is an example of a rule:
+
+     foo.o : foo.c defs.h       # module for twiddling the frobs
+             cc -c -g foo.c
+
+   Its target is `foo.o' and its prerequisites are `foo.c' and
+`defs.h'.  It has one command, which is `cc -c -g foo.c'.  The command
+line starts with a tab to identify it as a command.
+
+   This rule says two things:
+
+   * How to decide whether `foo.o' is out of date: it is out of date if
+     it does not exist, or if either `foo.c' or `defs.h' is more recent
+     than it.
+
+   * How to update the file `foo.o': by running `cc' as stated.  The
+     command does not explicitly mention `defs.h', but we presume that
+     `foo.c' includes it, and that that is why `defs.h' was added to
+     the prerequisites.
+
+
+File: make.info,  Node: Rule Syntax,  Next: Prerequisite Types,  Prev: Rule Example,  Up: Rules
+
+4.2 Rule Syntax
+===============
+
+In general, a rule looks like this:
+
+     TARGETS : PREREQUISITES
+             COMMAND
+             ...
+
+or like this:
+
+     TARGETS : PREREQUISITES ; COMMAND
+             COMMAND
+             ...
+
+   The TARGETS are file names, separated by spaces.  Wildcard
+characters may be used (*note Using Wildcard Characters in File Names:
+Wildcards.) and a name of the form `A(M)' represents member M in
+archive file A (*note Archive Members as Targets: Archive Members.).
+Usually there is only one target per rule, but occasionally there is a
+reason to have more (*note Multiple Targets in a Rule: Multiple
+Targets.).
+
+   The COMMAND lines start with a tab character.  The first command may
+appear on the line after the prerequisites, with a tab character, or may
+appear on the same line, with a semicolon.  Either way, the effect is
+the same.  *Note Writing the Commands in Rules: Commands.
+
+   Because dollar signs are used to start variable references, if you
+really want a dollar sign in a rule you must write two of them, `$$'
+(*note How to Use Variables: Using Variables.).  You may split a long
+line by inserting a backslash followed by a newline, but this is not
+required, as `make' places no limit on the length of a line in a
+makefile.
+
+   A rule tells `make' two things: when the targets are out of date,
+and how to update them when necessary.
+
+   The criterion for being out of date is specified in terms of the
+PREREQUISITES, which consist of file names separated by spaces.
+(Wildcards and archive members (*note Archives::) are allowed here too.)
+A target is out of date if it does not exist or if it is older than any
+of the prerequisites (by comparison of last-modification times).  The
+idea is that the contents of the target file are computed based on
+information in the prerequisites, so if any of the prerequisites
+changes, the contents of the existing target file are no longer
+necessarily valid.
+
+   How to update is specified by COMMANDS.  These are lines to be
+executed by the shell (normally `sh'), but with some extra features
+(*note Writing the Commands in Rules: Commands.).
+
+
+File: make.info,  Node: Prerequisite Types,  Next: Wildcards,  Prev: Rule Syntax,  Up: Rules
+
+4.3 Types of Prerequisites
+==========================
+
+There are actually two different types of prerequisites understood by
+GNU `make': normal prerequisites such as described in the previous
+section, and "order-only" prerequisites.  A normal prerequisite
+actually makes two statements: first, it imposes an order of execution
+of build commands: any commands necessary to build any of a target's
+prerequisites will be fully executed before any commands necessary to
+build the target.  Second, it imposes a dependency relationship: if any
+prerequisite is newer than the target, then the target is considered
+out-of-date and must be rebuilt.
+
+   Normally, this is exactly what you want: if a target's prerequisite
+is updated, then the target should also be updated.
+
+   Occasionally, however, you have a situation where you want to impose
+a specific ordering on the rules to be invoked _without_ forcing the
+target to be updated if one of those rules is executed.  In that case,
+you want to define "order-only" prerequisites.  Order-only
+prerequisites can be specified by placing a pipe symbol (`|') in the
+prerequisites list: any prerequisites to the left of the pipe symbol
+are normal; any prerequisites to the right are order-only:
+
+     TARGETS : NORMAL-PREREQUISITES | ORDER-ONLY-PREREQUISITES
+
+   The normal prerequisites section may of course be empty.  Also, you
+may still declare multiple lines of prerequisites for the same target:
+they are appended appropriately.  Note that if you declare the same
+file to be both a normal and an order-only prerequisite, the normal
+prerequisite takes precedence (since they are a strict superset of the
+behavior of an order-only prerequisite).
+
+
+File: make.info,  Node: Wildcards,  Next: Directory Search,  Prev: Prerequisite Types,  Up: Rules
+
+4.4 Using Wildcard Characters in File Names
+===========================================
+
+A single file name can specify many files using "wildcard characters".
+The wildcard characters in `make' are `*', `?' and `[...]', the same as
+in the Bourne shell.  For example, `*.c' specifies a list of all the
+files (in the working directory) whose names end in `.c'.
+
+   The character `~' at the beginning of a file name also has special
+significance.  If alone, or followed by a slash, it represents your home
+directory.  For example `~/bin' expands to `/home/you/bin'.  If the `~'
+is followed by a word, the string represents the home directory of the
+user named by that word.  For example `~john/bin' expands to
+`/home/john/bin'.  On systems which don't have a home directory for
+each user (such as MS-DOS or MS-Windows), this functionality can be
+simulated by setting the environment variable HOME.
+
+   Wildcard expansion happens automatically in targets, in
+prerequisites, and in commands (where the shell does the expansion).
+In other contexts, wildcard expansion happens only if you request it
+explicitly with the `wildcard' function.
+
+   The special significance of a wildcard character can be turned off by
+preceding it with a backslash.  Thus, `foo\*bar' would refer to a
+specific file whose name consists of `foo', an asterisk, and `bar'.
+
+* Menu:
+
+* Wildcard Examples::           Several examples
+* Wildcard Pitfall::            Problems to avoid.
+* Wildcard Function::           How to cause wildcard expansion where
+                                  it does not normally take place.
+
+
+File: make.info,  Node: Wildcard Examples,  Next: Wildcard Pitfall,  Prev: Wildcards,  Up: Wildcards
+
+4.4.1 Wildcard Examples
+-----------------------
+
+Wildcards can be used in the commands of a rule, where they are expanded
+by the shell.  For example, here is a rule to delete all the object
+files:
+
+     clean:
+             rm -f *.o
+
+   Wildcards are also useful in the prerequisites of a rule.  With the
+following rule in the makefile, `make print' will print all the `.c'
+files that have changed since the last time you printed them:
+
+     print: *.c
+             lpr -p $?
+             touch print
+
+This rule uses `print' as an empty target file; see *Note Empty Target
+Files to Record Events: Empty Targets.  (The automatic variable `$?' is
+used to print only those files that have changed; see *Note Automatic
+Variables: Automatic.)
+
+   Wildcard expansion does not happen when you define a variable.
+Thus, if you write this:
+
+     objects = *.o
+
+then the value of the variable `objects' is the actual string `*.o'.
+However, if you use the value of `objects' in a target, prerequisite or
+command, wildcard expansion will take place at that time.  To set
+`objects' to the expansion, instead use:
+
+     objects := $(wildcard *.o)
+
+*Note Wildcard Function::.
+
+
+File: make.info,  Node: Wildcard Pitfall,  Next: Wildcard Function,  Prev: Wildcard Examples,  Up: Wildcards
+
+4.4.2 Pitfalls of Using Wildcards
+---------------------------------
+
+Now here is an example of a naive way of using wildcard expansion, that
+does not do what you would intend.  Suppose you would like to say that
+the executable file `foo' is made from all the object files in the
+directory, and you write this:
+
+     objects = *.o
+
+     foo : $(objects)
+             cc -o foo $(CFLAGS) $(objects)
+
+The value of `objects' is the actual string `*.o'.  Wildcard expansion
+happens in the rule for `foo', so that each _existing_ `.o' file
+becomes a prerequisite of `foo' and will be recompiled if necessary.
+
+   But what if you delete all the `.o' files?  When a wildcard matches
+no files, it is left as it is, so then `foo' will depend on the
+oddly-named file `*.o'.  Since no such file is likely to exist, `make'
+will give you an error saying it cannot figure out how to make `*.o'.
+This is not what you want!
+
+   Actually it is possible to obtain the desired result with wildcard
+expansion, but you need more sophisticated techniques, including the
+`wildcard' function and string substitution.  *Note The Function
+`wildcard': Wildcard Function.
+
+   Microsoft operating systems (MS-DOS and MS-Windows) use backslashes
+to separate directories in pathnames, like so:
+
+       c:\foo\bar\baz.c
+
+   This is equivalent to the Unix-style `c:/foo/bar/baz.c' (the `c:'
+part is the so-called drive letter).  When `make' runs on these
+systems, it supports backslashes as well as the Unix-style forward
+slashes in pathnames.  However, this support does _not_ include the
+wildcard expansion, where backslash is a quote character.  Therefore,
+you _must_ use Unix-style slashes in these cases.
+
+
+File: make.info,  Node: Wildcard Function,  Prev: Wildcard Pitfall,  Up: Wildcards
+
+4.4.3 The Function `wildcard'
+-----------------------------
+
+Wildcard expansion happens automatically in rules.  But wildcard
+expansion does not normally take place when a variable is set, or
+inside the arguments of a function.  If you want to do wildcard
+expansion in such places, you need to use the `wildcard' function, like
+this:
+
+     $(wildcard PATTERN...)
+
+This string, used anywhere in a makefile, is replaced by a
+space-separated list of names of existing files that match one of the
+given file name patterns.  If no existing file name matches a pattern,
+then that pattern is omitted from the output of the `wildcard'
+function.  Note that this is different from how unmatched wildcards
+behave in rules, where they are used verbatim rather than ignored
+(*note Wildcard Pitfall::).
+
+   One use of the `wildcard' function is to get a list of all the C
+source files in a directory, like this:
+
+     $(wildcard *.c)
+
+   We can change the list of C source files into a list of object files
+by replacing the `.c' suffix with `.o' in the result, like this:
+
+     $(patsubst %.c,%.o,$(wildcard *.c))
+
+(Here we have used another function, `patsubst'.  *Note Functions for
+String Substitution and Analysis: Text Functions.)
+
+   Thus, a makefile to compile all C source files in the directory and
+then link them together could be written as follows:
+
+     objects := $(patsubst %.c,%.o,$(wildcard *.c))
+
+     foo : $(objects)
+             cc -o foo $(objects)
+
+(This takes advantage of the implicit rule for compiling C programs, so
+there is no need to write explicit rules for compiling the files.
+*Note The Two Flavors of Variables: Flavors, for an explanation of
+`:=', which is a variant of `='.)
+
+
+File: make.info,  Node: Directory Search,  Next: Phony Targets,  Prev: Wildcards,  Up: Rules
+
+4.5 Searching Directories for Prerequisites
+===========================================
+
+For large systems, it is often desirable to put sources in a separate
+directory from the binaries.  The "directory search" features of `make'
+facilitate this by searching several directories automatically to find
+a prerequisite.  When you redistribute the files among directories, you
+do not need to change the individual rules, just the search paths.
+
+* Menu:
+
+* General Search::              Specifying a search path that applies
+                                  to every prerequisite.
+* Selective Search::            Specifying a search path
+                                  for a specified class of names.
+* Search Algorithm::            When and how search paths are applied.
+* Commands/Search::             How to write shell commands that work together
+                                  with search paths.
+* Implicit/Search::             How search paths affect implicit rules.
+* Libraries/Search::            Directory search for link libraries.
+
+
+File: make.info,  Node: General Search,  Next: Selective Search,  Prev: Directory Search,  Up: Directory Search
+
+4.5.1 `VPATH': Search Path for All Prerequisites
+------------------------------------------------
+
+The value of the `make' variable `VPATH' specifies a list of
+directories that `make' should search.  Most often, the directories are
+expected to contain prerequisite files that are not in the current
+directory; however, `VPATH' specifies a search list that `make' applies
+for all files, including files which are targets of rules.
+
+   Thus, if a file that is listed as a target or prerequisite does not
+exist in the current directory, `make' searches the directories listed
+in `VPATH' for a file with that name.  If a file is found in one of
+them, that file may become the prerequisite (see below).  Rules may then
+specify the names of files in the prerequisite list as if they all
+existed in the current directory.  *Note Writing Shell Commands with
+Directory Search: Commands/Search.
+
+   In the `VPATH' variable, directory names are separated by colons or
+blanks.  The order in which directories are listed is the order followed
+by `make' in its search.  (On MS-DOS and MS-Windows, semi-colons are
+used as separators of directory names in `VPATH', since the colon can
+be used in the pathname itself, after the drive letter.)
+
+   For example,
+
+     VPATH = src:../headers
+
+specifies a path containing two directories, `src' and `../headers',
+which `make' searches in that order.
+
+   With this value of `VPATH', the following rule,
+
+     foo.o : foo.c
+
+is interpreted as if it were written like this:
+
+     foo.o : src/foo.c
+
+assuming the file `foo.c' does not exist in the current directory but
+is found in the directory `src'.
+
+
+File: make.info,  Node: Selective Search,  Next: Search Algorithm,  Prev: General Search,  Up: Directory Search
+
+4.5.2 The `vpath' Directive
+---------------------------
+
+Similar to the `VPATH' variable, but more selective, is the `vpath'
+directive (note lower case), which allows you to specify a search path
+for a particular class of file names: those that match a particular
+pattern.  Thus you can supply certain search directories for one class
+of file names and other directories (or none) for other file names.
+
+   There are three forms of the `vpath' directive:
+
+`vpath PATTERN DIRECTORIES'
+     Specify the search path DIRECTORIES for file names that match
+     PATTERN.
+
+     The search path, DIRECTORIES, is a list of directories to be
+     searched, separated by colons (semi-colons on MS-DOS and
+     MS-Windows) or blanks, just like the search path used in the
+     `VPATH' variable.
+
+`vpath PATTERN'
+     Clear out the search path associated with PATTERN.
+
+`vpath'
+     Clear all search paths previously specified with `vpath'
+     directives.
+
+   A `vpath' pattern is a string containing a `%' character.  The
+string must match the file name of a prerequisite that is being searched
+for, the `%' character matching any sequence of zero or more characters
+(as in pattern rules; *note Defining and Redefining Pattern Rules:
+Pattern Rules.).  For example, `%.h' matches files that end in `.h'.
+(If there is no `%', the pattern must match the prerequisite exactly,
+which is not useful very often.)
+
+   `%' characters in a `vpath' directive's pattern can be quoted with
+preceding backslashes (`\').  Backslashes that would otherwise quote
+`%' characters can be quoted with more backslashes.  Backslashes that
+quote `%' characters or other backslashes are removed from the pattern
+before it is compared to file names.  Backslashes that are not in
+danger of quoting `%' characters go unmolested.
+
+   When a prerequisite fails to exist in the current directory, if the
+PATTERN in a `vpath' directive matches the name of the prerequisite
+file, then the DIRECTORIES in that directive are searched just like
+(and before) the directories in the `VPATH' variable.
+
+   For example,
+
+     vpath %.h ../headers
+
+tells `make' to look for any prerequisite whose name ends in `.h' in
+the directory `../headers' if the file is not found in the current
+directory.
+
+   If several `vpath' patterns match the prerequisite file's name, then
+`make' processes each matching `vpath' directive one by one, searching
+all the directories mentioned in each directive.  `make' handles
+multiple `vpath' directives in the order in which they appear in the
+makefile; multiple directives with the same pattern are independent of
+each other.
+
+   Thus,
+
+     vpath %.c foo
+     vpath %   blish
+     vpath %.c bar
+
+will look for a file ending in `.c' in `foo', then `blish', then `bar',
+while
+
+     vpath %.c foo:bar
+     vpath %   blish
+
+will look for a file ending in `.c' in `foo', then `bar', then `blish'.
+
+
+File: make.info,  Node: Search Algorithm,  Next: Commands/Search,  Prev: Selective Search,  Up: Directory Search
+
+4.5.3 How Directory Searches are Performed
+------------------------------------------
+
+When a prerequisite is found through directory search, regardless of
+type (general or selective), the pathname located may not be the one
+that `make' actually provides you in the prerequisite list.  Sometimes
+the path discovered through directory search is thrown away.
+
+   The algorithm `make' uses to decide whether to keep or abandon a
+path found via directory search is as follows:
+
+  1. If a target file does not exist at the path specified in the
+     makefile, directory search is performed.
+
+  2. If the directory search is successful, that path is kept and this
+     file is tentatively stored as the target.
+
+  3. All prerequisites of this target are examined using this same
+     method.
+
+  4. After processing the prerequisites, the target may or may not need
+     to be rebuilt:
+
+       a. If the target does _not_ need to be rebuilt, the path to the
+          file found during directory search is used for any
+          prerequisite lists which contain this target.  In short, if
+          `make' doesn't need to rebuild the target then you use the
+          path found via directory search.
+
+       b. If the target _does_ need to be rebuilt (is out-of-date), the
+          pathname found during directory search is _thrown away_, and
+          the target is rebuilt using the file name specified in the
+          makefile.  In short, if `make' must rebuild, then the target
+          is rebuilt locally, not in the directory found via directory
+          search.
+
+   This algorithm may seem complex, but in practice it is quite often
+exactly what you want.
+
+   Other versions of `make' use a simpler algorithm: if the file does
+not exist, and it is found via directory search, then that pathname is
+always used whether or not the target needs to be built.  Thus, if the
+target is rebuilt it is created at the pathname discovered during
+directory search.
+
+   If, in fact, this is the behavior you want for some or all of your
+directories, you can use the `GPATH' variable to indicate this to
+`make'.
+
+   `GPATH' has the same syntax and format as `VPATH' (that is, a space-
+or colon-delimited list of pathnames).  If an out-of-date target is
+found by directory search in a directory that also appears in `GPATH',
+then that pathname is not thrown away.  The target is rebuilt using the
+expanded path.
+
+
+File: make.info,  Node: Commands/Search,  Next: Implicit/Search,  Prev: Search Algorithm,  Up: Directory Search
+
+4.5.4 Writing Shell Commands with Directory Search
+--------------------------------------------------
+
+When a prerequisite is found in another directory through directory
+search, this cannot change the commands of the rule; they will execute
+as written.  Therefore, you must write the commands with care so that
+they will look for the prerequisite in the directory where `make' finds
+it.
+
+   This is done with the "automatic variables" such as `$^' (*note
+Automatic Variables: Automatic.).  For instance, the value of `$^' is a
+list of all the prerequisites of the rule, including the names of the
+directories in which they were found, and the value of `$@' is the
+target.  Thus:
+
+     foo.o : foo.c
+             cc -c $(CFLAGS) $^ -o $@
+
+(The variable `CFLAGS' exists so you can specify flags for C
+compilation by implicit rules; we use it here for consistency so it will
+affect all C compilations uniformly; *note Variables Used by Implicit
+Rules: Implicit Variables.)
+
+   Often the prerequisites include header files as well, which you do
+not want to mention in the commands.  The automatic variable `$<' is
+just the first prerequisite:
+
+     VPATH = src:../headers
+     foo.o : foo.c defs.h hack.h
+             cc -c $(CFLAGS) $< -o $@
+
+
+File: make.info,  Node: Implicit/Search,  Next: Libraries/Search,  Prev: Commands/Search,  Up: Directory Search
+
+4.5.5 Directory Search and Implicit Rules
+-----------------------------------------
+
+The search through the directories specified in `VPATH' or with `vpath'
+also happens during consideration of implicit rules (*note Using
+Implicit Rules: Implicit Rules.).
+
+   For example, when a file `foo.o' has no explicit rule, `make'
+considers implicit rules, such as the built-in rule to compile `foo.c'
+if that file exists.  If such a file is lacking in the current
+directory, the appropriate directories are searched for it.  If `foo.c'
+exists (or is mentioned in the makefile) in any of the directories, the
+implicit rule for C compilation is applied.
+
+   The commands of implicit rules normally use automatic variables as a
+matter of necessity; consequently they will use the file names found by
+directory search with no extra effort.
+
+
+File: make.info,  Node: Libraries/Search,  Prev: Implicit/Search,  Up: Directory Search
+
+4.5.6 Directory Search for Link Libraries
+-----------------------------------------
+
+Directory search applies in a special way to libraries used with the
+linker.  This special feature comes into play when you write a
+prerequisite whose name is of the form `-lNAME'.  (You can tell
+something strange is going on here because the prerequisite is normally
+the name of a file, and the _file name_ of a library generally looks
+like `libNAME.a', not like `-lNAME'.)
+
+   When a prerequisite's name has the form `-lNAME', `make' handles it
+specially by searching for the file `libNAME.so' in the current
+directory, in directories specified by matching `vpath' search paths
+and the `VPATH' search path, and then in the directories `/lib',
+`/usr/lib', and `PREFIX/lib' (normally `/usr/local/lib', but
+MS-DOS/MS-Windows versions of `make' behave as if PREFIX is defined to
+be the root of the DJGPP installation tree).
+
+   If that file is not found, then the file `libNAME.a' is searched
+for, in the same directories as above.
+
+   For example, if there is a `/usr/lib/libcurses.a' library on your
+system (and no `/usr/lib/libcurses.so' file), then
+
+     foo : foo.c -lcurses
+             cc $^ -o $@
+
+would cause the command `cc foo.c /usr/lib/libcurses.a -o foo' to be
+executed when `foo' is older than `foo.c' or than
+`/usr/lib/libcurses.a'.
+
+   Although the default set of files to be searched for is `libNAME.so'
+and `libNAME.a', this is customizable via the `.LIBPATTERNS' variable.
+Each word in the value of this variable is a pattern string.  When a
+prerequisite like `-lNAME' is seen, `make' will replace the percent in
+each pattern in the list with NAME and perform the above directory
+searches using that library filename.  If no library is found, the next
+word in the list will be used.
+
+   The default value for `.LIBPATTERNS' is "`lib%.so lib%.a'", which
+provides the default behavior described above.
+
+   You can turn off link library expansion completely by setting this
+variable to an empty value.
+
+
+File: make.info,  Node: Phony Targets,  Next: Force Targets,  Prev: Directory Search,  Up: Rules
+
+4.6 Phony Targets
+=================
+
+A phony target is one that is not really the name of a file.  It is
+just a name for some commands to be executed when you make an explicit
+request.  There are two reasons to use a phony target: to avoid a
+conflict with a file of the same name, and to improve performance.
+
+   If you write a rule whose commands will not create the target file,
+the commands will be executed every time the target comes up for
+remaking.  Here is an example:
+
+     clean:
+             rm *.o temp
+
+Because the `rm' command does not create a file named `clean', probably
+no such file will ever exist.  Therefore, the `rm' command will be
+executed every time you say `make clean'.  
+
+   The phony target will cease to work if anything ever does create a
+file named `clean' in this directory.  Since it has no prerequisites,
+the file `clean' would inevitably be considered up to date, and its
+commands would not be executed.  To avoid this problem, you can
+explicitly declare the target to be phony, using the special target
+`.PHONY' (*note Special Built-in Target Names: Special Targets.) as
+follows:
+
+     .PHONY : clean
+
+Once this is done, `make clean' will run the commands regardless of
+whether there is a file named `clean'.
+
+   Since it knows that phony targets do not name actual files that
+could be remade from other files, `make' skips the implicit rule search
+for phony targets (*note Implicit Rules::).  This is why declaring a
+target phony is good for performance, even if you are not worried about
+the actual file existing.
+
+   Thus, you first write the line that states that `clean' is a phony
+target, then you write the rule, like this:
+
+     .PHONY: clean
+     clean:
+             rm *.o temp
+
+   Another example of the usefulness of phony targets is in conjunction
+with recursive invocations of `make' (for more information, see *Note
+Recursive Use of `make': Recursion.).  In this case the makefile will
+often contain a variable which lists a number of subdirectories to be
+built.  One way to handle this is with one rule whose command is a
+shell loop over the subdirectories, like this:
+
+     SUBDIRS = foo bar baz
+
+     subdirs:
+             for dir in $(SUBDIRS); do \
+               $(MAKE) -C $$dir; \
+             done
+
+   There are a few problems with this method, however.  First, any error
+detected in a submake is not noted by this rule, so it will continue to
+build the rest of the directories even when one fails.  This can be
+overcome by adding shell commands to note the error and exit, but then
+it will do so even if `make' is invoked with the `-k' option, which is
+unfortunate.  Second, and perhaps more importantly, you cannot take
+advantage of the parallel build capabilities of make using this method,
+since there is only one rule.
+
+   By declaring the subdirectories as phony targets (you must do this as
+the subdirectory obviously always exists; otherwise it won't be built)
+you can remove these problems:
+
+     SUBDIRS = foo bar baz
+
+     .PHONY: subdirs $(SUBDIRS)
+
+     subdirs: $(SUBDIRS)
+
+     $(SUBDIRS):
+             $(MAKE) -C $@
+
+     foo: baz
+
+   Here we've also declared that the `foo' subdirectory cannot be built
+until after the `baz' subdirectory is complete; this kind of
+relationship declaration is particularly important when attempting
+parallel builds.
+
+   A phony target should not be a prerequisite of a real target file;
+if it is, its commands are run every time `make' goes to update that
+file.  As long as a phony target is never a prerequisite of a real
+target, the phony target commands will be executed only when the phony
+target is a specified goal (*note Arguments to Specify the Goals:
+Goals.).
+
+   Phony targets can have prerequisites.  When one directory contains
+multiple programs, it is most convenient to describe all of the
+programs in one makefile `./Makefile'.  Since the target remade by
+default will be the first one in the makefile, it is common to make
+this a phony target named `all' and give it, as prerequisites, all the
+individual programs.  For example:
+
+     all : prog1 prog2 prog3
+     .PHONY : all
+
+     prog1 : prog1.o utils.o
+             cc -o prog1 prog1.o utils.o
+
+     prog2 : prog2.o
+             cc -o prog2 prog2.o
+
+     prog3 : prog3.o sort.o utils.o
+             cc -o prog3 prog3.o sort.o utils.o
+
+Now you can say just `make' to remake all three programs, or specify as
+arguments the ones to remake (as in `make prog1 prog3').
+
+   When one phony target is a prerequisite of another, it serves as a
+subroutine of the other.  For example, here `make cleanall' will delete
+the object files, the difference files, and the file `program':
+
+     .PHONY: cleanall cleanobj cleandiff
+
+     cleanall : cleanobj cleandiff
+             rm program
+
+     cleanobj :
+             rm *.o
+
+     cleandiff :
+             rm *.diff
+
+
+File: make.info,  Node: Force Targets,  Next: Empty Targets,  Prev: Phony Targets,  Up: Rules
+
+4.7 Rules without Commands or Prerequisites
+===========================================
+
+If a rule has no prerequisites or commands, and the target of the rule
+is a nonexistent file, then `make' imagines this target to have been
+updated whenever its rule is run.  This implies that all targets
+depending on this one will always have their commands run.
+
+   An example will illustrate this:
+
+     clean: FORCE
+             rm $(objects)
+     FORCE:
+
+   Here the target `FORCE' satisfies the special conditions, so the
+target `clean' that depends on it is forced to run its commands.  There
+is nothing special about the name `FORCE', but that is one name
+commonly used this way.
+
+   As you can see, using `FORCE' this way has the same results as using
+`.PHONY: clean'.
+
+   Using `.PHONY' is more explicit and more efficient.  However, other
+versions of `make' do not support `.PHONY'; thus `FORCE' appears in
+many makefiles.  *Note Phony Targets::.
+
+
+File: make.info,  Node: Empty Targets,  Next: Special Targets,  Prev: Force Targets,  Up: Rules
+
+4.8 Empty Target Files to Record Events
+=======================================
+
+The "empty target" is a variant of the phony target; it is used to hold
+commands for an action that you request explicitly from time to time.
+Unlike a phony target, this target file can really exist; but the file's
+contents do not matter, and usually are empty.
+
+   The purpose of the empty target file is to record, with its
+last-modification time, when the rule's commands were last executed.  It
+does so because one of the commands is a `touch' command to update the
+target file.
+
+   The empty target file should have some prerequisites (otherwise it
+doesn't make sense).  When you ask to remake the empty target, the
+commands are executed if any prerequisite is more recent than the
+target; in other words, if a prerequisite has changed since the last
+time you remade the target.  Here is an example:
+
+     print: foo.c bar.c
+             lpr -p $?
+             touch print
+   
+With this rule, `make print' will execute the `lpr' command if either
+source file has changed since the last `make print'.  The automatic
+variable `$?' is used to print only those files that have changed
+(*note Automatic Variables: Automatic.).
+
+
+File: make.info,  Node: Special Targets,  Next: Multiple Targets,  Prev: Empty Targets,  Up: Rules
+
+4.9 Special Built-in Target Names
+=================================
+
+Certain names have special meanings if they appear as targets.
+
+`.PHONY'
+     The prerequisites of the special target `.PHONY' are considered to
+     be phony targets.  When it is time to consider such a target,
+     `make' will run its commands unconditionally, regardless of
+     whether a file with that name exists or what its last-modification
+     time is.  *Note Phony Targets: Phony Targets.
+
+`.SUFFIXES'
+     The prerequisites of the special target `.SUFFIXES' are the list
+     of suffixes to be used in checking for suffix rules.  *Note
+     Old-Fashioned Suffix Rules: Suffix Rules.
+
+`.DEFAULT'
+     The commands specified for `.DEFAULT' are used for any target for
+     which no rules are found (either explicit rules or implicit rules).
+     *Note Last Resort::.  If `.DEFAULT' commands are specified, every
+     file mentioned as a prerequisite, but not as a target in a rule,
+     will have these commands executed on its behalf.  *Note Implicit
+     Rule Search Algorithm: Implicit Rule Search.
+
+`.PRECIOUS'
+     The targets which `.PRECIOUS' depends on are given the following
+     special treatment: if `make' is killed or interrupted during the
+     execution of their commands, the target is not deleted.  *Note
+     Interrupting or Killing `make': Interrupts.  Also, if the target
+     is an intermediate file, it will not be deleted after it is no
+     longer needed, as is normally done.  *Note Chains of Implicit
+     Rules: Chained Rules.  In this latter respect it overlaps with the
+     `.SECONDARY' special target.
+
+     You can also list the target pattern of an implicit rule (such as
+     `%.o') as a prerequisite file of the special target `.PRECIOUS' to
+     preserve intermediate files created by rules whose target patterns
+     match that file's name.
+
+`.INTERMEDIATE'
+     The targets which `.INTERMEDIATE' depends on are treated as
+     intermediate files.  *Note Chains of Implicit Rules: Chained Rules.
+     `.INTERMEDIATE' with no prerequisites has no effect.
+
+`.SECONDARY'
+     The targets which `.SECONDARY' depends on are treated as
+     intermediate files, except that they are never automatically
+     deleted.  *Note Chains of Implicit Rules: Chained Rules.
+
+     `.SECONDARY' with no prerequisites causes all targets to be treated
+     as secondary (i.e., no target is removed because it is considered
+     intermediate).
+
+`.DELETE_ON_ERROR'
+     If `.DELETE_ON_ERROR' is mentioned as a target anywhere in the
+     makefile, then `make' will delete the target of a rule if it has
+     changed and its commands exit with a nonzero exit status, just as
+     it does when it receives a signal.  *Note Errors in Commands:
+     Errors.
+
+`.IGNORE'
+     If you specify prerequisites for `.IGNORE', then `make' will
+     ignore errors in execution of the commands run for those particular
+     files.  The commands for `.IGNORE' are not meaningful.
+
+     If mentioned as a target with no prerequisites, `.IGNORE' says to
+     ignore errors in execution of commands for all files.  This usage
+     of `.IGNORE' is supported only for historical compatibility.  Since
+     this affects every command in the makefile, it is not very useful;
+     we recommend you use the more selective ways to ignore errors in
+     specific commands.  *Note Errors in Commands: Errors.
+
+`.LOW_RESOLUTION_TIME'
+     If you specify prerequisites for `.LOW_RESOLUTION_TIME', `make'
+     assumes that these files are created by commands that generate low
+     resolution time stamps.  The commands for `.LOW_RESOLUTION_TIME'
+     are not meaningful.
+
+     The high resolution file time stamps of many modern hosts lessen
+     the chance of `make' incorrectly concluding that a file is up to
+     date.  Unfortunately, these hosts provide no way to set a high
+     resolution file time stamp, so commands like `cp -p' that
+     explicitly set a file's time stamp must discard its subsecond
+     part.  If a file is created by such a command, you should list it
+     as a prerequisite of `.LOW_RESOLUTION_TIME' so that `make' does
+     not mistakenly conclude that the file is out of date.  For example:
+
+          .LOW_RESOLUTION_TIME: dst
+          dst: src
+                  cp -p src dst
+
+     Since `cp -p' discards the subsecond part of `src''s time stamp,
+     `dst' is typically slightly older than `src' even when it is up to
+     date.  The `.LOW_RESOLUTION_TIME' line causes `make' to consider
+     `dst' to be up to date if its time stamp is at the start of the
+     same second that `src''s time stamp is in.
+
+     Due to a limitation of the archive format, archive member time
+     stamps are always low resolution.  You need not list archive
+     members as prerequisites of `.LOW_RESOLUTION_TIME', as `make' does
+     this automatically.
+
+`.SILENT'
+     If you specify prerequisites for `.SILENT', then `make' will not
+     print the commands to remake those particular files before
+     executing them.  The commands for `.SILENT' are not meaningful.
+
+     If mentioned as a target with no prerequisites, `.SILENT' says not
+     to print any commands before executing them.  This usage of
+     `.SILENT' is supported only for historical compatibility.  We
+     recommend you use the more selective ways to silence specific
+     commands.  *Note Command Echoing: Echoing.  If you want to silence
+     all commands for a particular run of `make', use the `-s' or
+     `--silent' option (*note Options Summary::).
+
+`.EXPORT_ALL_VARIABLES'
+     Simply by being mentioned as a target, this tells `make' to export
+     all variables to child processes by default.  *Note Communicating
+     Variables to a Sub-`make': Variables/Recursion.
+
+`.NOTPARALLEL'
+     If `.NOTPARALLEL' is mentioned as a target, then this invocation of
+     `make' will be run serially, even if the `-j' option is given.
+     Any recursively invoked `make' command will still be run in
+     parallel (unless its makefile contains this target).  Any
+     prerequisites on this target are ignored.
+
+   Any defined implicit rule suffix also counts as a special target if
+it appears as a target, and so does the concatenation of two suffixes,
+such as `.c.o'.  These targets are suffix rules, an obsolete way of
+defining implicit rules (but a way still widely used).  In principle,
+any target name could be special in this way if you break it in two and
+add both pieces to the suffix list.  In practice, suffixes normally
+begin with `.', so these special target names also begin with `.'.
+*Note Old-Fashioned Suffix Rules: Suffix Rules.
+
+
+File: make.info,  Node: Multiple Targets,  Next: Multiple Rules,  Prev: Special Targets,  Up: Rules
+
+4.10 Multiple Targets in a Rule
+===============================
+
+A rule with multiple targets is equivalent to writing many rules, each
+with one target, and all identical aside from that.  The same commands
+apply to all the targets, but their effects may vary because you can
+substitute the actual target name into the command using `$@'.  The
+rule contributes the same prerequisites to all the targets also.
+
+   This is useful in two cases.
+
+   * You want just prerequisites, no commands.  For example:
+
+          kbd.o command.o files.o: command.h
+
+     gives an additional prerequisite to each of the three object files
+     mentioned.
+
+   * Similar commands work for all the targets.  The commands do not
+     need to be absolutely identical, since the automatic variable `$@'
+     can be used to substitute the particular target to be remade into
+     the commands (*note Automatic Variables: Automatic.).  For example:
+
+          bigoutput littleoutput : text.g
+                  generate text.g -$(subst output,,$@) > $@
+     
+     is equivalent to
+
+          bigoutput : text.g
+                  generate text.g -big > bigoutput
+          littleoutput : text.g
+                  generate text.g -little > littleoutput
+
+     Here we assume the hypothetical program `generate' makes two types
+     of output, one if given `-big' and one if given `-little'.  *Note
+     Functions for String Substitution and Analysis: Text Functions,
+     for an explanation of the `subst' function.
+
+   Suppose you would like to vary the prerequisites according to the
+target, much as the variable `$@' allows you to vary the commands.  You
+cannot do this with multiple targets in an ordinary rule, but you can
+do it with a "static pattern rule".  *Note Static Pattern Rules: Static
+Pattern.
+
+
+File: make.info,  Node: Multiple Rules,  Next: Static Pattern,  Prev: Multiple Targets,  Up: Rules
+
+4.11 Multiple Rules for One Target
+==================================
+
+One file can be the target of several rules.  All the prerequisites
+mentioned in all the rules are merged into one list of prerequisites for
+the target.  If the target is older than any prerequisite from any rule,
+the commands are executed.
+
+   There can only be one set of commands to be executed for a file.  If
+more than one rule gives commands for the same file, `make' uses the
+last set given and prints an error message.  (As a special case, if the
+file's name begins with a dot, no error message is printed.  This odd
+behavior is only for compatibility with other implementations of
+`make'... you should avoid using it).  Occasionally it is useful to
+have the same target invoke multiple commands which are defined in
+different parts of your makefile; you can use "double-colon rules"
+(*note Double-Colon::) for this.
+
+   An extra rule with just prerequisites can be used to give a few extra
+prerequisites to many files at once.  For example, makefiles often have
+a variable, such as `objects', containing a list of all the compiler
+output files in the system being made.  An easy way to say that all of
+them must be recompiled if `config.h' changes is to write the following:
+
+     objects = foo.o bar.o
+     foo.o : defs.h
+     bar.o : defs.h test.h
+     $(objects) : config.h
+
+   This could be inserted or taken out without changing the rules that
+really specify how to make the object files, making it a convenient
+form to use if you wish to add the additional prerequisite
+intermittently.
+
+   Another wrinkle is that the additional prerequisites could be
+specified with a variable that you set with a command argument to `make'
+(*note Overriding Variables: Overriding.).  For example,
+
+     extradeps=
+     $(objects) : $(extradeps)
+
+means that the command `make extradeps=foo.h' will consider `foo.h' as
+a prerequisite of each object file, but plain `make' will not.
+
+   If none of the explicit rules for a target has commands, then `make'
+searches for an applicable implicit rule to find some commands *note
+Using Implicit Rules: Implicit Rules.).
+
+
+File: make.info,  Node: Static Pattern,  Next: Double-Colon,  Prev: Multiple Rules,  Up: Rules
+
+4.12 Static Pattern Rules
+=========================
+
+"Static pattern rules" are rules which specify multiple targets and
+construct the prerequisite names for each target based on the target
+name.  They are more general than ordinary rules with multiple targets
+because the targets do not have to have identical prerequisites.  Their
+prerequisites must be _analogous_, but not necessarily _identical_.
+
+* Menu:
+
+* Static Usage::                The syntax of static pattern rules.
+* Static versus Implicit::      When are they better than implicit rules?
+
+
+File: make.info,  Node: Static Usage,  Next: Static versus Implicit,  Prev: Static Pattern,  Up: Static Pattern
+
+4.12.1 Syntax of Static Pattern Rules
+-------------------------------------
+
+Here is the syntax of a static pattern rule:
+
+     TARGETS ...: TARGET-PATTERN: PREREQ-PATTERNS ...
+             COMMANDS
+             ...
+
+The TARGETS list specifies the targets that the rule applies to.  The
+targets can contain wildcard characters, just like the targets of
+ordinary rules (*note Using Wildcard Characters in File Names:
+Wildcards.).
+
+   The TARGET-PATTERN and PREREQ-PATTERNS say how to compute the
+prerequisites of each target.  Each target is matched against the
+TARGET-PATTERN to extract a part of the target name, called the "stem".
+This stem is substituted into each of the PREREQ-PATTERNS to make the
+prerequisite names (one from each PREREQ-PATTERN).
+
+   Each pattern normally contains the character `%' just once.  When the
+TARGET-PATTERN matches a target, the `%' can match any part of the
+target name; this part is called the "stem".  The rest of the pattern
+must match exactly.  For example, the target `foo.o' matches the
+pattern `%.o', with `foo' as the stem.  The targets `foo.c' and
+`foo.out' do not match that pattern.
+
+   The prerequisite names for each target are made by substituting the
+stem for the `%' in each prerequisite pattern.  For example, if one
+prerequisite pattern is `%.c', then substitution of the stem `foo'
+gives the prerequisite name `foo.c'.  It is legitimate to write a
+prerequisite pattern that does not contain `%'; then this prerequisite
+is the same for all targets.
+
+   `%' characters in pattern rules can be quoted with preceding
+backslashes (`\').  Backslashes that would otherwise quote `%'
+characters can be quoted with more backslashes.  Backslashes that quote
+`%' characters or other backslashes are removed from the pattern before
+it is compared to file names or has a stem substituted into it.
+Backslashes that are not in danger of quoting `%' characters go
+unmolested.  For example, the pattern `the\%weird\\%pattern\\' has
+`the%weird\' preceding the operative `%' character, and `pattern\\'
+following it.  The final two backslashes are left alone because they
+cannot affect any `%' character.
+
+   Here is an example, which compiles each of `foo.o' and `bar.o' from
+the corresponding `.c' file:
+
+     objects = foo.o bar.o
+
+     all: $(objects)
+
+     $(objects): %.o: %.c
+             $(CC) -c $(CFLAGS) $< -o $@
+
+Here `$<' is the automatic variable that holds the name of the
+prerequisite and `$@' is the automatic variable that holds the name of
+the target; see *Note Automatic Variables: Automatic.
+
+   Each target specified must match the target pattern; a warning is
+issued for each target that does not.  If you have a list of files,
+only some of which will match the pattern, you can use the `filter'
+function to remove nonmatching file names (*note Functions for String
+Substitution and Analysis: Text Functions.):
+
+     files = foo.elc bar.o lose.o
+
+     $(filter %.o,$(files)): %.o: %.c
+             $(CC) -c $(CFLAGS) $< -o $@
+     $(filter %.elc,$(files)): %.elc: %.el
+             emacs -f batch-byte-compile $<
+
+In this example the result of `$(filter %.o,$(files))' is `bar.o
+lose.o', and the first static pattern rule causes each of these object
+files to be updated by compiling the corresponding C source file.  The
+result of `$(filter %.elc,$(files))' is `foo.elc', so that file is made
+from `foo.el'.
+
+   Another example shows how to use `$*' in static pattern rules: 
+
+     bigoutput littleoutput : %output : text.g
+             generate text.g -$* > $@
+
+When the `generate' command is run, `$*' will expand to the stem,
+either `big' or `little'.
+
+
+File: make.info,  Node: Static versus Implicit,  Prev: Static Usage,  Up: Static Pattern
+
+4.12.2 Static Pattern Rules versus Implicit Rules
+-------------------------------------------------
+
+A static pattern rule has much in common with an implicit rule defined
+as a pattern rule (*note Defining and Redefining Pattern Rules: Pattern
+Rules.).  Both have a pattern for the target and patterns for
+constructing the names of prerequisites.  The difference is in how
+`make' decides _when_ the rule applies.
+
+   An implicit rule _can_ apply to any target that matches its pattern,
+but it _does_ apply only when the target has no commands otherwise
+specified, and only when the prerequisites can be found.  If more than
+one implicit rule appears applicable, only one applies; the choice
+depends on the order of rules.
+
+   By contrast, a static pattern rule applies to the precise list of
+targets that you specify in the rule.  It cannot apply to any other
+target and it invariably does apply to each of the targets specified.
+If two conflicting rules apply, and both have commands, that's an error.
+
+   The static pattern rule can be better than an implicit rule for these
+reasons:
+
+   * You may wish to override the usual implicit rule for a few files
+     whose names cannot be categorized syntactically but can be given
+     in an explicit list.
+
+   * If you cannot be sure of the precise contents of the directories
+     you are using, you may not be sure which other irrelevant files
+     might lead `make' to use the wrong implicit rule.  The choice
+     might depend on the order in which the implicit rule search is
+     done.  With static pattern rules, there is no uncertainty: each
+     rule applies to precisely the targets specified.
+
+
+File: make.info,  Node: Double-Colon,  Next: Automatic Prerequisites,  Prev: Static Pattern,  Up: Rules
+
+4.13 Double-Colon Rules
+=======================
+
+"Double-colon" rules are rules written with `::' instead of `:' after
+the target names.  They are handled differently from ordinary rules
+when the same target appears in more than one rule.
+
+   When a target appears in multiple rules, all the rules must be the
+same type: all ordinary, or all double-colon.  If they are
+double-colon, each of them is independent of the others.  Each
+double-colon rule's commands are executed if the target is older than
+any prerequisites of that rule.  If there are no prerequisites for that
+rule, its commands are always executed (even if the target already
+exists).  This can result in executing none, any, or all of the
+double-colon rules.
+
+   Double-colon rules with the same target are in fact completely
+separate from one another.  Each double-colon rule is processed
+individually, just as rules with different targets are processed.
+
+   The double-colon rules for a target are executed in the order they
+appear in the makefile.  However, the cases where double-colon rules
+really make sense are those where the order of executing the commands
+would not matter.
+
+   Double-colon rules are somewhat obscure and not often very useful;
+they provide a mechanism for cases in which the method used to update a
+target differs depending on which prerequisite files caused the update,
+and such cases are rare.
+
+   Each double-colon rule should specify commands; if it does not, an
+implicit rule will be used if one applies.  *Note Using Implicit Rules:
+Implicit Rules.
+
+
+File: make.info,  Node: Automatic Prerequisites,  Prev: Double-Colon,  Up: Rules
+
+4.14 Generating Prerequisites Automatically
+===========================================
+
+In the makefile for a program, many of the rules you need to write often
+say only that some object file depends on some header file.  For
+example, if `main.c' uses `defs.h' via an `#include', you would write:
+
+     main.o: defs.h
+
+You need this rule so that `make' knows that it must remake `main.o'
+whenever `defs.h' changes.  You can see that for a large program you
+would have to write dozens of such rules in your makefile.  And, you
+must always be very careful to update the makefile every time you add
+or remove an `#include'.  
+
+   To avoid this hassle, most modern C compilers can write these rules
+for you, by looking at the `#include' lines in the source files.
+Usually this is done with the `-M' option to the compiler.  For
+example, the command:
+
+     cc -M main.c
+
+generates the output:
+
+     main.o : main.c defs.h
+
+Thus you no longer have to write all those rules yourself.  The
+compiler will do it for you.
+
+   Note that such a prerequisite constitutes mentioning `main.o' in a
+makefile, so it can never be considered an intermediate file by implicit
+rule search.  This means that `make' won't ever remove the file after
+using it; *note Chains of Implicit Rules: Chained Rules.
+
+   With old `make' programs, it was traditional practice to use this
+compiler feature to generate prerequisites on demand with a command like
+`make depend'.  That command would create a file `depend' containing
+all the automatically-generated prerequisites; then the makefile could
+use `include' to read them in (*note Include::).
+
+   In GNU `make', the feature of remaking makefiles makes this practice
+obsolete--you need never tell `make' explicitly to regenerate the
+prerequisites, because it always regenerates any makefile that is out
+of date.  *Note Remaking Makefiles::.
+
+   The practice we recommend for automatic prerequisite generation is
+to have one makefile corresponding to each source file.  For each
+source file `NAME.c' there is a makefile `NAME.d' which lists what
+files the object file `NAME.o' depends on.  That way only the source
+files that have changed need to be rescanned to produce the new
+prerequisites.
+
+   Here is the pattern rule to generate a file of prerequisites (i.e.,
+a makefile) called `NAME.d' from a C source file called `NAME.c':
+
+     %.d: %.c
+
+              $(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
+              sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
+              rm -f $@.$$$$
+
+*Note Pattern Rules::, for information on defining pattern rules.  The
+`-e' flag to the shell causes it to exit immediately if the `$(CC)'
+command (or any other command) fails (exits with a nonzero status).  
+
+   With the GNU C compiler, you may wish to use the `-MM' flag instead
+of `-M'.  This omits prerequisites on system header files.  *Note
+Options Controlling the Preprocessor: (gcc.info)Preprocessor Options,
+for details.
+
+   The purpose of the `sed' command is to translate (for example):
+
+     main.o : main.c defs.h
+
+into:
+
+     main.o main.d : main.c defs.h
+
+This makes each `.d' file depend on all the source and header files
+that the corresponding `.o' file depends on.  `make' then knows it must
+regenerate the prerequisites whenever any of the source or header files
+changes.
+
+   Once you've defined the rule to remake the `.d' files, you then use
+the `include' directive to read them all in.  *Note Include::.  For
+example:
+
+     sources = foo.c bar.c
+
+     include $(sources:.c=.d)
+
+(This example uses a substitution variable reference to translate the
+list of source files `foo.c bar.c' into a list of prerequisite
+makefiles, `foo.d bar.d'.  *Note Substitution Refs::, for full
+information on substitution references.)  Since the `.d' files are
+makefiles like any others, `make' will remake them as necessary with no
+further work from you.  *Note Remaking Makefiles::.
+
+   Note that the `.d' files contain target definitions; you should be
+sure to place the `include' directive _after_ the first, default target
+in your makefiles or run the risk of having a random object file become
+the default target.  *Note How Make Works::.
+
+
+File: make.info,  Node: Commands,  Next: Using Variables,  Prev: Rules,  Up: Top
+
+5 Writing the Commands in Rules
+*******************************
+
+The commands of a rule consist of shell command lines to be executed one
+by one.  Each command line must start with a tab, except that the first
+command line may be attached to the target-and-prerequisites line with a
+semicolon in between.  Blank lines and lines of just comments may appear
+among the command lines; they are ignored.  (But beware, an apparently
+"blank" line that begins with a tab is _not_ blank!  It is an empty
+command; *note Empty Commands::.)
+
+   Users use many different shell programs, but commands in makefiles
+are always interpreted by `/bin/sh' unless the makefile specifies
+otherwise.  *Note Command Execution: Execution.
+
+   The shell that is in use determines whether comments can be written
+on command lines, and what syntax they use.  When the shell is
+`/bin/sh', a `#' starts a comment that extends to the end of the line.
+The `#' does not have to be at the beginning of a line.  Text on a line
+before a `#' is not part of the comment.
+
+* Menu:
+
+* Echoing::                     How to control when commands are echoed.
+* Execution::                   How commands are executed.
+* Parallel::                    How commands can be executed in parallel.
+* Errors::                      What happens after a command execution error.
+* Interrupts::                  What happens when a command is interrupted.
+* Recursion::                   Invoking `make' from makefiles.
+* Sequences::                   Defining canned sequences of commands.
+* Empty Commands::              Defining useful, do-nothing commands.
+
+
+File: make.info,  Node: Echoing,  Next: Execution,  Prev: Commands,  Up: Commands
+
+5.1 Command Echoing
+===================
+
+Normally `make' prints each command line before it is executed.  We
+call this "echoing" because it gives the appearance that you are typing
+the commands yourself.
+
+   When a line starts with `@', the echoing of that line is suppressed.
+The `@' is discarded before the command is passed to the shell.
+Typically you would use this for a command whose only effect is to print
+something, such as an `echo' command to indicate progress through the
+makefile:
+
+     @echo About to make distribution files
+
+   When `make' is given the flag `-n' or `--just-print' it only echoes
+commands, it won't execute them.  *Note Summary of Options: Options
+Summary.  In this case and only this case, even the commands starting
+with `@' are printed.  This flag is useful for finding out which
+commands `make' thinks are necessary without actually doing them.
+
+   The `-s' or `--silent' flag to `make' prevents all echoing, as if
+all commands started with `@'.  A rule in the makefile for the special
+target `.SILENT' without prerequisites has the same effect (*note
+Special Built-in Target Names: Special Targets.).  `.SILENT' is
+essentially obsolete since `@' is more flexible.
+
+
+File: make.info,  Node: Execution,  Next: Parallel,  Prev: Echoing,  Up: Commands
+
+5.2 Command Execution
+=====================
+
+When it is time to execute commands to update a target, they are
+executed by making a new subshell for each line.  (In practice, `make'
+may take shortcuts that do not affect the results.)
+
+   *Please note:* this implies that shell commands such as `cd' that
+set variables local to each process will not affect the following
+command lines. (1)  If you want to use `cd' to affect the next command,
+put the two on a single line with a semicolon between them.  Then
+`make' will consider them a single command and pass them, together, to
+a shell which will execute them in sequence.  For example:
+
+     foo : bar/lose
+             cd bar; gobble lose > ../foo
+
+   If you would like to split a single shell command into multiple
+lines of text, you must use a backslash at the end of all but the last
+subline.  Such a sequence of lines is combined into a single line, by
+deleting the backslash-newline sequences, before passing it to the
+shell.  Thus, the following is equivalent to the preceding example:
+
+     foo : bar/lose
+             cd bar;  \
+             gobble lose > ../foo
+
+   The program used as the shell is taken from the variable `SHELL'.
+By default, the program `/bin/sh' is used.
+
+   On MS-DOS, if `SHELL' is not set, the value of the variable
+`COMSPEC' (which is always set) is used instead.
+
+   The processing of lines that set the variable `SHELL' in Makefiles
+is different on MS-DOS.  The stock shell, `command.com', is
+ridiculously limited in its functionality and many users of `make' tend
+to install a replacement shell.  Therefore, on MS-DOS, `make' examines
+the value of `SHELL', and changes its behavior based on whether it
+points to a Unix-style or DOS-style shell.  This allows reasonable
+functionality even if `SHELL' points to `command.com'.
+
+   If `SHELL' points to a Unix-style shell, `make' on MS-DOS
+additionally checks whether that shell can indeed be found; if not, it
+ignores the line that sets `SHELL'.  In MS-DOS, GNU `make' searches for
+the shell in the following places:
+
+  1. In the precise place pointed to by the value of `SHELL'.  For
+     example, if the makefile specifies `SHELL = /bin/sh', `make' will
+     look in the directory `/bin' on the current drive.
+
+  2. In the current directory.
+
+  3. In each of the directories in the `PATH' variable, in order.
+
+
+   In every directory it examines, `make' will first look for the
+specific file (`sh' in the example above).  If this is not found, it
+will also look in that directory for that file with one of the known
+extensions which identify executable files.  For example `.exe',
+`.com', `.bat', `.btm', `.sh', and some others.
+
+   If any of these attempts is successful, the value of `SHELL' will be
+set to the full pathname of the shell as found.  However, if none of
+these is found, the value of `SHELL' will not be changed, and thus the
+line that sets it will be effectively ignored.  This is so `make' will
+only support features specific to a Unix-style shell if such a shell is
+actually installed on the system where `make' runs.
+
+   Note that this extended search for the shell is limited to the cases
+where `SHELL' is set from the Makefile; if it is set in the environment
+or command line, you are expected to set it to the full pathname of the
+shell, exactly as things are on Unix.
+
+   The effect of the above DOS-specific processing is that a Makefile
+that says `SHELL = /bin/sh' (as many Unix makefiles do), will work on
+MS-DOS unaltered if you have e.g. `sh.exe' installed in some directory
+along your `PATH'.
+
+   Unlike most variables, the variable `SHELL' is never set from the
+environment.  This is because the `SHELL' environment variable is used
+to specify your personal choice of shell program for interactive use.
+It would be very bad for personal choices like this to affect the
+functioning of makefiles.  *Note Variables from the Environment:
+Environment.  However, on MS-DOS and MS-Windows the value of `SHELL' in
+the environment *is* used, since on those systems most users do not set
+this variable, and therefore it is most likely set specifically to be
+used by `make'.  On MS-DOS, if the setting of `SHELL' is not suitable
+for `make', you can set the variable `MAKESHELL' to the shell that
+`make' should use; this will override the value of `SHELL'.
+
+   ---------- Footnotes ----------
+
+   (1) On MS-DOS, the value of current working directory is *global*,
+so changing it _will_ affect the following command lines on those
+systems.
+
+
+File: make.info,  Node: Parallel,  Next: Errors,  Prev: Execution,  Up: Commands
+
+5.3 Parallel Execution
+======================
+
+GNU `make' knows how to execute several commands at once.  Normally,
+`make' will execute only one command at a time, waiting for it to
+finish before executing the next.  However, the `-j' or `--jobs' option
+tells `make' to execute many commands simultaneously.
+
+   On MS-DOS, the `-j' option has no effect, since that system doesn't
+support multi-processing.
+
+   If the `-j' option is followed by an integer, this is the number of
+commands to execute at once; this is called the number of "job slots".
+If there is nothing looking like an integer after the `-j' option,
+there is no limit on the number of job slots.  The default number of job
+slots is one, which means serial execution (one thing at a time).
+
+   One unpleasant consequence of running several commands
+simultaneously is that output generated by the commands appears
+whenever each command sends it, so messages from different commands may
+be interspersed.
+
+   Another problem is that two processes cannot both take input from the
+same device; so to make sure that only one command tries to take input
+from the terminal at once, `make' will invalidate the standard input
+streams of all but one running command.  This means that attempting to
+read from standard input will usually be a fatal error (a `Broken pipe'
+signal) for most child processes if there are several.  
+
+   It is unpredictable which command will have a valid standard input
+stream (which will come from the terminal, or wherever you redirect the
+standard input of `make').  The first command run will always get it
+first, and the first command started after that one finishes will get
+it next, and so on.
+
+   We will change how this aspect of `make' works if we find a better
+alternative.  In the mean time, you should not rely on any command using
+standard input at all if you are using the parallel execution feature;
+but if you are not using this feature, then standard input works
+normally in all commands.
+
+   Finally, handling recursive `make' invocations raises issues.  For
+more information on this, see *Note Communicating Options to a
+Sub-`make': Options/Recursion.
+
+   If a command fails (is killed by a signal or exits with a nonzero
+status), and errors are not ignored for that command (*note Errors in
+Commands: Errors.), the remaining command lines to remake the same
+target will not be run.  If a command fails and the `-k' or
+`--keep-going' option was not given (*note Summary of Options: Options
+Summary.), `make' aborts execution.  If make terminates for any reason
+(including a signal) with child processes running, it waits for them to
+finish before actually exiting.
+
+   When the system is heavily loaded, you will probably want to run
+fewer jobs than when it is lightly loaded.  You can use the `-l' option
+to tell `make' to limit the number of jobs to run at once, based on the
+load average.  The `-l' or `--max-load' option is followed by a
+floating-point number.  For example,
+
+     -l 2.5
+
+will not let `make' start more than one job if the load average is
+above 2.5.  The `-l' option with no following number removes the load
+limit, if one was given with a previous `-l' option.
+
+   More precisely, when `make' goes to start up a job, and it already
+has at least one job running, it checks the current load average; if it
+is not lower than the limit given with `-l', `make' waits until the load
+average goes below that limit, or until all the other jobs finish.
+
+   By default, there is no load limit.
+
+
+File: make.info,  Node: Errors,  Next: Interrupts,  Prev: Parallel,  Up: Commands
+
+5.4 Errors in Commands
+======================
+
+After each shell command returns, `make' looks at its exit status.  If
+the command completed successfully, the next command line is executed
+in a new shell; after the last command line is finished, the rule is
+finished.
+
+   If there is an error (the exit status is nonzero), `make' gives up on
+the current rule, and perhaps on all rules.
+
+   Sometimes the failure of a certain command does not indicate a
+problem.  For example, you may use the `mkdir' command to ensure that a
+directory exists.  If the directory already exists, `mkdir' will report
+an error, but you probably want `make' to continue regardless.
+
+   To ignore errors in a command line, write a `-' at the beginning of
+the line's text (after the initial tab).  The `-' is discarded before
+the command is passed to the shell for execution.
+
+   For example,
+
+     clean:
+             -rm -f *.o
+
+This causes `rm' to continue even if it is unable to remove a file.
+
+   When you run `make' with the `-i' or `--ignore-errors' flag, errors
+are ignored in all commands of all rules.  A rule in the makefile for
+the special target `.IGNORE' has the same effect, if there are no
+prerequisites.  These ways of ignoring errors are obsolete because `-'
+is more flexible.
+
+   When errors are to be ignored, because of either a `-' or the `-i'
+flag, `make' treats an error return just like success, except that it
+prints out a message that tells you the status code the command exited
+with, and says that the error has been ignored.
+
+   When an error happens that `make' has not been told to ignore, it
+implies that the current target cannot be correctly remade, and neither
+can any other that depends on it either directly or indirectly.  No
+further commands will be executed for these targets, since their
+preconditions have not been achieved.
+
+   Normally `make' gives up immediately in this circumstance, returning
+a nonzero status.  However, if the `-k' or `--keep-going' flag is
+specified, `make' continues to consider the other prerequisites of the
+pending targets, remaking them if necessary, before it gives up and
+returns nonzero status.  For example, after an error in compiling one
+object file, `make -k' will continue compiling other object files even
+though it already knows that linking them will be impossible.  *Note
+Summary of Options: Options Summary.
+
+   The usual behavior assumes that your purpose is to get the specified
+targets up to date; once `make' learns that this is impossible, it
+might as well report the failure immediately.  The `-k' option says
+that the real purpose is to test as many of the changes made in the
+program as possible, perhaps to find several independent problems so
+that you can correct them all before the next attempt to compile.  This
+is why Emacs' `compile' command passes the `-k' flag by default.  
+
+   Usually when a command fails, if it has changed the target file at
+all, the file is corrupted and cannot be used--or at least it is not
+completely updated.  Yet the file's time stamp says that it is now up to
+date, so the next time `make' runs, it will not try to update that
+file.  The situation is just the same as when the command is killed by a
+signal; *note Interrupts::.  So generally the right thing to do is to
+delete the target file if the command fails after beginning to change
+the file.  `make' will do this if `.DELETE_ON_ERROR' appears as a
+target.  This is almost always what you want `make' to do, but it is
+not historical practice; so for compatibility, you must explicitly
+request it.
+
+
+File: make.info,  Node: Interrupts,  Next: Recursion,  Prev: Errors,  Up: Commands
+
+5.5 Interrupting or Killing `make'
+==================================
+
+If `make' gets a fatal signal while a command is executing, it may
+delete the target file that the command was supposed to update.  This is
+done if the target file's last-modification time has changed since
+`make' first checked it.
+
+   The purpose of deleting the target is to make sure that it is remade
+from scratch when `make' is next run.  Why is this?  Suppose you type
+`Ctrl-c' while a compiler is running, and it has begun to write an
+object file `foo.o'.  The `Ctrl-c' kills the compiler, resulting in an
+incomplete file whose last-modification time is newer than the source
+file `foo.c'.  But `make' also receives the `Ctrl-c' signal and deletes
+this incomplete file.  If `make' did not do this, the next invocation
+of `make' would think that `foo.o' did not require updating--resulting
+in a strange error message from the linker when it tries to link an
+object file half of which is missing.
+
+   You can prevent the deletion of a target file in this way by making
+the special target `.PRECIOUS' depend on it.  Before remaking a target,
+`make' checks to see whether it appears on the prerequisites of
+`.PRECIOUS', and thereby decides whether the target should be deleted
+if a signal happens.  Some reasons why you might do this are that the
+target is updated in some atomic fashion, or exists only to record a
+modification-time (its contents do not matter), or must exist at all
+times to prevent other sorts of trouble.
+
+
+File: make.info,  Node: Recursion,  Next: Sequences,  Prev: Interrupts,  Up: Commands
+
+5.6 Recursive Use of `make'
+===========================
+
+Recursive use of `make' means using `make' as a command in a makefile.
+This technique is useful when you want separate makefiles for various
+subsystems that compose a larger system.  For example, suppose you have
+a subdirectory `subdir' which has its own makefile, and you would like
+the containing directory's makefile to run `make' on the subdirectory.
+You can do it by writing this:
+
+     subsystem:
+             cd subdir && $(MAKE)
+
+or, equivalently, this (*note Summary of Options: Options Summary.):
+
+     subsystem:
+             $(MAKE) -C subdir
+   
+   You can write recursive `make' commands just by copying this example,
+but there are many things to know about how they work and why, and about
+how the sub-`make' relates to the top-level `make'.  You may also find
+it useful to declare targets that invoke recursive `make' commands as
+`.PHONY' (for more discussion on when this is useful, see *Note Phony
+Targets::).
+
+   For your convenience, GNU `make' sets the variable `CURDIR' to the
+pathname of the current working directory for you.  If `-C' is in
+effect, it will contain the path of the new directory, not the
+original.  The value has the same precedence it would have if it were
+set in the makefile (by default, an environment variable `CURDIR' will
+not override this value).  Note that setting this variable has no
+effect on the operation of `make'
+
+* Menu:
+
+* MAKE Variable::               The special effects of using `$(MAKE)'.
+* Variables/Recursion::         How to communicate variables to a sub-`make'.
+* Options/Recursion::           How to communicate options to a sub-`make'.
+* -w Option::                   How the `-w' or `--print-directory' option
+                                  helps debug use of recursive `make' commands.
+
+
+File: make.info,  Node: MAKE Variable,  Next: Variables/Recursion,  Prev: Recursion,  Up: Recursion
+
+5.6.1 How the `MAKE' Variable Works
+-----------------------------------
+
+Recursive `make' commands should always use the variable `MAKE', not
+the explicit command name `make', as shown here:
+
+     subsystem:
+             cd subdir && $(MAKE)
+
+   The value of this variable is the file name with which `make' was
+invoked.  If this file name was `/bin/make', then the command executed
+is `cd subdir && /bin/make'.  If you use a special version of `make' to
+run the top-level makefile, the same special version will be executed
+for recursive invocations.  
+
+   As a special feature, using the variable `MAKE' in the commands of a
+rule alters the effects of the `-t' (`--touch'), `-n' (`--just-print'),
+or `-q' (`--question') option.  Using the `MAKE' variable has the same
+effect as using a `+' character at the beginning of the command line.
+*Note Instead of Executing the Commands: Instead of Execution.
+
+   Consider the command `make -t' in the above example.  (The `-t'
+option marks targets as up to date without actually running any
+commands; see *Note Instead of Execution::.)  Following the usual
+definition of `-t', a `make -t' command in the example would create a
+file named `subsystem' and do nothing else.  What you really want it to
+do is run `cd subdir && make -t'; but that would require executing the
+command, and `-t' says not to execute commands.  
+
+   The special feature makes this do what you want: whenever a command
+line of a rule contains the variable `MAKE', the flags `-t', `-n' and
+`-q' do not apply to that line.  Command lines containing `MAKE' are
+executed normally despite the presence of a flag that causes most
+commands not to be run.  The usual `MAKEFLAGS' mechanism passes the
+flags to the sub-`make' (*note Communicating Options to a Sub-`make':
+Options/Recursion.), so your request to touch the files, or print the
+commands, is propagated to the subsystem.
+
+
+File: make.info,  Node: Variables/Recursion,  Next: Options/Recursion,  Prev: MAKE Variable,  Up: Recursion
+
+5.6.2 Communicating Variables to a Sub-`make'
+---------------------------------------------
+
+Variable values of the top-level `make' can be passed to the sub-`make'
+through the environment by explicit request.  These variables are
+defined in the sub-`make' as defaults, but do not override what is
+specified in the makefile used by the sub-`make' makefile unless you
+use the `-e' switch (*note Summary of Options: Options Summary.).
+
+   To pass down, or "export", a variable, `make' adds the variable and
+its value to the environment for running each command.  The sub-`make',
+in turn, uses the environment to initialize its table of variable
+values.  *Note Variables from the Environment: Environment.
+
+   Except by explicit request, `make' exports a variable only if it is
+either defined in the environment initially or set on the command line,
+and if its name consists only of letters, numbers, and underscores.
+Some shells cannot cope with environment variable names consisting of
+characters other than letters, numbers, and underscores.
+
+   The special variables `SHELL' and `MAKEFLAGS' are always exported
+(unless you unexport them).  `MAKEFILES' is exported if you set it to
+anything.
+
+   `make' automatically passes down variable values that were defined
+on the command line, by putting them in the `MAKEFLAGS' variable.
+*Note Options/Recursion::.
+
+   Variables are _not_ normally passed down if they were created by
+default by `make' (*note Variables Used by Implicit Rules: Implicit
+Variables.).  The sub-`make' will define these for itself.
+
+   If you want to export specific variables to a sub-`make', use the
+`export' directive, like this:
+
+     export VARIABLE ...
+
+If you want to _prevent_ a variable from being exported, use the
+`unexport' directive, like this:
+
+     unexport VARIABLE ...
+
+In both of these forms, the arguments to `export' and `unexport' are
+expanded, and so could be variables or functions which expand to a
+(list of) variable names to be (un)exported.
+
+   As a convenience, you can define a variable and export it at the same
+time by doing:
+
+     export VARIABLE = value
+
+has the same result as:
+
+     VARIABLE = value
+     export VARIABLE
+
+and
+
+     export VARIABLE := value
+
+has the same result as:
+
+     VARIABLE := value
+     export VARIABLE
+
+   Likewise,
+
+     export VARIABLE += value
+
+is just like:
+
+     VARIABLE += value
+     export VARIABLE
+
+*Note Appending More Text to Variables: Appending.
+
+   You may notice that the `export' and `unexport' directives work in
+`make' in the same way they work in the shell, `sh'.
+
+   If you want all variables to be exported by default, you can use
+`export' by itself:
+
+     export
+
+This tells `make' that variables which are not explicitly mentioned in
+an `export' or `unexport' directive should be exported.  Any variable
+given in an `unexport' directive will still _not_ be exported.  If you
+use `export' by itself to export variables by default, variables whose
+names contain characters other than alphanumerics and underscores will
+not be exported unless specifically mentioned in an `export' directive.
+
+   The behavior elicited by an `export' directive by itself was the
+default in older versions of GNU `make'.  If your makefiles depend on
+this behavior and you want to be compatible with old versions of
+`make', you can write a rule for the special target
+`.EXPORT_ALL_VARIABLES' instead of using the `export' directive.  This
+will be ignored by old `make's, while the `export' directive will cause
+a syntax error.  
+
+   Likewise, you can use `unexport' by itself to tell `make' _not_ to
+export variables by default.  Since this is the default behavior, you
+would only need to do this if `export' had been used by itself earlier
+(in an included makefile, perhaps).  You *cannot* use `export' and
+`unexport' by themselves to have variables exported for some commands
+and not for others.  The last `export' or `unexport' directive that
+appears by itself determines the behavior for the entire run of `make'.
+
+   As a special feature, the variable `MAKELEVEL' is changed when it is
+passed down from level to level.  This variable's value is a string
+which is the depth of the level as a decimal number.  The value is `0'
+for the top-level `make'; `1' for a sub-`make', `2' for a
+sub-sub-`make', and so on.  The incrementation happens when `make' sets
+up the environment for a command.
+
+   The main use of `MAKELEVEL' is to test it in a conditional directive
+(*note Conditional Parts of Makefiles: Conditionals.); this way you can
+write a makefile that behaves one way if run recursively and another
+way if run directly by you.
+
+   You can use the variable `MAKEFILES' to cause all sub-`make'
+commands to use additional makefiles.  The value of `MAKEFILES' is a
+whitespace-separated list of file names.  This variable, if defined in
+the outer-level makefile, is passed down through the environment; then
+it serves as a list of extra makefiles for the sub-`make' to read
+before the usual or specified ones.  *Note The Variable `MAKEFILES':
+MAKEFILES Variable.
+
+
+File: make.info,  Node: Options/Recursion,  Next: -w Option,  Prev: Variables/Recursion,  Up: Recursion
+
+5.6.3 Communicating Options to a Sub-`make'
+-------------------------------------------
+
+Flags such as `-s' and `-k' are passed automatically to the sub-`make'
+through the variable `MAKEFLAGS'.  This variable is set up
+automatically by `make' to contain the flag letters that `make'
+received.  Thus, if you do `make -ks' then `MAKEFLAGS' gets the value
+`ks'.
+
+   As a consequence, every sub-`make' gets a value for `MAKEFLAGS' in
+its environment.  In response, it takes the flags from that value and
+processes them as if they had been given as arguments.  *Note Summary
+of Options: Options Summary.
+
+   Likewise variables defined on the command line are passed to the
+sub-`make' through `MAKEFLAGS'.  Words in the value of `MAKEFLAGS' that
+contain `=', `make' treats as variable definitions just as if they
+appeared on the command line.  *Note Overriding Variables: Overriding.
+
+   The options `-C', `-f', `-o', and `-W' are not put into `MAKEFLAGS';
+these options are not passed down.
+
+   The `-j' option is a special case (*note Parallel Execution:
+Parallel.).  If you set it to some numeric value `N' and your operating
+system supports it (most any UNIX system will; others typically won't),
+the parent `make' and all the sub-`make's will communicate to ensure
+that there are only `N' jobs running at the same time between them all.
+Note that any job that is marked recursive (*note Instead of Executing
+the Commands: Instead of Execution.)  doesn't count against the total
+jobs (otherwise we could get `N' sub-`make's running and have no slots
+left over for any real work!)
+
+   If your operating system doesn't support the above communication,
+then `-j 1' is always put into `MAKEFLAGS' instead of the value you
+specified.  This is because if the `-j' option were passed down to
+sub-`make's, you would get many more jobs running in parallel than you
+asked for.  If you give `-j' with no numeric argument, meaning to run
+as many jobs as possible in parallel, this is passed down, since
+multiple infinities are no more than one.
+
+   If you do not want to pass the other flags down, you must change the
+value of `MAKEFLAGS', like this:
+
+     subsystem:
+             cd subdir && $(MAKE) MAKEFLAGS=
+
+   The command line variable definitions really appear in the variable
+`MAKEOVERRIDES', and `MAKEFLAGS' contains a reference to this variable.
+If you do want to pass flags down normally, but don't want to pass
+down the command line variable definitions, you can reset
+`MAKEOVERRIDES' to empty, like this:
+
+     MAKEOVERRIDES =
+
+This is not usually useful to do.  However, some systems have a small
+fixed limit on the size of the environment, and putting so much
+information into the value of `MAKEFLAGS' can exceed it.  If you see
+the error message `Arg list too long', this may be the problem.  (For
+strict compliance with POSIX.2, changing `MAKEOVERRIDES' does not
+affect `MAKEFLAGS' if the special target `.POSIX' appears in the
+makefile.  You probably do not care about this.)
+
+   A similar variable `MFLAGS' exists also, for historical
+compatibility.  It has the same value as `MAKEFLAGS' except that it
+does not contain the command line variable definitions, and it always
+begins with a hyphen unless it is empty (`MAKEFLAGS' begins with a
+hyphen only when it begins with an option that has no single-letter
+version, such as `--warn-undefined-variables').  `MFLAGS' was
+traditionally used explicitly in the recursive `make' command, like
+this:
+
+     subsystem:
+             cd subdir && $(MAKE) $(MFLAGS)
+
+but now `MAKEFLAGS' makes this usage redundant.  If you want your
+makefiles to be compatible with old `make' programs, use this
+technique; it will work fine with more modern `make' versions too.
+
+   The `MAKEFLAGS' variable can also be useful if you want to have
+certain options, such as `-k' (*note Summary of Options: Options
+Summary.), set each time you run `make'.  You simply put a value for
+`MAKEFLAGS' in your environment.  You can also set `MAKEFLAGS' in a
+makefile, to specify additional flags that should also be in effect for
+that makefile.  (Note that you cannot use `MFLAGS' this way.  That
+variable is set only for compatibility; `make' does not interpret a
+value you set for it in any way.)
+
+   When `make' interprets the value of `MAKEFLAGS' (either from the
+environment or from a makefile), it first prepends a hyphen if the value
+does not already begin with one.  Then it chops the value into words
+separated by blanks, and parses these words as if they were options
+given on the command line (except that `-C', `-f', `-h', `-o', `-W',
+and their long-named versions are ignored; and there is no error for an
+invalid option).
+
+   If you do put `MAKEFLAGS' in your environment, you should be sure not
+to include any options that will drastically affect the actions of
+`make' and undermine the purpose of makefiles and of `make' itself.
+For instance, the `-t', `-n', and `-q' options, if put in one of these
+variables, could have disastrous consequences and would certainly have
+at least surprising and probably annoying effects.
+
+
+File: make.info,  Node: -w Option,  Prev: Options/Recursion,  Up: Recursion
+
+5.6.4 The `--print-directory' Option
+------------------------------------
+
+If you use several levels of recursive `make' invocations, the `-w' or
+`--print-directory' option can make the output a lot easier to
+understand by showing each directory as `make' starts processing it and
+as `make' finishes processing it.  For example, if `make -w' is run in
+the directory `/u/gnu/make', `make' will print a line of the form:
+
+     make: Entering directory `/u/gnu/make'.
+
+before doing anything else, and a line of the form:
+
+     make: Leaving directory `/u/gnu/make'.
+
+when processing is completed.
+
+   Normally, you do not need to specify this option because `make' does
+it for you: `-w' is turned on automatically when you use the `-C'
+option, and in sub-`make's.  `make' will not automatically turn on `-w'
+if you also use `-s', which says to be silent, or if you use
+`--no-print-directory' to explicitly disable it.
+
+
+File: make.info,  Node: Sequences,  Next: Empty Commands,  Prev: Recursion,  Up: Commands
+
+5.7 Defining Canned Command Sequences
+=====================================
+
+When the same sequence of commands is useful in making various targets,
+you can define it as a canned sequence with the `define' directive, and
+refer to the canned sequence from the rules for those targets.  The
+canned sequence is actually a variable, so the name must not conflict
+with other variable names.
+
+   Here is an example of defining a canned sequence of commands:
+
+     define run-yacc
+     yacc $(firstword $^)
+     mv y.tab.c $@
+     endef
+   
+Here `run-yacc' is the name of the variable being defined; `endef'
+marks the end of the definition; the lines in between are the commands.
+The `define' directive does not expand variable references and
+function calls in the canned sequence; the `$' characters, parentheses,
+variable names, and so on, all become part of the value of the variable
+you are defining.  *Note Defining Variables Verbatim: Defining, for a
+complete explanation of `define'.
+
+   The first command in this example runs Yacc on the first
+prerequisite of whichever rule uses the canned sequence.  The output
+file from Yacc is always named `y.tab.c'.  The second command moves the
+output to the rule's target file name.
+
+   To use the canned sequence, substitute the variable into the
+commands of a rule.  You can substitute it like any other variable
+(*note Basics of Variable References: Reference.).  Because variables
+defined by `define' are recursively expanded variables, all the
+variable references you wrote inside the `define' are expanded now.
+For example:
+
+     foo.c : foo.y
+             $(run-yacc)
+
+`foo.y' will be substituted for the variable `$^' when it occurs in
+`run-yacc''s value, and `foo.c' for `$@'.
+
+   This is a realistic example, but this particular one is not needed in
+practice because `make' has an implicit rule to figure out these
+commands based on the file names involved (*note Using Implicit Rules:
+Implicit Rules.).
+
+   In command execution, each line of a canned sequence is treated just
+as if the line appeared on its own in the rule, preceded by a tab.  In
+particular, `make' invokes a separate subshell for each line.  You can
+use the special prefix characters that affect command lines (`@', `-',
+and `+') on each line of a canned sequence.  *Note Writing the Commands
+in Rules: Commands.  For example, using this canned sequence:
+
+     define frobnicate
+     @echo "frobnicating target $@"
+     frob-step-1 $< -o $@-step-1
+     frob-step-2 $@-step-1 -o $@
+     endef
+
+`make' will not echo the first line, the `echo' command.  But it _will_
+echo the following two command lines.
+
+   On the other hand, prefix characters on the command line that refers
+to a canned sequence apply to every line in the sequence.  So the rule:
+
+     frob.out: frob.in
+             @$(frobnicate)
+
+does not echo _any_ commands.  (*Note Command Echoing: Echoing, for a
+full explanation of `@'.)
+
+
+File: make.info,  Node: Empty Commands,  Prev: Sequences,  Up: Commands
+
+5.8 Using Empty Commands
+========================
+
+It is sometimes useful to define commands which do nothing.  This is
+done simply by giving a command that consists of nothing but
+whitespace.  For example:
+
+     target: ;
+
+defines an empty command string for `target'.  You could also use a
+line beginning with a tab character to define an empty command string,
+but this would be confusing because such a line looks empty.
+
+   You may be wondering why you would want to define a command string
+that does nothing.  The only reason this is useful is to prevent a
+target from getting implicit commands (from implicit rules or the
+`.DEFAULT' special target; *note Implicit Rules:: and *note Defining
+Last-Resort Default Rules: Last Resort.).
+
+   You may be inclined to define empty command strings for targets that
+are not actual files, but only exist so that their prerequisites can be
+remade.  However, this is not the best way to do that, because the
+prerequisites may not be remade properly if the target file actually
+does exist.  *Note Phony Targets: Phony Targets, for a better way to do
+this.
+
+
+File: make.info,  Node: Using Variables,  Next: Conditionals,  Prev: Commands,  Up: Top
+
+6 How to Use Variables
+**********************
+
+A "variable" is a name defined in a makefile to represent a string of
+text, called the variable's "value".  These values are substituted by
+explicit request into targets, prerequisites, commands, and other parts
+of the makefile.  (In some other versions of `make', variables are
+called "macros".)  
+
+   Variables and functions in all parts of a makefile are expanded when
+read, except for the shell commands in rules, the right-hand sides of
+variable definitions using `=', and the bodies of variable definitions
+using the `define' directive.
+
+   Variables can represent lists of file names, options to pass to
+compilers, programs to run, directories to look in for source files,
+directories to write output in, or anything else you can imagine.
+
+   A variable name may be any sequence of characters not containing `:',
+`#', `=', or leading or trailing whitespace.  However, variable names
+containing characters other than letters, numbers, and underscores
+should be avoided, as they may be given special meanings in the future,
+and with some shells they cannot be passed through the environment to a
+sub-`make' (*note Communicating Variables to a Sub-`make':
+Variables/Recursion.).
+
+   Variable names are case-sensitive.  The names `foo', `FOO', and
+`Foo' all refer to different variables.
+
+   It is traditional to use upper case letters in variable names, but we
+recommend using lower case letters for variable names that serve
+internal purposes in the makefile, and reserving upper case for
+parameters that control implicit rules or for parameters that the user
+should override with command options (*note Overriding Variables:
+Overriding.).
+
+   A few variables have names that are a single punctuation character or
+just a few characters.  These are the "automatic variables", and they
+have particular specialized uses.  *Note Automatic Variables: Automatic.
+
+* Menu:
+
+* Reference::                   How to use the value of a variable.
+* Flavors::                     Variables come in two flavors.
+* Advanced::                    Advanced features for referencing a variable.
+* Values::                      All the ways variables get their values.
+* Setting::                     How to set a variable in the makefile.
+* Appending::                   How to append more text to the old value
+                                  of a variable.
+* Override Directive::          How to set a variable in the makefile even if
+                                  the user has set it with a command argument.
+* Defining::                    An alternate way to set a variable
+                                  to a verbatim string.
+* Environment::                 Variable values can come from the environment.
+* Target-specific::             Variable values can be defined on a per-target
+                                  basis.
+* Pattern-specific::            Target-specific variable values can be applied
+                                  to a group of targets that match a pattern.
+
+
+File: make.info,  Node: Reference,  Next: Flavors,  Prev: Using Variables,  Up: Using Variables
+
+6.1 Basics of Variable References
+=================================
+
+To substitute a variable's value, write a dollar sign followed by the
+name of the variable in parentheses or braces: either `$(foo)' or
+`${foo}' is a valid reference to the variable `foo'.  This special
+significance of `$' is why you must write `$$' to have the effect of a
+single dollar sign in a file name or command.
+
+   Variable references can be used in any context: targets,
+prerequisites, commands, most directives, and new variable values.
+Here is an example of a common case, where a variable holds the names
+of all the object files in a program:
+
+     objects = program.o foo.o utils.o
+     program : $(objects)
+             cc -o program $(objects)
+
+     $(objects) : defs.h
+
+   Variable references work by strict textual substitution.  Thus, the
+rule
+
+     foo = c
+     prog.o : prog.$(foo)
+             $(foo)$(foo) -$(foo) prog.$(foo)
+
+could be used to compile a C program `prog.c'.  Since spaces before the
+variable value are ignored in variable assignments, the value of `foo'
+is precisely `c'.  (Don't actually write your makefiles this way!)
+
+   A dollar sign followed by a character other than a dollar sign,
+open-parenthesis or open-brace treats that single character as the
+variable name.  Thus, you could reference the variable `x' with `$x'.
+However, this practice is strongly discouraged, except in the case of
+the automatic variables (*note Automatic Variables: Automatic.).
+
+
+File: make.info,  Node: Flavors,  Next: Advanced,  Prev: Reference,  Up: Using Variables
+
+6.2 The Two Flavors of Variables
+================================
+
+There are two ways that a variable in GNU `make' can have a value; we
+call them the two "flavors" of variables.  The two flavors are
+distinguished in how they are defined and in what they do when expanded.
+
+   The first flavor of variable is a "recursively expanded" variable.
+Variables of this sort are defined by lines using `=' (*note Setting
+Variables: Setting.) or by the `define' directive (*note Defining
+Variables Verbatim: Defining.).  The value you specify is installed
+verbatim; if it contains references to other variables, these
+references are expanded whenever this variable is substituted (in the
+course of expanding some other string).  When this happens, it is
+called "recursive expansion".
+
+   For example,
+
+     foo = $(bar)
+     bar = $(ugh)
+     ugh = Huh?
+
+     all:;echo $(foo)
+
+will echo `Huh?': `$(foo)' expands to `$(bar)' which expands to
+`$(ugh)' which finally expands to `Huh?'.
+
+   This flavor of variable is the only sort supported by other versions
+of `make'.  It has its advantages and its disadvantages.  An advantage
+(most would say) is that:
+
+     CFLAGS = $(include_dirs) -O
+     include_dirs = -Ifoo -Ibar
+
+will do what was intended: when `CFLAGS' is expanded in a command, it
+will expand to `-Ifoo -Ibar -O'.  A major disadvantage is that you
+cannot append something on the end of a variable, as in
+
+     CFLAGS = $(CFLAGS) -O
+
+because it will cause an infinite loop in the variable expansion.
+(Actually `make' detects the infinite loop and reports an error.)  
+
+   Another disadvantage is that any functions (*note Functions for
+Transforming Text: Functions.)  referenced in the definition will be
+executed every time the variable is expanded.  This makes `make' run
+slower; worse, it causes the `wildcard' and `shell' functions to give
+unpredictable results because you cannot easily control when they are
+called, or even how many times.
+
+   To avoid all the problems and inconveniences of recursively expanded
+variables, there is another flavor: simply expanded variables.
+
+   "Simply expanded variables" are defined by lines using `:=' (*note
+Setting Variables: Setting.).  The value of a simply expanded variable
+is scanned once and for all, expanding any references to other
+variables and functions, when the variable is defined.  The actual
+value of the simply expanded variable is the result of expanding the
+text that you write.  It does not contain any references to other
+variables; it contains their values _as of the time this variable was
+defined_.  Therefore,
+
+     x := foo
+     y := $(x) bar
+     x := later
+
+is equivalent to
+
+     y := foo bar
+     x := later
+
+   When a simply expanded variable is referenced, its value is
+substituted verbatim.
+
+   Here is a somewhat more complicated example, illustrating the use of
+`:=' in conjunction with the `shell' function.  (*Note The `shell'
+Function: Shell Function.)  This example also shows use of the variable
+`MAKELEVEL', which is changed when it is passed down from level to
+level.  (*Note Communicating Variables to a Sub-`make':
+Variables/Recursion, for information about `MAKELEVEL'.)
+
+     ifeq (0,${MAKELEVEL})
+     cur-dir   := $(shell pwd)
+     whoami    := $(shell whoami)
+     host-type := $(shell arch)
+     MAKE := ${MAKE} host-type=${host-type} whoami=${whoami}
+     endif
+
+An advantage of this use of `:=' is that a typical `descend into a
+directory' command then looks like this:
+
+     ${subdirs}:
+           ${MAKE} cur-dir=${cur-dir}/$@ -C $@ all
+
+   Simply expanded variables generally make complicated makefile
+programming more predictable because they work like variables in most
+programming languages.  They allow you to redefine a variable using its
+own value (or its value processed in some way by one of the expansion
+functions) and to use the expansion functions much more efficiently
+(*note Functions for Transforming Text: Functions.).
+
+   You can also use them to introduce controlled leading whitespace into
+variable values.  Leading whitespace characters are discarded from your
+input before substitution of variable references and function calls;
+this means you can include leading spaces in a variable value by
+protecting them with variable references, like this:
+
+     nullstring :=
+     space := $(nullstring) # end of the line
+
+Here the value of the variable `space' is precisely one space.  The
+comment `# end of the line' is included here just for clarity.  Since
+trailing space characters are _not_ stripped from variable values, just
+a space at the end of the line would have the same effect (but be
+rather hard to read).  If you put whitespace at the end of a variable
+value, it is a good idea to put a comment like that at the end of the
+line to make your intent clear.  Conversely, if you do _not_ want any
+whitespace characters at the end of your variable value, you must
+remember not to put a random comment on the end of the line after some
+whitespace, such as this:
+
+     dir := /foo/bar    # directory to put the frobs in
+
+Here the value of the variable `dir' is `/foo/bar    ' (with four
+trailing spaces), which was probably not the intention.  (Imagine
+something like `$(dir)/file' with this definition!)
+
+   There is another assignment operator for variables, `?='.  This is
+called a conditional variable assignment operator, because it only has
+an effect if the variable is not yet defined.  This statement:
+
+     FOO ?= bar
+
+is exactly equivalent to this (*note The `origin' Function: Origin
+Function.):
+
+     ifeq ($(origin FOO), undefined)
+       FOO = bar
+     endif
+
+   Note that a variable set to an empty value is still defined, so `?='
+will not set that variable.
+
+
+File: make.info,  Node: Advanced,  Next: Values,  Prev: Flavors,  Up: Using Variables
+
+6.3 Advanced Features for Reference to Variables
+================================================
+
+This section describes some advanced features you can use to reference
+variables in more flexible ways.
+
+* Menu:
+
+* Substitution Refs::           Referencing a variable with
+                                  substitutions on the value.
+* Computed Names::              Computing the name of the variable to refer to.
+
+
+File: make.info,  Node: Substitution Refs,  Next: Computed Names,  Prev: Advanced,  Up: Advanced
+
+6.3.1 Substitution References
+-----------------------------
+
+A "substitution reference" substitutes the value of a variable with
+alterations that you specify.  It has the form `$(VAR:A=B)' (or
+`${VAR:A=B}') and its meaning is to take the value of the variable VAR,
+replace every A at the end of a word with B in that value, and
+substitute the resulting string.
+
+   When we say "at the end of a word", we mean that A must appear
+either followed by whitespace or at the end of the value in order to be
+replaced; other occurrences of A in the value are unaltered.  For
+example:
+
+     foo := a.o b.o c.o
+     bar := $(foo:.o=.c)
+
+sets `bar' to `a.c b.c c.c'.  *Note Setting Variables: Setting.
+
+   A substitution reference is actually an abbreviation for use of the
+`patsubst' expansion function (*note Functions for String Substitution
+and Analysis: Text Functions.).  We provide substitution references as
+well as `patsubst' for compatibility with other implementations of
+`make'.
+
+   Another type of substitution reference lets you use the full power of
+the `patsubst' function.  It has the same form `$(VAR:A=B)' described
+above, except that now A must contain a single `%' character.  This
+case is equivalent to `$(patsubst A,B,$(VAR))'.  *Note Functions for
+String Substitution and Analysis: Text Functions, for a description of
+the `patsubst' function.
+
+For example:
+
+     foo := a.o b.o c.o
+     bar := $(foo:%.o=%.c)
+
+sets `bar' to `a.c b.c c.c'.
+
+
+File: make.info,  Node: Computed Names,  Prev: Substitution Refs,  Up: Advanced
+
+6.3.2 Computed Variable Names
+-----------------------------
+
+Computed variable names are a complicated concept needed only for
+sophisticated makefile programming.  For most purposes you need not
+consider them, except to know that making a variable with a dollar sign
+in its name might have strange results.  However, if you are the type
+that wants to understand everything, or you are actually interested in
+what they do, read on.
+
+   Variables may be referenced inside the name of a variable.  This is
+called a "computed variable name" or a "nested variable reference".
+For example,
+
+     x = y
+     y = z
+     a := $($(x))
+
+defines `a' as `z': the `$(x)' inside `$($(x))' expands to `y', so
+`$($(x))' expands to `$(y)' which in turn expands to `z'.  Here the
+name of the variable to reference is not stated explicitly; it is
+computed by expansion of `$(x)'.  The reference `$(x)' here is nested
+within the outer variable reference.
+
+   The previous example shows two levels of nesting, but any number of
+levels is possible.  For example, here are three levels:
+
+     x = y
+     y = z
+     z = u
+     a := $($($(x)))
+
+Here the innermost `$(x)' expands to `y', so `$($(x))' expands to
+`$(y)' which in turn expands to `z'; now we have `$(z)', which becomes
+`u'.
+
+   References to recursively-expanded variables within a variable name
+are reexpanded in the usual fashion.  For example:
+
+     x = $(y)
+     y = z
+     z = Hello
+     a := $($(x))
+
+defines `a' as `Hello': `$($(x))' becomes `$($(y))' which becomes
+`$(z)' which becomes `Hello'.
+
+   Nested variable references can also contain modified references and
+function invocations (*note Functions for Transforming Text:
+Functions.), just like any other reference.  For example, using the
+`subst' function (*note Functions for String Substitution and Analysis:
+Text Functions.):
+
+     x = variable1
+     variable2 := Hello
+     y = $(subst 1,2,$(x))
+     z = y
+     a := $($($(z)))
+
+eventually defines `a' as `Hello'.  It is doubtful that anyone would
+ever want to write a nested reference as convoluted as this one, but it
+works: `$($($(z)))' expands to `$($(y))' which becomes `$($(subst
+1,2,$(x)))'.  This gets the value `variable1' from `x' and changes it
+by substitution to `variable2', so that the entire string becomes
+`$(variable2)', a simple variable reference whose value is `Hello'.
+
+   A computed variable name need not consist entirely of a single
+variable reference.  It can contain several variable references, as
+well as some invariant text.  For example,
+
+     a_dirs := dira dirb
+     1_dirs := dir1 dir2
+
+     a_files := filea fileb
+     1_files := file1 file2
+
+     ifeq "$(use_a)" "yes"
+     a1 := a
+     else
+     a1 := 1
+     endif
+
+     ifeq "$(use_dirs)" "yes"
+     df := dirs
+     else
+     df := files
+     endif
+
+     dirs := $($(a1)_$(df))
+
+will give `dirs' the same value as `a_dirs', `1_dirs', `a_files' or
+`1_files' depending on the settings of `use_a' and `use_dirs'.
+
+   Computed variable names can also be used in substitution references:
+
+     a_objects := a.o b.o c.o
+     1_objects := 1.o 2.o 3.o
+
+     sources := $($(a1)_objects:.o=.c)
+
+defines `sources' as either `a.c b.c c.c' or `1.c 2.c 3.c', depending
+on the value of `a1'.
+
+   The only restriction on this sort of use of nested variable
+references is that they cannot specify part of the name of a function
+to be called.  This is because the test for a recognized function name
+is done before the expansion of nested references.  For example,
+
+     ifdef do_sort
+     func := sort
+     else
+     func := strip
+     endif
+
+     bar := a d b g q c
+
+     foo := $($(func) $(bar))
+
+attempts to give `foo' the value of the variable `sort a d b g q c' or
+`strip a d b g q c', rather than giving `a d b g q c' as the argument
+to either the `sort' or the `strip' function.  This restriction could
+be removed in the future if that change is shown to be a good idea.
+
+   You can also use computed variable names in the left-hand side of a
+variable assignment, or in a `define' directive, as in:
+
+     dir = foo
+     $(dir)_sources := $(wildcard $(dir)/*.c)
+     define $(dir)_print
+     lpr $($(dir)_sources)
+     endef
+
+This example defines the variables `dir', `foo_sources', and
+`foo_print'.
+
+   Note that "nested variable references" are quite different from
+"recursively expanded variables" (*note The Two Flavors of Variables:
+Flavors.), though both are used together in complex ways when doing
+makefile programming.
+
+
+File: make.info,  Node: Values,  Next: Setting,  Prev: Advanced,  Up: Using Variables
+
+6.4 How Variables Get Their Values
+==================================
+
+Variables can get values in several different ways:
+
+   * You can specify an overriding value when you run `make'.  *Note
+     Overriding Variables: Overriding.
+
+   * You can specify a value in the makefile, either with an assignment
+     (*note Setting Variables: Setting.) or with a verbatim definition
+     (*note Defining Variables Verbatim: Defining.).
+
+   * Variables in the environment become `make' variables.  *Note
+     Variables from the Environment: Environment.
+
+   * Several "automatic" variables are given new values for each rule.
+     Each of these has a single conventional use.  *Note Automatic
+     Variables: Automatic.
+
+   * Several variables have constant initial values.  *Note Variables
+     Used by Implicit Rules: Implicit Variables.
+
+
+File: make.info,  Node: Setting,  Next: Appending,  Prev: Values,  Up: Using Variables
+
+6.5 Setting Variables
+=====================
+
+To set a variable from the makefile, write a line starting with the
+variable name followed by `=' or `:='.  Whatever follows the `=' or
+`:=' on the line becomes the value.  For example,
+
+     objects = main.o foo.o bar.o utils.o
+
+defines a variable named `objects'.  Whitespace around the variable
+name and immediately after the `=' is ignored.
+
+   Variables defined with `=' are "recursively expanded" variables.
+Variables defined with `:=' are "simply expanded" variables; these
+definitions can contain variable references which will be expanded
+before the definition is made.  *Note The Two Flavors of Variables:
+Flavors.
+
+   The variable name may contain function and variable references, which
+are expanded when the line is read to find the actual variable name to
+use.
+
+   There is no limit on the length of the value of a variable except the
+amount of swapping space on the computer.  When a variable definition is
+long, it is a good idea to break it into several lines by inserting
+backslash-newline at convenient places in the definition.  This will not
+affect the functioning of `make', but it will make the makefile easier
+to read.
+
+   Most variable names are considered to have the empty string as a
+value if you have never set them.  Several variables have built-in
+initial values that are not empty, but you can set them in the usual
+ways (*note Variables Used by Implicit Rules: Implicit Variables.).
+Several special variables are set automatically to a new value for each
+rule; these are called the "automatic" variables (*note Automatic
+Variables: Automatic.).
+
+   If you'd like a variable to be set to a value only if it's not
+already set, then you can use the shorthand operator `?=' instead of
+`='.  These two settings of the variable `FOO' are identical (*note The
+`origin' Function: Origin Function.):
+
+     FOO ?= bar
+
+and
+
+     ifeq ($(origin FOO), undefined)
+     FOO = bar
+     endif
+
+
+File: make.info,  Node: Appending,  Next: Override Directive,  Prev: Setting,  Up: Using Variables
+
+6.6 Appending More Text to Variables
+====================================
+
+Often it is useful to add more text to the value of a variable already
+defined.  You do this with a line containing `+=', like this:
+
+     objects += another.o
+
+This takes the value of the variable `objects', and adds the text
+`another.o' to it (preceded by a single space).  Thus:
+
+     objects = main.o foo.o bar.o utils.o
+     objects += another.o
+
+sets `objects' to `main.o foo.o bar.o utils.o another.o'.
+
+   Using `+=' is similar to:
+
+     objects = main.o foo.o bar.o utils.o
+     objects := $(objects) another.o
+
+but differs in ways that become important when you use more complex
+values.
+
+   When the variable in question has not been defined before, `+=' acts
+just like normal `=': it defines a recursively-expanded variable.
+However, when there _is_ a previous definition, exactly what `+=' does
+depends on what flavor of variable you defined originally.  *Note The
+Two Flavors of Variables: Flavors, for an explanation of the two
+flavors of variables.
+
+   When you add to a variable's value with `+=', `make' acts
+essentially as if you had included the extra text in the initial
+definition of the variable.  If you defined it first with `:=', making
+it a simply-expanded variable, `+=' adds to that simply-expanded
+definition, and expands the new text before appending it to the old
+value just as `:=' does (*note Setting Variables: Setting, for a full
+explanation of `:=').  In fact,
+
+     variable := value
+     variable += more
+
+is exactly equivalent to:
+
+
+     variable := value
+     variable := $(variable) more
+
+   On the other hand, when you use `+=' with a variable that you defined
+first to be recursively-expanded using plain `=', `make' does something
+a bit different.  Recall that when you define a recursively-expanded
+variable, `make' does not expand the value you set for variable and
+function references immediately.  Instead it stores the text verbatim,
+and saves these variable and function references to be expanded later,
+when you refer to the new variable (*note The Two Flavors of Variables:
+Flavors.).  When you use `+=' on a recursively-expanded variable, it is
+this unexpanded text to which `make' appends the new text you specify.
+
+     variable = value
+     variable += more
+
+is roughly equivalent to:
+
+     temp = value
+     variable = $(temp) more
+
+except that of course it never defines a variable called `temp'.  The
+importance of this comes when the variable's old value contains
+variable references.  Take this common example:
+
+     CFLAGS = $(includes) -O
+     ...
+     CFLAGS += -pg # enable profiling
+
+The first line defines the `CFLAGS' variable with a reference to another
+variable, `includes'.  (`CFLAGS' is used by the rules for C
+compilation; *note Catalogue of Implicit Rules: Catalogue of Rules.)
+Using `=' for the definition makes `CFLAGS' a recursively-expanded
+variable, meaning `$(includes) -O' is _not_ expanded when `make'
+processes the definition of `CFLAGS'.  Thus, `includes' need not be
+defined yet for its value to take effect.  It only has to be defined
+before any reference to `CFLAGS'.  If we tried to append to the value
+of `CFLAGS' without using `+=', we might do it like this:
+
+     CFLAGS := $(CFLAGS) -pg # enable profiling
+
+This is pretty close, but not quite what we want.  Using `:=' redefines
+`CFLAGS' as a simply-expanded variable; this means `make' expands the
+text `$(CFLAGS) -pg' before setting the variable.  If `includes' is not
+yet defined, we get ` -O -pg', and a later definition of `includes'
+will have no effect.  Conversely, by using `+=' we set `CFLAGS' to the
+_unexpanded_ value `$(includes) -O -pg'.  Thus we preserve the
+reference to `includes', so if that variable gets defined at any later
+point, a reference like `$(CFLAGS)' still uses its value.
+
+
+File: make.info,  Node: Override Directive,  Next: Defining,  Prev: Appending,  Up: Using Variables
+
+6.7 The `override' Directive
+============================
+
+If a variable has been set with a command argument (*note Overriding
+Variables: Overriding.), then ordinary assignments in the makefile are
+ignored.  If you want to set the variable in the makefile even though
+it was set with a command argument, you can use an `override'
+directive, which is a line that looks like this:
+
+     override VARIABLE = VALUE
+
+or
+
+     override VARIABLE := VALUE
+
+   To append more text to a variable defined on the command line, use:
+
+     override VARIABLE += MORE TEXT
+
+*Note Appending More Text to Variables: Appending.
+
+   The `override' directive was not invented for escalation in the war
+between makefiles and command arguments.  It was invented so you can
+alter and add to values that the user specifies with command arguments.
+
+   For example, suppose you always want the `-g' switch when you run the
+C compiler, but you would like to allow the user to specify the other
+switches with a command argument just as usual.  You could use this
+`override' directive:
+
+     override CFLAGS += -g
+
+   You can also use `override' directives with `define' directives.
+This is done as you might expect:
+
+     override define foo
+     bar
+     endef
+
+*Note Defining Variables Verbatim: Defining.
+
+
+File: make.info,  Node: Defining,  Next: Environment,  Prev: Override Directive,  Up: Using Variables
+
+6.8 Defining Variables Verbatim
+===============================
+
+Another way to set the value of a variable is to use the `define'
+directive.  This directive has an unusual syntax which allows newline
+characters to be included in the value, which is convenient for defining
+both canned sequences of commands (*note Defining Canned Command
+Sequences: Sequences.), and also sections of makefile syntax to use
+with `eval' (*note Eval Function::).
+
+   The `define' directive is followed on the same line by the name of
+the variable and nothing more.  The value to give the variable appears
+on the following lines.  The end of the value is marked by a line
+containing just the word `endef'.  Aside from this difference in
+syntax, `define' works just like `=': it creates a recursively-expanded
+variable (*note The Two Flavors of Variables: Flavors.).  The variable
+name may contain function and variable references, which are expanded
+when the directive is read to find the actual variable name to use.
+
+   You may nest `define' directives: `make' will keep track of nested
+directives and report an error if they are not all properly closed with
+`endef'.  Note that lines beginning with tab characters are considered
+part of a command script, so any `define' or `endef' strings appearing
+on such a line will not be considered `make' operators.
+
+     define two-lines
+     echo foo
+     echo $(bar)
+     endef
+
+   The value in an ordinary assignment cannot contain a newline; but the
+newlines that separate the lines of the value in a `define' become part
+of the variable's value (except for the final newline which precedes
+the `endef' and is not considered part of the value).
+
+   When used in a command script, the previous example is functionally
+equivalent to this:
+
+     two-lines = echo foo; echo $(bar)
+
+since two commands separated by semicolon behave much like two separate
+shell commands.  However, note that using two separate lines means
+`make' will invoke the shell twice, running an independent subshell for
+each line.  *Note Command Execution: Execution.
+
+   If you want variable definitions made with `define' to take
+precedence over command-line variable definitions, you can use the
+`override' directive together with `define':
+
+     override define two-lines
+     foo
+     $(bar)
+     endef
+
+*Note The `override' Directive: Override Directive.
+
+
+File: make.info,  Node: Environment,  Next: Target-specific,  Prev: Defining,  Up: Using Variables
+
+6.9 Variables from the Environment
+==================================
+
+Variables in `make' can come from the environment in which `make' is
+run.  Every environment variable that `make' sees when it starts up is
+transformed into a `make' variable with the same name and value.  But
+an explicit assignment in the makefile, or with a command argument,
+overrides the environment.  (If the `-e' flag is specified, then values
+from the environment override assignments in the makefile.  *Note
+Summary of Options: Options Summary.  But this is not recommended
+practice.)
+
+   Thus, by setting the variable `CFLAGS' in your environment, you can
+cause all C compilations in most makefiles to use the compiler switches
+you prefer.  This is safe for variables with standard or conventional
+meanings because you know that no makefile will use them for other
+things.  (But this is not totally reliable; some makefiles set `CFLAGS'
+explicitly and therefore are not affected by the value in the
+environment.)
+
+   When `make' is invoked recursively, variables defined in the outer
+invocation can be passed to inner invocations through the environment
+(*note Recursive Use of `make': Recursion.).  By default, only
+variables that came from the environment or the command line are passed
+to recursive invocations.  You can use the `export' directive to pass
+other variables.  *Note Communicating Variables to a Sub-`make':
+Variables/Recursion, for full details.
+
+   Other use of variables from the environment is not recommended.  It
+is not wise for makefiles to depend for their functioning on
+environment variables set up outside their control, since this would
+cause different users to get different results from the same makefile.
+This is against the whole purpose of most makefiles.
+
+   Such problems would be especially likely with the variable `SHELL',
+which is normally present in the environment to specify the user's
+choice of interactive shell.  It would be very undesirable for this
+choice to affect `make'.  So `make' ignores the environment value of
+`SHELL' (except on MS-DOS and MS-Windows, where `SHELL' is usually not
+set.  *Note Special handling of SHELL on MS-DOS: Execution.)
+
+
+File: make.info,  Node: Target-specific,  Next: Pattern-specific,  Prev: Environment,  Up: Using Variables
+
+6.10 Target-specific Variable Values
+====================================
+
+Variable values in `make' are usually global; that is, they are the
+same regardless of where they are evaluated (unless they're reset, of
+course).  One exception to that is automatic variables (*note Automatic
+Variables: Automatic.).
+
+   The other exception is "target-specific variable values".  This
+feature allows you to define different values for the same variable,
+based on the target that `make' is currently building.  As with
+automatic variables, these values are only available within the context
+of a target's command script (and in other target-specific assignments).
+
+   Set a target-specific variable value like this:
+
+     TARGET ... : VARIABLE-ASSIGNMENT
+
+or like this:
+
+     TARGET ... : override VARIABLE-ASSIGNMENT
+
+   Multiple TARGET values create a target-specific variable value for
+each member of the target list individually.
+
+   The VARIABLE-ASSIGNMENT can be any valid form of assignment;
+recursive (`='), static (`:='), appending (`+='), or conditional
+(`?=').  All variables that appear within the VARIABLE-ASSIGNMENT are
+evaluated within the context of the target: thus, any
+previously-defined target-specific variable values will be in effect.
+Note that this variable is actually distinct from any "global" value:
+the two variables do not have to have the same flavor (recursive vs.
+static).
+
+   Target-specific variables have the same priority as any other
+makefile variable.  Variables provided on the command-line (and in the
+environment if the `-e' option is in force) will take precedence.
+Specifying the `override' directive will allow the target-specific
+variable value to be preferred.
+
+   There is one more special feature of target-specific variables: when
+you define a target-specific variable, that variable value is also in
+effect for all prerequisites of this target (unless those prerequisites
+override it with their own target-specific variable value).  So, for
+example, a statement like this:
+
+     prog : CFLAGS = -g
+     prog : prog.o foo.o bar.o
+
+will set `CFLAGS' to `-g' in the command script for `prog', but it will
+also set `CFLAGS' to `-g' in the command scripts that create `prog.o',
+`foo.o', and `bar.o', and any command scripts which create their
+prerequisites.
+
+
+File: make.info,  Node: Pattern-specific,  Prev: Target-specific,  Up: Using Variables
+
+6.11 Pattern-specific Variable Values
+=====================================
+
+In addition to target-specific variable values (*note Target-specific
+Variable Values: Target-specific.), GNU `make' supports
+pattern-specific variable values.  In this form, a variable is defined
+for any target that matches the pattern specified.  Variables defined in
+this way are searched after any target-specific variables defined
+explicitly for that target, and before target-specific variables defined
+for the parent target.
+
+   Set a pattern-specific variable value like this:
+
+     PATTERN ... : VARIABLE-ASSIGNMENT
+
+or like this:
+
+     PATTERN ... : override VARIABLE-ASSIGNMENT
+
+where PATTERN is a %-pattern.  As with target-specific variable values,
+multiple PATTERN values create a pattern-specific variable value for
+each pattern individually.  The VARIABLE-ASSIGNMENT can be any valid
+form of assignment.  Any command-line variable setting will take
+precedence, unless `override' is specified.
+
+   For example:
+
+     %.o : CFLAGS = -O
+
+will assign `CFLAGS' the value of `-O' for all targets matching the
+pattern `%.o'.
+
+
+File: make.info,  Node: Conditionals,  Next: Functions,  Prev: Using Variables,  Up: Top
+
+7 Conditional Parts of Makefiles
+********************************
+
+A "conditional" causes part of a makefile to be obeyed or ignored
+depending on the values of variables.  Conditionals can compare the
+value of one variable to another, or the value of a variable to a
+constant string.  Conditionals control what `make' actually "sees" in
+the makefile, so they _cannot_ be used to control shell commands at the
+time of execution.
+
+* Menu:
+
+* Conditional Example::         Example of a conditional
+* Conditional Syntax::          The syntax of conditionals.
+* Testing Flags::               Conditionals that test flags.
+
+
+File: make.info,  Node: Conditional Example,  Next: Conditional Syntax,  Prev: Conditionals,  Up: Conditionals
+
+7.1 Example of a Conditional
+============================
+
+The following example of a conditional tells `make' to use one set of
+libraries if the `CC' variable is `gcc', and a different set of
+libraries otherwise.  It works by controlling which of two command
+lines will be used as the command for a rule.  The result is that
+`CC=gcc' as an argument to `make' changes not only which compiler is
+used but also which libraries are linked.
+
+     libs_for_gcc = -lgnu
+     normal_libs =
+
+     foo: $(objects)
+     ifeq ($(CC),gcc)
+             $(CC) -o foo $(objects) $(libs_for_gcc)
+     else
+             $(CC) -o foo $(objects) $(normal_libs)
+     endif
+
+   This conditional uses three directives: one `ifeq', one `else' and
+one `endif'.
+
+   The `ifeq' directive begins the conditional, and specifies the
+condition.  It contains two arguments, separated by a comma and
+surrounded by parentheses.  Variable substitution is performed on both
+arguments and then they are compared.  The lines of the makefile
+following the `ifeq' are obeyed if the two arguments match; otherwise
+they are ignored.
+
+   The `else' directive causes the following lines to be obeyed if the
+previous conditional failed.  In the example above, this means that the
+second alternative linking command is used whenever the first
+alternative is not used.  It is optional to have an `else' in a
+conditional.
+
+   The `endif' directive ends the conditional.  Every conditional must
+end with an `endif'.  Unconditional makefile text follows.
+
+   As this example illustrates, conditionals work at the textual level:
+the lines of the conditional are treated as part of the makefile, or
+ignored, according to the condition.  This is why the larger syntactic
+units of the makefile, such as rules, may cross the beginning or the
+end of the conditional.
+
+   When the variable `CC' has the value `gcc', the above example has
+this effect:
+
+     foo: $(objects)
+             $(CC) -o foo $(objects) $(libs_for_gcc)
+
+When the variable `CC' has any other value, the effect is this:
+
+     foo: $(objects)
+             $(CC) -o foo $(objects) $(normal_libs)
+
+   Equivalent results can be obtained in another way by
+conditionalizing a variable assignment and then using the variable
+unconditionally:
+
+     libs_for_gcc = -lgnu
+     normal_libs =
+
+     ifeq ($(CC),gcc)
+       libs=$(libs_for_gcc)
+     else
+       libs=$(normal_libs)
+     endif
+
+     foo: $(objects)
+             $(CC) -o foo $(objects) $(libs)
+
+
+File: make.info,  Node: Conditional Syntax,  Next: Testing Flags,  Prev: Conditional Example,  Up: Conditionals
+
+7.2 Syntax of Conditionals
+==========================
+
+The syntax of a simple conditional with no `else' is as follows:
+
+     CONDITIONAL-DIRECTIVE
+     TEXT-IF-TRUE
+     endif
+
+The TEXT-IF-TRUE may be any lines of text, to be considered as part of
+the makefile if the condition is true.  If the condition is false, no
+text is used instead.
+
+   The syntax of a complex conditional is as follows:
+
+     CONDITIONAL-DIRECTIVE
+     TEXT-IF-TRUE
+     else
+     TEXT-IF-FALSE
+     endif
+
+If the condition is true, TEXT-IF-TRUE is used; otherwise,
+TEXT-IF-FALSE is used instead.  The TEXT-IF-FALSE can be any number of
+lines of text.
+
+   The syntax of the CONDITIONAL-DIRECTIVE is the same whether the
+conditional is simple or complex.  There are four different directives
+that test different conditions.  Here is a table of them:
+
+`ifeq (ARG1, ARG2)'
+`ifeq 'ARG1' 'ARG2''
+`ifeq "ARG1" "ARG2"'
+`ifeq "ARG1" 'ARG2''
+`ifeq 'ARG1' "ARG2"'
+     Expand all variable references in ARG1 and ARG2 and compare them.
+     If they are identical, the TEXT-IF-TRUE is effective; otherwise,
+     the TEXT-IF-FALSE, if any, is effective.
+
+     Often you want to test if a variable has a non-empty value.  When
+     the value results from complex expansions of variables and
+     functions, expansions you would consider empty may actually
+     contain whitespace characters and thus are not seen as empty.
+     However, you can use the `strip' function (*note Text Functions::)
+     to avoid interpreting whitespace as a non-empty value.  For
+     example:
+
+          ifeq ($(strip $(foo)),)
+          TEXT-IF-EMPTY
+          endif
+
+     will evaluate TEXT-IF-EMPTY even if the expansion of `$(foo)'
+     contains whitespace characters.
+
+`ifneq (ARG1, ARG2)'
+`ifneq 'ARG1' 'ARG2''
+`ifneq "ARG1" "ARG2"'
+`ifneq "ARG1" 'ARG2''
+`ifneq 'ARG1' "ARG2"'
+     Expand all variable references in ARG1 and ARG2 and compare them.
+     If they are different, the TEXT-IF-TRUE is effective; otherwise,
+     the TEXT-IF-FALSE, if any, is effective.
+
+`ifdef VARIABLE-NAME'
+     If the variable VARIABLE-NAME has a non-empty value, the
+     TEXT-IF-TRUE is effective; otherwise, the TEXT-IF-FALSE, if any,
+     is effective.  Variables that have never been defined have an
+     empty value.  The variable VARIABLE-NAME is itself expanded, so it
+     could be a variable or function that expands to the name of a
+     variable.
+
+     Note that `ifdef' only tests whether a variable has a value.  It
+     does not expand the variable to see if that value is nonempty.
+     Consequently, tests using `ifdef' return true for all definitions
+     except those like `foo ='.  To test for an empty value, use
+     `ifeq ($(foo),)'.  For example,
+
+          bar =
+          foo = $(bar)
+          ifdef foo
+          frobozz = yes
+          else
+          frobozz = no
+          endif
+
+     sets `frobozz' to `yes', while:
+
+          foo =
+          ifdef foo
+          frobozz = yes
+          else
+          frobozz = no
+          endif
+
+     sets `frobozz' to `no'.
+
+`ifndef VARIABLE-NAME'
+     If the variable VARIABLE-NAME has an empty value, the TEXT-IF-TRUE
+     is effective; otherwise, the TEXT-IF-FALSE, if any, is effective.
+
+   Extra spaces are allowed and ignored at the beginning of the
+conditional directive line, but a tab is not allowed.  (If the line
+begins with a tab, it will be considered a command for a rule.)  Aside
+from this, extra spaces or tabs may be inserted with no effect anywhere
+except within the directive name or within an argument.  A comment
+starting with `#' may appear at the end of the line.
+
+   The other two directives that play a part in a conditional are `else'
+and `endif'.  Each of these directives is written as one word, with no
+arguments.  Extra spaces are allowed and ignored at the beginning of the
+line, and spaces or tabs at the end.  A comment starting with `#' may
+appear at the end of the line.
+
+   Conditionals affect which lines of the makefile `make' uses.  If the
+condition is true, `make' reads the lines of the TEXT-IF-TRUE as part
+of the makefile; if the condition is false, `make' ignores those lines
+completely.  It follows that syntactic units of the makefile, such as
+rules, may safely be split across the beginning or the end of the
+conditional.
+
+   `make' evaluates conditionals when it reads a makefile.
+Consequently, you cannot use automatic variables in the tests of
+conditionals because they are not defined until commands are run (*note
+Automatic Variables: Automatic.).
+
+   To prevent intolerable confusion, it is not permitted to start a
+conditional in one makefile and end it in another.  However, you may
+write an `include' directive within a conditional, provided you do not
+attempt to terminate the conditional inside the included file.
+
+
+File: make.info,  Node: Testing Flags,  Prev: Conditional Syntax,  Up: Conditionals
+
+7.3 Conditionals that Test Flags
+================================
+
+You can write a conditional that tests `make' command flags such as
+`-t' by using the variable `MAKEFLAGS' together with the `findstring'
+function (*note Functions for String Substitution and Analysis: Text
+Functions.).  This is useful when `touch' is not enough to make a file
+appear up to date.
+
+   The `findstring' function determines whether one string appears as a
+substring of another.  If you want to test for the `-t' flag, use `t'
+as the first string and the value of `MAKEFLAGS' as the other.
+
+   For example, here is how to arrange to use `ranlib -t' to finish
+marking an archive file up to date:
+
+     archive.a: ...
+     ifneq (,$(findstring t,$(MAKEFLAGS)))
+             +touch archive.a
+             +ranlib -t archive.a
+     else
+             ranlib archive.a
+     endif
+
+The `+' prefix marks those command lines as "recursive" so that they
+will be executed despite use of the `-t' flag.  *Note Recursive Use of
+`make': Recursion.
+
+
+File: make.info,  Node: Functions,  Next: Running,  Prev: Conditionals,  Up: Top
+
+8 Functions for Transforming Text
+*********************************
+
+"Functions" allow you to do text processing in the makefile to compute
+the files to operate on or the commands to use.  You use a function in a
+"function call", where you give the name of the function and some text
+(the "arguments") for the function to operate on.  The result of the
+function's processing is substituted into the makefile at the point of
+the call, just as a variable might be substituted.
+
+* Menu:
+
+* Syntax of Functions::         How to write a function call.
+* Text Functions::              General-purpose text manipulation functions.
+* File Name Functions::         Functions for manipulating file names.
+* Foreach Function::            Repeat some text with controlled variation.
+* If Function::                 Conditionally expand a value.
+* Call Function::               Expand a user-defined function.
+* Value Function::              Return the un-expanded value of a variable.
+* Eval Function::               Evaluate the arguments as makefile syntax.
+* Origin Function::             Find where a variable got its value.
+* Shell Function::              Substitute the output of a shell command.
+* Make Control Functions::      Functions that control how make runs.
+
+
+File: make.info,  Node: Syntax of Functions,  Next: Text Functions,  Prev: Functions,  Up: Functions
+
+8.1 Function Call Syntax
+========================
+
+A function call resembles a variable reference.  It looks like this:
+
+     $(FUNCTION ARGUMENTS)
+
+or like this:
+
+     ${FUNCTION ARGUMENTS}
+
+   Here FUNCTION is a function name; one of a short list of names that
+are part of `make'.  You can also essentially create your own functions
+by using the `call' builtin function.
+
+   The ARGUMENTS are the arguments of the function.  They are separated
+from the function name by one or more spaces or tabs, and if there is
+more than one argument, then they are separated by commas.  Such
+whitespace and commas are not part of an argument's value.  The
+delimiters which you use to surround the function call, whether
+parentheses or braces, can appear in an argument only in matching pairs;
+the other kind of delimiters may appear singly.  If the arguments
+themselves contain other function calls or variable references, it is
+wisest to use the same kind of delimiters for all the references; write
+`$(subst a,b,$(x))', not `$(subst a,b,${x})'.  This is because it is
+clearer, and because only one type of delimiter is matched to find the
+end of the reference.
+
+   The text written for each argument is processed by substitution of
+variables and function calls to produce the argument value, which is
+the text on which the function acts.  The substitution is done in the
+order in which the arguments appear.
+
+   Commas and unmatched parentheses or braces cannot appear in the text
+of an argument as written; leading spaces cannot appear in the text of
+the first argument as written.  These characters can be put into the
+argument value by variable substitution.  First define variables
+`comma' and `space' whose values are isolated comma and space
+characters, then substitute these variables where such characters are
+wanted, like this:
+
+     comma:= ,
+     empty:=
+     space:= $(empty) $(empty)
+     foo:= a b c
+     bar:= $(subst $(space),$(comma),$(foo))
+     # bar is now `a,b,c'.
+
+Here the `subst' function replaces each space with a comma, through the
+value of `foo', and substitutes the result.
+
+
+File: make.info,  Node: Text Functions,  Next: File Name Functions,  Prev: Syntax of Functions,  Up: Functions
+
+8.2 Functions for String Substitution and Analysis
+==================================================
+
+Here are some functions that operate on strings:
+
+`$(subst FROM,TO,TEXT)'
+     Performs a textual replacement on the text TEXT: each occurrence
+     of FROM is replaced by TO.  The result is substituted for the
+     function call.  For example,
+
+          $(subst ee,EE,feet on the street)
+
+     substitutes the string `fEEt on the strEEt'.
+
+`$(patsubst PATTERN,REPLACEMENT,TEXT)'
+     Finds whitespace-separated words in TEXT that match PATTERN and
+     replaces them with REPLACEMENT.  Here PATTERN may contain a `%'
+     which acts as a wildcard, matching any number of any characters
+     within a word.  If REPLACEMENT also contains a `%', the `%' is
+     replaced by the text that matched the `%' in PATTERN.  Only the
+     first `%' in the PATTERN and REPLACEMENT is treated this way; any
+     subsequent `%' is unchanged.
+
+     `%' characters in `patsubst' function invocations can be quoted
+     with preceding backslashes (`\').  Backslashes that would
+     otherwise quote `%' characters can be quoted with more backslashes.
+     Backslashes that quote `%' characters or other backslashes are
+     removed from the pattern before it is compared file names or has a
+     stem substituted into it.  Backslashes that are not in danger of
+     quoting `%' characters go unmolested.  For example, the pattern
+     `the\%weird\\%pattern\\' has `the%weird\' preceding the operative
+     `%' character, and `pattern\\' following it.  The final two
+     backslashes are left alone because they cannot affect any `%'
+     character.
+
+     Whitespace between words is folded into single space characters;
+     leading and trailing whitespace is discarded.
+
+     For example,
+
+          $(patsubst %.c,%.o,x.c.c bar.c)
+
+     produces the value `x.c.o bar.o'.
+
+     Substitution references (*note Substitution References:
+     Substitution Refs.) are a simpler way to get the effect of the
+     `patsubst' function:
+
+          $(VAR:PATTERN=REPLACEMENT)
+
+     is equivalent to
+
+          $(patsubst PATTERN,REPLACEMENT,$(VAR))
+
+     The second shorthand simplifies one of the most common uses of
+     `patsubst': replacing the suffix at the end of file names.
+
+          $(VAR:SUFFIX=REPLACEMENT)
+
+     is equivalent to
+
+          $(patsubst %SUFFIX,%REPLACEMENT,$(VAR))
+
+     For example, you might have a list of object files:
+
+          objects = foo.o bar.o baz.o
+
+     To get the list of corresponding source files, you could simply
+     write:
+
+          $(objects:.o=.c)
+
+     instead of using the general form:
+
+          $(patsubst %.o,%.c,$(objects))
+
+`$(strip STRING)'
+     Removes leading and trailing whitespace from STRING and replaces
+     each internal sequence of one or more whitespace characters with a
+     single space.  Thus, `$(strip a b  c )' results in `a b c'.
+
+     The function `strip' can be very useful when used in conjunction
+     with conditionals.  When comparing something with the empty string
+     `' using `ifeq' or `ifneq', you usually want a string of just
+     whitespace to match the empty string (*note Conditionals::).
+
+     Thus, the following may fail to have the desired results:
+
+          .PHONY: all
+          ifneq   "$(needs_made)" ""
+          all: $(needs_made)
+          else
+          all:;@echo 'Nothing to make!'
+          endif
+
+     Replacing the variable reference `$(needs_made)' with the function
+     call `$(strip $(needs_made))' in the `ifneq' directive would make
+     it more robust.
+
+`$(findstring FIND,IN)'
+     Searches IN for an occurrence of FIND.  If it occurs, the value is
+     FIND; otherwise, the value is empty.  You can use this function in
+     a conditional to test for the presence of a specific substring in
+     a given string.  Thus, the two examples,
+
+          $(findstring a,a b c)
+          $(findstring a,b c)
+
+     produce the values `a' and `' (the empty string), respectively.
+     *Note Testing Flags::, for a practical application of `findstring'.
+
+`$(filter PATTERN...,TEXT)'
+     Returns all whitespace-separated words in TEXT that _do_ match any
+     of the PATTERN words, removing any words that _do not_ match.  The
+     patterns are written using `%', just like the patterns used in the
+     `patsubst' function above.
+
+     The `filter' function can be used to separate out different types
+     of strings (such as file names) in a variable.  For example:
+
+          sources := foo.c bar.c baz.s ugh.h
+          foo: $(sources)
+                  cc $(filter %.c %.s,$(sources)) -o foo
+
+     says that `foo' depends of `foo.c', `bar.c', `baz.s' and `ugh.h'
+     but only `foo.c', `bar.c' and `baz.s' should be specified in the
+     command to the compiler.
+
+`$(filter-out PATTERN...,TEXT)'
+     Returns all whitespace-separated words in TEXT that _do not_ match
+     any of the PATTERN words, removing the words that _do_ match one
+     or more.  This is the exact opposite of the `filter' function.
+
+     For example, given:
+
+          objects=main1.o foo.o main2.o bar.o
+          mains=main1.o main2.o
+
+     the following generates a list which contains all the object files
+     not in `mains':
+
+          $(filter-out $(mains),$(objects))
+
+`$(sort LIST)'
+     Sorts the words of LIST in lexical order, removing duplicate
+     words.  The output is a list of words separated by single spaces.
+     Thus,
+
+          $(sort foo bar lose)
+
+     returns the value `bar foo lose'.
+
+     Incidentally, since `sort' removes duplicate words, you can use it
+     for this purpose even if you don't care about the sort order.
+
+`$(word N,TEXT)'
+     Returns the Nth word of TEXT.  The legitimate values of N start
+     from 1.  If N is bigger than the number of words in TEXT, the
+     value is empty.  For example,
+
+          $(word 2, foo bar baz)
+
+     returns `bar'.
+
+`$(wordlist S,E,TEXT)'
+     Returns the list of words in TEXT starting with word S and ending
+     with word E (inclusive).  The legitimate values of S and E start
+     from 1.  If S is bigger than the number of words in TEXT, the
+     value is empty.  If E is bigger than the number of words in TEXT,
+     words up to the end of TEXT are returned.  If S is greater than E,
+     nothing is returned.  For example,
+
+          $(wordlist 2, 3, foo bar baz)
+
+     returns `bar baz'.
+
+`$(words TEXT)'
+     Returns the number of words in TEXT.  Thus, the last word of TEXT
+     is `$(word $(words TEXT),TEXT)'.
+
+`$(firstword NAMES...)'
+     The argument NAMES is regarded as a series of names, separated by
+     whitespace.  The value is the first name in the series.  The rest
+     of the names are ignored.
+
+     For example,
+
+          $(firstword foo bar)
+
+     produces the result `foo'.  Although `$(firstword TEXT)' is the
+     same as `$(word 1,TEXT)', the `firstword' function is retained for
+     its simplicity.
+
+   Here is a realistic example of the use of `subst' and `patsubst'.
+Suppose that a makefile uses the `VPATH' variable to specify a list of
+directories that `make' should search for prerequisite files (*note
+`VPATH' Search Path for All Prerequisites: General Search.).  This
+example shows how to tell the C compiler to search for header files in
+the same list of directories.
+
+   The value of `VPATH' is a list of directories separated by colons,
+such as `src:../headers'.  First, the `subst' function is used to
+change the colons to spaces:
+
+     $(subst :, ,$(VPATH))
+
+This produces `src ../headers'.  Then `patsubst' is used to turn each
+directory name into a `-I' flag.  These can be added to the value of
+the variable `CFLAGS', which is passed automatically to the C compiler,
+like this:
+
+     override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH)))
+
+The effect is to append the text `-Isrc -I../headers' to the previously
+given value of `CFLAGS'.  The `override' directive is used so that the
+new value is assigned even if the previous value of `CFLAGS' was
+specified with a command argument (*note The `override' Directive:
+Override Directive.).
+
+
+File: make.info,  Node: File Name Functions,  Next: Foreach Function,  Prev: Text Functions,  Up: Functions
+
+8.3 Functions for File Names
+============================
+
+Several of the built-in expansion functions relate specifically to
+taking apart file names or lists of file names.
+
+   Each of the following functions performs a specific transformation
+on a file name.  The argument of the function is regarded as a series
+of file names, separated by whitespace.  (Leading and trailing
+whitespace is ignored.)  Each file name in the series is transformed in
+the same way and the results are concatenated with single spaces
+between them.
+
+`$(dir NAMES...)'
+     Extracts the directory-part of each file name in NAMES.  The
+     directory-part of the file name is everything up through (and
+     including) the last slash in it.  If the file name contains no
+     slash, the directory part is the string `./'.  For example,
+
+          $(dir src/foo.c hacks)
+
+     produces the result `src/ ./'.
+
+`$(notdir NAMES...)'
+     Extracts all but the directory-part of each file name in NAMES.
+     If the file name contains no slash, it is left unchanged.
+     Otherwise, everything through the last slash is removed from it.
+
+     A file name that ends with a slash becomes an empty string.  This
+     is unfortunate, because it means that the result does not always
+     have the same number of whitespace-separated file names as the
+     argument had; but we do not see any other valid alternative.
+
+     For example,
+
+          $(notdir src/foo.c hacks)
+
+     produces the result `foo.c hacks'.
+
+`$(suffix NAMES...)'
+     Extracts the suffix of each file name in NAMES.  If the file name
+     contains a period, the suffix is everything starting with the last
+     period.  Otherwise, the suffix is the empty string.  This
+     frequently means that the result will be empty when NAMES is not,
+     and if NAMES contains multiple file names, the result may contain
+     fewer file names.
+
+     For example,
+
+          $(suffix src/foo.c src-1.0/bar.c hacks)
+
+     produces the result `.c .c'.
+
+`$(basename NAMES...)'
+     Extracts all but the suffix of each file name in NAMES.  If the
+     file name contains a period, the basename is everything starting
+     up to (and not including) the last period.  Periods in the
+     directory part are ignored.  If there is no period, the basename
+     is the entire file name.  For example,
+
+          $(basename src/foo.c src-1.0/bar hacks)
+
+     produces the result `src/foo src-1.0/bar hacks'.
+
+`$(addsuffix SUFFIX,NAMES...)'
+     The argument NAMES is regarded as a series of names, separated by
+     whitespace; SUFFIX is used as a unit.  The value of SUFFIX is
+     appended to the end of each individual name and the resulting
+     larger names are concatenated with single spaces between them.
+     For example,
+
+          $(addsuffix .c,foo bar)
+
+     produces the result `foo.c bar.c'.
+
+`$(addprefix PREFIX,NAMES...)'
+     The argument NAMES is regarded as a series of names, separated by
+     whitespace; PREFIX is used as a unit.  The value of PREFIX is
+     prepended to the front of each individual name and the resulting
+     larger names are concatenated with single spaces between them.
+     For example,
+
+          $(addprefix src/,foo bar)
+
+     produces the result `src/foo src/bar'.
+
+`$(join LIST1,LIST2)'
+     Concatenates the two arguments word by word: the two first words
+     (one from each argument) concatenated form the first word of the
+     result, the two second words form the second word of the result,
+     and so on.  So the Nth word of the result comes from the Nth word
+     of each argument.  If one argument has more words that the other,
+     the extra words are copied unchanged into the result.
+
+     For example, `$(join a b,.c .o)' produces `a.c b.o'.
+
+     Whitespace between the words in the lists is not preserved; it is
+     replaced with a single space.
+
+     This function can merge the results of the `dir' and `notdir'
+     functions, to produce the original list of files which was given
+     to those two functions.
+
+`$(wildcard PATTERN)'
+     The argument PATTERN is a file name pattern, typically containing
+     wildcard characters (as in shell file name patterns).  The result
+     of `wildcard' is a space-separated list of the names of existing
+     files that match the pattern.  *Note Using Wildcard Characters in
+     File Names: Wildcards.
+
+
+File: make.info,  Node: Foreach Function,  Next: If Function,  Prev: File Name Functions,  Up: Functions
+
+8.4 The `foreach' Function
+==========================
+
+The `foreach' function is very different from other functions.  It
+causes one piece of text to be used repeatedly, each time with a
+different substitution performed on it.  It resembles the `for' command
+in the shell `sh' and the `foreach' command in the C-shell `csh'.
+
+   The syntax of the `foreach' function is:
+
+     $(foreach VAR,LIST,TEXT)
+
+The first two arguments, VAR and LIST, are expanded before anything
+else is done; note that the last argument, TEXT, is *not* expanded at
+the same time.  Then for each word of the expanded value of LIST, the
+variable named by the expanded value of VAR is set to that word, and
+TEXT is expanded.  Presumably TEXT contains references to that
+variable, so its expansion will be different each time.
+
+   The result is that TEXT is expanded as many times as there are
+whitespace-separated words in LIST.  The multiple expansions of TEXT
+are concatenated, with spaces between them, to make the result of
+`foreach'.
+
+   This simple example sets the variable `files' to the list of all
+files in the directories in the list `dirs':
+
+     dirs := a b c d
+     files := $(foreach dir,$(dirs),$(wildcard $(dir)/*))
+
+   Here TEXT is `$(wildcard $(dir)/*)'.  The first repetition finds the
+value `a' for `dir', so it produces the same result as `$(wildcard
+a/*)'; the second repetition produces the result of `$(wildcard b/*)';
+and the third, that of `$(wildcard c/*)'.
+
+   This example has the same result (except for setting `dirs') as the
+following example:
+
+     files := $(wildcard a/* b/* c/* d/*)
+
+   When TEXT is complicated, you can improve readability by giving it a
+name, with an additional variable:
+
+     find_files = $(wildcard $(dir)/*)
+     dirs := a b c d
+     files := $(foreach dir,$(dirs),$(find_files))
+
+Here we use the variable `find_files' this way.  We use plain `=' to
+define a recursively-expanding variable, so that its value contains an
+actual function call to be reexpanded under the control of `foreach'; a
+simply-expanded variable would not do, since `wildcard' would be called
+only once at the time of defining `find_files'.
+
+   The `foreach' function has no permanent effect on the variable VAR;
+its value and flavor after the `foreach' function call are the same as
+they were beforehand.  The other values which are taken from LIST are
+in effect only temporarily, during the execution of `foreach'.  The
+variable VAR is a simply-expanded variable during the execution of
+`foreach'.  If VAR was undefined before the `foreach' function call, it
+is undefined after the call.  *Note The Two Flavors of Variables:
+Flavors.
+
+   You must take care when using complex variable expressions that
+result in variable names because many strange things are valid variable
+names, but are probably not what you intended.  For example,
+
+     files := $(foreach Esta escrito en espanol!,b c ch,$(find_files))
+
+might be useful if the value of `find_files' references the variable
+whose name is `Esta escrito en espanol!' (es un nombre bastante largo,
+no?), but it is more likely to be a mistake.
+
+
+File: make.info,  Node: If Function,  Next: Call Function,  Prev: Foreach Function,  Up: Functions
+
+8.5 The `if' Function
+=====================
+
+The `if' function provides support for conditional expansion in a
+functional context (as opposed to the GNU `make' makefile conditionals
+such as `ifeq' (*note Syntax of Conditionals: Conditional Syntax.).
+
+   An `if' function call can contain either two or three arguments:
+
+     $(if CONDITION,THEN-PART[,ELSE-PART])
+
+   The first argument, CONDITION, first has all preceding and trailing
+whitespace stripped, then is expanded.  If it expands to any non-empty
+string, then the condition is considered to be true.  If it expands to
+an empty string, the condition is considered to be false.
+
+   If the condition is true then the second argument, THEN-PART, is
+evaluated and this is used as the result of the evaluation of the entire
+`if' function.
+
+   If the condition is false then the third argument, ELSE-PART, is
+evaluated and this is the result of the `if' function.  If there is no
+third argument, the `if' function evaluates to nothing (the empty
+string).
+
+   Note that only one of the THEN-PART or the ELSE-PART will be
+evaluated, never both.  Thus, either can contain side-effects (such as
+`shell' function calls, etc.)
+
+
+File: make.info,  Node: Call Function,  Next: Value Function,  Prev: If Function,  Up: Functions
+
+8.6 The `call' Function
+=======================
+
+The `call' function is unique in that it can be used to create new
+parameterized functions.  You can write a complex expression as the
+value of a variable, then use `call' to expand it with different values.
+
+   The syntax of the `call' function is:
+
+     $(call VARIABLE,PARAM,PARAM,...)
+
+   When `make' expands this function, it assigns each PARAM to
+temporary variables `$(1)', `$(2)', etc.  The variable `$(0)' will
+contain VARIABLE.  There is no maximum number of parameter arguments.
+There is no minimum, either, but it doesn't make sense to use `call'
+with no parameters.
+
+   Then VARIABLE is expanded as a `make' variable in the context of
+these temporary assignments.  Thus, any reference to `$(1)' in the
+value of VARIABLE will resolve to the first PARAM in the invocation of
+`call'.
+
+   Note that VARIABLE is the _name_ of a variable, not a _reference_ to
+that variable.  Therefore you would not normally use a `$' or
+parentheses when writing it.  (You can, however, use a variable
+reference in the name if you want the name not to be a constant.)
+
+   If VARIABLE is the name of a builtin function, the builtin function
+is always invoked (even if a `make' variable by that name also exists).
+
+   The `call' function expands the PARAM arguments before assigning
+them to temporary variables.  This means that VARIABLE values
+containing references to builtin functions that have special expansion
+rules, like `foreach' or `if', may not work as you expect.
+
+   Some examples may make this clearer.
+
+   This macro simply reverses its arguments:
+
+     reverse = $(2) $(1)
+
+     foo = $(call reverse,a,b)
+
+Here FOO will contain `b a'.
+
+   This one is slightly more interesting: it defines a macro to search
+for the first instance of a program in `PATH':
+
+     pathsearch = $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH)))))
+
+     LS := $(call pathsearch,ls)
+
+Now the variable LS contains `/bin/ls' or similar.
+
+   The `call' function can be nested.  Each recursive invocation gets
+its own local values for `$(1)', etc. that mask the values of
+higher-level `call'.  For example, here is an implementation of a "map"
+function:
+
+     map = $(foreach a,$(2),$(call $(1),$(a)))
+
+   Now you can MAP a function that normally takes only one argument,
+such as `origin', to multiple values in one step:
+
+     o = $(call map,origin,o map MAKE)
+
+   and end up with O containing something like `file file default'.
+
+   A final caution: be careful when adding whitespace to the arguments
+to `call'.  As with other functions, any whitespace contained in the
+second and subsequent arguments is kept; this can cause strange
+effects.  It's generally safest to remove all extraneous whitespace when
+providing parameters to `call'.
+
+
+File: make.info,  Node: Value Function,  Next: Eval Function,  Prev: Call Function,  Up: Functions
+
+8.7 The `value' Function
+========================
+
+The `value' function provides a way for you to use the value of a
+variable _without_ having it expanded.  Please note that this does not
+undo expansions which have already occurred; for example if you create
+a simply expanded variable its value is expanded during the definition;
+in that case the `value' function will return the same result as using
+the variable directly.
+
+   The syntax of the `value' function is:
+
+     $(value VARIABLE)
+
+   Note that VARIABLE is the _name_ of a variable; not a _reference_ to
+that variable.  Therefore you would not normally use a `$' or
+parentheses when writing it.  (You can, however, use a variable
+reference in the name if you want the name not to be a constant.)
+
+   The result of this function is a string containing the value of
+VARIABLE, without any expansion occurring.  For example, in this
+makefile:
+
+     FOO = $PATH
+
+     all:
+             @echo $(FOO)
+             @echo $(value FOO)
+
+The first output line would be `ATH', since the "$P" would be expanded
+as a `make' variable, while the second output line would be the current
+value of your `$PATH' environment variable, since the `value' function
+avoided the expansion.
+
+   The `value' function is most often used in conjunction with the
+`eval' function (*note Eval Function::).
+
+
+File: make.info,  Node: Eval Function,  Next: Origin Function,  Prev: Value Function,  Up: Functions
+
+8.8 The `eval' Function
+=======================
+
+The `eval' function is very special: it allows you to define new
+makefile constructs that are not constant; which are the result of
+evaluating other variables and functions.  The argument to the `eval'
+function is expanded, then the results of that expansion are parsed as
+makefile syntax.  The expanded results can define new `make' variables,
+targets, implicit or explicit rules, etc.
+
+   The result of the `eval' function is always the empty string; thus,
+it can be placed virtually anywhere in a makefile without causing
+syntax errors.
+
+   It's important to realize that the `eval' argument is expanded
+_twice_; first by the `eval' function, then the results of that
+expansion are expanded again when they are parsed as makefile syntax.
+This means you may need to provide extra levels of escaping for "$"
+characters when using `eval'.  The `value' function (*note Value
+Function::) can sometimes be useful in these situations, to circumvent
+unwanted expansions.
+
+   Here is an example of how `eval' can be used; this example combines
+a number of concepts and other functions.  Although it might seem
+overly complex to use `eval' in this example, rather than just writing
+out the rules, consider two things: first, the template definition (in
+`PROGRAM_template') could need to be much more complex than it is here;
+and second, you might put the complex, "generic" part of this example
+into another makefile, then include it in all the individual makefiles.
+Now your individual makefiles are quite straightforward.
+
+     PROGRAMS    = server client
+
+     server_OBJS = server.o server_priv.o server_access.o
+     server_LIBS = priv protocol
+
+     client_OBJS = client.o client_api.o client_mem.o
+     client_LIBS = protocol
+
+     # Everything after this is generic
+
+     .PHONY: all
+     all: $(PROGRAMS)
+
+     define PROGRAM_template
+      $(1): $$($(1)_OBJ) $$($(1)_LIBS:%=-l%)
+      ALL_OBJS   += $$($(1)_OBJS)
+     endef
+
+     $(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog))))
+
+     $(PROGRAMS):
+             $(LINK.o) $^ $(LDLIBS) -o $@
+
+     clean:
+             rm -f $(ALL_OBJS) $(PROGRAMS)
+
+
+File: make.info,  Node: Origin Function,  Next: Shell Function,  Prev: Eval Function,  Up: Functions
+
+8.9 The `origin' Function
+=========================
+
+The `origin' function is unlike most other functions in that it does
+not operate on the values of variables; it tells you something _about_
+a variable.  Specifically, it tells you where it came from.
+
+   The syntax of the `origin' function is:
+
+     $(origin VARIABLE)
+
+   Note that VARIABLE is the _name_ of a variable to inquire about; not
+a _reference_ to that variable.  Therefore you would not normally use a
+`$' or parentheses when writing it.  (You can, however, use a variable
+reference in the name if you want the name not to be a constant.)
+
+   The result of this function is a string telling you how the variable
+VARIABLE was defined:
+
+`undefined'
+     if VARIABLE was never defined.
+
+`default'
+     if VARIABLE has a default definition, as is usual with `CC' and so
+     on.  *Note Variables Used by Implicit Rules: Implicit Variables.
+     Note that if you have redefined a default variable, the `origin'
+     function will return the origin of the later definition.
+
+`environment'
+     if VARIABLE was defined as an environment variable and the `-e'
+     option is _not_ turned on (*note Summary of Options: Options
+     Summary.).
+
+`environment override'
+     if VARIABLE was defined as an environment variable and the `-e'
+     option _is_ turned on (*note Summary of Options: Options Summary.).
+
+`file'
+     if VARIABLE was defined in a makefile.
+
+`command line'
+     if VARIABLE was defined on the command line.
+
+`override'
+     if VARIABLE was defined with an `override' directive in a makefile
+     (*note The `override' Directive: Override Directive.).
+
+`automatic'
+     if VARIABLE is an automatic variable defined for the execution of
+     the commands for each rule (*note Automatic Variables: Automatic.).
+
+   This information is primarily useful (other than for your curiosity)
+to determine if you want to believe the value of a variable.  For
+example, suppose you have a makefile `foo' that includes another
+makefile `bar'.  You want a variable `bletch' to be defined in `bar' if
+you run the command `make -f bar', even if the environment contains a
+definition of `bletch'.  However, if `foo' defined `bletch' before
+including `bar', you do not want to override that definition.  This
+could be done by using an `override' directive in `foo', giving that
+definition precedence over the later definition in `bar';
+unfortunately, the `override' directive would also override any command
+line definitions.  So, `bar' could include:
+
+     ifdef bletch
+     ifeq "$(origin bletch)" "environment"
+     bletch = barf, gag, etc.
+     endif
+     endif
+
+If `bletch' has been defined from the environment, this will redefine
+it.
+
+   If you want to override a previous definition of `bletch' if it came
+from the environment, even under `-e', you could instead write:
+
+     ifneq "$(findstring environment,$(origin bletch))" ""
+     bletch = barf, gag, etc.
+     endif
+
+   Here the redefinition takes place if `$(origin bletch)' returns
+either `environment' or `environment override'.  *Note Functions for
+String Substitution and Analysis: Text Functions.
+
+
+File: make.info,  Node: Shell Function,  Next: Make Control Functions,  Prev: Origin Function,  Up: Functions
+
+8.10 The `shell' Function
+=========================
+
+The `shell' function is unlike any other function except the `wildcard'
+function (*note The Function `wildcard': Wildcard Function.) in that it
+communicates with the world outside of `make'.
+
+   The `shell' function performs the same function that backquotes
+(``') perform in most shells: it does "command expansion".  This means
+that it takes an argument that is a shell command and returns the
+output of the command.  The only processing `make' does on the result,
+before substituting it into the surrounding text, is to convert each
+newline or carriage-return / newline pair to a single space.  It also
+removes the trailing (carriage-return and) newline, if it's the last
+thing in the result.
+
+   The commands run by calls to the `shell' function are run when the
+function calls are expanded (*note How `make' Reads a Makefile: Reading
+Makefiles.).  Because this function involves spawning a new shell, you
+should carefully consider the performance implications of using the
+`shell' function within recursively expanded variables vs. simply
+expanded variables (*note The Two Flavors of Variables: Flavors.).
+
+   Here are some examples of the use of the `shell' function:
+
+     contents := $(shell cat foo)
+
+sets `contents' to the contents of the file `foo', with a space (rather
+than a newline) separating each line.
+
+     files := $(shell echo *.c)
+
+sets `files' to the expansion of `*.c'.  Unless `make' is using a very
+strange shell, this has the same result as `$(wildcard *.c)'.
+
+
+File: make.info,  Node: Make Control Functions,  Prev: Shell Function,  Up: Functions
+
+8.11 Functions That Control Make
+================================
+
+These functions control the way make runs.  Generally, they are used to
+provide information to the user of the makefile or to cause make to stop
+if some sort of environmental error is detected.
+
+`$(error TEXT...)'
+     Generates a fatal error where the message is TEXT.  Note that the
+     error is generated whenever this function is evaluated.  So, if
+     you put it inside a command script or on the right side of a
+     recursive variable assignment, it won't be evaluated until later.
+     The TEXT will be expanded before the error is generated.
+
+     For example,
+
+          ifdef ERROR1
+          $(error error is $(ERROR1))
+          endif
+
+     will generate a fatal error during the read of the makefile if the
+     `make' variable `ERROR1' is defined.  Or,
+
+          ERR = $(error found an error!)
+
+          .PHONY: err
+          err: ; $(ERR)
+
+     will generate a fatal error while `make' is running, if the `err'
+     target is invoked.
+
+`$(warning TEXT...)'
+     This function works similarly to the `error' function, above,
+     except that `make' doesn't exit.  Instead, TEXT is expanded and
+     the resulting message is displayed, but processing of the makefile
+     continues.
+
+     The result of the expansion of this function is the empty string.
+
+
+File: make.info,  Node: Running,  Next: Implicit Rules,  Prev: Functions,  Up: Top
+
+9 How to Run `make'
+*******************
+
+A makefile that says how to recompile a program can be used in more
+than one way.  The simplest use is to recompile every file that is out
+of date.  Usually, makefiles are written so that if you run `make' with
+no arguments, it does just that.
+
+   But you might want to update only some of the files; you might want
+to use a different compiler or different compiler options; you might
+want just to find out which files are out of date without changing them.
+
+   By giving arguments when you run `make', you can do any of these
+things and many others.
+
+   The exit status of `make' is always one of three values:
+`0'
+     The exit status is zero if `make' is successful.
+
+`2'
+     The exit status is two if `make' encounters any errors.  It will
+     print messages describing the particular errors.
+
+`1'
+     The exit status is one if you use the `-q' flag and `make'
+     determines that some target is not already up to date.  *Note
+     Instead of Executing the Commands: Instead of Execution.
+
+* Menu:
+
+* Makefile Arguments::          How to specify which makefile to use.
+* Goals::                       How to use goal arguments to specify which
+                                  parts of the makefile to use.
+* Instead of Execution::        How to use mode flags to specify what
+                                  kind of thing to do with the commands
+                                  in the makefile other than simply
+                                  execute them.
+* Avoiding Compilation::        How to avoid recompiling certain files.
+* Overriding::                  How to override a variable to specify
+                                  an alternate compiler and other things.
+* Testing::                     How to proceed past some errors, to
+                                  test compilation.
+* Options Summary::             Summary of Options
+
+
+File: make.info,  Node: Makefile Arguments,  Next: Goals,  Prev: Running,  Up: Running
+
+9.1 Arguments to Specify the Makefile
+=====================================
+
+The way to specify the name of the makefile is with the `-f' or
+`--file' option (`--makefile' also works).  For example, `-f altmake'
+says to use the file `altmake' as the makefile.
+
+   If you use the `-f' flag several times and follow each `-f' with an
+argument, all the specified files are used jointly as makefiles.
+
+   If you do not use the `-f' or `--file' flag, the default is to try
+`GNUmakefile', `makefile', and `Makefile', in that order, and use the
+first of these three which exists or can be made (*note Writing
+Makefiles: Makefiles.).
+
+
+File: make.info,  Node: Goals,  Next: Instead of Execution,  Prev: Makefile Arguments,  Up: Running
+
+9.2 Arguments to Specify the Goals
+==================================
+
+The "goals" are the targets that `make' should strive ultimately to
+update.  Other targets are updated as well if they appear as
+prerequisites of goals, or prerequisites of prerequisites of goals, etc.
+
+   By default, the goal is the first target in the makefile (not
+counting targets that start with a period).  Therefore, makefiles are
+usually written so that the first target is for compiling the entire
+program or programs they describe.  If the first rule in the makefile
+has several targets, only the first target in the rule becomes the
+default goal, not the whole list.
+
+   You can specify a different goal or goals with arguments to `make'.
+Use the name of the goal as an argument.  If you specify several goals,
+`make' processes each of them in turn, in the order you name them.
+
+   Any target in the makefile may be specified as a goal (unless it
+starts with `-' or contains an `=', in which case it will be parsed as
+a switch or variable definition, respectively).  Even targets not in
+the makefile may be specified, if `make' can find implicit rules that
+say how to make them.
+
+   `Make' will set the special variable `MAKECMDGOALS' to the list of
+goals you specified on the command line.  If no goals were given on the
+command line, this variable is empty.  Note that this variable should
+be used only in special circumstances.
+
+   An example of appropriate use is to avoid including `.d' files
+during `clean' rules (*note Automatic Prerequisites::), so `make' won't
+create them only to immediately remove them again:
+
+     sources = foo.c bar.c
+
+     ifneq ($(MAKECMDGOALS),clean)
+     include $(sources:.c=.d)
+     endif
+
+   One use of specifying a goal is if you want to compile only a part of
+the program, or only one of several programs.  Specify as a goal each
+file that you wish to remake.  For example, consider a directory
+containing several programs, with a makefile that starts like this:
+
+     .PHONY: all
+     all: size nm ld ar as
+
+   If you are working on the program `size', you might want to say
+`make size' so that only the files of that program are recompiled.
+
+   Another use of specifying a goal is to make files that are not
+normally made.  For example, there may be a file of debugging output,
+or a version of the program that is compiled specially for testing,
+which has a rule in the makefile but is not a prerequisite of the
+default goal.
+
+   Another use of specifying a goal is to run the commands associated
+with a phony target (*note Phony Targets::) or empty target (*note
+Empty Target Files to Record Events: Empty Targets.).  Many makefiles
+contain a phony target named `clean' which deletes everything except
+source files.  Naturally, this is done only if you request it
+explicitly with `make clean'.  Following is a list of typical phony and
+empty target names.  *Note Standard Targets::, for a detailed list of
+all the standard target names which GNU software packages use.
+
+`all'
+     Make all the top-level targets the makefile knows about.
+
+`clean'
+     Delete all files that are normally created by running `make'.
+
+`mostlyclean'
+     Like `clean', but may refrain from deleting a few files that people
+     normally don't want to recompile.  For example, the `mostlyclean'
+     target for GCC does not delete `libgcc.a', because recompiling it
+     is rarely necessary and takes a lot of time.
+
+`distclean'
+`realclean'
+`clobber'
+     Any of these targets might be defined to delete _more_ files than
+     `clean' does.  For example, this would delete configuration files
+     or links that you would normally create as preparation for
+     compilation, even if the makefile itself cannot create these files.
+
+`install'
+     Copy the executable file into a directory that users typically
+     search for commands; copy any auxiliary files that the executable
+     uses into the directories where it will look for them.
+
+`print'
+     Print listings of the source files that have changed.
+
+`tar'
+     Create a tar file of the source files.
+
+`shar'
+     Create a shell archive (shar file) of the source files.
+
+`dist'
+     Create a distribution file of the source files.  This might be a
+     tar file, or a shar file, or a compressed version of one of the
+     above, or even more than one of the above.
+
+`TAGS'
+     Update a tags table for this program.
+
+`check'
+`test'
+     Perform self tests on the program this makefile builds.
+
+
+File: make.info,  Node: Instead of Execution,  Next: Avoiding Compilation,  Prev: Goals,  Up: Running
+
+9.3 Instead of Executing the Commands
+=====================================
+
+The makefile tells `make' how to tell whether a target is up to date,
+and how to update each target.  But updating the targets is not always
+what you want.  Certain options specify other activities for `make'.
+
+`-n'
+`--just-print'
+`--dry-run'
+`--recon'
+     "No-op".  The activity is to print what commands would be used to
+     make the targets up to date, but not actually execute them.
+
+`-t'
+`--touch'
+     "Touch".  The activity is to mark the targets as up to date without
+     actually changing them.  In other words, `make' pretends to compile
+     the targets but does not really change their contents.
+
+`-q'
+`--question'
+     "Question".  The activity is to find out silently whether the
+     targets are up to date already; but execute no commands in either
+     case.  In other words, neither compilation nor output will occur.
+
+`-W FILE'
+`--what-if=FILE'
+`--assume-new=FILE'
+`--new-file=FILE'
+     "What if".  Each `-W' flag is followed by a file name.  The given
+     files' modification times are recorded by `make' as being the
+     present time, although the actual modification times remain the
+     same.  You can use the `-W' flag in conjunction with the `-n' flag
+     to see what would happen if you were to modify specific files.
+
+   With the `-n' flag, `make' prints the commands that it would
+normally execute but does not execute them.
+
+   With the `-t' flag, `make' ignores the commands in the rules and
+uses (in effect) the command `touch' for each target that needs to be
+remade.  The `touch' command is also printed, unless `-s' or `.SILENT'
+is used.  For speed, `make' does not actually invoke the program
+`touch'.  It does the work directly.
+
+   With the `-q' flag, `make' prints nothing and executes no commands,
+but the exit status code it returns is zero if and only if the targets
+to be considered are already up to date.  If the exit status is one,
+then some updating needs to be done.  If `make' encounters an error,
+the exit status is two, so you can distinguish an error from a target
+that is not up to date.
+
+   It is an error to use more than one of these three flags in the same
+invocation of `make'.
+
+   The `-n', `-t', and `-q' options do not affect command lines that
+begin with `+' characters or contain the strings `$(MAKE)' or
+`${MAKE}'.  Note that only the line containing the `+' character or the
+strings `$(MAKE)' or `${MAKE}' is run regardless of these options.
+Other lines in the same rule are not run unless they too begin with `+'
+or contain `$(MAKE)' or `${MAKE}' (*Note How the `MAKE' Variable Works:
+MAKE Variable.)
+
+   The `-W' flag provides two features:
+
+   * If you also use the `-n' or `-q' flag, you can see what `make'
+     would do if you were to modify some files.
+
+   * Without the `-n' or `-q' flag, when `make' is actually executing
+     commands, the `-W' flag can direct `make' to act as if some files
+     had been modified, without actually modifying the files.
+
+   Note that the options `-p' and `-v' allow you to obtain other
+information about `make' or about the makefiles in use (*note Summary
+of Options: Options Summary.).
+
+
+File: make.info,  Node: Avoiding Compilation,  Next: Overriding,  Prev: Instead of Execution,  Up: Running
+
+9.4 Avoiding Recompilation of Some Files
+========================================
+
+Sometimes you may have changed a source file but you do not want to
+recompile all the files that depend on it.  For example, suppose you add
+a macro or a declaration to a header file that many other files depend
+on.  Being conservative, `make' assumes that any change in the header
+file requires recompilation of all dependent files, but you know that
+they do not need to be recompiled and you would rather not waste the
+time waiting for them to compile.
+
+   If you anticipate the problem before changing the header file, you
+can use the `-t' flag.  This flag tells `make' not to run the commands
+in the rules, but rather to mark the target up to date by changing its
+last-modification date.  You would follow this procedure:
+
+  1. Use the command `make' to recompile the source files that really
+     need recompilation, ensuring that the object files are up-to-date
+     before you begin.
+
+  2. Make the changes in the header files.
+
+  3. Use the command `make -t' to mark all the object files as up to
+     date.  The next time you run `make', the changes in the header
+     files will not cause any recompilation.
+
+   If you have already changed the header file at a time when some files
+do need recompilation, it is too late to do this.  Instead, you can use
+the `-o FILE' flag, which marks a specified file as "old" (*note
+Summary of Options: Options Summary.).  This means that the file itself
+will not be remade, and nothing else will be remade on its account.
+Follow this procedure:
+
+  1. Recompile the source files that need compilation for reasons
+     independent of the particular header file, with `make -o
+     HEADERFILE'.  If several header files are involved, use a separate
+     `-o' option for each header file.
+
+  2. Touch all the object files with `make -t'.
+
+
+File: make.info,  Node: Overriding,  Next: Testing,  Prev: Avoiding Compilation,  Up: Running
+
+9.5 Overriding Variables
+========================
+
+An argument that contains `=' specifies the value of a variable: `V=X'
+sets the value of the variable V to X.  If you specify a value in this
+way, all ordinary assignments of the same variable in the makefile are
+ignored; we say they have been "overridden" by the command line
+argument.
+
+   The most common way to use this facility is to pass extra flags to
+compilers.  For example, in a properly written makefile, the variable
+`CFLAGS' is included in each command that runs the C compiler, so a
+file `foo.c' would be compiled something like this:
+
+     cc -c $(CFLAGS) foo.c
+
+   Thus, whatever value you set for `CFLAGS' affects each compilation
+that occurs.  The makefile probably specifies the usual value for
+`CFLAGS', like this:
+
+     CFLAGS=-g
+
+   Each time you run `make', you can override this value if you wish.
+For example, if you say `make CFLAGS='-g -O'', each C compilation will
+be done with `cc -c -g -O'.  (This also illustrates how you can use
+quoting in the shell to enclose spaces and other special characters in
+the value of a variable when you override it.)
+
+   The variable `CFLAGS' is only one of many standard variables that
+exist just so that you can change them this way.  *Note Variables Used
+by Implicit Rules: Implicit Variables, for a complete list.
+
+   You can also program the makefile to look at additional variables of
+your own, giving the user the ability to control other aspects of how
+the makefile works by changing the variables.
+
+   When you override a variable with a command argument, you can define
+either a recursively-expanded variable or a simply-expanded variable.
+The examples shown above make a recursively-expanded variable; to make a
+simply-expanded variable, write `:=' instead of `='.  But, unless you
+want to include a variable reference or function call in the _value_
+that you specify, it makes no difference which kind of variable you
+create.
+
+   There is one way that the makefile can change a variable that you
+have overridden.  This is to use the `override' directive, which is a
+line that looks like this: `override VARIABLE = VALUE' (*note The
+`override' Directive: Override Directive.).
+
+
+File: make.info,  Node: Testing,  Next: Options Summary,  Prev: Overriding,  Up: Running
+
+9.6 Testing the Compilation of a Program
+========================================
+
+Normally, when an error happens in executing a shell command, `make'
+gives up immediately, returning a nonzero status.  No further commands
+are executed for any target.  The error implies that the goal cannot be
+correctly remade, and `make' reports this as soon as it knows.
+
+   When you are compiling a program that you have just changed, this is
+not what you want.  Instead, you would rather that `make' try compiling
+every file that can be tried, to show you as many compilation errors as
+possible.
+
+   On these occasions, you should use the `-k' or `--keep-going' flag.
+This tells `make' to continue to consider the other prerequisites of
+the pending targets, remaking them if necessary, before it gives up and
+returns nonzero status.  For example, after an error in compiling one
+object file, `make -k' will continue compiling other object files even
+though it already knows that linking them will be impossible.  In
+addition to continuing after failed shell commands, `make -k' will
+continue as much as possible after discovering that it does not know
+how to make a target or prerequisite file.  This will always cause an
+error message, but without `-k', it is a fatal error (*note Summary of
+Options: Options Summary.).
+
+   The usual behavior of `make' assumes that your purpose is to get the
+goals up to date; once `make' learns that this is impossible, it might
+as well report the failure immediately.  The `-k' flag says that the
+real purpose is to test as much as possible of the changes made in the
+program, perhaps to find several independent problems so that you can
+correct them all before the next attempt to compile.  This is why Emacs'
+`M-x compile' command passes the `-k' flag by default.
+
+
+File: make.info,  Node: Options Summary,  Prev: Testing,  Up: Running
+
+9.7 Summary of Options
+======================
+
+Here is a table of all the options `make' understands:
+
+`-b'
+`-m'
+     These options are ignored for compatibility with other versions of
+     `make'.
+
+`-B'
+`--always-make'
+     Consider all targets out-of-date.  GNU `make' proceeds to consider
+     targets and their prerequisites using the normal algorithms;
+     however, all these targets are remade, regardless of the status of
+     their prerequisites.
+
+`-C DIR'
+`--directory=DIR'
+     Change to directory DIR before reading the makefiles.  If multiple
+     `-C' options are specified, each is interpreted relative to the
+     previous one: `-C / -C etc' is equivalent to `-C /etc'.  This is
+     typically used with recursive invocations of `make' (*note
+     Recursive Use of `make': Recursion.).
+
+`-d'
+     Print debugging information in addition to normal processing.  The
+     debugging information says which files are being considered for
+     remaking, which file-times are being compared and with what
+     results, which files actually need to be remade, which implicit
+     rules are considered and which are applied--everything interesting
+     about how `make' decides what to do.  The `-d' option is
+     equivalent to `--debug=a' (see below).
+
+`--debug[=OPTIONS]'
+     Print debugging information in addition to normal processing.
+     Various levels and types of output can be chosen.  With no
+     arguments, print the "basic" level of debugging.  Possible
+     arguments are below; only the first character is considered, and
+     values must be comma- or space-separated.
+
+    `a (all)'
+          All types of debugging output are enabled.  This is
+          equivalent to using `-d'.
+
+    `b (basic)'
+          Basic debugging prints each target that was found to be
+          out-of-date, and whether the build was successful or not.
+
+    `v (verbose)'
+          A level above `basic'; includes messages about which
+          makefiles were parsed, prerequisites that did not need to be
+          rebuilt, etc.  This option also enables `basic' messages.
+
+    `i (implicit)'
+          Prints messages describing the implicit rule searches for
+          each target.  This option also enables `basic' messages.
+
+    `j (jobs)'
+          Prints messages giving details on the invocation of specific
+          subcommands.
+
+    `m (makefile)'
+          By default, the above messages are not enabled while trying
+          to remake the makefiles.  This option enables messages while
+          rebuilding makefiles, too.  Note that the `all' option does
+          enable this option.  This option also enables `basic'
+          messages.
+
+`-e'
+`--environment-overrides'
+     Give variables taken from the environment precedence over
+     variables from makefiles.  *Note Variables from the Environment:
+     Environment.
+
+`-f FILE'
+`--file=FILE'
+`--makefile=FILE'
+     Read the file named FILE as a makefile.  *Note Writing Makefiles:
+     Makefiles.
+
+`-h'
+`--help'
+     Remind you of the options that `make' understands and then exit.
+
+`-i'
+`--ignore-errors'
+     Ignore all errors in commands executed to remake files.  *Note
+     Errors in Commands: Errors.
+
+`-I DIR'
+`--include-dir=DIR'
+     Specifies a directory DIR to search for included makefiles.  *Note
+     Including Other Makefiles: Include.  If several `-I' options are
+     used to specify several directories, the directories are searched
+     in the order specified.
+
+`-j [JOBS]'
+`--jobs[=JOBS]'
+     Specifies the number of jobs (commands) to run simultaneously.
+     With no argument, `make' runs as many jobs simultaneously as
+     possible.  If there is more than one `-j' option, the last one is
+     effective.  *Note Parallel Execution: Parallel, for more
+     information on how commands are run.  Note that this option is
+     ignored on MS-DOS.
+
+`-k'
+`--keep-going'
+     Continue as much as possible after an error.  While the target that
+     failed, and those that depend on it, cannot be remade, the other
+     prerequisites of these targets can be processed all the same.
+     *Note Testing the Compilation of a Program: Testing.
+
+`-l [LOAD]'
+`--load-average[=LOAD]'
+`--max-load[=LOAD]'
+     Specifies that no new jobs (commands) should be started if there
+     are other jobs running and the load average is at least LOAD (a
+     floating-point number).  With no argument, removes a previous load
+     limit.  *Note Parallel Execution: Parallel.
+
+`-n'
+`--just-print'
+`--dry-run'
+`--recon'
+     Print the commands that would be executed, but do not execute them.
+     *Note Instead of Executing the Commands: Instead of Execution.
+
+`-o FILE'
+`--old-file=FILE'
+`--assume-old=FILE'
+     Do not remake the file FILE even if it is older than its
+     prerequisites, and do not remake anything on account of changes in
+     FILE.  Essentially the file is treated as very old and its rules
+     are ignored.  *Note Avoiding Recompilation of Some Files: Avoiding
+     Compilation.
+
+`-p'
+`--print-data-base'
+     Print the data base (rules and variable values) that results from
+     reading the makefiles; then execute as usual or as otherwise
+     specified.  This also prints the version information given by the
+     `-v' switch (see below).  To print the data base without trying to
+     remake any files, use `make -qp'.  To print the data base of
+     predefined rules and variables, use `make -p -f /dev/null'.  The
+     data base output contains filename and linenumber information for
+     command and variable definitions, so it can be a useful debugging
+     tool in complex environments.
+
+`-q'
+`--question'
+     "Question mode".  Do not run any commands, or print anything; just
+     return an exit status that is zero if the specified targets are
+     already up to date, one if any remaking is required, or two if an
+     error is encountered.  *Note Instead of Executing the Commands:
+     Instead of Execution.
+
+`-r'
+`--no-builtin-rules'
+     Eliminate use of the built-in implicit rules (*note Using Implicit
+     Rules: Implicit Rules.).  You can still define your own by writing
+     pattern rules (*note Defining and Redefining Pattern Rules:
+     Pattern Rules.).  The `-r' option also clears out the default list
+     of suffixes for suffix rules (*note Old-Fashioned Suffix Rules:
+     Suffix Rules.).  But you can still define your own suffixes with a
+     rule for `.SUFFIXES', and then define your own suffix rules.  Note
+     that only _rules_ are affected by the `-r' option; default
+     variables remain in effect (*note Variables Used by Implicit
+     Rules: Implicit Variables.); see the `-R' option below.
+
+`-R'
+`--no-builtin-variables'
+     Eliminate use of the built-in rule-specific variables (*note
+     Variables Used by Implicit Rules: Implicit Variables.).  You can
+     still define your own, of course.  The `-R' option also
+     automatically enables the `-r' option (see above), since it
+     doesn't make sense to have implicit rules without any definitions
+     for the variables that they use.
+
+`-s'
+`--silent'
+`--quiet'
+     Silent operation; do not print the commands as they are executed.
+     *Note Command Echoing: Echoing.
+
+`-S'
+`--no-keep-going'
+`--stop'
+     Cancel the effect of the `-k' option.  This is never necessary
+     except in a recursive `make' where `-k' might be inherited from
+     the top-level `make' via `MAKEFLAGS' (*note Recursive Use of
+     `make': Recursion.)  or if you set `-k' in `MAKEFLAGS' in your
+     environment.
+
+`-t'
+`--touch'
+     Touch files (mark them up to date without really changing them)
+     instead of running their commands.  This is used to pretend that
+     the commands were done, in order to fool future invocations of
+     `make'.  *Note Instead of Executing the Commands: Instead of
+     Execution.
+
+`-v'
+`--version'
+     Print the version of the `make' program plus a copyright, a list
+     of authors, and a notice that there is no warranty; then exit.
+
+`-w'
+`--print-directory'
+     Print a message containing the working directory both before and
+     after executing the makefile.  This may be useful for tracking
+     down errors from complicated nests of recursive `make' commands.
+     *Note Recursive Use of `make': Recursion.  (In practice, you
+     rarely need to specify this option since `make' does it for you;
+     see *Note The `--print-directory' Option: -w Option.)
+
+`--no-print-directory'
+     Disable printing of the working directory under `-w'.  This option
+     is useful when `-w' is turned on automatically, but you do not
+     want to see the extra messages.  *Note The `--print-directory'
+     Option: -w Option.
+
+`-W FILE'
+`--what-if=FILE'
+`--new-file=FILE'
+`--assume-new=FILE'
+     Pretend that the target FILE has just been modified.  When used
+     with the `-n' flag, this shows you what would happen if you were
+     to modify that file.  Without `-n', it is almost the same as
+     running a `touch' command on the given file before running `make',
+     except that the modification time is changed only in the
+     imagination of `make'.  *Note Instead of Executing the Commands:
+     Instead of Execution.
+
+`--warn-undefined-variables'
+     Issue a warning message whenever `make' sees a reference to an
+     undefined variable.  This can be helpful when you are trying to
+     debug makefiles which use variables in complex ways.
+
+
+File: make.info,  Node: Implicit Rules,  Next: Archives,  Prev: Running,  Up: Top
+
+10 Using Implicit Rules
+***********************
+
+Certain standard ways of remaking target files are used very often.  For
+example, one customary way to make an object file is from a C source
+file using the C compiler, `cc'.
+
+   "Implicit rules" tell `make' how to use customary techniques so that
+you do not have to specify them in detail when you want to use them.
+For example, there is an implicit rule for C compilation.  File names
+determine which implicit rules are run.  For example, C compilation
+typically takes a `.c' file and makes a `.o' file.  So `make' applies
+the implicit rule for C compilation when it sees this combination of
+file name endings.
+
+   A chain of implicit rules can apply in sequence; for example, `make'
+will remake a `.o' file from a `.y' file by way of a `.c' file.
+
+   The built-in implicit rules use several variables in their commands
+so that, by changing the values of the variables, you can change the
+way the implicit rule works.  For example, the variable `CFLAGS'
+controls the flags given to the C compiler by the implicit rule for C
+compilation.
+
+   You can define your own implicit rules by writing "pattern rules".
+
+   "Suffix rules" are a more limited way to define implicit rules.
+Pattern rules are more general and clearer, but suffix rules are
+retained for compatibility.
+
+* Menu:
+
+* Using Implicit::              How to use an existing implicit rule
+                                  to get the commands for updating a file.
+* Catalogue of Rules::          A list of built-in implicit rules.
+* Implicit Variables::          How to change what predefined rules do.
+* Chained Rules::               How to use a chain of implicit rules.
+* Pattern Rules::               How to define new implicit rules.
+* Last Resort::                 How to defining commands for rules
+                                  which cannot find any.
+* Suffix Rules::                The old-fashioned style of implicit rule.
+* Implicit Rule Search::        The precise algorithm for applying
+                                  implicit rules.
+
+
+File: make.info,  Node: Using Implicit,  Next: Catalogue of Rules,  Prev: Implicit Rules,  Up: Implicit Rules
+
+10.1 Using Implicit Rules
+=========================
+
+To allow `make' to find a customary method for updating a target file,
+all you have to do is refrain from specifying commands yourself.  Either
+write a rule with no command lines, or don't write a rule at all.  Then
+`make' will figure out which implicit rule to use based on which kind
+of source file exists or can be made.
+
+   For example, suppose the makefile looks like this:
+
+     foo : foo.o bar.o
+             cc -o foo foo.o bar.o $(CFLAGS) $(LDFLAGS)
+
+Because you mention `foo.o' but do not give a rule for it, `make' will
+automatically look for an implicit rule that tells how to update it.
+This happens whether or not the file `foo.o' currently exists.
+
+   If an implicit rule is found, it can supply both commands and one or
+more prerequisites (the source files).  You would want to write a rule
+for `foo.o' with no command lines if you need to specify additional
+prerequisites, such as header files, that the implicit rule cannot
+supply.
+
+   Each implicit rule has a target pattern and prerequisite patterns.
+There may be many implicit rules with the same target pattern.  For
+example, numerous rules make `.o' files: one, from a `.c' file with the
+C compiler; another, from a `.p' file with the Pascal compiler; and so
+on.  The rule that actually applies is the one whose prerequisites
+exist or can be made.  So, if you have a file `foo.c', `make' will run
+the C compiler; otherwise, if you have a file `foo.p', `make' will run
+the Pascal compiler; and so on.
+
+   Of course, when you write the makefile, you know which implicit rule
+you want `make' to use, and you know it will choose that one because you
+know which possible prerequisite files are supposed to exist.  *Note
+Catalogue of Implicit Rules: Catalogue of Rules, for a catalogue of all
+the predefined implicit rules.
+
+   Above, we said an implicit rule applies if the required
+prerequisites "exist or can be made".  A file "can be made" if it is
+mentioned explicitly in the makefile as a target or a prerequisite, or
+if an implicit rule can be recursively found for how to make it.  When
+an implicit prerequisite is the result of another implicit rule, we say
+that "chaining" is occurring.  *Note Chains of Implicit Rules: Chained
+Rules.
+
+   In general, `make' searches for an implicit rule for each target, and
+for each double-colon rule, that has no commands.  A file that is
+mentioned only as a prerequisite is considered a target whose rule
+specifies nothing, so implicit rule search happens for it.  *Note
+Implicit Rule Search Algorithm: Implicit Rule Search, for the details
+of how the search is done.
+
+   Note that explicit prerequisites do not influence implicit rule
+search.  For example, consider this explicit rule:
+
+     foo.o: foo.p
+
+The prerequisite on `foo.p' does not necessarily mean that `make' will
+remake `foo.o' according to the implicit rule to make an object file, a
+`.o' file, from a Pascal source file, a `.p' file.  For example, if
+`foo.c' also exists, the implicit rule to make an object file from a C
+source file is used instead, because it appears before the Pascal rule
+in the list of predefined implicit rules (*note Catalogue of Implicit
+Rules: Catalogue of Rules.).
+
+   If you do not want an implicit rule to be used for a target that has
+no commands, you can give that target empty commands by writing a
+semicolon (*note Defining Empty Commands: Empty Commands.).
+
+
+File: make.info,  Node: Catalogue of Rules,  Next: Implicit Variables,  Prev: Using Implicit,  Up: Implicit Rules
+
+10.2 Catalogue of Implicit Rules
+================================
+
+Here is a catalogue of predefined implicit rules which are always
+available unless the makefile explicitly overrides or cancels them.
+*Note Canceling Implicit Rules: Canceling Rules, for information on
+canceling or overriding an implicit rule.  The `-r' or
+`--no-builtin-rules' option cancels all predefined rules.
+
+   Not all of these rules will always be defined, even when the `-r'
+option is not given.  Many of the predefined implicit rules are
+implemented in `make' as suffix rules, so which ones will be defined
+depends on the "suffix list" (the list of prerequisites of the special
+target `.SUFFIXES').  The default suffix list is: `.out', `.a', `.ln',
+`.o', `.c', `.cc', `.C', `.p', `.f', `.F', `.r', `.y', `.l', `.s',
+`.S', `.mod', `.sym', `.def', `.h', `.info', `.dvi', `.tex', `.texinfo',
+`.texi', `.txinfo', `.w', `.ch' `.web', `.sh', `.elc', `.el'.  All of
+the implicit rules described below whose prerequisites have one of
+these suffixes are actually suffix rules.  If you modify the suffix
+list, the only predefined suffix rules in effect will be those named by
+one or two of the suffixes that are on the list you specify; rules
+whose suffixes fail to be on the list are disabled.  *Note
+Old-Fashioned Suffix Rules: Suffix Rules, for full details on suffix
+rules.
+
+Compiling C programs
+     `N.o' is made automatically from `N.c' with a command of the form
+     `$(CC) -c $(CPPFLAGS) $(CFLAGS)'.
+
+Compiling C++ programs
+     `N.o' is made automatically from `N.cc' or `N.C' with a command of
+     the form `$(CXX) -c $(CPPFLAGS) $(CXXFLAGS)'.  We encourage you to
+     use the suffix `.cc' for C++ source files instead of `.C'.
+
+Compiling Pascal programs
+     `N.o' is made automatically from `N.p' with the command `$(PC) -c
+     $(PFLAGS)'.
+
+Compiling Fortran and Ratfor programs
+     `N.o' is made automatically from `N.r', `N.F' or `N.f' by running
+     the Fortran compiler.  The precise command used is as follows:
+
+    `.f'
+          `$(FC) -c $(FFLAGS)'.
+
+    `.F'
+          `$(FC) -c $(FFLAGS) $(CPPFLAGS)'.
+
+    `.r'
+          `$(FC) -c $(FFLAGS) $(RFLAGS)'.
+
+Preprocessing Fortran and Ratfor programs
+     `N.f' is made automatically from `N.r' or `N.F'.  This rule runs
+     just the preprocessor to convert a Ratfor or preprocessable
+     Fortran program into a strict Fortran program.  The precise
+     command used is as follows:
+
+    `.F'
+          `$(FC) -F $(CPPFLAGS) $(FFLAGS)'.
+
+    `.r'
+          `$(FC) -F $(FFLAGS) $(RFLAGS)'.
+
+Compiling Modula-2 programs
+     `N.sym' is made from `N.def' with a command of the form `$(M2C)
+     $(M2FLAGS) $(DEFFLAGS)'.  `N.o' is made from `N.mod'; the form is:
+     `$(M2C) $(M2FLAGS) $(MODFLAGS)'.
+
+Assembling and preprocessing assembler programs
+     `N.o' is made automatically from `N.s' by running the assembler,
+     `as'.  The precise command is `$(AS) $(ASFLAGS)'.
+
+     `N.s' is made automatically from `N.S' by running the C
+     preprocessor, `cpp'.  The precise command is `$(CPP) $(CPPFLAGS)'.
+
+Linking a single object file
+     `N' is made automatically from `N.o' by running the linker
+     (usually called `ld') via the C compiler.  The precise command
+     used is `$(CC) $(LDFLAGS) N.o $(LOADLIBES) $(LDLIBS)'.
+
+     This rule does the right thing for a simple program with only one
+     source file.  It will also do the right thing if there are multiple
+     object files (presumably coming from various other source files),
+     one of which has a name matching that of the executable file.
+     Thus,
+
+          x: y.o z.o
+
+     when `x.c', `y.c' and `z.c' all exist will execute:
+
+          cc -c x.c -o x.o
+          cc -c y.c -o y.o
+          cc -c z.c -o z.o
+          cc x.o y.o z.o -o x
+          rm -f x.o
+          rm -f y.o
+          rm -f z.o
+
+     In more complicated cases, such as when there is no object file
+     whose name derives from the executable file name, you must write
+     an explicit command for linking.
+
+     Each kind of file automatically made into `.o' object files will
+     be automatically linked by using the compiler (`$(CC)', `$(FC)' or
+     `$(PC)'; the C compiler `$(CC)' is used to assemble `.s' files)
+     without the `-c' option.  This could be done by using the `.o'
+     object files as intermediates, but it is faster to do the
+     compiling and linking in one step, so that's how it's done.
+
+Yacc for C programs
+     `N.c' is made automatically from `N.y' by running Yacc with the
+     command `$(YACC) $(YFLAGS)'.
+
+Lex for C programs
+     `N.c' is made automatically from `N.l' by running Lex.  The actual
+     command is `$(LEX) $(LFLAGS)'.
+
+Lex for Ratfor programs
+     `N.r' is made automatically from `N.l' by running Lex.  The actual
+     command is `$(LEX) $(LFLAGS)'.
+
+     The convention of using the same suffix `.l' for all Lex files
+     regardless of whether they produce C code or Ratfor code makes it
+     impossible for `make' to determine automatically which of the two
+     languages you are using in any particular case.  If `make' is
+     called upon to remake an object file from a `.l' file, it must
+     guess which compiler to use.  It will guess the C compiler, because
+     that is more common.  If you are using Ratfor, make sure `make'
+     knows this by mentioning `N.r' in the makefile.  Or, if you are
+     using Ratfor exclusively, with no C files, remove `.c' from the
+     list of implicit rule suffixes with:
+
+          .SUFFIXES:
+          .SUFFIXES: .o .r .f .l ...
+
+Making Lint Libraries from C, Yacc, or Lex programs
+     `N.ln' is made from `N.c' by running `lint'.  The precise command
+     is `$(LINT) $(LINTFLAGS) $(CPPFLAGS) -i'.  The same command is
+     used on the C code produced from `N.y' or `N.l'.
+
+TeX and Web
+     `N.dvi' is made from `N.tex' with the command `$(TEX)'.  `N.tex'
+     is made from `N.web' with `$(WEAVE)', or from `N.w' (and from
+     `N.ch' if it exists or can be made) with `$(CWEAVE)'.  `N.p' is
+     made from `N.web' with `$(TANGLE)' and `N.c' is made from `N.w'
+     (and from `N.ch' if it exists or can be made) with `$(CTANGLE)'.
+
+Texinfo and Info
+     `N.dvi' is made from `N.texinfo', `N.texi', or `N.txinfo', with
+     the command `$(TEXI2DVI) $(TEXI2DVI_FLAGS)'.  `N.info' is made from
+     `N.texinfo', `N.texi', or `N.txinfo', with the command
+     `$(MAKEINFO) $(MAKEINFO_FLAGS)'.
+
+RCS
+     Any file `N' is extracted if necessary from an RCS file named
+     either `N,v' or `RCS/N,v'.  The precise command used is
+     `$(CO) $(COFLAGS)'.  `N' will not be extracted from RCS if it
+     already exists, even if the RCS file is newer.  The rules for RCS
+     are terminal (*note Match-Anything Pattern Rules: Match-Anything
+     Rules.), so RCS files cannot be generated from another source;
+     they must actually exist.
+
+SCCS
+     Any file `N' is extracted if necessary from an SCCS file named
+     either `s.N' or `SCCS/s.N'.  The precise command used is
+     `$(GET) $(GFLAGS)'.  The rules for SCCS are terminal (*note
+     Match-Anything Pattern Rules: Match-Anything Rules.), so SCCS
+     files cannot be generated from another source; they must actually
+     exist.
+
+     For the benefit of SCCS, a file `N' is copied from `N.sh' and made
+     executable (by everyone).  This is for shell scripts that are
+     checked into SCCS.  Since RCS preserves the execution permission
+     of a file, you do not need to use this feature with RCS.
+
+     We recommend that you avoid using of SCCS.  RCS is widely held to
+     be superior, and is also free.  By choosing free software in place
+     of comparable (or inferior) proprietary software, you support the
+     free software movement.
+
+   Usually, you want to change only the variables listed in the table
+above, which are documented in the following section.
+
+   However, the commands in built-in implicit rules actually use
+variables such as `COMPILE.c', `LINK.p', and `PREPROCESS.S', whose
+values contain the commands listed above.
+
+   `make' follows the convention that the rule to compile a `.X' source
+file uses the variable `COMPILE.X'.  Similarly, the rule to produce an
+executable from a `.X' file uses `LINK.X'; and the rule to preprocess a
+`.X' file uses `PREPROCESS.X'.
+
+   Every rule that produces an object file uses the variable
+`OUTPUT_OPTION'.  `make' defines this variable either to contain `-o
+$@', or to be empty, depending on a compile-time option.  You need the
+`-o' option to ensure that the output goes into the right file when the
+source file is in a different directory, as when using `VPATH' (*note
+Directory Search::).  However, compilers on some systems do not accept
+a `-o' switch for object files.  If you use such a system, and use
+`VPATH', some compilations will put their output in the wrong place.  A
+possible workaround for this problem is to give `OUTPUT_OPTION' the
+value `; mv $*.o $@'.
+
+
+File: make.info,  Node: Implicit Variables,  Next: Chained Rules,  Prev: Catalogue of Rules,  Up: Implicit Rules
+
+10.3 Variables Used by Implicit Rules
+=====================================
+
+The commands in built-in implicit rules make liberal use of certain
+predefined variables.  You can alter these variables in the makefile,
+with arguments to `make', or in the environment to alter how the
+implicit rules work without redefining the rules themselves.  You can
+cancel all variables used by implicit rules with the `-R' or
+`--no-builtin-variables' option.
+
+   For example, the command used to compile a C source file actually
+says `$(CC) -c $(CFLAGS) $(CPPFLAGS)'.  The default values of the
+variables used are `cc' and nothing, resulting in the command `cc -c'.
+By redefining `CC' to `ncc', you could cause `ncc' to be used for all C
+compilations performed by the implicit rule.  By redefining `CFLAGS' to
+be `-g', you could pass the `-g' option to each compilation.  _All_
+implicit rules that do C compilation use `$(CC)' to get the program
+name for the compiler and _all_ include `$(CFLAGS)' among the arguments
+given to the compiler.
+
+   The variables used in implicit rules fall into two classes: those
+that are names of programs (like `CC') and those that contain arguments
+for the programs (like `CFLAGS').  (The "name of a program" may also
+contain some command arguments, but it must start with an actual
+executable program name.)  If a variable value contains more than one
+argument, separate them with spaces.
+
+   Here is a table of variables used as names of programs in built-in
+rules:
+
+`AR'
+     Archive-maintaining program; default `ar'.  
+
+`AS'
+     Program for doing assembly; default `as'.  
+
+`CC'
+     Program for compiling C programs; default `cc'.  
+
+`CXX'
+     Program for compiling C++ programs; default `g++'.  
+
+`CO'
+     Program for extracting a file from RCS; default `co'.  
+
+`CPP'
+     Program for running the C preprocessor, with results to standard
+     output; default `$(CC) -E'.
+
+`FC'
+     Program for compiling or preprocessing Fortran and Ratfor programs;
+     default `f77'.  
+
+`GET'
+     Program for extracting a file from SCCS; default `get'.  
+
+`LEX'
+     Program to use to turn Lex grammars into C programs or Ratfor
+     programs; default `lex'.  
+
+`PC'
+     Program for compiling Pascal programs; default `pc'.  
+
+`YACC'
+     Program to use to turn Yacc grammars into C programs; default
+     `yacc'.  
+
+`YACCR'
+     Program to use to turn Yacc grammars into Ratfor programs; default
+     `yacc -r'.
+
+`MAKEINFO'
+     Program to convert a Texinfo source file into an Info file; default
+     `makeinfo'.  
+
+`TEX'
+     Program to make TeX DVI files from TeX source; default `tex'.  
+
+`TEXI2DVI'
+     Program to make TeX DVI files from Texinfo source; default
+     `texi2dvi'.  
+
+`WEAVE'
+     Program to translate Web into TeX; default `weave'.  
+
+`CWEAVE'
+     Program to translate C Web into TeX; default `cweave'.  
+
+`TANGLE'
+     Program to translate Web into Pascal; default `tangle'.  
+
+`CTANGLE'
+     Program to translate C Web into C; default `ctangle'.  
+
+`RM'
+     Command to remove a file; default `rm -f'.  
+
+   Here is a table of variables whose values are additional arguments
+for the programs above.  The default values for all of these is the
+empty string, unless otherwise noted.
+
+`ARFLAGS'
+     Flags to give the archive-maintaining program; default `rv'.
+
+`ASFLAGS'
+     Extra flags to give to the assembler (when explicitly invoked on a
+     `.s' or `.S' file).
+
+`CFLAGS'
+     Extra flags to give to the C compiler.
+
+`CXXFLAGS'
+     Extra flags to give to the C++ compiler.
+
+`COFLAGS'
+     Extra flags to give to the RCS `co' program.
+
+`CPPFLAGS'
+     Extra flags to give to the C preprocessor and programs that use it
+     (the C and Fortran compilers).
+
+`FFLAGS'
+     Extra flags to give to the Fortran compiler.
+
+`GFLAGS'
+     Extra flags to give to the SCCS `get' program.
+
+`LDFLAGS'
+     Extra flags to give to compilers when they are supposed to invoke
+     the linker, `ld'.
+
+`LFLAGS'
+     Extra flags to give to Lex.
+
+`PFLAGS'
+     Extra flags to give to the Pascal compiler.
+
+`RFLAGS'
+     Extra flags to give to the Fortran compiler for Ratfor programs.
+
+`YFLAGS'
+     Extra flags to give to Yacc.
+
+
+File: make.info,  Node: Chained Rules,  Next: Pattern Rules,  Prev: Implicit Variables,  Up: Implicit Rules
+
+10.4 Chains of Implicit Rules
+=============================
+
+Sometimes a file can be made by a sequence of implicit rules.  For
+example, a file `N.o' could be made from `N.y' by running first Yacc
+and then `cc'.  Such a sequence is called a "chain".
+
+   If the file `N.c' exists, or is mentioned in the makefile, no
+special searching is required: `make' finds that the object file can be
+made by C compilation from `N.c'; later on, when considering how to
+make `N.c', the rule for running Yacc is used.  Ultimately both `N.c'
+and `N.o' are updated.
+
+   However, even if `N.c' does not exist and is not mentioned, `make'
+knows how to envision it as the missing link between `N.o' and `N.y'!
+In this case, `N.c' is called an "intermediate file".  Once `make' has
+decided to use the intermediate file, it is entered in the data base as
+if it had been mentioned in the makefile, along with the implicit rule
+that says how to create it.
+
+   Intermediate files are remade using their rules just like all other
+files.  But intermediate files are treated differently in two ways.
+
+   The first difference is what happens if the intermediate file does
+not exist.  If an ordinary file B does not exist, and `make' considers
+a target that depends on B, it invariably creates B and then updates
+the target from B.  But if B is an intermediate file, then `make' can
+leave well enough alone.  It won't bother updating B, or the ultimate
+target, unless some prerequisite of B is newer than that target or
+there is some other reason to update that target.
+
+   The second difference is that if `make' _does_ create B in order to
+update something else, it deletes B later on after it is no longer
+needed.  Therefore, an intermediate file which did not exist before
+`make' also does not exist after `make'.  `make' reports the deletion
+to you by printing a `rm -f' command showing which file it is deleting.
+
+   Ordinarily, a file cannot be intermediate if it is mentioned in the
+makefile as a target or prerequisite.  However, you can explicitly mark
+a file as intermediate by listing it as a prerequisite of the special
+target `.INTERMEDIATE'.  This takes effect even if the file is mentioned
+explicitly in some other way.
+
+   You can prevent automatic deletion of an intermediate file by
+marking it as a "secondary" file.  To do this, list it as a
+prerequisite of the special target `.SECONDARY'.  When a file is
+secondary, `make' will not create the file merely because it does not
+already exist, but `make' does not automatically delete the file.
+Marking a file as secondary also marks it as intermediate.
+
+   You can list the target pattern of an implicit rule (such as `%.o')
+as a prerequisite of the special target `.PRECIOUS' to preserve
+intermediate files made by implicit rules whose target patterns match
+that file's name; see *Note Interrupts::.  
+
+   A chain can involve more than two implicit rules.  For example, it is
+possible to make a file `foo' from `RCS/foo.y,v' by running RCS, Yacc
+and `cc'.  Then both `foo.y' and `foo.c' are intermediate files that
+are deleted at the end.
+
+   No single implicit rule can appear more than once in a chain.  This
+means that `make' will not even consider such a ridiculous thing as
+making `foo' from `foo.o.o' by running the linker twice.  This
+constraint has the added benefit of preventing any infinite loop in the
+search for an implicit rule chain.
+
+   There are some special implicit rules to optimize certain cases that
+would otherwise be handled by rule chains.  For example, making `foo'
+from `foo.c' could be handled by compiling and linking with separate
+chained rules, using `foo.o' as an intermediate file.  But what
+actually happens is that a special rule for this case does the
+compilation and linking with a single `cc' command.  The optimized rule
+is used in preference to the step-by-step chain because it comes
+earlier in the ordering of rules.
+
+
+File: make.info,  Node: Pattern Rules,  Next: Last Resort,  Prev: Chained Rules,  Up: Implicit Rules
+
+10.5 Defining and Redefining Pattern Rules
+==========================================
+
+You define an implicit rule by writing a "pattern rule".  A pattern
+rule looks like an ordinary rule, except that its target contains the
+character `%' (exactly one of them).  The target is considered a
+pattern for matching file names; the `%' can match any nonempty
+substring, while other characters match only themselves.  The
+prerequisites likewise use `%' to show how their names relate to the
+target name.
+
+   Thus, a pattern rule `%.o : %.c' says how to make any file `STEM.o'
+from another file `STEM.c'.
+
+   Note that expansion using `%' in pattern rules occurs *after* any
+variable or function expansions, which take place when the makefile is
+read.  *Note How to Use Variables: Using Variables, and *Note Functions
+for Transforming Text: Functions.
+
+* Menu:
+
+* Pattern Intro::               An introduction to pattern rules.
+* Pattern Examples::            Examples of pattern rules.
+* Automatic::                   How to use automatic variables in the
+                                  commands of implicit rules.
+* Pattern Match::               How patterns match.
+* Match-Anything Rules::        Precautions you should take prior to
+                                  defining rules that can match any
+                                  target file whatever.
+* Canceling Rules::             How to override or cancel built-in rules.
+
+
+File: make.info,  Node: Pattern Intro,  Next: Pattern Examples,  Prev: Pattern Rules,  Up: Pattern Rules
+
+10.5.1 Introduction to Pattern Rules
+------------------------------------
+
+A pattern rule contains the character `%' (exactly one of them) in the
+target; otherwise, it looks exactly like an ordinary rule.  The target
+is a pattern for matching file names; the `%' matches any nonempty
+substring, while other characters match only themselves.  
+
+   For example, `%.c' as a pattern matches any file name that ends in
+`.c'.  `s.%.c' as a pattern matches any file name that starts with
+`s.', ends in `.c' and is at least five characters long.  (There must
+be at least one character to match the `%'.)  The substring that the
+`%' matches is called the "stem".
+
+   `%' in a prerequisite of a pattern rule stands for the same stem
+that was matched by the `%' in the target.  In order for the pattern
+rule to apply, its target pattern must match the file name under
+consideration, and its prerequisite patterns must name files that exist
+or can be made.  These files become prerequisites of the target.  
+
+   Thus, a rule of the form
+
+     %.o : %.c ; COMMAND...
+
+specifies how to make a file `N.o', with another file `N.c' as its
+prerequisite, provided that `N.c' exists or can be made.
+
+   There may also be prerequisites that do not use `%'; such a
+prerequisite attaches to every file made by this pattern rule.  These
+unvarying prerequisites are useful occasionally.
+
+   A pattern rule need not have any prerequisites that contain `%', or
+in fact any prerequisites at all.  Such a rule is effectively a general
+wildcard.  It provides a way to make any file that matches the target
+pattern.  *Note Last Resort::.
+
+   Pattern rules may have more than one target.  Unlike normal rules,
+this does not act as many different rules with the same prerequisites
+and commands.  If a pattern rule has multiple targets, `make' knows that
+the rule's commands are responsible for making all of the targets.  The
+commands are executed only once to make all the targets.  When searching
+for a pattern rule to match a target, the target patterns of a rule
+other than the one that matches the target in need of a rule are
+incidental: `make' worries only about giving commands and prerequisites
+to the file presently in question.  However, when this file's commands
+are run, the other targets are marked as having been updated themselves.  
+
+   The order in which pattern rules appear in the makefile is important
+since this is the order in which they are considered.  Of equally
+applicable rules, only the first one found is used.  The rules you
+write take precedence over those that are built in.  Note however, that
+a rule whose prerequisites actually exist or are mentioned always takes
+priority over a rule with prerequisites that must be made by chaining
+other implicit rules.  
+
+
+File: make.info,  Node: Pattern Examples,  Next: Automatic,  Prev: Pattern Intro,  Up: Pattern Rules
+
+10.5.2 Pattern Rule Examples
+----------------------------
+
+Here are some examples of pattern rules actually predefined in `make'.
+First, the rule that compiles `.c' files into `.o' files:
+
+     %.o : %.c
+             $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
+
+defines a rule that can make any file `X.o' from `X.c'.  The command
+uses the automatic variables `$@' and `$<' to substitute the names of
+the target file and the source file in each case where the rule applies
+(*note Automatic Variables: Automatic.).
+
+   Here is a second built-in rule:
+
+     % :: RCS/%,v
+             $(CO) $(COFLAGS) $<
+
+defines a rule that can make any file `X' whatsoever from a
+corresponding file `X,v' in the subdirectory `RCS'.  Since the target
+is `%', this rule will apply to any file whatever, provided the
+appropriate prerequisite file exists.  The double colon makes the rule
+"terminal", which means that its prerequisite may not be an intermediate
+file (*note Match-Anything Pattern Rules: Match-Anything Rules.).
+
+   This pattern rule has two targets:
+
+     %.tab.c %.tab.h: %.y
+             bison -d $<
+
+This tells `make' that the command `bison -d X.y' will make both
+`X.tab.c' and `X.tab.h'.  If the file `foo' depends on the files
+`parse.tab.o' and `scan.o' and the file `scan.o' depends on the file
+`parse.tab.h', when `parse.y' is changed, the command `bison -d parse.y'
+will be executed only once, and the prerequisites of both `parse.tab.o'
+and `scan.o' will be satisfied.  (Presumably the file `parse.tab.o'
+will be recompiled from `parse.tab.c' and the file `scan.o' from
+`scan.c', while `foo' is linked from `parse.tab.o', `scan.o', and its
+other prerequisites, and it will execute happily ever after.)
+
+
+File: make.info,  Node: Automatic,  Next: Pattern Match,  Prev: Pattern Examples,  Up: Pattern Rules
+
+10.5.3 Automatic Variables
+--------------------------
+
+Suppose you are writing a pattern rule to compile a `.c' file into a
+`.o' file: how do you write the `cc' command so that it operates on the
+right source file name?  You cannot write the name in the command,
+because the name is different each time the implicit rule is applied.
+
+   What you do is use a special feature of `make', the "automatic
+variables".  These variables have values computed afresh for each rule
+that is executed, based on the target and prerequisites of the rule.
+In this example, you would use `$@' for the object file name and `$<'
+for the source file name.
+
+   Here is a table of automatic variables:
+
+`$@'
+     The file name of the target of the rule.  If the target is an
+     archive member, then `$@' is the name of the archive file.  In a
+     pattern rule that has multiple targets (*note Introduction to
+     Pattern Rules: Pattern Intro.), `$@' is the name of whichever
+     target caused the rule's commands to be run.
+
+`$%'
+     The target member name, when the target is an archive member.
+     *Note Archives::.  For example, if the target is `foo.a(bar.o)'
+     then `$%' is `bar.o' and `$@' is `foo.a'.  `$%' is empty when the
+     target is not an archive member.
+
+`$<'
+     The name of the first prerequisite.  If the target got its
+     commands from an implicit rule, this will be the first
+     prerequisite added by the implicit rule (*note Implicit Rules::).
+
+`$?'
+     The names of all the prerequisites that are newer than the target,
+     with spaces between them.  For prerequisites which are archive
+     members, only the member named is used (*note Archives::).  
+
+`$^'
+     The names of all the prerequisites, with spaces between them.  For
+     prerequisites which are archive members, only the member named is
+     used (*note Archives::).  A target has only one prerequisite on
+     each other file it depends on, no matter how many times each file
+     is listed as a prerequisite.  So if you list a prerequisite more
+     than once for a target, the value of `$^' contains just one copy
+     of the name.  
+
+`$+'
+     This is like `$^', but prerequisites listed more than once are
+     duplicated in the order they were listed in the makefile.  This is
+     primarily useful for use in linking commands where it is
+     meaningful to repeat library file names in a particular order.
+
+`$*'
+     The stem with which an implicit rule matches (*note How Patterns
+     Match: Pattern Match.).  If the target is `dir/a.foo.b' and the
+     target pattern is `a.%.b' then the stem is `dir/foo'.  The stem is
+     useful for constructing names of related files.  
+
+     In a static pattern rule, the stem is part of the file name that
+     matched the `%' in the target pattern.
+
+     In an explicit rule, there is no stem; so `$*' cannot be determined
+     in that way.  Instead, if the target name ends with a recognized
+     suffix (*note Old-Fashioned Suffix Rules: Suffix Rules.), `$*' is
+     set to the target name minus the suffix.  For example, if the
+     target name is `foo.c', then `$*' is set to `foo', since `.c' is a
+     suffix.  GNU `make' does this bizarre thing only for compatibility
+     with other implementations of `make'.  You should generally avoid
+     using `$*' except in implicit rules or static pattern rules.
+
+     If the target name in an explicit rule does not end with a
+     recognized suffix, `$*' is set to the empty string for that rule.
+
+   `$?' is useful even in explicit rules when you wish to operate on
+only the prerequisites that have changed.  For example, suppose that an
+archive named `lib' is supposed to contain copies of several object
+files.  This rule copies just the changed object files into the archive:
+
+     lib: foo.o bar.o lose.o win.o
+             ar r lib $?
+
+   Of the variables listed above, four have values that are single file
+names, and three have values that are lists of file names.  These seven
+have variants that get just the file's directory name or just the file
+name within the directory.  The variant variables' names are formed by
+appending `D' or `F', respectively.  These variants are semi-obsolete
+in GNU `make' since the functions `dir' and `notdir' can be used to get
+a similar effect (*note Functions for File Names: File Name
+Functions.).  Note, however, that the `D' variants all omit the
+trailing slash which always appears in the output of the `dir'
+function.  Here is a table of the variants:
+
+`$(@D)'
+     The directory part of the file name of the target, with the
+     trailing slash removed.  If the value of `$@' is `dir/foo.o' then
+     `$(@D)' is `dir'.  This value is `.' if `$@' does not contain a
+     slash.
+
+`$(@F)'
+     The file-within-directory part of the file name of the target.  If
+     the value of `$@' is `dir/foo.o' then `$(@F)' is `foo.o'.  `$(@F)'
+     is equivalent to `$(notdir $@)'.
+
+`$(*D)'
+`$(*F)'
+     The directory part and the file-within-directory part of the stem;
+     `dir' and `foo' in this example.
+
+`$(%D)'
+`$(%F)'
+     The directory part and the file-within-directory part of the target
+     archive member name.  This makes sense only for archive member
+     targets of the form `ARCHIVE(MEMBER)' and is useful only when
+     MEMBER may contain a directory name.  (*Note Archive Members as
+     Targets: Archive Members.)
+
+`$(<D)'
+`$(<F)'
+     The directory part and the file-within-directory part of the first
+     prerequisite.
+
+`$(^D)'
+`$(^F)'
+     Lists of the directory parts and the file-within-directory parts
+     of all prerequisites.
+
+`$(+D)'
+`$(+F)'
+     Lists of the directory parts and the file-within-directory parts
+     of all prerequisites, including multiple instances of duplicated
+     prerequisites.
+
+`$(?D)'
+`$(?F)'
+     Lists of the directory parts and the file-within-directory parts of
+     all prerequisites that are newer than the target.
+
+   Note that we use a special stylistic convention when we talk about
+these automatic variables; we write "the value of `$<'", rather than
+"the variable `<'" as we would write for ordinary variables such as
+`objects' and `CFLAGS'.  We think this convention looks more natural in
+this special case.  Please do not assume it has a deep significance;
+`$<' refers to the variable named `<' just as `$(CFLAGS)' refers to the
+variable named `CFLAGS'.  You could just as well use `$(<)' in place of
+`$<'.
+
+   GNU `make' provides support for the SysV `make' feature that allows
+special variable references `$$@', `$$(@D)', and `$$(@F)' (note the
+required double-"$"!) to appear with the _prerequisites list_ (normal
+automatic variables are available only within a command script).  When
+appearing in a prerequisites list, these variables are expanded to the
+name of the target, the directory component of the target, and the file
+component of the target, respectively.
+
+   Note that these variables are available only within explicit and
+static pattern (*note Static Pattern Rules: Static Pattern.) rules;
+they have no special significance within implicit (suffix or pattern)
+rules.  Also note that while SysV `make' actually expands its entire
+prerequisite list _twice_, GNU `make' does not behave this way: instead
+it simply expands these special variables without re-expanding any
+other part of the prerequisites list.
+
+   This somewhat bizarre feature is included only to provide some
+compatibility with SysV makefiles.  In a native GNU `make' file there
+are other ways to accomplish the same results.  This feature is
+disabled if the special pseudo target `.POSIX' is defined.
+
+
+File: make.info,  Node: Pattern Match,  Next: Match-Anything Rules,  Prev: Automatic,  Up: Pattern Rules
+
+10.5.4 How Patterns Match
+-------------------------
+
+A target pattern is composed of a `%' between a prefix and a suffix,
+either or both of which may be empty.  The pattern matches a file name
+only if the file name starts with the prefix and ends with the suffix,
+without overlap.  The text between the prefix and the suffix is called
+the "stem".  Thus, when the pattern `%.o' matches the file name
+`test.o', the stem is `test'.  The pattern rule prerequisites are
+turned into actual file names by substituting the stem for the character
+`%'.  Thus, if in the same example one of the prerequisites is written
+as `%.c', it expands to `test.c'.
+
+   When the target pattern does not contain a slash (and it usually does
+not), directory names in the file names are removed from the file name
+before it is compared with the target prefix and suffix.  After the
+comparison of the file name to the target pattern, the directory names,
+along with the slash that ends them, are added on to the prerequisite
+file names generated from the pattern rule's prerequisite patterns and
+the file name. The directories are ignored only for the purpose of
+finding an implicit rule to use, not in the application of that rule.
+Thus, `e%t' matches the file name `src/eat', with `src/a' as the stem.
+When prerequisites are turned into file names, the directories from the
+stem are added at the front, while the rest of the stem is substituted
+for the `%'.  The stem `src/a' with a prerequisite pattern `c%r' gives
+the file name `src/car'.
+
+
+File: make.info,  Node: Match-Anything Rules,  Next: Canceling Rules,  Prev: Pattern Match,  Up: Pattern Rules
+
+10.5.5 Match-Anything Pattern Rules
+-----------------------------------
+
+When a pattern rule's target is just `%', it matches any file name
+whatever.  We call these rules "match-anything" rules.  They are very
+useful, but it can take a lot of time for `make' to think about them,
+because it must consider every such rule for each file name listed
+either as a target or as a prerequisite.
+
+   Suppose the makefile mentions `foo.c'.  For this target, `make'
+would have to consider making it by linking an object file `foo.c.o',
+or by C compilation-and-linking in one step from `foo.c.c', or by
+Pascal compilation-and-linking from `foo.c.p', and many other
+possibilities.
+
+   We know these possibilities are ridiculous since `foo.c' is a C
+source file, not an executable.  If `make' did consider these
+possibilities, it would ultimately reject them, because files such as
+`foo.c.o' and `foo.c.p' would not exist.  But these possibilities are so
+numerous that `make' would run very slowly if it had to consider them.
+
+   To gain speed, we have put various constraints on the way `make'
+considers match-anything rules.  There are two different constraints
+that can be applied, and each time you define a match-anything rule you
+must choose one or the other for that rule.
+
+   One choice is to mark the match-anything rule as "terminal" by
+defining it with a double colon.  When a rule is terminal, it does not
+apply unless its prerequisites actually exist.  Prerequisites that
+could be made with other implicit rules are not good enough.  In other
+words, no further chaining is allowed beyond a terminal rule.
+
+   For example, the built-in implicit rules for extracting sources from
+RCS and SCCS files are terminal; as a result, if the file `foo.c,v' does
+not exist, `make' will not even consider trying to make it as an
+intermediate file from `foo.c,v.o' or from `RCS/SCCS/s.foo.c,v'.  RCS
+and SCCS files are generally ultimate source files, which should not be
+remade from any other files; therefore, `make' can save time by not
+looking for ways to remake them.
+
+   If you do not mark the match-anything rule as terminal, then it is
+nonterminal.  A nonterminal match-anything rule cannot apply to a file
+name that indicates a specific type of data.  A file name indicates a
+specific type of data if some non-match-anything implicit rule target
+matches it.
+
+   For example, the file name `foo.c' matches the target for the pattern
+rule `%.c : %.y' (the rule to run Yacc).  Regardless of whether this
+rule is actually applicable (which happens only if there is a file
+`foo.y'), the fact that its target matches is enough to prevent
+consideration of any nonterminal match-anything rules for the file
+`foo.c'.  Thus, `make' will not even consider trying to make `foo.c' as
+an executable file from `foo.c.o', `foo.c.c', `foo.c.p', etc.
+
+   The motivation for this constraint is that nonterminal match-anything
+rules are used for making files containing specific types of data (such
+as executable files) and a file name with a recognized suffix indicates
+some other specific type of data (such as a C source file).
+
+   Special built-in dummy pattern rules are provided solely to recognize
+certain file names so that nonterminal match-anything rules will not be
+considered.  These dummy rules have no prerequisites and no commands,
+and they are ignored for all other purposes.  For example, the built-in
+implicit rule
+
+     %.p :
+
+exists to make sure that Pascal source files such as `foo.p' match a
+specific target pattern and thereby prevent time from being wasted
+looking for `foo.p.o' or `foo.p.c'.
+
+   Dummy pattern rules such as the one for `%.p' are made for every
+suffix listed as valid for use in suffix rules (*note Old-Fashioned
+Suffix Rules: Suffix Rules.).
+
+
+File: make.info,  Node: Canceling Rules,  Prev: Match-Anything Rules,  Up: Pattern Rules
+
+10.5.6 Canceling Implicit Rules
+-------------------------------
+
+You can override a built-in implicit rule (or one you have defined
+yourself) by defining a new pattern rule with the same target and
+prerequisites, but different commands.  When the new rule is defined,
+the built-in one is replaced.  The new rule's position in the sequence
+of implicit rules is determined by where you write the new rule.
+
+   You can cancel a built-in implicit rule by defining a pattern rule
+with the same target and prerequisites, but no commands.  For example,
+the following would cancel the rule that runs the assembler:
+
+     %.o : %.s
+
+
+File: make.info,  Node: Last Resort,  Next: Suffix Rules,  Prev: Pattern Rules,  Up: Implicit Rules
+
+10.6 Defining Last-Resort Default Rules
+=======================================
+
+You can define a last-resort implicit rule by writing a terminal
+match-anything pattern rule with no prerequisites (*note Match-Anything
+Rules::).  This is just like any other pattern rule; the only thing
+special about it is that it will match any target.  So such a rule's
+commands are used for all targets and prerequisites that have no
+commands of their own and for which no other implicit rule applies.
+
+   For example, when testing a makefile, you might not care if the
+source files contain real data, only that they exist.  Then you might
+do this:
+
+     %::
+             touch $@
+
+to cause all the source files needed (as prerequisites) to be created
+automatically.
+
+   You can instead define commands to be used for targets for which
+there are no rules at all, even ones which don't specify commands.  You
+do this by writing a rule for the target `.DEFAULT'.  Such a rule's
+commands are used for all prerequisites which do not appear as targets
+in any explicit rule, and for which no implicit rule applies.
+Naturally, there is no `.DEFAULT' rule unless you write one.
+
+   If you use `.DEFAULT' with no commands or prerequisites:
+
+     .DEFAULT:
+
+the commands previously stored for `.DEFAULT' are cleared.  Then `make'
+acts as if you had never defined `.DEFAULT' at all.
+
+   If you do not want a target to get the commands from a match-anything
+pattern rule or `.DEFAULT', but you also do not want any commands to be
+run for the target, you can give it empty commands (*note Defining
+Empty Commands: Empty Commands.).
+
+   You can use a last-resort rule to override part of another makefile.
+*Note Overriding Part of Another Makefile: Overriding Makefiles.
+
+
+File: make.info,  Node: Suffix Rules,  Next: Implicit Rule Search,  Prev: Last Resort,  Up: Implicit Rules
+
+10.7 Old-Fashioned Suffix Rules
+===============================
+
+"Suffix rules" are the old-fashioned way of defining implicit rules for
+`make'.  Suffix rules are obsolete because pattern rules are more
+general and clearer.  They are supported in GNU `make' for
+compatibility with old makefiles.  They come in two kinds:
+"double-suffix" and "single-suffix".
+
+   A double-suffix rule is defined by a pair of suffixes: the target
+suffix and the source suffix.  It matches any file whose name ends with
+the target suffix.  The corresponding implicit prerequisite is made by
+replacing the target suffix with the source suffix in the file name.  A
+two-suffix rule whose target and source suffixes are `.o' and `.c' is
+equivalent to the pattern rule `%.o : %.c'.
+
+   A single-suffix rule is defined by a single suffix, which is the
+source suffix.  It matches any file name, and the corresponding implicit
+prerequisite name is made by appending the source suffix.  A
+single-suffix rule whose source suffix is `.c' is equivalent to the
+pattern rule `% : %.c'.
+
+   Suffix rule definitions are recognized by comparing each rule's
+target against a defined list of known suffixes.  When `make' sees a
+rule whose target is a known suffix, this rule is considered a
+single-suffix rule.  When `make' sees a rule whose target is two known
+suffixes concatenated, this rule is taken as a double-suffix rule.
+
+   For example, `.c' and `.o' are both on the default list of known
+suffixes.  Therefore, if you define a rule whose target is `.c.o',
+`make' takes it to be a double-suffix rule with source suffix `.c' and
+target suffix `.o'.  Here is the old-fashioned way to define the rule
+for compiling a C source file:
+
+     .c.o:
+             $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+
+   Suffix rules cannot have any prerequisites of their own.  If they
+have any, they are treated as normal files with funny names, not as
+suffix rules.  Thus, the rule:
+
+     .c.o: foo.h
+             $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+
+tells how to make the file `.c.o' from the prerequisite file `foo.h',
+and is not at all like the pattern rule:
+
+     %.o: %.c foo.h
+             $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<
+
+which tells how to make `.o' files from `.c' files, and makes all `.o'
+files using this pattern rule also depend on `foo.h'.
+
+   Suffix rules with no commands are also meaningless.  They do not
+remove previous rules as do pattern rules with no commands (*note
+Canceling Implicit Rules: Canceling Rules.).  They simply enter the
+suffix or pair of suffixes concatenated as a target in the data base.
+
+   The known suffixes are simply the names of the prerequisites of the
+special target `.SUFFIXES'.  You can add your own suffixes by writing a
+rule for `.SUFFIXES' that adds more prerequisites, as in:
+
+     .SUFFIXES: .hack .win
+
+which adds `.hack' and `.win' to the end of the list of suffixes.
+
+   If you wish to eliminate the default known suffixes instead of just
+adding to them, write a rule for `.SUFFIXES' with no prerequisites.  By
+special dispensation, this eliminates all existing prerequisites of
+`.SUFFIXES'.  You can then write another rule to add the suffixes you
+want.  For example,
+
+     .SUFFIXES:            # Delete the default suffixes
+     .SUFFIXES: .c .o .h   # Define our suffix list
+
+   The `-r' or `--no-builtin-rules' flag causes the default list of
+suffixes to be empty.
+
+   The variable `SUFFIXES' is defined to the default list of suffixes
+before `make' reads any makefiles.  You can change the list of suffixes
+with a rule for the special target `.SUFFIXES', but that does not alter
+this variable.
+
Index: /trunk/src/gnu/dist/gmake/doc/make.info-2
===================================================================
--- /trunk/src/gnu/dist/gmake/doc/make.info-2	(revision 151)
+++ /trunk/src/gnu/dist/gmake/doc/make.info-2	(revision 152)
@@ -1,3 +1,6 @@
-This is make.info, produced by makeinfo version 4.2 from make.texi.
+This is
+/u1/netbsd-nb5-cradlepoint/src/tools/gmake/../../gnu/dist/gmake/doc/make.info,
+produced by makeinfo version 4.8 from
+/u1/netbsd-nb5-cradlepoint/src/tools/gmake/../../gnu/dist/gmake/doc/make.texi.
 
 INFO-DIR-SECTION GNU Packages
@@ -24,1170 +27,3536 @@
 
 
-File: make.info,  Node: Remaking Makefiles,  Next: Overriding Makefiles,  Prev: Special Variables,  Up: Makefiles
-
-How Makefiles Are Remade
-========================
-
-   Sometimes makefiles can be remade from other files, such as RCS or
-SCCS files.  If a makefile can be remade from other files, you probably
-want `make' to get an up-to-date version of the makefile to read in.
-
-   To this end, after reading in all makefiles, `make' will consider
-each as a goal target and attempt to update it.  If a makefile has a
-rule which says how to update it (found either in that very makefile or
-in another one) or if an implicit rule applies to it (*note Using
-Implicit Rules: Implicit Rules.), it will be updated if necessary.
-After all makefiles have been checked, if any have actually been
-changed, `make' starts with a clean slate and reads all the makefiles
-over again.  (It will also attempt to update each of them over again,
-but normally this will not change them again, since they are already up
-to date.)
-
-   If you know that one or more of your makefiles cannot be remade and
-you want to keep `make' from performing an implicit rule search on
-them, perhaps for efficiency reasons, you can use any normal method of
-preventing implicit rule lookup to do so.  For example, you can write an
-explicit rule with the makefile as the target, and an empty command
-string (*note Using Empty Commands: Empty Commands.).
-
-   If the makefiles specify a double-colon rule to remake a file with
-commands but no prerequisites, that file will always be remade (*note
-Double-Colon::).  In the case of makefiles, a makefile that has a
-double-colon rule with commands but no prerequisites will be remade
-every time `make' is run, and then again after `make' starts over and
-reads the makefiles in again.  This would cause an infinite loop:
-`make' would constantly remake the makefile, and never do anything
-else.  So, to avoid this, `make' will *not* attempt to remake makefiles
-which are specified as targets of a double-colon rule with commands but
-no prerequisites.
-
-   If you do not specify any makefiles to be read with `-f' or `--file'
-options, `make' will try the default makefile names; *note What Name to
-Give Your Makefile: Makefile Names..  Unlike makefiles explicitly
-requested with `-f' or `--file' options, `make' is not certain that
-these makefiles should exist.  However, if a default makefile does not
-exist but can be created by running `make' rules, you probably want the
-rules to be run so that the makefile can be used.
-
-   Therefore, if none of the default makefiles exists, `make' will try
-to make each of them in the same order in which they are searched for
-(*note What Name to Give Your Makefile: Makefile Names.)  until it
-succeeds in making one, or it runs out of names to try.  Note that it
-is not an error if `make' cannot find or make any makefile; a makefile
-is not always necessary.
-
-   When you use the `-t' or `--touch' option (*note Instead of
-Executing the Commands: Instead of Execution.), you would not want to
-use an out-of-date makefile to decide which targets to touch.  So the
-`-t' option has no effect on updating makefiles; they are really
-updated even if `-t' is specified.  Likewise, `-q' (or `--question')
-and `-n' (or `--just-print') do not prevent updating of makefiles,
-because an out-of-date makefile would result in the wrong output for
-other targets.  Thus, `make -f mfile -n foo' will update `mfile', read
-it in, and then print the commands to update `foo' and its prerequisites
-without running them.  The commands printed for `foo' will be those
-specified in the updated contents of `mfile'.
-
-   However, on occasion you might actually wish to prevent updating of
-even the makefiles.  You can do this by specifying the makefiles as
-goals in the command line as well as specifying them as makefiles.
-When the makefile name is specified explicitly as a goal, the options
-`-t' and so on do apply to them.
-
-   Thus, `make -f mfile -n mfile foo' would read the makefile `mfile',
-print the commands needed to update it without actually running them,
-and then print the commands needed to update `foo' without running
-them.  The commands for `foo' will be those specified by the existing
-contents of `mfile'.
+File: make.info,  Node: Implicit Rule Search,  Prev: Suffix Rules,  Up: Implicit Rules
+
+10.8 Implicit Rule Search Algorithm
+===================================
+
+Here is the procedure `make' uses for searching for an implicit rule
+for a target T.  This procedure is followed for each double-colon rule
+with no commands, for each target of ordinary rules none of which have
+commands, and for each prerequisite that is not the target of any rule.
+It is also followed recursively for prerequisites that come from
+implicit rules, in the search for a chain of rules.
+
+   Suffix rules are not mentioned in this algorithm because suffix
+rules are converted to equivalent pattern rules once the makefiles have
+been read in.
+
+   For an archive member target of the form `ARCHIVE(MEMBER)', the
+following algorithm is run twice, first using the entire target name T,
+and second using `(MEMBER)' as the target T if the first run found no
+rule.
+
+  1. Split T into a directory part, called D, and the rest, called N.
+     For example, if T is `src/foo.o', then D is `src/' and N is
+     `foo.o'.
+
+  2. Make a list of all the pattern rules one of whose targets matches
+     T or N.  If the target pattern contains a slash, it is matched
+     against T; otherwise, against N.
+
+  3. If any rule in that list is _not_ a match-anything rule, then
+     remove all nonterminal match-anything rules from the list.
+
+  4. Remove from the list all rules with no commands.
+
+  5. For each pattern rule in the list:
+
+       a. Find the stem S, which is the nonempty part of T or N matched
+          by the `%' in the target pattern.
+
+       b. Compute the prerequisite names by substituting S for `%'; if
+          the target pattern does not contain a slash, append D to the
+          front of each prerequisite name.
+
+       c. Test whether all the prerequisites exist or ought to exist.
+          (If a file name is mentioned in the makefile as a target or
+          as an explicit prerequisite, then we say it ought to exist.)
+
+          If all prerequisites exist or ought to exist, or there are no
+          prerequisites, then this rule applies.
+
+  6. If no pattern rule has been found so far, try harder.  For each
+     pattern rule in the list:
+
+       a. If the rule is terminal, ignore it and go on to the next rule.
+
+       b. Compute the prerequisite names as before.
+
+       c. Test whether all the prerequisites exist or ought to exist.
+
+       d. For each prerequisite that does not exist, follow this
+          algorithm recursively to see if the prerequisite can be made
+          by an implicit rule.
+
+       e. If all prerequisites exist, ought to exist, or can be made by
+          implicit rules, then this rule applies.
+
+  7. If no implicit rule applies, the rule for `.DEFAULT', if any,
+     applies.  In that case, give T the same commands that `.DEFAULT'
+     has.  Otherwise, there are no commands for T.
+
+   Once a rule that applies has been found, for each target pattern of
+the rule other than the one that matched T or N, the `%' in the pattern
+is replaced with S and the resultant file name is stored until the
+commands to remake the target file T are executed.  After these
+commands are executed, each of these stored file names are entered into
+the data base and marked as having been updated and having the same
+update status as the file T.
+
+   When the commands of a pattern rule are executed for T, the automatic
+variables are set corresponding to the target and prerequisites.  *Note
+Automatic Variables: Automatic.
 
 
-File: make.info,  Node: Overriding Makefiles,  Next: Reading Makefiles,  Prev: Remaking Makefiles,  Up: Makefiles
-
-Overriding Part of Another Makefile
+File: make.info,  Node: Archives,  Next: Features,  Prev: Implicit Rules,  Up: Top
+
+11 Using `make' to Update Archive Files
+***************************************
+
+"Archive files" are files containing named subfiles called "members";
+they are maintained with the program `ar' and their main use is as
+subroutine libraries for linking.
+
+* Menu:
+
+* Archive Members::             Archive members as targets.
+* Archive Update::              The implicit rule for archive member targets.
+* Archive Pitfalls::            Dangers to watch out for when using archives.
+* Archive Suffix Rules::        You can write a special kind of suffix rule
+                                  for updating archives.
+
+
+File: make.info,  Node: Archive Members,  Next: Archive Update,  Prev: Archives,  Up: Archives
+
+11.1 Archive Members as Targets
+===============================
+
+An individual member of an archive file can be used as a target or
+prerequisite in `make'.  You specify the member named MEMBER in archive
+file ARCHIVE as follows:
+
+     ARCHIVE(MEMBER)
+
+This construct is available only in targets and prerequisites, not in
+commands!  Most programs that you might use in commands do not support
+this syntax and cannot act directly on archive members.  Only `ar' and
+other programs specifically designed to operate on archives can do so.
+Therefore, valid commands to update an archive member target probably
+must use `ar'.  For example, this rule says to create a member `hack.o'
+in archive `foolib' by copying the file `hack.o':
+
+     foolib(hack.o) : hack.o
+             ar cr foolib hack.o
+
+   In fact, nearly all archive member targets are updated in just this
+way and there is an implicit rule to do it for you.  *Note_* The `c'
+flag to `ar' is required if the archive file does not already exist.
+
+   To specify several members in the same archive, you can write all the
+member names together between the parentheses.  For example:
+
+     foolib(hack.o kludge.o)
+
+is equivalent to:
+
+     foolib(hack.o) foolib(kludge.o)
+
+   You can also use shell-style wildcards in an archive member
+reference.  *Note Using Wildcard Characters in File Names: Wildcards.
+For example, `foolib(*.o)' expands to all existing members of the
+`foolib' archive whose names end in `.o'; perhaps `foolib(hack.o)
+foolib(kludge.o)'.
+
+
+File: make.info,  Node: Archive Update,  Next: Archive Pitfalls,  Prev: Archive Members,  Up: Archives
+
+11.2 Implicit Rule for Archive Member Targets
+=============================================
+
+Recall that a target that looks like `A(M)' stands for the member named
+M in the archive file A.
+
+   When `make' looks for an implicit rule for such a target, as a
+special feature it considers implicit rules that match `(M)', as well as
+those that match the actual target `A(M)'.
+
+   This causes one special rule whose target is `(%)' to match.  This
+rule updates the target `A(M)' by copying the file M into the archive.
+For example, it will update the archive member target `foo.a(bar.o)' by
+copying the _file_ `bar.o' into the archive `foo.a' as a _member_ named
+`bar.o'.
+
+   When this rule is chained with others, the result is very powerful.
+Thus, `make "foo.a(bar.o)"' (the quotes are needed to protect the `('
+and `)' from being interpreted specially by the shell) in the presence
+of a file `bar.c' is enough to cause the following commands to be run,
+even without a makefile:
+
+     cc -c bar.c -o bar.o
+     ar r foo.a bar.o
+     rm -f bar.o
+
+Here `make' has envisioned the file `bar.o' as an intermediate file.
+*Note Chains of Implicit Rules: Chained Rules.
+
+   Implicit rules such as this one are written using the automatic
+variable `$%'.  *Note Automatic Variables: Automatic.
+
+   An archive member name in an archive cannot contain a directory
+name, but it may be useful in a makefile to pretend that it does.  If
+you write an archive member target `foo.a(dir/file.o)', `make' will
+perform automatic updating with this command:
+
+     ar r foo.a dir/file.o
+
+which has the effect of copying the file `dir/file.o' into a member
+named `file.o'.  In connection with such usage, the automatic variables
+`%D' and `%F' may be useful.
+
+* Menu:
+
+* Archive Symbols::             How to update archive symbol directories.
+
+
+File: make.info,  Node: Archive Symbols,  Prev: Archive Update,  Up: Archive Update
+
+11.2.1 Updating Archive Symbol Directories
+------------------------------------------
+
+An archive file that is used as a library usually contains a special
+member named `__.SYMDEF' that contains a directory of the external
+symbol names defined by all the other members.  After you update any
+other members, you need to update `__.SYMDEF' so that it will summarize
+the other members properly.  This is done by running the `ranlib'
+program:
+
+     ranlib ARCHIVEFILE
+
+   Normally you would put this command in the rule for the archive file,
+and make all the members of the archive file prerequisites of that rule.
+For example,
+
+     libfoo.a: libfoo.a(x.o) libfoo.a(y.o) ...
+             ranlib libfoo.a
+
+The effect of this is to update archive members `x.o', `y.o', etc., and
+then update the symbol directory member `__.SYMDEF' by running
+`ranlib'.  The rules for updating the members are not shown here; most
+likely you can omit them and use the implicit rule which copies files
+into the archive, as described in the preceding section.
+
+   This is not necessary when using the GNU `ar' program, which updates
+the `__.SYMDEF' member automatically.
+
+
+File: make.info,  Node: Archive Pitfalls,  Next: Archive Suffix Rules,  Prev: Archive Update,  Up: Archives
+
+11.3 Dangers When Using Archives
+================================
+
+It is important to be careful when using parallel execution (the `-j'
+switch; *note Parallel Execution: Parallel.) and archives.  If multiple
+`ar' commands run at the same time on the same archive file, they will
+not know about each other and can corrupt the file.
+
+   Possibly a future version of `make' will provide a mechanism to
+circumvent this problem by serializing all commands that operate on the
+same archive file.  But for the time being, you must either write your
+makefiles to avoid this problem in some other way, or not use `-j'.
+
+
+File: make.info,  Node: Archive Suffix Rules,  Prev: Archive Pitfalls,  Up: Archives
+
+11.4 Suffix Rules for Archive Files
 ===================================
 
-   Sometimes it is useful to have a makefile that is mostly just like
-another makefile.  You can often use the `include' directive to include
-one in the other, and add more targets or variable definitions.
-However, if the two makefiles give different commands for the same
-target, `make' will not let you just do this.  But there is another way.
-
-   In the containing makefile (the one that wants to include the other),
-you can use a match-anything pattern rule to say that to remake any
-target that cannot be made from the information in the containing
-makefile, `make' should look in another makefile.  *Note Pattern
-Rules::, for more information on pattern rules.
-
-   For example, if you have a makefile called `Makefile' that says how
-to make the target `foo' (and other targets), you can write a makefile
-called `GNUmakefile' that contains:
-
-     foo:
-             frobnicate > foo
-     
-     %: force
-             @$(MAKE) -f Makefile $@
-     force: ;
-
-   If you say `make foo', `make' will find `GNUmakefile', read it, and
-see that to make `foo', it needs to run the command `frobnicate > foo'.
-If you say `make bar', `make' will find no way to make `bar' in
-`GNUmakefile', so it will use the commands from the pattern rule: `make
--f Makefile bar'.  If `Makefile' provides a rule for updating `bar',
-`make' will apply the rule.  And likewise for any other target that
-`GNUmakefile' does not say how to make.
-
-   The way this works is that the pattern rule has a pattern of just
-`%', so it matches any target whatever.  The rule specifies a
-prerequisite `force', to guarantee that the commands will be run even
-if the target file already exists.  We give `force' target empty
-commands to prevent `make' from searching for an implicit rule to build
-it--otherwise it would apply the same match-anything rule to `force'
-itself and create a prerequisite loop!
+You can write a special kind of suffix rule for dealing with archive
+files.  *Note Suffix Rules::, for a full explanation of suffix rules.
+Archive suffix rules are obsolete in GNU `make', because pattern rules
+for archives are a more general mechanism (*note Archive Update::).
+But they are retained for compatibility with other `make's.
+
+   To write a suffix rule for archives, you simply write a suffix rule
+using the target suffix `.a' (the usual suffix for archive files).  For
+example, here is the old-fashioned suffix rule to update a library
+archive from C source files:
+
+     .c.a:
+             $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o
+             $(AR) r $@ $*.o
+             $(RM) $*.o
+
+This works just as if you had written the pattern rule:
+
+     (%.o): %.c
+             $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o
+             $(AR) r $@ $*.o
+             $(RM) $*.o
+
+   In fact, this is just what `make' does when it sees a suffix rule
+with `.a' as the target suffix.  Any double-suffix rule `.X.a' is
+converted to a pattern rule with the target pattern `(%.o)' and a
+prerequisite pattern of `%.X'.
+
+   Since you might want to use `.a' as the suffix for some other kind
+of file, `make' also converts archive suffix rules to pattern rules in
+the normal way (*note Suffix Rules::).  Thus a double-suffix rule
+`.X.a' produces two pattern rules: `(%.o): %.X' and `%.a: %.X'.
 
 
-File: make.info,  Node: Reading Makefiles,  Prev: Overriding Makefiles,  Up: Makefiles
-
-How `make' Reads a Makefile
+File: make.info,  Node: Features,  Next: Missing,  Prev: Archives,  Up: Top
+
+12 Features of GNU `make'
+*************************
+
+Here is a summary of the features of GNU `make', for comparison with
+and credit to other versions of `make'.  We consider the features of
+`make' in 4.2 BSD systems as a baseline.  If you are concerned with
+writing portable makefiles, you should not use the features of `make'
+listed here, nor the ones in *Note Missing::.
+
+   Many features come from the version of `make' in System V.
+
+   * The `VPATH' variable and its special meaning.  *Note Searching
+     Directories for Prerequisites: Directory Search.  This feature
+     exists in System V `make', but is undocumented.  It is documented
+     in 4.3 BSD `make' (which says it mimics System V's `VPATH'
+     feature).
+
+   * Included makefiles.  *Note Including Other Makefiles: Include.
+     Allowing multiple files to be included with a single directive is
+     a GNU extension.
+
+   * Variables are read from and communicated via the environment.
+     *Note Variables from the Environment: Environment.
+
+   * Options passed through the variable `MAKEFLAGS' to recursive
+     invocations of `make'.  *Note Communicating Options to a
+     Sub-`make': Options/Recursion.
+
+   * The automatic variable `$%' is set to the member name in an
+     archive reference.  *Note Automatic Variables: Automatic.
+
+   * The automatic variables `$@', `$*', `$<', `$%', and `$?' have
+     corresponding forms like `$(@F)' and `$(@D)'.  We have generalized
+     this to `$^' as an obvious extension.  *Note Automatic Variables:
+     Automatic.
+
+   * Substitution variable references.  *Note Basics of Variable
+     References: Reference.
+
+   * The command-line options `-b' and `-m', accepted and ignored.  In
+     System V `make', these options actually do something.
+
+   * Execution of recursive commands to run `make' via the variable
+     `MAKE' even if `-n', `-q' or `-t' is specified.  *Note Recursive
+     Use of `make': Recursion.
+
+   * Support for suffix `.a' in suffix rules.  *Note Archive Suffix
+     Rules::.  This feature is obsolete in GNU `make', because the
+     general feature of rule chaining (*note Chains of Implicit Rules:
+     Chained Rules.) allows one pattern rule for installing members in
+     an archive (*note Archive Update::) to be sufficient.
+
+   * The arrangement of lines and backslash-newline combinations in
+     commands is retained when the commands are printed, so they appear
+     as they do in the makefile, except for the stripping of initial
+     whitespace.
+
+   The following features were inspired by various other versions of
+`make'.  In some cases it is unclear exactly which versions inspired
+which others.
+
+   * Pattern rules using `%'.  This has been implemented in several
+     versions of `make'.  We're not sure who invented it first, but
+     it's been spread around a bit.  *Note Defining and Redefining
+     Pattern Rules: Pattern Rules.
+
+   * Rule chaining and implicit intermediate files.  This was
+     implemented by Stu Feldman in his version of `make' for AT&T
+     Eighth Edition Research Unix, and later by Andrew Hume of AT&T
+     Bell Labs in his `mk' program (where he terms it "transitive
+     closure").  We do not really know if we got this from either of
+     them or thought it up ourselves at the same time.  *Note Chains of
+     Implicit Rules: Chained Rules.
+
+   * The automatic variable `$^' containing a list of all prerequisites
+     of the current target.  We did not invent this, but we have no
+     idea who did.  *Note Automatic Variables: Automatic.  The
+     automatic variable `$+' is a simple extension of `$^'.
+
+   * The "what if" flag (`-W' in GNU `make') was (as far as we know)
+     invented by Andrew Hume in `mk'.  *Note Instead of Executing the
+     Commands: Instead of Execution.
+
+   * The concept of doing several things at once (parallelism) exists in
+     many incarnations of `make' and similar programs, though not in the
+     System V or BSD implementations.  *Note Command Execution:
+     Execution.
+
+   * Modified variable references using pattern substitution come from
+     SunOS 4.  *Note Basics of Variable References: Reference.  This
+     functionality was provided in GNU `make' by the `patsubst'
+     function before the alternate syntax was implemented for
+     compatibility with SunOS 4.  It is not altogether clear who
+     inspired whom, since GNU `make' had `patsubst' before SunOS 4 was
+     released.
+
+   * The special significance of `+' characters preceding command lines
+     (*note Instead of Executing the Commands: Instead of Execution.) is
+     mandated by `IEEE Standard 1003.2-1992' (POSIX.2).
+
+   * The `+=' syntax to append to the value of a variable comes from
+     SunOS 4 `make'.  *Note Appending More Text to Variables: Appending.
+
+   * The syntax `ARCHIVE(MEM1 MEM2...)' to list multiple members in a
+     single archive file comes from SunOS 4 `make'.  *Note Archive
+     Members::.
+
+   * The `-include' directive to include makefiles with no error for a
+     nonexistent file comes from SunOS 4 `make'.  (But note that SunOS 4
+     `make' does not allow multiple makefiles to be specified in one
+     `-include' directive.)  The same feature appears with the name
+     `sinclude' in SGI `make' and perhaps others.
+
+   The remaining features are inventions new in GNU `make':
+
+   * Use the `-v' or `--version' option to print version and copyright
+     information.
+
+   * Use the `-h' or `--help' option to summarize the options to `make'.
+
+   * Simply-expanded variables.  *Note The Two Flavors of Variables:
+     Flavors.
+
+   * Pass command-line variable assignments automatically through the
+     variable `MAKE' to recursive `make' invocations.  *Note Recursive
+     Use of `make': Recursion.
+
+   * Use the `-C' or `--directory' command option to change directory.
+     *Note Summary of Options: Options Summary.
+
+   * Make verbatim variable definitions with `define'.  *Note Defining
+     Variables Verbatim: Defining.
+
+   * Declare phony targets with the special target `.PHONY'.
+
+     Andrew Hume of AT&T Bell Labs implemented a similar feature with a
+     different syntax in his `mk' program.  This seems to be a case of
+     parallel discovery.  *Note Phony Targets: Phony Targets.
+
+   * Manipulate text by calling functions.  *Note Functions for
+     Transforming Text: Functions.
+
+   * Use the `-o' or `--old-file' option to pretend a file's
+     modification-time is old.  *Note Avoiding Recompilation of Some
+     Files: Avoiding Compilation.
+
+   * Conditional execution.
+
+     This feature has been implemented numerous times in various
+     versions of `make'; it seems a natural extension derived from the
+     features of the C preprocessor and similar macro languages and is
+     not a revolutionary concept.  *Note Conditional Parts of
+     Makefiles: Conditionals.
+
+   * Specify a search path for included makefiles.  *Note Including
+     Other Makefiles: Include.
+
+   * Specify extra makefiles to read with an environment variable.
+     *Note The Variable `MAKEFILES': MAKEFILES Variable.
+
+   * Strip leading sequences of `./' from file names, so that `./FILE'
+     and `FILE' are considered to be the same file.
+
+   * Use a special search method for library prerequisites written in
+     the form `-lNAME'.  *Note Directory Search for Link Libraries:
+     Libraries/Search.
+
+   * Allow suffixes for suffix rules (*note Old-Fashioned Suffix Rules:
+     Suffix Rules.) to contain any characters.  In other versions of
+     `make', they must begin with `.' and not contain any `/'
+     characters.
+
+   * Keep track of the current level of `make' recursion using the
+     variable `MAKELEVEL'.  *Note Recursive Use of `make': Recursion.
+
+   * Provide any goals given on the command line in the variable
+     `MAKECMDGOALS'.  *Note Arguments to Specify the Goals: Goals.
+
+   * Specify static pattern rules.  *Note Static Pattern Rules: Static
+     Pattern.
+
+   * Provide selective `vpath' search.  *Note Searching Directories for
+     Prerequisites: Directory Search.
+
+   * Provide computed variable references.  *Note Basics of Variable
+     References: Reference.
+
+   * Update makefiles.  *Note How Makefiles Are Remade: Remaking
+     Makefiles.  System V `make' has a very, very limited form of this
+     functionality in that it will check out SCCS files for makefiles.
+
+   * Various new built-in implicit rules.  *Note Catalogue of Implicit
+     Rules: Catalogue of Rules.
+
+   * The built-in variable `MAKE_VERSION' gives the version number of
+     `make'.
+
+
+File: make.info,  Node: Missing,  Next: Makefile Conventions,  Prev: Features,  Up: Top
+
+13 Incompatibilities and Missing Features
+*****************************************
+
+The `make' programs in various other systems support a few features
+that are not implemented in GNU `make'.  The POSIX.2 standard (`IEEE
+Standard 1003.2-1992') which specifies `make' does not require any of
+these features.
+
+   * A target of the form `FILE((ENTRY))' stands for a member of
+     archive file FILE.  The member is chosen, not by name, but by
+     being an object file which defines the linker symbol ENTRY.
+
+     This feature was not put into GNU `make' because of the
+     nonmodularity of putting knowledge into `make' of the internal
+     format of archive file symbol tables.  *Note Updating Archive
+     Symbol Directories: Archive Symbols.
+
+   * Suffixes (used in suffix rules) that end with the character `~'
+     have a special meaning to System V `make'; they refer to the SCCS
+     file that corresponds to the file one would get without the `~'.
+     For example, the suffix rule `.c~.o' would make the file `N.o' from
+     the SCCS file `s.N.c'.  For complete coverage, a whole series of
+     such suffix rules is required.  *Note Old-Fashioned Suffix Rules:
+     Suffix Rules.
+
+     In GNU `make', this entire series of cases is handled by two
+     pattern rules for extraction from SCCS, in combination with the
+     general feature of rule chaining.  *Note Chains of Implicit Rules:
+     Chained Rules.
+
+   * In System V and 4.3 BSD `make', files found by `VPATH' search
+     (*note Searching Directories for Prerequisites: Directory Search.)
+     have their names changed inside command strings.  We feel it is
+     much cleaner to always use automatic variables and thus make this
+     feature obsolete.
+
+   * In some Unix `make's, the automatic variable `$*' appearing in the
+     prerequisites of a rule has the amazingly strange "feature" of
+     expanding to the full name of the _target of that rule_.  We cannot
+     imagine what went on in the minds of Unix `make' developers to do
+     this; it is utterly inconsistent with the normal definition of
+     `$*'.  
+
+   * In some Unix `make's, implicit rule search (*note Using Implicit
+     Rules: Implicit Rules.) is apparently done for _all_ targets, not
+     just those without commands.  This means you can do:
+
+          foo.o:
+                  cc -c foo.c
+
+     and Unix `make' will intuit that `foo.o' depends on `foo.c'.
+
+     We feel that such usage is broken.  The prerequisite properties of
+     `make' are well-defined (for GNU `make', at least), and doing such
+     a thing simply does not fit the model.
+
+   * GNU `make' does not include any built-in implicit rules for
+     compiling or preprocessing EFL programs.  If we hear of anyone who
+     is using EFL, we will gladly add them.
+
+   * It appears that in SVR4 `make', a suffix rule can be specified with
+     no commands, and it is treated as if it had empty commands (*note
+     Empty Commands::).  For example:
+
+          .c.a:
+
+     will override the built-in `.c.a' suffix rule.
+
+     We feel that it is cleaner for a rule without commands to always
+     simply add to the prerequisite list for the target.  The above
+     example can be easily rewritten to get the desired behavior in GNU
+     `make':
+
+          .c.a: ;
+
+   * Some versions of `make' invoke the shell with the `-e' flag,
+     except under `-k' (*note Testing the Compilation of a Program:
+     Testing.).  The `-e' flag tells the shell to exit as soon as any
+     program it runs returns a nonzero status.  We feel it is cleaner to
+     write each shell command line to stand on its own and not require
+     this special treatment.
+
+
+File: make.info,  Node: Makefile Conventions,  Next: Quick Reference,  Prev: Missing,  Up: Top
+
+14 Makefile Conventions
+***********************
+
+This node describes conventions for writing the Makefiles for GNU
+programs.  Using Automake will help you write a Makefile that follows
+these conventions.
+
+* Menu:
+
+* Makefile Basics::             General Conventions for Makefiles
+* Utilities in Makefiles::      Utilities in Makefiles
+* Command Variables::           Variables for Specifying Commands
+* Directory Variables::         Variables for Installation Directories
+* Standard Targets::            Standard Targets for Users
+* Install Command Categories::  Three categories of commands in the `install'
+                                  rule: normal, pre-install and post-install.
+
+
+File: make.info,  Node: Makefile Basics,  Next: Utilities in Makefiles,  Up: Makefile Conventions
+
+14.1 General Conventions for Makefiles
+======================================
+
+Every Makefile should contain this line:
+
+     SHELL = /bin/sh
+
+to avoid trouble on systems where the `SHELL' variable might be
+inherited from the environment.  (This is never a problem with GNU
+`make'.)
+
+   Different `make' programs have incompatible suffix lists and
+implicit rules, and this sometimes creates confusion or misbehavior.  So
+it is a good idea to set the suffix list explicitly using only the
+suffixes you need in the particular Makefile, like this:
+
+     .SUFFIXES:
+     .SUFFIXES: .c .o
+
+The first line clears out the suffix list, the second introduces all
+suffixes which may be subject to implicit rules in this Makefile.
+
+   Don't assume that `.' is in the path for command execution.  When
+you need to run programs that are a part of your package during the
+make, please make sure that it uses `./' if the program is built as
+part of the make or `$(srcdir)/' if the file is an unchanging part of
+the source code.  Without one of these prefixes, the current search
+path is used.
+
+   The distinction between `./' (the "build directory") and
+`$(srcdir)/' (the "source directory") is important because users can
+build in a separate directory using the `--srcdir' option to
+`configure'.  A rule of the form:
+
+     foo.1 : foo.man sedscript
+             sed -e sedscript foo.man > foo.1
+
+will fail when the build directory is not the source directory, because
+`foo.man' and `sedscript' are in the source directory.
+
+   When using GNU `make', relying on `VPATH' to find the source file
+will work in the case where there is a single dependency file, since
+the `make' automatic variable `$<' will represent the source file
+wherever it is.  (Many versions of `make' set `$<' only in implicit
+rules.)  A Makefile target like
+
+     foo.o : bar.c
+             $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o
+
+should instead be written as
+
+     foo.o : bar.c
+             $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@
+
+in order to allow `VPATH' to work correctly.  When the target has
+multiple dependencies, using an explicit `$(srcdir)' is the easiest way
+to make the rule work well.  For example, the target above for `foo.1'
+is best written as:
+
+     foo.1 : foo.man sedscript
+             sed -e $(srcdir)/sedscript $(srcdir)/foo.man > $@
+
+   GNU distributions usually contain some files which are not source
+files--for example, Info files, and the output from Autoconf, Automake,
+Bison or Flex.  Since these files normally appear in the source
+directory, they should always appear in the source directory, not in the
+build directory.  So Makefile rules to update them should put the
+updated files in the source directory.
+
+   However, if a file does not appear in the distribution, then the
+Makefile should not put it in the source directory, because building a
+program in ordinary circumstances should not modify the source directory
+in any way.
+
+   Try to make the build and installation targets, at least (and all
+their subtargets) work correctly with a parallel `make'.
+
+
+File: make.info,  Node: Utilities in Makefiles,  Next: Command Variables,  Prev: Makefile Basics,  Up: Makefile Conventions
+
+14.2 Utilities in Makefiles
 ===========================
 
-   GNU `make' does its work in two distinct phases.  During the first
-phase it reads all the makefiles, included makefiles, etc. and
-internalizes all the variables and their values, implicit and explicit
-rules, and constructs a dependency graph of all the targets and their
-prerequisites.  During the second phase, `make' uses these internal
-structures to determine what targets will need to be rebuilt and to
-invoke the rules necessary to do so.
-
-   It's important to understand this two-phase approach because it has a
-direct impact on how variable and function expansion happens; this is
-often a source of some confusion when writing makefiles.  Here we will
-present a summary of the phases in which expansion happens for different
-constructs within the makefile.  We say that expansion is "immediate"
-if it happens during the first phase: in this case `make' will expand
-any variables or functions in that section of a construct as the
-makefile is parsed.  We say that expansion is "deferred" if expansion
-is not performed immediately.  Expansion of deferred construct is not
-performed until either the construct appears later in an immediate
-context, or until the second phase.
-
-   You may not be familiar with some of these constructs yet.  You can
-reference this section as you become familiar with them, in later
-chapters.
-
-Variable Assignment
--------------------
-
-   Variable definitions are parsed as follows:
-
-     IMMEDIATE = DEFERRED
-     IMMEDIATE ?= DEFERRED
-     IMMEDIATE := IMMEDIATE
-     IMMEDIATE += DEFERRED or IMMEDIATE
-     
-     define IMMEDIATE
-       DEFERRED
-     endef
-
-   For the append operator, `+=', the right-hand side is considered
-immediate if the variable was previously set as a simple variable
-(`:='), and deferred otherwise.
-
-Conditional Statements
-----------------------
-
-   All instances of conditional syntax are parsed immediately, in their
-entirety; this includes the `ifdef', `ifeq', `ifndef', and `ifneq'
-forms.
-
-Rule Definition
----------------
-
-   A rule is always expanded the same way, regardless of the form:
-
-     IMMEDIATE : IMMEDIATE ; DEFERRED
-     	DEFERRED
-
-   That is, the target and prerequisite sections are expanded
-immediately, and the commands used to construct the target are always
-deferred.  This general rule is true for explicit rules, pattern rules,
-suffix rules, static pattern rules, and simple prerequisite definitions.
+Write the Makefile commands (and any shell scripts, such as
+`configure') to run in `sh', not in `csh'.  Don't use any special
+features of `ksh' or `bash'.
+
+   The `configure' script and the Makefile rules for building and
+installation should not use any utilities directly except these:
+
+     cat cmp cp diff echo egrep expr false grep install-info
+     ln ls mkdir mv pwd rm rmdir sed sleep sort tar test touch true
+
+   The compression program `gzip' can be used in the `dist' rule.
+
+   Stick to the generally supported options for these programs.  For
+example, don't use `mkdir -p', convenient as it may be, because most
+systems don't support it.
+
+   It is a good idea to avoid creating symbolic links in makefiles,
+since a few systems don't support them.
+
+   The Makefile rules for building and installation can also use
+compilers and related programs, but should do so via `make' variables
+so that the user can substitute alternatives.  Here are some of the
+programs we mean:
+
+     ar bison cc flex install ld ldconfig lex
+     make makeinfo ranlib texi2dvi yacc
+
+   Use the following `make' variables to run those programs:
+
+     $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX)
+     $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)
+
+   When you use `ranlib' or `ldconfig', you should make sure nothing
+bad happens if the system does not have the program in question.
+Arrange to ignore an error from that command, and print a message before
+the command to tell the user that failure of this command does not mean
+a problem.  (The Autoconf `AC_PROG_RANLIB' macro can help with this.)
+
+   If you use symbolic links, you should implement a fallback for
+systems that don't have symbolic links.
+
+   Additional utilities that can be used via Make variables are:
+
+     chgrp chmod chown mknod
+
+   It is ok to use other utilities in Makefile portions (or scripts)
+intended only for particular systems where you know those utilities
+exist.
 
 
-File: make.info,  Node: Rules,  Next: Commands,  Prev: Makefiles,  Up: Top
-
-Writing Rules
-*************
-
-   A "rule" appears in the makefile and says when and how to remake
-certain files, called the rule's "targets" (most often only one per
-rule).  It lists the other files that are the "prerequisites" of the
-target, and "commands" to use to create or update the target.
-
-   The order of rules is not significant, except for determining the
-"default goal": the target for `make' to consider, if you do not
-otherwise specify one.  The default goal is the target of the first
-rule in the first makefile.  If the first rule has multiple targets,
-only the first target is taken as the default.  There are two
-exceptions: a target starting with a period is not a default unless it
-contains one or more slashes, `/', as well; and, a target that defines
-a pattern rule has no effect on the default goal.  (*Note Defining and
-Redefining Pattern Rules: Pattern Rules.)
-
-   Therefore, we usually write the makefile so that the first rule is
-the one for compiling the entire program or all the programs described
-by the makefile (often with a target called `all').  *Note Arguments to
-Specify the Goals: Goals.
-
+File: make.info,  Node: Command Variables,  Next: Directory Variables,  Prev: Utilities in Makefiles,  Up: Makefile Conventions
+
+14.3 Variables for Specifying Commands
+======================================
+
+Makefiles should provide variables for overriding certain commands,
+options, and so on.
+
+   In particular, you should run most utility programs via variables.
+Thus, if you use Bison, have a variable named `BISON' whose default
+value is set with `BISON = bison', and refer to it with `$(BISON)'
+whenever you need to use Bison.
+
+   File management utilities such as `ln', `rm', `mv', and so on, need
+not be referred to through variables in this way, since users don't
+need to replace them with other programs.
+
+   Each program-name variable should come with an options variable that
+is used to supply options to the program.  Append `FLAGS' to the
+program-name variable name to get the options variable name--for
+example, `BISONFLAGS'.  (The names `CFLAGS' for the C compiler,
+`YFLAGS' for yacc, and `LFLAGS' for lex, are exceptions to this rule,
+but we keep them because they are standard.)  Use `CPPFLAGS' in any
+compilation command that runs the preprocessor, and use `LDFLAGS' in
+any compilation command that does linking as well as in any direct use
+of `ld'.
+
+   If there are C compiler options that _must_ be used for proper
+compilation of certain files, do not include them in `CFLAGS'.  Users
+expect to be able to specify `CFLAGS' freely themselves.  Instead,
+arrange to pass the necessary options to the C compiler independently
+of `CFLAGS', by writing them explicitly in the compilation commands or
+by defining an implicit rule, like this:
+
+     CFLAGS = -g
+     ALL_CFLAGS = -I. $(CFLAGS)
+     .c.o:
+             $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
+
+   Do include the `-g' option in `CFLAGS', because that is not
+_required_ for proper compilation.  You can consider it a default that
+is only recommended.  If the package is set up so that it is compiled
+with GCC by default, then you might as well include `-O' in the default
+value of `CFLAGS' as well.
+
+   Put `CFLAGS' last in the compilation command, after other variables
+containing compiler options, so the user can use `CFLAGS' to override
+the others.
+
+   `CFLAGS' should be used in every invocation of the C compiler, both
+those which do compilation and those which do linking.
+
+   Every Makefile should define the variable `INSTALL', which is the
+basic command for installing a file into the system.
+
+   Every Makefile should also define the variables `INSTALL_PROGRAM'
+and `INSTALL_DATA'.  (The default for `INSTALL_PROGRAM' should be
+`$(INSTALL)'; the default for `INSTALL_DATA' should be `${INSTALL} -m
+644'.)  Then it should use those variables as the commands for actual
+installation, for executables and nonexecutables respectively.  Use
+these variables as follows:
+
+     $(INSTALL_PROGRAM) foo $(bindir)/foo
+     $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a
+
+   Optionally, you may prepend the value of `DESTDIR' to the target
+filename.  Doing this allows the installer to create a snapshot of the
+installation to be copied onto the real target filesystem later.  Do not
+set the value of `DESTDIR' in your Makefile, and do not include it in
+any installed files.  With support for `DESTDIR', the above examples
+become:
+
+     $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
+     $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a
+
+Always use a file name, not a directory name, as the second argument of
+the installation commands.  Use a separate command for each file to be
+installed.
+
+
+File: make.info,  Node: Directory Variables,  Next: Standard Targets,  Prev: Command Variables,  Up: Makefile Conventions
+
+14.4 Variables for Installation Directories
+===========================================
+
+Installation directories should always be named by variables, so it is
+easy to install in a nonstandard place.  The standard names for these
+variables are described below.  They are based on a standard filesystem
+layout; variants of it are used in SVR4, 4.4BSD, GNU/Linux, Ultrix v4,
+and other modern operating systems.
+
+   These two variables set the root for the installation.  All the other
+installation directories should be subdirectories of one of these two,
+and nothing should be directly installed into these two directories.
+
+`prefix'
+     A prefix used in constructing the default values of the variables
+     listed below.  The default value of `prefix' should be
+     `/usr/local'.  When building the complete GNU system, the prefix
+     will be empty and `/usr' will be a symbolic link to `/'.  (If you
+     are using Autoconf, write it as `@prefix@'.)
+
+     Running `make install' with a different value of `prefix' from the
+     one used to build the program should _not_ recompile the program.
+
+`exec_prefix'
+     A prefix used in constructing the default values of some of the
+     variables listed below.  The default value of `exec_prefix' should
+     be `$(prefix)'.  (If you are using Autoconf, write it as
+     `@exec_prefix@'.)
+
+     Generally, `$(exec_prefix)' is used for directories that contain
+     machine-specific files (such as executables and subroutine
+     libraries), while `$(prefix)' is used directly for other
+     directories.
+
+     Running `make install' with a different value of `exec_prefix'
+     from the one used to build the program should _not_ recompile the
+     program.
+
+   Executable programs are installed in one of the following
+directories.
+
+`bindir'
+     The directory for installing executable programs that users can
+     run.  This should normally be `/usr/local/bin', but write it as
+     `$(exec_prefix)/bin'.  (If you are using Autoconf, write it as
+     `@bindir@'.)
+
+`sbindir'
+     The directory for installing executable programs that can be run
+     from the shell, but are only generally useful to system
+     administrators.  This should normally be `/usr/local/sbin', but
+     write it as `$(exec_prefix)/sbin'.  (If you are using Autoconf,
+     write it as `@sbindir@'.)
+
+`libexecdir'
+     The directory for installing executable programs to be run by other
+     programs rather than by users.  This directory should normally be
+     `/usr/local/libexec', but write it as `$(exec_prefix)/libexec'.
+     (If you are using Autoconf, write it as `@libexecdir@'.)
+
+   Data files used by the program during its execution are divided into
+categories in two ways.
+
+   * Some files are normally modified by programs; others are never
+     normally modified (though users may edit some of these).
+
+   * Some files are architecture-independent and can be shared by all
+     machines at a site; some are architecture-dependent and can be
+     shared only by machines of the same kind and operating system;
+     others may never be shared between two machines.
+
+   This makes for six different possibilities.  However, we want to
+discourage the use of architecture-dependent files, aside from object
+files and libraries.  It is much cleaner to make other data files
+architecture-independent, and it is generally not hard.
+
+   Therefore, here are the variables Makefiles should use to specify
+directories:
+
+`datadir'
+     The directory for installing read-only architecture independent
+     data files.  This should normally be `/usr/local/share', but write
+     it as `$(prefix)/share'.  (If you are using Autoconf, write it as
+     `@datadir@'.)  As a special exception, see `$(infodir)' and
+     `$(includedir)' below.
+
+`sysconfdir'
+     The directory for installing read-only data files that pertain to a
+     single machine-that is to say, files for configuring a host.
+     Mailer and network configuration files, `/etc/passwd', and so
+     forth belong here.  All the files in this directory should be
+     ordinary ASCII text files.  This directory should normally be
+     `/usr/local/etc', but write it as `$(prefix)/etc'.  (If you are
+     using Autoconf, write it as `@sysconfdir@'.)
+
+     Do not install executables here in this directory (they probably
+     belong in `$(libexecdir)' or `$(sbindir)').  Also do not install
+     files that are modified in the normal course of their use (programs
+     whose purpose is to change the configuration of the system
+     excluded).  Those probably belong in `$(localstatedir)'.
+
+`sharedstatedir'
+     The directory for installing architecture-independent data files
+     which the programs modify while they run.  This should normally be
+     `/usr/local/com', but write it as `$(prefix)/com'.  (If you are
+     using Autoconf, write it as `@sharedstatedir@'.)
+
+`localstatedir'
+     The directory for installing data files which the programs modify
+     while they run, and that pertain to one specific machine.  Users
+     should never need to modify files in this directory to configure
+     the package's operation; put such configuration information in
+     separate files that go in `$(datadir)' or `$(sysconfdir)'.
+     `$(localstatedir)' should normally be `/usr/local/var', but write
+     it as `$(prefix)/var'.  (If you are using Autoconf, write it as
+     `@localstatedir@'.)
+
+`libdir'
+     The directory for object files and libraries of object code.  Do
+     not install executables here, they probably ought to go in
+     `$(libexecdir)' instead.  The value of `libdir' should normally be
+     `/usr/local/lib', but write it as `$(exec_prefix)/lib'.  (If you
+     are using Autoconf, write it as `@libdir@'.)
+
+`infodir'
+     The directory for installing the Info files for this package.  By
+     default, it should be `/usr/local/info', but it should be written
+     as `$(prefix)/info'.  (If you are using Autoconf, write it as
+     `@infodir@'.)
+
+`lispdir'
+     The directory for installing any Emacs Lisp files in this package.
+     By default, it should be `/usr/local/share/emacs/site-lisp', but
+     it should be written as `$(prefix)/share/emacs/site-lisp'.
+
+     If you are using Autoconf, write the default as `@lispdir@'.  In
+     order to make `@lispdir@' work, you need the following lines in
+     your `configure.in' file:
+
+          lispdir='${datadir}/emacs/site-lisp'
+          AC_SUBST(lispdir)
+
+`includedir'
+     The directory for installing header files to be included by user
+     programs with the C `#include' preprocessor directive.  This
+     should normally be `/usr/local/include', but write it as
+     `$(prefix)/include'.  (If you are using Autoconf, write it as
+     `@includedir@'.)
+
+     Most compilers other than GCC do not look for header files in
+     directory `/usr/local/include'.  So installing the header files
+     this way is only useful with GCC.  Sometimes this is not a problem
+     because some libraries are only really intended to work with GCC.
+     But some libraries are intended to work with other compilers.
+     They should install their header files in two places, one
+     specified by `includedir' and one specified by `oldincludedir'.
+
+`oldincludedir'
+     The directory for installing `#include' header files for use with
+     compilers other than GCC.  This should normally be `/usr/include'.
+     (If you are using Autoconf, you can write it as `@oldincludedir@'.)
+
+     The Makefile commands should check whether the value of
+     `oldincludedir' is empty.  If it is, they should not try to use
+     it; they should cancel the second installation of the header files.
+
+     A package should not replace an existing header in this directory
+     unless the header came from the same package.  Thus, if your Foo
+     package provides a header file `foo.h', then it should install the
+     header file in the `oldincludedir' directory if either (1) there
+     is no `foo.h' there or (2) the `foo.h' that exists came from the
+     Foo package.
+
+     To tell whether `foo.h' came from the Foo package, put a magic
+     string in the file--part of a comment--and `grep' for that string.
+
+   Unix-style man pages are installed in one of the following:
+
+`mandir'
+     The top-level directory for installing the man pages (if any) for
+     this package.  It will normally be `/usr/local/man', but you should
+     write it as `$(prefix)/man'.  (If you are using Autoconf, write it
+     as `@mandir@'.)
+
+`man1dir'
+     The directory for installing section 1 man pages.  Write it as
+     `$(mandir)/man1'.
+
+`man2dir'
+     The directory for installing section 2 man pages.  Write it as
+     `$(mandir)/man2'
+
+`...'
+     *Don't make the primary documentation for any GNU software be a
+     man page.  Write a manual in Texinfo instead.  Man pages are just
+     for the sake of people running GNU software on Unix, which is a
+     secondary application only.*
+
+`manext'
+     The file name extension for the installed man page.  This should
+     contain a period followed by the appropriate digit; it should
+     normally be `.1'.
+
+`man1ext'
+     The file name extension for installed section 1 man pages.
+
+`man2ext'
+     The file name extension for installed section 2 man pages.
+
+`...'
+     Use these names instead of `manext' if the package needs to
+     install man pages in more than one section of the manual.
+
+   And finally, you should set the following variable:
+
+`srcdir'
+     The directory for the sources being compiled.  The value of this
+     variable is normally inserted by the `configure' shell script.
+     (If you are using Autconf, use `srcdir = @srcdir@'.)
+
+   For example:
+
+     # Common prefix for installation directories.
+     # NOTE: This directory must exist when you start the install.
+     prefix = /usr/local
+     exec_prefix = $(prefix)
+     # Where to put the executable for the command `gcc'.
+     bindir = $(exec_prefix)/bin
+     # Where to put the directories used by the compiler.
+     libexecdir = $(exec_prefix)/libexec
+     # Where to put the Info files.
+     infodir = $(prefix)/info
+
+   If your program installs a large number of files into one of the
+standard user-specified directories, it might be useful to group them
+into a subdirectory particular to that program.  If you do this, you
+should write the `install' rule to create these subdirectories.
+
+   Do not expect the user to include the subdirectory name in the value
+of any of the variables listed above.  The idea of having a uniform set
+of variable names for installation directories is to enable the user to
+specify the exact same values for several different GNU packages.  In
+order for this to be useful, all the packages must be designed so that
+they will work sensibly when the user does so.
+
+
+File: make.info,  Node: Standard Targets,  Next: Install Command Categories,  Prev: Directory Variables,  Up: Makefile Conventions
+
+14.5 Standard Targets for Users
+===============================
+
+All GNU programs should have the following targets in their Makefiles:
+
+`all'
+     Compile the entire program.  This should be the default target.
+     This target need not rebuild any documentation files; Info files
+     should normally be included in the distribution, and DVI files
+     should be made only when explicitly asked for.
+
+     By default, the Make rules should compile and link with `-g', so
+     that executable programs have debugging symbols.  Users who don't
+     mind being helpless can strip the executables later if they wish.
+
+`install'
+     Compile the program and copy the executables, libraries, and so on
+     to the file names where they should reside for actual use.  If
+     there is a simple test to verify that a program is properly
+     installed, this target should run that test.
+
+     Do not strip executables when installing them.  Devil-may-care
+     users can use the `install-strip' target to do that.
+
+     If possible, write the `install' target rule so that it does not
+     modify anything in the directory where the program was built,
+     provided `make all' has just been done.  This is convenient for
+     building the program under one user name and installing it under
+     another.
+
+     The commands should create all the directories in which files are
+     to be installed, if they don't already exist.  This includes the
+     directories specified as the values of the variables `prefix' and
+     `exec_prefix', as well as all subdirectories that are needed.  One
+     way to do this is by means of an `installdirs' target as described
+     below.
+
+     Use `-' before any command for installing a man page, so that
+     `make' will ignore any errors.  This is in case there are systems
+     that don't have the Unix man page documentation system installed.
+
+     The way to install Info files is to copy them into `$(infodir)'
+     with `$(INSTALL_DATA)' (*note Command Variables::), and then run
+     the `install-info' program if it is present.  `install-info' is a
+     program that edits the Info `dir' file to add or update the menu
+     entry for the given Info file; it is part of the Texinfo package.
+     Here is a sample rule to install an Info file:
+
+          $(DESTDIR)$(infodir)/foo.info: foo.info
+                  $(POST_INSTALL)
+          # There may be a newer info file in . than in srcdir.
+                  -if test -f foo.info; then d=.; \
+                   else d=$(srcdir); fi; \
+                  $(INSTALL_DATA) $$d/foo.info $(DESTDIR)$@; \
+          # Run install-info only if it exists.
+          # Use `if' instead of just prepending `-' to the
+          # line so we notice real errors from install-info.
+          # We use `$(SHELL) -c' because some shells do not
+          # fail gracefully when there is an unknown command.
+                  if $(SHELL) -c 'install-info --version' \
+                     >/dev/null 2>&1; then \
+                    install-info --dir-file=$(DESTDIR)$(infodir)/dir \
+                                 $(DESTDIR)$(infodir)/foo.info; \
+                  else true; fi
+
+     When writing the `install' target, you must classify all the
+     commands into three categories: normal ones, "pre-installation"
+     commands and "post-installation" commands.  *Note Install Command
+     Categories::.
+
+`uninstall'
+     Delete all the installed files--the copies that the `install'
+     target creates.
+
+     This rule should not modify the directories where compilation is
+     done, only the directories where files are installed.
+
+     The uninstallation commands are divided into three categories,
+     just like the installation commands.  *Note Install Command
+     Categories::.
+
+`install-strip'
+     Like `install', but strip the executable files while installing
+     them.  In simple cases, this target can use the `install' target in
+     a simple way:
+
+          install-strip:
+                  $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
+                          install
+
+     But if the package installs scripts as well as real executables,
+     the `install-strip' target can't just refer to the `install'
+     target; it has to strip the executables but not the scripts.
+
+     `install-strip' should not strip the executables in the build
+     directory which are being copied for installation.  It should only
+     strip the copies that are installed.
+
+     Normally we do not recommend stripping an executable unless you
+     are sure the program has no bugs.  However, it can be reasonable
+     to install a stripped executable for actual execution while saving
+     the unstripped executable elsewhere in case there is a bug.
+
+`clean'
+     Delete all files from the current directory that are normally
+     created by building the program.  Don't delete the files that
+     record the configuration.  Also preserve files that could be made
+     by building, but normally aren't because the distribution comes
+     with them.
+
+     Delete `.dvi' files here if they are not part of the distribution.
+
+`distclean'
+     Delete all files from the current directory that are created by
+     configuring or building the program.  If you have unpacked the
+     source and built the program without creating any other files,
+     `make distclean' should leave only the files that were in the
+     distribution.
+
+`mostlyclean'
+     Like `clean', but may refrain from deleting a few files that people
+     normally don't want to recompile.  For example, the `mostlyclean'
+     target for GCC does not delete `libgcc.a', because recompiling it
+     is rarely necessary and takes a lot of time.
+
+`maintainer-clean'
+     Delete almost everything from the current directory that can be
+     reconstructed with this Makefile.  This typically includes
+     everything deleted by `distclean', plus more: C source files
+     produced by Bison, tags tables, Info files, and so on.
+
+     The reason we say "almost everything" is that running the command
+     `make maintainer-clean' should not delete `configure' even if
+     `configure' can be remade using a rule in the Makefile.  More
+     generally, `make maintainer-clean' should not delete anything that
+     needs to exist in order to run `configure' and then begin to build
+     the program.  This is the only exception; `maintainer-clean' should
+     delete everything else that can be rebuilt.
+
+     The `maintainer-clean' target is intended to be used by a
+     maintainer of the package, not by ordinary users.  You may need
+     special tools to reconstruct some of the files that `make
+     maintainer-clean' deletes.  Since these files are normally
+     included in the distribution, we don't take care to make them easy
+     to reconstruct.  If you find you need to unpack the full
+     distribution again, don't blame us.
+
+     To help make users aware of this, the commands for the special
+     `maintainer-clean' target should start with these two:
+
+          @echo 'This command is intended for maintainers to use; it'
+          @echo 'deletes files that may need special tools to rebuild.'
+
+`TAGS'
+     Update a tags table for this program.
+
+`info'
+     Generate any Info files needed.  The best way to write the rules
+     is as follows:
+
+          info: foo.info
+
+          foo.info: foo.texi chap1.texi chap2.texi
+                  $(MAKEINFO) $(srcdir)/foo.texi
+
+     You must define the variable `MAKEINFO' in the Makefile.  It should
+     run the `makeinfo' program, which is part of the Texinfo
+     distribution.
+
+     Normally a GNU distribution comes with Info files, and that means
+     the Info files are present in the source directory.  Therefore,
+     the Make rule for an info file should update it in the source
+     directory.  When users build the package, ordinarily Make will not
+     update the Info files because they will already be up to date.
+
+`dvi'
+     Generate DVI files for all Texinfo documentation.  For example:
+
+          dvi: foo.dvi
+
+          foo.dvi: foo.texi chap1.texi chap2.texi
+                  $(TEXI2DVI) $(srcdir)/foo.texi
+
+     You must define the variable `TEXI2DVI' in the Makefile.  It should
+     run the program `texi2dvi', which is part of the Texinfo
+     distribution.(1)  Alternatively, write just the dependencies, and
+     allow GNU `make' to provide the command.
+
+`dist'
+     Create a distribution tar file for this program.  The tar file
+     should be set up so that the file names in the tar file start with
+     a subdirectory name which is the name of the package it is a
+     distribution for.  This name can include the version number.
+
+     For example, the distribution tar file of GCC version 1.40 unpacks
+     into a subdirectory named `gcc-1.40'.
+
+     The easiest way to do this is to create a subdirectory
+     appropriately named, use `ln' or `cp' to install the proper files
+     in it, and then `tar' that subdirectory.
+
+     Compress the tar file with `gzip'.  For example, the actual
+     distribution file for GCC version 1.40 is called `gcc-1.40.tar.gz'.
+
+     The `dist' target should explicitly depend on all non-source files
+     that are in the distribution, to make sure they are up to date in
+     the distribution.  *Note Making Releases: (standards)Releases.
+
+`check'
+     Perform self-tests (if any).  The user must build the program
+     before running the tests, but need not install the program; you
+     should write the self-tests so that they work when the program is
+     built but not installed.
+
+   The following targets are suggested as conventional names, for
+programs in which they are useful.
+
+`installcheck'
+     Perform installation tests (if any).  The user must build and
+     install the program before running the tests.  You should not
+     assume that `$(bindir)' is in the search path.
+
+`installdirs'
+     It's useful to add a target named `installdirs' to create the
+     directories where files are installed, and their parent
+     directories.  There is a script called `mkinstalldirs' which is
+     convenient for this; you can find it in the Texinfo package.  You
+     can use a rule like this:
+
+          # Make sure all installation directories (e.g. $(bindir))
+          # actually exist by making them if necessary.
+          installdirs: mkinstalldirs
+                  $(srcdir)/mkinstalldirs $(bindir) $(datadir) \
+                                          $(libdir) $(infodir) \
+                                          $(mandir)
+
+     or, if you wish to support `DESTDIR',
+
+          # Make sure all installation directories (e.g. $(bindir))
+          # actually exist by making them if necessary.
+          installdirs: mkinstalldirs
+                  $(srcdir)/mkinstalldirs \
+                      $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \
+                      $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \
+                      $(DESTDIR)$(mandir)
+
+     This rule should not modify the directories where compilation is
+     done.  It should do nothing but create installation directories.
+
+   ---------- Footnotes ----------
+
+   (1) `texi2dvi' uses TeX to do the real work of formatting. TeX is
+not distributed with Texinfo.
+
+
+File: make.info,  Node: Install Command Categories,  Prev: Standard Targets,  Up: Makefile Conventions
+
+14.6 Install Command Categories
+===============================
+
+When writing the `install' target, you must classify all the commands
+into three categories: normal ones, "pre-installation" commands and
+"post-installation" commands.
+
+   Normal commands move files into their proper places, and set their
+modes.  They may not alter any files except the ones that come entirely
+from the package they belong to.
+
+   Pre-installation and post-installation commands may alter other
+files; in particular, they can edit global configuration files or data
+bases.
+
+   Pre-installation commands are typically executed before the normal
+commands, and post-installation commands are typically run after the
+normal commands.
+
+   The most common use for a post-installation command is to run
+`install-info'.  This cannot be done with a normal command, since it
+alters a file (the Info directory) which does not come entirely and
+solely from the package being installed.  It is a post-installation
+command because it needs to be done after the normal command which
+installs the package's Info files.
+
+   Most programs don't need any pre-installation commands, but we have
+the feature just in case it is needed.
+
+   To classify the commands in the `install' rule into these three
+categories, insert "category lines" among them.  A category line
+specifies the category for the commands that follow.
+
+   A category line consists of a tab and a reference to a special Make
+variable, plus an optional comment at the end.  There are three
+variables you can use, one for each category; the variable name
+specifies the category.  Category lines are no-ops in ordinary execution
+because these three Make variables are normally undefined (and you
+_should not_ define them in the makefile).
+
+   Here are the three possible category lines, each with a comment that
+explains what it means:
+
+             $(PRE_INSTALL)     # Pre-install commands follow.
+             $(POST_INSTALL)    # Post-install commands follow.
+             $(NORMAL_INSTALL)  # Normal commands follow.
+
+   If you don't use a category line at the beginning of the `install'
+rule, all the commands are classified as normal until the first category
+line.  If you don't use any category lines, all the commands are
+classified as normal.
+
+   These are the category lines for `uninstall':
+
+             $(PRE_UNINSTALL)     # Pre-uninstall commands follow.
+             $(POST_UNINSTALL)    # Post-uninstall commands follow.
+             $(NORMAL_UNINSTALL)  # Normal commands follow.
+
+   Typically, a pre-uninstall command would be used for deleting entries
+from the Info directory.
+
+   If the `install' or `uninstall' target has any dependencies which
+act as subroutines of installation, then you should start _each_
+dependency's commands with a category line, and start the main target's
+commands with a category line also.  This way, you can ensure that each
+command is placed in the right category regardless of which of the
+dependencies actually run.
+
+   Pre-installation and post-installation commands should not run any
+programs except for these:
+
+     [ basename bash cat chgrp chmod chown cmp cp dd diff echo
+     egrep expand expr false fgrep find getopt grep gunzip gzip
+     hostname install install-info kill ldconfig ln ls md5sum
+     mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee
+     test touch true uname xargs yes
+
+   The reason for distinguishing the commands in this way is for the
+sake of making binary packages.  Typically a binary package contains
+all the executables and other files that need to be installed, and has
+its own method of installing them--so it does not need to run the normal
+installation commands.  But installing the binary package does need to
+execute the pre-installation and post-installation commands.
+
+   Programs to build binary packages work by extracting the
+pre-installation and post-installation commands.  Here is one way of
+extracting the pre-installation commands:
+
+     make -n install -o all \
+           PRE_INSTALL=pre-install \
+           POST_INSTALL=post-install \
+           NORMAL_INSTALL=normal-install \
+       | gawk -f pre-install.awk
+
+where the file `pre-install.awk' could contain this:
+
+     $0 ~ /^\t[ \t]*(normal_install|post_install)[ \t]*$/ {on = 0}
+     on {print $0}
+     $0 ~ /^\t[ \t]*pre_install[ \t]*$/ {on = 1}
+
+   The resulting file of pre-installation commands is executed as a
+shell script as part of installing the binary package.
+
+
+File: make.info,  Node: Quick Reference,  Next: Error Messages,  Prev: Makefile Conventions,  Up: Top
+
+Appendix A Quick Reference
+**************************
+
+This appendix summarizes the directives, text manipulation functions,
+and special variables which GNU `make' understands.  *Note Special
+Targets::, *Note Catalogue of Implicit Rules: Catalogue of Rules, and
+*Note Summary of Options: Options Summary, for other summaries.
+
+   Here is a summary of the directives GNU `make' recognizes:
+
+`define VARIABLE'
+`endef'
+     Define a multi-line, recursively-expanded variable.
+     *Note Sequences::.
+
+`ifdef VARIABLE'
+`ifndef VARIABLE'
+`ifeq (A,B)'
+`ifeq "A" "B"'
+`ifeq 'A' 'B''
+`ifneq (A,B)'
+`ifneq "A" "B"'
+`ifneq 'A' 'B''
+`else'
+`endif'
+     Conditionally evaluate part of the makefile.
+     *Note Conditionals::.
+
+`include FILE'
+`-include FILE'
+`sinclude FILE'
+     Include another makefile.
+     *Note Including Other Makefiles: Include.
+
+`override VARIABLE = VALUE'
+`override VARIABLE := VALUE'
+`override VARIABLE += VALUE'
+`override VARIABLE ?= VALUE'
+`override define VARIABLE'
+`endef'
+     Define a variable, overriding any previous definition, even one
+     from the command line.
+     *Note The `override' Directive: Override Directive.
+
+`export'
+     Tell `make' to export all variables to child processes by default.
+     *Note Communicating Variables to a Sub-`make': Variables/Recursion.
+
+`export VARIABLE'
+`export VARIABLE = VALUE'
+`export VARIABLE := VALUE'
+`export VARIABLE += VALUE'
+`export VARIABLE ?= VALUE'
+`unexport VARIABLE'
+     Tell `make' whether or not to export a particular variable to child
+     processes.
+     *Note Communicating Variables to a Sub-`make': Variables/Recursion.
+
+`vpath PATTERN PATH'
+     Specify a search path for files matching a `%' pattern.
+     *Note The `vpath' Directive: Selective Search.
+
+`vpath PATTERN'
+     Remove all search paths previously specified for PATTERN.
+
+`vpath'
+     Remove all search paths previously specified in any `vpath'
+     directive.
+
+   Here is a summary of the text manipulation functions (*note
+Functions::):
+
+`$(subst FROM,TO,TEXT)'
+     Replace FROM with TO in TEXT.
+     *Note Functions for String Substitution and Analysis: Text
+     Functions.
+
+`$(patsubst PATTERN,REPLACEMENT,TEXT)'
+     Replace words matching PATTERN with REPLACEMENT in TEXT.
+     *Note Functions for String Substitution and Analysis: Text
+     Functions.
+
+`$(strip STRING)'
+     Remove excess whitespace characters from STRING.
+     *Note Functions for String Substitution and Analysis: Text
+     Functions.
+
+`$(findstring FIND,TEXT)'
+     Locate FIND in TEXT.
+     *Note Functions for String Substitution and Analysis: Text
+     Functions.
+
+`$(filter PATTERN...,TEXT)'
+     Select words in TEXT that match one of the PATTERN words.
+     *Note Functions for String Substitution and Analysis: Text
+     Functions.
+
+`$(filter-out PATTERN...,TEXT)'
+     Select words in TEXT that _do not_ match any of the PATTERN words.
+     *Note Functions for String Substitution and Analysis: Text
+     Functions.
+
+`$(sort LIST)'
+     Sort the words in LIST lexicographically, removing duplicates.
+     *Note Functions for String Substitution and Analysis: Text
+     Functions.
+
+`$(dir NAMES...)'
+     Extract the directory part of each file name.
+     *Note Functions for File Names: File Name Functions.
+
+`$(notdir NAMES...)'
+     Extract the non-directory part of each file name.
+     *Note Functions for File Names: File Name Functions.
+
+`$(suffix NAMES...)'
+     Extract the suffix (the last `.' and following characters) of each
+     file name.
+     *Note Functions for File Names: File Name Functions.
+
+`$(basename NAMES...)'
+     Extract the base name (name without suffix) of each file name.
+     *Note Functions for File Names: File Name Functions.
+
+`$(addsuffix SUFFIX,NAMES...)'
+     Append SUFFIX to each word in NAMES.
+     *Note Functions for File Names: File Name Functions.
+
+`$(addprefix PREFIX,NAMES...)'
+     Prepend PREFIX to each word in NAMES.
+     *Note Functions for File Names: File Name Functions.
+
+`$(join LIST1,LIST2)'
+     Join two parallel lists of words.
+     *Note Functions for File Names: File Name Functions.
+
+`$(word N,TEXT)'
+     Extract the Nth word (one-origin) of TEXT.
+     *Note Functions for File Names: File Name Functions.
+
+`$(words TEXT)'
+     Count the number of words in TEXT.
+     *Note Functions for File Names: File Name Functions.
+
+`$(wordlist S,E,TEXT)'
+     Returns the list of words in TEXT from S to E.
+     *Note Functions for File Names: File Name Functions.
+
+`$(firstword NAMES...)'
+     Extract the first word of NAMES.
+     *Note Functions for File Names: File Name Functions.
+
+`$(wildcard PATTERN...)'
+     Find file names matching a shell file name pattern (_not_ a `%'
+     pattern).
+     *Note The Function `wildcard': Wildcard Function.
+
+`$(error TEXT...)'
+     When this function is evaluated, `make' generates a fatal error
+     with the message TEXT.
+     *Note Functions That Control Make: Make Control Functions.
+
+`$(warning TEXT...)'
+     When this function is evaluated, `make' generates a warning with
+     the message TEXT.
+     *Note Functions That Control Make: Make Control Functions.
+
+`$(shell COMMAND)'
+     Execute a shell command and return its output.
+     *Note The `shell' Function: Shell Function.
+
+`$(origin VARIABLE)'
+     Return a string describing how the `make' variable VARIABLE was
+     defined.
+     *Note The `origin' Function: Origin Function.
+
+`$(foreach VAR,WORDS,TEXT)'
+     Evaluate TEXT with VAR bound to each word in WORDS, and
+     concatenate the results.
+     *Note The `foreach' Function: Foreach Function.
+
+`$(call VAR,PARAM,...)'
+     Evaluate the variable VAR replacing any references to `$(1)',
+     `$(2)' with the first, second, etc. PARAM values.
+     *Note The `call' Function: Call Function.
+
+   Here is a summary of the automatic variables.  *Note Automatic
+Variables: Automatic, for full information.
+
+`$@'
+     The file name of the target.
+
+`$%'
+     The target member name, when the target is an archive member.
+
+`$<'
+     The name of the first prerequisite.
+
+`$?'
+     The names of all the prerequisites that are newer than the target,
+     with spaces between them.  For prerequisites which are archive
+     members, only the member named is used (*note Archives::).
+
+`$^'
+`$+'
+     The names of all the prerequisites, with spaces between them.  For
+     prerequisites which are archive members, only the member named is
+     used (*note Archives::).  The value of `$^' omits duplicate
+     prerequisites, while `$+' retains them and preserves their order.
+
+`$*'
+     The stem with which an implicit rule matches (*note How Patterns
+     Match: Pattern Match.).
+
+`$(@D)'
+`$(@F)'
+     The directory part and the file-within-directory part of `$@'.
+
+`$(*D)'
+`$(*F)'
+     The directory part and the file-within-directory part of `$*'.
+
+`$(%D)'
+`$(%F)'
+     The directory part and the file-within-directory part of `$%'.
+
+`$(<D)'
+`$(<F)'
+     The directory part and the file-within-directory part of `$<'.
+
+`$(^D)'
+`$(^F)'
+     The directory part and the file-within-directory part of `$^'.
+
+`$(+D)'
+`$(+F)'
+     The directory part and the file-within-directory part of `$+'.
+
+`$(?D)'
+`$(?F)'
+     The directory part and the file-within-directory part of `$?'.
+
+   These variables are used specially by GNU `make':
+
+`MAKEFILES'
+     Makefiles to be read on every invocation of `make'.
+     *Note The Variable `MAKEFILES': MAKEFILES Variable.
+
+`VPATH'
+     Directory search path for files not found in the current directory.
+     *Note `VPATH' Search Path for All Prerequisites: General Search.
+
+`SHELL'
+     The name of the system default command interpreter, usually
+     `/bin/sh'.  You can set `SHELL' in the makefile to change the
+     shell used to run commands.  *Note Command Execution: Execution.
+
+`MAKESHELL'
+     On MS-DOS only, the name of the command interpreter that is to be
+     used by `make'. This value takes precedence over the value of
+     `SHELL'.  *Note MAKESHELL variable: Execution.
+
+`MAKE'
+     The name with which `make' was invoked.  Using this variable in
+     commands has special meaning.  *Note How the `MAKE' Variable
+     Works: MAKE Variable.
+
+`MAKELEVEL'
+     The number of levels of recursion (sub-`make's).
+     *Note Variables/Recursion::.
+
+`MAKEFLAGS'
+     The flags given to `make'.  You can set this in the environment or
+     a makefile to set flags.
+     *Note Communicating Options to a Sub-`make': Options/Recursion.
+
+     It is _never_ appropriate to use `MAKEFLAGS' directly on a command
+     line: its contents may not be quoted correctly for use in the
+     shell.  Always allow recursive `make''s to obtain these values
+     through the environment from its parent.
+
+`MAKECMDGOALS'
+     The targets given to `make' on the command line.  Setting this
+     variable has no effect on the operation of `make'.
+     *Note Arguments to Specify the Goals: Goals.
+
+`CURDIR'
+     Set to the pathname of the current working directory (after all
+     `-C' options are processed, if any).  Setting this variable has no
+     effect on the operation of `make'.
+     *Note Recursive Use of `make': Recursion.
+
+`SUFFIXES'
+     The default list of suffixes before `make' reads any makefiles.
+
+`.LIBPATTERNS'
+     Defines the naming of the libraries `make' searches for, and their
+     order.
+     *Note Directory Search for Link Libraries: Libraries/Search.
+
+
+File: make.info,  Node: Error Messages,  Next: Complex Makefile,  Prev: Quick Reference,  Up: Top
+
+Appendix B Errors Generated by Make
+***********************************
+
+Here is a list of the more common errors you might see generated by
+`make', and some information about what they mean and how to fix them.
+
+   Sometimes `make' errors are not fatal, especially in the presence of
+a `-' prefix on a command script line, or the `-k' command line option.
+Errors that are fatal are prefixed with the string `***'.
+
+   Error messages are all either prefixed with the name of the program
+(usually `make'), or, if the error is found in a makefile, the name of
+the file and linenumber containing the problem.
+
+   In the table below, these common prefixes are left off.
+
+`[FOO] Error NN'
+`[FOO] SIGNAL DESCRIPTION'
+     These errors are not really `make' errors at all.  They mean that a
+     program that `make' invoked as part of a command script returned a
+     non-0 error code (`Error NN'), which `make' interprets as failure,
+     or it exited in some other abnormal fashion (with a signal of some
+     type).  *Note Errors in Commands: Errors.
+
+     If no `***' is attached to the message, then the subprocess failed
+     but the rule in the makefile was prefixed with the `-' special
+     character, so `make' ignored the error.
+
+`missing separator.  Stop.'
+`missing separator (did you mean TAB instead of 8 spaces?).  Stop.'
+     This means that `make' could not understand much of anything about
+     the command line it just read.  GNU `make' looks for various kinds
+     of separators (`:', `=', TAB characters, etc.) to help it decide
+     what kind of commandline it's seeing.  This means it couldn't find
+     a valid one.
+
+     One of the most common reasons for this message is that you (or
+     perhaps your oh-so-helpful editor, as is the case with many
+     MS-Windows editors) have attempted to indent your command scripts
+     with spaces instead of a TAB character.  In this case, `make' will
+     use the second form of the error above.  Remember that every line
+     in the command script must begin with a TAB character.  Eight
+     spaces do not count.  *Note Rule Syntax::.
+
+`commands commence before first target.  Stop.'
+`missing rule before commands.  Stop.'
+     This means the first thing in the makefile seems to be part of a
+     command script: it begins with a TAB character and doesn't appear
+     to be a legal `make' command (such as a variable assignment).
+     Command scripts must always be associated with a target.
+
+     The second form is generated if the line has a semicolon as the
+     first non-whitespace character; `make' interprets this to mean you
+     left out the "target: prerequisite" section of a rule.  *Note Rule
+     Syntax::.
+
+`No rule to make target `XXX'.'
+`No rule to make target `XXX', needed by `YYY'.'
+     This means that `make' decided it needed to build a target, but
+     then couldn't find any instructions in the makefile on how to do
+     that, either explicit or implicit (including in the default rules
+     database).
+
+     If you want that file to be built, you will need to add a rule to
+     your makefile describing how that target can be built.  Other
+     possible sources of this problem are typos in the makefile (if
+     that filename is wrong) or a corrupted source tree (if that file
+     is not supposed to be built, but rather only a prerequisite).
+
+`No targets specified and no makefile found.  Stop.'
+`No targets.  Stop.'
+     The former means that you didn't provide any targets to be built
+     on the command line, and `make' couldn't find any makefiles to
+     read in.  The latter means that some makefile was found, but it
+     didn't contain any default target and none was given on the
+     command line.  GNU `make' has nothing to do in these situations.
+     *Note Arguments to Specify the Makefile: Makefile Arguments.
+
+`Makefile `XXX' was not found.'
+`Included makefile `XXX' was not found.'
+     A makefile specified on the command line (first form) or included
+     (second form) was not found.
+
+`warning: overriding commands for target `XXX''
+`warning: ignoring old commands for target `XXX''
+     GNU `make' allows commands to be specified only once per target
+     (except for double-colon rules).  If you give commands for a target
+     which already has been defined to have commands, this warning is
+     issued and the second set of commands will overwrite the first set.
+     *Note Multiple Rules for One Target: Multiple Rules.
+
+`Circular XXX <- YYY dependency dropped.'
+     This means that `make' detected a loop in the dependency graph:
+     after tracing the prerequisite YYY of target XXX, and its
+     prerequisites, etc., one of them depended on XXX again.
+
+`Recursive variable `XXX' references itself (eventually).  Stop.'
+     This means you've defined a normal (recursive) `make' variable XXX
+     that, when it's expanded, will refer to itself (XXX).  This is not
+     allowed; either use simply-expanded variables (`:=') or use the
+     append operator (`+=').  *Note How to Use Variables: Using
+     Variables.
+
+`Unterminated variable reference.  Stop.'
+     This means you forgot to provide the proper closing parenthesis or
+     brace in your variable or function reference.
+
+`insufficient arguments to function `XXX'.  Stop.'
+     This means you haven't provided the requisite number of arguments
+     for this function.  See the documentation of the function for a
+     description of its arguments.  *Note Functions for Transforming
+     Text: Functions.
+
+`missing target pattern.  Stop.'
+`multiple target patterns.  Stop.'
+`target pattern contains no `%'.  Stop.'
+`mixed implicit and static pattern rules.  Stop.'
+     These are generated for malformed static pattern rules.  The first
+     means there's no pattern in the target section of the rule; the
+     second means there are multiple patterns in the target section;
+     the third means the target doesn't contain a pattern character
+     (`%'); and the fourth means that all three parts of the static
+     pattern rule contain pattern characters (`%')-only the first two
+     parts should.  *Note Syntax of Static Pattern Rules: Static Usage.
+
+`warning: -jN forced in submake: disabling jobserver mode.'
+     This warning and the next are generated if `make' detects error
+     conditions related to parallel processing on systems where
+     sub-`make's can communicate (*note Communicating Options to a
+     Sub-`make': Options/Recursion.).  This warning is generated if a
+     recursive invocation of a `make' process is forced to have `-jN'
+     in its argument list (where N is greater than one).  This could
+     happen, for example, if you set the `MAKE' environment variable to
+     `make -j2'.  In this case, the sub-`make' doesn't communicate with
+     other `make' processes and will simply pretend it has two jobs of
+     its own.
+
+`warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.'
+     In order for `make' processes to communicate, the parent will pass
+     information to the child.  Since this could result in problems if
+     the child process isn't actually a `make', the parent will only do
+     this if it thinks the child is a `make'.  The parent uses the
+     normal algorithms to determine this (*note How the `MAKE' Variable
+     Works: MAKE Variable.).  If the makefile is constructed such that
+     the parent doesn't know the child is a `make' process, then the
+     child will receive only part of the information necessary.  In
+     this case, the child will generate this warning message and
+     proceed with its build in a sequential manner.
+
+
+
+File: make.info,  Node: Complex Makefile,  Next: GNU Free Documentation License,  Prev: Error Messages,  Up: Top
+
+Appendix C Complex Makefile Example
+***********************************
+
+Here is the makefile for the GNU `tar' program.  This is a moderately
+complex makefile.
+
+   Because it is the first target, the default goal is `all'.  An
+interesting feature of this makefile is that `testpad.h' is a source
+file automatically created by the `testpad' program, itself compiled
+from `testpad.c'.
+
+   If you type `make' or `make all', then `make' creates the `tar'
+executable, the `rmt' daemon that provides remote tape access, and the
+`tar.info' Info file.
+
+   If you type `make install', then `make' not only creates `tar',
+`rmt', and `tar.info', but also installs them.
+
+   If you type `make clean', then `make' removes the `.o' files, and
+the `tar', `rmt', `testpad', `testpad.h', and `core' files.
+
+   If you type `make distclean', then `make' not only removes the same
+files as does `make clean' but also the `TAGS', `Makefile', and
+`config.status' files.  (Although it is not evident, this makefile (and
+`config.status') is generated by the user with the `configure' program,
+which is provided in the `tar' distribution, but is not shown here.)
+
+   If you type `make realclean', then `make' removes the same files as
+does `make distclean' and also removes the Info files generated from
+`tar.texinfo'.
+
+   In addition, there are targets `shar' and `dist' that create
+distribution kits.
+
+     # Generated automatically from Makefile.in by configure.
+     # Un*x Makefile for GNU tar program.
+     # Copyright (C) 1991 Free Software Foundation, Inc.
+
+     # This program is free software; you can redistribute
+     # it and/or modify it under the terms of the GNU
+     # General Public License ...
+     ...
+     ...
+
+     SHELL = /bin/sh
+
+     #### Start of system configuration section. ####
+
+     srcdir = .
+
+     # If you use gcc, you should either run the
+     # fixincludes script that comes with it or else use
+     # gcc with the -traditional option.  Otherwise ioctl
+     # calls will be compiled incorrectly on some systems.
+     CC = gcc -O
+     YACC = bison -y
+     INSTALL = /usr/local/bin/install -c
+     INSTALLDATA = /usr/local/bin/install -c -m 644
+
+     # Things you might add to DEFS:
+     # -DSTDC_HEADERS        If you have ANSI C headers and
+     #                       libraries.
+     # -DPOSIX               If you have POSIX.1 headers and
+     #                       libraries.
+     # -DBSD42               If you have sys/dir.h (unless
+     #                       you use -DPOSIX), sys/file.h,
+     #                       and st_blocks in `struct stat'.
+     # -DUSG                 If you have System V/ANSI C
+     #                       string and memory functions
+     #                       and headers, sys/sysmacros.h,
+     #                       fcntl.h, getcwd, no valloc,
+     #                       and ndir.h (unless
+     #                       you use -DDIRENT).
+     # -DNO_MEMORY_H         If USG or STDC_HEADERS but do not
+     #                       include memory.h.
+     # -DDIRENT              If USG and you have dirent.h
+     #                       instead of ndir.h.
+     # -DSIGTYPE=int         If your signal handlers
+     #                       return int, not void.
+     # -DNO_MTIO             If you lack sys/mtio.h
+     #                       (magtape ioctls).
+     # -DNO_REMOTE           If you do not have a remote shell
+     #                       or rexec.
+     # -DUSE_REXEC           To use rexec for remote tape
+     #                       operations instead of
+     #                       forking rsh or remsh.
+     # -DVPRINTF_MISSING     If you lack vprintf function
+     #                       (but have _doprnt).
+     # -DDOPRNT_MISSING      If you lack _doprnt function.
+     #                       Also need to define
+     #                       -DVPRINTF_MISSING.
+     # -DFTIME_MISSING       If you lack ftime system call.
+     # -DSTRSTR_MISSING      If you lack strstr function.
+     # -DVALLOC_MISSING      If you lack valloc function.
+     # -DMKDIR_MISSING       If you lack mkdir and
+     #                       rmdir system calls.
+     # -DRENAME_MISSING      If you lack rename system call.
+     # -DFTRUNCATE_MISSING   If you lack ftruncate
+     #                       system call.
+     # -DV7                  On Version 7 Unix (not
+     #                       tested in a long time).
+     # -DEMUL_OPEN3          If you lack a 3-argument version
+     #                       of open, and want to emulate it
+     #                       with system calls you do have.
+     # -DNO_OPEN3            If you lack the 3-argument open
+     #                       and want to disable the tar -k
+     #                       option instead of emulating open.
+     # -DXENIX               If you have sys/inode.h
+     #                       and need it 94 to be included.
+
+     DEFS =  -DSIGTYPE=int -DDIRENT -DSTRSTR_MISSING \
+             -DVPRINTF_MISSING -DBSD42
+     # Set this to rtapelib.o unless you defined NO_REMOTE,
+     # in which case make it empty.
+     RTAPELIB = rtapelib.o
+     LIBS =
+     DEF_AR_FILE = /dev/rmt8
+     DEFBLOCKING = 20
+
+     CDEBUG = -g
+     CFLAGS = $(CDEBUG) -I. -I$(srcdir) $(DEFS) \
+             -DDEF_AR_FILE=\"$(DEF_AR_FILE)\" \
+             -DDEFBLOCKING=$(DEFBLOCKING)
+     LDFLAGS = -g
+
+     prefix = /usr/local
+     # Prefix for each installed program,
+     # normally empty or `g'.
+     binprefix =
+
+     # The directory to install tar in.
+     bindir = $(prefix)/bin
+
+     # The directory to install the info files in.
+     infodir = $(prefix)/info
+
+     #### End of system configuration section. ####
+
+     SRC1 =  tar.c create.c extract.c buffer.c \
+             getoldopt.c update.c gnu.c mangle.c
+     SRC2 =  version.c list.c names.c diffarch.c \
+             port.c wildmat.c getopt.c
+     SRC3 =  getopt1.c regex.c getdate.y
+     SRCS =  $(SRC1) $(SRC2) $(SRC3)
+     OBJ1 =  tar.o create.o extract.o buffer.o \
+             getoldopt.o update.o gnu.o mangle.o
+     OBJ2 =  version.o list.o names.o diffarch.o \
+             port.o wildmat.o getopt.o
+     OBJ3 =  getopt1.o regex.o getdate.o $(RTAPELIB)
+     OBJS =  $(OBJ1) $(OBJ2) $(OBJ3)
+     AUX =   README COPYING ChangeLog Makefile.in  \
+             makefile.pc configure configure.in \
+             tar.texinfo tar.info* texinfo.tex \
+             tar.h port.h open3.h getopt.h regex.h \
+             rmt.h rmt.c rtapelib.c alloca.c \
+             msd_dir.h msd_dir.c tcexparg.c \
+             level-0 level-1 backup-specs testpad.c
+
+     all:    tar rmt tar.info
+
+     tar:    $(OBJS)
+             $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
+
+     rmt:    rmt.c
+             $(CC) $(CFLAGS) $(LDFLAGS) -o $@ rmt.c
+
+     tar.info: tar.texinfo
+             makeinfo tar.texinfo
+
+     install: all
+             $(INSTALL) tar $(bindir)/$(binprefix)tar
+             -test ! -f rmt || $(INSTALL) rmt /etc/rmt
+             $(INSTALLDATA) $(srcdir)/tar.info* $(infodir)
+
+     $(OBJS): tar.h port.h testpad.h
+     regex.o buffer.o tar.o: regex.h
+     # getdate.y has 8 shift/reduce conflicts.
+
+     testpad.h: testpad
+             ./testpad
+
+     testpad: testpad.o
+             $(CC) -o $@ testpad.o
+
+     TAGS:   $(SRCS)
+             etags $(SRCS)
+
+     clean:
+             rm -f *.o tar rmt testpad testpad.h core
+
+     distclean: clean
+             rm -f TAGS Makefile config.status
+
+     realclean: distclean
+             rm -f tar.info*
+
+     shar: $(SRCS) $(AUX)
+             shar $(SRCS) $(AUX) | compress \
+               > tar-`sed -e '/version_string/!d' \
+                          -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
+                          -e q
+                          version.c`.shar.Z
+
+     dist: $(SRCS) $(AUX)
+             echo tar-`sed \
+                  -e '/version_string/!d' \
+                  -e 's/[^0-9.]*\([0-9.]*\).*/\1/' \
+                  -e q
+                  version.c` > .fname
+             -rm -rf `cat .fname`
+             mkdir `cat .fname`
+             ln $(SRCS) $(AUX) `cat .fname`
+             tar chZf `cat .fname`.tar.Z `cat .fname`
+             -rm -rf `cat .fname` .fname
+
+     tar.zoo: $(SRCS) $(AUX)
+             -rm -rf tmp.dir
+             -mkdir tmp.dir
+             -rm tar.zoo
+             for X in $(SRCS) $(AUX) ; do \
+                 echo $$X ; \
+                 sed 's/$$/^M/' $$X \
+                 > tmp.dir/$$X ; done
+             cd tmp.dir ; zoo aM ../tar.zoo *
+             -rm -rf tmp.dir
+
+
+File: make.info,  Node: GNU Free Documentation License,  Next: Concept Index,  Prev: Complex Makefile,  Up: Top
+
+Appendix D GNU Free Documentation License
+*****************************************
+
+                        Version 1.1, March 2000
+
+     Copyright (C) 2000 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     written document "free" in the sense of freedom: to assure everyone
+     the effective freedom to copy and redistribute it, with or without
+     modifying it, either commercially or noncommercially.  Secondarily,
+     this License preserves for the author and publisher a way to get
+     credit for their work, while not being considered responsible for
+     modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work that contains a
+     notice placed by the copyright holder saying it can be distributed
+     under the terms of this License.  The "Document", below, refers to
+     any such manual or work.  Any member of the public is a licensee,
+     and is addressed as "you".
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter
+     section of the Document that deals exclusively with the
+     relationship of the publishers or authors of the Document to the
+     Document's overall subject (or to related matters) and contains
+     nothing that could fall directly within that overall subject.
+     (For example, if the Document is in part a textbook of
+     mathematics, a Secondary Section may not explain any mathematics.)
+     The relationship could be a matter of historical connection with
+     the subject or with related matters, or of legal, commercial,
+     philosophical, ethical or political position regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in
+     the notice that says that the Document is released under this
+     License.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, whose contents can be viewed and edited directly
+     and straightforwardly with generic text editors or (for images
+     composed of pixels) generic paint programs or (for drawings) some
+     widely available drawing editor, and that is suitable for input to
+     text formatters or for automatic translation to a variety of
+     formats suitable for input to text formatters.  A copy made in an
+     otherwise Transparent file format whose markup has been designed
+     to thwart or discourage subsequent modification by readers is not
+     Transparent.  A copy that is not "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and
+     standard-conforming simple HTML designed for human modification.
+     Opaque formats include PostScript, PDF, proprietary formats that
+     can be read and edited only by proprietary word processors, SGML
+     or XML for which the DTD and/or processing tools are not generally
+     available, and the machine-generated HTML produced by some word
+     processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow
+     the conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies of the Document numbering more than
+     100, and the Document's license notice requires Cover Texts, you
+     must enclose the copies in covers that carry, clearly and legibly,
+     all these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the
+     title equally prominent and visible.  You may add other material
+     on the covers in addition.  Copying with changes limited to the
+     covers, as long as they preserve the title of the Document and
+     satisfy these conditions, can be treated as verbatim copying in
+     other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a
+     machine-readable Transparent copy along with each Opaque copy, or
+     state in or with each Opaque copy a publicly-accessible
+     computer-network location containing a complete Transparent copy
+     of the Document, free of added material, which the general
+     network-using public has access to download anonymously at no
+     charge using public-standard network protocols.  If you use the
+     latter option, you must take reasonably prudent steps, when you
+     begin distribution of Opaque copies in quantity, to ensure that
+     this Transparent copy will remain thus accessible at the stated
+     location until at least one year after the last time you
+     distribute an Opaque copy (directly or through your agents or
+     retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of
+     copies, to give them a chance to provide you with an updated
+     version of the Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with
+     the Modified Version filling the role of the Document, thus
+     licensing distribution and modification of the Modified Version to
+     whoever possesses a copy of it.  In addition, you must do these
+     things in the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of
+          previous versions (which should, if there were any, be listed
+          in the History section of the Document).  You may use the
+          same title as a previous version if the original publisher of
+          that version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has less than five).
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section entitled "History", and its title, and
+          add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on
+          the Title Page.  If there is no section entitled "History" in
+          the Document, create one stating the title, year, authors,
+          and publisher of the Document as given on its Title Page,
+          then add an item describing the Modified Version as stated in
+          the previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in
+          the "History" section.  You may omit a network location for a
+          work that was published at least four years before the
+          Document itself, or if the original publisher of the version
+          it refers to gives permission.
+
+       K. In any section entitled "Acknowledgments" or "Dedications",
+          preserve the section's title, and preserve in the section all
+          the substance and tone of each of the contributor
+          acknowledgments and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document,
+          unaltered in their text and in their titles.  Section numbers
+          or the equivalent are not considered part of the section
+          titles.
+
+       M. Delete any section entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section as "Endorsements" or to
+          conflict in title with any Invariant Section.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option
+     designate some or all of these sections as invariant.  To do this,
+     add their titles to the list of Invariant Sections in the Modified
+     Version's license notice.  These titles must be distinct from any
+     other section titles.
+
+     You may add a section entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end
+     of the list of Cover Texts in the Modified Version.  Only one
+     passage of Front-Cover Text and one of Back-Cover Text may be
+     added by (or through arrangements made by) any one entity.  If the
+     Document already includes a cover text for the same cover,
+     previously added by you or by arrangement made by the same entity
+     you are acting on behalf of, you may not add another; but you may
+     replace the old one, on explicit permission from the previous
+     publisher that added the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination
+     all of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections entitled
+     "History" in the various original documents, forming one section
+     entitled "History"; likewise combine any sections entitled
+     "Acknowledgments", and any sections entitled "Dedications".  You
+     must delete all sections entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the
+     documents in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow
+     this License in all other respects regarding verbatim copying of
+     that document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of
+     a storage or distribution medium, does not as a whole count as a
+     Modified Version of the Document, provided no compilation
+     copyright is claimed for the compilation.  Such a compilation is
+     called an "aggregate", and this License does not apply to the
+     other self-contained works thus compiled with the Document, on
+     account of their being thus compiled, if they are not themselves
+     derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one
+     quarter of the entire aggregate, the Document's Cover Texts may be
+     placed on covers that surround only the Document within the
+     aggregate.  Otherwise they must appear on covers around the whole
+     aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License provided that you also include the
+     original English version of this License.  In case of a
+     disagreement between the translation and the original English
+     version of this License, the original English version will prevail.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided for under this License.  Any other
+     attempt to copy, modify, sublicense or distribute the Document is
+     void, and will automatically terminate your rights under this
+     License.  However, parties who have received copies, or rights,
+     from you under this License will not have their licenses
+     terminated so long as such parties remain in full compliance.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation License from time to time.  Such new
+     versions will be similar in spirit to the present version, but may
+     differ in detail to address new problems or concerns.  See
+     `http://www.gnu.org/copyleft/'.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If
+     the Document does not specify a version number of this License,
+     you may choose any version ever published (not as a draft) by the
+     Free Software Foundation.
+
+D.1 ADDENDUM: How to use this License for your documents
+========================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.1
+       or any later version published by the Free Software Foundation;
+       with the Invariant Sections being LIST THEIR TITLES, with the
+       Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+       A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have no Invariant Sections, write "with no Invariant Sections"
+instead of saying which ones are invariant.  If you have no Front-Cover
+Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being
+LIST"; likewise for Back-Cover Texts.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: make.info,  Node: Concept Index,  Next: Name Index,  Prev: GNU Free Documentation License,  Up: Top
+
+Index of Concepts
+*****************
+
+[index]
 * Menu:
 
-* Rule Example::                An example explained.
-* Rule Syntax::                 General syntax explained.
-* Prerequisite Types::          There are two types of prerequisites.
-* Wildcards::                   Using wildcard characters such as `*'.
-* Directory Search::            Searching other directories for source files.
-* Phony Targets::               Using a target that is not a real file's name.
-* Force Targets::               You can use a target without commands
-                                  or prerequisites to mark other
-                                  targets as phony.
-* Empty Targets::               When only the date matters and the
-                                  files are empty.
-* Special Targets::             Targets with special built-in meanings.
-* Multiple Targets::            When to make use of several targets in a rule.
-* Multiple Rules::              How to use several rules with the same target.
-* Static Pattern::              Static pattern rules apply to multiple targets
-                                  and can vary the prerequisites according to
-                                  the target name.
-* Double-Colon::                How to use a special kind of rule to allow
-                                  several independent rules for one target.
-* Automatic Prerequisites::     How to automatically generate rules giving
-                                  prerequisites from source files themselves.
+* # (comments), in commands:             Commands.            (line  18)
+* # (comments), in makefile:             Makefile Contents.   (line  41)
+* #include:                              Automatic Prerequisites.
+                                                              (line  16)
+* $$@, support for:                      Automatic.           (line 151)
+* $, in function call:                   Syntax of Functions. (line   6)
+* $, in rules:                           Rule Syntax.         (line  31)
+* $, in variable name:                   Computed Names.      (line   6)
+* $, in variable reference:              Reference.           (line   6)
+* %, in pattern rules:                   Pattern Intro.       (line   9)
+* %, quoting in patsubst:                Text Functions.      (line  26)
+* %, quoting in static pattern:          Static Usage.        (line  37)
+* %, quoting in vpath:                   Selective Search.    (line  38)
+* %, quoting with \ (backslash) <1>:     Text Functions.      (line  26)
+* %, quoting with \ (backslash) <2>:     Selective Search.    (line  38)
+* %, quoting with \ (backslash):         Static Usage.        (line  37)
+* * (wildcard character):                Wildcards.           (line   6)
+* +, and command execution:              Instead of Execution.
+                                                              (line  58)
+* +, and commands:                       MAKE Variable.       (line  18)
+* +, and define:                         Sequences.           (line  50)
+* +=:                                    Appending.           (line   6)
+* +=, expansion:                         Reading Makefiles.   (line  33)
+* ,v (RCS file extension):               Catalogue of Rules.  (line 157)
+* - (in commands):                       Errors.              (line  19)
+* -, and define:                         Sequences.           (line  50)
+* --always-make:                         Options Summary.     (line  15)
+* --assume-new <1>:                      Options Summary.     (line 229)
+* --assume-new:                          Instead of Execution.
+                                                              (line  33)
+* --assume-new, and recursion:           Options/Recursion.   (line  22)
+* --assume-old <1>:                      Avoiding Compilation.
+                                                              (line   6)
+* --assume-old:                          Options Summary.     (line 134)
+* --assume-old, and recursion:           Options/Recursion.   (line  22)
+* --debug:                               Options Summary.     (line  38)
+* --directory <1>:                       Options Summary.     (line  22)
+* --directory:                           Recursion.           (line  20)
+* --directory, and --print-directory:    -w Option.           (line  20)
+* --directory, and recursion:            Options/Recursion.   (line  22)
+* --dry-run <1>:                         Echoing.             (line  18)
+* --dry-run <2>:                         Instead of Execution.
+                                                              (line  14)
+* --dry-run:                             Options Summary.     (line 127)
+* --environment-overrides:               Options Summary.     (line  74)
+* --file <1>:                            Options Summary.     (line  80)
+* --file <2>:                            Makefile Arguments.  (line   6)
+* --file:                                Makefile Names.      (line  23)
+* --file, and recursion:                 Options/Recursion.   (line  22)
+* --help:                                Options Summary.     (line  86)
+* --ignore-errors <1>:                   Errors.              (line  30)
+* --ignore-errors:                       Options Summary.     (line  90)
+* --include-dir <1>:                     Include.             (line  51)
+* --include-dir:                         Options Summary.     (line  95)
+* --jobs <1>:                            Parallel.            (line   6)
+* --jobs:                                Options Summary.     (line 102)
+* --jobs, and recursion:                 Options/Recursion.   (line  25)
+* --just-print <1>:                      Instead of Execution.
+                                                              (line  14)
+* --just-print <2>:                      Echoing.             (line  18)
+* --just-print:                          Options Summary.     (line 126)
+* --keep-going <1>:                      Options Summary.     (line 111)
+* --keep-going <2>:                      Testing.             (line  16)
+* --keep-going:                          Errors.              (line  47)
+* --load-average <1>:                    Options Summary.     (line 118)
+* --load-average:                        Parallel.            (line  57)
+* --makefile <1>:                        Options Summary.     (line  81)
+* --makefile <2>:                        Makefile Names.      (line  23)
+* --makefile:                            Makefile Arguments.  (line   6)
+* --max-load <1>:                        Options Summary.     (line 119)
+* --max-load:                            Parallel.            (line  57)
+* --new-file <1>:                        Options Summary.     (line 228)
+* --new-file:                            Instead of Execution.
+                                                              (line  33)
+* --new-file, and recursion:             Options/Recursion.   (line  22)
+* --no-builtin-rules:                    Options Summary.     (line 162)
+* --no-builtin-variables:                Options Summary.     (line 175)
+* --no-keep-going:                       Options Summary.     (line 190)
+* --no-print-directory <1>:              Options Summary.     (line 220)
+* --no-print-directory:                  -w Option.           (line  20)
+* --old-file <1>:                        Options Summary.     (line 133)
+* --old-file:                            Avoiding Compilation.
+                                                              (line   6)
+* --old-file, and recursion:             Options/Recursion.   (line  22)
+* --print-data-base:                     Options Summary.     (line 142)
+* --print-directory:                     Options Summary.     (line 212)
+* --print-directory, and --directory:    -w Option.           (line  20)
+* --print-directory, and recursion:      -w Option.           (line  20)
+* --print-directory, disabling:          -w Option.           (line  20)
+* --question <1>:                        Instead of Execution.
+                                                              (line  25)
+* --question:                            Options Summary.     (line 154)
+* --quiet <1>:                           Options Summary.     (line 185)
+* --quiet:                               Echoing.             (line  24)
+* --recon <1>:                           Instead of Execution.
+                                                              (line  14)
+* --recon <2>:                           Options Summary.     (line 128)
+* --recon:                               Echoing.             (line  18)
+* --silent <1>:                          Options Summary.     (line 184)
+* --silent:                              Echoing.             (line  24)
+* --stop:                                Options Summary.     (line 191)
+* --touch <1>:                           Instead of Execution.
+                                                              (line  19)
+* --touch:                               Options Summary.     (line 199)
+* --touch, and recursion:                MAKE Variable.       (line  30)
+* --version:                             Options Summary.     (line 207)
+* --warn-undefined-variables:            Options Summary.     (line 238)
+* --what-if <1>:                         Instead of Execution.
+                                                              (line  33)
+* --what-if:                             Options Summary.     (line 227)
+* -B:                                    Options Summary.     (line  14)
+* -b:                                    Options Summary.     (line   9)
+* -C <1>:                                Recursion.           (line  20)
+* -C:                                    Options Summary.     (line  21)
+* -C, and -w:                            -w Option.           (line  20)
+* -C, and recursion:                     Options/Recursion.   (line  22)
+* -d:                                    Options Summary.     (line  29)
+* -e:                                    Options Summary.     (line  73)
+* -e (shell flag):                       Automatic Prerequisites.
+                                                              (line  66)
+* -f <1>:                                Options Summary.     (line  79)
+* -f <2>:                                Makefile Arguments.  (line   6)
+* -f:                                    Makefile Names.      (line  23)
+* -f, and recursion:                     Options/Recursion.   (line  22)
+* -h:                                    Options Summary.     (line  85)
+* -i:                                    Options Summary.     (line  89)
+* -I:                                    Options Summary.     (line  94)
+* -i:                                    Errors.              (line  30)
+* -I:                                    Include.             (line  51)
+* -j <1>:                                Parallel.            (line   6)
+* -j:                                    Options Summary.     (line 101)
+* -j, and archive update:                Archive Pitfalls.    (line   6)
+* -j, and recursion:                     Options/Recursion.   (line  25)
+* -k <1>:                                Options Summary.     (line 110)
+* -k <2>:                                Testing.             (line  16)
+* -k:                                    Errors.              (line  47)
+* -l:                                    Options Summary.     (line 117)
+* -l (library search):                   Libraries/Search.    (line   6)
+* -l (load average):                     Parallel.            (line  57)
+* -m:                                    Options Summary.     (line  10)
+* -M (to compiler):                      Automatic Prerequisites.
+                                                              (line  18)
+* -MM (to GNU compiler):                 Automatic Prerequisites.
+                                                              (line  68)
+* -n <1>:                                Instead of Execution.
+                                                              (line  14)
+* -n <2>:                                Echoing.             (line  18)
+* -n:                                    Options Summary.     (line 125)
+* -o <1>:                                Options Summary.     (line 132)
+* -o:                                    Avoiding Compilation.
+                                                              (line   6)
+* -o, and recursion:                     Options/Recursion.   (line  22)
+* -p:                                    Options Summary.     (line 141)
+* -q <1>:                                Options Summary.     (line 153)
+* -q:                                    Instead of Execution.
+                                                              (line  25)
+* -R:                                    Options Summary.     (line 174)
+* -r:                                    Options Summary.     (line 161)
+* -s:                                    Echoing.             (line  24)
+* -S:                                    Options Summary.     (line 189)
+* -s:                                    Options Summary.     (line 183)
+* -t <1>:                                Options Summary.     (line 198)
+* -t:                                    Instead of Execution.
+                                                              (line  19)
+* -t, and recursion:                     MAKE Variable.       (line  30)
+* -v:                                    Options Summary.     (line 206)
+* -W:                                    Instead of Execution.
+                                                              (line  33)
+* -w:                                    Options Summary.     (line 211)
+* -W:                                    Options Summary.     (line 226)
+* -w, and -C:                            -w Option.           (line  20)
+* -W, and recursion:                     Options/Recursion.   (line  22)
+* -w, and recursion:                     -w Option.           (line  20)
+* -w, disabling:                         -w Option.           (line  20)
+* .a (archives):                         Archive Suffix Rules.
+                                                              (line   6)
+* .c:                                    Catalogue of Rules.  (line  29)
+* .C:                                    Catalogue of Rules.  (line  33)
+* .cc:                                   Catalogue of Rules.  (line  33)
+* .ch:                                   Catalogue of Rules.  (line 144)
+* .d:                                    Automatic Prerequisites.
+                                                              (line  81)
+* .def:                                  Catalogue of Rules.  (line  67)
+* .dvi:                                  Catalogue of Rules.  (line 144)
+* .f:                                    Catalogue of Rules.  (line  42)
+* .F:                                    Catalogue of Rules.  (line  42)
+* .info:                                 Catalogue of Rules.  (line 151)
+* .l:                                    Catalogue of Rules.  (line 117)
+* .LIBPATTERNS, and link libraries:      Libraries/Search.    (line   6)
+* .ln:                                   Catalogue of Rules.  (line 139)
+* .mod:                                  Catalogue of Rules.  (line  67)
+* .o:                                    Catalogue of Rules.  (line  29)
+* .p:                                    Catalogue of Rules.  (line  38)
+* .PRECIOUS intermediate files:          Chained Rules.       (line  56)
+* .r:                                    Catalogue of Rules.  (line  42)
+* .s:                                    Catalogue of Rules.  (line  72)
+* .S:                                    Catalogue of Rules.  (line  75)
+* .sh:                                   Catalogue of Rules.  (line 173)
+* .sym:                                  Catalogue of Rules.  (line  67)
+* .tex:                                  Catalogue of Rules.  (line 144)
+* .texi:                                 Catalogue of Rules.  (line 151)
+* .texinfo:                              Catalogue of Rules.  (line 151)
+* .txinfo:                               Catalogue of Rules.  (line 151)
+* .w:                                    Catalogue of Rules.  (line 144)
+* .web:                                  Catalogue of Rules.  (line 144)
+* .y:                                    Catalogue of Rules.  (line 113)
+* :: rules (double-colon):               Double-Colon.        (line   6)
+* := <1>:                                Flavors.             (line  56)
+* :=:                                    Setting.             (line   6)
+* = <1>:                                 Flavors.             (line  10)
+* =:                                     Setting.             (line   6)
+* =, expansion:                          Reading Makefiles.   (line  33)
+* ? (wildcard character):                Wildcards.           (line   6)
+* ?= <1>:                                Setting.             (line   6)
+* ?=:                                    Flavors.             (line 130)
+* ?=, expansion:                         Reading Makefiles.   (line  33)
+* @ (in commands):                       Echoing.             (line   6)
+* @, and define:                         Sequences.           (line  50)
+* [...] (wildcard characters):           Wildcards.           (line   6)
+* \ (backslash), for continuation lines: Simple Makefile.     (line  40)
+* \ (backslash), in commands:            Execution.           (line  20)
+* \ (backslash), to quote % <1>:         Selective Search.    (line  38)
+* \ (backslash), to quote % <2>:         Static Usage.        (line  37)
+* \ (backslash), to quote %:             Text Functions.      (line  26)
+* __.SYMDEF:                             Archive Symbols.     (line   6)
+* algorithm for directory search:        Search Algorithm.    (line   6)
+* all (standard target):                 Goals.               (line  69)
+* appending to variables:                Appending.           (line   6)
+* ar:                                    Implicit Variables.  (line  34)
+* archive:                               Archives.            (line   6)
+* archive member targets:                Archive Members.     (line   6)
+* archive symbol directory updating:     Archive Symbols.     (line   6)
+* archive, and -j:                       Archive Pitfalls.    (line   6)
+* archive, and parallel execution:       Archive Pitfalls.    (line   6)
+* archive, suffix rule for:              Archive Suffix Rules.
+                                                              (line   6)
+* Arg list too long:                     Options/Recursion.   (line  57)
+* arguments of functions:                Syntax of Functions. (line   6)
+* as <1>:                                Catalogue of Rules.  (line  72)
+* as:                                    Implicit Variables.  (line  37)
+* assembly, rule to compile:             Catalogue of Rules.  (line  72)
+* automatic generation of prerequisites <1>: Automatic Prerequisites.
+                                                              (line   6)
+* automatic generation of prerequisites: Include.             (line  49)
+* automatic variables:                   Automatic.           (line   6)
+* backquotes:                            Shell Function.      (line   6)
+* backslash (\), for continuation lines: Simple Makefile.     (line  40)
+* backslash (\), in commands:            Execution.           (line  20)
+* backslash (\), to quote % <1>:         Selective Search.    (line  38)
+* backslash (\), to quote % <2>:         Static Usage.        (line  37)
+* backslash (\), to quote %:             Text Functions.      (line  26)
+* backslashes in pathnames and wildcard expansion: Wildcard Pitfall.
+                                                              (line  31)
+* basename:                              File Name Functions. (line  57)
+* binary packages:                       Install Command Categories.
+                                                              (line  80)
+* broken pipe:                           Parallel.            (line  30)
+* bugs, reporting:                       Bugs.                (line   6)
+* built-in special targets:              Special Targets.     (line   6)
+* C++, rule to compile:                  Catalogue of Rules.  (line  33)
+* C, rule to compile:                    Catalogue of Rules.  (line  29)
+* cc <1>:                                Catalogue of Rules.  (line  29)
+* cc:                                    Implicit Variables.  (line  40)
+* cd (shell command) <1>:                MAKE Variable.       (line  16)
+* cd (shell command):                    Execution.           (line  10)
+* chains of rules:                       Chained Rules.       (line   6)
+* check (standard target):               Goals.               (line 111)
+* clean (standard target):               Goals.               (line  72)
+* clean target <1>:                      Cleanup.             (line  11)
+* clean target:                          Simple Makefile.     (line  83)
+* cleaning up:                           Cleanup.             (line   6)
+* clobber (standard target):             Goals.               (line  83)
+* co <1>:                                Catalogue of Rules.  (line 157)
+* co:                                    Implicit Variables.  (line  46)
+* combining rules by prerequisite:       Combine By Prerequisite.
+                                                              (line   6)
+* command line variable definitions, and recursion: Options/Recursion.
+                                                              (line  17)
+* command line variables:                Overriding.          (line   6)
+* commands:                              Rule Syntax.         (line  26)
+* commands, backslash (\) in:            Execution.           (line  20)
+* commands, comments in:                 Commands.            (line  18)
+* commands, echoing:                     Echoing.             (line   6)
+* commands, empty:                       Empty Commands.      (line   6)
+* commands, errors in:                   Errors.              (line   6)
+* commands, execution:                   Execution.           (line   6)
+* commands, execution in parallel:       Parallel.            (line   6)
+* commands, expansion:                   Shell Function.      (line   6)
+* commands, how to write:                Commands.            (line   6)
+* commands, instead of executing:        Instead of Execution.
+                                                              (line   6)
+* commands, introduction to:             Rule Introduction.   (line   8)
+* commands, quoting newlines in:         Execution.           (line  20)
+* commands, sequences of:                Sequences.           (line   6)
+* comments, in commands:                 Commands.            (line  18)
+* comments, in makefile:                 Makefile Contents.   (line  41)
+* compatibility:                         Features.            (line   6)
+* compatibility in exporting:            Variables/Recursion. (line 100)
+* compilation, testing:                  Testing.             (line   6)
+* computed variable name:                Computed Names.      (line   6)
+* conditional expansion:                 If Function.         (line   6)
+* conditional variable assignment:       Flavors.             (line 130)
+* conditionals:                          Conditionals.        (line   6)
+* continuation lines:                    Simple Makefile.     (line  40)
+* controlling make:                      Make Control Functions.
+                                                              (line   6)
+* conventions for makefiles:             Makefile Conventions.
+                                                              (line   6)
+* ctangle <1>:                           Implicit Variables.  (line  95)
+* ctangle:                               Catalogue of Rules.  (line 144)
+* cweave <1>:                            Catalogue of Rules.  (line 144)
+* cweave:                                Implicit Variables.  (line  89)
+* data base of make rules:               Options Summary.     (line 142)
+* deducing commands (implicit rules):    make Deduces.        (line   6)
+* default directories for included makefiles: Include.        (line  51)
+* default goal <1>:                      Rules.               (line  11)
+* default goal:                          How Make Works.      (line   9)
+* default makefile name:                 Makefile Names.      (line   6)
+* default rules, last-resort:            Last Resort.         (line   6)
+* define, expansion:                     Reading Makefiles.   (line  33)
+* defining variables verbatim:           Defining.            (line   6)
+* deletion of target files <1>:          Errors.              (line  64)
+* deletion of target files:              Interrupts.          (line   6)
+* directive:                             Makefile Contents.   (line  28)
+* directories, printing them:            -w Option.           (line   6)
+* directories, updating archive symbol:  Archive Symbols.     (line   6)
+* directory part:                        File Name Functions. (line  17)
+* directory search (VPATH):              Directory Search.    (line   6)
+* directory search (VPATH), and implicit rules: Implicit/Search.
+                                                              (line   6)
+* directory search (VPATH), and link libraries: Libraries/Search.
+                                                              (line   6)
+* directory search (VPATH), and shell commands: Commands/Search.
+                                                              (line   6)
+* directory search algorithm:            Search Algorithm.    (line   6)
+* directory search, traditional (GPATH): Search Algorithm.    (line  42)
+* dist (standard target):                Goals.               (line 103)
+* distclean (standard target):           Goals.               (line  81)
+* dollar sign ($), in function call:     Syntax of Functions. (line   6)
+* dollar sign ($), in rules:             Rule Syntax.         (line  31)
+* dollar sign ($), in variable name:     Computed Names.      (line   6)
+* dollar sign ($), in variable reference: Reference.          (line   6)
+* double-colon rules:                    Double-Colon.        (line   6)
+* duplicate words, removing:             Text Functions.      (line 155)
+* E2BIG:                                 Options/Recursion.   (line  57)
+* echoing of commands:                   Echoing.             (line   6)
+* editor:                                Introduction.        (line  22)
+* Emacs (M-x compile):                   Errors.              (line  62)
+* empty commands:                        Empty Commands.      (line   6)
+* empty targets:                         Empty Targets.       (line   6)
+* environment:                           Environment.         (line   6)
+* environment, and recursion:            Variables/Recursion. (line   6)
+* environment, SHELL in:                 Execution.           (line  81)
+* error, stopping on:                    Make Control Functions.
+                                                              (line  11)
+* errors (in commands):                  Errors.              (line   6)
+* errors with wildcards:                 Wildcard Pitfall.    (line   6)
+* evaluating makefile syntax:            Eval Function.       (line   6)
+* execution, in parallel:                Parallel.            (line   6)
+* execution, instead of:                 Instead of Execution.
+                                                              (line   6)
+* execution, of commands:                Execution.           (line   6)
+* exit status (errors):                  Errors.              (line   6)
+* explicit rule, definition of:          Makefile Contents.   (line  10)
+* explicit rule, expansion:              Reading Makefiles.   (line  58)
+* exporting variables:                   Variables/Recursion. (line   6)
+* f77 <1>:                               Implicit Variables.  (line  54)
+* f77:                                   Catalogue of Rules.  (line  42)
+* FDL, GNU Free Documentation License:   GNU Free Documentation License.
+                                                              (line   6)
+* features of GNU make:                  Features.            (line   6)
+* features, missing:                     Missing.             (line   6)
+* file name functions:                   File Name Functions. (line   6)
+* file name of makefile:                 Makefile Names.      (line   6)
+* file name of makefile, how to specify: Makefile Names.      (line  30)
+* file name prefix, adding:              File Name Functions. (line  79)
+* file name suffix:                      File Name Functions. (line  43)
+* file name suffix, adding:              File Name Functions. (line  68)
+* file name with wildcards:              Wildcards.           (line   6)
+* file name, basename of:                File Name Functions. (line  57)
+* file name, directory part:             File Name Functions. (line  17)
+* file name, nondirectory part:          File Name Functions. (line  27)
+* files, assuming new:                   Instead of Execution.
+                                                              (line  33)
+* files, assuming old:                   Avoiding Compilation.
+                                                              (line   6)
+* files, avoiding recompilation of:      Avoiding Compilation.
+                                                              (line   6)
+* files, intermediate:                   Chained Rules.       (line  16)
+* filtering out words:                   Text Functions.      (line 132)
+* filtering words:                       Text Functions.      (line 114)
+* finding strings:                       Text Functions.      (line 103)
+* flags:                                 Options Summary.     (line   6)
+* flags for compilers:                   Implicit Variables.  (line   6)
+* flavors of variables:                  Flavors.             (line   6)
+* FORCE:                                 Force Targets.       (line   6)
+* force targets:                         Force Targets.       (line   6)
+* Fortran, rule to compile:              Catalogue of Rules.  (line  42)
+* functions:                             Functions.           (line   6)
+* functions, for controlling make:       Make Control Functions.
+                                                              (line   6)
+* functions, for file names:             File Name Functions. (line   6)
+* functions, for text:                   Text Functions.      (line   6)
+* functions, syntax of:                  Syntax of Functions. (line   6)
+* functions, user defined:               Call Function.       (line   6)
+* g++ <1>:                               Catalogue of Rules.  (line  33)
+* g++:                                   Implicit Variables.  (line  43)
+* gcc:                                   Catalogue of Rules.  (line  29)
+* generating prerequisites automatically <1>: Automatic Prerequisites.
+                                                              (line   6)
+* generating prerequisites automatically: Include.            (line  49)
+* get <1>:                               Catalogue of Rules.  (line 166)
+* get:                                   Implicit Variables.  (line  57)
+* globbing (wildcards):                  Wildcards.           (line   6)
+* goal:                                  How Make Works.      (line   9)
+* goal, default <1>:                     How Make Works.      (line   9)
+* goal, default:                         Rules.               (line  11)
+* goal, how to specify:                  Goals.               (line   6)
+* home directory:                        Wildcards.           (line  11)
+* IEEE Standard 1003.2:                  Overview.            (line  13)
+* ifdef, expansion:                      Reading Makefiles.   (line  51)
+* ifeq, expansion:                       Reading Makefiles.   (line  51)
+* ifndef, expansion:                     Reading Makefiles.   (line  51)
+* ifneq, expansion:                      Reading Makefiles.   (line  51)
+* implicit rule:                         Implicit Rules.      (line   6)
+* implicit rule, and directory search:   Implicit/Search.     (line   6)
+* implicit rule, and VPATH:              Implicit/Search.     (line   6)
+* implicit rule, definition of:          Makefile Contents.   (line  16)
+* implicit rule, expansion:              Reading Makefiles.   (line  58)
+* implicit rule, how to use:             Using Implicit.      (line   6)
+* implicit rule, introduction to:        make Deduces.        (line   6)
+* implicit rule, predefined:             Catalogue of Rules.  (line   6)
+* implicit rule, search algorithm:       Implicit Rule Search.
+                                                              (line   6)
+* included makefiles, default directories: Include.           (line  51)
+* including (MAKEFILE_LIST variable):    MAKEFILE_LIST Variable.
+                                                              (line   6)
+* including (MAKEFILES variable):        MAKEFILES Variable.  (line   6)
+* including other makefiles:             Include.             (line   6)
+* incompatibilities:                     Missing.             (line   6)
+* Info, rule to format:                  Catalogue of Rules.  (line 151)
+* install (standard target):             Goals.               (line  89)
+* intermediate files:                    Chained Rules.       (line  16)
+* intermediate files, preserving:        Chained Rules.       (line  46)
+* intermediate targets, explicit:        Special Targets.     (line  44)
+* interrupt:                             Interrupts.          (line   6)
+* job slots:                             Parallel.            (line   6)
+* job slots, and recursion:              Options/Recursion.   (line  25)
+* jobs, limiting based on load:          Parallel.            (line  57)
+* joining lists of words:                File Name Functions. (line  90)
+* killing (interruption):                Interrupts.          (line   6)
+* last-resort default rules:             Last Resort.         (line   6)
+* ld:                                    Catalogue of Rules.  (line  79)
+* lex <1>:                               Catalogue of Rules.  (line 117)
+* lex:                                   Implicit Variables.  (line  61)
+* Lex, rule to run:                      Catalogue of Rules.  (line 117)
+* libraries for linking, directory search: Libraries/Search.  (line   6)
+* library archive, suffix rule for:      Archive Suffix Rules.
+                                                              (line   6)
+* limiting jobs based on load:           Parallel.            (line  57)
+* link libraries, and directory search:  Libraries/Search.    (line   6)
+* link libraries, patterns matching:     Libraries/Search.    (line   6)
+* linking, predefined rule for:          Catalogue of Rules.  (line  79)
+* lint:                                  Catalogue of Rules.  (line 139)
+* lint, rule to run:                     Catalogue of Rules.  (line 139)
+* list of all prerequisites:             Automatic.           (line  49)
+* list of changed prerequisites:         Automatic.           (line  40)
+* load average:                          Parallel.            (line  57)
+* loops in variable expansion:           Flavors.             (line  44)
+* lpr (shell command) <1>:               Wildcard Examples.   (line  21)
+* lpr (shell command):                   Empty Targets.       (line  25)
+* m2c:                                   Catalogue of Rules.  (line  67)
+* macro:                                 Using Variables.     (line  10)
+* make depend:                           Automatic Prerequisites.
+                                                              (line  37)
+* MAKECMDGOALS:                          Goals.               (line  27)
+* makefile:                              Introduction.        (line   7)
+* makefile name:                         Makefile Names.      (line   6)
+* makefile name, how to specify:         Makefile Names.      (line  30)
+* makefile rule parts:                   Rule Introduction.   (line   6)
+* makefile syntax, evaluating:           Eval Function.       (line   6)
+* makefile, and MAKEFILES variable:      MAKEFILES Variable.  (line   6)
+* makefile, conventions for:             Makefile Conventions.
+                                                              (line   6)
+* makefile, how make processes:          How Make Works.      (line   6)
+* makefile, how to write:                Makefiles.           (line   6)
+* makefile, including:                   Include.             (line   6)
+* makefile, overriding:                  Overriding Makefiles.
+                                                              (line   6)
+* makefile, parsing:                     Reading Makefiles.   (line   6)
+* makefile, remaking of:                 Remaking Makefiles.  (line   6)
+* makefile, simple:                      Simple Makefile.     (line   6)
+* makefiles, and MAKEFILE_LIST variable: MAKEFILE_LIST Variable.
+                                                              (line   6)
+* makefiles, and special variables:      Special Variables.   (line   6)
+* makeinfo <1>:                          Catalogue of Rules.  (line 151)
+* makeinfo:                              Implicit Variables.  (line  76)
+* match-anything rule:                   Match-Anything Rules.
+                                                              (line   6)
+* match-anything rule, used to override: Overriding Makefiles.
+                                                              (line  12)
+* missing features:                      Missing.             (line   6)
+* mistakes with wildcards:               Wildcard Pitfall.    (line   6)
+* modified variable reference:           Substitution Refs.   (line   6)
+* Modula-2, rule to compile:             Catalogue of Rules.  (line  67)
+* mostlyclean (standard target):         Goals.               (line  75)
+* multiple rules for one target:         Multiple Rules.      (line   6)
+* multiple rules for one target (::):    Double-Colon.        (line   6)
+* multiple targets:                      Multiple Targets.    (line   6)
+* multiple targets, in pattern rule:     Pattern Intro.       (line  48)
+* name of makefile:                      Makefile Names.      (line   6)
+* name of makefile, how to specify:      Makefile Names.      (line  30)
+* nested variable reference:             Computed Names.      (line   6)
+* newline, quoting, in commands:         Execution.           (line  20)
+* newline, quoting, in makefile:         Simple Makefile.     (line  40)
+* nondirectory part:                     File Name Functions. (line  27)
+* normal prerequisites:                  Prerequisite Types.  (line   6)
+* obj:                                   Variables Simplify.  (line  20)
+* OBJ:                                   Variables Simplify.  (line  20)
+* objects:                               Variables Simplify.  (line  14)
+* OBJECTS:                               Variables Simplify.  (line  20)
+* OBJS:                                  Variables Simplify.  (line  20)
+* objs:                                  Variables Simplify.  (line  20)
+* old-fashioned suffix rules:            Suffix Rules.        (line   6)
+* options:                               Options Summary.     (line   6)
+* options, and recursion:                Options/Recursion.   (line   6)
+* options, setting from environment:     Options/Recursion.   (line  81)
+* options, setting in makefiles:         Options/Recursion.   (line  81)
+* order of pattern rules:                Pattern Intro.       (line  56)
+* order-only prerequisites:              Prerequisite Types.  (line   6)
+* origin of variable:                    Origin Function.     (line   6)
+* overriding makefiles:                  Overriding Makefiles.
+                                                              (line   6)
+* overriding variables with arguments:   Overriding.          (line   6)
+* overriding with override:              Override Directive.  (line   6)
+* parallel execution:                    Parallel.            (line   6)
+* parallel execution, and archive update: Archive Pitfalls.   (line   6)
+* parallel execution, overriding:        Special Targets.     (line 125)
+* parts of makefile rule:                Rule Introduction.   (line   6)
+* Pascal, rule to compile:               Catalogue of Rules.  (line  38)
+* pattern rule:                          Pattern Intro.       (line   6)
+* pattern rule, expansion:               Reading Makefiles.   (line  58)
+* pattern rules, order of:               Pattern Intro.       (line  56)
+* pattern rules, static (not implicit):  Static Pattern.      (line   6)
+* pattern rules, static, syntax of:      Static Usage.        (line   6)
+* pattern-specific variables:            Pattern-specific.    (line   6)
+* pc <1>:                                Implicit Variables.  (line  64)
+* pc:                                    Catalogue of Rules.  (line  38)
+* phony targets:                         Phony Targets.       (line   6)
+* pitfalls of wildcards:                 Wildcard Pitfall.    (line   6)
+* portability:                           Features.            (line   6)
+* POSIX:                                 Overview.            (line  13)
+* POSIX.2:                               Options/Recursion.   (line  60)
+* post-installation commands:            Install Command Categories.
+                                                              (line   6)
+* pre-installation commands:             Install Command Categories.
+                                                              (line   6)
+* precious targets:                      Special Targets.     (line  29)
+* predefined rules and variables, printing: Options Summary.  (line 142)
+* prefix, adding:                        File Name Functions. (line  79)
+* prerequisite:                          Rules.               (line   6)
+* prerequisite pattern, implicit:        Pattern Intro.       (line  21)
+* prerequisite pattern, static (not implicit): Static Usage.  (line  30)
+* prerequisite types:                    Prerequisite Types.  (line   6)
+* prerequisite, expansion:               Reading Makefiles.   (line  58)
+* prerequisites:                         Rule Syntax.         (line  41)
+* prerequisites, automatic generation <1>: Include.           (line  49)
+* prerequisites, automatic generation:   Automatic Prerequisites.
+                                                              (line   6)
+* prerequisites, introduction to:        Rule Introduction.   (line   8)
+* prerequisites, list of all:            Automatic.           (line  49)
+* prerequisites, list of changed:        Automatic.           (line  40)
+* prerequisites, normal:                 Prerequisite Types.  (line   6)
+* prerequisites, order-only:             Prerequisite Types.  (line   6)
+* prerequisites, varying (static pattern): Static Pattern.    (line   6)
+* preserving intermediate files:         Chained Rules.       (line  46)
+* preserving with .PRECIOUS <1>:         Chained Rules.       (line  56)
+* preserving with .PRECIOUS:             Special Targets.     (line  29)
+* preserving with .SECONDARY:            Special Targets.     (line  49)
+* print (standard target):               Goals.               (line  94)
+* print target <1>:                      Empty Targets.       (line  25)
+* print target:                          Wildcard Examples.   (line  21)
+* printing directories:                  -w Option.           (line   6)
+* printing of commands:                  Echoing.             (line   6)
+* printing user warnings:                Make Control Functions.
+                                                              (line  35)
+* problems and bugs, reporting:          Bugs.                (line   6)
+* problems with wildcards:               Wildcard Pitfall.    (line   6)
+* processing a makefile:                 How Make Works.      (line   6)
+* question mode:                         Instead of Execution.
+                                                              (line  25)
+* quoting %, in patsubst:                Text Functions.      (line  26)
+* quoting %, in static pattern:          Static Usage.        (line  37)
+* quoting %, in vpath:                   Selective Search.    (line  38)
+* quoting newline, in commands:          Execution.           (line  20)
+* quoting newline, in makefile:          Simple Makefile.     (line  40)
+* Ratfor, rule to compile:               Catalogue of Rules.  (line  42)
+* RCS, rule to extract from:             Catalogue of Rules.  (line 157)
+* reading makefiles:                     Reading Makefiles.   (line   6)
+* README:                                Makefile Names.      (line   9)
+* realclean (standard target):           Goals.               (line  82)
+* recompilation:                         Introduction.        (line  22)
+* recompilation, avoiding:               Avoiding Compilation.
+                                                              (line   6)
+* recording events with empty targets:   Empty Targets.       (line   6)
+* recursion:                             Recursion.           (line   6)
+* recursion, and -C:                     Options/Recursion.   (line  22)
+* recursion, and -f:                     Options/Recursion.   (line  22)
+* recursion, and -j:                     Options/Recursion.   (line  25)
+* recursion, and -o:                     Options/Recursion.   (line  22)
+* recursion, and -t:                     MAKE Variable.       (line  30)
+* recursion, and -W:                     Options/Recursion.   (line  22)
+* recursion, and -w:                     -w Option.           (line  20)
+* recursion, and command line variable definitions: Options/Recursion.
+                                                              (line  17)
+* recursion, and environment:            Variables/Recursion. (line   6)
+* recursion, and MAKE variable:          MAKE Variable.       (line   6)
+* recursion, and MAKEFILES variable:     MAKEFILES Variable.  (line  14)
+* recursion, and options:                Options/Recursion.   (line   6)
+* recursion, and printing directories:   -w Option.           (line   6)
+* recursion, and variables:              Variables/Recursion. (line   6)
+* recursion, level of:                   Variables/Recursion. (line 110)
+* recursive variable expansion <1>:      Using Variables.     (line   6)
+* recursive variable expansion:          Flavors.             (line   6)
+* recursively expanded variables:        Flavors.             (line   6)
+* reference to variables <1>:            Advanced.            (line   6)
+* reference to variables:                Reference.           (line   6)
+* relinking:                             How Make Works.      (line  44)
+* remaking makefiles:                    Remaking Makefiles.  (line   6)
+* removal of target files <1>:           Errors.              (line  64)
+* removal of target files:               Interrupts.          (line   6)
+* removing duplicate words:              Text Functions.      (line 155)
+* removing targets on failure:           Special Targets.     (line  58)
+* removing, to clean up:                 Cleanup.             (line   6)
+* reporting bugs:                        Bugs.                (line   6)
+* rm:                                    Implicit Variables.  (line  98)
+* rm (shell command) <1>:                Phony Targets.       (line  20)
+* rm (shell command) <2>:                Wildcard Examples.   (line  12)
+* rm (shell command) <3>:                Errors.              (line  27)
+* rm (shell command):                    Simple Makefile.     (line  83)
+* rule commands:                         Commands.            (line   6)
+* rule prerequisites:                    Rule Syntax.         (line  41)
+* rule syntax:                           Rule Syntax.         (line   6)
+* rule targets:                          Rule Syntax.         (line  18)
+* rule, and $:                           Rule Syntax.         (line  31)
+* rule, double-colon (::):               Double-Colon.        (line   6)
+* rule, explicit, definition of:         Makefile Contents.   (line  10)
+* rule, how to write:                    Rules.               (line   6)
+* rule, implicit:                        Implicit Rules.      (line   6)
+* rule, implicit, and directory search:  Implicit/Search.     (line   6)
+* rule, implicit, and VPATH:             Implicit/Search.     (line   6)
+* rule, implicit, chains of:             Chained Rules.       (line   6)
+* rule, implicit, definition of:         Makefile Contents.   (line  16)
+* rule, implicit, how to use:            Using Implicit.      (line   6)
+* rule, implicit, introduction to:       make Deduces.        (line   6)
+* rule, implicit, predefined:            Catalogue of Rules.  (line   6)
+* rule, introduction to:                 Rule Introduction.   (line   6)
+* rule, multiple for one target:         Multiple Rules.      (line   6)
+* rule, no commands or prerequisites:    Force Targets.       (line   6)
+* rule, pattern:                         Pattern Intro.       (line   6)
+* rule, static pattern:                  Static Pattern.      (line   6)
+* rule, static pattern versus implicit:  Static versus Implicit.
+                                                              (line   6)
+* rule, with multiple targets:           Multiple Targets.    (line   6)
+* s. (SCCS file prefix):                 Catalogue of Rules.  (line 166)
+* SCCS, rule to extract from:            Catalogue of Rules.  (line 166)
+* search algorithm, implicit rule:       Implicit Rule Search.
+                                                              (line   6)
+* search path for prerequisites (VPATH): Directory Search.    (line   6)
+* search path for prerequisites (VPATH), and implicit rules: Implicit/Search.
+                                                              (line   6)
+* search path for prerequisites (VPATH), and link libraries: Libraries/Search.
+                                                              (line   6)
+* searching for strings:                 Text Functions.      (line 103)
+* secondary files:                       Chained Rules.       (line  46)
+* secondary targets:                     Special Targets.     (line  49)
+* sed (shell command):                   Automatic Prerequisites.
+                                                              (line  73)
+* selecting a word:                      Text Functions.      (line 159)
+* selecting word lists:                  Text Functions.      (line 168)
+* sequences of commands:                 Sequences.           (line   6)
+* setting options from environment:      Options/Recursion.   (line  81)
+* setting options in makefiles:          Options/Recursion.   (line  81)
+* setting variables:                     Setting.             (line   6)
+* several rules for one target:          Multiple Rules.      (line   6)
+* several targets in a rule:             Multiple Targets.    (line   6)
+* shar (standard target):                Goals.               (line 100)
+* shell command:                         Simple Makefile.     (line  72)
+* shell command, and directory search:   Commands/Search.     (line   6)
+* shell command, execution:              Execution.           (line   6)
+* shell command, function for:           Shell Function.      (line   6)
+* shell file name pattern (in include):  Include.             (line  12)
+* shell wildcards (in include):          Include.             (line  12)
+* SHELL, MS-DOS specifics:               Execution.           (line  36)
+* signal:                                Interrupts.          (line   6)
+* silent operation:                      Echoing.             (line   6)
+* simple makefile:                       Simple Makefile.     (line   6)
+* simple variable expansion:             Using Variables.     (line   6)
+* simplifying with variables:            Variables Simplify.  (line   6)
+* simply expanded variables:             Flavors.             (line  56)
+* sorting words:                         Text Functions.      (line 146)
+* spaces, in variable values:            Flavors.             (line 104)
+* spaces, stripping:                     Text Functions.      (line  80)
+* special targets:                       Special Targets.     (line   6)
+* special variables:                     Special Variables.   (line   6)
+* specifying makefile name:              Makefile Names.      (line  30)
+* standard input:                        Parallel.            (line  30)
+* standards conformance:                 Overview.            (line  13)
+* standards for makefiles:               Makefile Conventions.
+                                                              (line   6)
+* static pattern rule:                   Static Pattern.      (line   6)
+* static pattern rule, syntax of:        Static Usage.        (line   6)
+* static pattern rule, versus implicit:  Static versus Implicit.
+                                                              (line   6)
+* stem <1>:                              Pattern Match.       (line   6)
+* stem:                                  Static Usage.        (line  17)
+* stem, variable for:                    Automatic.           (line  61)
+* stopping make:                         Make Control Functions.
+                                                              (line  11)
+* strings, searching for:                Text Functions.      (line 103)
+* stripping whitespace:                  Text Functions.      (line  80)
+* sub-make:                              Variables/Recursion. (line   6)
+* subdirectories, recursion for:         Recursion.           (line   6)
+* substitution variable reference:       Substitution Refs.   (line   6)
+* suffix rule:                           Suffix Rules.        (line   6)
+* suffix rule, for archive:              Archive Suffix Rules.
+                                                              (line   6)
+* suffix, adding:                        File Name Functions. (line  68)
+* suffix, function to find:              File Name Functions. (line  43)
+* suffix, substituting in variables:     Substitution Refs.   (line   6)
+* switches:                              Options Summary.     (line   6)
+* symbol directories, updating archive:  Archive Symbols.     (line   6)
+* syntax of rules:                       Rule Syntax.         (line   6)
+* tab character (in commands):           Rule Syntax.         (line  26)
+* tabs in rules:                         Rule Introduction.   (line  21)
+* TAGS (standard target):                Goals.               (line 108)
+* tangle <1>:                            Catalogue of Rules.  (line 144)
+* tangle:                                Implicit Variables.  (line  92)
+* tar (standard target):                 Goals.               (line  97)
+* target:                                Rules.               (line   6)
+* target pattern, implicit:              Pattern Intro.       (line   9)
+* target pattern, static (not implicit): Static Usage.        (line  17)
+* target, deleting on error:             Errors.              (line  64)
+* target, deleting on interrupt:         Interrupts.          (line   6)
+* target, expansion:                     Reading Makefiles.   (line  58)
+* target, multiple in pattern rule:      Pattern Intro.       (line  48)
+* target, multiple rules for one:        Multiple Rules.      (line   6)
+* target, touching:                      Instead of Execution.
+                                                              (line  19)
+* target-specific variables:             Target-specific.     (line   6)
+* targets:                               Rule Syntax.         (line  18)
+* targets without a file:                Phony Targets.       (line   6)
+* targets, built-in special:             Special Targets.     (line   6)
+* targets, empty:                        Empty Targets.       (line   6)
+* targets, force:                        Force Targets.       (line   6)
+* targets, introduction to:              Rule Introduction.   (line   8)
+* targets, multiple:                     Multiple Targets.    (line   6)
+* targets, phony:                        Phony Targets.       (line   6)
+* terminal rule:                         Match-Anything Rules.
+                                                              (line   6)
+* test (standard target):                Goals.               (line 112)
+* testing compilation:                   Testing.             (line   6)
+* tex <1>:                               Implicit Variables.  (line  79)
+* tex:                                   Catalogue of Rules.  (line 144)
+* TeX, rule to run:                      Catalogue of Rules.  (line 144)
+* texi2dvi <1>:                          Implicit Variables.  (line  83)
+* texi2dvi:                              Catalogue of Rules.  (line 151)
+* Texinfo, rule to format:               Catalogue of Rules.  (line 151)
+* tilde (~):                             Wildcards.           (line  11)
+* touch (shell command) <1>:             Empty Targets.       (line  25)
+* touch (shell command):                 Wildcard Examples.   (line  21)
+* touching files:                        Instead of Execution.
+                                                              (line  19)
+* traditional directory search (GPATH):  Search Algorithm.    (line  42)
+* types of prerequisites:                Prerequisite Types.  (line   6)
+* undefined variables, warning message:  Options Summary.     (line 238)
+* updating archive symbol directories:   Archive Symbols.     (line   6)
+* updating makefiles:                    Remaking Makefiles.  (line   6)
+* user defined functions:                Call Function.       (line   6)
+* value:                                 Using Variables.     (line   6)
+* value, how a variable gets it:         Values.              (line   6)
+* variable:                              Using Variables.     (line   6)
+* variable definition:                   Makefile Contents.   (line  22)
+* variables:                             Variables Simplify.  (line   6)
+* variables, $ in name:                  Computed Names.      (line   6)
+* variables, and implicit rule:          Automatic.           (line   6)
+* variables, appending to:               Appending.           (line   6)
+* variables, automatic:                  Automatic.           (line   6)
+* variables, command line:               Overriding.          (line   6)
+* variables, command line, and recursion: Options/Recursion.  (line  17)
+* variables, computed names:             Computed Names.      (line   6)
+* variables, conditional assignment:     Flavors.             (line 130)
+* variables, defining verbatim:          Defining.            (line   6)
+* variables, environment <1>:            Environment.         (line   6)
+* variables, environment:                Variables/Recursion. (line   6)
+* variables, exporting:                  Variables/Recursion. (line   6)
+* variables, flavors:                    Flavors.             (line   6)
+* variables, how they get their values:  Values.              (line   6)
+* variables, how to reference:           Reference.           (line   6)
+* variables, loops in expansion:         Flavors.             (line  44)
+* variables, modified reference:         Substitution Refs.   (line   6)
+* variables, nested references:          Computed Names.      (line   6)
+* variables, origin of:                  Origin Function.     (line   6)
+* variables, overriding:                 Override Directive.  (line   6)
+* variables, overriding with arguments:  Overriding.          (line   6)
+* variables, pattern-specific:           Pattern-specific.    (line   6)
+* variables, recursively expanded:       Flavors.             (line   6)
+* variables, setting:                    Setting.             (line   6)
+* variables, simply expanded:            Flavors.             (line  56)
+* variables, spaces in values:           Flavors.             (line 104)
+* variables, substituting suffix in:     Substitution Refs.   (line   6)
+* variables, substitution reference:     Substitution Refs.   (line   6)
+* variables, target-specific:            Target-specific.     (line   6)
+* variables, unexpanded value:           Value Function.      (line   6)
+* variables, warning for undefined:      Options Summary.     (line 238)
+* varying prerequisites:                 Static Pattern.      (line   6)
+* verbatim variable definition:          Defining.            (line   6)
+* vpath:                                 Directory Search.    (line   6)
+* VPATH, and implicit rules:             Implicit/Search.     (line   6)
+* VPATH, and link libraries:             Libraries/Search.    (line   6)
+* warnings, printing:                    Make Control Functions.
+                                                              (line  35)
+* weave <1>:                             Implicit Variables.  (line  86)
+* weave:                                 Catalogue of Rules.  (line 144)
+* Web, rule to run:                      Catalogue of Rules.  (line 144)
+* what if:                               Instead of Execution.
+                                                              (line  33)
+* whitespace, in variable values:        Flavors.             (line 104)
+* whitespace, stripping:                 Text Functions.      (line  80)
+* wildcard:                              Wildcards.           (line   6)
+* wildcard pitfalls:                     Wildcard Pitfall.    (line   6)
+* wildcard, function:                    File Name Functions. (line 107)
+* wildcard, in archive member:           Archive Members.     (line  36)
+* wildcard, in include:                  Include.             (line  12)
+* wildcards and MS-DOS/MS-Windows backslashes: Wildcard Pitfall.
+                                                              (line  31)
+* word, selecting a:                     Text Functions.      (line 159)
+* words, extracting first:               Text Functions.      (line 184)
+* words, filtering:                      Text Functions.      (line 114)
+* words, filtering out:                  Text Functions.      (line 132)
+* words, finding number:                 Text Functions.      (line 180)
+* words, iterating over:                 Foreach Function.    (line   6)
+* words, joining lists:                  File Name Functions. (line  90)
+* words, removing duplicates:            Text Functions.      (line 155)
+* words, selecting lists of:             Text Functions.      (line 168)
+* writing rule commands:                 Commands.            (line   6)
+* writing rules:                         Rules.               (line   6)
+* yacc <1>:                              Catalogue of Rules.  (line 113)
+* yacc <2>:                              Sequences.           (line  18)
+* yacc:                                  Implicit Variables.  (line  68)
+* Yacc, rule to run:                     Catalogue of Rules.  (line 113)
+* ~ (tilde):                             Wildcards.           (line  11)
 
 
-File: make.info,  Node: Rule Example,  Next: Rule Syntax,  Prev: Rules,  Up: Rules
-
-Rule Example
-============
-
-   Here is an example of a rule:
-
-     foo.o : foo.c defs.h       # module for twiddling the frobs
-             cc -c -g foo.c
-
-   Its target is `foo.o' and its prerequisites are `foo.c' and
-`defs.h'.  It has one command, which is `cc -c -g foo.c'.  The command
-line starts with a tab to identify it as a command.
-
-   This rule says two things:
-
-   * How to decide whether `foo.o' is out of date: it is out of date if
-     it does not exist, or if either `foo.c' or `defs.h' is more recent
-     than it.
-
-   * How to update the file `foo.o': by running `cc' as stated.  The
-     command does not explicitly mention `defs.h', but we presume that
-     `foo.c' includes it, and that that is why `defs.h' was added to
-     the prerequisites.
-
-
-File: make.info,  Node: Rule Syntax,  Next: Prerequisite Types,  Prev: Rule Example,  Up: Rules
-
-Rule Syntax
-===========
-
-   In general, a rule looks like this:
-
-     TARGETS : PREREQUISITES
-             COMMAND
-             ...
-
-or like this:
-
-     TARGETS : PREREQUISITES ; COMMAND
-             COMMAND
-             ...
-
-   The TARGETS are file names, separated by spaces.  Wildcard
-characters may be used (*note Using Wildcard Characters in File Names:
-Wildcards.) and a name of the form `A(M)' represents member M in
-archive file A (*note Archive Members as Targets: Archive Members.).
-Usually there is only one target per rule, but occasionally there is a
-reason to have more (*note Multiple Targets in a Rule: Multiple
-Targets.).
-
-   The COMMAND lines start with a tab character.  The first command may
-appear on the line after the prerequisites, with a tab character, or may
-appear on the same line, with a semicolon.  Either way, the effect is
-the same.  *Note Writing the Commands in Rules: Commands.
-
-   Because dollar signs are used to start variable references, if you
-really want a dollar sign in a rule you must write two of them, `$$'
-(*note How to Use Variables: Using Variables.).  You may split a long
-line by inserting a backslash followed by a newline, but this is not
-required, as `make' places no limit on the length of a line in a
-makefile.
-
-   A rule tells `make' two things: when the targets are out of date,
-and how to update them when necessary.
-
-   The criterion for being out of date is specified in terms of the
-PREREQUISITES, which consist of file names separated by spaces.
-(Wildcards and archive members (*note Archives::) are allowed here too.)
-A target is out of date if it does not exist or if it is older than any
-of the prerequisites (by comparison of last-modification times).  The
-idea is that the contents of the target file are computed based on
-information in the prerequisites, so if any of the prerequisites
-changes, the contents of the existing target file are no longer
-necessarily valid.
-
-   How to update is specified by COMMANDS.  These are lines to be
-executed by the shell (normally `sh'), but with some extra features
-(*note Writing the Commands in Rules: Commands.).
-
-
-File: make.info,  Node: Prerequisite Types,  Next: Wildcards,  Prev: Rule Syntax,  Up: Rules
-
-Types of Prerequisites
-======================
-
-   There are actually two different types of prerequisites understood by
-GNU `make': normal prerequisites such as described in the previous
-section, and "order-only" prerequisites.  A normal prerequisite
-actually makes two statements: first, it imposes an order of execution
-of build commands: any commands necessary to build any of a target's
-prerequisites will be fully executed before any commands necessary to
-build the target.  Second, it imposes a dependency relationship: if any
-prerequisite is newer than the target, then the target is considered
-out-of-date and must be rebuilt.
-
-   Normally, this is exactly what you want: if a target's prerequisite
-is updated, then the target should also be updated.
-
-   Occasionally, however, you have a situation where you want to impose
-a specific ordering on the rules to be invoked _without_ forcing the
-target to be updated if one of those rules is executed.  In that case,
-you want to define "order-only" prerequisites.  Order-only
-prerequisites can be specified by placing a pipe symbol (`|') in the
-prerequisites list: any prerequisites to the left of the pipe symbol
-are normal; any prerequisites to the right are order-only:
-
-     TARGETS : NORMAL-PREREQUISITES | ORDER-ONLY-PREREQUISITES
-
-   The normal prerequisites section may of course be empty.  Also, you
-may still declare multiple lines of prerequisites for the same target:
-they are appended appropriately.  Note that if you declare the same
-file to be both a normal and an order-only prerequisite, the normal
-prerequisite takes precedence (since they are a strict superset of the
-behavior of an order-only prerequisite).
-
-
-File: make.info,  Node: Wildcards,  Next: Directory Search,  Prev: Prerequisite Types,  Up: Rules
-
-Using Wildcard Characters in File Names
-=======================================
-
-   A single file name can specify many files using "wildcard
-characters".  The wildcard characters in `make' are `*', `?' and
-`[...]', the same as in the Bourne shell.  For example, `*.c' specifies
-a list of all the files (in the working directory) whose names end in
-`.c'.
-
-   The character `~' at the beginning of a file name also has special
-significance.  If alone, or followed by a slash, it represents your home
-directory.  For example `~/bin' expands to `/home/you/bin'.  If the `~'
-is followed by a word, the string represents the home directory of the
-user named by that word.  For example `~john/bin' expands to
-`/home/john/bin'.  On systems which don't have a home directory for
-each user (such as MS-DOS or MS-Windows), this functionality can be
-simulated by setting the environment variable HOME.
-
-   Wildcard expansion happens automatically in targets, in
-prerequisites, and in commands (where the shell does the expansion).
-In other contexts, wildcard expansion happens only if you request it
-explicitly with the `wildcard' function.
-
-   The special significance of a wildcard character can be turned off by
-preceding it with a backslash.  Thus, `foo\*bar' would refer to a
-specific file whose name consists of `foo', an asterisk, and `bar'.
-
+File: make.info,  Node: Name Index,  Prev: Concept Index,  Up: Top
+
+Index of Functions, Variables, & Directives
+*******************************************
+
+[index]
 * Menu:
 
-* Wildcard Examples::           Several examples
-* Wildcard Pitfall::            Problems to avoid.
-* Wildcard Function::           How to cause wildcard expansion where
-                                  it does not normally take place.
-
-
-File: make.info,  Node: Wildcard Examples,  Next: Wildcard Pitfall,  Prev: Wildcards,  Up: Wildcards
-
-Wildcard Examples
------------------
-
-   Wildcards can be used in the commands of a rule, where they are
-expanded by the shell.  For example, here is a rule to delete all the
-object files:
-
-     clean:
-             rm -f *.o
-
-   Wildcards are also useful in the prerequisites of a rule.  With the
-following rule in the makefile, `make print' will print all the `.c'
-files that have changed since the last time you printed them:
-
-     print: *.c
-             lpr -p $?
-             touch print
-
-This rule uses `print' as an empty target file; see *Note Empty Target
-Files to Record Events: Empty Targets.  (The automatic variable `$?' is
-used to print only those files that have changed; see *Note Automatic
-Variables: Automatic.)
-
-   Wildcard expansion does not happen when you define a variable.
-Thus, if you write this:
-
-     objects = *.o
-
-then the value of the variable `objects' is the actual string `*.o'.
-However, if you use the value of `objects' in a target, prerequisite or
-command, wildcard expansion will take place at that time.  To set
-`objects' to the expansion, instead use:
-
-     objects := $(wildcard *.o)
-
-*Note Wildcard Function::.
-
-
-File: make.info,  Node: Wildcard Pitfall,  Next: Wildcard Function,  Prev: Wildcard Examples,  Up: Wildcards
-
-Pitfalls of Using Wildcards
----------------------------
-
-   Now here is an example of a naive way of using wildcard expansion,
-that does not do what you would intend.  Suppose you would like to say
-that the executable file `foo' is made from all the object files in the
-directory, and you write this:
-
-     objects = *.o
-     
-     foo : $(objects)
-             cc -o foo $(CFLAGS) $(objects)
-
-The value of `objects' is the actual string `*.o'.  Wildcard expansion
-happens in the rule for `foo', so that each _existing_ `.o' file
-becomes a prerequisite of `foo' and will be recompiled if necessary.
-
-   But what if you delete all the `.o' files?  When a wildcard matches
-no files, it is left as it is, so then `foo' will depend on the
-oddly-named file `*.o'.  Since no such file is likely to exist, `make'
-will give you an error saying it cannot figure out how to make `*.o'.
-This is not what you want!
-
-   Actually it is possible to obtain the desired result with wildcard
-expansion, but you need more sophisticated techniques, including the
-`wildcard' function and string substitution.  *Note The Function
-`wildcard': Wildcard Function.
-
-   Microsoft operating systems (MS-DOS and MS-Windows) use backslashes
-to separate directories in pathnames, like so:
-
-       c:\foo\bar\baz.c
-
-   This is equivalent to the Unix-style `c:/foo/bar/baz.c' (the `c:'
-part is the so-called drive letter).  When `make' runs on these
-systems, it supports backslashes as well as the Unix-style forward
-slashes in pathnames.  However, this support does _not_ include the
-wildcard expansion, where backslash is a quote character.  Therefore,
-you _must_ use Unix-style slashes in these cases.
-
-
-File: make.info,  Node: Wildcard Function,  Prev: Wildcard Pitfall,  Up: Wildcards
-
-The Function `wildcard'
------------------------
-
-   Wildcard expansion happens automatically in rules.  But wildcard
-expansion does not normally take place when a variable is set, or
-inside the arguments of a function.  If you want to do wildcard
-expansion in such places, you need to use the `wildcard' function, like
-this:
-
-     $(wildcard PATTERN...)
-
-This string, used anywhere in a makefile, is replaced by a
-space-separated list of names of existing files that match one of the
-given file name patterns.  If no existing file name matches a pattern,
-then that pattern is omitted from the output of the `wildcard'
-function.  Note that this is different from how unmatched wildcards
-behave in rules, where they are used verbatim rather than ignored
-(*note Wildcard Pitfall::).
-
-   One use of the `wildcard' function is to get a list of all the C
-source files in a directory, like this:
-
-     $(wildcard *.c)
-
-   We can change the list of C source files into a list of object files
-by replacing the `.c' suffix with `.o' in the result, like this:
-
-     $(patsubst %.c,%.o,$(wildcard *.c))
-
-(Here we have used another function, `patsubst'.  *Note Functions for
-String Substitution and Analysis: Text Functions.)
-
-   Thus, a makefile to compile all C source files in the directory and
-then link them together could be written as follows:
-
-     objects := $(patsubst %.c,%.o,$(wildcard *.c))
-     
-     foo : $(objects)
-             cc -o foo $(objects)
-
-(This takes advantage of the implicit rule for compiling C programs, so
-there is no need to write explicit rules for compiling the files.
-*Note The Two Flavors of Variables: Flavors, for an explanation of
-`:=', which is a variant of `='.)
-
-
-File: make.info,  Node: Directory Search,  Next: Phony Targets,  Prev: Wildcards,  Up: Rules
-
-Searching Directories for Prerequisites
-=======================================
-
-   For large systems, it is often desirable to put sources in a separate
-directory from the binaries.  The "directory search" features of `make'
-facilitate this by searching several directories automatically to find
-a prerequisite.  When you redistribute the files among directories, you
-do not need to change the individual rules, just the search paths.
-
-* Menu:
-
-* General Search::              Specifying a search path that applies
-                                  to every prerequisite.
-* Selective Search::            Specifying a search path
-                                  for a specified class of names.
-* Search Algorithm::            When and how search paths are applied.
-* Commands/Search::             How to write shell commands that work together
-                                  with search paths.
-* Implicit/Search::             How search paths affect implicit rules.
-* Libraries/Search::            Directory search for link libraries.
-
-
-File: make.info,  Node: General Search,  Next: Selective Search,  Prev: Directory Search,  Up: Directory Search
-
-`VPATH': Search Path for All Prerequisites
-------------------------------------------
-
-   The value of the `make' variable `VPATH' specifies a list of
-directories that `make' should search.  Most often, the directories are
-expected to contain prerequisite files that are not in the current
-directory; however, `VPATH' specifies a search list that `make' applies
-for all files, including files which are targets of rules.
-
-   Thus, if a file that is listed as a target or prerequisite does not
-exist in the current directory, `make' searches the directories listed
-in `VPATH' for a file with that name.  If a file is found in one of
-them, that file may become the prerequisite (see below).  Rules may then
-specify the names of files in the prerequisite list as if they all
-existed in the current directory.  *Note Writing Shell Commands with
-Directory Search: Commands/Search.
-
-   In the `VPATH' variable, directory names are separated by colons or
-blanks.  The order in which directories are listed is the order followed
-by `make' in its search.  (On MS-DOS and MS-Windows, semi-colons are
-used as separators of directory names in `VPATH', since the colon can
-be used in the pathname itself, after the drive letter.)
-
-   For example,
-
-     VPATH = src:../headers
-
-specifies a path containing two directories, `src' and `../headers',
-which `make' searches in that order.
-
-   With this value of `VPATH', the following rule,
-
-     foo.o : foo.c
-
-is interpreted as if it were written like this:
-
-     foo.o : src/foo.c
-
-assuming the file `foo.c' does not exist in the current directory but
-is found in the directory `src'.
-
-
-File: make.info,  Node: Selective Search,  Next: Search Algorithm,  Prev: General Search,  Up: Directory Search
-
-The `vpath' Directive
----------------------
-
-   Similar to the `VPATH' variable, but more selective, is the `vpath'
-directive (note lower case), which allows you to specify a search path
-for a particular class of file names: those that match a particular
-pattern.  Thus you can supply certain search directories for one class
-of file names and other directories (or none) for other file names.
-
-   There are three forms of the `vpath' directive:
-
-`vpath PATTERN DIRECTORIES'
-     Specify the search path DIRECTORIES for file names that match
-     PATTERN.
-
-     The search path, DIRECTORIES, is a list of directories to be
-     searched, separated by colons (semi-colons on MS-DOS and
-     MS-Windows) or blanks, just like the search path used in the
-     `VPATH' variable.
-
-`vpath PATTERN'
-     Clear out the search path associated with PATTERN.
-
-`vpath'
-     Clear all search paths previously specified with `vpath'
-     directives.
-
-   A `vpath' pattern is a string containing a `%' character.  The
-string must match the file name of a prerequisite that is being searched
-for, the `%' character matching any sequence of zero or more characters
-(as in pattern rules; *note Defining and Redefining Pattern Rules:
-Pattern Rules.).  For example, `%.h' matches files that end in `.h'.
-(If there is no `%', the pattern must match the prerequisite exactly,
-which is not useful very often.)
-
-   `%' characters in a `vpath' directive's pattern can be quoted with
-preceding backslashes (`\').  Backslashes that would otherwise quote
-`%' characters can be quoted with more backslashes.  Backslashes that
-quote `%' characters or other backslashes are removed from the pattern
-before it is compared to file names.  Backslashes that are not in
-danger of quoting `%' characters go unmolested.
-
-   When a prerequisite fails to exist in the current directory, if the
-PATTERN in a `vpath' directive matches the name of the prerequisite
-file, then the DIRECTORIES in that directive are searched just like
-(and before) the directories in the `VPATH' variable.
-
-   For example,
-
-     vpath %.h ../headers
-
-tells `make' to look for any prerequisite whose name ends in `.h' in
-the directory `../headers' if the file is not found in the current
-directory.
-
-   If several `vpath' patterns match the prerequisite file's name, then
-`make' processes each matching `vpath' directive one by one, searching
-all the directories mentioned in each directive.  `make' handles
-multiple `vpath' directives in the order in which they appear in the
-makefile; multiple directives with the same pattern are independent of
-each other.
-
-   Thus,
-
-     vpath %.c foo
-     vpath %   blish
-     vpath %.c bar
-
-will look for a file ending in `.c' in `foo', then `blish', then `bar',
-while
-
-     vpath %.c foo:bar
-     vpath %   blish
-
-will look for a file ending in `.c' in `foo', then `bar', then `blish'.
-
-
-File: make.info,  Node: Search Algorithm,  Next: Commands/Search,  Prev: Selective Search,  Up: Directory Search
-
-How Directory Searches are Performed
-------------------------------------
-
-   When a prerequisite is found through directory search, regardless of
-type (general or selective), the pathname located may not be the one
-that `make' actually provides you in the prerequisite list.  Sometimes
-the path discovered through directory search is thrown away.
-
-   The algorithm `make' uses to decide whether to keep or abandon a
-path found via directory search is as follows:
-
-  1. If a target file does not exist at the path specified in the
-     makefile, directory search is performed.
-
-  2. If the directory search is successful, that path is kept and this
-     file is tentatively stored as the target.
-
-  3. All prerequisites of this target are examined using this same
-     method.
-
-  4. After processing the prerequisites, the target may or may not need
-     to be rebuilt:
-
-       a. If the target does _not_ need to be rebuilt, the path to the
-          file found during directory search is used for any
-          prerequisite lists which contain this target.  In short, if
-          `make' doesn't need to rebuild the target then you use the
-          path found via directory search.
-
-       b. If the target _does_ need to be rebuilt (is out-of-date), the
-          pathname found during directory search is _thrown away_, and
-          the target is rebuilt using the file name specified in the
-          makefile.  In short, if `make' must rebuild, then the target
-          is rebuilt locally, not in the directory found via directory
-          search.
-
-   This algorithm may seem complex, but in practice it is quite often
-exactly what you want.
-
-   Other versions of `make' use a simpler algorithm: if the file does
-not exist, and it is found via directory search, then that pathname is
-always used whether or not the target needs to be built.  Thus, if the
-target is rebuilt it is created at the pathname discovered during
-directory search.
-
-   If, in fact, this is the behavior you want for some or all of your
-directories, you can use the `GPATH' variable to indicate this to
-`make'.
-
-   `GPATH' has the same syntax and format as `VPATH' (that is, a space-
-or colon-delimited list of pathnames).  If an out-of-date target is
-found by directory search in a directory that also appears in `GPATH',
-then that pathname is not thrown away.  The target is rebuilt using the
-expanded path.
-
-
-File: make.info,  Node: Commands/Search,  Next: Implicit/Search,  Prev: Search Algorithm,  Up: Directory Search
-
-Writing Shell Commands with Directory Search
---------------------------------------------
-
-   When a prerequisite is found in another directory through directory
-search, this cannot change the commands of the rule; they will execute
-as written.  Therefore, you must write the commands with care so that
-they will look for the prerequisite in the directory where `make' finds
-it.
-
-   This is done with the "automatic variables" such as `$^' (*note
-Automatic Variables: Automatic.).  For instance, the value of `$^' is a
-list of all the prerequisites of the rule, including the names of the
-directories in which they were found, and the value of `$@' is the
-target.  Thus:
-
-     foo.o : foo.c
-             cc -c $(CFLAGS) $^ -o $@
-
-(The variable `CFLAGS' exists so you can specify flags for C
-compilation by implicit rules; we use it here for consistency so it will
-affect all C compilations uniformly; *note Variables Used by Implicit
-Rules: Implicit Variables..)
-
-   Often the prerequisites include header files as well, which you do
-not want to mention in the commands.  The automatic variable `$<' is
-just the first prerequisite:
-
-     VPATH = src:../headers
-     foo.o : foo.c defs.h hack.h
-             cc -c $(CFLAGS) $< -o $@
-
-
-File: make.info,  Node: Implicit/Search,  Next: Libraries/Search,  Prev: Commands/Search,  Up: Directory Search
-
-Directory Search and Implicit Rules
------------------------------------
-
-   The search through the directories specified in `VPATH' or with
-`vpath' also happens during consideration of implicit rules (*note
-Using Implicit Rules: Implicit Rules.).
-
-   For example, when a file `foo.o' has no explicit rule, `make'
-considers implicit rules, such as the built-in rule to compile `foo.c'
-if that file exists.  If such a file is lacking in the current
-directory, the appropriate directories are searched for it.  If `foo.c'
-exists (or is mentioned in the makefile) in any of the directories, the
-implicit rule for C compilation is applied.
-
-   The commands of implicit rules normally use automatic variables as a
-matter of necessity; consequently they will use the file names found by
-directory search with no extra effort.
-
-
-File: make.info,  Node: Libraries/Search,  Prev: Implicit/Search,  Up: Directory Search
-
-Directory Search for Link Libraries
------------------------------------
-
-   Directory search applies in a special way to libraries used with the
-linker.  This special feature comes into play when you write a
-prerequisite whose name is of the form `-lNAME'.  (You can tell
-something strange is going on here because the prerequisite is normally
-the name of a file, and the _file name_ of a library generally looks
-like `libNAME.a', not like `-lNAME'.)
-
-   When a prerequisite's name has the form `-lNAME', `make' handles it
-specially by searching for the file `libNAME.so' in the current
-directory, in directories specified by matching `vpath' search paths
-and the `VPATH' search path, and then in the directories `/lib',
-`/usr/lib', and `PREFIX/lib' (normally `/usr/local/lib', but
-MS-DOS/MS-Windows versions of `make' behave as if PREFIX is defined to
-be the root of the DJGPP installation tree).
-
-   If that file is not found, then the file `libNAME.a' is searched
-for, in the same directories as above.
-
-   For example, if there is a `/usr/lib/libcurses.a' library on your
-system (and no `/usr/lib/libcurses.so' file), then
-
-     foo : foo.c -lcurses
-             cc $^ -o $@
-
-would cause the command `cc foo.c /usr/lib/libcurses.a -o foo' to be
-executed when `foo' is older than `foo.c' or than
-`/usr/lib/libcurses.a'.
-
-   Although the default set of files to be searched for is `libNAME.so'
-and `libNAME.a', this is customizable via the `.LIBPATTERNS' variable.
-Each word in the value of this variable is a pattern string.  When a
-prerequisite like `-lNAME' is seen, `make' will replace the percent in
-each pattern in the list with NAME and perform the above directory
-searches using that library filename.  If no library is found, the next
-word in the list will be used.
-
-   The default value for `.LIBPATTERNS' is "`lib%.so lib%.a'", which
-provides the default behavior described above.
-
-   You can turn off link library expansion completely by setting this
-variable to an empty value.
-
-
-File: make.info,  Node: Phony Targets,  Next: Force Targets,  Prev: Directory Search,  Up: Rules
-
-Phony Targets
-=============
-
-   A phony target is one that is not really the name of a file.  It is
-just a name for some commands to be executed when you make an explicit
-request.  There are two reasons to use a phony target: to avoid a
-conflict with a file of the same name, and to improve performance.
-
-   If you write a rule whose commands will not create the target file,
-the commands will be executed every time the target comes up for
-remaking.  Here is an example:
-
-     clean:
-             rm *.o temp
-
-Because the `rm' command does not create a file named `clean', probably
-no such file will ever exist.  Therefore, the `rm' command will be
-executed every time you say `make clean'.
-
-   The phony target will cease to work if anything ever does create a
-file named `clean' in this directory.  Since it has no prerequisites,
-the file `clean' would inevitably be considered up to date, and its
-commands would not be executed.  To avoid this problem, you can
-explicitly declare the target to be phony, using the special target
-`.PHONY' (*note Special Built-in Target Names: Special Targets.) as
-follows:
-
-     .PHONY : clean
-
-Once this is done, `make clean' will run the commands regardless of
-whether there is a file named `clean'.
-
-   Since it knows that phony targets do not name actual files that
-could be remade from other files, `make' skips the implicit rule search
-for phony targets (*note Implicit Rules::).  This is why declaring a
-target phony is good for performance, even if you are not worried about
-the actual file existing.
-
-   Thus, you first write the line that states that `clean' is a phony
-target, then you write the rule, like this:
-
-     .PHONY: clean
-     clean:
-             rm *.o temp
-
-   Another example of the usefulness of phony targets is in conjunction
-with recursive invocations of `make' (for more information, see *Note
-Recursive Use of `make': Recursion).  In this case the makefile will
-often contain a variable which lists a number of subdirectories to be
-built.  One way to handle this is with one rule whose command is a
-shell loop over the subdirectories, like this:
-
-     SUBDIRS = foo bar baz
-     
-     subdirs:
-             for dir in $(SUBDIRS); do \
-               $(MAKE) -C $$dir; \
-             done
-
-   There are a few problems with this method, however.  First, any error
-detected in a submake is not noted by this rule, so it will continue to
-build the rest of the directories even when one fails.  This can be
-overcome by adding shell commands to note the error and exit, but then
-it will do so even if `make' is invoked with the `-k' option, which is
-unfortunate.  Second, and perhaps more importantly, you cannot take
-advantage of the parallel build capabilities of make using this method,
-since there is only one rule.
-
-   By declaring the subdirectories as phony targets (you must do this as
-the subdirectory obviously always exists; otherwise it won't be built)
-you can remove these problems:
-
-     SUBDIRS = foo bar baz
-     
-     .PHONY: subdirs $(SUBDIRS)
-     
-     subdirs: $(SUBDIRS)
-     
-     $(SUBDIRS):
-             $(MAKE) -C $@
-     
-     foo: baz
-
-   Here we've also declared that the `foo' subdirectory cannot be built
-until after the `baz' subdirectory is complete; this kind of
-relationship declaration is particularly important when attempting
-parallel builds.
-
-   A phony target should not be a prerequisite of a real target file;
-if it is, its commands are run every time `make' goes to update that
-file.  As long as a phony target is never a prerequisite of a real
-target, the phony target commands will be executed only when the phony
-target is a specified goal (*note Arguments to Specify the Goals:
-Goals.).
-
-   Phony targets can have prerequisites.  When one directory contains
-multiple programs, it is most convenient to describe all of the
-programs in one makefile `./Makefile'.  Since the target remade by
-default will be the first one in the makefile, it is common to make
-this a phony target named `all' and give it, as prerequisites, all the
-individual programs.  For example:
-
-     all : prog1 prog2 prog3
-     .PHONY : all
-     
-     prog1 : prog1.o utils.o
-             cc -o prog1 prog1.o utils.o
-     
-     prog2 : prog2.o
-             cc -o prog2 prog2.o
-     
-     prog3 : prog3.o sort.o utils.o
-             cc -o prog3 prog3.o sort.o utils.o
-
-Now you can say just `make' to remake all three programs, or specify as
-arguments the ones to remake (as in `make prog1 prog3').
-
-   When one phony target is a prerequisite of another, it serves as a
-subroutine of the other.  For example, here `make cleanall' will delete
-the object files, the difference files, and the file `program':
-
-     .PHONY: cleanall cleanobj cleandiff
-     
-     cleanall : cleanobj cleandiff
-             rm program
-     
-     cleanobj :
-             rm *.o
-     
-     cleandiff :
-             rm *.diff
-
-
-File: make.info,  Node: Force Targets,  Next: Empty Targets,  Prev: Phony Targets,  Up: Rules
-
-Rules without Commands or Prerequisites
-=======================================
-
-   If a rule has no prerequisites or commands, and the target of the
-rule is a nonexistent file, then `make' imagines this target to have
-been updated whenever its rule is run.  This implies that all targets
-depending on this one will always have their commands run.
-
-   An example will illustrate this:
-
-     clean: FORCE
-             rm $(objects)
-     FORCE:
-
-   Here the target `FORCE' satisfies the special conditions, so the
-target `clean' that depends on it is forced to run its commands.  There
-is nothing special about the name `FORCE', but that is one name
-commonly used this way.
-
-   As you can see, using `FORCE' this way has the same results as using
-`.PHONY: clean'.
-
-   Using `.PHONY' is more explicit and more efficient.  However, other
-versions of `make' do not support `.PHONY'; thus `FORCE' appears in
-many makefiles.  *Note Phony Targets::.
-
-
-File: make.info,  Node: Empty Targets,  Next: Special Targets,  Prev: Force Targets,  Up: Rules
-
-Empty Target Files to Record Events
-===================================
-
-   The "empty target" is a variant of the phony target; it is used to
-hold commands for an action that you request explicitly from time to
-time.  Unlike a phony target, this target file can really exist; but
-the file's contents do not matter, and usually are empty.
-
-   The purpose of the empty target file is to record, with its
-last-modification time, when the rule's commands were last executed.  It
-does so because one of the commands is a `touch' command to update the
-target file.
-
-   The empty target file should have some prerequisites (otherwise it
-doesn't make sense).  When you ask to remake the empty target, the
-commands are executed if any prerequisite is more recent than the
-target; in other words, if a prerequisite has changed since the last
-time you remade the target.  Here is an example:
-
-     print: foo.c bar.c
-             lpr -p $?
-             touch print
-
-With this rule, `make print' will execute the `lpr' command if either
-source file has changed since the last `make print'.  The automatic
-variable `$?' is used to print only those files that have changed
-(*note Automatic Variables: Automatic.).
-
-
-File: make.info,  Node: Special Targets,  Next: Multiple Targets,  Prev: Empty Targets,  Up: Rules
-
-Special Built-in Target Names
-=============================
-
-   Certain names have special meanings if they appear as targets.
-
-`.PHONY'
-     The prerequisites of the special target `.PHONY' are considered to
-     be phony targets.  When it is time to consider such a target,
-     `make' will run its commands unconditionally, regardless of
-     whether a file with that name exists or what its last-modification
-     time is.  *Note Phony Targets: Phony Targets.
-
-`.SUFFIXES'
-     The prerequisites of the special target `.SUFFIXES' are the list
-     of suffixes to be used in checking for suffix rules.  *Note
-     Old-Fashioned Suffix Rules: Suffix Rules.
-
-`.DEFAULT'
-     The commands specified for `.DEFAULT' are used for any target for
-     which no rules are found (either explicit rules or implicit rules).
-     *Note Last Resort::.  If `.DEFAULT' commands are specified, every
-     file mentioned as a prerequisite, but not as a target in a rule,
-     will have these commands executed on its behalf.  *Note Implicit
-     Rule Search Algorithm: Implicit Rule Search.
-
-`.PRECIOUS'
-     The targets which `.PRECIOUS' depends on are given the following
-     special treatment: if `make' is killed or interrupted during the
-     execution of their commands, the target is not deleted.  *Note
-     Interrupting or Killing `make': Interrupts.  Also, if the target
-     is an intermediate file, it will not be deleted after it is no
-     longer needed, as is normally done.  *Note Chains of Implicit
-     Rules: Chained Rules.  In this latter respect it overlaps with the
-     `.SECONDARY' special target.
-
-     You can also list the target pattern of an implicit rule (such as
-     `%.o') as a prerequisite file of the special target `.PRECIOUS' to
-     preserve intermediate files created by rules whose target patterns
-     match that file's name.
-
-`.INTERMEDIATE'
-     The targets which `.INTERMEDIATE' depends on are treated as
-     intermediate files.  *Note Chains of Implicit Rules: Chained Rules.
-     `.INTERMEDIATE' with no prerequisites has no effect.
-
-`.SECONDARY'
-     The targets which `.SECONDARY' depends on are treated as
-     intermediate files, except that they are never automatically
-     deleted.  *Note Chains of Implicit Rules: Chained Rules.
-
-     `.SECONDARY' with no prerequisites causes all targets to be treated
-     as secondary (i.e., no target is removed because it is considered
-     intermediate).
-
-`.DELETE_ON_ERROR'
-     If `.DELETE_ON_ERROR' is mentioned as a target anywhere in the
-     makefile, then `make' will delete the target of a rule if it has
-     changed and its commands exit with a nonzero exit status, just as
-     it does when it receives a signal.  *Note Errors in Commands:
-     Errors.
-
-`.IGNORE'
-     If you specify prerequisites for `.IGNORE', then `make' will
-     ignore errors in execution of the commands run for those particular
-     files.  The commands for `.IGNORE' are not meaningful.
-
-     If mentioned as a target with no prerequisites, `.IGNORE' says to
-     ignore errors in execution of commands for all files.  This usage
-     of `.IGNORE' is supported only for historical compatibility.  Since
-     this affects every command in the makefile, it is not very useful;
-     we recommend you use the more selective ways to ignore errors in
-     specific commands.  *Note Errors in Commands: Errors.
-
-`.LOW_RESOLUTION_TIME'
-     If you specify prerequisites for `.LOW_RESOLUTION_TIME', `make'
-     assumes that these files are created by commands that generate low
-     resolution time stamps.  The commands for `.LOW_RESOLUTION_TIME'
-     are not meaningful.
-
-     The high resolution file time stamps of many modern hosts lessen
-     the chance of `make' incorrectly concluding that a file is up to
-     date.  Unfortunately, these hosts provide no way to set a high
-     resolution file time stamp, so commands like `cp -p' that
-     explicitly set a file's time stamp must discard its subsecond
-     part.  If a file is created by such a command, you should list it
-     as a prerequisite of `.LOW_RESOLUTION_TIME' so that `make' does
-     not mistakenly conclude that the file is out of date.  For example:
-
-          .LOW_RESOLUTION_TIME: dst
-          dst: src
-                  cp -p src dst
-
-     Since `cp -p' discards the subsecond part of `src''s time stamp,
-     `dst' is typically slightly older than `src' even when it is up to
-     date.  The `.LOW_RESOLUTION_TIME' line causes `make' to consider
-     `dst' to be up to date if its time stamp is at the start of the
-     same second that `src''s time stamp is in.
-
-     Due to a limitation of the archive format, archive member time
-     stamps are always low resolution.  You need not list archive
-     members as prerequisites of `.LOW_RESOLUTION_TIME', as `make' does
-     this automatically.
-
-`.SILENT'
-     If you specify prerequisites for `.SILENT', then `make' will not
-     print the commands to remake those particular files before
-     executing them.  The commands for `.SILENT' are not meaningful.
-
-     If mentioned as a target with no prerequisites, `.SILENT' says not
-     to print any commands before executing them.  This usage of
-     `.SILENT' is supported only for historical compatibility.  We
-     recommend you use the more selective ways to silence specific
-     commands.  *Note Command Echoing: Echoing.  If you want to silence
-     all commands for a particular run of `make', use the `-s' or
-     `--silent' option (*note Options Summary::).
-
-`.EXPORT_ALL_VARIABLES'
-     Simply by being mentioned as a target, this tells `make' to export
-     all variables to child processes by default.  *Note Communicating
-     Variables to a Sub-`make': Variables/Recursion.
-
-`.NOTPARALLEL'
-     If `.NOTPARALLEL' is mentioned as a target, then this invocation of
-     `make' will be run serially, even if the `-j' option is given.
-     Any recursively invoked `make' command will still be run in
-     parallel (unless its makefile contains this target).  Any
-     prerequisites on this target are ignored.
-
-   Any defined implicit rule suffix also counts as a special target if
-it appears as a target, and so does the concatenation of two suffixes,
-such as `.c.o'.  These targets are suffix rules, an obsolete way of
-defining implicit rules (but a way still widely used).  In principle,
-any target name could be special in this way if you break it in two and
-add both pieces to the suffix list.  In practice, suffixes normally
-begin with `.', so these special target names also begin with `.'.
-*Note Old-Fashioned Suffix Rules: Suffix Rules.
-
+* $$(@D):                                Automatic.           (line 151)
+* $$(@F):                                Automatic.           (line 151)
+* $$@:                                   Automatic.           (line 151)
+* $%:                                    Automatic.           (line  26)
+* $(%D):                                 Automatic.           (line 113)
+* $(%F):                                 Automatic.           (line 114)
+* $(*D):                                 Automatic.           (line 108)
+* $(*F):                                 Automatic.           (line 109)
+* $(+D):                                 Automatic.           (line 131)
+* $(+F):                                 Automatic.           (line 132)
+* $(.VARIABLES):                         Special Variables.   (line  10)
+* $(<D):                                 Automatic.           (line 121)
+* $(<F):                                 Automatic.           (line 122)
+* $(?D):                                 Automatic.           (line 137)
+* $(?F):                                 Automatic.           (line 138)
+* $(@D):                                 Automatic.           (line  97)
+* $(@F):                                 Automatic.           (line 103)
+* $(^D):                                 Automatic.           (line 126)
+* $(^F):                                 Automatic.           (line 127)
+* $*:                                    Automatic.           (line  57)
+* $*, and static pattern:                Static Usage.        (line  81)
+* $+:                                    Automatic.           (line  51)
+* $<:                                    Automatic.           (line  32)
+* $?:                                    Automatic.           (line  37)
+* $@:                                    Automatic.           (line  19)
+* $^:                                    Automatic.           (line  42)
+* % (automatic variable):                Automatic.           (line  26)
+* %D (automatic variable):               Automatic.           (line 113)
+* %F (automatic variable):               Automatic.           (line 114)
+* * (automatic variable):                Automatic.           (line  57)
+* * (automatic variable), unsupported bizarre usage: Missing. (line  44)
+* *D (automatic variable):               Automatic.           (line 108)
+* *F (automatic variable):               Automatic.           (line 109)
+* + (automatic variable):                Automatic.           (line  51)
+* +D (automatic variable):               Automatic.           (line 131)
+* +F (automatic variable):               Automatic.           (line 132)
+* .DEFAULT <1>:                          Last Resort.         (line  23)
+* .DEFAULT:                              Special Targets.     (line  20)
+* .DEFAULT, and empty commands:          Empty Commands.      (line  16)
+* .DELETE_ON_ERROR <1>:                  Errors.              (line  64)
+* .DELETE_ON_ERROR:                      Special Targets.     (line  57)
+* .EXPORT_ALL_VARIABLES <1>:             Special Targets.     (line 119)
+* .EXPORT_ALL_VARIABLES:                 Variables/Recursion. (line  94)
+* .IGNORE <1>:                           Errors.              (line  30)
+* .IGNORE:                               Special Targets.     (line  64)
+* .INTERMEDIATE:                         Special Targets.     (line  43)
+* .LIBPATTERNS:                          Libraries/Search.    (line   6)
+* .LOW_RESOLUTION_TIME:                  Special Targets.     (line  76)
+* .NOTPARALLEL:                          Special Targets.     (line 124)
+* .PHONY <1>:                            Special Targets.     (line   8)
+* .PHONY:                                Phony Targets.       (line  22)
+* .POSIX:                                Options/Recursion.   (line  60)
+* .PRECIOUS <1>:                         Special Targets.     (line  28)
+* .PRECIOUS:                             Interrupts.          (line  22)
+* .SECONDARY:                            Special Targets.     (line  48)
+* .SILENT <1>:                           Special Targets.     (line 106)
+* .SILENT:                               Echoing.             (line  24)
+* .SUFFIXES <1>:                         Suffix Rules.        (line  61)
+* .SUFFIXES:                             Special Targets.     (line  15)
+* .VARIABLES (list of variables):        Special Variables.   (line  10)
+* /usr/gnu/include:                      Include.             (line  51)
+* /usr/include:                          Include.             (line  51)
+* /usr/local/include:                    Include.             (line  51)
+* < (automatic variable):                Automatic.           (line  32)
+* <D (automatic variable):               Automatic.           (line 121)
+* <F (automatic variable):               Automatic.           (line 122)
+* ? (automatic variable):                Automatic.           (line  37)
+* ?D (automatic variable):               Automatic.           (line 137)
+* ?F (automatic variable):               Automatic.           (line 138)
+* @ (automatic variable):                Automatic.           (line  19)
+* @D (automatic variable):               Automatic.           (line  97)
+* @F (automatic variable):               Automatic.           (line 103)
+* ^ (automatic variable):                Automatic.           (line  42)
+* ^D (automatic variable):               Automatic.           (line 126)
+* ^F (automatic variable):               Automatic.           (line 127)
+* addprefix:                             File Name Functions. (line  79)
+* addsuffix:                             File Name Functions. (line  68)
+* AR:                                    Implicit Variables.  (line  34)
+* ARFLAGS:                               Implicit Variables.  (line 105)
+* AS:                                    Implicit Variables.  (line  37)
+* ASFLAGS:                               Implicit Variables.  (line 108)
+* basename:                              File Name Functions. (line  57)
+* bindir:                                Directory Variables. (line  45)
+* call:                                  Call Function.       (line   6)
+* CC:                                    Implicit Variables.  (line  40)
+* CFLAGS:                                Implicit Variables.  (line 112)
+* CO:                                    Implicit Variables.  (line  46)
+* COFLAGS:                               Implicit Variables.  (line 118)
+* COMSPEC:                               Execution.           (line  33)
+* CPP:                                   Implicit Variables.  (line  49)
+* CPPFLAGS:                              Implicit Variables.  (line 121)
+* CTANGLE:                               Implicit Variables.  (line  95)
+* CWEAVE:                                Implicit Variables.  (line  89)
+* CXX:                                   Implicit Variables.  (line  43)
+* CXXFLAGS:                              Implicit Variables.  (line 115)
+* define:                                Defining.            (line   6)
+* dir:                                   File Name Functions. (line  17)
+* else:                                  Conditional Syntax.  (line   6)
+* endef:                                 Defining.            (line   6)
+* endif:                                 Conditional Syntax.  (line   6)
+* error:                                 Make Control Functions.
+                                                              (line  11)
+* eval:                                  Eval Function.       (line   6)
+* exec_prefix:                           Directory Variables. (line  27)
+* export:                                Variables/Recursion. (line  35)
+* FC:                                    Implicit Variables.  (line  53)
+* FFLAGS:                                Implicit Variables.  (line 125)
+* filter:                                Text Functions.      (line 114)
+* filter-out:                            Text Functions.      (line 132)
+* findstring:                            Text Functions.      (line 103)
+* firstword:                             Text Functions.      (line 184)
+* foreach:                               Foreach Function.    (line   6)
+* GET:                                   Implicit Variables.  (line  57)
+* GFLAGS:                                Implicit Variables.  (line 128)
+* GNUmakefile:                           Makefile Names.      (line   7)
+* GPATH:                                 Search Algorithm.    (line  48)
+* if:                                    If Function.         (line   6)
+* ifdef:                                 Conditional Syntax.  (line   6)
+* ifeq:                                  Conditional Syntax.  (line   6)
+* ifndef:                                Conditional Syntax.  (line   6)
+* ifneq:                                 Conditional Syntax.  (line   6)
+* include:                               Include.             (line   6)
+* join:                                  File Name Functions. (line  90)
+* LDFLAGS:                               Implicit Variables.  (line 131)
+* LEX:                                   Implicit Variables.  (line  60)
+* LFLAGS:                                Implicit Variables.  (line 135)
+* libexecdir:                            Directory Variables. (line  58)
+* MAKE <1>:                              MAKE Variable.       (line   6)
+* MAKE:                                  Flavors.             (line  84)
+* MAKECMDGOALS:                          Goals.               (line  27)
+* Makefile:                              Makefile Names.      (line   7)
+* makefile:                              Makefile Names.      (line   7)
+* MAKEFILES <1>:                         MAKEFILES Variable.  (line   6)
+* MAKEFILES:                             Variables/Recursion. (line 122)
+* MAKEFLAGS:                             Options/Recursion.   (line   6)
+* MAKEINFO:                              Implicit Variables.  (line  75)
+* MAKELEVEL <1>:                         Flavors.             (line  84)
+* MAKELEVEL:                             Variables/Recursion. (line 110)
+* MAKEOVERRIDES:                         Options/Recursion.   (line  49)
+* MFLAGS:                                Options/Recursion.   (line  65)
+* notdir:                                File Name Functions. (line  27)
+* origin:                                Origin Function.     (line   6)
+* OUTPUT_OPTION:                         Catalogue of Rules.  (line 195)
+* override:                              Override Directive.  (line   6)
+* patsubst <1>:                          Text Functions.      (line  18)
+* patsubst:                              Substitution Refs.   (line  28)
+* PC:                                    Implicit Variables.  (line  64)
+* PFLAGS:                                Implicit Variables.  (line 138)
+* prefix:                                Directory Variables. (line  17)
+* RFLAGS:                                Implicit Variables.  (line 141)
+* RM:                                    Implicit Variables.  (line  98)
+* sbindir:                               Directory Variables. (line  51)
+* SHELL:                                 Execution.           (line  30)
+* shell:                                 Shell Function.      (line   6)
+* SHELL (command execution):             Execution.           (line   6)
+* sort:                                  Text Functions.      (line 146)
+* strip:                                 Text Functions.      (line  80)
+* subst <1>:                             Text Functions.      (line   9)
+* subst:                                 Multiple Targets.    (line  28)
+* suffix:                                File Name Functions. (line  43)
+* SUFFIXES:                              Suffix Rules.        (line  81)
+* TANGLE:                                Implicit Variables.  (line  92)
+* TEX:                                   Implicit Variables.  (line  79)
+* TEXI2DVI:                              Implicit Variables.  (line  82)
+* unexport:                              Variables/Recursion. (line  40)
+* value:                                 Value Function.      (line   6)
+* vpath:                                 Selective Search.    (line   6)
+* VPATH:                                 General Search.      (line   6)
+* vpath:                                 Directory Search.    (line   6)
+* VPATH:                                 Directory Search.    (line   6)
+* warning:                               Make Control Functions.
+                                                              (line  35)
+* WEAVE:                                 Implicit Variables.  (line  86)
+* wildcard <1>:                          Wildcard Function.   (line   6)
+* wildcard:                              File Name Functions. (line 107)
+* word:                                  Text Functions.      (line 159)
+* wordlist:                              Text Functions.      (line 168)
+* words:                                 Text Functions.      (line 180)
+* YACC:                                  Implicit Variables.  (line  67)
+* YACCR:                                 Implicit Variables.  (line  71)
+* YFLAGS:                                Implicit Variables.  (line 144)
+
+
Index: /trunk/src/gnu/lib/libbfd/arch/alpha/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/alpha/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/alpha/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/arm/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/arm/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/arm/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/armeb/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/armeb/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/armeb/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/hppa/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/hppa/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/hppa/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/i386/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/i386/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/i386/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/m68000/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/m68000/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/m68000/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/m68k/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/m68k/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/m68k/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/mips64eb/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/mips64eb/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/mips64eb/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/mips64el/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/mips64el/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/mips64el/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/mipseb/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/mipseb/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/mipseb/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/mipsel/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/mipsel/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/mipsel/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/powerpc/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/powerpc/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/powerpc/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/powerpc64/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/powerpc64/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/powerpc64/bfd.h	(revision 152)
@@ -1612,4 +1612,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/sh3eb/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/sh3eb/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/sh3eb/bfd.h	(revision 152)
@@ -1612,4 +1612,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/sh3el/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/sh3el/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/sh3el/bfd.h	(revision 152)
@@ -1612,4 +1612,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/sparc/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/sparc/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/sparc/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/sparc64/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/sparc64/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/sparc64/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/vax/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/vax/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/vax/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/lib/libbfd/arch/x86_64/bfd.h
===================================================================
--- /trunk/src/gnu/lib/libbfd/arch/x86_64/bfd.h	(revision 151)
+++ /trunk/src/gnu/lib/libbfd/arch/x86_64/bfd.h	(revision 152)
@@ -1611,4 +1611,5 @@
 #define bfd_mach_mips5                 5
 #define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
+#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
 #define bfd_mach_mipsisa32             32
 #define bfd_mach_mipsisa32r2           33
Index: /trunk/src/gnu/usr.bin/gdb6/arch/mips64eb/defs.mk
===================================================================
--- /trunk/src/gnu/usr.bin/gdb6/arch/mips64eb/defs.mk	(revision 151)
+++ /trunk/src/gnu/usr.bin/gdb6/arch/mips64eb/defs.mk	(revision 152)
@@ -4,4 +4,4 @@
 #
 G_INTERNAL_CFLAGS=     -I. -I${GNUHOSTDIST}/gdb -I${GNUHOSTDIST}/gdb/config -DLOCALEDIR="\"/usr/share/locale\"" -DHAVE_CONFIG_H -I${GNUHOSTDIST}/gdb/../include/opcode -I${GNUHOSTDIST}/gdb/../readline/..  -I../bfd -I${GNUHOSTDIST}/gdb/../bfd -I${GNUHOSTDIST}/gdb/../include  -I../intl -I${GNUHOSTDIST}/gdb/../intl  -DMI_OUT=1 -DTUI=1 -Wimplicit -Wreturn-type -Wcomment -Wtrigraphs -Wformat -Wparentheses -Wpointer-arith -Wformat-nonliteral -Wunused-label -Wunused-function -Wno-pointer-sign 
-G_LIBGDB_OBS=mips-tdep.o mipsnbsd-tdep.o corelow.o solib.o solib-svr4.o  nbsd-tdep.o ser-base.o ser-unix.o ser-pipe.o ser-tcp.o fork-child.o inf-ptrace.o nbsd-nat.o mipsnbsd-nat.o  remote.o dcache.o remote-utils.o tracepoint.o ax-general.o ax-gdb.o remote-fileio.o  cli-dump.o  cli-decode.o cli-script.o cli-cmds.o cli-setshow.o cli-utils.o  cli-logging.o  cli-interp.o mi-out.o mi-console.o  mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o  mi-cmd-file.o mi-cmd-disas.o mi-symbol-cmds.o  mi-interp.o  mi-main.o mi-parse.o mi-getopt.o mi-common.o posix-hdep.o tui-command.o  tui-data.o  tui-disasm.o  tui-file.o tui.o  tui-hooks.o  tui-interp.o  tui-io.o  tui-layout.o  tui-out.o  tui-regs.o  tui-source.o  tui-stack.o  tui-win.o  tui-windata.o  tui-wingeneral.o  tui-winsource.o c-exp.o  cp-name-parser.o  objc-exp.o  ada-exp.o  jv-exp.o  f-exp.o m2-exp.o p-exp.o  version.o  annotate.o  auxv.o  bfd-target.o  blockframe.o breakpoint.o findvar.o regcache.o  charset.o disasm.o dummy-frame.o  source.o value.o eval.o valops.o valarith.o valprint.o printcmd.o  block.o symtab.o symfile.o symmisc.o linespec.o dictionary.o  infcall.o  infcmd.o infrun.o  expprint.o environ.o stack.o thread.o  exceptions.o  inf-child.o  interps.o  main.o  macrotab.o macrocmd.o macroexp.o macroscope.o  event-loop.o event-top.o inf-loop.o completer.o  gdbarch.o arch-utils.o gdbtypes.o osabi.o copying.o  memattr.o mem-break.o target.o parse.o language.o buildsym.o  std-regs.o  signals.o  kod.o kod-cisco.o  gdb-events.o  exec.o bcache.o objfiles.o observer.o minsyms.o maint.o demangle.o  dbxread.o coffread.o coff-pe-read.o elfread.o  dwarfread.o dwarf2read.o mipsread.o stabsread.o corefile.o  dwarf2expr.o dwarf2loc.o dwarf2-frame.o  ada-lang.o c-lang.o f-lang.o objc-lang.o  ui-out.o cli-out.o  varobj.o wrapper.o  jv-lang.o jv-valprint.o jv-typeprint.o  m2-lang.o p-lang.o p-typeprint.o p-valprint.o  scm-exp.o scm-lang.o scm-valprint.o  sentinel-frame.o  complaints.o typeprint.o  ada-typeprint.o c-typeprint.o f-typeprint.o m2-typeprint.o  ada-valprint.o c-valprint.o cp-valprint.o f-valprint.o m2-valprint.o  nlmread.o serial.o mdebugread.o top.o utils.o  ui-file.o  user-regs.o  frame.o frame-unwind.o doublest.o  frame-base.o  gnu-v2-abi.o gnu-v3-abi.o hpacc-abi.o cp-abi.o cp-support.o  cp-namespace.o  reggroups.o regset.o  trad-frame.o  tramp-frame.o  solib.o solib-null.o  prologue-value.o inflow.o    init.o
+G_LIBGDB_OBS=mips-tdep.o mipsnbsd-tdep.o corelow.o solib.o solib-svr4.o  nbsd-tdep.o ser-base.o ser-unix.o ser-pipe.o ser-tcp.o fork-child.o inf-ptrace.o nbsd-nat.o mipsnbsd-nat.o  remote.o dcache.o remote-utils.o tracepoint.o ax-general.o ax-gdb.o remote-fileio.o cli-dump.o  cli-decode.o cli-script.o cli-cmds.o cli-setshow.o cli-utils.o  cli-logging.o  cli-interp.o mi-out.o mi-console.o  mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o  mi-cmd-file.o mi-cmd-disas.o mi-symbol-cmds.o  mi-interp.o  mi-main.o mi-parse.o mi-getopt.o mi-common.o posix-hdep.o tui-command.o  tui-data.o  tui-disasm.o  tui-file.o tui.o  tui-hooks.o  tui-interp.o  tui-io.o  tui-layout.o  tui-out.o  tui-regs.o  tui-source.o  tui-stack.o  tui-win.o  tui-windata.o  tui-wingeneral.o  tui-winsource.o c-exp.o  cp-name-parser.o  objc-exp.o  ada-exp.o  jv-exp.o  f-exp.o m2-exp.o p-exp.o  version.o  annotate.o  auxv.o  bfd-target.o  blockframe.o breakpoint.o findvar.o regcache.o  charset.o disasm.o dummy-frame.o  source.o value.o eval.o valops.o valarith.o valprint.o printcmd.o  block.o symtab.o symfile.o symmisc.o linespec.o dictionary.o  infcall.o  infcmd.o infrun.o  expprint.o environ.o stack.o thread.o  exceptions.o  inf-child.o  interps.o  main.o  macrotab.o macrocmd.o macroexp.o macroscope.o  event-loop.o event-top.o inf-loop.o completer.o  gdbarch.o arch-utils.o gdbtypes.o osabi.o copying.o  memattr.o mem-break.o target.o parse.o language.o buildsym.o  std-regs.o  signals.o  kod.o kod-cisco.o  gdb-events.o  exec.o bcache.o objfiles.o observer.o minsyms.o maint.o demangle.o  dbxread.o coffread.o coff-pe-read.o elfread.o  dwarfread.o dwarf2read.o mipsread.o stabsread.o corefile.o  dwarf2expr.o dwarf2loc.o dwarf2-frame.o  ada-lang.o c-lang.o f-lang.o objc-lang.o  ui-out.o cli-out.o  varobj.o wrapper.o  jv-lang.o jv-valprint.o jv-typeprint.o  m2-lang.o p-lang.o p-typeprint.o p-valprint.o  scm-exp.o scm-lang.o scm-valprint.o  sentinel-frame.o  complaints.o typeprint.o  ada-typeprint.o c-typeprint.o f-typeprint.o m2-typeprint.o  ada-valprint.o c-valprint.o cp-valprint.o f-valprint.o m2-valprint.o  nlmread.o serial.o mdebugread.o top.o utils.o  ui-file.o  user-regs.o  frame.o frame-unwind.o doublest.o  frame-base.o  gnu-v2-abi.o gnu-v3-abi.o hpacc-abi.o cp-abi.o cp-support.o  cp-namespace.o  reggroups.o regset.o  trad-frame.o  tramp-frame.o  solib.o solib-null.o  prologue-value.o inflow.o    init.o
 G_SIM_OBS=
Index: /trunk/src/gnu/usr.bin/gdb6/arch/mips64eb/version.c
===================================================================
--- /trunk/src/gnu/usr.bin/gdb6/arch/mips64eb/version.c	(revision 151)
+++ /trunk/src/gnu/usr.bin/gdb6/arch/mips64eb/version.c	(revision 152)
@@ -5,4 +5,4 @@
 #include "version.h"
 const char version[] = "6.5";
-const char host_name[] = "mipseb--netbsd";
-const char target_name[] = "mipseb--netbsd";
+const char host_name[] = "mips64--netbsd";
+const char target_name[] = "mips64--netbsd";
Index: /trunk/src/gnu/usr.bin/gdb6/arch/mips64el/defs.mk
===================================================================
--- /trunk/src/gnu/usr.bin/gdb6/arch/mips64el/defs.mk	(revision 151)
+++ /trunk/src/gnu/usr.bin/gdb6/arch/mips64el/defs.mk	(revision 152)
@@ -4,4 +4,4 @@
 #
 G_INTERNAL_CFLAGS=     -I. -I${GNUHOSTDIST}/gdb -I${GNUHOSTDIST}/gdb/config -DLOCALEDIR="\"/usr/share/locale\"" -DHAVE_CONFIG_H -I${GNUHOSTDIST}/gdb/../include/opcode -I${GNUHOSTDIST}/gdb/../readline/..  -I../bfd -I${GNUHOSTDIST}/gdb/../bfd -I${GNUHOSTDIST}/gdb/../include  -I../intl -I${GNUHOSTDIST}/gdb/../intl  -DMI_OUT=1 -DTUI=1 -Wimplicit -Wreturn-type -Wcomment -Wtrigraphs -Wformat -Wparentheses -Wpointer-arith -Wformat-nonliteral -Wunused-label -Wunused-function -Wno-pointer-sign 
-G_LIBGDB_OBS=mips-tdep.o mipsnbsd-tdep.o corelow.o solib.o solib-svr4.o  nbsd-tdep.o ser-base.o ser-unix.o ser-pipe.o ser-tcp.o fork-child.o inf-ptrace.o nbsd-nat.o mipsnbsd-nat.o  remote.o dcache.o remote-utils.o tracepoint.o ax-general.o ax-gdb.o remote-fileio.o  cli-dump.o  cli-decode.o cli-script.o cli-cmds.o cli-setshow.o cli-utils.o  cli-logging.o  cli-interp.o mi-out.o mi-console.o  mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o  mi-cmd-file.o mi-cmd-disas.o mi-symbol-cmds.o  mi-interp.o  mi-main.o mi-parse.o mi-getopt.o mi-common.o posix-hdep.o tui-command.o  tui-data.o  tui-disasm.o  tui-file.o tui.o  tui-hooks.o  tui-interp.o  tui-io.o  tui-layout.o  tui-out.o  tui-regs.o  tui-source.o  tui-stack.o  tui-win.o  tui-windata.o  tui-wingeneral.o  tui-winsource.o c-exp.o  cp-name-parser.o  objc-exp.o  ada-exp.o  jv-exp.o  f-exp.o m2-exp.o p-exp.o  version.o  annotate.o  auxv.o  bfd-target.o  blockframe.o breakpoint.o findvar.o regcache.o  charset.o disasm.o dummy-frame.o  source.o value.o eval.o valops.o valarith.o valprint.o printcmd.o  block.o symtab.o symfile.o symmisc.o linespec.o dictionary.o  infcall.o  infcmd.o infrun.o  expprint.o environ.o stack.o thread.o  exceptions.o  inf-child.o  interps.o  main.o  macrotab.o macrocmd.o macroexp.o macroscope.o  event-loop.o event-top.o inf-loop.o completer.o  gdbarch.o arch-utils.o gdbtypes.o osabi.o copying.o  memattr.o mem-break.o target.o parse.o language.o buildsym.o  std-regs.o  signals.o  kod.o kod-cisco.o  gdb-events.o  exec.o bcache.o objfiles.o observer.o minsyms.o maint.o demangle.o  dbxread.o coffread.o coff-pe-read.o elfread.o  dwarfread.o dwarf2read.o mipsread.o stabsread.o corefile.o  dwarf2expr.o dwarf2loc.o dwarf2-frame.o  ada-lang.o c-lang.o f-lang.o objc-lang.o  ui-out.o cli-out.o  varobj.o wrapper.o  jv-lang.o jv-valprint.o jv-typeprint.o  m2-lang.o p-lang.o p-typeprint.o p-valprint.o  scm-exp.o scm-lang.o scm-valprint.o  sentinel-frame.o  complaints.o typeprint.o  ada-typeprint.o c-typeprint.o f-typeprint.o m2-typeprint.o  ada-valprint.o c-valprint.o cp-valprint.o f-valprint.o m2-valprint.o  nlmread.o serial.o mdebugread.o top.o utils.o  ui-file.o  user-regs.o  frame.o frame-unwind.o doublest.o  frame-base.o  gnu-v2-abi.o gnu-v3-abi.o hpacc-abi.o cp-abi.o cp-support.o  cp-namespace.o  reggroups.o regset.o  trad-frame.o  tramp-frame.o  solib.o solib-null.o  prologue-value.o inflow.o    init.o
+G_LIBGDB_OBS=mips-tdep.o mipsnbsd-tdep.o corelow.o solib.o solib-svr4.o  nbsd-tdep.o ser-base.o ser-unix.o ser-pipe.o ser-tcp.o fork-child.o inf-ptrace.o nbsd-nat.o mipsnbsd-nat.o  remote.o dcache.o remote-utils.o tracepoint.o ax-general.o ax-gdb.o remote-fileio.o cli-dump.o  cli-decode.o cli-script.o cli-cmds.o cli-setshow.o cli-utils.o  cli-logging.o  cli-interp.o mi-out.o mi-console.o  mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o  mi-cmd-file.o mi-cmd-disas.o mi-symbol-cmds.o  mi-interp.o  mi-main.o mi-parse.o mi-getopt.o mi-common.o posix-hdep.o tui-command.o  tui-data.o  tui-disasm.o  tui-file.o tui.o  tui-hooks.o  tui-interp.o  tui-io.o  tui-layout.o  tui-out.o  tui-regs.o  tui-source.o  tui-stack.o  tui-win.o  tui-windata.o  tui-wingeneral.o  tui-winsource.o c-exp.o  cp-name-parser.o  objc-exp.o  ada-exp.o  jv-exp.o  f-exp.o m2-exp.o p-exp.o  version.o  annotate.o  auxv.o  bfd-target.o  blockframe.o breakpoint.o findvar.o regcache.o  charset.o disasm.o dummy-frame.o  source.o value.o eval.o valops.o valarith.o valprint.o printcmd.o  block.o symtab.o symfile.o symmisc.o linespec.o dictionary.o  infcall.o  infcmd.o infrun.o  expprint.o environ.o stack.o thread.o  exceptions.o  inf-child.o  interps.o  main.o  macrotab.o macrocmd.o macroexp.o macroscope.o  event-loop.o event-top.o inf-loop.o completer.o  gdbarch.o arch-utils.o gdbtypes.o osabi.o copying.o  memattr.o mem-break.o target.o parse.o language.o buildsym.o  std-regs.o  signals.o  kod.o kod-cisco.o  gdb-events.o  exec.o bcache.o objfiles.o observer.o minsyms.o maint.o demangle.o  dbxread.o coffread.o coff-pe-read.o elfread.o  dwarfread.o dwarf2read.o mipsread.o stabsread.o corefile.o  dwarf2expr.o dwarf2loc.o dwarf2-frame.o  ada-lang.o c-lang.o f-lang.o objc-lang.o  ui-out.o cli-out.o  varobj.o wrapper.o  jv-lang.o jv-valprint.o jv-typeprint.o  m2-lang.o p-lang.o p-typeprint.o p-valprint.o  scm-exp.o scm-lang.o scm-valprint.o  sentinel-frame.o  complaints.o typeprint.o  ada-typeprint.o c-typeprint.o f-typeprint.o m2-typeprint.o  ada-valprint.o c-valprint.o cp-valprint.o f-valprint.o m2-valprint.o  nlmread.o serial.o mdebugread.o top.o utils.o  ui-file.o  user-regs.o  frame.o frame-unwind.o doublest.o  frame-base.o  gnu-v2-abi.o gnu-v3-abi.o hpacc-abi.o cp-abi.o cp-support.o  cp-namespace.o  reggroups.o regset.o  trad-frame.o  tramp-frame.o  solib.o solib-null.o  prologue-value.o inflow.o    init.o
 G_SIM_OBS=
Index: /trunk/src/gnu/usr.bin/gdb6/arch/mips64el/version.c
===================================================================
--- /trunk/src/gnu/usr.bin/gdb6/arch/mips64el/version.c	(revision 151)
+++ /trunk/src/gnu/usr.bin/gdb6/arch/mips64el/version.c	(revision 152)
@@ -5,4 +5,4 @@
 #include "version.h"
 const char version[] = "6.5";
-const char host_name[] = "mipsel--netbsd";
-const char target_name[] = "mipsel--netbsd";
+const char host_name[] = "mips64el--netbsd";
+const char target_name[] = "mips64el--netbsd";
Index: /trunk/src/include/heimdal/protos.h
===================================================================
--- /trunk/src/include/heimdal/protos.h	(revision 151)
+++ /trunk/src/include/heimdal/protos.h	(revision 152)
@@ -35,5 +35,5 @@
  * Add here functions that don't have a prototype on your system.
  *
- * $Id: protos.h,v 1.1 2000/06/16 19:18:30 thorpej Exp $
+ * $Id: protos.h,v 1.1.1.1 2000/06/16 19:18:30 thorpej Exp $
  */
 
Index: /trunk/src/include/math.h
===================================================================
--- /trunk/src/include/math.h	(revision 151)
+++ /trunk/src/include/math.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: math.h,v 1.47.16.1 2010/04/21 05:26:00 matt Exp $	*/
+/*	$NetBSD: math.h,v 1.47.16.2 2011/04/29 07:40:46 matt Exp $	*/
 
 /*
@@ -99,6 +99,10 @@
 /* 7.12#5 NAN: a quiet NaN, if supported */
 #ifdef __HAVE_NANF
+#if __GNUC_PREREQ__(3,3)
+#define NAN     __builtin_nanf("")
+#else
 extern const union __float_u __nanf;
 #define	NAN		__nanf.__val
+#endif
 #endif /* __HAVE_NANF */
 
Index: /trunk/src/lib/csu/mips/crt0.c
===================================================================
--- /trunk/src/lib/csu/mips/crt0.c	(revision 151)
+++ /trunk/src/lib/csu/mips/crt0.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: crt0.c,v 1.19.32.1 2009/08/30 09:59:26 matt Exp $ */
+/* $NetBSD: crt0.c,v 1.19.32.2 2011/02/15 18:07:30 matt Exp $ */
 
 /*
@@ -119,5 +119,5 @@
 
 
-	argc = *(int *)ksp;
+	argc = *(long *)ksp;
 	argv = ksp + 1;
 	environ = ksp + 2 + argc;	/* 2: argc + NULL ending argv */
@@ -164,5 +164,5 @@
  */
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: crt0.c,v 1.19.32.1 2009/08/30 09:59:26 matt Exp $");
+__RCSID("$NetBSD: crt0.c,v 1.19.32.2 2011/02/15 18:07:30 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
Index: /trunk/src/lib/libc/arch/mips/Makefile.inc
===================================================================
--- /trunk/src/lib/libc/arch/mips/Makefile.inc	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/Makefile.inc	(revision 152)
@@ -1,3 +1,5 @@
-#	$NetBSD: Makefile.inc,v 1.8.34.2 2009/08/27 16:51:27 matt Exp $
+#	$NetBSD: Makefile.inc,v 1.8.34.3 2011/04/29 07:48:33 matt Exp $
+
+.include <bsd.own.mk>
 
 SRCS+=	__sigaction14_sigtramp.c __sigtramp2.S
@@ -9,3 +11,4 @@
 .include <softfloat/Makefile.inc>
 CPPFLAGS+= -DSOFTFLOAT_NEED_FIXUNS
+CPPFLAGS+= -DSOFTFLOAT
 .endif
Index: /trunk/src/lib/libc/arch/mips/gdtoa/Makefile.inc
===================================================================
--- /trunk/src/lib/libc/arch/mips/gdtoa/Makefile.inc	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/gdtoa/Makefile.inc	(revision 152)
@@ -1,3 +1,9 @@
-#	$NetBSD: Makefile.inc,v 1.1 2006/03/15 17:35:18 kleink Exp $
+#	$NetBSD: Makefile.inc,v 1.1.34.1 2011/04/29 07:48:33 matt Exp $
 
 SRCS+=	strtof.c
+.if (${MACHINE_ARCH} == "mips64eb" || ${MACHINE_ARCH} == "mips64el")
+.if !defined(CPUFLAGS) || empty(CPUFLAGS:M-mabi=32)
+SRCS+=	strtold_pQ.c
+SRCS+=	strtopQ.c
+.endif
+.endif
Index: /trunk/src/lib/libc/arch/mips/gdtoa/gd_qnan.h
===================================================================
--- /trunk/src/lib/libc/arch/mips/gdtoa/gd_qnan.h	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/gdtoa/gd_qnan.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: gd_qnan.h,v 1.1 2006/01/25 15:33:28 kleink Exp $ */
+/* $NetBSD: gd_qnan.h,v 1.1.34.1 2011/04/29 07:48:34 matt Exp $ */
 
 #include <machine/endian.h>
@@ -7,6 +7,14 @@
 #define d_QNAN0 0x7ff40000
 #define d_QNAN1 0x0
+#define ld_QNAN0 0x7fff8000
+#define ld_QNAN1 0x0
+#define ld_QNAN2 0x0
+#define ld_QNAN3 0x0
 #else
 #define d_QNAN0 0x0
 #define d_QNAN1 0x7ff40000
+#define ld_QNAN0 0x0
+#define ld_QNAN1 0x0
+#define ld_QNAN2 0x0
+#define ld_QNAN3 0x7fff8000
 #endif
Index: /trunk/src/lib/libc/arch/mips/gen/Makefile.inc
===================================================================
--- /trunk/src/lib/libc/arch/mips/gen/Makefile.inc	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/gen/Makefile.inc	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: Makefile.inc,v 1.28.34.2 2010/01/27 06:55:25 matt Exp $
+#	$NetBSD: Makefile.inc,v 1.28.34.3 2011/04/29 07:48:34 matt Exp $
 
 .if ${MKSOFTFLOAT} == "no"
@@ -8,10 +8,10 @@
 
 # Common ieee754 constants and functions
-SRCS+=	infinityf_ieee754.c infinity_ieee754.c infinityl_dbl_ieee754.c
-SRCS+=	fpclassifyf_ieee754.c fpclassifyd_ieee754.c
-SRCS+=	isinff_ieee754.c isinfd_ieee754.c
-SRCS+=	isnanf_ieee754.c isnand_ieee754.c
-SRCS+=	isfinitef_ieee754.c isfinited_ieee754.c
-SRCS+=	signbitf_ieee754.c signbitd_ieee754.c
+SRCS+=	infinityf_ieee754.c infinity_ieee754.c infinityl_ieee754.c
+SRCS+=	fpclassifyf_ieee754.c fpclassifyd_ieee754.c fpclassifyl_ieee754.c
+SRCS+=	isinff_ieee754.c isinfd_ieee754.c isinfl_ieee754.c
+SRCS+=	isnanf_ieee754.c isnand_ieee754.c isnanl_ieee754.c
+SRCS+=	isfinitef_ieee754.c isfinited_ieee754.c isfinitel_ieee754.c
+SRCS+=	signbitf_ieee754.c signbitd_ieee754.c signbitl_ieee754.c
 
 SRCS+=	nanf.c
@@ -33,6 +33,8 @@
 SRCS+=	cacheflush.c
 
-SRCS.mips.gen=	Lint__setjmp.c Lint_bswap16.c Lint_bswap32.c Lint_swapcontext.c
-LSRCS+=		${SRCS.mips.gen}
-DPSRCS+=	${SRCS.mips.gen}
-CLEANFILES+=	${SRCS.mips.gen}
+CPPFLAGS._lwp.c	+= -D_LIBC_SOURCE
+
+LSRCS.mips.gen=	Lint__setjmp.c Lint_bswap16.c Lint_bswap32.c Lint_swapcontext.c
+LSRCS+=		${LSRCS.mips.gen}
+DPSRCS+=	${LSRCS.mips.gen}
+CLEANFILES+=	${LSRCS.mips.gen}
Index: /trunk/src/lib/libc/arch/mips/gen/_lwp.c
===================================================================
--- /trunk/src/lib/libc/arch/mips/gen/_lwp.c	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/gen/_lwp.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:56 martin Exp $	*/
+/*	$NetBSD: _lwp.c,v 1.5.14.2 2011/04/29 08:03:55 matt Exp $	*/
 
 /*
@@ -32,5 +32,5 @@
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: _lwp.c,v 1.5 2008/04/28 20:22:56 martin Exp $");
+__RCSID("$NetBSD: _lwp.c,v 1.5.14.2 2011/04/29 08:03:55 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
@@ -41,8 +41,13 @@
 #include <stdlib.h>
 
-#define CALLFRAME_SIZ	24
+#if defined(__mips_o32) || defined(__mips_o64)
+#define CALLFRAME_SIZ	(6 * sizeof(void *))
+#else
+#define CALLFRAME_SIZ	(4 * sizeof(uint64_t))
+#endif
 
-void _lwp_makecontext(ucontext_t *u, void (*start)(void *),
-	void *arg, void *private, caddr_t stack_base, size_t stack_size)
+void
+_lwp_makecontext(ucontext_t *u, void (*start)(void *),
+	void *arg, void *tcb, caddr_t stack_base, size_t stack_size)
 {
 	caddr_t sp;
@@ -57,8 +62,11 @@
 	sp = stack_base + stack_size - CALLFRAME_SIZ;
 
-	gr[_REG_EPC] = (unsigned long) start;
-	gr[_REG_T9] = (unsigned long) start; /* required for .abicalls */
-	gr[_REG_RA] = (unsigned long) _lwp_exit;
-	gr[_REG_A0] = (unsigned long) arg;
-	gr[_REG_SP] = (unsigned long) sp;
+	gr[_REG_EPC] = (uintptr_t) start;
+	gr[_REG_T9] = (uintptr_t) start; /* required for .abicalls */
+	gr[_REG_RA] = (uintptr_t) _lwp_exit;
+	gr[_REG_A0] = (uintptr_t) arg;
+	gr[_REG_SP] = (uintptr_t) sp;
+	u->uc_mcontext._mc_tlsbase =
+	    (uintptr_t)tcb + TLS_TP_OFFSET + sizeof(struct tls_tcb);
+	u->uc_flags |= _UC_TLSBASE;
 }
Index: /trunk/src/lib/libc/arch/mips/gen/_setjmp.S
===================================================================
--- /trunk/src/lib/libc/arch/mips/gen/_setjmp.S	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/gen/_setjmp.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: _setjmp.S,v 1.20.34.5 2010/02/03 23:46:47 matt Exp $	*/
+/*	$NetBSD: _setjmp.S,v 1.20.34.6 2011/04/29 08:01:50 matt Exp $	*/
 
 /*-
@@ -47,5 +47,5 @@
 	RCSID("from: @(#)_setjmp.s	8.1 (Berkeley) 6/4/93")
 #else
-	RCSID("$NetBSD: _setjmp.S,v 1.20.34.5 2010/02/03 23:46:47 matt Exp $")
+	RCSID("$NetBSD: _setjmp.S,v 1.20.34.6 2011/04/29 08:01:50 matt Exp $")
 #endif
 #endif /* LIBC_SCCS and not lint */
@@ -89,5 +89,4 @@
 #ifndef SOFTFLOAT_FOR_GCC
 	cfc1	v0, $31				# too bad cant check if FP used
-	INT_S	v0, _OFFSETOF_SC_FPREGS_FCSR(a0)
 #if defined(__mips_n64) || defined(__mips_n32)
 	FP_S	$f30, _OFFSETOF_SC_FPREGS_F30(a0)
@@ -110,4 +109,5 @@
 	FP_S	$f31, _OFFSETOF_SC_FPREGS_F31(a0)
 #endif
+	INT_S	v0, _OFFSETOF_SC_FPREGS_FCSR(a0)
 #endif	/* SOFTFLOAT_FOR_GCC */
 	REG_EPILOGUE
@@ -140,9 +140,11 @@
 	REG_L		gp, _OFFSETOF_SC_REGS_GP(a0)
 #endif
+#ifndef SOFTFLOAT_FOR_GCC
 	# get fpu status
+	INT_L		v0, _OFFSETOF_SC_FPREGS_FCSR(a0)
+#endif
 	REG_L		sp, _OFFSETOF_SC_REGS_SP(a0)
 	REG_L		s8, _OFFSETOF_SC_REGS_S8(a0)
 #ifndef SOFTFLOAT_FOR_GCC
-	INT_L		v0, _OFFSETOF_SC_FPREGS_FCSR(a0)
 	ctc1		v0, $31
 	/*
@@ -174,7 +176,6 @@
 
 	REG_EPILOGUE
-	move	v0, a1			# get return value in 1st arg
 	j	ra
-	nop
+	 move	v0, a1			# get return value in 1st arg
 
 botch:
@@ -184,5 +185,7 @@
 	 */
 	jal	_C_LABEL(longjmperror)
+	 nop
 	
 	PIC_TAILCALL(abort)
+	 nop
 END(_longjmp)
Index: /trunk/src/lib/libc/arch/mips/gen/longjmp.c
===================================================================
--- /trunk/src/lib/libc/arch/mips/gen/longjmp.c	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/gen/longjmp.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: longjmp.c,v 1.2.14.2 2010/04/30 16:23:23 matt Exp $	*/
+/*	$NetBSD: longjmp.c,v 1.2.14.3 2011/04/29 08:01:50 matt Exp $	*/
 
 /*-
@@ -50,5 +50,5 @@
 
 	/* Ensure non-zero SP and sigcontext magic number is present */
-	if (sc->sc_regs[_R_SP] == 0 || sc->sc_regs[_R_ZERO] != 0xACEDBADE)
+	if (sc->sc_regs[_R_SP] == 0 || sc->sc_regs[_R_ZERO] != (mips_reg_t)0xACEDBADE)
 		goto err;
 
Index: /trunk/src/lib/libc/arch/mips/gen/nanf.c
===================================================================
--- /trunk/src/lib/libc/arch/mips/gen/nanf.c	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/gen/nanf.c	(revision 152)
@@ -1,7 +1,7 @@
-/*	$NetBSD: nanf.c,v 1.3 2005/04/15 22:39:11 kleink Exp $	*/
+/*	$NetBSD: nanf.c,v 1.3.36.1 2011/04/29 07:40:47 matt Exp $	*/
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: nanf.c,v 1.3 2005/04/15 22:39:11 kleink Exp $");
+__RCSID("$NetBSD: nanf.c,v 1.3.36.1 2011/04/29 07:40:47 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
@@ -16,2 +16,4 @@
 		{ {    0,    0, 0xa0, 0x7f } };
 #endif
+
+__warn_references(__nanf, "warning: <math.h> defines NAN incorrectly for your compiler.")
Index: /trunk/src/lib/libc/arch/mips/net/Makefile.inc
===================================================================
--- /trunk/src/lib/libc/arch/mips/net/Makefile.inc	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/net/Makefile.inc	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: Makefile.inc,v 1.3 2003/08/01 17:03:51 lukem Exp $
+#	$NetBSD: Makefile.inc,v 1.3.46.1 2011/04/29 08:01:51 matt Exp $
 
 # objects built from assembler sources (need lint stubs)
@@ -5,6 +5,6 @@
 SRCS+=  
 
-SRCS.mips.net=	Lint_htonl.c Lint_htons.c Lint_ntohl.c Lint_ntohs.c
-LSRCS+=		${SRCS.mips.net}
-DPSRCS+=	${SRCS.mips.net}
-CLEANFILES+=	${SRCS.mips.net}
+LSRCS.mips.net=	Lint_htonl.c Lint_htons.c Lint_ntohl.c Lint_ntohs.c
+LSRCS+=		${LSRCS.mips.net}
+DPSRCS+=	${LSRCS.mips.net}
+CLEANFILES+=	${LSRCS.mips.net}
Index: /trunk/src/lib/libc/arch/mips/softfloat/mips-gcc.h
===================================================================
--- /trunk/src/lib/libc/arch/mips/softfloat/mips-gcc.h	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/softfloat/mips-gcc.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: mips-gcc.h,v 1.1.2.1 2009/08/27 16:51:27 matt Exp $ */
+/* $NetBSD: mips-gcc.h,v 1.1.2.2 2011/04/29 07:48:34 matt Exp $ */
 
 /*
@@ -86,10 +86,15 @@
 /*
 -------------------------------------------------------------------------------
-The ARM FPA is odd in that it stores doubles high-order word first, no matter
+The MIPS FPA is odd in that it stores doubles high-order word first, no matter
 what the endianness of the CPU.  VFP is sane.
 -------------------------------------------------------------------------------
 */
 #if defined(SOFTFLOAT_FOR_GCC)
+#if defined(__MIPSEB__)
 #define FLOAT64_DEMANGLE(a)	(a)
 #define FLOAT64_MANGLE(a)	(a)
+#else
+#define FLOAT64_DEMANGLE(a)	(((a) << 32) | ((a) >> 32))
+#define FLOAT64_MANGLE(a)	FLOAT64_DEMANGLE(a)
 #endif
+#endif
Index: /trunk/src/lib/libc/arch/mips/softfloat/softfloat.h
===================================================================
--- /trunk/src/lib/libc/arch/mips/softfloat/softfloat.h	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/softfloat/softfloat.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: softfloat.h,v 1.1.2.1 2009/08/27 16:51:27 matt Exp $	*/
+/*	softfloat.h,v 1.1.2.2 2011/04/29 07:48:34 matt Exp	*/
 
 /* This is a derivative work. */
@@ -43,5 +43,7 @@
 */
 /* #define FLOATX80 */
-/* #define FLOAT128 */
+#if defined(__mips_n32) || defined(__mips_n64)
+#define FLOAT128
+#endif
 
 #include <machine/ieeefp.h>
@@ -134,7 +136,7 @@
 floatx80 int64_to_floatx80( long long );
 #endif
+#endif
 #ifdef FLOAT128
 float128 int64_to_float128( long long );
-#endif
 #endif
 
@@ -284,5 +286,5 @@
 int float128_to_int32_round_to_zero( float128 );
 #if defined(SOFTFLOAT_FOR_GCC) && defined(SOFTFLOAT_NEED_FIXUNS)
-unsigned int float128_to_uint32_round_to_zero( float64 );
+unsigned int float128_to_uint32_round_to_zero( float128 );
 #endif
 long long float128_to_int64( float128 );
@@ -316,5 +318,6 @@
 int float128_lt_quiet( float128, float128 );
 int float128_is_signaling_nan( float128 );
-
-#endif
-
+flag float128_is_nan( float128 );
+
+#endif
+
Index: /trunk/src/lib/libc/arch/mips/string/bzero.S
===================================================================
--- /trunk/src/lib/libc/arch/mips/string/bzero.S	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/string/bzero.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: bzero.S,v 1.8.46.2 2009/08/18 06:55:09 matt Exp $	*/
+/*	$NetBSD: bzero.S,v 1.8.46.3 2011/04/29 08:01:51 matt Exp $	*/
 
 /*-
@@ -39,5 +39,5 @@
 	RCSID("from: @(#)bzero.s	8.1 (Berkeley) 6/4/93")
 #else
-	RCSID("$NetBSD: bzero.S,v 1.8.46.2 2009/08/18 06:55:09 matt Exp $")
+	RCSID("$NetBSD: bzero.S,v 1.8.46.3 2011/04/29 08:01:51 matt Exp $")
 #endif
 #endif /* LIBC_SCCS and not lint */
@@ -72,5 +72,5 @@
 #endif
 	nor		a2, zero, a2	# complement the mask
-	REL_L		v0, -SZREG(a0)	# load the word to partially clear
+	REG_L		v0, -SZREG(a0)	# load the word to partially clear
 	and		v0, v0, a2	# clear the bytes
 	REG_S		v0, -SZREG(a0)	# store it back
Index: /trunk/src/lib/libc/arch/mips/sys/brk.S
===================================================================
--- /trunk/src/lib/libc/arch/mips/sys/brk.S	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/sys/brk.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: brk.S,v 1.16.46.3 2009/09/05 03:04:58 matt Exp $	*/
+/*	$NetBSD: brk.S,v 1.16.46.4 2011/04/29 08:01:51 matt Exp $	*/
 
 /*-
@@ -39,5 +39,5 @@
 	RCSID("from: @(#)brk.s	8.1 (Berkeley) 6/4/93")
 #else
-	RCSID("$NetBSD: brk.S,v 1.16.46.3 2009/09/05 03:04:58 matt Exp $")
+	RCSID("$NetBSD: brk.S,v 1.16.46.4 2011/04/29 08:01:51 matt Exp $")
 #endif
 #endif /* LIBC_SCCS and not lint */
Index: /trunk/src/lib/libc/arch/mips/sys/sbrk.S
===================================================================
--- /trunk/src/lib/libc/arch/mips/sys/sbrk.S	(revision 151)
+++ /trunk/src/lib/libc/arch/mips/sys/sbrk.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sbrk.S,v 1.16.34.3 2009/09/05 03:04:58 matt Exp $	*/
+/*	$NetBSD: sbrk.S,v 1.16.34.4 2011/04/29 08:01:51 matt Exp $	*/
 
 /*-
@@ -39,5 +39,5 @@
 	RCSID("from: @(#)sbrk.s	8.1 (Berkeley) 6/4/93")
 #else
-	RCSID("$NetBSD: sbrk.S,v 1.16.34.3 2009/09/05 03:04:58 matt Exp $")
+	RCSID("$NetBSD: sbrk.S,v 1.16.34.4 2011/04/29 08:01:51 matt Exp $")
 #endif
 #endif /* LIBC_SCCS and not lint */
Index: /trunk/src/lib/libc/gen/fpclassifyl_ieee754.c
===================================================================
--- /trunk/src/lib/libc/gen/fpclassifyl_ieee754.c	(revision 152)
+++ /trunk/src/lib/libc/gen/fpclassifyl_ieee754.c	(revision 152)
@@ -0,0 +1,68 @@
+/*	$NetBSD: fpclassifyl_ieee754.c,v 1.1.4.2 2011/04/29 07:48:34 matt Exp $	*/
+
+/*-
+ * Copyright (c) 2011 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Matt Thomas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: fpclassifyl_ieee754.c,v 1.1.4.2 2011/04/29 07:48:34 matt Exp $");
+#endif
+
+#include <machine/ieee.h>
+#include <math.h>
+
+#ifdef __HAVE_LONG_DOUBLE
+/*
+ * 7.12.3.1 fpclassify - classify real floating type
+ *          IEEE 754 compatible 128-bit extended-precision version
+ */
+int
+__fpclassifyl(long double x)
+{
+	union ieee_ext_u u;
+
+	u.extu_ld = x;
+
+	if (u.extu_ext.ext_exp == 0) {
+		if (u.extu_ext.ext_frach == 0 && u.extu_ext.ext_frachm == 0
+		    && u.extu_ext.ext_fraclm == 0 && u.extu_ext.ext_fracl == 0)
+			return FP_ZERO;
+		else
+			return FP_SUBNORMAL;
+	} else if (u.extu_ext.ext_exp == EXT_EXP_INFNAN) {
+		if (u.extu_ext.ext_frach == 0 && u.extu_ext.ext_frachm == 0
+		    && u.extu_ext.ext_fraclm == 0 && u.extu_ext.ext_fracl == 0)
+			return FP_INFINITE;
+		else
+			return FP_NAN;
+	}
+
+	return FP_NORMAL;
+}
+#endif /* __HAVE_LONG_DOUBLE */
Index: /trunk/src/lib/libc/gen/glob.3
===================================================================
--- /trunk/src/lib/libc/gen/glob.3	(revision 151)
+++ /trunk/src/lib/libc/gen/glob.3	(revision 152)
@@ -1,3 +1,3 @@
-.\"	$NetBSD: glob.3,v 1.32 2008/02/22 18:33:51 christos Exp $
+.\"	$NetBSD: glob.3,v 1.32.16.1 2011/05/20 08:11:17 matt Exp $
 .\"
 .\" Copyright (c) 1989, 1991, 1993, 1994
@@ -32,5 +32,5 @@
 .\"     @(#)glob.3	8.3 (Berkeley) 4/16/94
 .\"
-.Dd February 22, 2008
+.Dd July 6, 2010
 .Dt GLOB 3
 .Os
@@ -254,6 +254,11 @@
 to user name home directories.
 .It Dv GLOB_LIMIT
-Limit the amount of memory used by matches to
-.Li ARG_MAX .
+Limit the amount of memory used to store matched strings to
+.Li 64K ,
+the number of
+.Xr stat 2
+calls to 128, and the number of
+.Xr readdir 3
+calls to 16K.
 This option should be set for programs that can be coerced to a denial of
 service attack via patterns that expand to a very large number of matches,
Index: /trunk/src/lib/libc/gen/glob.c
===================================================================
--- /trunk/src/lib/libc/gen/glob.c	(revision 151)
+++ /trunk/src/lib/libc/gen/glob.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: glob.c,v 1.23 2008/05/26 13:06:38 ad Exp $	*/
+/*	$NetBSD: glob.c,v 1.23.12.1 2011/05/20 08:11:17 matt Exp $	*/
 
 /*
@@ -38,5 +38,5 @@
 static char sccsid[] = "@(#)glob.c	8.3 (Berkeley) 10/13/93";
 #else
-__RCSID("$NetBSD: glob.c,v 1.23 2008/05/26 13:06:38 ad Exp $");
+__RCSID("$NetBSD: glob.c,v 1.23.12.1 2011/05/20 08:11:17 matt Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
@@ -88,8 +88,11 @@
 #endif
 
-#if !defined(ARG_MAX)
-#include <limits.h>
-#define	ARG_MAX	_POSIX_ARG_MAX
-#endif
+#define	GLOB_LIMIT_MALLOC	65536
+#define	GLOB_LIMIT_STAT		128
+#define	GLOB_LIMIT_READDIR	16384
+
+#define	GLOB_INDEX_MALLOC	0
+#define	GLOB_INDEX_STAT		1
+#define	GLOB_INDEX_READDIR	2
 
 /*
@@ -156,5 +159,5 @@
 static Char	*g_strchr(const Char *, int);
 static int	 g_stat(Char *, __gl_stat_t *, glob_t *);
-static int	 glob0(const Char *, glob_t *);
+static int	 glob0(const Char *, glob_t *, size_t *);
 static int	 glob1(Char *, glob_t *, size_t *);
 static int	 glob2(Char *, Char *, Char *, Char *, glob_t *,
@@ -164,6 +167,7 @@
 static int	 globextend(const Char *, glob_t *, size_t *);
 static const Char *globtilde(const Char *, Char *, size_t, glob_t *);
-static int	 globexp1(const Char *, glob_t *);
-static int	 globexp2(const Char *, const Char *, glob_t *, int *);
+static int	 globexp1(const Char *, glob_t *, size_t *);
+static int	 globexp2(const Char *, const Char *, glob_t *, int *,
+    size_t *);
 static int	 match(Char *, Char *, Char *);
 #ifdef DEBUG
@@ -178,4 +182,6 @@
 	int c;
 	Char *bufnext, *bufend, patbuf[MAXPATHLEN+1];
+	/* 0 = malloc(), 1 = stat(), 2 = readdir() */
+	size_t limit[] = { 0, 0, 0 };
 
 	_DIAGASSERT(pattern != NULL);
@@ -213,7 +219,7 @@
 
 	if (flags & GLOB_BRACE)
-	    return globexp1(patbuf, pglob);
+	    return globexp1(patbuf, pglob, limit);
 	else
-	    return glob0(patbuf, pglob);
+	    return glob0(patbuf, pglob, limit);
 }
 
@@ -224,5 +230,5 @@
  */
 static int
-globexp1(const Char *pattern, glob_t *pglob)
+globexp1(const Char *pattern, glob_t *pglob, size_t *limit)
 {
 	const Char* ptr = pattern;
@@ -234,11 +240,11 @@
 	/* Protect a single {}, for find(1), like csh */
 	if (pattern[0] == LBRACE && pattern[1] == RBRACE && pattern[2] == EOS)
-		return glob0(pattern, pglob);
+		return glob0(pattern, pglob, limit);
 
 	while ((ptr = (const Char *) g_strchr(ptr, LBRACE)) != NULL)
-		if (!globexp2(ptr, pattern, pglob, &rv))
+		if (!globexp2(ptr, pattern, pglob, &rv, limit))
 			return rv;
 
-	return glob0(pattern, pglob);
+	return glob0(pattern, pglob, limit);
 }
 
@@ -250,5 +256,6 @@
  */
 static int
-globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, int *rv)
+globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, int *rv,
+    size_t *limit)
 {
 	int     i;
@@ -295,5 +302,5 @@
 		 * unbalanced braces are passed to the match
 		 */
-		*rv = glob0(pattern, pglob);
+		*rv = glob0(pattern, pglob, limit);
 		return 0;
 	}
@@ -342,5 +349,5 @@
 				qprintf("globexp2:", patbuf);
 #endif
-				*rv = globexp1(patbuf, pglob);
+				*rv = globexp1(patbuf, pglob, limit);
 
 				/* move after the comma, to the next string */
@@ -455,5 +462,5 @@
  */
 static int
-glob0(const Char *pattern, glob_t *pglob)
+glob0(const Char *pattern, glob_t *pglob, size_t *limit)
 {
 	const Char *qpatnext;
@@ -461,5 +468,4 @@
 	__gl_size_t oldpathc;
 	Char *bufnext, patbuf[MAXPATHLEN+1];
-	size_t limit = 0;
 
 	_DIAGASSERT(pattern != NULL);
@@ -524,5 +530,5 @@
 #endif
 
-	if ((error = glob1(patbuf, pglob, &limit)) != 0)
+	if ((error = glob1(patbuf, pglob, limit)) != 0)
 		return error;
 
@@ -538,5 +544,5 @@
 		    ((pglob->gl_flags & (GLOB_NOMAGIC|GLOB_MAGCHAR))
 		     == GLOB_NOMAGIC)) {
-			return globextend(pattern, pglob, &limit);
+			return globextend(pattern, pglob, limit);
 		} else {
 			return GLOB_NOMATCH;
@@ -611,4 +617,11 @@
 				return 0;
 		
+			if ((pglob->gl_flags & GLOB_LIMIT) &&
+			    limit[GLOB_INDEX_STAT]++ >= GLOB_LIMIT_STAT) {
+				errno = 0;
+				*pathend++ = SEP;
+				*pathend = EOS;
+				return GLOB_NOSPACE;
+			}
 			if (((pglob->gl_flags & GLOB_MARK) &&
 			    pathend[-1] != SEP) && (S_ISDIR(sb.st_mode) ||
@@ -726,4 +739,12 @@
 		u_char *sc;
 		Char *dc;
+
+		if ((pglob->gl_flags & GLOB_LIMIT) &&
+		    limit[GLOB_INDEX_READDIR]++ >= GLOB_LIMIT_READDIR) {
+			errno = 0;
+			*pathend++ = SEP;
+			*pathend = EOS;
+			return GLOB_NOSPACE;
+		}
 
 		/*
@@ -773,5 +794,6 @@
 			continue;
 		}
-		error = glob2(pathbuf, --dc, pathlim, restpattern, pglob, limit);
+		error = glob2(pathbuf, --dc, pathlim, restpattern, pglob,
+		    limit);
 		if (error)
 			break;
@@ -835,5 +857,5 @@
 		continue;
 	len = (size_t)(p - path);
-	*limit += len;
+	limit[GLOB_INDEX_MALLOC] += len;
 	if ((copy = malloc(len)) != NULL) {
 		if (g_Ctoc(path, copy, len)) {
@@ -845,5 +867,6 @@
 	pathv[pglob->gl_offs + pglob->gl_pathc] = NULL;
 
-	if ((pglob->gl_flags & GLOB_LIMIT) && (newsize + *limit) >= ARG_MAX) {
+	if ((pglob->gl_flags & GLOB_LIMIT) &&
+	    (newsize + limit[GLOB_INDEX_MALLOC]) >= GLOB_LIMIT_MALLOC) {
 		errno = 0;
 		return GLOB_NOSPACE;
Index: /trunk/src/lib/libc/gen/infinityl_ieee754.c
===================================================================
--- /trunk/src/lib/libc/gen/infinityl_ieee754.c	(revision 152)
+++ /trunk/src/lib/libc/gen/infinityl_ieee754.c	(revision 152)
@@ -0,0 +1,39 @@
+/*	$NetBSD: infinityl_ieee754.c,v 1.1.4.2 2011/04/29 07:48:34 matt Exp $	*/
+
+/*
+ * IEEE-compatible infinityl.c for 64-bit or 128-bit long double format.
+ * This is public domain.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: infinityl_ieee754.c,v 1.1.4.2 2011/04/29 07:48:34 matt Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include <math.h>
+#include <machine/endian.h>
+#include <machine/ieee.h>
+
+#ifdef __HAVE_LONG_DOUBLE
+#define	LDBL_EXPBITS		EXT_EXPBITS
+#define	LDBL_EXP_INFNAN		EXT_EXP_INFNAN
+#else
+#define	LDBL_EXPBITS		DBL_EXPBITS
+#define	LDBL_EXP_INFNAN		DBL_EXP_INFNAN
+#endif
+
+#define	EXP_INFNAN		(LDBL_EXP_INFNAN << (31 - LDBL_EXPBITS))
+
+const union __long_double_u __infinityl = { {
+#if BYTE_ORDER == BIG_ENDIAN
+	[0] = (EXP_INFNAN >> 24) & 0x7f,
+	[1] = (EXP_INFNAN >> 16) & 0xff,
+	[2] = (EXP_INFNAN >>  8) & 0xff,
+	[3] = (EXP_INFNAN >>  0) & 0xff,
+#else
+	[sizeof(long double)-4] = (EXP_INFNAN >>  0) & 0xff,
+	[sizeof(long double)-3] = (EXP_INFNAN >>  8) & 0xff,
+	[sizeof(long double)-2] = (EXP_INFNAN >> 16) & 0xff,
+	[sizeof(long double)-1] = (EXP_INFNAN >> 24) & 0x7f,
+#endif
+} };
Index: /trunk/src/lib/libc/gen/isfinitel_ieee754.c
===================================================================
--- /trunk/src/lib/libc/gen/isfinitel_ieee754.c	(revision 152)
+++ /trunk/src/lib/libc/gen/isfinitel_ieee754.c	(revision 152)
@@ -0,0 +1,57 @@
+/*	$NetBSD: isfinitel_ieee754.c,v 1.1.4.2 2011/04/29 07:48:35 matt Exp $	*/
+
+/*-
+ * Copyright (c) 2011 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Matt Thomas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: isfinitel_ieee754.c,v 1.1.4.2 2011/04/29 07:48:35 matt Exp $");
+#endif
+
+#include <machine/ieee.h>
+#include <math.h>
+
+#ifdef __HAVE_LONG_DOUBLE
+/*
+ * 7.12.3.2 isfinite - determine whether an argument has finite value
+ *          IEEE 754 compatible 128-bit extended-precision version
+ */
+int
+__isfinitel(long double x)
+{
+	union ieee_ext_u u;
+
+	u.extu_ld = x;
+
+	if (u.extu_ext.ext_exp == EXT_EXP_INFNAN)
+		return 0;
+
+	return 1;
+}
+#endif /* __HAVE_LONG_DOUBLE */
Index: /trunk/src/lib/libc/gen/isinfl_ieee754.c
===================================================================
--- /trunk/src/lib/libc/gen/isinfl_ieee754.c	(revision 152)
+++ /trunk/src/lib/libc/gen/isinfl_ieee754.c	(revision 152)
@@ -0,0 +1,66 @@
+/*	$NetBSD: isinfl_ieee754.c,v 1.4.4.2 2011/04/29 07:48:35 matt Exp $	*/
+
+/*
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This software was developed by the Computer Systems Engineering group
+ * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
+ * contributed to Berkeley.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * from: Header: isinf.c,v 1.1 91/07/08 19:03:34 torek Exp
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+#if 0
+static char sccsid[] = "@(#)isinf.c	8.1 (Berkeley) 6/4/93";
+#else
+__RCSID("$NetBSD: isinfl_ieee754.c,v 1.4.4.2 2011/04/29 07:48:35 matt Exp $");
+#endif
+#endif /* LIBC_SCCS and not lint */
+
+#include <machine/ieee.h>
+#include <math.h>
+
+#ifdef __HAVE_LONG_DOUBLE
+/*
+ * 7.12.3.3 isinf - test for infinity
+ *          IEEE 754 compatible 128-bit extended-precision version
+ */
+int
+__isinfl(long double x)
+{
+	union ieee_ext_u u;
+
+	u.extu_ld = x;
+
+	return u.extu_ext.ext_exp == EXT_EXP_INFNAN
+	    && u.extu_ext.ext_frach == 0 && u.extu_ext.ext_frachm == 0
+	    && u.extu_ext.ext_fraclm == 0 && u.extu_ext.ext_fracl == 0;
+}
+#endif /* __HAVE_LONG_DOUBLE */
Index: /trunk/src/lib/libc/gen/isnanl_ieee754.c
===================================================================
--- /trunk/src/lib/libc/gen/isnanl_ieee754.c	(revision 152)
+++ /trunk/src/lib/libc/gen/isnanl_ieee754.c	(revision 152)
@@ -0,0 +1,66 @@
+/*	$NetBSD: isnanl_ieee754.c,v 1.6.4.2 2011/04/29 07:48:35 matt Exp $	*/
+
+/*
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This software was developed by the Computer Systems Engineering group
+ * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
+ * contributed to Berkeley.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * from: Header: isinf.c,v 1.1 91/07/08 19:03:34 torek Exp
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+#if 0
+static char sccsid[] = "@(#)isinf.c	8.1 (Berkeley) 6/4/93";
+#else
+__RCSID("$NetBSD: isnanl_ieee754.c,v 1.6.4.2 2011/04/29 07:48:35 matt Exp $");
+#endif
+#endif /* LIBC_SCCS and not lint */
+
+#include <machine/ieee.h>
+#include <math.h>
+
+#ifdef __HAVE_LONG_DOUBLE
+/*
+ * 7.12.3.4 isnan - test for a NaN
+ *          IEEE 754 compatible 128-bit extended-precision version
+ */
+int
+__isnanl(long double x)
+{
+	union ieee_ext_u u;
+
+	u.extu_ld = x;
+
+	return u.extu_ext.ext_exp == EXT_EXP_INFNAN 
+	    && (u.extu_ext.ext_frach != 0 || u.extu_ext.ext_frachm != 0
+	        || u.extu_ext.ext_fraclm != 0 || u.extu_ext.ext_fracl != 0);
+}
+#endif /* __HAVE_LONG_DOUBLE */
Index: /trunk/src/lib/libc/gen/signbitl_ieee754.c
===================================================================
--- /trunk/src/lib/libc/gen/signbitl_ieee754.c	(revision 152)
+++ /trunk/src/lib/libc/gen/signbitl_ieee754.c	(revision 152)
@@ -0,0 +1,56 @@
+/*	$NetBSD: signbitl_ieee754.c,v 1.1.4.2 2011/04/29 07:48:35 matt Exp $	*/
+
+/*-
+ * Copyright (c) 2003 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Klaus Klein.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD");
+#endif
+
+#include <machine/ieee.h>
+#include <math.h>
+
+#ifdef __HAVE_LONG_DOUBLE
+
+/*
+ * 7.12.3.6 signbit - determine whether the sign of an argument is negative
+ *          IEEE 754 compatible 128-bit extended-precision version
+ */
+int
+__signbitl(long double x)
+{
+	union ieee_ext_u u;
+
+	u.extu_ld = x;
+
+	return (u.extu_ext.ext_sign == 1);
+}
+
+#endif /* __HAVE_LONG_DOUBLE */
Index: /trunk/src/lib/libc/misc/initfini.c
===================================================================
--- /trunk/src/lib/libc/misc/initfini.c	(revision 151)
+++ /trunk/src/lib/libc/misc/initfini.c	(revision 152)
@@ -1,3 +1,3 @@
-/* 	$NetBSD: initfini.c,v 1.5 2008/04/28 20:23:00 martin Exp $	 */
+/* 	$NetBSD: initfini.c,v 1.5.14.1 2011/05/20 08:11:17 matt Exp $	 */
 
 /*-
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: initfini.c,v 1.5 2008/04/28 20:23:00 martin Exp $");
+__RCSID("$NetBSD: initfini.c,v 1.5.14.1 2011/05/20 08:11:17 matt Exp $");
 
 #ifdef _LIBC
@@ -37,5 +37,5 @@
 #endif
 
-static void	__libc_init(void) __attribute__((__constructor__, __used__));
+void	__libc_init(void) __attribute__((__constructor__, __used__));
 
 void	__guard_setup(void);
@@ -45,5 +45,5 @@
 
 /* LINTED used */
-static void
+void
 __libc_init(void)
 {
Index: /trunk/src/lib/libc/softfloat/Makefile.inc
===================================================================
--- /trunk/src/lib/libc/softfloat/Makefile.inc	(revision 151)
+++ /trunk/src/lib/libc/softfloat/Makefile.inc	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: Makefile.inc,v 1.4 2004/09/26 21:13:27 jmmv Exp $
+#	$NetBSD: Makefile.inc,v 1.4.40.1 2011/04/29 07:48:35 matt Exp $
 
 SOFTFLOAT_BITS?=64
@@ -8,10 +8,13 @@
 CPPFLAGS+=	-DSOFTFLOAT_FOR_GCC
 
-SRCS+=		softfloat.c
+SRCS.softfloat+=softfloat.c
 
-SRCS+=		fpgetround.c fpsetround.c fpgetmask.c fpsetmask.c \
+SRCS.softfloat+=fpgetround.c fpsetround.c fpgetmask.c fpsetmask.c \
 		fpgetsticky.c fpsetsticky.c
 
-SRCS+=		eqsf2.c nesf2.c gtsf2.c gesf2.c ltsf2.c lesf2.c negsf2.c \
+SRCS.softfloat+=eqsf2.c nesf2.c gtsf2.c gesf2.c ltsf2.c lesf2.c negsf2.c \
 		eqdf2.c nedf2.c gtdf2.c gedf2.c ltdf2.c ledf2.c negdf2.c \
+		eqtf2.c netf2.c gttf2.c getf2.c lttf2.c letf2.c negtf2.c \
 		nexf2.c gtxf2.c gexf2.c negxf2.c unordsf2.c unorddf2.c
+
+SRCS+=		${SRCS.softfloat}
Index: /trunk/src/lib/libc/softfloat/bits32/softfloat-macros
===================================================================
--- /trunk/src/lib/libc/softfloat/bits32/softfloat-macros	(revision 151)
+++ /trunk/src/lib/libc/softfloat/bits32/softfloat-macros	(revision 152)
@@ -312,5 +312,5 @@
     z0 = a0 + b0;
     z1 += carry1;
-    z0 += ( z1 < carry1 );
+    z0 += ( z1 < (bits32)carry1 );
     z0 += carry0;
     *z2Ptr = z2;
@@ -369,5 +369,5 @@
     borrow0 = ( a1 < b1 );
     z0 = a0 - b0;
-    z0 -= ( z1 < borrow1 );
+    z0 -= ( z1 < (bits32)borrow1 );
     z1 -= borrow1;
     z0 -= borrow0;
Index: /trunk/src/lib/libc/softfloat/bits64/softfloat-macros
===================================================================
--- /trunk/src/lib/libc/softfloat/bits64/softfloat-macros	(revision 151)
+++ /trunk/src/lib/libc/softfloat/bits64/softfloat-macros	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: softfloat-macros,v 1.1 2002/05/21 23:51:08 bjh21 Exp $ */
+/* $NetBSD: softfloat-macros,v 1.1.50.1 2011/05/28 20:28:55 matt Exp $ */
 
 /*
@@ -387,5 +387,5 @@
     z0 = a0 + b0;
     z1 += carry1;
-    z0 += ( z1 < carry1 );
+    z0 += ( z1 < (bits64)carry1 );
     z0 += carry0;
     *z2Ptr = z2;
@@ -444,5 +444,5 @@
     borrow0 = ( a1 < b1 );
     z0 = a0 - b0;
-    z0 -= ( z1 < borrow1 );
+    z0 -= ( z1 < (bits64)borrow1 );
     z1 -= borrow1;
     z0 -= borrow0;
Index: /trunk/src/lib/libc/softfloat/bits64/softfloat.c
===================================================================
--- /trunk/src/lib/libc/softfloat/bits64/softfloat.c	(revision 151)
+++ /trunk/src/lib/libc/softfloat/bits64/softfloat.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: softfloat.c,v 1.5 2007/11/08 21:31:04 martin Exp $ */
+/* softfloat.c,v 1.5 2007/11/08 21:31:04 martin Exp */
 
 /*
@@ -47,5 +47,5 @@
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: softfloat.c,v 1.5 2007/11/08 21:31:04 martin Exp $");
+__RCSID("softfloat.c,v 1.5 2007/11/08 21:31:04 martin Exp");
 #endif /* LIBC_SCCS and not lint */
 
@@ -4336,4 +4336,44 @@
 
 /*
+ * just like above - but do not care for overflow of signed results
+ */
+unsigned int float128_to_uint32_round_to_zero( float128 a )
+{
+    flag aSign;
+    int32 aExp, shiftCount;
+    bits64 aSig0, aSig1, savedASig;
+    uint32 z;
+
+    aSig1 = extractFloat128Frac1( a );
+    aSig0 = extractFloat128Frac0( a );
+    aExp = extractFloat128Exp( a );
+    aSign = extractFloat128Sign( a );
+    aSig0 |= ( aSig1 != 0 );
+    if ( 0x401E < aExp ) {
+        if ( ( aExp == 0x7FFF ) && aSig0 ) aSign = 0;
+        goto invalid;
+    }
+    else if ( aExp < 0x3FFF ) {
+        if ( aExp || aSig0 ) float_exception_flags |= float_flag_inexact;
+        return 0;
+    }
+    aSig0 |= LIT64( 0x0001000000000000 );
+    shiftCount = 0x402F - aExp;
+    savedASig = aSig0;
+    aSig0 >>= shiftCount;
+    z = aSig0;
+    if ( aSign ) {
+ invalid:
+        float_raise( float_flag_invalid );
+        return 0xFFFFFFFF;
+    }
+    if ( ( aSig0<<shiftCount ) != savedASig ) {
+        float_exception_flags |= float_flag_inexact;
+    }
+    return z;
+
+}
+
+/*
 -------------------------------------------------------------------------------
 Returns the result of converting the quadruple-precision floating-point
Index: /trunk/src/lib/libc/softfloat/eqtf2.c
===================================================================
--- /trunk/src/lib/libc/softfloat/eqtf2.c	(revision 152)
+++ /trunk/src/lib/libc/softfloat/eqtf2.c	(revision 152)
@@ -0,0 +1,26 @@
+/* $NetBSD: eqtf2.c,v 1.1.4.2 2011/04/29 07:48:35 matt Exp $ */
+
+/*
+ * Written by Matt Thomas, 2011.  This file is in the Public Domain.
+ */
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: eqtf2.c,v 1.1.4.2 2011/04/29 07:48:35 matt Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#include "softfloat-for-gcc.h"
+#include "milieu.h"
+#include "softfloat.h"
+
+#ifdef FLOAT128
+flag __eqtf2(float128, float128);
+
+flag
+__eqtf2(float128 a, float128 b)
+{
+
+	/* libgcc1.c says !(a == b) */
+	return !float128_eq(a, b);
+}
+#endif /* FLOAT128 */
Index: /trunk/src/lib/libc/softfloat/getf2.c
===================================================================
--- /trunk/src/lib/libc/softfloat/getf2.c	(revision 152)
+++ /trunk/src/lib/libc/softfloat/getf2.c	(revision 152)
@@ -0,0 +1,28 @@
+/* $NetBSD: getf2.c,v 1.1.4.2 2011/04/29 07:48:35 matt Exp $ */
+
+/*
+ * Written by Matt Thomas, 2011.  This file is in the Public Domain.
+ */
+
+#include "softfloat-for-gcc.h"
+#include "milieu.h"
+#include "softfloat.h"
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: getf2.c,v 1.1.4.2 2011/04/29 07:48:35 matt Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#ifdef FLOAT128
+
+flag __getf2(float128, float128);
+
+flag
+__getf2(float128 a, float128 b)
+{
+
+	/* libgcc1.c says (a >= b) - 1 */
+	return float128_le(b, a) - 1;
+}
+
+#endif /* FLOAT128 */
Index: /trunk/src/lib/libc/softfloat/gttf2.c
===================================================================
--- /trunk/src/lib/libc/softfloat/gttf2.c	(revision 152)
+++ /trunk/src/lib/libc/softfloat/gttf2.c	(revision 152)
@@ -0,0 +1,28 @@
+/* $NetBSD: gttf2.c,v 1.1.4.2 2011/04/29 07:48:36 matt Exp $ */
+
+/*
+ * Written by Matt Thomas, 2011.  This file is in the Public Domain.
+ */
+
+#include "softfloat-for-gcc.h"
+#include "milieu.h"
+#include "softfloat.h"
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: gttf2.c,v 1.1.4.2 2011/04/29 07:48:36 matt Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#ifdef FLOAT128
+
+flag __gttf2(float128, float128);
+
+flag
+__gttf2(float128 a, float128 b)
+{
+
+	/* libgcc1.c says a > b */
+	return float128_lt(b, a);
+}
+
+#endif /* FLOAT128 */
Index: /trunk/src/lib/libc/softfloat/letf2.c
===================================================================
--- /trunk/src/lib/libc/softfloat/letf2.c	(revision 152)
+++ /trunk/src/lib/libc/softfloat/letf2.c	(revision 152)
@@ -0,0 +1,28 @@
+/* $NetBSD: letf2.c,v 1.1.4.2 2011/04/29 07:48:36 matt Exp $ */
+
+/*
+ * Written by Matt Thomas, 2011.  This file is in the Public Domain.
+ */
+
+#include "softfloat-for-gcc.h"
+#include "milieu.h"
+#include "softfloat.h"
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: letf2.c,v 1.1.4.2 2011/04/29 07:48:36 matt Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#ifdef FLOAT128
+
+flag __letf2(float128, float128);
+
+flag
+__letf2(float128 a, float128 b)
+{
+
+	/* libgcc1.c says 1 - (a <= b) */
+	return 1 - float128_le(a, b);
+}
+
+#endif /* FLOAT128 */
Index: /trunk/src/lib/libc/softfloat/lttf2.c
===================================================================
--- /trunk/src/lib/libc/softfloat/lttf2.c	(revision 152)
+++ /trunk/src/lib/libc/softfloat/lttf2.c	(revision 152)
@@ -0,0 +1,28 @@
+/* $NetBSD: lttf2.c,v 1.1.4.2 2011/04/29 07:48:36 matt Exp $ */
+
+/*
+ * Written by Matt Thomas, 2011.  This file is in the Public Domain.
+ */
+
+#include "softfloat-for-gcc.h"
+#include "milieu.h"
+#include "softfloat.h"
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: lttf2.c,v 1.1.4.2 2011/04/29 07:48:36 matt Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#ifdef FLOAT128
+
+flag __lttf2(float128, float128);
+
+flag
+__lttf2(float128 a, float128 b)
+{
+
+	/* libgcc1.c says -(a < b) */
+	return -float128_lt(a, b);
+}
+
+#endif /* FLOAT128 */
Index: /trunk/src/lib/libc/softfloat/negtf2.c
===================================================================
--- /trunk/src/lib/libc/softfloat/negtf2.c	(revision 152)
+++ /trunk/src/lib/libc/softfloat/negtf2.c	(revision 152)
@@ -0,0 +1,29 @@
+/* $NetBSD: negtf2.c,v 1.1.4.2 2011/04/29 07:48:36 matt Exp $ */
+
+/*
+ * Written by Matt Thomas, 2011.  This file is in the Public Domain.
+ */
+
+#include "softfloat-for-gcc.h"
+#include "milieu.h"
+#include "softfloat.h"
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: negtf2.c,v 1.1.4.2 2011/04/29 07:48:36 matt Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#ifdef FLOAT128
+
+float128 __negtf2(float128);
+
+float128
+__negtf2(float128 a)
+{
+
+	/* libgcc1.c says -a */
+	a.high ^= FLOAT64_MANGLE(0x8000000000000000ULL);
+	return a;
+}
+
+#endif /* FLOAT128 */
Index: /trunk/src/lib/libc/softfloat/netf2.c
===================================================================
--- /trunk/src/lib/libc/softfloat/netf2.c	(revision 152)
+++ /trunk/src/lib/libc/softfloat/netf2.c	(revision 152)
@@ -0,0 +1,28 @@
+/* $NetBSD: netf2.c,v 1.1.4.2 2011/04/29 07:48:36 matt Exp $ */
+
+/*
+ * Written by Matt Thomas, 2011.  This file is in the Public Domain.
+ */
+
+#include "softfloat-for-gcc.h"
+#include "milieu.h"
+#include "softfloat.h"
+
+#include <sys/cdefs.h>
+#if defined(LIBC_SCCS) && !defined(lint)
+__RCSID("$NetBSD: netf2.c,v 1.1.4.2 2011/04/29 07:48:36 matt Exp $");
+#endif /* LIBC_SCCS and not lint */
+
+#ifdef FLOAT128
+
+flag __netf2(float128, float128);
+
+flag
+__netf2(float128 a, float128 b)
+{
+
+	/* libgcc1.c says a != b */
+	return !float128_eq(a, b);
+}
+
+#endif /* FLOAT128 */
Index: /trunk/src/lib/libc/stdlib/exit.c
===================================================================
--- /trunk/src/lib/libc/stdlib/exit.c	(revision 151)
+++ /trunk/src/lib/libc/stdlib/exit.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: exit.c,v 1.11 2007/10/30 17:19:59 skrll Exp $	*/
+/*	$NetBSD: exit.c,v 1.11.20.1 2011/05/20 08:11:17 matt Exp $	*/
 
 /*-
@@ -35,5 +35,5 @@
 static char sccsid[] = "@(#)exit.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: exit.c,v 1.11 2007/10/30 17:19:59 skrll Exp $");
+__RCSID("$NetBSD: exit.c,v 1.11.20.1 2011/05/20 08:11:17 matt Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
@@ -46,4 +46,11 @@
 #endif
 
+#ifdef _LIBC
+extern void __libc_init(void);
+#ifndef __lint
+static void (*force_ref)(void) __used = __libc_init;
+#endif
+#endif
+
 void (*__cleanup) __P((void));
 
@@ -52,6 +59,5 @@
  */
 void
-exit(status)
-	int status;
+exit(int status)
 {
 
Index: /trunk/src/lib/libpthread/arch/mips/_context_u.S
===================================================================
--- /trunk/src/lib/libpthread/arch/mips/_context_u.S	(revision 151)
+++ /trunk/src/lib/libpthread/arch/mips/_context_u.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: _context_u.S,v 1.3.14.2 2009/08/24 02:35:05 matt Exp $	*/
+/*	$NetBSD: _context_u.S,v 1.3.14.3 2011/04/29 08:01:52 matt Exp $	*/
 
 /*
@@ -33,5 +33,4 @@
 #include "SYS.h"
 #include <machine/asm.h>
-#include <machine/mcontext.h>
 
 /*
Index: /trunk/src/lib/libpthread/pthread.c
===================================================================
--- /trunk/src/lib/libpthread/pthread.c	(revision 151)
+++ /trunk/src/lib/libpthread/pthread.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: pthread.c,v 1.106.2.1.4.1 2010/04/21 05:28:11 matt Exp $	*/
+/*	$NetBSD: pthread.c,v 1.106.2.1.4.2 2011/05/20 08:11:18 matt Exp $	*/
 
 /*-
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: pthread.c,v 1.106.2.1.4.1 2010/04/21 05:28:11 matt Exp $");
+__RCSID("$NetBSD: pthread.c,v 1.106.2.1.4.2 2011/05/20 08:11:18 matt Exp $");
 
 #define	__EXPOSE_STACK	1
@@ -241,4 +241,5 @@
 pthread__fork_callback(void)
 {
+	struct __pthread_st *self;
 
 	/* lwpctl state is not copied across fork. */
@@ -246,4 +247,6 @@
 		err(1, "_lwp_ctl");
 	}
+	self = pthread__self();
+	self->pt_lid = _lwp_self();
 }
 
Index: /trunk/src/libexec/httpd/bozohttpd.c
===================================================================
--- /trunk/src/libexec/httpd/bozohttpd.c	(revision 151)
+++ /trunk/src/libexec/httpd/bozohttpd.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: bozohttpd.c,v 1.7.8.3 2009/03/26 17:19:45 snj Exp $	*/
+/*	$NetBSD: bozohttpd.c,v 1.7.8.3.4.1 2011/05/20 08:11:18 matt Exp $	*/
 
 /*	$eterna: bozohttpd.c,v 1.142 2008/03/03 03:36:11 mrg Exp $	*/
@@ -112,5 +112,5 @@
 #endif
 #ifndef SERVER_SOFTWARE
-#define SERVER_SOFTWARE		"bozohttpd/20080303"
+#define SERVER_SOFTWARE		"bozohttpd/20080303-nb1"
 #endif
 #ifndef DIRECT_ACCESS_FILE
@@ -1039,4 +1039,7 @@
 		s = 0;
 		for (i = scandir(vpath, &list, 0, 0); i--; list++) {
+			if (strcmp((*list)->d_name, ".") == 0 ||
+			    strcmp((*list)->d_name, "..") == 0)
+				continue;
 			debug((DEBUG_OBESE, "looking at dir``%s''",
 			    (*list)->d_name));
Index: /trunk/src/libexec/ld.elf_so/arch/mips/mips_reloc.c
===================================================================
--- /trunk/src/libexec/ld.elf_so/arch/mips/mips_reloc.c	(revision 151)
+++ /trunk/src/libexec/ld.elf_so/arch/mips/mips_reloc.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mips_reloc.c,v 1.53.10.2 2009/09/05 18:53:13 matt Exp $	*/
+/*	$NetBSD: mips_reloc.c,v 1.53.10.3 2010/08/19 07:07:01 matt Exp $	*/
 
 /*
@@ -31,5 +31,5 @@
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: mips_reloc.c,v 1.53.10.2 2009/09/05 18:53:13 matt Exp $");
+__RCSID("$NetBSD: mips_reloc.c,v 1.53.10.3 2010/08/19 07:07:01 matt Exp $");
 #endif /* not lint */
 
@@ -76,4 +76,5 @@
 #define	Elf_Sxword			Elf32_Sword
 #endif
+#define	GOT1_MASK			(~(Elf_Addr)0 >> 1)
 
 static inline Elf_Sxword
@@ -426,9 +427,5 @@
 {
 	Elf_Addr *got = (Elf_Addr *)(a2 - 0x7ff0);
-#if 0
-	const Obj_Entry *obj = (Obj_Entry *)(got[1] & 0x7fffffff);
-#else
-	const Obj_Entry *obj = (Obj_Entry *)(got[1]);
-#endif
+	const Obj_Entry *obj = (Obj_Entry *)(got[1] & GOT1_MASK);
 	Elf_Addr new_value;
 	int err;
Index: /trunk/src/libexec/ld.elf_so/rtld.c
===================================================================
--- /trunk/src/libexec/ld.elf_so/rtld.c	(revision 151)
+++ /trunk/src/libexec/ld.elf_so/rtld.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rtld.c,v 1.123.8.1 2010/04/21 05:26:10 matt Exp $	 */
+/*	$NetBSD: rtld.c,v 1.123.8.2 2010/08/19 15:35:18 matt Exp $	 */
 
 /*
@@ -41,5 +41,5 @@
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: rtld.c,v 1.123.8.1 2010/04/21 05:26:10 matt Exp $");
+__RCSID("$NetBSD: rtld.c,v 1.123.8.2 2010/08/19 15:35:18 matt Exp $");
 #endif /* not lint */
 
@@ -347,7 +347,11 @@
 				 * terminator */
 	env = (char **) sp;
+#if defined(RTLD_DEBUG)
+	dbg(("env is %p", env));
+#endif
 	while (*sp++ != 0) {	/* Skip over environment, and NULL terminator */
 #if defined(RTLD_DEBUG)
-		dbg(("env[%d] = %p %s", i++, (void *)sp[-1], (char *)sp[-1]));
+		dbg(("env[%d] = %p", i++, (void *)sp[-1]));
+		dbg(("%s", (char *)sp[-1]));
 #endif
 	}
Index: /trunk/src/sbin/disklabel/interact.c
===================================================================
--- /trunk/src/sbin/disklabel/interact.c	(revision 151)
+++ /trunk/src/sbin/disklabel/interact.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: interact.c,v 1.30 2006/11/26 16:16:31 jmmv Exp $	*/
+/*	$NetBSD: interact.c,v 1.30.32.1 2011/05/20 08:11:18 matt Exp $	*/
 
 /*
@@ -36,5 +36,5 @@
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: interact.c,v 1.30 2006/11/26 16:16:31 jmmv Exp $");
+__RCSID("$NetBSD: interact.c,v 1.30.32.1 2011/05/20 08:11:18 matt Exp $");
 #endif /* lint */
 
@@ -73,5 +73,5 @@
 static void	defnum(struct disklabel *, char *, uint32_t);
 static void	dumpnames(const char *, const char * const *, size_t);
-static int	getnum(struct disklabel *, char *, int);
+static intmax_t	getnum(struct disklabel *, char *, intmax_t);
 
 static int rounding = 0;	/* sector rounding */
@@ -450,4 +450,5 @@
 {
 	int	i;
+	intmax_t im;
 	char	line[BUFSIZ];
 	char	def[BUFSIZ];
@@ -509,12 +510,13 @@
 			}
 		} else {
-			if ((i = getnum(lp, line, 0)) == -1) {
+			if ((im = getnum(lp, line, 0)) == -1 || im < 0) {
 				printf("Bad offset `%s'\n", line);
 				continue;
-			} else if (i > lp->d_secperunit) {
+			} else if (im > 0xffffffffLL ||
+				   (uint32_t)im > lp->d_secperunit) {
 				printf("Offset `%s' out of range\n", line);
 				continue;
 			}
-			p->p_offset = i;
+			p->p_offset = (uint32_t)im;
 		}
 		break;
@@ -528,14 +530,14 @@
 		else if (i == 0)
 			break;
-		if ((i = getnum(lp, line, lp->d_secperunit - p->p_offset))
+		if ((im = getnum(lp, line, lp->d_secperunit - p->p_offset))
 		    == -1) {
 			printf("Bad size `%s'\n", line);
 			continue;
-		} else if
-		    ((i + p->p_offset) > lp->d_secperunit) {
+		} else if (im > 0xffffffffLL ||
+			   (im + p->p_offset) > lp->d_secperunit) {
 			printf("Size `%s' out of range\n", line);
 			continue;
 		}
-		p->p_size = i;
+		p->p_size = im;
 		break;
 	}
@@ -714,13 +716,13 @@
 
 
-static int
-getnum(struct disklabel *lp, char *buf, int max)
+static intmax_t
+getnum(struct disklabel *lp, char *buf, intmax_t defaultval)
 {
 	char	*ep;
 	double	 d;
-	int	 rv;
-
-	if (max && buf[0] == '$' && buf[1] == 0)
-		return max;
+	intmax_t rv;
+
+	if (defaultval && buf[0] == '$' && buf[1] == 0)
+		return defaultval;
 
 	d = strtod(buf, &ep);
@@ -735,30 +737,30 @@
 	case 's':
 	case 'S':
-		rv = (int) d;
+		rv = (intmax_t) d;
 		break;
 
 	case 'c':
 	case 'C':
-		rv = (int) (d * lp->d_secpercyl);
+		rv = (intmax_t) (d * lp->d_secpercyl);
 		break;
 
 	case 'k':
 	case 'K':
-		rv =  (int) (d * 1024 / lp->d_secsize);
+		rv =  (intmax_t) (d * 1024 / lp->d_secsize);
 		break;
 
 	case 'm':
 	case 'M':
-		rv =  (int) (d * 1024 * 1024 / lp->d_secsize);
+		rv =  (intmax_t) (d * 1024 * 1024 / lp->d_secsize);
 		break;
 
 	case 'g':
 	case 'G':
-		rv =  (int) (d * 1024 * 1024 * 1024 / lp->d_secsize);
+		rv =  (intmax_t) (d * 1024 * 1024 * 1024 / lp->d_secsize);
 		break;
 
 	case 't':
 	case 'T':
-		rv =  (int) (d * 1024 * 1024 * 1024 * 1024 / lp->d_secsize);
+		rv =  (intmax_t) (d * 1024 * 1024 * 1024 * 1024 / lp->d_secsize);
 		break;
 
Index: /trunk/src/sbin/newbtconf/Makefile
===================================================================
--- /trunk/src/sbin/newbtconf/Makefile	(revision 151)
+++ /trunk/src/sbin/newbtconf/Makefile	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: Makefile,v 1.1 1999/10/05 11:22:43 darrenr Exp $
+#	$NetBSD: Makefile,v 1.1.1.1 1999/10/05 11:22:43 darrenr Exp $
 #	@(#)Makefile	8.1 (Berkeley) 6/5/93
 
Index: /trunk/src/sbin/routed/if.c
===================================================================
--- /trunk/src/sbin/routed/if.c	(revision 151)
+++ /trunk/src/sbin/routed/if.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: if.c,v 1.26 2007/08/14 03:39:19 dyoung Exp $	*/
+/*	$NetBSD: if.c,v 1.26.20.1 2010/08/16 18:43:55 matt Exp $	*/
 
 /*
@@ -38,5 +38,5 @@
 
 #ifdef __NetBSD__
-__RCSID("$NetBSD: if.c,v 1.26 2007/08/14 03:39:19 dyoung Exp $");
+__RCSID("$NetBSD: if.c,v 1.26.20.1 2010/08/16 18:43:55 matt Exp $");
 #elif defined(__FreeBSD__)
 __RCSID("$FreeBSD$");
@@ -84,4 +84,17 @@
 int	have_ripv1_out;			/* have a RIPv1 interface */
 int	have_ripv1_in;
+
+#ifdef sgi
+#define ROUNDUP(a) ((a) > 0 ? (1 + (((a) - 1) | (sizeof(__uint64_t) - 1))) \
+		    : sizeof(__uint64_t))
+#define	ROUNDUPMSG(a)	(a)
+#elif defined(__NetBSD__)
+#define ROUNDUP(a)	RT_ROUNDUP(a)
+#define	ROUNDUPMSG(a)	RT_ROUNDUP(a)
+#else
+#define ROUNDUP(a) ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) \
+		    : sizeof(long))
+#define	ROUNDUPMSG(a)	(a)
+#endif
 
 
@@ -642,12 +655,4 @@
 	static struct sockaddr sa_zero;
 #endif
-#ifdef sgi
-#define ROUNDUP(a) ((a) > 0 ? (1 + (((a) - 1) | (sizeof(__uint64_t) - 1))) \
-		    : sizeof(__uint64_t))
-#else
-#define ROUNDUP(a) ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) \
-		    : sizeof(long))
-#endif
-
 
 	memset(info, 0, sizeof(*info));
@@ -743,5 +748,5 @@
 	     ifam = ifam2) {
 
-		ifam2 = (struct ifa_msghdr*)((char*)ifam + ifam->ifam_msglen);
+		ifam2 = (struct ifa_msghdr*)((uintptr_t)ifam + ROUNDUPMSG(ifam->ifam_msglen));
 
 #ifdef RTM_OIFINFO
@@ -770,5 +775,6 @@
 			ifs0.int_data.odrops = ifm->ifm_data.ifi_odrops;
 #endif
-			sdl = (const struct sockaddr_dl *)(ifm + 1);
+			sdl = (const struct sockaddr_dl *)
+			    ((uintptr_t)ifm + ROUNDUP(sizeof(*ifm)));
 			/* NUL-termination by memset, above. */
 			memcpy(ifs0.int_name, sdl->sdl_data,
Index: /trunk/src/sbin/routed/table.c
===================================================================
--- /trunk/src/sbin/routed/table.c	(revision 151)
+++ /trunk/src/sbin/routed/table.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: table.c,v 1.22 2004/07/06 23:36:24 mycroft Exp $	*/
+/*	$NetBSD: table.c,v 1.22.38.1 2010/08/16 18:43:55 matt Exp $	*/
 
 /*
@@ -37,5 +37,5 @@
 
 #ifdef __NetBSD__
-__RCSID("$NetBSD: table.c,v 1.22 2004/07/06 23:36:24 mycroft Exp $");
+__RCSID("$NetBSD: table.c,v 1.22.38.1 2010/08/16 18:43:55 matt Exp $");
 #elif defined(__FreeBSD__)
 __RCSID("$FreeBSD$");
@@ -1093,6 +1093,6 @@
 		if (rtm->rtm_msglen == 0) {
 			msglog("zero length kernel route at "
-			       " %#lx in buffer %#lx before %#lx",
-			       (u_long)rtm, (u_long)sysctl_buf, (u_long)lim);
+			       " %p in buffer %p before %p",
+			       rtm, sysctl_buf, lim);
 			break;
 		}
Index: /trunk/src/share/mk/bsd.own.mk
===================================================================
--- /trunk/src/share/mk/bsd.own.mk	(revision 151)
+++ /trunk/src/share/mk/bsd.own.mk	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: bsd.own.mk,v 1.542.2.9.4.5 2010/04/21 05:26:47 matt Exp $
+#	bsd.own.mk,v 1.542.2.9.4.6 2011/04/29 07:48:36 matt Exp
 
 # This needs to be before bsd.init.mk
@@ -263,4 +263,5 @@
 TOOL_MKMAGIC=		${TOOLDIR}/bin/${_TOOL_PREFIX}file
 TOOL_MKTEMP=		${TOOLDIR}/bin/${_TOOL_PREFIX}mktemp
+TOOL_MKUBOOTIMAGE=	${TOOLDIR}/bin/${_TOOL_PREFIX}mkubootimage
 TOOL_MSGC=		MSGDEF=${TOOLDIR}/share/misc ${TOOLDIR}/bin/${_TOOL_PREFIX}msgc
 TOOL_MTREE=		${TOOLDIR}/bin/${_TOOL_PREFIX}mtree
@@ -331,4 +332,5 @@
 TOOL_MKMAGIC=		file
 TOOL_MKTEMP=		mktemp
+TOOL_MKUBOOTIMAGE=	mkubootimage
 TOOL_MSGC=		msgc
 TOOL_MTREE=		mtree
@@ -642,4 +644,11 @@
 # Don't let this build where it really isn't supported.
 MKCOMPAT:=	no
+.endif
+
+#
+# Default mips64 to softfloat now.
+#
+.if ${MACHINE_ARCH} == "mips64eb" || ${MACHINE_ARCH} == "mips64el"
+MKSOFTFLOAT?=   yes
 .endif
 
Index: /trunk/src/sys/arch/algor/algor/algor_p4032_intr.c
===================================================================
--- /trunk/src/sys/arch/algor/algor/algor_p4032_intr.c	(revision 151)
+++ /trunk/src/sys/arch/algor/algor/algor_p4032_intr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: algor_p4032_intr.c,v 1.20.16.2 2010/02/28 03:32:23 matt Exp $	*/
+/*	$NetBSD: algor_p4032_intr.c,v 1.20.16.3 2010/12/24 07:32:26 matt Exp $	*/
 
 /*-
@@ -39,5 +39,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: algor_p4032_intr.c,v 1.20.16.2 2010/02/28 03:32:23 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: algor_p4032_intr.c,v 1.20.16.3 2010/12/24 07:32:26 matt Exp $");
 
 #include "opt_ddb.h"
@@ -244,5 +244,4 @@
 		    EVCNT_TYPE_INTR, NULL, "mips", p4032_cpuintrnames[i]);
 	}
-	evcnt_attach_static(&mips_int5_evcnt);
 
 	for (i = 0; i < NIRQMAPS; i++) {
Index: /trunk/src/sys/arch/algor/algor/algor_p5064_intr.c
===================================================================
--- /trunk/src/sys/arch/algor/algor/algor_p5064_intr.c	(revision 151)
+++ /trunk/src/sys/arch/algor/algor/algor_p5064_intr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: algor_p5064_intr.c,v 1.23.16.2 2010/02/28 03:32:23 matt Exp $	*/
+/*	$NetBSD: algor_p5064_intr.c,v 1.23.16.3 2010/12/24 07:32:26 matt Exp $	*/
 
 /*-
@@ -39,5 +39,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: algor_p5064_intr.c,v 1.23.16.2 2010/02/28 03:32:23 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: algor_p5064_intr.c,v 1.23.16.3 2010/12/24 07:32:26 matt Exp $");
 
 #include "opt_ddb.h"
@@ -113,5 +113,5 @@
 #define	NIRQMAPS		(IRQMAP_ISABASE + NISAIRQS)
 
-const char *p5064_intrnames[NIRQMAPS] = {
+const char * const p5064_intrnames[NIRQMAPS] = {
 	/*
 	 * PCI INTERRUPTS
@@ -276,5 +276,5 @@
 
 struct p5064_cpuintr p5064_cpuintrs[NINTRS];
-const char *p5064_cpuintrnames[NINTRS] = {
+const char * const p5064_cpuintrnames[NINTRS] = {
 	"int 0 (isa)",
 	"int 1 (pci)",
@@ -282,5 +282,5 @@
 };
 
-const char *p5064_intrgroups[NINTRS] = {
+const char * const p5064_intrgroups[NINTRS] = {
 	"isa",
 	"pci",
@@ -323,5 +323,4 @@
 		    EVCNT_TYPE_INTR, NULL, "mips", p5064_cpuintrnames[i]);
 	}
-	evcnt_attach_static(&mips_int5_evcnt);
 
 	for (i = 0; i < NIRQMAPS; i++) {
Index: /trunk/src/sys/arch/algor/algor/algor_p6032_intr.c
===================================================================
--- /trunk/src/sys/arch/algor/algor/algor_p6032_intr.c	(revision 151)
+++ /trunk/src/sys/arch/algor/algor/algor_p6032_intr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: algor_p6032_intr.c,v 1.16.16.2 2010/02/28 03:32:23 matt Exp $	*/
+/*	$NetBSD: algor_p6032_intr.c,v 1.16.16.3 2010/12/24 07:32:26 matt Exp $	*/
 
 /*-
@@ -38,5 +38,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: algor_p6032_intr.c,v 1.16.16.2 2010/02/28 03:32:23 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: algor_p6032_intr.c,v 1.16.16.3 2010/12/24 07:32:26 matt Exp $");
 
 #include "opt_ddb.h"
@@ -198,5 +198,4 @@
 		    EVCNT_TYPE_INTR, NULL, "mips", p6032_cpuintrnames[i]);
 	}
-	evcnt_attach_static(&mips_int5_evcnt);
 
 	for (i = 0; i <= NIRQMAPS; i++) {
Index: /trunk/src/sys/arch/amd64/amd64/locore.S
===================================================================
--- /trunk/src/sys/arch/amd64/amd64/locore.S	(revision 151)
+++ /trunk/src/sys/arch/amd64/amd64/locore.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: locore.S,v 1.47.8.2 2009/02/02 03:24:05 snj Exp $	*/
+/*	$NetBSD: locore.S,v 1.47.8.2.4.1 2011/05/20 08:11:19 matt Exp $	*/
 
 /*
@@ -236,5 +236,5 @@
 
 	.globl	_C_LABEL(cpu_id),_C_LABEL(cpu_vendorname), _C_LABEL(cpu_brand_id)
-	.globl	_C_LABEL(cpuid_level),_C_LABEL(cpu_feature),_C_LABEL(cpu_feature2)
+	.globl	_C_LABEL(cpuid_level)
 	.globl	_C_LABEL(esym),_C_LABEL(eblob),_C_LABEL(boothowto)
 	.globl	_C_LABEL(bootinfo),_C_LABEL(atdevbase)
@@ -246,8 +246,4 @@
 					#   or Pentium, or..
 _C_LABEL(cpu_id):	.long	0	# saved from `cpuid' instruction
-_C_LABEL(cpu_feature):	.long	0	# feature flags from 'cpuid'
-					#   instruction
-_C_LABEL(cpu_feature2):	.long	0	# feature flags from 'cpuid'
-					#   instruction
 _C_LABEL(cpuid_level):	.long	-1	# max. level accepted by 'cpuid'
 					#   instruction
@@ -275,10 +271,22 @@
 
 #ifndef XEN
-	.globl	gdt64
-
-gdt64:
-	.word	gdt64_end-gdt64_start
+	.globl	gdt64_lo
+	.globl	gdt64_hi
+
+#define GDT64_LIMIT gdt64_end-gdt64_start-1
+
+/* Temporary gdt64, with base address in low memory */
+gdt64_lo:
+	.word	GDT64_LIMIT
 	.quad	_RELOC(gdt64_start)
 .align 64
+
+/* Temporary gdt64, with base address in high memory */
+gdt64_hi:
+	.word	GDT64_LIMIT
+	.quad	gdt64_start
+.align 64
+
+#undef GDT64_LIMIT
 
 gdt64_start:
@@ -289,5 +297,5 @@
 
 farjmp64:
-	.long	longmode-KERNBASE
+	.long	_RELOC(longmode)
 	.word	GSEL(GCODE_SEL, SEL_KPL)
 	
@@ -412,15 +420,8 @@
 	cpuid
 	movl	%eax,RELOC(cpu_id)
-	movl	%edx,RELOC(cpu_feature)
-	movl	%ecx,RELOC(cpu_feature2)
 
 	/* Brand ID is bits 0-7 of %ebx */
 	andl	$255,%ebx
 	movl	%ebx,RELOC(cpu_brand_id)
-
-	/* add AMD specific feature flags */
-	movl	$0x80000001,%eax
-	cpuid
-	orl	%edx,RELOC(cpu_feature)
 
 	/*
@@ -644,5 +645,5 @@
 	 */
 
-	movl	$RELOC(gdt64),%eax
+	movl	$RELOC(gdt64_lo),%eax
 	lgdt	(%eax)
 	movl	$RELOC(farjmp64),%eax
@@ -660,7 +661,15 @@
 	movabsq	$longmode_hi,%rax
 	jmp	*%rax
+
 longmode_hi:
-	/*
-	 * We have arrived.
+
+	/*
+	 * We left the identity mapped area. Base address of
+	 * the temporary gdt64 should now be in high memory.
+	 */
+	movq	$RELOC(gdt64_hi),%rax
+	lgdt	(%rax)
+
+	/*
 	 * There's no need anymore for the identity mapping in low
 	 * memory, remove it.
Index: /trunk/src/sys/arch/amd64/amd64/machdep.c
===================================================================
--- /trunk/src/sys/arch/amd64/amd64/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/amd64/amd64/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: machdep.c,v 1.102.4.10.4.1 2010/04/21 00:33:53 matt Exp $	*/
+/*	$NetBSD: machdep.c,v 1.102.4.10.4.2 2011/05/20 08:11:19 matt Exp $	*/
 
 /*-
@@ -113,5 +113,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.102.4.10.4.1 2010/04/21 00:33:53 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.102.4.10.4.2 2011/05/20 08:11:19 matt Exp $");
 
 /* #define XENDEBUG_LOW  */
@@ -1393,7 +1393,7 @@
 	first_bt_vaddr = (vaddr_t) (first_avail + KERNBASE + PAGE_SIZE * 2);
 	__PRINTK(("first_bt_vaddr 0x%lx\n", first_bt_vaddr));
-	cpu_feature = cpu_info_primary.ci_feature_flags;
 	/* not on Xen... */
-	cpu_feature &= ~(CPUID_PGE|CPUID_PSE|CPUID_MTRR|CPUID_FXSR|CPUID_NOX);
+	cpu_feature &= ~(CPUID_PGE|CPUID_PSE|CPUID_MTRR|CPUID_FXSR);
+	cpu_feature3 &= ~(CPUID_NOX);
 #endif /* XEN */
 
Index: /trunk/src/sys/arch/amd64/amd64/mptramp.S
===================================================================
--- /trunk/src/sys/arch/amd64/amd64/mptramp.S	(revision 151)
+++ /trunk/src/sys/arch/amd64/amd64/mptramp.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mptramp.S,v 1.9 2008/05/13 22:39:17 ad Exp $	*/
+/*	$NetBSD: mptramp.S,v 1.9.16.1 2011/05/20 08:11:19 matt Exp $	*/
 
 /*-
@@ -224,5 +224,5 @@
 	jz	1b
 
-	movl	_C_LABEL(cpu_feature),%eax
+	movl	_C_LABEL(cpu_feature3),%eax
 	andl	$CPUID_NOX,%eax
 	jz	1f
Index: /trunk/src/sys/arch/amd64/amd64/netbsd32_machdep.c
===================================================================
--- /trunk/src/sys/arch/amd64/amd64/netbsd32_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/amd64/amd64/netbsd32_machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: netbsd32_machdep.c,v 1.55.8.1 2010/04/21 00:33:53 matt Exp $	*/
+/*	$NetBSD: netbsd32_machdep.c,v 1.55.8.2 2011/05/20 08:11:19 matt Exp $	*/
 
 /*
@@ -37,5 +37,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.55.8.1 2010/04/21 00:33:53 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.55.8.2 2011/05/20 08:11:19 matt Exp $");
 
 #include "opt_compat_netbsd.h"
@@ -943,5 +943,7 @@
 check_sigcontext32(const struct netbsd32_sigcontext *scp, struct trapframe *tf)
 {
-	if (((scp->sc_eflags ^ tf->tf_rflags) & PSL_USERSTATIC) != 0)
+
+	if (((scp->sc_eflags ^ tf->tf_rflags) & PSL_USERSTATIC) != 0 ||
+	    !VALID_USER_CSEL32(scp->sc_cs))
 		return EINVAL;
 	if (scp->sc_fs != 0 && !VALID_USER_DSEL32(scp->sc_fs))
@@ -965,5 +967,6 @@
 	gr = mcp->__gregs;
 
-	if (((gr[_REG32_EFL] ^ tf->tf_rflags) & PSL_USERSTATIC) != 0)
+	if (((gr[_REG32_EFL] ^ tf->tf_rflags) & PSL_USERSTATIC) != 0 ||
+	    !VALID_USER_CSEL32(gr[_REG32_CS]))
 		return EINVAL;
 	if (gr[_REG32_FS] != 0 && !VALID_USER_DSEL32(gr[_REG32_FS]))
Index: /trunk/src/sys/arch/amd64/include/segments.h
===================================================================
--- /trunk/src/sys/arch/amd64/include/segments.h	(revision 151)
+++ /trunk/src/sys/arch/amd64/include/segments.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: segments.h,v 1.19 2008/10/26 00:08:15 mrg Exp $	*/
+/*	$NetBSD: segments.h,v 1.19.12.1 2011/05/20 08:11:19 matt Exp $	*/
 
 /*-
@@ -383,8 +383,6 @@
     (((s) & 0xffff) == GSEL(GUDATA32_SEL, SEL_UPL) || \
      ((s) & 0xffff) == LSEL(LUDATA32_SEL, SEL_UPL))
-#if 0 /* not used */
 #define VALID_USER_CSEL32(s) \
     ((s) == GSEL(GUCODE32_SEL, SEL_UPL) || (s) == LSEL(LUCODE32_SEL, SEL_UPL))
-#endif
 
 #define VALID_USER_CSEL(s) \
Index: /trunk/src/sys/arch/amiga/amiga/amiga_init.c
===================================================================
--- /trunk/src/sys/arch/amiga/amiga/amiga_init.c	(revision 151)
+++ /trunk/src/sys/arch/amiga/amiga/amiga_init.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: amiga_init.c,v 1.99 2008/01/06 18:50:29 mhitch Exp $	*/
+/*	$NetBSD: amiga_init.c,v 1.99.26.1 2011/05/20 08:11:19 matt Exp $	*/
 
 /*
@@ -37,5 +37,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: amiga_init.c,v 1.99 2008/01/06 18:50:29 mhitch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amiga_init.c,v 1.99.26.1 2011/05/20 08:11:19 matt Exp $");
 
 #include <sys/param.h>
@@ -766,4 +766,5 @@
 start_c_finish()
 {
+	extern u_int32_t delaydivisor;
 #ifdef	P5PPC68KBOARD
         struct cfdev *cdp, *ecdp;
@@ -901,4 +902,19 @@
         }
 #endif
+	/*
+	 * preliminary delay divisor value
+	 */
+
+	if (machineid & AMIGA_68060)
+		delaydivisor = (1024 * 1) / 80;	/* 80 MHz 68060 w. BTC */
+
+	else if (machineid & AMIGA_68040)
+		delaydivisor = (1024 * 3) / 40;	/* 40 MHz 68040 */
+
+	else if (machineid & AMIGA_68030)
+		delaydivisor = (1024 * 8) / 50;	/* 50 MHz 68030 */
+
+	else
+		delaydivisor = (1024 * 8) / 33; /* 33 MHz 68020 */
 }
 
Index: /trunk/src/sys/arch/amiga/amiga/locore.s
===================================================================
--- /trunk/src/sys/arch/amiga/amiga/locore.s	(revision 151)
+++ /trunk/src/sys/arch/amiga/amiga/locore.s	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: locore.s,v 1.145 2008/01/06 18:50:30 mhitch Exp $	*/
+/*	$NetBSD: locore.s,v 1.145.28.1 2011/05/20 08:11:20 matt Exp $	*/
 
 /*
@@ -1578,4 +1578,14 @@
 #endif
 	nop
+ENTRY_NOPROFILE(delay)
+ENTRY_NOPROFILE(DELAY)
+	movql #10,%d1		| 2 +2
+	movl %sp@(4),%d0	| 4 +4
+	lsll %d1,%d0		| 8 +2
+	movl _C_LABEL(delaydivisor),%d1	| A +6
+Ldelay:				| longword aligned again.
+	subl %d1,%d0
+	jcc Ldelay
+	rts
 
 #ifdef M68060
@@ -1608,4 +1618,9 @@
 GLOBAL(protorp)
 	.long	0x80000002,0	| prototype root pointer
+GLOBAL(delaydivisor)
+	.long	12		| should be enough for 80 MHz 68060
+				| will be adapted to other CPUs in
+				| start_c_cleanup and calibrated
+				| at clock attach time.
 
 GLOBAL(proc0paddr)
Index: /trunk/src/sys/arch/amiga/dev/kbd.c
===================================================================
--- /trunk/src/sys/arch/amiga/dev/kbd.c	(revision 151)
+++ /trunk/src/sys/arch/amiga/dev/kbd.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kbd.c,v 1.50 2007/12/28 20:49:49 joerg Exp $ */
+/*	$NetBSD: kbd.c,v 1.50.26.1 2011/05/20 08:11:20 matt Exp $ */
 
 /*
@@ -33,5 +33,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kbd.c,v 1.50 2007/12/28 20:49:49 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kbd.c,v 1.50.26.1 2011/05/20 08:11:20 matt Exp $");
 
 #include <sys/param.h>
@@ -563,5 +563,5 @@
 #endif
 	/* wait 200 microseconds (for bloody Cherry keyboards..) */
-	DELAY(2000);			/* fudge delay a bit for some keyboards */
+	DELAY(200);			/* fudge delay a bit for some keyboards */
 	ciaa.cra &= ~(1 << 6);
 
@@ -655,5 +655,5 @@
 	ciaa.sdr = 0xff;	/* ack */
 	/* wait 200 microseconds */
-	DELAY(2000);	/* XXXX only works as long as DELAY doesn't
+	DELAY(200);	/* XXXX only works as long as DELAY doesn't
 			 * use a timer and waits.. */
 	ciaa.cra &= ~(1 << 6);
Index: /trunk/src/sys/arch/arc/arc/autoconf.c
===================================================================
--- /trunk/src/sys/arch/arc/arc/autoconf.c	(revision 151)
+++ /trunk/src/sys/arch/arc/arc/autoconf.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: autoconf.c,v 1.32 2007/12/03 15:33:12 ad Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.32.36.1 2010/12/29 01:44:20 matt Exp $	*/
 /*	$OpenBSD: autoconf.c,v 1.9 1997/05/18 13:45:20 pefo Exp $	*/
 
@@ -89,5 +89,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.32 2007/12/03 15:33:12 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.32.36.1 2010/12/29 01:44:20 matt Exp $");
 
 #include <sys/param.h>
@@ -149,7 +149,8 @@
 	 */
 	_spllower(MIPS_INT_MASK_5);
+#error need fix
 #else
 	/* enable all source forcing SOFT_INTs cleared */
-	_splnone();
+	spl0();
 #endif
 }
Index: /trunk/src/sys/arch/arc/arc/c_magnum.c
===================================================================
--- /trunk/src/sys/arch/arc/arc/c_magnum.c	(revision 151)
+++ /trunk/src/sys/arch/arc/arc/c_magnum.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: c_magnum.c,v 1.19 2008/03/14 16:43:27 tsutsui Exp $	*/
+/*	$NetBSD: c_magnum.c,v 1.19.22.1 2010/12/29 01:44:20 matt Exp $	*/
 /*	$OpenBSD: machdep.c,v 1.36 1999/05/22 21:22:19 weingart Exp $	*/
 
@@ -81,9 +81,12 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: c_magnum.c,v 1.19 2008/03/14 16:43:27 tsutsui Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: c_magnum.c,v 1.19.22.1 2010/12/29 01:44:20 matt Exp $");
+
+#define __INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/intr.h>
 #include <sys/device.h>
+
 #include <uvm/uvm_extern.h>
 
@@ -121,24 +124,18 @@
  * given interrupt priority level.
  */
-static const uint32_t magnum_ipl_sr_bits[_IPL_N] = {
-	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] =
-	    MIPS_SOFT_INT_MASK_0,
-	[IPL_SOFTNET] = 
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1,
-	[IPL_VM] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_1 |
-	    MIPS_INT_MASK_2 |
-	    MIPS_INT_MASK_3,
-	[IPL_SCHED] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_1 |
-	    MIPS_INT_MASK_2 |
-	    MIPS_INT_MASK_3 |
-	    MIPS_INT_MASK_4 |
-	    MIPS_INT_MASK_5,
+static const struct ipl_sr_map magnum_ipl_sr_map = {
+    .sr_bits = {
+	[IPL_NONE] =		0,
+	[IPL_SOFTCLOCK] =	MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] =		MIPS_SOFT_INT_MASK,
+	[IPL_VM] =		MIPS_SOFT_INT_MASK
+				| MIPS_INT_MASK_0
+				| MIPS_INT_MASK_1
+				| MIPS_INT_MASK_2
+				| MIPS_INT_MASK_3,
+	[IPL_SCHED] =		MIPS_INT_MASK,
+	[IPL_DDB] =		MIPS_INT_MASK,
+	[IPL_HIGH] =		MIPS_INT_MASK,
+    },
 };
 
@@ -231,5 +228,5 @@
 	 * Initialize interrupt priority
 	 */
-	ipl_sr_bits = magnum_ipl_sr_bits;
+	ipl_sr_map = magnum_ipl_sr_map;
 
 	/*
Index: /trunk/src/sys/arch/arc/arc/c_nec_eisa.c
===================================================================
--- /trunk/src/sys/arch/arc/arc/c_nec_eisa.c	(revision 151)
+++ /trunk/src/sys/arch/arc/arc/c_nec_eisa.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: c_nec_eisa.c,v 1.15 2008/05/14 13:29:27 tsutsui Exp $	*/
+/*	$NetBSD: c_nec_eisa.c,v 1.15.16.1 2010/12/29 01:44:20 matt Exp $	*/
 
 /*-
@@ -56,10 +56,13 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: c_nec_eisa.c,v 1.15 2008/05/14 13:29:27 tsutsui Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: c_nec_eisa.c,v 1.15.16.1 2010/12/29 01:44:20 matt Exp $");
+
+#define __INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kcore.h>
 #include <sys/device.h>
+#include <sys/intr.h>
+
 #include <uvm/uvm_extern.h>
 
@@ -104,23 +107,17 @@
  * given interrupt priority level.
  */
-static const uint32_t nec_eisa_ipl_sr_bits[_IPL_N] = {
-	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] =
-	    MIPS_SOFT_INT_MASK_0,
-	[IPL_SOFTNET] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1,
-	[IPL_VM] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_1 |
-	    MIPS_INT_MASK_2,
-	[IPL_SCHED] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_1 |
-	    MIPS_INT_MASK_2 |
-	    MIPS_INT_MASK_3 |
-	    MIPS_INT_MASK_4 |
-	    MIPS_INT_MASK_5,
+static const struct ipl_sr_map nec_eisa_ipl_sr_map = {
+    .sr_bits = {
+	[IPL_NONE] =		0,
+	[IPL_SOFTCLOCK] =	MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] =		MIPS_SOFT_INT_MASK,
+	[IPL_VM] =		MIPS_SOFT_INT_MASK
+				| MIPS_INT_MASK_0
+				| MIPS_INT_MASK_1
+				| MIPS_INT_MASK_2,
+	[IPL_SCHED] =		MIPS_INT_MASK,
+	[IPL_DDB] =		MIPS_INT_MASK,
+	[IPL_HIGH] =		MIPS_INT_MASK,
+    },
 };
 
@@ -162,5 +159,5 @@
 	 * Initialize interrupt priority
 	 */
-	ipl_sr_bits = nec_eisa_ipl_sr_bits;
+	ipl_sr_map = nec_eisa_ipl_sr_map;
 
 	/*
Index: /trunk/src/sys/arch/arc/arc/c_nec_pci.c
===================================================================
--- /trunk/src/sys/arch/arc/arc/c_nec_pci.c	(revision 151)
+++ /trunk/src/sys/arch/arc/arc/c_nec_pci.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: c_nec_pci.c,v 1.17 2007/12/03 15:33:13 ad Exp $	*/
+/*	$NetBSD: c_nec_pci.c,v 1.17.36.1 2010/12/29 01:44:20 matt Exp $	*/
 
 /*-
@@ -32,10 +32,13 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: c_nec_pci.c,v 1.17 2007/12/03 15:33:13 ad Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: c_nec_pci.c,v 1.17.36.1 2010/12/29 01:44:20 matt Exp $");
+
+#define __INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kcore.h>
 #include <sys/device.h>
+#include <sys/intr.h>
+
 #include <uvm/uvm_extern.h>
 
@@ -111,23 +114,17 @@
  * given interrupt priority level.
  */
-static const uint32_t nec_pci_ipl_sr_bits[_IPL_N] = {
-	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] =
-	    MIPS_SOFT_INT_MASK_0,
-	[IPL_SOFTNET] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1,
-	[IPL_VM] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_1 | 
-	    MIPS_INT_MASK_2,
-	[IPL_SCHED] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_1 |
-	    MIPS_INT_MASK_2 |
-	    MIPS_INT_MASK_3 |
-	    MIPS_INT_MASK_4 |
-	    MIPS_INT_MASK_5,
+static const struct ipl_sr_map nec_pci_ipl_sr_map = {
+    .sr_bits = {
+	[IPL_NONE] =		0,
+	[IPL_SOFTCLOCK] =	MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] =		MIPS_SOFT_INT_MASK,
+	[IPL_VM] =		MIPS_SOFT_INT_MASK
+				| MIPS_INT_MASK_0
+				| MIPS_INT_MASK_1
+				| MIPS_INT_MASK_2,
+	[IPL_SCHED] =		MIPS_INT_MASK,
+	[IPL_DDB] =		MIPS_INT_MASK,
+	[IPL_HIGH] =		MIPS_INT_MASK,
+    },
 };
 
@@ -187,5 +184,5 @@
 	 * Initialize interrupt priority
 	 */
-	ipl_sr_bits = nec_pci_ipl_sr_bits;
+	ipl_sr_map = nec_pci_ipl_sr_map;
 
 	/*
Index: /trunk/src/sys/arch/arc/arc/interrupt.c
===================================================================
--- /trunk/src/sys/arch/arc/arc/interrupt.c	(revision 151)
+++ /trunk/src/sys/arch/arc/arc/interrupt.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: interrupt.c,v 1.4.22.1 2010/02/05 07:39:52 matt Exp $	*/
+/*	$NetBSD: interrupt.c,v 1.4.22.2 2010/12/29 01:44:20 matt Exp $	*/
 /*	$OpenBSD: trap.c,v 1.22 1999/05/24 23:08:59 jason Exp $	*/
 
@@ -79,5 +79,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.4.22.1 2010/02/05 07:39:52 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.4.22.2 2010/12/29 01:44:20 matt Exp $");
 
 #include <sys/param.h>
@@ -136,72 +136,57 @@
 /*
  * Handle an interrupt.
- * N.B., curlwp might be NULL.
  */
 void
-cpu_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+cpu_intr(int ppl, vaddr_t pc, uint32_t status)
 {
+	struct cpu_inttab *inttab;
 	struct clockframe cf;
-	struct cpu_inttab *inttab;
-	struct cpu_info *ci;
-	uint32_t handled;
+	uint32_t ipending;
 	u_int i;
+	int ipl;
 
-	handled = 0;
-	ci = curcpu();
 	uvmexp.intrs++;
-	ci->ci_idepth++;
 
 	cf.pc = pc;
 	cf.sr = status;
+	cf.intr = (curcpu()->ci_idepth > 1);
 
-	/* check MIPS3 internal clock interrupt */
-	if (ipending & MIPS_INT_MASK_5) {
+	while (ppl < (ipl = splintr(&ipending))) {
+		/* check MIPS3 internal clock interrupt */
+		if (ipending & MIPS_INT_MASK_5) {
 #ifdef ENABLE_INT5_STATCLOCK
-		/* call statclock(9) handler */
-		statclockintr(&cf);
-		statclock_ev.ev_count++;
+			/* call statclock(9) handler */
+			statclockintr(&cf);
+			statclock_ev.ev_count++;
 #else
+			/*
+			 * Writing a value to the Compare register, as a side
+			 * effect, clears the timer interrupt request.
+			 */
+			mips3_cp0_compare_write(0);
+		}
+#endif
+
 		/*
-		 *  Writing a value to the Compare register,
-		 *  as a side effect, clears the timer interrupt request.
+		 * If there is an independent timer interrupt handler,
+		 * call it first.
 		 */
-		mips3_cp0_compare_write(0);
-#endif
-		handled |= MIPS_INT_MASK_5;
+		inttab = &cpu_int_tab[ARC_INTPRI_TIMER_INT];
+		if (inttab->int_mask & ipending) {
+			(*inttab->int_hand)(ipending, &cf);
+		}
+
+		/*
+		 *  Check off all other enabled interrupts.
+		 *  Called handlers return mask of interrupts to be reenabled.
+		 */
+		for (inttab++, i = ARC_INTPRI_TIMER_INT + 1;
+		     i < ARC_NINTPRI;
+		     inttab++, i++) {
+			if (inttab->int_mask & ipending) {
+				(*inttab->int_hand)(ipending, &cf);
+			}
+		}
+		(void)splhigh();
 	}
-	_splset((status & handled) | MIPS_SR_INT_IE);
-
-	/*
-	 *  If there is an independent timer interrupt handler, call it first.
-	 *  Called interrupt routine returns mask of interrupts to be reenabled.
-	 */
-	inttab = &cpu_int_tab[ARC_INTPRI_TIMER_INT];
-	if (inttab->int_mask & ipending) {
-		handled |= (*inttab->int_hand)(ipending, &cf);
-	}
-	_splset((status & handled) | MIPS_SR_INT_IE);
-
-	inttab++;
-
-	/*
-	 *  Check off all other enabled interrupts.
-	 *  Called handlers return mask of interrupts to be reenabled.
-	 */
-	for (i = ARC_INTPRI_TIMER_INT + 1; i < ARC_NINTPRI; i++) {
-		if (inttab->int_mask & ipending) {
-			handled |= (*inttab->int_hand)(ipending, &cf);
-		}
-		inttab++;
-	}
-	cause &= ~handled;
-	_splset((status & ~cause & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
-	ci->ci_idepth--;
-
-#ifdef __HAVE_FAST_SOFTINTS
-	/* software interrupts */
-	ipending &= MIPS_SOFT_INT_MASK;
-	if (ipending == 0)
-		return;
-	softint_process(ipending);
-#endif
 }
Index: /trunk/src/sys/arch/arc/arc/p_dti_arcstation.c
===================================================================
--- /trunk/src/sys/arch/arc/arc/p_dti_arcstation.c	(revision 151)
+++ /trunk/src/sys/arch/arc/arc/p_dti_arcstation.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: p_dti_arcstation.c,v 1.13 2007/12/03 15:33:14 ad Exp $	*/
+/*	$NetBSD: p_dti_arcstation.c,v 1.13.36.1 2010/12/29 01:44:20 matt Exp $	*/
 /*	$OpenBSD: machdep.c,v 1.36 1999/05/22 21:22:19 weingart Exp $	*/
 
@@ -77,9 +77,12 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: p_dti_arcstation.c,v 1.13 2007/12/03 15:33:14 ad Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: p_dti_arcstation.c,v 1.13.36.1 2010/12/29 01:44:20 matt Exp $");
+
+#define __INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/device.h>
+#include <sys/intr.h>
+
 #include <uvm/uvm_extern.h>
 
@@ -138,26 +141,14 @@
  */
 /* XXX see comments in p_dti_arcstation_init() */
-static const uint32_t dti_arcstation_ipl_sr_bits[_IPL_N] = {
-	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] =
-	    MIPS_SOFT_INT_MASK_0,
-	[IPL_SOFTNET] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1,
-	[IPL_VM] =	/* XXX */
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0|
-	    MIPS_INT_MASK_1|
-	    MIPS_INT_MASK_2|
-	    MIPS_INT_MASK_3|
-	    MIPS_INT_MASK_4|
-	    MIPS_INT_MASK_5,
-	[IPL_SCHED] =	/* XXX */
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0|
-	    MIPS_INT_MASK_1|
-	    MIPS_INT_MASK_2|
-	    MIPS_INT_MASK_3|
-	    MIPS_INT_MASK_4|
-	    MIPS_INT_MASK_5,
+static const struct ipl_sr_map dti_arcstation_ipl_sr_map = {
+    .sr_bits = {
+	[IPL_NONE] =		0,
+	[IPL_SOFTCLOCK] =	MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] =		MIPS_SOFT_INT_MASK,
+	[IPL_VM] =		MIPS_INT_MASK,	/* XXX */
+	[IPL_SCHED] =		MIPS_INT_MASK,
+	[IPL_DDB] =		MIPS_INT_MASK,
+	[IPL_HIGH] =		MIPS_INT_MASK,
+     },
 };
 
@@ -249,5 +240,5 @@
 	 *	- use MIP3_INTERNAL_TIMER_INTERRUPT for clock
 	 */
-	ipl_sr_bits = dti_arcstation_ipl_sr_bits;
+	ipl_sr_map = dti_arcstation_ipl_sr_map;
 
 	/*
Index: /trunk/src/sys/arch/arc/arc/p_dti_tyne.c
===================================================================
--- /trunk/src/sys/arch/arc/arc/p_dti_tyne.c	(revision 151)
+++ /trunk/src/sys/arch/arc/arc/p_dti_tyne.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: p_dti_tyne.c,v 1.16 2007/12/03 15:33:14 ad Exp $	*/
+/*	$NetBSD: p_dti_tyne.c,v 1.16.36.1 2010/12/29 01:44:21 matt Exp $	*/
 /*	$OpenBSD: machdep.c,v 1.36 1999/05/22 21:22:19 weingart Exp $	*/
 
@@ -76,6 +76,7 @@
  */
 
+#define __INTR_PRIVATE
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: p_dti_tyne.c,v 1.16 2007/12/03 15:33:14 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: p_dti_tyne.c,v 1.16.36.1 2010/12/29 01:44:21 matt Exp $");
 
 #include <sys/param.h>
@@ -139,26 +140,16 @@
  */
 /* XXX see comments in p_dti_tyne_init() */
-static const uint32_t dti_tyne_ipl_sr_bits[_IPL_N] = {
-	[IPL_NONE] =0,
-	[IPL_SOFTCLOCK] =
-	    MIPS_SOFT_INT_MASK_0,
-	[IPL_SOFTNET] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1,
-	[IPL_VM] =	/* XXX */
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0|
-	    MIPS_INT_MASK_1|
-	    MIPS_INT_MASK_2|
-	    MIPS_INT_MASK_3|
-	    MIPS_INT_MASK_4|
-	    MIPS_INT_MASK_5,
-	[IPL_SCHED] =	/* XXX */
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0|
-	    MIPS_INT_MASK_1|
-	    MIPS_INT_MASK_2|
-	    MIPS_INT_MASK_3|
-	    MIPS_INT_MASK_4|
-	    MIPS_INT_MASK_5,
+static const struct ipl_sr_map dti_tyne_ipl_sr_map = {
+    .sr_bits = {
+	[IPL_NONE] = 0,
+	[IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTBIO] = MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] = MIPS_SOFT_INT_MASK,
+	[IPL_SOFTSERIAL] = MIPS_SOFT_INT_MASK,
+	[IPL_VM] =	MIPS_INT_MASK, /* XXX */
+	[IPL_SCHED] =	MIPS_INT_MASK,
+	[IPL_DDB] =	MIPS_INT_MASK,
+	[IPL_HIGH] =	MIPS_INT_MASK,
+    },
 };
 
@@ -242,5 +233,5 @@
 	 *	- use MIP3_INTERNAL_TIMER_INTERRUPT for clock
 	 */
-	ipl_sr_bits = dti_tyne_ipl_sr_bits;
+	ipl_sr_map = dti_tyne_ipl_sr_map;
 
 	/*
Index: /trunk/src/sys/arch/arc/arc/p_sni_rm200pci.c
===================================================================
--- /trunk/src/sys/arch/arc/arc/p_sni_rm200pci.c	(revision 151)
+++ /trunk/src/sys/arch/arc/arc/p_sni_rm200pci.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: p_sni_rm200pci.c,v 1.12 2007/12/03 15:33:14 ad Exp $	*/
+/*	$NetBSD: p_sni_rm200pci.c,v 1.12.36.1 2010/12/29 01:44:21 matt Exp $	*/
 /*	$OpenBSD: machdep.c,v 1.36 1999/05/22 21:22:19 weingart Exp $	*/
 
@@ -76,10 +76,13 @@
  */
 
+#define __INTR_PRIVATE
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: p_sni_rm200pci.c,v 1.12 2007/12/03 15:33:14 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: p_sni_rm200pci.c,v 1.12.36.1 2010/12/29 01:44:21 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/device.h>
+#include <sys/intr.h>
+
 #include <uvm/uvm_extern.h>
 
@@ -122,26 +125,14 @@
  */
 /* XXX lack of hardware info for sni_rm200pci */
-static const uint32_t sni_rm200pci_ipl_sr_bits[_IPL_N] = {
+static const struct ipl_sr_map sni_rm200pci_ipl_sr_map = {
+    .sr_bits = {
 	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] =
-	    MIPS_SOFT_INT_MASK_0,
-	[IPL_SOFTNET] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1,
-	[IPL_VM] =	/* XXX */
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_1 |
-	    MIPS_INT_MASK_2 |
-	    MIPS_INT_MASK_3 |
-	    MIPS_INT_MASK_4 |
-	    MIPS_INT_MASK_5,
-	[IPL_SCHED] =	/* XXX */
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_1 |
-	    MIPS_INT_MASK_2 |
-	    MIPS_INT_MASK_3 |
-	    MIPS_INT_MASK_4 |
-	    MIPS_INT_MASK_5,
+	[IPL_SOFTCLOCK] =	MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] =		MIPS_SOFT_INT_MASK,
+	[IPL_VM] =		MIPS_INT_MASK, 	/* XXX */
+	[IPL_SCHED] =		MIPS_INT_MASK,
+	[IPL_DDB] =		MIPS_INT_MASK,
+	[IPL_HIGH] =		MIPS_INT_MASK,
+    },
 };
 
@@ -160,5 +151,5 @@
 	 * Initialize interrupt priority
 	 */
-	ipl_sr_bits = sni_rm200pci_ipl_sr_bits;
+	ipl_sr_map = sni_rm200pci_ipl_sr_map;
 
 	/*
Index: /trunk/src/sys/arch/arc/include/intr.h
===================================================================
--- /trunk/src/sys/arch/arc/include/intr.h	(revision 151)
+++ /trunk/src/sys/arch/arc/include/intr.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: intr.h,v 1.22.18.1 2010/02/06 02:57:43 matt Exp $	*/
+/*	$NetBSD: intr.h,v 1.22.18.2 2010/12/29 01:44:21 matt Exp $	*/
 
 /*-
@@ -33,59 +33,9 @@
 #define _ARC_INTR_H_
 
-#define IPL_NONE	0	/* disable only this interrupt */
-#define IPL_SOFTCLOCK	1	/* generic software interrupts (SI 0) */
-#define IPL_SOFTBIO	1	/* clock software interrupts (SI 0) */
-#define IPL_SOFTNET	2	/* network software interrupts (SI 1) */
-#define IPL_SOFTSERIAL	2	/* serial software interrupts (SI 1) */
-#define	IPL_VM		3
-#define IPL_SCHED	4
-#define IPL_HIGH	4
-
-#define _IPL_N		5
-
-#define _IPL_SI0_FIRST	IPL_SOFTCLOCK
-#define _IPL_SI0_LAST	IPL_SOFTBIO
-
-#define _IPL_SI1_FIRST	IPL_SOFTNET
-#define _IPL_SI1_LAST	IPL_SOFTSERIAL
-
-/* Interrupt sharing types. */
-#define IST_NONE	0	/* none */
-#define IST_PULSE	1	/* pulsed */
-#define IST_EDGE	2	/* edge-triggered */
-#define IST_LEVEL	3	/* level-triggered */
+#include <mips/intr.h>
 
 #ifdef _KERNEL
 #ifndef _LOCORE
 
-#include <mips/locore.h>
-
-extern const uint32_t *ipl_sr_bits;
-
-#define spl0()		(void)_spllower(0)
-#define splx(s)		(void)_splset(s)
-
-typedef int ipl_t;
-typedef struct {
-	ipl_t _sr;
-} ipl_cookie_t;
-
-static inline ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
-	return (ipl_cookie_t){._sr = ipl_sr_bits[ipl]};
-}
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
-	return _splraise(icookie._sr);
-}
-
-#include <sys/spl.h>
-
-struct clockframe;
 void arc_set_intr(uint32_t, uint32_t (*)(uint32_t, struct clockframe *), int);
 extern uint32_t cpu_int_mask;
Index: /trunk/src/sys/arch/atari/stand/tostools/file2swp/Makefile
===================================================================
--- /trunk/src/sys/arch/atari/stand/tostools/file2swp/Makefile	(revision 151)
+++ /trunk/src/sys/arch/atari/stand/tostools/file2swp/Makefile	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: Makefile,v 1.1 2002/02/27 20:21:16 leo Exp $
+#	$NetBSD: Makefile,v 1.1.1.1 2002/02/27 20:21:16 leo Exp $
 
 PROG	= file2swp.ttp
Index: /trunk/src/sys/arch/cobalt/cobalt/bus.c
===================================================================
--- /trunk/src/sys/arch/cobalt/cobalt/bus.c	(revision 151)
+++ /trunk/src/sys/arch/cobalt/cobalt/bus.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: bus.c,v 1.35.16.3 2010/01/20 09:04:32 matt Exp $	*/
+/*	$NetBSD: bus.c,v 1.35.16.4 2010/12/24 07:50:58 matt Exp $	*/
 
 /*
@@ -32,5 +32,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bus.c,v 1.35.16.3 2010/01/20 09:04:32 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus.c,v 1.35.16.4 2010/12/24 07:50:58 matt Exp $");
 
 #include <sys/param.h>
@@ -116,4 +116,13 @@
 	*nbshp = bsh + offset;
 	return 0;
+}
+
+paddr_t
+bus_space_mmap(bus_space_tag_t t, bus_addr_t addr, off_t off, int prot,
+    int flags)
+{
+
+	/* XXX not implemented */
+	return -1;
 }
 
Index: /trunk/src/sys/arch/cobalt/cobalt/machdep.c
===================================================================
--- /trunk/src/sys/arch/cobalt/cobalt/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/cobalt/cobalt/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: machdep.c,v 1.98.10.4 2010/03/21 17:38:33 cliff Exp $	*/
+/*	$NetBSD: machdep.c,v 1.98.10.5 2010/12/24 07:52:01 matt Exp $	*/
 
 /*-
@@ -51,5 +51,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.98.10.4 2010/03/21 17:38:33 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.98.10.5 2010/12/24 07:52:01 matt Exp $");
 
 #include "opt_ddb.h"
@@ -189,4 +189,11 @@
 
 	}
+
+	/*
+	 * Copy exception-dispatch code down to exception vector.
+	 * Initialize locore-function vector.
+	 * Clear out the I and D caches.
+	 */
+	mips_vector_init(NULL);
 
 	/* Check for valid bootinfo passed from bootstrap */
@@ -258,11 +265,4 @@
 
 	/*
-	 * Copy exception-dispatch code down to exception vector.
-	 * Initialize locore-function vector.
-	 * Clear out the I and D caches.
-	 */
-	mips_vector_init(NULL);
-
-	/*
 	 * The boot command is passed in the top 512 bytes,
 	 * so don't clobber that.
Index: /trunk/src/sys/arch/cobalt/dev/panel.c
===================================================================
--- /trunk/src/sys/arch/cobalt/dev/panel.c	(revision 151)
+++ /trunk/src/sys/arch/cobalt/dev/panel.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: panel.c,v 1.18 2008/05/09 10:59:55 tsutsui Exp $ */
+/* $NetBSD: panel.c,v 1.18.16.1 2010/12/29 08:18:05 matt Exp $ */
 
 /*
@@ -29,5 +29,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: panel.c,v 1.18 2008/05/09 10:59:55 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: panel.c,v 1.18.16.1 2010/12/29 08:18:05 matt Exp $");
 
 #include <sys/param.h>
@@ -42,4 +42,5 @@
 #include <sys/callout.h>
 #include <sys/select.h>
+#include <sys/reboot.h>
 
 #include <machine/bus.h>
@@ -77,12 +78,16 @@
 	"Starting up...  "
 };
-static const struct lcd_message shutdown_message = {
+static const struct lcd_message halt_message = {
 	"NetBSD/cobalt   ",
-	"Shutting down..."
+	"Halting...      "
+};
+static const struct lcd_message reboot_message = {
+	"NetBSD/cobalt   ",
+	"Rebooting...    "
 };
 
 static int	panel_match(device_t, cfdata_t, void *);
 static void	panel_attach(device_t, device_t, void *);
-static void	panel_shutdown(void *);
+static bool	panel_shutdown(device_t, int);
 
 static void	panel_soft(void *);
@@ -140,4 +145,6 @@
 	    1, &sc->sc_lcd.sc_iodr);
 
+	printf("\n");
+
 	sc->sc_lcd.sc_dev_ok = 1;
 	sc->sc_lcd.sc_cols = PANEL_COLS;
@@ -157,5 +164,5 @@
 	    HD_DDRAM_WRITE);
 
-	shutdownhook_establish(panel_shutdown, sc);
+	pmf_device_register1(self, NULL, NULL, panel_shutdown);
 
 	sc->sc_kp.sc_iot = maa->ma_iot;
@@ -170,12 +177,10 @@
 	callout_init(&sc->sc_callout, 0);
 	selinit(&sc->sc_selq);
-
-	printf("\n");
-}
-
-static void
-panel_shutdown(void *arg)
-{
-	struct panel_softc *sc = arg;
+}
+
+static bool
+panel_shutdown(device_t self, int howto)
+{
+	struct panel_softc *sc = device_private(self);
 	struct hd44780_io io;
 
@@ -183,7 +188,12 @@
 	io.dat = 0;
 	io.len = PANEL_VCOLS * PANEL_ROWS;
-	memcpy(io.buf, &shutdown_message, io.len);
+	if (howto & RB_HALT)
+		memcpy(io.buf, &halt_message, io.len);
+	else
+		memcpy(io.buf, &reboot_message, io.len);
 	hd44780_ddram_io(&sc->sc_lcd, sc->sc_lcd.sc_curchip, &io,
 	    HD_DDRAM_WRITE);
+
+	return true;
 }
 
Index: /trunk/src/sys/arch/cobalt/include/bus.h
===================================================================
--- /trunk/src/sys/arch/cobalt/include/bus.h	(revision 151)
+++ /trunk/src/sys/arch/cobalt/include/bus.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: bus.h,v 1.22 2008/04/28 20:23:16 martin Exp $	*/
+/*	$NetBSD: bus.h,v 1.22.18.1 2010/12/24 07:50:58 matt Exp $	*/
 
 /*
@@ -87,4 +87,14 @@
 int	bus_space_subregion(bus_space_tag_t t, bus_space_handle_t bsh,
 	    bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp);
+
+/*
+ *	paddr_t bus_space_mmap(bus_space_tag_t t,
+ *          bus_addr_t addr, off_t offset, int prot, int flags);
+ *
+ * Mmap bus space for a user application.
+ */
+
+paddr_t	bus_space_mmap(bus_space_tag_t t, bus_addr_t addr, off_t off, int prot,
+    int flags);
 
 /*
Index: /trunk/src/sys/arch/evbmips/adm5120/machdep.c
===================================================================
--- /trunk/src/sys/arch/evbmips/adm5120/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/evbmips/adm5120/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: machdep.c,v 1.6.10.5 2010/03/21 17:38:33 cliff Exp $ */
+/* machdep.c,v 1.6.10.5 2010/03/21 17:38:33 cliff Exp */
 
 /*-
@@ -108,5 +108,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.6.10.5 2010/03/21 17:38:33 cliff Exp $");
+__KERNEL_RCSID(0, "machdep.c,v 1.6.10.5 2010/03/21 17:38:33 cliff Exp");
 
 #include "opt_ddb.h"
@@ -328,5 +328,5 @@
 	 * Also clears the I+D caches.
 	 */
-	mips_vector_init(NULL);
+	mips_vector_init(NULL, false);
 
 	/*
@@ -507,5 +507,5 @@
 
 	/* Take a snapshot before clobbering any registers. */
-	savectx(curlwp->l_addr);
+	savectx(lwp_getpcb(curlwp));
 
 	/* If "always halt" was specified as a boot flag, obey. */
Index: /trunk/src/sys/arch/evbmips/alchemy/machdep.c
===================================================================
--- /trunk/src/sys/arch/evbmips/alchemy/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/evbmips/alchemy/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: machdep.c,v 1.37.10.5 2010/03/21 17:38:33 cliff Exp $ */
+/* $NetBSD: machdep.c,v 1.37.10.6 2011/05/13 17:30:43 matt Exp $ */
 
 /*-
@@ -108,5 +108,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.37.10.5 2010/03/21 17:38:33 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.37.10.6 2011/05/13 17:30:43 matt Exp $");
 
 #include "opt_ddb.h"
@@ -213,5 +213,5 @@
 	 * Also clears the I+D caches.
 	 */
-	mips_vector_init(NULL);
+	mips_vector_init(NULL, false);
 
 	/*
@@ -427,5 +427,5 @@
 
 	/* Take a snapshot before clobbering any registers. */
-	savectx(curlwp->l_addr);
+	savectx(lwp_getpcb(curlwp));
 
 	board = board_info();
Index: /trunk/src/sys/arch/evbmips/atheros/machdep.c
===================================================================
--- /trunk/src/sys/arch/evbmips/atheros/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/evbmips/atheros/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: machdep.c,v 1.13.10.6 2010/03/21 17:38:34 cliff Exp $ */
+/* $NetBSD: machdep.c,v 1.13.10.7 2011/05/13 17:30:43 matt Exp $ */
 
 /*
@@ -148,5 +148,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.13.10.6 2010/03/21 17:38:34 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.13.10.7 2011/05/13 17:30:43 matt Exp $");
 
 #include "opt_ddb.h"
@@ -241,5 +241,5 @@
 	 * Also clears the I+D caches.
 	 */
-	mips_vector_init(NULL);
+	mips_vector_init(NULL, false);
 
 	/*
@@ -394,5 +394,5 @@
 
 	/* Take a snapshot before clobbering any registers. */
-	savectx(curlwp->l_addr);
+	savectx(lwp_getpcb(curlwp));
 
 	/* If "always halt" was specified as a boot flag, obey. */
Index: /trunk/src/sys/arch/evbmips/conf/ALCHEMY
===================================================================
--- /trunk/src/sys/arch/evbmips/conf/ALCHEMY	(revision 151)
+++ /trunk/src/sys/arch/evbmips/conf/ALCHEMY	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: ALCHEMY,v 1.20.8.2 2010/01/29 00:16:57 matt Exp $
+#	ALCHEMY,v 1.20.8.2 2010/01/29 00:16:57 matt Exp
 #
 # Kernel config for the Alchemy Semiconductor (AMD) PB1000, PB1500,
@@ -6,5 +6,5 @@
 include 	"arch/evbmips/conf/std.alchemy"
 
-#ident 		"ALCHEMY-$Revision: 1.20.8.2 $"
+#ident 		"ALCHEMY-1.20.8.2"
 
 maxusers	32
@@ -49,5 +49,5 @@
 options 	DDB_HISTORY_SIZE=100 # enable history editing in DDB
 makeoptions 	DEBUG="-g"	# compile full symbol table
-options 	SYMTAB_SPACE=425000	# size for embedded symbol table
+options 	SYMTAB_SPACE=475000	# size for embedded symbol table
 
 # Compatibility options
Index: /trunk/src/sys/arch/evbmips/conf/INSTALL_MALTA
===================================================================
--- /trunk/src/sys/arch/evbmips/conf/INSTALL_MALTA	(revision 151)
+++ /trunk/src/sys/arch/evbmips/conf/INSTALL_MALTA	(revision 152)
@@ -1,7 +1,7 @@
-# $NetBSD: INSTALL_MALTA,v 1.1.2.1 2009/08/24 04:03:30 matt Exp $
+# $NetBSD: INSTALL_MALTA,v 1.1.2.2 2011/05/26 19:22:46 matt Exp $
 
 include		"arch/evbmips/conf/MALTA"
 
-#ident 		"INSTALL_MALTA-$Revision: 1.1.2.1 $"
+#ident 		"INSTALL_MALTA-$Revision: 1.1.2.2 $"
 
 # Enable the hooks used for initializing the root memory-disk.
@@ -13,2 +13,4 @@
 options 	MEMORY_DISK_SERVER=0		# no userspace memory disk
 options 	MEMORY_DISK_ROOT_SIZE=12288	# size of memory disk, in blocks
+
+makeoptions	NEED_MDSETIMAGE="yes"
Index: /trunk/src/sys/arch/evbmips/conf/INSTALL_MALTA32
===================================================================
--- /trunk/src/sys/arch/evbmips/conf/INSTALL_MALTA32	(revision 151)
+++ /trunk/src/sys/arch/evbmips/conf/INSTALL_MALTA32	(revision 152)
@@ -1,7 +1,7 @@
-# $NetBSD: INSTALL_MALTA32,v 1.1.2.1 2009/08/24 04:03:30 matt Exp $
+# $NetBSD: INSTALL_MALTA32,v 1.1.2.2 2011/05/26 19:22:47 matt Exp $
 
 include		"arch/evbmips/conf/MALTA32"
 
-#ident 		"INSTALL_MALTA32-$Revision: 1.1.2.1 $"
+#ident 		"INSTALL_MALTA32-$Revision: 1.1.2.2 $"
 
 # Enable the hooks used for initializing the root memory-disk.
@@ -13,2 +13,4 @@
 options 	MEMORY_DISK_SERVER=0		# no userspace memory disk
 options 	MEMORY_DISK_ROOT_SIZE=12288	# size of memory disk, in blocks
+
+makeoptions	NEED_MDSETIMAGE="yes"
Index: /trunk/src/sys/arch/evbmips/conf/INSTALL_MALTA64
===================================================================
--- /trunk/src/sys/arch/evbmips/conf/INSTALL_MALTA64	(revision 151)
+++ /trunk/src/sys/arch/evbmips/conf/INSTALL_MALTA64	(revision 152)
@@ -1,7 +1,7 @@
-# $NetBSD: INSTALL_MALTA64,v 1.1.2.1 2009/08/24 04:03:30 matt Exp $
+# $NetBSD: INSTALL_MALTA64,v 1.1.2.2 2011/05/26 19:22:47 matt Exp $
 
 include		"arch/evbmips/conf/MALTA64"
 
-#ident 		"INSTALL_MALTA64-$Revision: 1.1.2.1 $"
+#ident 		"INSTALL_MALTA64-$Revision: 1.1.2.2 $"
 
 # Enable the hooks used for initializing the root memory-disk.
@@ -13,2 +13,4 @@
 options 	MEMORY_DISK_SERVER=0		# no userspace memory disk
 options 	MEMORY_DISK_ROOT_SIZE=12288	# size of memory disk, in blocks
+
+makeoptions	NEED_MDSETIMAGE="yes"
Index: /trunk/src/sys/arch/evbmips/conf/MALTA
===================================================================
--- /trunk/src/sys/arch/evbmips/conf/MALTA	(revision 151)
+++ /trunk/src/sys/arch/evbmips/conf/MALTA	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: MALTA,v 1.48.8.3 2010/01/29 00:16:57 matt Exp $
+#	MALTA,v 1.48.8.3 2010/01/29 00:16:57 matt Exp
 
 include 	"arch/evbmips/conf/std.malta"
@@ -5,5 +5,5 @@
 #options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"MALTA-$Revision: 1.48.8.3 $"
+#ident 		"MALTA-1.48.8.3"
 
 maxusers	32
@@ -40,5 +40,5 @@
 options 	DDB_HISTORY_SIZE=100 # enable history editing in DDB
 makeoptions 	DEBUG="-g"	# compile full symbol table
-options 	SYMTAB_SPACE=400000	# size for embedded symbol table
+options 	SYMTAB_SPACE=410000	# size for embedded symbol table
 
 # Compatibility options
Index: /trunk/src/sys/arch/evbmips/conf/MALTA32.MP
===================================================================
--- /trunk/src/sys/arch/evbmips/conf/MALTA32.MP	(revision 152)
+++ /trunk/src/sys/arch/evbmips/conf/MALTA32.MP	(revision 152)
@@ -0,0 +1,8 @@
+# $NetBSD: MALTA32.MP,v 1.1.2.1 2010/12/29 08:19:19 matt Exp $
+#
+include "arch/evbmips/conf/MALTA32"
+
+options 	MULTIPROCESSOR
+options 	LOCKDEBUG
+
+pseudo-device	lockstat
Index: /trunk/src/sys/arch/evbmips/conf/Makefile.evbmips.inc
===================================================================
--- /trunk/src/sys/arch/evbmips/conf/Makefile.evbmips.inc	(revision 151)
+++ /trunk/src/sys/arch/evbmips/conf/Makefile.evbmips.inc	(revision 152)
@@ -1,6 +1,39 @@
-#	$NetBSD: Makefile.evbmips.inc,v 1.2 2005/11/24 12:54:29 dbj Exp $
+#	Makefile.evbmips.inc,v 1.2 2005/11/24 12:54:29 dbj Exp
 
-SYSTEM_LD_TAIL_EXTRA=; \
+RAMDISKDIR!=	cd ${NETBSDSRCDIR}/distrib/${THISMIPS:T}/instkernel/ramdisk && ${PRINTOBJDIR}
+
+.if defined(NEED_MDSETIMAGE) && ${NEED_MDSETIMAGE} != no \
+    && exists(${RAMDISKDIR}/ramdisk.fs)
+SYSTEM_LD_TAIL_EXTRA+=; \
+	echo ${TOOL_MDSETIMAGE} -s $@ ${RAMDISKDIR}/ramdisk.fs; \
+	${TOOL_MDSETIMAGE} -s $@ ${RAMDISKDIR}/ramdisk.fs
+.endif
+
+.if defined(NEED_SREC) && ${NEED_SREC} != "no"
+SYSTEM_LD_TAIL_EXTRA+=; \
 	echo ${STRIP} -O srec -o $@.srec $@; \
 	${STRIP} -O srec -o $@.srec $@
 EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.srec@}
+.endif
+
+.if defined(NEED_BINARY) && ${NEED_BINARY} != "no"
+SYSTEM_LD_TAIL_EXTRA+=; \
+	echo ${OBJCOPY} -S -O binary $@ $@.bin; \
+	${OBJCOPY} -S -O binary $@ $@.bin
+
+EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.bin@}
+
+.if defined(NEED_UBOOTIMAGE) && ${NEED_UBOOTIMAGE} != "no"
+_OSRELEASE!=		${HOST_SH} $S/conf/osrelease.sh
+MKUBOOTIMAGEARGS=       -A mips -T kernel -C none
+MKUBOOTIMAGEARGS+=      -a ${TEXTADDR:C/....$/0000/} -e $(TEXTADDR)
+MKUBOOTIMAGEARGS+=      -n "NetBSD/$(MACHINE) ${_OSRELEASE} ($(KERNEL_BUILD:T))"
+
+SYSTEM_LD_TAIL_EXTRA+=; \
+	echo ${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS} $@.bin $@.ub; \
+	${TOOL_MKUBOOTIMAGE} ${MKUBOOTIMAGEARGS} $@.bin $@.ub; \
+
+EXTRA_KERNELS+= ${KERNELS:@.KERNEL.@${.KERNEL.}.ub@}
+.endif
+.endif
+
Index: /trunk/src/sys/arch/evbmips/conf/RB153
===================================================================
--- /trunk/src/sys/arch/evbmips/conf/RB153	(revision 151)
+++ /trunk/src/sys/arch/evbmips/conf/RB153	(revision 152)
@@ -1,4 +1,4 @@
-#	$NetBSD: RB153,v 1.2.58.1 2010/01/29 00:16:58 matt Exp $
-#	$Id: RB153,v 1.2.58.1 2010/01/29 00:16:58 matt Exp $
+#	RB153,v 1.2.58.1 2010/01/29 00:16:58 matt Exp
+#	RB153,v 1.2.58.1 2010/01/29 00:16:58 matt Exp
 #
 # Example kernel config for the RouterBOARD 153.
@@ -6,5 +6,5 @@
 include 	"arch/evbmips/conf/std.adm5120"
 
-#ident 		"GENERIC-$Revision: 1.2.58.1 $"
+#ident 		"GENERIC-1.2.58.1"
 
 maxusers	32
@@ -36,5 +36,5 @@
 makeoptions 	DEBUG="-g"	# compile full symbol table
 makeoptions 	CPUFLAGS="-march=4kc"
-options 	SYMTAB_SPACE=380000	# size for embedded symbol table
+options 	SYMTAB_SPACE=410000	# size for embedded symbol table
 
 #options 	MEMORY_DISK_HOOKS
Index: /trunk/src/sys/arch/evbmips/conf/XLSATX
===================================================================
--- /trunk/src/sys/arch/evbmips/conf/XLSATX	(revision 151)
+++ /trunk/src/sys/arch/evbmips/conf/XLSATX	(revision 152)
@@ -1,7 +1,7 @@
-#	$NetBSD: XLSATX,v 1.1.2.9 2010/05/11 21:08:01 matt Exp $
+#	$NetBSD: XLSATX,v 1.1.2.14 2011/04/29 09:23:16 matt Exp $
 
 include 	"arch/evbmips/conf/std.rmixl"
 
-#ident 		"XLSATX-$Revision: 1.1.2.9 $"
+#ident 		"XLSATX-$Revision: 1.1.2.14 $"
 
 #options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
@@ -12,5 +12,5 @@
 # MEMSIZE can be used to limit memory amount used
 #
-##options		MEMSIZE=0x10000000		# 256MB 
+#options 	MEMSIZE=0x10000000		# 256MB
 
 #
@@ -18,5 +18,5 @@
 #
 defparam opt_memsize.h MEMLIMIT
-##options	MEMLIMIT=0x10000000			# 256MB 
+#options 	MEMLIMIT=0x10000000		# 256MB
 
 options 	NOFPU		# No FPU
@@ -36,4 +36,5 @@
 options 	DEBUG		# extra kernel debugging support
 #options 	KMEMSTATS	# kernel memory statistics (vmstat -m)
+options 	MSGBUFSIZE=65536 # kernel dmesg buffer
 options 	USERCONF	# userconf(4) support
 #options 	SYSCTL_INCLUDE_DESCR	# Include sysctl descriptions in kernel
@@ -42,6 +43,6 @@
 makeoptions 	DEBUG="-g"	# compile full symbol table
 options 	SYMTAB_SPACE=500000	# size for embedded symbol table
-#options	DDB_COMMANDONENTER="trace;show registers"
-options		DB_MAX_LINE=-1
+#options 	DDB_COMMANDONENTER="trace;show registers"
+options 	DB_MAX_LINE=-1
 
 # Compatibility options
@@ -67,5 +68,5 @@
 #file-system 	EXT2FS		# second extended file system (linux)
 file-system	NFS		# Sun NFS-compatible filesystem client
-#file-system	KERNFS		# kernel data-structure filesystem
+file-system	KERNFS		# kernel data-structure filesystem
 #file-system	NULLFS		# NULL layered filesystem
 #file-system 	OVERLAY		# overlay file system
@@ -73,6 +74,6 @@
 #file-system	UMAPFS		# uid/gid remapping filesystem
 #file-system	LFS		# Log-based filesystem (still experimental)
-#file-system	PORTAL		# portal filesystem (still experimental)
-#file-system	PROCFS		# /proc
+#file-system	PUFFS		# Userspace file systems (e.g. ntfs-3g & sshfs)
+file-system	PROCFS		# /proc
 #file-system	CD9660		# ISO 9660 + Rock Ridge file system
 file-system	TMPFS		# Efficient memory file system
@@ -80,5 +81,5 @@
 #file-system	MSDOSFS		# MS-DOS FAT filesystem(s).
 #file-system 	CODA		# Coda File System; also needs vcoda (below)
-#file-system	PTYFS		# /dev/pts/N support
+file-system	PTYFS		# /dev/pts/N support
 
 # File system options
@@ -135,16 +136,18 @@
 config	netbsd-wm0	root on wm0 type nfs
 config	netbsd-msk0	root on msk0 type nfs
+config	netbsd-sd0a	root on sd0a type ffs
 
 
 mainbus0 	at root
-cpunode*	at mainbus? node ?
-cpucore*	at cpunode? core ?
+cpunode* 	at mainbus? node ?
+cpucore* 	at cpunode? core ?
 cpu*		at cpucore? thread ?
 obio0		at cpunode?
-com0		at obio0	addr 0x14000 mult 4 intr 9
-options		COM_REGMAP
-rmixl_pcix0	at obio0
+com0		at obio0	addr 0x14000 intr 9
+com1		at obio0	addr 0x15000 intr 10
+options 	COM_REGMAP
+rmixl_pcix0 	at obio0
 pci*		at rmixl_pcix0
-rmixl_pcie0	at obio0
+rmixl_pcie0 	at obio0
 pci*		at rmixl_pcie0
 ppb*		at pci?
@@ -157,9 +160,9 @@
 makphy*		at mii? phy ?			# Marvell 88E1000 PHYs
 ukphy*		at mii? phy ?			# unknown PHY
-rmixl_usbi0	at obio0	addr 0x25000 intr 31
+rmixl_usbi0 	at obio0	addr 0x25000 intr 31
 ohci0		at rmixl_usbi0	addr 0x24400 size 0x400 intr 0
 ohci1		at rmixl_usbi0	addr 0x24800 size 0x400 intr 1
 ehci0		at rmixl_usbi0	addr 0x24000 size 0x400 intr 2
-siisata*	at pci? dev ? function ?
+siisata* 	at pci? dev ? function ?
 atabus*		at ata?
 wd*		at atabus? drive ? flags 0x0000
@@ -172,5 +175,5 @@
 umass*		at uhub? port ? configuration ? interface ?
 wd*		at umass?
-scsibus*	at umass? channel ?
+scsibus* 	at umass? channel ?
 sd*		at scsibus? target ? lun ?
 
@@ -201,4 +204,5 @@
 #pseudo-device	vlan				# IEEE 802.1q encapsulation
 #pseudo-device	bridge				# simple inter-network bridging
+pseudo-device	kttcp				# kernel ttcp
 
 # Miscellaneous pseudo-devices
Index: /trunk/src/sys/arch/evbmips/conf/XLSATX32
===================================================================
--- /trunk/src/sys/arch/evbmips/conf/XLSATX32	(revision 151)
+++ /trunk/src/sys/arch/evbmips/conf/XLSATX32	(revision 152)
@@ -1,8 +1,10 @@
-# $NetBSD: XLSATX32,v 1.1.2.1 2009/12/14 07:24:33 cliff Exp $
+# $NetBSD: XLSATX32,v 1.1.2.2 2011/04/29 09:27:12 matt Exp $
 #
+
+#ident  	"XLSATX32-$Revision: 1.1.2.2 $"
 
 include "arch/evbmips/conf/XLSATX"
 
-#ident 		"XLSATX32-$Revision: 1.1.2.1 $"
+options 	MEMLIMIT=0x20000000			# 512MB 
 
 makeoptions	LP64="no"
Index: /trunk/src/sys/arch/evbmips/conf/std.rmixl
===================================================================
--- /trunk/src/sys/arch/evbmips/conf/std.rmixl	(revision 151)
+++ /trunk/src/sys/arch/evbmips/conf/std.rmixl	(revision 152)
@@ -1,17 +1,18 @@
-# $NetBSD: std.rmixl,v 1.1.2.4 2010/03/29 23:31:16 cliff Exp $
+# std.rmixl,v 1.1.2.4 2010/03/29 23:31:16 cliff Exp
 
 machine evbmips mips
 include		"conf/std"	# MI standard options
 
-options MIPS3_ENABLE_CLOCK_INTR
+options 	MIPS3_ENABLE_CLOCK_INTR
 
 # Platform support
-options		MIPS64
+#options 	MIPS64
 options		MIPS64_XLR
 options		MIPS64_XLS
+options		MIPS64_RMIXL
 
 
-options	EXEC_ELF32	# exec ELF32 binaries
-options	EXEC_SCRIPT	# exec #! scripts
+options 	EXEC_ELF32	# exec ELF32 binaries
+options 	EXEC_SCRIPT	# exec #! scripts
 
 makeoptions	CPUFLAGS+="-mips64"
Index: /trunk/src/sys/arch/evbmips/malta/machdep.c
===================================================================
--- /trunk/src/sys/arch/evbmips/malta/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/evbmips/malta/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: machdep.c,v 1.28.10.8 2010/03/21 17:38:34 cliff Exp $	*/
+/*	$NetBSD: machdep.c,v 1.28.10.9 2011/04/29 08:26:18 matt Exp $	*/
 
 /*
@@ -113,5 +113,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.28.10.8 2010/03/21 17:38:34 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.28.10.9 2011/04/29 08:26:18 matt Exp $");
 
 #include "opt_ddb.h"
@@ -129,4 +129,5 @@
 #include <sys/termios.h>
 #include <sys/ksyms.h>
+#include <sys/lwp.h>
 
 #include <uvm/uvm_extern.h>
@@ -182,10 +183,4 @@
 void	configure(void);
 void	mach_init(int, char **, yamon_env_var *, u_long);
-
-/*
- * safepri is a safe priority for sleep to set for a spin-wait during
- * autoconfiguration or after a panic.  Used as an argument to splx().
- */
-int	safepri = MIPS1_PSL_LOWIPL;
 
 /*
@@ -229,5 +224,5 @@
 	 * Also clears the I+D caches.
 	 */
-	mips_vector_init(NULL);
+	mips_vector_init(NULL, false);
 
 	/* set the VM page size */
@@ -377,5 +372,5 @@
 
 	/* Take a snapshot before clobbering any registers. */
-	savectx(curlwp->l_addr);
+	savectx(lwp_getpcb(curlwp));
 
 	if (cold) {
Index: /trunk/src/sys/arch/evbmips/rmixl/autoconf.c
===================================================================
--- /trunk/src/sys/arch/evbmips/rmixl/autoconf.c	(revision 151)
+++ /trunk/src/sys/arch/evbmips/rmixl/autoconf.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: autoconf.c,v 1.1.2.2 2010/01/14 00:40:35 matt Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.1.2.4 2011/04/29 08:26:18 matt Exp $	*/
 
 /*
@@ -37,5 +37,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.1.2.2 2010/01/14 00:40:35 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.1.2.4 2011/04/29 08:26:18 matt Exp $");
 
 #include <sys/param.h>
@@ -84,15 +84,21 @@
 findroot(void)
 {
-	device_t dv;
-
 	if (booted_device)
 		return;
 
-	if ((booted_device == NULL) && netboot == 0)
-		for (dv = TAILQ_FIRST(&alldevs); dv != NULL;
-		     dv = TAILQ_NEXT(dv, dv_list))
-			if (device_class(dv) == DV_DISK &&
-			    device_is_a(dv, "wd"))
-				    booted_device = dv;
+	if ((booted_device == NULL) && netboot == 0) {
+		device_t dv;
+		deviter_t di;
+
+		for (dv = deviter_first(&di, DEVITER_F_ROOT_FIRST); dv != NULL;
+		    dv = deviter_next(&di)) {
+			if (device_class(dv) == DV_DISK
+			    && (device_is_a(dv, "wd")
+				|| device_is_a(dv, "sd")
+				|| device_is_a(dv, "ld")))
+				booted_device = dv;
+		}
+		deviter_release(&di);
+	}
 
 	/*
@@ -100,13 +106,10 @@
 	 */
 	booted_partition = 0;
-
-	return;
 }
 
 void
-device_register(dev, aux)
-	device_t dev;
-	void *aux;
+device_register(device_t dev, void *aux)
 {
+
 	if ((booted_device == NULL) && (netboot == 1))
 		if (device_class(dev) == DV_IFNET)
Index: /trunk/src/sys/arch/evbmips/rmixl/machdep.c
===================================================================
--- /trunk/src/sys/arch/evbmips/rmixl/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/evbmips/rmixl/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: machdep.c,v 1.1.2.29 2010/05/06 19:49:10 cliff Exp $	*/
+/*	machdep.c,v 1.1.2.34 2011/04/29 08:26:18 matt Exp	*/
 
 /*
@@ -37,4 +37,5 @@
 
 /*
+ * Copyright (c) 1988 University of Utah.
  * Copyright (c) 1992, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -72,49 +73,12 @@
  *	from: Utah Hdr: machdep.c 1.63 91/04/24
  */
-/*
- * Copyright (c) 1988 University of Utah.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department, The Mach Operating System project at
- * Carnegie-Mellon University and Ralph Campbell.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)machdep.c   8.3 (Berkeley) 1/12/94
- *	from: Utah Hdr: machdep.c 1.63 91/04/24
- */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.1.2.29 2010/05/06 19:49:10 cliff Exp $");
+__KERNEL_RCSID(0, "machdep.c,v 1.1.2.34 2011/04/29 08:26:18 matt Exp");
 
 #define __INTR_PRIVATE
-
+#define __MUTEX_PRIVATE
+
+#include "opt_multiprocessor.h"
 #include "opt_ddb.h"
 #include "opt_com.h"
@@ -129,5 +93,4 @@
 #include <sys/buf.h>
 #include <sys/reboot.h>
-#include <sys/user.h>
 #include <sys/mount.h>
 #include <sys/kcore.h>
@@ -147,10 +110,12 @@
 
 #if NKSYMS || defined(DDB) || defined(LKM)
-#include <machine/db_machdep.h>
+#include <mips/db_machdep.h>
 #include <ddb/db_extern.h>
 #endif
 
-#include <machine/cpu.h>
-#include <machine/psl.h>
+#include <mips/cpu.h>
+#include <mips/psl.h>
+#include <mips/cache.h>
+#include <mips/mips_opcode.h>
 
 #include "com.h"
@@ -213,4 +178,5 @@
 	{	0x4aacdb6a00000056ULL, PSB_TYPE_RMI  },
 	{	0x4b67d03200000056ULL, PSB_TYPE_RMI  },
+	{	0x4c17058b00000056ULL, PSB_TYPE_RMI  },
 	{	0x49a5a8fa00000056ULL, PSB_TYPE_DELL },
 	{	0x4b8ead3100000056ULL, PSB_TYPE_DELL },
@@ -267,11 +233,5 @@
 #endif	/* MACHDEP_DEBUG */
 #endif	/* MULTIPROCESSOR */
-
-
-/*
- * safepri is a safe priority for sleep to set for a spin-wait during
- * autoconfiguration or after a panic.  Used as an argument to splx().
- */
-int	safepri = MIPS1_PSL_LOWIPL;
+static void rmixl_fixup_curcpu(void);
 
 /*
@@ -284,17 +244,7 @@
 	void *kernend;
 	uint64_t memsize;
-	uint32_t r;
 	extern char edata[], end[];
 
-#ifndef MULTIPROCESSOR
-	rmixl_mtcr(0, 1);		/* disable all threads except #0 */
-	rmixl_mtcr(0x400, 0);		/* enable MMU clock gating */
-					/* set single MMU Thread Mode */
-					/* TLB is partitioned (1 partition) */
-#endif
-
-	r = rmixl_mfcr(0x300);
-	r &= ~__BIT(14);		/* disabled Unaligned Access */
-	rmixl_mtcr(0x300, r);
+	rmixl_pcr_init_core();
 
 	/*
@@ -313,5 +263,9 @@
 	 * specify chip-specific EIRR/EIMR based spl functions
 	 */
-	mips_vector_init(&rmixl_splsw);
+#ifdef MULTIPROCESSOR
+	mips_vector_init(&rmixl_splsw, true);
+#else
+	mips_vector_init(&rmixl_splsw, false);
+#endif
 
 	/* mips_vector_init initialized mips_options */
@@ -449,5 +403,5 @@
 
 	/*
-	 * Allocate space for proc0's USPACE.
+	 * Allocate uarea page for lwp0 and set it.
 	 */
 	mips_init_lwp0_uarea();
@@ -464,5 +418,4 @@
 		Debugger();
 #endif
-#ifdef MULTIPROCESSOR
 	/*
 	 * store (cpu#0) curcpu in COP0 OSSCRATCH0
@@ -471,5 +424,46 @@
 	__asm __volatile("dmtc0 %0,$%1"
 		:: "r"(&cpu_info_store), "n"(MIPS_COP_0_OSSCRATCH));
+#ifdef MULTIPROCESSOR
+	__asm __volatile("dmtc0 %0,$%1,2"
+		:: "r"(&pmap_tlb0_info.ti_lock->mtx_lock),
+		    "n"(MIPS_COP_0_OSSCRATCH));
 	mips_fixup_exceptions(rmixl_fixup_cop0_oscratch);
+#endif
+	rmixl_fixup_curcpu();
+}
+
+/*
+ * set up Processor Control Regs for this core
+ */
+void
+rmixl_pcr_init_core()
+{
+	uint32_t r;
+
+#ifdef MULTIPROCESSOR
+	rmixl_mtcr(RMIXL_PCR_MMU_SETUP, __BITS(2,0));
+						/* enable MMU clock gating */
+						/* 4 threads active -- why needed if Global? */
+						/* enable global TLB mode */
+#else
+	rmixl_mtcr(RMIXL_PCR_THREADEN, 1);	/* disable all threads except #0 */
+	rmixl_mtcr(RMIXL_PCR_MMU_SETUP, 0);	/* enable MMU clock gating */
+						/* set single MMU Thread Mode */
+						/* TLB is partitioned (1 partition) */
+#endif
+
+	r = rmixl_mfcr(RMIXL_PCR_L1D_CONFIG0);
+	r &= ~__BIT(14);			/* disable Unaligned Access */
+	rmixl_mtcr(RMIXL_PCR_L1D_CONFIG0, r);
+
+#if defined(DDB) && defined(MIPS_DDB_WATCH)
+	/*
+	 * clear IEU_DEFEATURE[DBE]
+	 * this enables COP0 watchpoint to trigger T_WATCH exception
+	 * instead of signaling JTAG.
+	 */
+	r = rmixl_mfcr(RMIXL_PCR_IEU_DEFEATURE);
+	r &= ~__BIT(7);
+	rmixl_mtcr(RMIXL_PCR_IEU_DEFEATURE, r);
 #endif
 }
@@ -498,5 +492,5 @@
 	    | (MIPS_COP_0_OSSCRATCH << 11) | (0 << 0);
 
-	/* [1] = l[dw] rX, offset(rX) */
+	/* [1] = [ls][dw] rX, offset(rX) */
 	new_insns[1] = (new_insns[1] & 0xffff0000) | offset;
 
@@ -504,4 +498,41 @@
 }
 #endif /* MULTIPROCESSOR */
+
+/*
+ * The following changes all	lX	rN, L_CPU(MIPS_CURLWP) [curlwp->l_cpu]
+ * to			     	[d]mfc0	rN, $22 [MIPS_COP_0_OSSCRATCH]
+ *
+ * the mfc0 is 3 cycles shorter than the load.
+ */
+#define	LOAD_CURCPU_0	((MIPS_CURLWP_REG << 21) | offsetof(lwp_t, l_cpu))
+#define	MFC0_CURCPU_0	((OP_COP0 << 26) | (MIPS_COP_0_OSSCRATCH << 11))
+#ifdef _LP64
+#define	LOAD_CURCPU	((uint32_t)(OP_LD << 26) | LOAD_CURCPU_0)
+#define	MFC0_CURCPU	((uint32_t)(OP_DMF << 21) | MFC0_CURCPU_0)
+#else
+#define	LOAD_CURCPU	((uint32_t)(OP_LW << 26) | LOAD_CURCPU_0)
+#define	MFC0_CURCPU	((uint32_t)(OP_MF << 21) | MFC0_CURCPU_0)
+#endif
+#define	LOAD_CURCPU_MASK	0xffe0ffff
+
+static void
+rmixl_fixup_curcpu(void)
+{
+	extern uint32_t _ftext[];
+	extern uint32_t _etext[];
+
+	for (uint32_t *insnp = _ftext; insnp < _etext; insnp++) {
+		const uint32_t insn = *insnp;
+		if (__predict_false((insn & LOAD_CURCPU_MASK) == LOAD_CURCPU)) {
+			/*
+			 * Since the register to loaded is located in bits
+			 * 16-20 for the mfc0 and the load instruction we can
+			 * just change the instruction bits around it.
+			 */
+			*insnp = insn ^ LOAD_CURCPU ^ MFC0_CURCPU;
+			mips_icache_sync_range((vaddr_t)insnp, 4);
+		}
+	}
+}
 
 /*
@@ -1003,11 +1034,9 @@
 
 void
-cpu_reboot(howto, bootstr)
-	int howto;
-	char *bootstr;
+cpu_reboot(int howto, char *bootstr)
 {
 
 	/* Take a snapshot before clobbering any registers. */
-	savectx(curlwp->l_addr);
+	savectx(lwp_getpcb(curlwp));
 
 	if (cold) {
Index: /trunk/src/sys/arch/ews4800mips/ews4800mips/autoconf.c
===================================================================
--- /trunk/src/sys/arch/ews4800mips/ews4800mips/autoconf.c	(revision 151)
+++ /trunk/src/sys/arch/ews4800mips/ews4800mips/autoconf.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: autoconf.c,v 1.7 2008/04/28 20:23:18 martin Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.7.18.1 2010/12/29 08:16:21 matt Exp $	*/
 
 /*-
@@ -28,5 +28,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.7 2008/04/28 20:23:18 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.7.18.1 2010/12/29 08:16:21 matt Exp $");
 
 #include "opt_sbd.h"
@@ -36,4 +36,5 @@
 #include <sys/conf.h>
 #include <sys/device.h>
+#include <sys/intr.h>
 
 #include <machine/sbdvar.h>
@@ -51,5 +52,5 @@
 	if (config_rootfound("mainbus", NULL) == NULL)
 		panic("no mainbus found");
-	_splnone();
+	spl0();
 }
 
Index: /trunk/src/sys/arch/ews4800mips/ews4800mips/interrupt.c
===================================================================
--- /trunk/src/sys/arch/ews4800mips/ews4800mips/interrupt.c	(revision 151)
+++ /trunk/src/sys/arch/ews4800mips/ews4800mips/interrupt.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: interrupt.c,v 1.4.18.1 2010/02/05 07:39:53 matt Exp $	*/
+/*	$NetBSD: interrupt.c,v 1.4.18.2 2010/12/29 08:16:21 matt Exp $	*/
 
 /*-
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.4.18.1 2010/02/05 07:39:53 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.4.18.2 2010/12/29 08:16:21 matt Exp $");
 
 #include <sys/param.h>
@@ -40,6 +40,5 @@
 #include <machine/sbdvar.h>
 
-const uint32_t *ipl_sr_bits;
-static void (*platform_intr)(uint32_t, uint32_t, uint32_t, uint32_t);
+static void (*platform_intr)(int, vaddr_t, uint32_t);
 
 void
@@ -66,20 +65,8 @@
 
 void
-cpu_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+cpu_intr(int ppl, vaddr_t pc, uint32_t status)
 {
-	struct cpu_info *ci;
-
-	ci = curcpu();
 	uvmexp.intrs++;
 
-	ci->ci_idepth++;
-	(*platform_intr)(status, cause, pc, ipending);
-	ci->ci_idepth--;
-
-#ifdef __HAVE_FAST_SOFTINTS
-	ipending &= MIPS_SOFT_INT_MASK;
-	if (ipending == 0)
-		return;
-	softint_process(ipending);
-#endif
+	(*platform_intr)(ppl, pc, status);
 }
Index: /trunk/src/sys/arch/ews4800mips/ews4800mips/mainbus.c
===================================================================
--- /trunk/src/sys/arch/ews4800mips/ews4800mips/mainbus.c	(revision 151)
+++ /trunk/src/sys/arch/ews4800mips/ews4800mips/mainbus.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mainbus.c,v 1.4 2008/04/28 20:23:18 martin Exp $	*/
+/*	$NetBSD: mainbus.c,v 1.4.18.1 2010/12/29 08:16:21 matt Exp $	*/
 
 /*-
@@ -28,5 +28,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.4 2008/04/28 20:23:18 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.4.18.1 2010/12/29 08:16:21 matt Exp $");
 
 #include <sys/param.h>
@@ -60,5 +60,5 @@
 {
 	struct mainbus_attach_args ma;
-	const char **p;
+	const char * const *p;
 
 	mainbus_found = 1;
Index: /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2.c
===================================================================
--- /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2.c	(revision 151)
+++ /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: tr2.c,v 1.3.18.1 2010/01/20 09:04:33 matt Exp $	*/
+/*	$NetBSD: tr2.c,v 1.3.18.2 2010/12/29 08:16:21 matt Exp $	*/
 
 /*-
@@ -31,6 +31,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tr2.c,v 1.3.18.1 2010/01/20 09:04:33 matt Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: tr2.c,v 1.3.18.2 2010/12/29 08:16:21 matt Exp $");
+
+#define __INTR_PRIVATE
 #include "fb_sbdio.h"
 #include "kbms_sbdio.h"
@@ -60,5 +61,5 @@
 
 /* EWS4800/350 mainbus device list */
-static const char *tr2_mainbusdevs[] =
+static const char * const tr2_mainbusdevs[] =
 {
 	"sbdio",
@@ -103,5 +104,5 @@
 	platform.sbdiodevs = tr2_sbdiodevs;
 
-	ipl_sr_bits = tr2_sr_bits;
+	ipl_sr_map = tr2_ipl_sr_map;
 
 	kseg2iobufsize = 0x02000000;	/* 32MB for VME and framebuffer */
Index: /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2_intr.c
===================================================================
--- /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2_intr.c	(revision 151)
+++ /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2_intr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: tr2_intr.c,v 1.10 2008/04/28 20:23:18 martin Exp $	*/
+/*	$NetBSD: tr2_intr.c,v 1.10.18.1 2010/12/29 08:16:21 matt Exp $	*/
 
 /*-
@@ -31,10 +31,13 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tr2_intr.c,v 1.10 2008/04/28 20:23:18 martin Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: tr2_intr.c,v 1.10.18.1 2010/12/29 08:16:21 matt Exp $");
+
+#define	__INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/device.h>
+#include <sys/evcnt.h>
+#include <sys/cpu.h>
+#include <sys/lwp.h>
 #include <sys/intr.h>
 
@@ -48,21 +51,22 @@
 SBD_DECL(tr2);
 
-const uint32_t tr2_sr_bits[_IPL_N] = {
-	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0,
-	[IPL_SOFTNET] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1,
-	[IPL_VM] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_2 |
-	    MIPS_INT_MASK_4,
-	[IPL_SCHED] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_2 |
-	    MIPS_INT_MASK_4 |
-	    MIPS_INT_MASK_5,
+const struct ipl_sr_map tr2_ipl_sr_map = {
+    {
+	[IPL_NONE] =		0,
+	[IPL_SOFTCLOCK] =	MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] =		MIPS_SOFT_INT_MASK,
+	[IPL_VM] =		MIPS_SOFT_INT_MASK
+				| MIPS_INT_MASK_0
+				| MIPS_INT_MASK_2
+				| MIPS_INT_MASK_4,
+	[IPL_SCHED] =		MIPS_SOFT_INT_MASK
+				| MIPS_INT_MASK_0
+				| MIPS_INT_MASK_2
+				| MIPS_INT_MASK_4
+				| MIPS_INT_MASK_5,
+	[IPL_DDB] =		MIPS_INT_MASK,
+	[IPL_HIGH] =		MIPS_INT_MASK,
 	/* !!! TEST !!! VME INTERRUPT IS NOT MASKED */
+    },
 };
 
@@ -140,119 +144,114 @@
 
 void
-tr2_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+tr2_intr(int ppl, vaddr_t pc, uint32_t status)
 {
 	struct tr2_intr_handler *ih;
 	struct clockframe cf;
-	uint32_t r, handled;
-
-	handled = 0;
-
-	if (ipending & MIPS_INT_MASK_5) {	/* CLOCK */
-		cf.pc = pc;
-		cf.sr = status;
-
-		*PICNIC_INT5_STATUS_REG = 0;
-		r = *PICNIC_INT5_STATUS_REG;
-
-		hardclock(&cf);
-		timer_tr2_ev.ev_count++;
-		handled |= MIPS_INT_MASK_5;
+	uint32_t r, ipending;
+	int ipl;
+
+	while (ppl < (ipl = splintr(&ipending))) {
+		if (ipending & MIPS_INT_MASK_5) {	/* CLOCK */
+			cf.pc = pc;
+			cf.sr = status;
+			cf.intr = (curcpu()->ci_idepth > 0);
+
+			*PICNIC_INT5_STATUS_REG = 0;
+			r = *PICNIC_INT5_STATUS_REG;
+
+			hardclock(&cf);
+			timer_tr2_ev.ev_count++;
+		}
+
+		if (ipending & MIPS_INT_MASK_4) {	/* KBD, MOUSE, SERIAL */
+			r = *PICNIC_INT4_STATUS_REG;
+
+			if (r & PICNIC_INT_KBMS) {
+				ih = &tr2_intr_handler[0];
+				if (ih->func) {
+					ih->func(ih->arg);
+					ih->evcnt.ev_count++;
+				}
+				r &= ~PICNIC_INT_KBMS;
+			}
+
+			if (r & PICNIC_INT_SERIAL) {
+#if 0
+				printf("SIO interrupt\n");
+#endif
+				ih = &tr2_intr_handler[2];
+				if (ih->func) {
+					ih->func(ih->arg);
+					ih->evcnt.ev_count++;
+				}
+				r &= ~PICNIC_INT_SERIAL;
+			}
+		}
+
+		if (ipending & MIPS_INT_MASK_3) {	/* VME */
+			printf("VME interrupt\n");
+
+			r = *(volatile uint32_t *)0xbfb00018; /* NABI? */
+			if ((r & 0x10) != 0) {
+				/* vme high interrupt */
+			} else if ((r & 0x4) != 0) {
+				/* vme lo interrupt */
+			} else {
+				/* error */
+			}
+		}
+
+		if (ipending & MIPS_INT_MASK_2) {	/* ETHER, SCSI */
+			r = *PICNIC_INT2_STATUS_REG;
+
+			if (r & PICNIC_INT_ETHER) {
+				ih = &tr2_intr_handler[6];
+				if (ih->func) {
+					ih->func(ih->arg);
+					ih->evcnt.ev_count++;
+				}
+				r &= ~PICNIC_INT_ETHER;
+			}
+
+			if (r & PICNIC_INT_SCSI) {
+				ih = &tr2_intr_handler[5];
+				if (ih->func) {
+					ih->func(ih->arg);
+					ih->evcnt.ev_count++;
+				}
+				r &= ~PICNIC_INT_SCSI;
+			}
+
+			if ((r & PICNIC_INT_FDDLPT) &&
+			    (ipending & MIPS_INT_MASK_5)) {
+#ifdef DEBUG
+				printf("FDD LPT interrupt\n");
+#endif
+				ih = &tr2_intr_handler[7];
+				if (ih->func) {
+					ih->func(ih->arg);
+					ih->evcnt.ev_count++;
+				}
+				r &= ~PICNIC_INT_FDDLPT;
+			}
+		}
+
+		if (ipending & MIPS_INT_MASK_1)
+			panic("unknown interrupt INT1\n");
+
+		if (ipending & MIPS_INT_MASK_0) {	/* FDD, PRINTER */
+#ifdef DEBUG
+			printf("printer, printer interrupt\n");
+#endif
+			r = *PICNIC_INT0_STATUS_REG;
+			if (r & PICNIC_INT_FDDLPT) {
+#ifdef DEBUG
+				printf("FDD, Printer interrupt.\n");
+#endif
+			} else {
+				printf("unknown interrupt INT0\n");
+			}
+		}
 	}
-	_splset((status & handled) | MIPS_SR_INT_IE);
-
-	if (ipending & MIPS_INT_MASK_4) {	/* KBD, MOUSE, SERIAL */
-		r = *PICNIC_INT4_STATUS_REG;
-
-		if (r & PICNIC_INT_KBMS) {
-			ih = &tr2_intr_handler[0];
-			if (ih->func) {
-				ih->func(ih->arg);
-				ih->evcnt.ev_count++;
-			}
-			r &= ~PICNIC_INT_KBMS;
-		}
-
-		if (r & PICNIC_INT_SERIAL) {
-#if 0
-			printf("SIO interrupt\n");
-#endif
-			ih = &tr2_intr_handler[2];
-			if (ih->func) {
-				ih->func(ih->arg);
-				ih->evcnt.ev_count++;
-			}
-			r &= ~PICNIC_INT_SERIAL;
-		}
-
-		handled |= MIPS_INT_MASK_4;
-	}
-	_splset((status & handled) | MIPS_SR_INT_IE);
-
-	if (ipending & MIPS_INT_MASK_3) {	/* VME */
-		printf("VME interrupt\n");
-
-		r = *(volatile uint32_t *)0xbfb00018; /* NABI? */
-		if ((r & 0x10) != 0) {
-			/* vme high interrupt */
-		} else if ((r & 0x4) != 0) {
-			/* vme lo interrupt */
-		} else {
-			/* error */
-		}
-	}
-
-	if (ipending & MIPS_INT_MASK_2) {	/* ETHER, SCSI */
-		r = *PICNIC_INT2_STATUS_REG;
-
-		if (r & PICNIC_INT_ETHER) {
-			ih = &tr2_intr_handler[6];
-			if (ih->func) {
-				ih->func(ih->arg);
-				ih->evcnt.ev_count++;
-			}
-			r &= ~PICNIC_INT_ETHER;
-		}
-
-		if (r & PICNIC_INT_SCSI) {
-			ih = &tr2_intr_handler[5];
-			if (ih->func) {
-				ih->func(ih->arg);
-				ih->evcnt.ev_count++;
-			}
-			r &= ~PICNIC_INT_SCSI;
-		}
-
-		if ((r & PICNIC_INT_FDDLPT) &&
-		    ((cause & status) & MIPS_INT_MASK_5)) {
-#ifdef DEBUG
-			printf("FDD LPT interrupt\n");
-#endif
-			ih = &tr2_intr_handler[7];
-			if (ih->func) {
-				ih->func(ih->arg);
-				ih->evcnt.ev_count++;
-			}
-			r &= ~PICNIC_INT_FDDLPT;
-		}
-
-		handled |= MIPS_INT_MASK_2;
-	}
-	_splset((status & handled) | MIPS_SR_INT_IE);
-
-	if (ipending & MIPS_INT_MASK_1)
-		panic("unknown interrupt INT1\n");
-
-	if (ipending & MIPS_INT_MASK_0) {	/* FDD, PRINTER */
-		printf("printer, printer interrupt\n");
-		r = *PICNIC_INT0_STATUS_REG;
-		if (r & PICNIC_INT_FDDLPT) {
-			printf("FDD, Printer interrupt.\n");
-		} else {
-			printf("unknown interrupt INT0\n");
-		}
-		handled |= MIPS_INT_MASK_0;
-	}
-	cause &= ~handled;
-	_splset(((status & ~cause) & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
 }
 
Index: /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2a.c
===================================================================
--- /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2a.c	(revision 151)
+++ /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2a.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: tr2a.c,v 1.3.18.1 2010/01/20 09:04:33 matt Exp $	*/
+/*	$NetBSD: tr2a.c,v 1.3.18.2 2010/12/29 08:16:21 matt Exp $	*/
 
 /*-
@@ -31,6 +31,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tr2a.c,v 1.3.18.1 2010/01/20 09:04:33 matt Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: tr2a.c,v 1.3.18.2 2010/12/29 08:16:21 matt Exp $");
+
+#define __INTR_PRIVATE
 #include "fb_sbdio.h"
 #include "kbms_sbdio.h"
@@ -60,5 +61,5 @@
 
 /* EWS4800/360 bus list */
-static const char *tr2a_mainbusdevs[] = {
+static const char * const tr2a_mainbusdevs[] = {
 	"sbdio",
 #ifdef notyet
@@ -152,5 +153,5 @@
 		platform.sbdiodevs = tr2a_sbdiodevs;
 
-	ipl_sr_bits = tr2a_sr_bits;
+	ipl_sr_map = tr2a_ipl_sr_map;
 
 	kseg2iobufsize = 0x02000000;	/* 32MB for APbus and framebuffer */
Index: /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2a_intr.c
===================================================================
--- /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2a_intr.c	(revision 151)
+++ /trunk/src/sys/arch/ews4800mips/ews4800mips/tr2a_intr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: tr2a_intr.c,v 1.12 2008/04/28 20:23:18 martin Exp $	*/
+/*	$NetBSD: tr2a_intr.c,v 1.12.18.1 2010/12/29 08:16:21 matt Exp $	*/
 
 /*-
@@ -31,10 +31,13 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tr2a_intr.c,v 1.12 2008/04/28 20:23:18 martin Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: tr2a_intr.c,v 1.12.18.1 2010/12/29 08:16:21 matt Exp $");
+
+#define __INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
 #include <sys/evcnt.h>
+#include <sys/lwp.h>
+#include <sys/cpu.h>
 #include <sys/intr.h>
 
@@ -46,25 +49,14 @@
 SBD_DECL(tr2a);
 
-const uint32_t tr2a_sr_bits[_IPL_N] = {
+const struct ipl_sr_map tr2a_ipl_sr_map = {
+    .sr_bits = {
 	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] =
-	    MIPS_SOFT_INT_MASK_0,
-	[IPL_SOFTNET] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1,
-	[IPL_VM] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_1 |
-	    MIPS_INT_MASK_2 |
-	    MIPS_INT_MASK_3 |
-	    MIPS_INT_MASK_4,
-	[IPL_SCHED] =
-	    MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1 |
-	    MIPS_INT_MASK_0 |
-	    MIPS_INT_MASK_1 |
-	    MIPS_INT_MASK_2 |
-	    MIPS_INT_MASK_3 |
-	    MIPS_INT_MASK_4 |
-	    MIPS_INT_MASK_5,
+	[IPL_SOFTCLOCK] =	MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] =		MIPS_SOFT_INT_MASK,
+	[IPL_VM] =		MIPS_INT_MASK & ~MIPS_INT_MASK_5,
+	[IPL_SCHED] =		MIPS_INT_MASK,
+	[IPL_DDB] =		MIPS_INT_MASK,
+	[IPL_HIGH] =		MIPS_INT_MASK,
+    },
 };
 
@@ -179,132 +171,122 @@
 
 void
-tr2a_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+tr2a_intr(int ppl, vaddr_t pc, uint32_t status)
 {
 	struct tr2a_intr_handler *ih;
 	struct clockframe cf;
-	uint32_t r, intc_cause, handled;
-
-	handled = 0;
+	uint32_t r, intc_cause, ipending;
+	int ipl;
+
 	intc_cause = *INTC_STATUS_REG & *INTC_MASK_REG;
 
-	if ((ipending & MIPS_INT_MASK_5) && (intc_cause & INTC_INT5)) {
-		cf.pc = pc;
-		cf.sr = status;
-		tr2a_wbflush();
-		*INTC_CLEAR_REG = 0x7c;
-		*INTC_STATUS_REG;
-
-		hardclock(&cf);
-		timer_tr2a_ev.ev_count++;
-		handled |= MIPS_INT_MASK_5;
+	while (ppl < (ipl = splintr(&ipending))) {
+		if ((ipending & MIPS_INT_MASK_5) && (intc_cause & INTC_INT5)) {
+			cf.pc = pc;
+			cf.sr = status;
+			cf.intr = (curcpu()->ci_idepth > 0);
+			tr2a_wbflush();
+			*INTC_CLEAR_REG = 0x7c;
+			*INTC_STATUS_REG;
+
+			hardclock(&cf);
+			timer_tr2a_ev.ev_count++;
+		}
+
+		if ((ipending & MIPS_INT_MASK_4) && (intc_cause & INTC_INT4)) {
+			/* KBD, MOUSE, SERIAL */
+			r = *ASO_INT_STATUS_REG;
+			if (r & 0x300010) {
+				ih = &tr2a_intr_handler[4];
+				if (ih->func) {
+					ih->func(ih->arg);
+					ih->evcnt.ev_count++;
+				}
+			} else if (r & 0x40) {
+				/* kbms */
+				ih = &tr2a_intr_handler[9];
+				if (ih->func) {
+					ih->func(ih->arg);
+					ih->evcnt.ev_count++;
+				}
+			} else if (r & 0x20) {
+				printf("INT4 (1)\n");
+			} else if (r & 0x00800000) {
+				printf("INT4 (2)\n");
+			} else if (r & 0x00400000) {
+				printf("INT4 (3)\n");
+			} else if (r != 0) {
+				printf("not for INT4 %x\n", r);
+			}
+
+			tr2a_wbflush();
+			*INTC_CLEAR_REG = 0x68;
+			*INTC_STATUS_REG;
+		}
+
+		if ((ipending & MIPS_INT_MASK_3) && (intc_cause & INTC_INT3)) {
+			/* APbus HI */
+			printf("APbus HI\n");
+			tr2a_wbflush();
+			*INTC_CLEAR_REG = 0x54;
+			*INTC_STATUS_REG;
+		}
+
+		if ((ipending & MIPS_INT_MASK_2) && (intc_cause & INTC_INT2)) {
+			/* SCSI, ETHER */
+			r = *ASO_INT_STATUS_REG;
+			if (r & 0x100) {	/* SCSI-A */
+				ih = &tr2a_intr_handler[6];
+				if (ih->func) {
+					ih->func(ih->arg);
+					ih->evcnt.ev_count++;
+				}
+			} else if (r & 0x200) {	/* SCSI-B */
+				ih = &tr2a_intr_handler[10];
+				if (ih->func) {
+					ih->func(ih->arg);
+					ih->evcnt.ev_count++;
+				}
+			} else if (r & 0x1) {	/* LANCE */
+				ih = &tr2a_intr_handler[0];
+				if (ih->func) {
+					ih->func(ih->arg);
+					ih->evcnt.ev_count++;
+				}
+			} else if (r != 0) {
+				printf("not for INT2 %x %x\n", r,
+				    *ASO_DMAINT_STATUS_REG);
+			}
+
+			tr2a_wbflush();
+			*INTC_CLEAR_REG = 0x40;
+			*INTC_STATUS_REG;
+		}
+
+		if ((ipending & MIPS_INT_MASK_1) && (intc_cause & INTC_INT1)) {
+			/* APbus LO */
+			printf("APbus LO\n");
+			tr2a_wbflush();
+			*INTC_CLEAR_REG = 0x2c;
+			*INTC_STATUS_REG;
+		}
+
+		if ((ipending & MIPS_INT_MASK_0) && (intc_cause & INTC_INT0)) {
+			/* NMI etc. */
+			r = *ASO_INT_STATUS_REG;
+			printf("INT0 %08x\n", r);
+			if (r & 0x8000) {
+				printf("INT0(1) NMI\n");
+			} else if (r & 0x8) {
+				printf("INT0(2)\n");
+			} else if (r & 0x4) {
+				printf("INT0(3)\n");
+			} else if (r != 0) {
+				printf("not for INT0 %x\n", r);
+			}
+			tr2a_wbflush();
+			*INTC_CLEAR_REG = 0x14;
+			*INTC_STATUS_REG;
+		}
 	}
-	_splset((status & handled) | MIPS_SR_INT_IE);
-
-
-	if ((ipending & MIPS_INT_MASK_4) && (intc_cause & INTC_INT4)) {
-		/* KBD, MOUSE, SERIAL */
-		r = *ASO_INT_STATUS_REG;
-		if (r & 0x300010) {
-			ih = &tr2a_intr_handler[4];
-			if (ih->func) {
-				ih->func(ih->arg);
-				ih->evcnt.ev_count++;
-			}
-		} else if (r & 0x40) {
-			/* kbms */
-			ih = &tr2a_intr_handler[9];
-			if (ih->func) {
-				ih->func(ih->arg);
-				ih->evcnt.ev_count++;
-			}
-		} else if (r & 0x20) {
-			printf("INT4 (1)\n");
-		} else if (r & 0x00800000) {
-			printf("INT4 (2)\n");
-		} else if (r & 0x00400000) {
-			printf("INT4 (3)\n");
-		} else if (r != 0) {
-			printf("not for INT4 %x\n", r);
-		}
-
-		tr2a_wbflush();
-		*INTC_CLEAR_REG = 0x68;
-		*INTC_STATUS_REG;
-
-		handled |= MIPS_INT_MASK_4;
-	}
-	_splset((status & handled) | MIPS_SR_INT_IE);
-
-	if ((ipending & MIPS_INT_MASK_3) && (intc_cause & INTC_INT3)) {
-		/* APbus HI */
-		printf("APbus HI\n");
-		tr2a_wbflush();
-		*INTC_CLEAR_REG = 0x54;
-		*INTC_STATUS_REG;
-		handled |= MIPS_INT_MASK_3;
-	}
-
-	if ((ipending & MIPS_INT_MASK_2) && (intc_cause & INTC_INT2)) {
-		/* SCSI, ETHER */
-		r = *ASO_INT_STATUS_REG;
-		if (r & 0x100) {	/* SCSI-A */
-			ih = &tr2a_intr_handler[6];
-			if (ih->func) {
-				ih->func(ih->arg);
-				ih->evcnt.ev_count++;
-			}
-		} else if (r & 0x200) {	/* SCSI-B */
-			ih = &tr2a_intr_handler[10];
-			if (ih->func) {
-				ih->func(ih->arg);
-				ih->evcnt.ev_count++;
-			}
-		} else if (r & 0x1) {	/* LANCE */
-			ih = &tr2a_intr_handler[0];
-			if (ih->func) {
-				ih->func(ih->arg);
-				ih->evcnt.ev_count++;
-			}
-		} else if (r != 0) {
-			printf("not for INT2 %x %x\n", r,
-			    *ASO_DMAINT_STATUS_REG);
-		}
-
-		tr2a_wbflush();
-		*INTC_CLEAR_REG = 0x40;
-		*INTC_STATUS_REG;
-		handled |= MIPS_INT_MASK_2;
-	}
-	_splset((status & handled) | MIPS_SR_INT_IE);
-
-	if ((ipending & MIPS_INT_MASK_1) && (intc_cause & INTC_INT1)) {
-		/* APbus LO */
-		printf("APbus LO\n");
-		tr2a_wbflush();
-		*INTC_CLEAR_REG = 0x2c;
-		*INTC_STATUS_REG;
-		handled |= MIPS_INT_MASK_1;
-	}
-
-	if ((ipending & MIPS_INT_MASK_0) && (intc_cause & INTC_INT0)) {
-		/* NMI etc. */
-		r = *ASO_INT_STATUS_REG;
-		printf("INT0 %08x\n", r);
-		if (r & 0x8000) {
-			printf("INT0(1) NMI\n");
-		} else if (r & 0x8) {
-			printf("INT0(2)\n");
-		} else if (r & 0x4) {
-			printf("INT0(3)\n");
-		} else if (r != 0) {
-			printf("not for INT0 %x\n", r);
-		}
-		tr2a_wbflush();
-		*INTC_CLEAR_REG = 0x14;
-		*INTC_STATUS_REG;
-		handled |= MIPS_INT_MASK_0;
-	}
-	cause &= ~handled;
-	_splset(((status & ~cause) & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
 }
 
Index: /trunk/src/sys/arch/ews4800mips/include/intr.h
===================================================================
--- /trunk/src/sys/arch/ews4800mips/include/intr.h	(revision 151)
+++ /trunk/src/sys/arch/ews4800mips/include/intr.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: intr.h,v 1.10 2008/04/28 20:23:18 martin Exp $	*/
+/*	$NetBSD: intr.h,v 1.10.18.1 2010/12/29 08:16:22 matt Exp $	*/
 
 /*-
@@ -33,58 +33,17 @@
 #define	_EWS4800MIPS_INTR_H_
 
-#define IPL_NONE	0	/* disable only this interrupt */
-#define IPL_SOFTCLOCK	1	/* clock software interrupts (SI 0) */
-#define IPL_SOFTBIO	1	/* bio software interrupts (SI 0) */
-#define IPL_SOFTNET	2	/* network software interrupts (SI 1) */
-#define IPL_SOFTSERIAL	2	/* serial software interrupts (SI 1) */
-#define	IPL_VM		3
-#define IPL_SCHED	4	/* disable clock interrupts */
-#define IPL_HIGH	4	/* disable all interrupts */
+#include <mips/intr.h>
 
-#define _IPL_N		5
-
-#define _IPL_SI0_FIRST	IPL_SOFTCLOCK
-#define _IPL_SI0_LAST	IPL_SOFTBIO
-
-#define _IPL_SI1_FIRST	IPL_SOFTNET
-#define _IPL_SI1_LAST	IPL_SOFTSERIAL
-
-#define IST_UNUSABLE	-1	/* interrupt cannot be used */
-#define IST_NONE	0	/* none (dummy) */
-#define IST_PULSE	1	/* pulsed */
-#define IST_EDGE	2	/* edge-triggered */
-#define IST_LEVEL	3	/* level-triggered */
-
-#include <mips/locore.h>
-
-extern const uint32_t *ipl_sr_bits;
-
-#define spl0()		(void) _spllower(0)
-#define splx(s)		(void) _splset(s)
-
-typedef int ipl_t;
-typedef struct {
-	ipl_t _sr;
-} ipl_cookie_t;
-
-static inline ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
-	return (ipl_cookie_t){._sr = ipl_sr_bits[ipl]};
-}
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
-	return _splraise(icookie._sr);
-}
-
-#include <sys/spl.h>
-
+#ifdef _KERNEL
 void intr_init(void);
 void intr_establish(int, int (*)(void *), void *);
 void intr_disestablish(void *);
 
+#ifdef __INTR_PRIVATE
+extern const struct ipl_sr_map tr2_ipl_sr_map;
+extern const struct ipl_sr_map tr2a_ipl_sr_map;
+#endif
+
+#endif
+
 #endif /* !_EWS4800MIPS_INTR_H_ */
Index: /trunk/src/sys/arch/ews4800mips/include/sbdvar.h
===================================================================
--- /trunk/src/sys/arch/ews4800mips/include/sbdvar.h	(revision 151)
+++ /trunk/src/sys/arch/ews4800mips/include/sbdvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sbdvar.h,v 1.4 2008/04/28 20:23:18 martin Exp $	*/
+/*	$NetBSD: sbdvar.h,v 1.4.18.1 2010/12/29 08:16:22 matt Exp $	*/
 
 /*-
@@ -48,5 +48,5 @@
 
 	/* mainbus node table */
-	const char **mainbusdevs;
+	const char * const *mainbusdevs;
 
 	/* System Board I/O device table */
@@ -69,5 +69,5 @@
 	void *(*intr_establish)(int, int (*)(void *), void *);
 	void (*intr_disestablish)(void *);
-	void (*intr)(uint32_t, uint32_t, uint32_t, uint32_t);
+	void (*intr)(int, vaddr_t, uint32_t);
 
 	/* Interval timer helper routines */
@@ -89,5 +89,5 @@
 void *x ## _intr_establish(int, int (*)(void *), void *);		\
 void x ## _intr_disestablish(void *);					\
-void x ## _intr(uint32_t, uint32_t, uint32_t, uint32_t);		\
+void x ## _intr(int, vaddr_t, uint32_t);				\
 void x ## _initclocks(void);						\
 void x ## _consinit(void);						\
@@ -96,5 +96,4 @@
 void x ## _poweroff(void);						\
 void x ## _ether_addr(uint8_t *);					\
-extern const uint32_t x ## _sr_bits[]
 
 #define	_SBD_OPS_SET(m, x)	platform . x = m ## _ ## x
Index: /trunk/src/sys/arch/hpcmips/hpcmips/autoconf.c
===================================================================
--- /trunk/src/sys/arch/hpcmips/hpcmips/autoconf.c	(revision 151)
+++ /trunk/src/sys/arch/hpcmips/hpcmips/autoconf.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: autoconf.c,v 1.21 2008/02/12 17:30:57 joerg Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.21.28.1 2010/12/29 08:16:22 matt Exp $	*/
 
 /*
@@ -78,5 +78,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.21 2008/02/12 17:30:57 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.21.28.1 2010/12/29 08:16:22 matt Exp $");
 
 #include <sys/param.h>
@@ -115,5 +115,5 @@
 
 	/* Configuration is finished, turn on interrupts. */
-	_splnone();	/* enable all source forcing SOFT_INTs cleared */
+	spl0();		/* enable all source forcing SOFT_INTs cleared */
 }
 
Index: /trunk/src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c
===================================================================
--- /trunk/src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: hpcapm_machdep.c,v 1.2 2005/12/11 12:17:33 christos Exp $	*/
+/*	$NetBSD: hpcapm_machdep.c,v 1.2.96.1 2010/12/29 08:16:22 matt Exp $	*/
 
 /*
@@ -30,5 +30,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hpcapm_machdep.c,v 1.2 2005/12/11 12:17:33 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hpcapm_machdep.c,v 1.2.96.1 2010/12/29 08:16:22 matt Exp $");
 
 #include <sys/param.h>
@@ -92,34 +92,34 @@
 {
 #if NVRIP_COMMON > 0
-	 if (platid_match(&platid, &platid_mask_CPU_MIPS_VR_41XX)) {
-		 /*
-		  * disable all interrupts except PIU interrupt
-		  */
-		 vrip_intr_suspend();
-		 _spllower(~MIPS_INT_MASK_0);
+	if (platid_match(&platid, &platid_mask_CPU_MIPS_VR_41XX)) {
+		/*
+		 * disable all interrupts except PIU interrupt
+		 */
+		vrip_intr_suspend();
+		_spllower(~MIPS_INT_MASK_0);
 
-		 /*
-		  * SUSPEND instruction puts the CPU into power saveing
-		  * state until some interrupt occuer.
-		  * It sleeps until you push the power button.
-		  */
-		 __asm(".set noreorder");
-		 __asm(".word	" ___STRING(VR_OPCODE_SUSPEND));
-		 __asm("nop");
-		 __asm("nop");
-		 __asm("nop");
-		 __asm("nop");
-		 __asm("nop");
-		 __asm(".set reorder");
+		/*
+		 * SUSPEND instruction puts the CPU into power saveing
+		 * state until some interrupt occuer.
+		 * It sleeps until you push the power button.
+		 */
+		__asm(".set noreorder");
+		__asm(".word	" ___STRING(VR_OPCODE_SUSPEND));
+		__asm("nop");
+		__asm("nop");
+		__asm("nop");
+		__asm("nop");
+		__asm("nop");
+		__asm(".set reorder");
 
-		 splhigh();
-		 vrip_intr_resume();
-		 delay(1000); /* 1msec */
-	 }
+		splhigh();
+		vrip_intr_resume();
+		delay(1000); /* 1msec */
+	}
 #endif /* NVRIP_COMMON > 0 */
 #ifdef TX39XX
-	 if (platid_match(&platid, &platid_mask_CPU_MIPS_TX)) {
-		 tx39power_suspend_cpu();
-	 }
+	if (platid_match(&platid, &platid_mask_CPU_MIPS_TX)) {
+		tx39power_suspend_cpu();
+	}
 #endif
 }
Index: /trunk/src/sys/arch/hpcmips/hpcmips/interrupt.c
===================================================================
--- /trunk/src/sys/arch/hpcmips/hpcmips/interrupt.c	(revision 151)
+++ /trunk/src/sys/arch/hpcmips/hpcmips/interrupt.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: interrupt.c,v 1.13 2008/04/28 20:23:21 martin Exp $	*/
+/*	$NetBSD: interrupt.c,v 1.13.18.1 2010/12/29 08:16:22 matt Exp $	*/
 
 /*-
@@ -31,11 +31,14 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.13 2008/04/28 20:23:21 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.13.18.1 2010/12/29 08:16:22 matt Exp $");
 
 #include "opt_vr41xx.h"
 #include "opt_tx39xx.h"
 
+#define __INTR_PRIVATE
+
 #include <sys/param.h>
 #include <sys/malloc.h>
+#include <sys/intr.h>
 
 #include <uvm/uvm_extern.h>
@@ -43,14 +46,9 @@
 #include <machine/sysconf.h>
 
-extern const u_int32_t __ipl_sr_bits_vr[];
-extern const u_int32_t __ipl_sr_bits_tx[];
-
-const u_int32_t *ipl_sr_bits;
-
 void
-intr_init()
+intr_init(void)
 {
 
-	ipl_sr_bits = CPUISMIPS3 ? __ipl_sr_bits_vr : __ipl_sr_bits_tx;
+	ipl_sr_map = CPUISMIPS3 ? __ipl_sr_map_vr : __ipl_sr_map_tx;
 }
 
@@ -65,8 +63,8 @@
  */
 void
-cpu_intr(u_int32_t status, u_int32_t cause, u_int32_t pc, u_int32_t ipending)
+cpu_intr(int ppl, vaddr_t pc, uint32_t status)
 {
 
-	(*platform.cpu_intr)(status, cause, pc, ipending);
+	(*platform.cpu_intr)(ppl, pc, status);
 }
 #endif /* VR41XX && TX39XX */
Index: /trunk/src/sys/arch/hpcmips/hpcmips/machdep.c
===================================================================
--- /trunk/src/sys/arch/hpcmips/hpcmips/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/hpcmips/hpcmips/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: machdep.c,v 1.96.10.5 2010/03/21 17:38:34 cliff Exp $	*/
+/*	$NetBSD: machdep.c,v 1.96.10.6 2010/12/29 08:16:22 matt Exp $	*/
 
 /*-
@@ -109,5 +109,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.96.10.5 2010/03/21 17:38:34 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.96.10.6 2010/12/29 08:16:22 matt Exp $");
 
 #include "opt_vr41xx.h"
@@ -143,4 +143,5 @@
 #include <dev/cons.h>		/* cntab access (cpu_reboot) */
 
+#include <machine/locore.h>
 #include <machine/psl.h>
 #include <machine/sysconf.h>
Index: /trunk/src/sys/arch/hpcmips/include/intr.h
===================================================================
--- /trunk/src/sys/arch/hpcmips/include/intr.h	(revision 151)
+++ /trunk/src/sys/arch/hpcmips/include/intr.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: intr.h,v 1.22 2008/01/04 22:03:25 ad Exp $	*/
+/*	$NetBSD: intr.h,v 1.22.28.1 2010/12/29 08:16:22 matt Exp $	*/
 
 /*
@@ -34,60 +34,15 @@
 #define _HPCMIPS_INTR_H_
 
-#define	IPL_NONE	0	/* disable only this interrupt */
-#define	IPL_SOFTCLOCK	1	/* clock software interrupts (SI 0) */
-#define	IPL_SOFTBIO	1	/* bio software interrupts (SI 0) */
-#define	IPL_SOFTNET	2	/* network software interrupts (SI 1) */
-#define	IPL_SOFTSERIAL	2	/* serial software interrupts (SI 1) */
-#define	IPL_VM		3
-#define	IPL_SCHED	4
-#define	IPL_HIGH	4	/* disable all interrupts */
-
-#define	_IPL_N		5
-
-#define	_IPL_SI0_FIRST	IPL_SOFTCLOCK
-#define	_IPL_SI0_LAST	IPL_SOFTBIO
-
-#define	_IPL_SI1_FIRST	IPL_SOFTNET
-#define	_IPL_SI1_LAST	IPL_SOFTSERIAL
-
-/* Interrupt sharing types. */
-#define	IST_UNUSABLE	-1	/* interrupt cannot be used */
-#define	IST_NONE	0	/* none */
-#define	IST_PULSE	1	/* pulsed */
-#define	IST_EDGE	2	/* edge-triggered */
-#define	IST_LEVEL	3	/* level-triggered */
+#include <mips/intr.h>
 
 #ifdef _KERNEL
 #ifndef _LOCORE
-#include <mips/cpuregs.h>
-#include <mips/locore.h>
-
-extern const u_int32_t *ipl_sr_bits;
 
 void	intr_init(void);
 
-#define	spl0()		(void) _spllower(0)
-#define	splx(s)		(void) _splset(s)
-
-typedef int ipl_t;
-typedef struct {
-	ipl_t _sr;
-} ipl_cookie_t;
-
-static inline ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
-	return (ipl_cookie_t){._sr = ipl_sr_bits[ipl]};
-}
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
-	return _splraise(icookie._sr);
-}
-
-#include <sys/spl.h>
+#ifdef __INTR_PRIVATE
+extern const struct ipl_sr_map __ipl_sr_map_vr;
+extern const struct ipl_sr_map __ipl_sr_map_tx;
+#endif
 
 #endif /* !_LOCORE */
Index: /trunk/src/sys/arch/hpcmips/include/sysconf.h
===================================================================
--- /trunk/src/sys/arch/hpcmips/include/sysconf.h	(revision 151)
+++ /trunk/src/sys/arch/hpcmips/include/sysconf.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sysconf.h,v 1.13 2007/03/04 05:59:53 christos Exp $	*/
+/*	$NetBSD: sysconf.h,v 1.13.62.1 2010/12/29 08:16:22 matt Exp $	*/
 
 /*
@@ -63,5 +63,5 @@
 	 *	clock		-
 	 */
-	void	(*cpu_intr)(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+	void	(*cpu_intr)(int, vaddr_t, u_int32_t);
 	void	(*cpu_idle)(void);
 	void	(*cons_init)(void);
Index: /trunk/src/sys/arch/hpcmips/tx/tx39.c
===================================================================
--- /trunk/src/sys/arch/hpcmips/tx/tx39.c	(revision 151)
+++ /trunk/src/sys/arch/hpcmips/tx/tx39.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: tx39.c,v 1.39.18.1 2010/02/01 04:18:31 matt Exp $ */
+/*	$NetBSD: tx39.c,v 1.39.18.2 2010/12/29 08:16:22 matt Exp $ */
 
 /*-
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tx39.c,v 1.39.18.1 2010/02/01 04:18:31 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tx39.c,v 1.39.18.2 2010/12/29 08:16:22 matt Exp $");
 
 #include "opt_vr41xx.h"
@@ -40,4 +40,5 @@
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/intr.h>
 
 #include <uvm/uvm_extern.h>
@@ -84,5 +85,5 @@
 #endif
 
-extern void TX_INTR(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+extern void TX_INTR(int, vaddr_t, uint32_t);
 
 void	tx39clock_cpuspeed(int *, int *);
@@ -180,7 +181,7 @@
 {
 	char *page, *startaddr, *endaddr;
-	u_int32_t magic0, magic1;
-#define MAGIC0		(*(volatile u_int32_t *)(page + 0))
-#define MAGIC1		(*(volatile u_int32_t *)(page + 4))
+	uint32_t magic0, magic1;
+#define MAGIC0		(*(volatile uint32_t *)(page + 0))
+#define MAGIC1		(*(volatile uint32_t *)(page + 4))
 
 	startaddr = (char *)MIPS_PHYS_TO_KSEG1(start);
@@ -237,5 +238,5 @@
 {
 
-	goto *(u_int32_t *)MIPS_RESET_EXC_VEC;
+	goto *(uint32_t *)MIPS_RESET_EXC_VEC;
 }
 
Index: /trunk/src/sys/arch/hpcmips/vr/vr.c
===================================================================
--- /trunk/src/sys/arch/hpcmips/vr/vr.c	(revision 151)
+++ /trunk/src/sys/arch/hpcmips/vr/vr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: vr.c,v 1.51.22.1 2010/02/05 07:39:53 matt Exp $	*/
+/*	$NetBSD: vr.c,v 1.51.22.2 2010/12/29 08:16:23 matt Exp $	*/
 
 /*-
@@ -36,9 +36,11 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vr.c,v 1.51.22.1 2010/02/05 07:39:53 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vr.c,v 1.51.22.2 2010/12/29 08:16:23 matt Exp $");
 
 #include "opt_vr41xx.h"
 #include "opt_tx39xx.h"
 #include "opt_kgdb.h"
+
+#define	__INTR_PRIVATE
 
 #include <sys/param.h>
@@ -127,20 +129,17 @@
  * given interrupt priority level.
  */
-const u_int32_t __ipl_sr_bits_vr[_IPL_N] = {
-	0,					/* IPL_NONE */
-
-	MIPS_SOFT_INT_MASK_0,			/* IPL_SOFTCLOCK */
-
-	MIPS_SOFT_INT_MASK_0|
-		MIPS_SOFT_INT_MASK_1,		/* IPL_SOFTNET */
-
-	MIPS_SOFT_INT_MASK_0|
-		MIPS_SOFT_INT_MASK_1|
-		MIPS_INT_MASK_0,		/* IPL_VM */
-
-	MIPS_SOFT_INT_MASK_0|
-		MIPS_SOFT_INT_MASK_1|
-		MIPS_INT_MASK_0|
-		MIPS_INT_MASK_1,		/* IPL_SCHED */
+const struct ipl_sr_map __ipl_sr_map_vr = {
+    .sr_bits = {
+	[IPL_NONE] =		0,
+	[IPL_SOFTCLOCK] =	MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] =		MIPS_SOFT_INT_MASK,
+	[IPL_VM] =		MIPS_SOFT_INT_MASK
+				| MIPS_INT_MASK_0,
+	[IPL_SCHED] =		MIPS_SOFT_INT_MASK
+				| MIPS_INT_MASK_0
+				| MIPS_INT_MASK_1,
+	[IPL_DDB] =		MIPS_INT_MASK,
+	[IPL_VM] =		MIPS_INT_MASK,
+    },
 };
 
@@ -152,5 +151,5 @@
 
 void vr_init(void);
-void VR_INTR(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+void VR_INTR(int, vaddr_t, uint32_t);
 extern void vr_idle(void);
 STATIC void vr_cons_init(void);
@@ -163,6 +162,6 @@
  * CPU interrupt dispatch table (HwInt[0:3])
  */
-STATIC int vr_null_handler(void *, u_int32_t, u_int32_t);
-STATIC int (*vr_intr_handler[4])(void *, u_int32_t, u_int32_t) = 
+STATIC int vr_null_handler(void *, uint32_t, uint32_t);
+STATIC int (*vr_intr_handler[4])(void *, uint32_t, uint32_t) = 
 {
 	vr_null_handler,
@@ -429,4 +428,5 @@
 			    __FILE__, __LINE__);
 		}
+	}
 #else /* KGDB */
 	if (com_info->attach != NULL && (bootinfo->bi_cnuse&BI_CNUSE_SERIAL)) {
@@ -531,43 +531,30 @@
  */
 void
-VR_INTR(u_int32_t status, u_int32_t cause, u_int32_t pc, u_int32_t ipending)
-{
-	struct cpu_info *ci;
-
-	ci = curcpu();
-	ci->ci_idepth++;
+VR_INTR(int ppl, vaddr_t pc, uint32_t status)
+{
+	uint32_t ipending;
+	int ipl;
+
 	uvmexp.intrs++;
 
-	/* Deal with unneded compare interrupts occasionally so that we can
-	 * keep spllowersoftclock. */
-	if (ipending & MIPS_INT_MASK_5) {
-		mips3_cp0_compare_write(0);
-	}
-
-	if (ipending & MIPS_INT_MASK_1) {
-		_splset(MIPS_SR_INT_IE); /* for spllowersoftclock */
-		/* Remove the lower priority pending bits from status so that
-		 * spllowersoftclock will not happen if other interrupts are
-		 * pending. */
-		(*vr_intr_handler[1])(vr_intr_arg[1], pc, status & ~(ipending
-		& (MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)));
-	}
-
-	if (ipending & MIPS_INT_MASK_0) {
-		_splset(MIPS_INT_MASK_1|MIPS_SR_INT_IE);
-		(*vr_intr_handler[0])(vr_intr_arg[0], pc, status);
-	}
-	ci->ci_idepth--;
-
-#ifdef __HAVE_FAST_SOFTINTS
-	ipending &= MIPS_SOFT_INT_MASK;
-	if (ipending == 0)
-		return;
-	softint_process(ipending);
-#endif
+	while (ppl < (ipl = splintr(&ipending))) {
+		/* Deal with unneded compare interrupts occasionally so that
+		 * we can keep spllowersoftclock. */
+		if (ipending & MIPS_INT_MASK_5) {
+			mips3_cp0_compare_write(0);
+		}
+
+		if (ipending & MIPS_INT_MASK_1) {
+			(*vr_intr_handler[1])(vr_intr_arg[1], pc, ipending);
+		}
+
+		if (ipending & MIPS_INT_MASK_0) {
+			(*vr_intr_handler[0])(vr_intr_arg[0], pc, status);
+		}
+	}
 }
 
 void *
-vr_intr_establish(int line, int (*ih_fun)(void *, u_int32_t, u_int32_t),
+vr_intr_establish(int line, int (*ih_fun)(void *, uint32_t, uint32_t),
     void *ih_arg)
 {
@@ -591,5 +578,5 @@
 
 int
-vr_null_handler(void *arg, u_int32_t pc, u_int32_t status)
+vr_null_handler(void *arg, uint32_t pc, uint32_t status)
 {
 
Index: /trunk/src/sys/arch/i386/i386/machdep.c
===================================================================
--- /trunk/src/sys/arch/i386/i386/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/i386/i386/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: machdep.c,v 1.644.4.10.4.1 2010/04/21 00:33:50 matt Exp $	*/
+/*	$NetBSD: machdep.c,v 1.644.4.10.4.2 2011/05/20 08:11:20 matt Exp $	*/
 
 /*-
@@ -68,5 +68,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.644.4.10.4.1 2010/04/21 00:33:50 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.644.4.10.4.2 2011/05/20 08:11:20 matt Exp $");
 
 #include "opt_beep.h"
@@ -249,7 +249,4 @@
 int	physmem;
 
-unsigned int cpu_feature;
-unsigned int cpu_feature2;
-unsigned int cpu_feature_padlock;
 int	cpu_class;
 int	i386_fpu_present;
@@ -1433,6 +1430,4 @@
 #endif
 	cpu_probe(&cpu_info_primary);
-	cpu_feature = cpu_info_primary.ci_feature_flags;
-	cpu_feature2 = cpu_info_primary.ci_feature2_flags;
 	cpu_feature_padlock = cpu_info_primary.ci_padlock_flags;
 
@@ -1442,5 +1437,6 @@
 #ifdef XEN
 	/* not on Xen... */
-	cpu_feature &= ~(CPUID_PGE|CPUID_PSE|CPUID_MTRR|CPUID_FXSR|CPUID_NOX);
+	cpu_feature &= ~(CPUID_PGE|CPUID_PSE|CPUID_MTRR|CPUID_FXSR);
+	cpu_feature3 &= ~(CPUID_NOX);
 	lwp0.l_addr->u_pcb.pcb_cr3 = PDPpaddr - KERNBASE;
 	__PRINTK(("pcb_cr3 0x%lx cr3 0x%lx\n",
Index: /trunk/src/sys/arch/i386/i386/pmc.c
===================================================================
--- /trunk/src/sys/arch/i386/i386/pmc.c	(revision 151)
+++ /trunk/src/sys/arch/i386/i386/pmc.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: pmc.c,v 1.17 2008/05/11 14:44:54 ad Exp $	*/
+/*	$NetBSD: pmc.c,v 1.17.16.1 2011/05/20 08:11:20 matt Exp $	*/
 
 /*-
@@ -39,5 +39,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmc.c,v 1.17 2008/05/11 14:44:54 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmc.c,v 1.17.16.1 2011/05/20 08:11:20 matt Exp $");
 
 #include <sys/param.h>
@@ -51,4 +51,5 @@
 #include <machine/cpu_counter.h>
 #include <machine/cputypes.h>
+#include <machine/cpuvar.h>
 
 static int pmc_initialized;
Index: /trunk/src/sys/arch/i386/i386/trap.c
===================================================================
--- /trunk/src/sys/arch/i386/i386/trap.c	(revision 151)
+++ /trunk/src/sys/arch/i386/i386/trap.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: trap.c,v 1.241.4.1 2009/03/27 17:25:15 msaitoh Exp $	*/
+/*	$NetBSD: trap.c,v 1.241.4.1.4.1 2011/05/20 08:11:21 matt Exp $	*/
 
 /*-
@@ -69,5 +69,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.241.4.1 2009/03/27 17:25:15 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.241.4.1.4.1 2011/05/20 08:11:21 matt Exp $");
 
 #include "opt_ddb.h"
@@ -132,4 +132,5 @@
 void trap(struct trapframe *);
 void trap_tss(struct i386tss *, int, int);
+void trap_return_fault_return(struct trapframe *) __dead;
 
 #ifdef KVM86
@@ -277,5 +278,5 @@
 	int type = frame->tf_trapno;
 	struct pcb *pcb;
-	extern char fusubail[], kcopy_fault[], trapreturn[], IDTVEC(osyscall)[];
+	extern char fusubail[], kcopy_fault[], IDTVEC(osyscall)[];
 	struct trapframe *vframe;
 	ksiginfo_t ksi;
@@ -393,65 +394,76 @@
 		/*
 		 * Check for failure during return to user mode.
+		 * This can happen loading invalid values into the segment
+		 * registers, or during the 'iret' itself.
 		 *
 		 * We do this by looking at the instruction we faulted on.
 		 * The specific instructions we recognize only happen when
 		 * returning from a trap, syscall, or interrupt.
-		 *
-		 * At this point, there are (at least) two trap frames on
-		 * the kernel stack; we presume here that we faulted while
-		 * loading our registers out of the outer one.
 		 */
+
+kern_pagefault:
+		KSI_INIT_TRAP(&ksi);
+		ksi.ksi_signo = SIGSEGV;
+		ksi.ksi_code = SEGV_ACCERR;
+		ksi.ksi_trap = type;
+
 		switch (*(u_char *)frame->tf_eip) {
 		case 0xcf:	/* iret */
-			vframe = (void *)((int)&frame->tf_esp -
+			/*
+			 * The 'iret' instruction faulted, so we have the
+			 * 'user' registers saved after the kernel %eip:%cs:%fl
+			 * of the 'iret' and below that the user %eip:%cs:%fl
+			 * the 'iret' was processing.
+			 * We must delete the 3 words of kernel return address
+			 * from the stack to generate a normal stack frame
+			 * (eg for sending a SIGSEGV).
+			 */
+			vframe = (void *)((int *)frame + 3);
+			if (KERNELMODE(vframe->tf_cs, vframe->tf_eflags))
+				goto we_re_toast;
+			memmove(vframe, frame,
 			    offsetof(struct trapframe, tf_eip));
+			/* Set the faulting address to the user %eip */
+			ksi.ksi_addr = (void *)vframe->tf_eip;
 			break;
 		case 0x8e:
 			switch (*(uint32_t *)frame->tf_eip) {
-			case 0x0c245c8e:	/* movl 0xc(%esp,1),%ds */
-			case 0x0824448e:	/* movl 0x8(%esp,1),%es */
-			case 0x0424648e:	/* movl 0x4(%esp,1),%fs */
-			case 0x00246c8e:	/* movl 0x0(%esp,1),%gs */
+			case 0x8e242c8e:	/* mov (%esp),%gs */
+			case 0x00246c8e:	/* mov 0x0(%esp),%gs */
+			case 0x0424648e:	/* mov 0x4(%esp),%fs */
+			case 0x0824448e:	/* mov 0x8(%esp),%es */
+			case 0x0c245c8e:	/* mov 0xc(%esp),%ds */
 				break;
 			default:
 				goto we_re_toast;
 			}
-			vframe = (void *)(int)&frame->tf_esp;
+			/*
+			 * We faulted loading one if the user segment registers.
+			 * The stack frame containing the user registers is
+			 * still valid and is just below the %eip:%cs:%fl of
+			 * the kernel fault frame.
+			 */
+			vframe = (void *)(&frame->tf_eflags + 1);
+			if (KERNELMODE(vframe->tf_cs, vframe->tf_eflags))
+				goto we_re_toast;
+			/* There is no valid address for the fault */
 			break;
 		default:
 			goto we_re_toast;
 		}
-		if (KERNELMODE(vframe->tf_cs, vframe->tf_eflags))
-			goto we_re_toast;
-
 		/*
-		 * Arrange to signal the thread, which will reset its
-		 * registers in the outer frame.  This also allows us to
-		 * capture the invalid register state in sigcontext,
-		 * packaged up with the signal delivery.  We restart
-		 * on return at 'trapreturn', acting as if nothing
-		 * happened, restarting the return to user with our new
-		 * set of registers.
-		 *
-		 * Clear PSL_NT.  It can be set by userland because setting
-		 * it isn't a privileged operation.
-		 *
-		 * Set PSL_I.  Otherwise, if SIGSEGV is ignored, we'll
-		 * continue to generate traps infinitely with
-		 * interrupts disabled.
+		 * We might have faulted trying to execute the
+		 * trampoline for a local (nested) signal handler.
+		 * Only generate SIGSEGV if the user %cs isn't changed.
+		 * (This is only strictly necessary in the 'iret' case.)
 		 */
-		frame->tf_ds = GSEL(GDATA_SEL, SEL_KPL);
-		frame->tf_es = GSEL(GDATA_SEL, SEL_KPL);
-		frame->tf_gs = GSEL(GDATA_SEL, SEL_KPL);
-		frame->tf_fs = GSEL(GCPU_SEL, SEL_KPL);
-		frame->tf_eip = (uintptr_t)trapreturn;
-		frame->tf_eflags = (frame->tf_eflags & ~PSL_NT) | PSL_I;
-		KSI_INIT_TRAP(&ksi);
-		ksi.ksi_signo = SIGSEGV;
-		ksi.ksi_addr = (void *)rcr2();
-		ksi.ksi_code = SEGV_ACCERR;
-		ksi.ksi_trap = type & ~T_USER;
-		(*p->p_emul->e_trapsignal)(l, &ksi);
-		return;
+		if (!pmap_exec_fixup(&p->p_vmspace->vm_map, vframe, pcb)) {
+			/* Save outer frame for any signal return */
+			l->l_md.md_regs = vframe;
+			(*p->p_emul->e_trapsignal)(l, &ksi);
+		}
+		/* Return to user by reloading the user frame */
+		trap_return_fault_return(vframe);
+		/* NOTREACHED */
 
 	case T_PROTFLT|T_USER:		/* protection fault */
@@ -490,4 +502,21 @@
 		case T_ALIGNFLT|T_USER:
 			ksi.ksi_code = BUS_ADRALN;
+			break;
+		case T_PROTFLT|T_USER:
+#ifdef VM86
+			if (frame->tf_eflags & PSL_VM) {
+				vm86_gpfault(l, type & ~T_USER);
+				goto out;
+			}
+#endif
+			/*
+			 * If pmap_exec_fixup does something,
+			 * let's retry the trap.
+			 */
+			if (pmap_exec_fixup(&p->p_vmspace->vm_map, frame, pcb)){
+				goto out;
+			}
+			ksi.ksi_signo = SIGSEGV;
+			ksi.ksi_code = SEGV_ACCERR;
 			break;
 		default:
@@ -708,5 +737,5 @@
 			printf("uvm_fault(%p, %#lx, %d) -> %#x\n",
 			    map, va, ftype, error);
-			goto we_re_toast;
+			goto kern_pagefault;
 		}
 		if (error == ENOMEM) {
Index: /trunk/src/sys/arch/i386/i386/vector.S
===================================================================
--- /trunk/src/sys/arch/i386/i386/vector.S	(revision 151)
+++ /trunk/src/sys/arch/i386/i386/vector.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: vector.S,v 1.42.6.2 2009/04/04 17:39:09 snj Exp $	*/
+/*	$NetBSD: vector.S,v 1.42.6.2.4.1 2011/05/20 08:11:21 matt Exp $	*/
 
 /*
@@ -66,5 +66,5 @@
 
 #include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: vector.S,v 1.42.6.2 2009/04/04 17:39:09 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vector.S,v 1.42.6.2.4.1 2011/05/20 08:11:21 matt Exp $");
 
 #include "opt_ddb.h"
@@ -1084,4 +1084,16 @@
 	jmp	1b
 
+/*
+ * trap() calls here when it detects a fault in INTRFASTEXIT (loading the
+ * segment registers or during the iret itself).
+ * The address of the (possibly reconstructed) user trap frame is
+ * passed as an argument.
+ * Typically the code will have raised a SIGSEGV which will be actioned
+ * by the code below.
+ */
+_C_LABEL(trap_return_fault_return):	.globl	trap_return_fault_return
+	mov	4(%esp),%esp	/* frame for user return */
+	jmp	_C_LABEL(trapreturn)
+
 /* LINTSTUB: Ignore */
 NENTRY(alltraps)
Index: /trunk/src/sys/arch/i386/isa/npx.c
===================================================================
--- /trunk/src/sys/arch/i386/isa/npx.c	(revision 151)
+++ /trunk/src/sys/arch/i386/isa/npx.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: npx.c,v 1.129.10.5 2008/11/27 03:37:02 snj Exp $	*/
+/*	$NetBSD: npx.c,v 1.129.10.5.4.1 2011/05/20 08:11:21 matt Exp $	*/
 
 /*-
@@ -97,5 +97,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npx.c,v 1.129.10.5 2008/11/27 03:37:02 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npx.c,v 1.129.10.5.4.1 2011/05/20 08:11:21 matt Exp $");
 
 #if 0
@@ -125,4 +125,5 @@
 
 #include <machine/cpufunc.h>
+#include <machine/cpuvar.h>
 #include <machine/pcb.h>
 #include <machine/trap.h>
Index: /trunk/src/sys/arch/i386/stand/misc/Makefile
===================================================================
--- /trunk/src/sys/arch/i386/stand/misc/Makefile	(revision 151)
+++ /trunk/src/sys/arch/i386/stand/misc/Makefile	(revision 152)
@@ -1,7 +1,7 @@
-#	$NetBSD: Makefile,v 1.6 2005/12/11 12:17:49 christos Exp $
+#	$NetBSD: Makefile,v 1.6.96.1 2011/05/20 08:11:21 matt Exp $
 
 MISC_FILES=	rawrite.c
 UUDECODE_FILES=	pfdisk.doc pfdisk.exe pfdisktc.zip \
-		rawr32.zip rawr32src.zip \
+		rawr32.exe \
 		rawrite.doc rawrite.exe
 
Index: /trunk/src/sys/arch/i386/stand/misc/rawr32.exe.uue
===================================================================
--- /trunk/src/sys/arch/i386/stand/misc/rawr32.exe.uue	(revision 152)
+++ /trunk/src/sys/arch/i386/stand/misc/rawr32.exe.uue	(revision 152)
@@ -0,0 +1,15422 @@
+begin 644 rawr32.exe
+M35J0``,````$````__\``+@`````````0```````````````````````````
+M````````````````````V`````X?N@X`M`G-(;@!3,TA5&AI<R!P<F]G<F%M
+M(&-A;FYO="!B92!R=6X@:6X@1$]3(&UO9&4N#0T*)``````````QN(0Z==GJ
+M:779ZFEUV>IIMM:U:7?9ZFEUV>MI[MGJ:;;6MVEDV>II(?K::7_9ZFFRW^QI
+M=-GJ:5)I8VAUV>II````````````````````````````````4$4``$P!!0#&
+MXQI+``````````#@``\!"P$&``!<````U`$```0``#PR````$````'``````
+M0```$`````(```0````&````!```````````(`,```0````````"``"````0
+M```0`````!```!`````````0``````````````"D<P``M`````#0`@"`1P``
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````'```(P"````````````````
+M```````````````````N=&5X=````%I:````$````%P````$````````````
+M```````@``!@+G)D871A``"0$0```'`````2````8```````````````````
+M0```0"YD871A````F*\!``"0````!````'(``````````````````$```,`N
+M;F1A=&$```"0````0`(```````````````````````````"```#`+G)S<F,`
+M``"`1P```-`"``!(````=@``````````````````0```0```````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+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
+M0/\5`'%``(7`B47X#X0`"0``BT7XBTV,QT6X!0```(!D"/\`ZR&#?90`#X1%
+M"```BTV0BT7T_TV4#[8)P>`("\'_19")1?2+1;C_3;B%P'75BT6@BTW((T7D
+MQX5\____!@```,'A!(E%M`/(BT7\C31(Z6P&```STCE5P'5O#[9%I(MUH+$(
+M*DW$(W7HT^B+3<33YHM-_`/&C01`P>`)@WW(!(V$"&P.``")1:A]!8E5R.L0
+M@WW("GT&@VW(`^L$@VW(!CE5S'0<BT7L*T74.T6,<@,#18R+3?@SVT.*!`B(
+M1:7K:#/;0^G-`0``BT7\BTW(QT7,`0```,>%?/___P<```"-M$B``0``Z=,%
+M``"#?90`#X1G!P``BTV0BT7TP67P"`^V"?]-E,'@"`O!_T60B47TBT7`.46X
+M#X6M````@?L``0``#XT%`0``#[9%I=!EI8M-J,'H!XE%N$#!X`@#PXTT08M-
+M\,'I"V:+!HEUK`^WT`^ORCE-]',:@V7``(E-\+D`"```*\K!^04#R`/;9HD.
+MZQTI3?`I3?1FB\C'1<`!````9L'I!2O!C5P;`6:)!H%]\`````&)7;P/@W'_
+M___I1____X-]E``/A+H&``"+39"+1?3!9?`(#[8)_TV4P>`("\'_19")1?2!
+M^P`!``!]7(M%J(T4&XM-\(TT`L'I"V:+!HEUK`^W^`^OSSE-]',6B4WPN0`(
+M```KS\'Y!0/(`]MFB0[K%2E-\"E-]&:+R(U:`6;!Z04KP6:)!H%]\`````&)
+M7;QSH>EW____@V7,`(I%O(A%I(-]G``/A#\&``"+39B*1:2+5?C_1:#_19C_
+M39R(`8M-[(@$$8U!`3/2]W6,Z94!``"#?90`#X0"!@``BTV0BT7TP67P"`^V
+M"?]-E,'@"`O!_T60B47T@?L``0``?9R+1:B-%!N+3?"--`+!Z0MFBP:)=:P/
+MM_@/K\\Y3?1S%HE-\+D`"```*\_!^04#R`/;9HD.ZQ4I3?`I3?1FB\B-6@%F
+MP>D%*\%FB0:!??`````!B5V\<Z'I=____X-]P`%U'(M%_(M-R,>%?/___P@`
+M``"-M$B8`0``Z:L#``"+1=S'18`6````B47@BT78B47<BT74B478,\"#?<@'
+M#YW`2"3]@\`*B47(BT7\!60&``")1:B+=:C'A7S___\2````Z6,#``"#?<``
+M=2&+1<B+3?R#P`_'A7S___\)````P>`$`T6TC31!Z3P#``"+1?R+3<C'A7S_
+M__\*````C;1(L`$``.D@`P``@WW```^%L0```(-]H``/A#L%```SP(-]R`</
+MG<"-1``)B47(@WV<``^$P`0``(M%["M%U#M%C'(#`T6,BU7XB@P0BT7LB$VD
+MB`P00#/2]W6,BT68_T6@_T68_TV<B`B)5>S'A7C___\"````Z<?Z__^#?<``
+M=06+1=CK-HM%_(M-R,>%?/___PL```"-M$C(`0``Z8@"``"#?<``=06+1=SK
+M"8M-W(M%X(E-X(M-V(E-W(M-U(E%U(E-V(M%_,=%@!4````%:`H``(E%J.G9
+M_O__,\"#?<@'#YW`2"3]@\`+B47(Z9H!``"+1="#^`1\`VH#6(M-_,=%P`8`
+M``#!X`?'1809````C80(8`,``(E%J.G.`@``@_L$?#2+RXO#T?F#X`%)#`+3
+MX(/[#HE%U'T4BU7\*\.)3<"-A$)>!0``Z8$````SVX/!_(E-N.LSB5W4Z2@!
+M``"#?90`#X28`P``BTV0BT7TP67P"`^V"?]-E,'@"`O!_T60B47TBT74_TVX
+M@WVX`'XGBTWT`]O1;?`[3?")7;QR#(M-\"E-](/+`8E=O(%]\`````%STNNH
+MP>,$`\/'1<`$````B474BT7\!40&```SVXE%J,=%L`$```")7;R)7;CK*(-]
+ME``/A"$#``"+39"+1?3!9?`(#[8)_TV4P>`("\'_19")1?3_1;B+1<`Y1;A]
+M<HM%L(M5\,'J"XT\`(M%J(TT!XEUK&:+!@^WR`^OT3E5]',7B57PN@`(```K
+MT<'Z!0/0T66P9HD6ZRHSR2E5\$$I5?2+V8M-N-/CB\N+7;P+V6:+R&;!Z04K
+MP4>)7;QFB0:)?;"!??`````!<XCI7O___P%=U/]%U(M%U(7`#X2$`@``.T6@
+M#X>X`@``@T70`HM%T`%%H(-]G``/A&T"``"+1>PK1=0[18QR`P-%C(M5^(H,
+M$(M%[(A-I(@,$$`STO=UC(M%F/]%F/]-G/]-T(-]T`"("(E5['^\Z7C]__^#
+M?<``=2"+1;2#9=``BTVHP>`$C40!!(E%J,=%P`,```#IS@```(M%J,>%?/__
+M_Q,```"-<`*)=:QFBP:+3?`/M]#!Z0L/K\HY3?1S&(E-\+D`"```*\K!^04#
+MR(-EP`!FB0[K&2E-\"E-]&:+R,=%P`$```!FP>D%*\%FB0:!??`````!<R6#
+M?90`#X2I`0``BTV0BT7TP67P"`^V"?]-E,'@"`O!_T60B47TBX5\____B85X
+M____Z9'W__^#?<``=1R+1;2+3:C!X`3'1=`(````C80!!`$``.DX____@46H
+M!`(``,=%T!````#'1<`(````QT6$%````(M%P,=%L`$```")1;CK*(-]E``/
+MA#(!``"+39"+1?3!9?`(#[8)_TV4P>`("\'_19")1?3_3;B#?;@`?EZ+1;"+
+M3?#!Z0N-%`"+1:B--`*)=:QFBP8/M_@/K\\Y3?1S%XE-\+D`"```*\_!^04#
+MR-%EL&:)#NL6*4WP*4WT9HO(9L'I!2O!0F:)!HE5L(%]\`````%SGNET____
+MBTW`BUVP,\!`T^`KV(M%A(E=O.D$____`5W0BT6`Z?G^___'A7C___\!````
+MZ8@```#'A7C___\#````ZWS'A7C___\-````ZW#'A7C___\.````ZV3'A7C_
+M__\/````ZUC'A7C___\:````ZTS'A7C___\;````ZT#'A7C___\,````ZS3'
+MA7C___\0````ZRB#3=#_ZR+'A7C___\<````ZQ;'A7C___\%````ZPK'A7C_
+M__\8````B[UP____:B)9C;5X____\Z4SP.L#@\C_7UY;R</+7T``<&!```MA
+M0`#@8$``H&=``.YG0``Q84``T&-``#ID0`!]9$``[F1``!5E0`#594``RF%`
+M`(-B0`!'8T``6&9``"AD0`!G9T``)&A``!5I0`!/94``9F5``&)H0`!Q:$``
+ME&5``!9C0`"A9$``'F=``/\E<')``/\E;')``/\E:')`````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````((```#2````2@````H```(B```!X@```9H```%B```!&@```````
+M`+J```"F@```$0``@-"`````````7'\``$Q_```\?P``)G\``!!_```$?P``
+M]'X``.1^````````@G@``)1X``"B>```MG@``,IX``#6>```[G@```1Y```4
+M>0``*'D``#YY``!&>0``5GD``&1Y``!R>0``B'D``)QY``"H>0``='@``,YY
+M``#>>0``\'D```!Z```0>@``''H``#!Z``!`>@``3GH``%YZ``!P>@``A'H`
+M`)AZ``"D>@``L'H``,9Z``!F>```6G@``$YX```R>```)'@``!9X````>```
+MZG<``-9W``#$=P``LG<``*1W``".=P``<'<``%1W``!(=P``/'<``.1V```J
+M=P``'G<```YW``#\=@``[G8``+9Y````````P'\``*I_``"8?P``B'\``'1_
+M``#8?P```````-!\``#<?```[GP``/Y\```0?0``('T``#!]``!"?0``4GT`
+M`&!]``!R?0``?GT``(Q]``">?0``KGT``+Q]``#.?0``X'T``/)]```&?@``
+MOGP``"A^```Z?@``2'X``%I^``!N?@``@'X``))^``"H?@``M'X``,A^``!&
+M?```,'P``"1\```2?````'P``.I[``#0>P``NGL``*I[``"F?```E'P``(1\
+M``!R?```9GP``!A^``!6?```GGL``)![``!^>P``<'L``&A[``!8>P``1GL`
+M`#9[```D>P``%GL```9[``#Z>@``[GH``.)Z``#<>P```````&J!``!4@0``
+M0H$````````H@0``&($```:!``#R@````````%)I8VA%9&ET`````%)I8VA%
+M9&ET,C!!`%)I8VA%9#,R`````%)I8VA%9#(P`````"Y$149!54Q47$-O;G1R
+M;VP@4&%N96Q<26YT97)N871I;VYA;`````!#;VYT<F]L(%!A;F5L7$1E<VMT
+M;W!<4F5S;W5R8V5,;V-A;&4`````6U)E;F%M95T-"@``)60``%-O9G1W87)E
+M7$UI8W)O<V]F=%Q7:6YD;W=S7$-U<G)E;G1697)S:6]N````7$UI8W)O<V]F
+M=%Q);G1E<FYE="!%>'!L;W)E<EQ1=6EC:R!,875N8V@```#N%`(``````,``
+M``````!&`10"``````#`````````1@L!````````P````````$:X=```````
+M``````#4>@``8'```,1U`````````````-A^``!L<0``E'0`````````````
+M:G\``#QP``"H=0````````````#V?P``4'$``%AT`````````````)B`````
+M<```@'0`````````````Y(```"AP``#0=@`````````````X@0``>'(``,!V
+M`````````````(2!``!H<@`````````````````````````````@@```-(``
+M`!*````"@```B(```'B```!F@```6(```$:`````````NH```*:````1``"`
+MT(````````!<?P``3'\``#Q_```F?P``$'\```1_``#T?@``Y'X```````""
+M>```E'@``*)X``"V>```RG@``-9X``#N>```!'D``!1Y```H>0``/GD``$9Y
+M``!6>0``9'D``')Y``"(>0``G'D``*AY``!T>```SGD``-YY``#P>0```'H`
+M`!!Z```<>@``,'H``$!Z``!.>@``7GH``'!Z``"$>@``F'H``*1Z``"P>@``
+MQGH``&9X``!:>```3G@``#)X```D>```%G@```!X``#J=P``UG<``,1W``"R
+M=P``I'<``(YW``!P=P``5'<``$AW```\=P``Y'8``"IW```>=P``#G<``/QV
+M``#N=@``MGD```````#`?P``JG\``)A_``"(?P``='\``-A_````````T'P`
+M`-Q\``#N?```_GP``!!]```@?0``,'T``$)]``!2?0``8'T``')]``!^?0``
+MC'T``)Y]``"N?0``O'T``,Y]``#@?0``\GT```9^``"^?```*'X``#I^``!(
+M?@``6GX``&Y^``"`?@``DGX``*A^``"T?@``R'X``$9\```P?```)'P``!)\
+M````?```ZGL``-![``"Z>P``JGL``*9\``"4?```A'P``')\``!F?```&'X`
+M`%9\``">>P``D'L``'Y[``!P>P``:'L``%A[``!&>P``-GL``"1[```6>P``
+M!GL``/IZ``#N>@``XGH``-Q[````````:H$``%2!``!"@0```````"B!```8
+M@0``!H$``/*`````````=`)-=6Q$:78``(,`1&5L971E1FEL94$`T@!&:6YD
+M1FER<W1&:6QE00``W`!&:6YD3F5X=$9I;&5!`,X`1FEN9$-L;W-E`!L#4V5T
+M1FEL95!O:6YT97(``+4"4F5A9$9I;&4``*0#5W)I=&5&:6QE`)P!1V5T4')I
+M=F%T95!R;V9I;&53=')I;F=!``"I`U=R:71E4')I=F%T95!R;V9I;&53=')I
+M;F=!``!U`DUU;'1I0GET951O5VED94-H87(`^`!&<F5E3&EB<F%R>0"@`4=E
+M=%!R;V-!9&1R97-S``!3`DQO861,:6)R87)Y17A!``!_`4=E=$UO9'5L94AA
+M;F1L94$``%H!1V5T17AI=$-O9&50<F]C97-S``"0`U=A:71&;W)3:6YG;&5/
+M8FIE8W0`^`%';&]B86Q!;&QO8P#_`4=L;V)A;$9R964``+P`17AP86YD16YV
+M:7)O;FUE;G13=')I;F=S00#``VQS=')C;7!!``##`VQS=')C;7!I00`T`$-L
+M;W-E2&%N9&QE`!\#4V5T1FEL951I;64`.0!#;VUP87)E1FEL951I;64`VP)3
+M96%R8VA0871H00"U`4=E=%-H;W)T4&%T:$YA;65!`&D!1V5T1G5L;%!A=&A.
+M86UE00``;@)-;W9E1FEL94$`"@-3971#=7)R96YT1&ER96-T;W)Y00``7@%'
+M971&:6QE071T<FEB=71E<T$``'$!1V5T3&%S=$5R<F]R``!+`$-R96%T941I
+M<F5C=&]R>4$``!D#4V5T1FEL94%T=')I8G5T97-!``!6`U-L965P`-\!1V5T
+M5&EC:T-O=6YT``!3`$-R96%T949I;&5!`&,!1V5T1FEL95-I>F4`?0%'971-
+M;V1U;&5&:6QE3F%M94$``$(!1V5T0W5R<F5N=%!R;V-E<W,`0P!#;W!Y1FEL
+M94$`N0!%>&ET4')O8V5S<P#S`4=E=%=I;F1O=W-$:7)E8W1O<GE!``#5`4=E
+M=%1E;7!0871H00``$`%'971#;VUM86YD3&EN94$`%0-3971%<G)O<DUO9&4`
+M`%("3&]A9$QI8G)A<GE!``#)`VQS=')C<'EN00!-`4=E=$1I<VM&<F5E4W!A
+M8V5!``H"1VQO8F%L56YL;V-K```#`D=L;V)A;$QO8VL``&\`0W)E871E5&AR
+M96%D``!F`$-R96%T95!R;V-E<W-!``#$`E)E;6]V941I<F5C=&]R>4$``-,!
+M1V5T5&5M<$9I;&5.86UE00``S`-L<W1R;&5N00``O0-L<W1R8V%T00``P0%'
+M9713>7-T96U$:7)E8W1O<GE!`.@!1V5T5F5R<VEO;@``2T523D5,,S(N9&QL
+M``#(`$5N9%!A:6YT``"\`$1R87=497AT00#B`$9I;&Q296-T``#_`$=E=$-L
+M:65N=%)E8W0`#0!"96=I;E!A:6YT``".`$1E9E=I;F1O=U!R;V-!```[`E-E
+M;F1-97-S86=E00``DP%);G9A;&ED871E4F5C=```Q`!%;F%B;&57:6YD;W<`
+M``P!1V5T1$,`P`%,;V%D26UA9V5!``"``E-E=%=I;F1O=TQO;F=!```1`4=E
+M=$1L9TET96T``*T!27-7:6YD;W<``.0`1FEN9%=I;F1O=T5X00`^`E-E;F1-
+M97-S86=E5&EM96]U=$$`UP)W<W!R:6YT9D$`D@)3:&]W5VEN9&]W``!7`E-E
+M=$9O<F5G<F]U;F17:6YD;W<`!`)0;W-T475I=$UE<W-A9V4`A@)39717:6YD
+M;W=497AT00``>@)39714:6UE<@``50!#<F5A=&5$:6%L;V=087)A;4$``)D`
+M1&5S=')O>5=I;F1O=P#A`$5X:717:6YD;W=S17@`*@!#:&%R3F5X=$$`G@!$
+M:6%L;V=";WA087)A;4$`]@!'971#;&%S<TEN9F]!`&``0W)E871E5VEN9&]W
+M17A!`)D"4WES=&5M4&%R86UE=&5R<TEN9F]!`!8"4F5G:7-T97)#;&%S<T$`
+M`,8`16YD1&EA;&]G`#$"4V-R965N5&]#;&EE;G0``'0!1V5T5VEN9&]W4F5C
+M=`#"`$5N86)L94UE;G5)=&5M``!<`4=E=%-Y<W1E;4UE;G4`1P)3971#;&%S
+M<TQO;F=!`*X!27-7:6YD;W=%;F%B;&5D`(,"4V5T5VEN9&]W4&]S``!:`4=E
+M=%-Y<T-O;&]R`&X!1V5T5VEN9&]W3&]N9T$``$T"4V5T0W5R<V]R`+H!3&]A
+M9$-U<G-O<D$`.`!#:&5C:T1L9T)U='1O;@``/`%'971-97-S86=E4&]S`+@!
+M3&]A9$)I=&UA<$$`&P!#86QL5VEN9&]W4')O8T$`L0%)<U=I;F1O=U9I<VEB
+M;&4`0@!#;&]S94-L:7!B;V%R9```2@)3971#;&EP8F]A<F1$871A``#!`$5M
+M<'1Y0VQI<&)O87)D``#V`4]P96Y#;&EP8F]A<F0`I`)4<F%C:U!O<'5P365N
+M=0``"`!!<'!E;F1-96YU00!>`$-R96%T95!O<'5P365N=0!=`4=E=%-Y<W1E
+M;4UE=')I8W,``%,"4V5T1&QG271E;51E>'1!`!,!1V5T1&QG271E;51E>'1!
+M`.(!365S<V%G94)O>$EN9&ER96-T00`M`$-H87)0<F5V00"A`$1I<W!A=&-H
+M365S<V%G94$````"4&5E:TUE<W-A9V5!``!54T52,S(N9&QL```.`E-E;&5C
+M=$]B:F5C=```/`)3971497AT0V]L;W(``!8"4V5T0FM-;V1E`#H`0W)E871E
+M1F]N=$EN9&ER96-T00`I`$-R96%T94)R=7-H26YD:7)E8W0`CP!$96QE=&5/
+M8FIE8W0``&L!1V5T1&5V:6-E0V%P<P`5`E-E=$)K0V]L;W(``$=$23,R+F1L
+M;`":`%-(1FEL94]P97)A=&EO;D$```<!4VAE;&Q%>&5C=71E00"L`%-(1V5T
+M1FEL94EN9F]!``!Y`%-(0G)O=W-E1F]R1F]L9&5R00``O`!32$=E=%!A=&A&
+M<F]M241,:7-T00``PP!32$=E=%-P96-I86Q&;VQD97),;V-A=&EO;@``4TA%
+M3$PS,BYD;&P`X0%296=%;G5M5F%L=65!`-T!4F5G16YU;4ME>4$`]P%296=1
+M=65R>59A;'5E17A!```$`E)E9U-E=%9A;'5E17A!``#1`5)E9T-R96%T94ME
+M>45X00#+`5)E9T-L;W-E2V5Y`-@!4F5G1&5L971E5F%L=65!`-0!4F5G1&5L
+M971E2V5Y00#L`5)E9T]P96Y+97E%>$$`041605!),S(N9&QL```X`$EM86=E
+M3&ES=%]$97-T<F]Y`#0`26UA9V5,:7-T7T%D9$UA<VME9``W`$EM86=E3&ES
+M=%]#<F5A=&4``$-/34-43#,R+F1L;```$`!#;T-R96%T94EN<W1A;F-E```%
+M`4]L955N:6YI=&EA;&EZ90#N`$]L94EN:71I86QI>F4`90!#;U1A<VM-96U&
+M<F5E`&]L93,R+F1L;``*`%9E<E%U97)Y5F%L=65!`````$=E=$9I;&5697)S
+M:6]N26YF;T$``0!'971&:6QE5F5R<VEO;DEN9F]3:7IE00!615)324].+F1L
+M;```````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````(#]"`(D30`#(74``;39``%P```#_
+M_________W9E<FEF>6EN9R!I;G-T86QL97(Z("5D)24```!U;G!A8VMI;F<@
+M9&%T83H@)60E)0`````N+BX@)60E)0``````````26YS=&%L;&5R(&EN=&5G
+M<FET>2!C:&5C:R!H87,@9F%I;&5D+B!#;VUM;VX@8V%U<V5S(&EN8VQU9&4*
+M:6YC;VUP;&5T92!D;W=N;&]A9"!A;F0@9&%M86=E9"!M961I82X@0V]N=&%C
+M="!T:&4*:6YS=&%L;&5R)W,@875T:&]R('1O(&]B=&%I;B!A(&YE=R!C;W!Y
+M+@H*36]R92!I;F9O<FUA=&EO;B!A=#H*:'1T<#HO+VYS:7,N<V8N;F5T+TY3
+M25-?17)R;W(``````$5R<F]R('=R:71I;F<@=&5M<&]R87)Y(&9I;&4N($UA
+M:V4@<W5R92!Y;W5R('1E;7`@9F]L9&5R(&ES('9A;&ED+@``17)R;W(@;&%U
+M;F-H:6YG(&EN<W1A;&QE<@```%-E4VAU=&1O=VY0<FEV:6QE9V4`?FYS=2YT
+M;7``````7%1E;7````!.4TE3($5R<F]R``#_____8$!``%-(0`!60T``0E!`
+M``]#0``N97AE`````&]P96X`````)74N)74E<R5S````*```````````````
+M````````````````9P```````````````````#R30``HDT``/)-``!R30``0
+MDT```)-``!"30`#LDD``$)-``-220``0DT``O))``#R30`"@DD``F))``(B2
+M0`!\DD``:))``%-(1V5T1F]L9&5R4&%T:$$`````4TA&3TQ$15(`````4TA!
+M=71O0V]M<&QE=&4``%-(3%=!4$D`1V5T57-E<D1E9F%U;'1524QA;F=U86=E
+M`````$%D:G5S=%1O:V5N4')I=FEL96=E<P```$QO;VMU<%!R:79I;&5G959A
+M;'5E00```$]P96Y0<F]C97-S5&]K96X`````4F5G1&5L971E2V5Y17A!`$%$
+M5D%023,R`````$UO=F5&:6QE17A!`$=E=$1I<VM&<F5E4W!A8V5%>$$`2T52
+M3D5,,S(`````7"HN*@`````*6P``)7,])7,-"@`J/WP\/B\B.@``````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````!``#````,```@`4```!X``"`
+M#@```-@``(`8````\```@```````````````````!P`!````"`$`@`(````@
+M`0"``P```#@!`(`$````4`$`@`4```!H`0"`!@```(`!`(`'````F`$`@```
+M````````````````"@!G````L`$`@&D```#(`0"`:@```.`!`(!K````^`$`
+M@&\````0`@"`RP```"@"`(#-````0`(`@,X```!8`@"`SP```'`"`(#3````
+MB`(`@````````````````````0!G````H`(`@````````````````````0`!
+M````N`(`@````````````````````0`)!```T`(`````````````````````
+M`0`)!```X`(``````````````````````0`)!```\`(`````````````````
+M`````0`)!`````,``````````````````````0`)!```$`,`````````````
+M`````````0`)!```(`,``````````````````````0`)!```,`,`````````
+M`````````````0`)!```0`,``````````````````````0`)!```4`,`````
+M`````````````````0`)!```8`,``````````````````````0`)!```<`,`
+M`````````````````````0`)!```@`,``````````````````````0`)!```
+MD`,``````````````````````0`)!```H`,``````````````````````0`)
+M!```L`,``````````````````````0`)!```P`,`````````````````````
+M`0`)!```T`,``````````````````````0`)!```X`,`````````````````
+M`````0`)!```\`,```#4`@"H$`````````````"HY`(`J`X`````````````
+M4/,"`*@(`````````````/C[`@!H!0````````````!@`0,`:`0`````````
+M````R`4#`.@"`````````````+`(`P`H`0````````````#8"0,`(`$`````
+M````````^`H#```"`````````````/@,`P#X``````````````#P#0,`H```
+M````````````D`X#`.X``````````````(`/`P`8`0````````````"8$`,`
+M^`$`````````````D!(#`/```````````````(`3`P"8```````````````8
+M%`,`Y@```````````````!4#`&@``````````````&@5`P`5`@``````````
+M```H````(````$`````!`"```````(`0````````````````````````````
+M````````````````````````````````````````````]O;V".?GYQ?4U-0J
+MO[^_/[*RLDRKJZM3J*BH5JBHJ%:KJZM3M+2T2L+"PCS8V-@FZNKJ%```````
+M````````````````````````````````````````````````````````````
+M````````````````````````]?7U"=[>WB#`P,`^H*"@7H:&AGE\>WF6?'QV
+MJ7U^=K%_@'FS@(%YLX)Z>+&#>GBI@WY\EXJ*BG6EI:59Q,3$.N+BXASV]O8(
+M````````````````````````````````````````````````````````````
+M`````````.GIZ17(R,@VFYN;9'U\>XQZ=W*VD8Y\W*FHC?"ZNJ#ZP\2K_<G+
+ML_[*S+7^R+6R_L&JJONTH*#RHX^*X(I^>KN%@H",H*"@7\W-S3'L[.P2````
+M``````````````````````````````````````````````````````#@X.`>
+ML[.S2X*"@GQT<6ZWE(UYZK&NB_[!P:'_S\^X_]C8Q/_=WLS_W^#0_]_@TO_<
+MTM'_V,S-_]/&R/_'N[S_NZNK_JB4CO**>W;"AX>'=[FYN47DY.0:````````
+M````````````````````````````````````````V=G9):*BHEQV='27@'AO
+MV:F>?OZYM(__R<>I_];5P/_@X-#_Y.37_^?GW/^\O+7_9&1A_ZFEI/_BW-S_
+MXMW=_]C2T?_,Q<;_N[6V_ZJEH_^<C('IA7YZG:>GIU?=W=TA````````````
+M`````````````````````````.+BXARDI*1:=W1SH(U]<.BCF'']N[.*_\K%
+MI?_6U+W_X-_/_^?FV__IZ=__RLF^_YZ&/O]O5Q'_/#HV_Z^LK/_EX.#_X=S<
+M_]?3T__*Q\;_N;BX_Z2EHOZ<CH'QBX%[JJBHJ%;DY.0:````````````````
+M``````````#L[.P2N+BX1G=U=I2$=VOEH9)G_K>J>__)OYS_T\ZR_][;R/_E
+MX];_Z>C=_\G(N_^CBD'_Z)D#_^>7`_]O4@C_1D,]_Z^LK/_AWM[_W=O:_]/3
+MT/_&R<7_K[:S_Z"BF/^;C7OSAW]ZHKFYN47L[.P2````````````````````
+M`,[.SC"(B(AW?6YKVIN)8/VPHFG_Q+2*_]+'J?_:T[O_X-S(_^7BT?_+RKW_
+MJ(PY_^N6`/__F`#__Y@`__"6`/]W60;_-S8U_[.QL?_=W-K_V=O6_\[3S?^\
+MQ\#_J+2K_Y^?CO^>BG/RC8J)?\[.SC````````````````#CX^,;HZ.C7'!J
+M;+.0>V'\J)=:_[ZJ=O_.N9+_V,JN_]W3N?_@V<#_Y>'._\&R7__IL$K__[)0
+M__^A+O__CP;__XX`_^B2`/^.=PW_EY63_]G9U__7VM?_SM71_\#.Q_^MPKC_
+MHJ^?_YV7?_^2?FS4HZ*A8>/CXQL``````````,?'QSB!?X"'=F=BY8V'4_^N
+MGV+_QJ]]_].\E/_;RJS_WM"R_^'7O?_DW\K_X=N[_\&NA___T:3__\N7__^U
+M:___G3+_@5H3_Y*,=O_9V=;_VMW;_]/9U__)U-'_O,[(_Z['O?^DNJK_GZ**
+M_YR&9_J.A7Z:Q<7%.0````#KZ^L3J*BH5W)K;+-T;U;\B)%._ZND9O_#M8+_
+MT<"5_]O(I?_@SJ__XM2X_^3<QO_EW\O_NZZ4___=NO__UJ[__\>4__^T:?]S
+M6"?_B(:&_]S=VO_5VMC_S-?3_\'2SO^TS<;_J\J^_Z7`KO^BJY+_FY%L_Y5^
+M9]6GIJ9;ZNKJ%-O;VR..CHYT=6)CW6=V2_^"EDW_H*9C_[BV@/_)P93_UL>A
+M_][-JO_BT;3_Y-?!_^+:P_^ZK)'__]Z\___7L/__QY7__[5I_W-8*/^$A(/_
+MT]C5_\K6T?_!T\W_ML_)_ZO,PO^IRKK_I<*M_Z.PE/^=F'/_F8%=]I>/BHC9
+MV=DES,S,,H%]?XUP8EWN9G]3_X*<7/^:J6K_KK9]_[V_CO_)QIK_U<RH_][0
+MK__CT[G_X]2\_[6G@?_ITJS_Y\VI_^B\EO_IKG7_C'5#_Z*HH__+U]+_O=3+
+M_[+1QO^KSL'_J<RY_Z?(L/^EOJ3_H[*1_Y^==/^<@UC^CWYPK,3$Q#K$Q,0Z
+M?75XFW!O7_=GG%[_@;!J_YB[>?^IPXC_M\N7_[_.G/_)T:7_T<^M_]K3M__A
+MTK7_V\JM_]S0L/_7T*__U-*O_\W&L?_`P[3_OLW%_[;1R/^LSL'_J,JX_Z?)
+MLO^FQJO_I+^B_Z2ZF?^CL8O_GZ%W_YR(6?^2=5[2M;6U2<#`P#Y]<G6A<()F
+M^FBQ;O]^P7?_E,J%_Z//DO^QU:'_NMFH_\#:K/_'VK#_S]VW_];<N?_<U+G_
+MX-*W_]G0M?_0U+7_P,:Z_[?+P/^KRKO_J,RW_ZC+M/^EPZG_I<&B_Z2^F_^D
+MNI;_I+B1_Z.TB_^?I7?_G(=3_Y=O3N2LK*Q2OKZ^0'YP<Z-NBF[[:+M\_WO%
+MB?^0S)C_H-&D_ZS6KO^WVK?_O=R\_\/?P/_(X,3_S.#%_]#AQO_3X,3_U=K`
+M_\K9N?^KR:;_J,NG_ZG+I/^IQ9[_I[^5_Z>^E/^HOI/_I[N0_Z>ZC/^FMXC_
+MH[!^_Y^?:?^;A$S_F6A!ZJBHJ%:_O[\_?W!SHFZ*:_MGN7/_>\5^_XS+B?^>
+MT)?_J=6A_[+8J?^[VZ__P=VR_\7=L?_,WK/_TMRO_]K:J?_@V*#_T=FG_Z>Z
+MF?^@LH__H:N*_Z&KA_^BK(7_HZV%_Z.L@_^BJG[_HJAZ_Z*E=O^AHG'_GY=A
+M_YI_2/^58SWJJ*BH5L+"PCQ^<G6?<']H^F6S<O]ZP6W_C,5V_YS+A?^KT)/_
+MM-2>_\'8J/_,V[#_TMRS_]K<L?_=V:C_WM>F_]C7I__-UZ/_L+BA_Y^SF_^?
+MKY/_GZ:,_Z"DA_^AIH;_H::$_Z&D?O^AH';_H9QO_Z";:_^>D5__FGE$_Y-E
+M1.BLK*Q2R,C(-H!W>IAQ<UKW9JE4_WNZ6/^.P6C_GL=[_['.DO_!UJ?_S]NV
+M_]G?O__@W\#_XMVZ_]_:L__;V:__U-FJ_]#:I_^[NZ/_J;*A_Z"SG?^?MYK_
+MH*R3_Z"FCO^AI8G_H:."_Z"==_^@E6O_GY%C_YV&5/^:<3W_D&I0X+2TM$K3
+MT],KB(&$B75J7?!KJE?_?;M?_Y#"<O^ERHS_NM.H_]+?Q__=Y-3_X^79_^+A
+MU/_=VLG_V]?%_]35OO_-T[C_RM2U_\_/O/_'R[O_PLR[_[K-N_^TR[G_K<*T
+M_Y^SJO^=L*3_G:N;_YNAB_^:F7W_EXMM_Y%X6O^)>6[)P\/#.^/CXQN:F)EK
+M>&1JVW6K@_Z`QI?_D\RH_ZG5N__)Y-C_X>WH_^?Q[?_J\>[_ZN_N_^+KY__8
+MY]__U.;=_]+FV__1Y=K_YNKH_^SKZ__L[.S_[.SL_^SL[/_L[>W_Y>CM_]+;
+M\/_-V.__P]/M_[;-Z_^@Q.#_C:O`_9"5FYK8V-@F\?'Q#;>WMTEY;'.S>HV`
+M^H#%G?^:S;'_N]O+_]SLYO_H]/#_[O?T__#W]?_O]//_Z>_N_][JY?_9Z>+_
+MU>??_]3HW__H[.K_[>WM_^WM[?_N[N[_[N[N_^[N[O_N[N__Z.GO_]7<\/_&
+MTN[_L,;G_Y2XT_]_E:KLI*:H:^KJZA0`````U=75*9"+CGUT9W/E>KF:_H_+
+MK_^WW,[_X?#K_\[:Y?^HLLS_Q\_7_U1:>?^JL+S_G*6X_V]YE?^(E:C_:W:.
+M_[&UP/]>8G[_S<[4_WV!G_^/DJG_>7V7_X^1I?_P\/#_Y^GP_\K3[/^HOM__
+MAJ/`_H&-FK_%Q<4[``````````#M[>T1MK:V2G9H<[.%EY3\CL>P_[+8S?_F
+M\>__S-/H_XV7S/]L=J[_,SR#_YB>OO]U?[3_<'VO_Y&?P_\I-(7_F)Z__S0]
+M@O_#Q=3_1E"8_Z>KR?]?9IK_/41W__#P\/_O[_#_W>#I_Z2WU_][DJSSGZ*E
+M=./CXQP```````````````#=W=TAG9N<:'5D>-J(JJ;\I-+#_]_LZ/_6V^S_
+MC)75_W)]S?^@J-O_IJ_:_[_(X/^7HM7_FZ?5_YZJUO^\PN#_7FK%_\O.Y/^I
+MKMS_GZ;9_X>/SO^DJ<__\/#P_^WM[?_<W^#_DZG`_H*+E*K-SLXR]O;V"```
+M`````````````//S\PO,S,PSA7V&DX%\B^J=O+7^N=K._\W=Y?^GL-[_N;_C
+M_]+7Z?_`Q^+_M+S?_Z>QW/_"R^+_HJS;_\S1YO^:HMK_VMSJ_YJAV?^_P^/_
+MHJG;_XR5TO_O[^[_XN/C_ZZ\P?UYC9?6M[BX3.SL[!(`````````````````
+M`````````.WM[1&ZNKI&@'B#H7Y\C>N,M;#]L-?,_\S?X?_@Z>K_Y>OL_^+H
+MZO_CZNK_W>/I_]SDZ/_?Y^K_ZNSN_^3E[?_M[O#_Z.GN_^3E[?_BX^S_Z.CM
+M_^7EYO^ZQ<K]>HV9W**FJ&ODY.0:````````````````````````````````
+M`````.CHZ!:ZNKI'@'F%FFQKA.2'KJW]I-'#_L/BUO_8Z>/_Y>[J_^CN[/_I
+M[^W_ZN_M_^OO[O_O\/#_\?'Q__'Q\?_Q\?#_[^_O_^SL[/_BX^3_L\#*_(&1
+MG=2DIZEJWM[>(```````````````````````````````````````````````
+M`.WM[1',S,PSF9>;<FYI@<1QA97P@K*K_9G,NO^SV\S_Q^38_]+HW__7ZN/_
+MW.SE_^ON[?_N[N[_[>WL_^?GY__9W-K_O<3*_I*AL?"#CIBGN;J[2^7EY1D`
+M`````````````````````````````````````````````````````````/3T
+M]`K>WMXAM;2V3XF'DH]R=(K(<8>6[G*DI/I]N*_]AL2X_H_-OOZ;T\3_SMG9
+M_M+4V?[&RM']J[._^HF5I>M_BI>]GZ*F=-#0T##N[NX0````````````````
+M``````````````````````````````````````````````````````````#M
+M[>T1UM;6*;6UMT^3DIM_>7Z1KV]\DLML?Y78;8:<W7&+HM^"CJ7=@HJ@V'Z(
+MFLJ'CIFAHJ6J;<?(R#KEY>49````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M\O+R#.3DY!K4U-0JR,C(-L+"PCR_O[\_OKZ^0,#`P#_$Q,0ZS,S,,MS<W"+L
+M[.P2`````````````````````````````````````````````````````/^`
+M`__^``!__```/_@``!_P```/X```!\````/````#@````8````$`````````
+M``````````````````````````````````````````````````````"````!
+M@````<````'````#X```!_````_X```?_```/_\``/__P`/_*````#````!@
+M`````0`(``````"`"@```````````````0````$````````V+@T`/#$-`#XX
+M'@`L*RL`-30T`$$V#0!321H`1$$V`!LA5@`B*%D`)B]O`#I">0!G=D@`:6E6
+M`&5U5P!S<E(`>&QD`'AW:`![=W<`C5X4`)Y\$`"D>0L`LGT!`)9>,0",9R@`
+MF&<X`)IR/@#&>P$`E&1$`)IY10"%>5L`F7A7`(-M;P"->&H`E7YH`(%N=P"(
+M=GH`:8=+`'V32P!HBE@`:)=9`'Z96`!IK$<`>;=,`&>N6`!VNEL`=85I`&:?
+M9P!^B7@`9Z5G`'Z@8P!KLV<`>;IH`&*I<P!ING4`>;]^`'C"=P"XB`P`M(@6
+M`+"B-`#5F0``_XX#`.R8`@#ZE0$`_Y$3`/^?)@#^G3,`SZD[`/ZE.@"$C4P`
+MFX%.`(:$4`"<AU0`FY=8`*656P"QGU\`CZ%=`(F[50";B68`G)1G`(Z`?`"6
+MAG<`G)5X`**9:0"CC'4`H9EW`(^H:P">IFL`A+U@`)^F>0"-NG(`G;%V`*FF
+M9P"RI6H`HJ1X`+FI=@"HLWL`M[-\`,*W70#UKD0`_JY?`,VS:P#8N6D`PJMX
+M`,JX>0#^M&,`A,)L`)/!:@"*Q'@`F<5[`*3&>0#3P'H`+3F1`$M4C@!<9(H`
+M<'.,`$I8OP!88JL`;':R`&YYR@"'=XD`=HR8`':VC@!UCZH`=ZFH`&W!@`!X
+MQHD`?,27`'["M0![A<X`B86&`)*)B@";EXH`AH:7`)B,E0";EI8`I9:)`*::
+MEP">IHL`G*>6`)ZTF`"AJ(<`N*V*`*6WB@"XMXL`HZ:7`+RJE`"CN)<`M[>8
+M`(F6JP"CG:<`DZRN`*BHIP"VJZD`I;>C`+JVIP"DJ;8`J+:V`+FXN`#'MHH`
+MQ[N5`-.]F`#]N8(`PJRK`,2^K@#&NKH`][JD`(G)B`":RXD`ALF7`)?,F`";
+MT9D`ILN(`*C'G0"URI0`J-&8`+G1FP"'QZ4`E,VH`)W2I0"(R+@`E\NW`)_0
+MOP"FQ:<`OLRA`*?4I0"XUJ0`J,FW`+;$O`"GT[4`NMJU`,7"EP#2PYH`_L6&
+M`/[*FP#AVIP`R,6F`-?*J`#'UZ@`V-BI`,?(M0#9SK,`R=BU`-C6N`#@S:T`
+MX-:B`/[3JP#@S[$`]\F\`.'5N`#^W+@`R^"[`(N4T@"5J\\`K;;3`+2[X`#`
+MOL``T+_"`)S`W@"KR\$`M\K%`*K5Q@"VU<D`O<C:`+?>T0"\W](`O>#3`+?'
+MYP#&Q\8`TLO+`,;4R@#7UL8`Q<K5`,O6TP#8V=<`XMO%`/?9S0#AW=H`]]_2
+M`,G@R`#4X<@`R>/9`-7EW`#DX,H`Y>37`/?AU0#/UN@`V>;D`.CKZ@#H\.T`
+M\/#O`.CJ\`#K\_$`\/'P````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`-D``````````````````````````````````````````````````````)^9
+MDI*(DHB2BHJ*BIG9`````````````````````````````````````````-F9
+MB(6+DI6<Q<G)I:2:DXJ*BID```````````````````````````````````#9
+MF82%CI7%R<S,Y^CQZ-K:VJ:DFHJ)F0``````````````````````````````
+M`)F(A%^/P,G*Z.CK]/7TZ^OFYN;:IJ2*BHF?````````````````````````
+M``#9DH16CI'%R<SQ]/7U]<F#A.;N[N[FYJ:FFHJ)B@``````````````````
+M`````-F(45-@D<7&S/'N]?GUY1\#!"7F^>[NZ^;9GYJ2B8K9````````````
+M````````V8124U21P,G,\>[U^?7H4SL5`06$YOGN[N;FY9^=B%.*V0``````
+M````````````B%%/5&C`Q<KL].[V]>A0.S\_%0(%A.;Y[N[FYMF?F8A5B0``
+M``````````````"*44]+8*#%QLKH[O7UZ%`[/T!`/Q<&!8/F[N[KZN>]GI*%
+M4XH``````````````)^#(TI>8*'%RNCL]/7H4#L_0$!`0#\7`06$YOCKZ^?E
+MO9N2A56:`````````````(@B24M@:*+&RM+L[/3`1&1%0D%`0$!`/0<3V>OK
+MZ^KEO;R9BU-5Y0``````````F20?2DQHH*+*RM+2[/1C9V?"PFI%03X<%3R9
+MZ^OKZ^KGW;R;DE-/B@``````````A!%(2UYHH*+-S<K2[.SUR9//S\/"9444
+M")GN[OCKZN?=W;R>C8M/5=D```````"9)1!&2EYHHJ+&S<W2[.STRI/3T\_#
+MHVH9")GN^.OJZNG?W-R\FXM328H```````"'$0U&2EUBH:+!S<W-TNSTI9/3
+MT\_#PF49")GKZ^KJY]_=W+R\FXM33U7E`````-DE$`TG35UBD<'!QLW0TNSL
+MI:#3T\_#HV49")+KZN?GW=W<W+RXFXQ?3TFD`````)DD#B@J35AO8L#!P<;0
+MT-'2Q9/V]NW1IZ,;#IWJZN?>WM[<O+RXC9!64"")`````(H1#R@S5UQAKZ_`
+MN<;&TM+2Q6AP<'!I9F94DN7GY][<W-R\N+B;C9!64$E5`````(@1*3(U6VZM
+MKZ^QQ\?'RLS0T-+2RLS,Y]KGY]W?W-R\O+BXN)N4E)!:4$D@I@```(@2,#=K
+M;:FML+N[N\?'R\SHTM+2RLK,S+W)W=R\M[RXN+B4E)24D)!:4$D@I````(<2
+M-C<XJ*BLNKN_O[^_U-34Z,S2RLK)R;S<N+B\N+BXKINNE)20D)!:4!X:G```
+M`(HO-GY_JJNTNKZ_O]3P\/#P\/'Q\?'QNZRNNKBPD)20D*V0D)"085I82AX:
+MI````(<2-GXXJ*JLNKJ[O[^_O\O4Q]3(R,3'QXR0D(Z0CI"088Y:85IA6EA+
+M2AX8F@```(H2-C<Y;:BIL+"ZN[O'Q\?4R,C(Q,C(N8V-C)")CHZ.CHZ.6E]:
+M5%]021X8G````(@2,#<U:VUNK;"QN\?4U,C2Q,C$R,C'N9R-C8R0BXZ.CE^.
+M7U945%!021L8GP```(H1*2TN66QNK:^[Q]34[.S2TM+(R,C(QY69C8V-C(N+
+MBXM67U905%!)1QH=I@```)<1)BLL3FQOK;O'U.SL[/3T]/3(S,C(QYR<FYNX
+MFYN,D(N0A5]44$M)'AL@I@```)HA+S0U:VVMNL?Q\_7U^O'QS/'HU,O+Y^CH
+MZ.?GR]W=GIV8GIB,B(534A%2`````.4E,7Y_LK.^W_+X^OKZ^OKZ]?/S\_+R
+M^/GY^?GY^?GY_?SW]_?WY.3;VYB>``````"'$WNJLK[>X_CZ^OW]_?[Z^/7X
+M\_/S^/GY^_O[^_OY^_S\]_?WY.3;VY:]``````":)7J`LK[?\_KZ_?W]_?[]
+M^OCX^/CS^/OY^_G[^?O[_/S\_/?WY.3;?98`````````A!.`LK;>\_KZV^G]
+MF'2=\YUZGGQZO=ETE^Z=AIV7AMG]_?SWY-O6?)X`````````FGEZLK/>\OWZ
+M?-;9#`ETZ7(,GG,+=)8)=/@,#)UW"7/[_?WWY-O5?>D``````````(>#LK7>
+M^/W]U=6"<7)W]W=WX'AQ=M9Q=^YV>.EW"W+[^_S]]]9\G0```````````-EY
+MAIBWX_W]V]5X>-:"^O?;UH+6X-=U@OSWU]6">.G[^_S\X-66````````````
+M``"7>7VVX?C\V-75Y-C6]]75X.37V.2"U?F"@N3@U=7[^_GNGI:]````````
+M````````AX:9W.'RY-O8_/?8^-C;]]?;Y/?7V/S8U_?8@M?[^>[7EID`````
+M`````````````(>&?;;AX/?\_/SW_/SW[O?W^_SW_/S\]_?\]_S\[ME\F```
+M``````````````````"'=):VX?+X^?GY^?GY_/O[^_O[^_O[^_O[^_SNZ9:9
+M````````````````````````B'26@;;A\OCY^OG\^_G\^?O[^_O[^_O\]N[7
+MEIT``````````````````````````)]Y='V8MK?C\O/Z^/KY^?O[^_O\_.[K
+MV)V6Y0``````````````````````````````EX9Z?7VVMM[>X>'C\OGY^>[N
+MVM>7EIT``````````````````````````````````.67AGI\?7V!@8&UWNOI
+MZ=>=EI:=YP```````````````````````````````````````)V6>GIZ?'Q\
+M?):6EI:7GP````````````````````````````````````````````````#=
+MW=W=Z>GF````````````````````````````````````````````````````
+M``````````````````````````````````````#_______\``/___O___P``
+M__^``?__``#__```?_\``/_P```?_P``_^````?_``#_@````_\``/\`````
+M_P``_@````!_``#^`````'\``/P`````/P``^``````?``#X``````\``/``
+M````#P``\``````'``#@``````<``.```````P``P``````#``#```````,`
+M`,```````P``P``````!``#```````$``,```````0``P``````!``#`````
+M``$``,```````0``P``````!``#```````$``,```````0``P``````#``#`
+M``````,``.```````P``X``````'``#P``````<``/``````!P``^``````/
+M``#X`````!\``/P`````'P``_@`````_``#_`````'\``/^`````_P``_\``
+M``'_``#_X````_\``/_X```/_P``__P``!__``#__X``__\``/__^`___P``
+M________```H````(````$`````!``@``````(`$```````````````!````
+M`0```````#DX-0!O4@@`=UD&`&]7$0!&0ST`<U@G`#U$=P!G=DL`9G]3`'5S
+M6P!46GD`7F)^`&1D80!Y;&<`>')E`(%:$P".=PT`FG$]`)UO3`",=4,`FGQ&
+M`)9U5P"A=%``EWQC`(=W>`"B?F``9YQ>`&BI50!\NEL`<85J`'"+<`!HL6X`
+M9K=U`'K!;0!\PWH`GH8^`*B,.0#_C@,`Z)8!`/J7``#_G3(`_Z$N`)N$3`"%
+MDTT`C8=3`)R&5@""G%P`GI%?`*.*00"HEUH`FHAF`)Z69@"3B'D`G)EX`*.9
+M:0"CCGH`I)MW`)JI:@"!L&H`GZ-W`)B[>0"EI60`L*)I`*&D>`"ZJG@`J+-]
+M`,&R7P#IL$H`_[)0`,:O?0#_M&D`Z:YU`([!:`",Q78`E\1V`"DTA0`S/((`
+M1E"8`%]FF@!K=HX`;WF5`'I[E`!L=JX`<'VO`'5_M`!>:L4`<GW-`(5XA@!\
+MCX(`>HF=`'6K@P!ZN9H`=*6E`'ZXKP![Q8D`B82#`)*,A`">EX8`BX>7`(:8
+ME0":EI<`HY.#`**5BP"@G8T`I9J6`*R9DP"@EYP`H)V:`*Z<F`"=HXL`GJV7
+M`)^UF@"AJ(8`LZJ&`*.TBP"ZMXD`H:N2`*ZMDP"BHYL`J:"=`**OGP"XJY8`
+MI+F5`(B6J`"2F*D`B)RP`):=N@"(K*H`EZ&M`(*RJP">L:<`FJ6V`(RUL`"=
+MO+4`I*6@`*JDI`"BJ*,`J*BD`*ZGJ`"NJZP`LZNJ`*:YI0"PN*$`N[NB`*2H
+ML0"RKK4`K+*X`+2RL@"ZM;,`O+RU`+.WO@"XM;@`O+JZ`,&NAP##M(8`R[R7
+M`-.\E`#HO)8`P:NK`,BUL@#'N[P`C,N)`)C*A0"`Q9H`D,R8`)[0EP"GQHH`
+MILJ8`+?-EP"KT),`M-2>`(_+KP"3S*@`B\BW`)G,M0"FQ:@`I]2F`+;7J`"I
+MR+<`M\RZ`*G5NP"ZV[D`R<.7`-'`E0#_R)4`P<&A`,K%I0##Q*L`R<>I`-?*
+MJ0#$UJ<`U]>J`,##M`#-QK$`R<NT`,#&N@#$R[L`S,N[`-/.L@#*VK0`V-6W
+M`./-K`#DU:8`_].I`.'5N`#_V[<`AX_.`(V7S`"1G\,`C)73`(FGP`"3J<``
+MFZ37`)2XTP"EJLP`J[;$`+BZP0"CJ]L`IK7<`+2\WP"YO^,`F]/$`*O-P0"Y
+MR<8`I-'#`+77RP"@Q.``N<;D`,?'Q`#5R<H`Q-7*`-G:Q0#'R]0`R];2`-?8
+MU@#BW,8`X=S<`,K@Q`#1X,4`QN/7`-;EV@#EX<X`Y>37`,3*X@#*UN@`U]OG
+M`-/;\`#;Z.8`Z.KK`.;P[0#K[/``[?/Q`/#Q\0``````````````````````
+M````````````````````````````````````````````````E(J'AX>(B)0`
+M``````````````````````````"4;&AVD+S#PZ"?C6IXF0``````````````
+M````````96)VNL/H[/+RZ^;FH9]J:0``````````````````C&$Y=+WH\O/S
+MV0V'[>WKY96(9XT``````````````(@U.72]R?+S^<8D!`&-[>WKY9B'9XT`
+M``````````"4-31!G,?L\_/&)"<G`@6-[>WFY9-W.(T``````````#4S/YK'
+MR>ORQB4G*"@H`P&4[>OJQ(YN.`````````!E&#)!G;[)S?)#1$4J)B8G$67K
+MZ^KGLXIB9@``````F1DM,D:=OLW-\NQ&S+E'*1`UZ^WKZN#?CFXSE0````!E
+M"BP_FYV^S<W-\GK.SKE'!F#KZ^KGX-^&=31F`````!D(+#I!M[[*S<WR>L[.
+MN4<&8.KJXN#AW[!U-C.A``"8#@DO.D)TM[[*S<URRLJ>2!2)ZN+BW[.SCG,Y
+M+GH``(P/&SL]IZF_O[[)S;[-RL#"P>#BW[.SL(Y[<SPN.```B!X@(Z.JJ[*_
+MR,C)S<W'Q\3?M+.SL+![>WMS/"X:``"('R%?I::UMK:V[N[O[^_(L+"PJ'M[
+M>Z=S<T(W*Q<``(@?(2.BIK&RLLC(R,#`R\![<W-U0D)S0$!`/#05$P``BQXA
+M(DJCJJN_R,C`P,O`OY!P=7%Q<7%Q/#<W,!47``"-#QP=24NIO\CO[.S+P,#`
+MD(Z.<'5N<7$Y-S0N$A@``)D/'!U+I[+O\O/R\N_HR,C(Q<6TM+.1B6]N.#,6
+M:````!E;I*VU\/KZ_/KZ\?'Q\?GY^?GY^_KW]?7DX]/@````;%FDK^+Z^OS\
+M_/KY^/'Q^OG[^_O[^_GW]>/C?@``````6%RLXOKPV/4+DX11?%#8#.9:?5)]
+M^_OUX].$``````!E9*SB^O724TU_55313']-Z4[73P?]^_?;?@````````!8
+M@.'Z]])7VMOTU=75]%;TV]K/U_W][=23`````````)ACAN+VV]WU]-S;]-KU
+MU??5W=K2^^W8@0```````````(UCA>+U^?KX^?;X^/OY^_OY^?GYX'T`````
+M`````````)12@N'P\?KZ^?K[^_W]_?OY[=F$``````````````````!C6H*O
+MXO#X^/CZ^_OYZ^5_V`````````````````````#9?5I=7JZNWNOKZ9-]A```
+M`````````````````````````)%\?%U^?H&!EP``````````````````````
+M``````````````````````````````````#_______`/__^``?__``#__```
+M/_@``!_P```/\```#^````?````#P````\````&````!@````8````&````!
+M@````8````&````!@````<````'````#X````^````?P```'\```#_@``!_\
+M```__P``?_^``?__\`?______R@````0````(`````$`"```````0`$`````
+M``````````$````!````````:6!)`&YG4P!\;U8`;GY>`*)\)@"8?U8`@'UM
+M`'&.7`!LGF\`;9]P`-&&`@#=E!$`_YPH`)R(4P"=CEP`E9Q9`)V48`"=DF<`
+MGX]P`)V8=@"AGW``CJQJ`(6^9`"AIGL`LZ1U`-.[>P#_O&X`_[Y_`(/&>P!I
+M;I,`;G>@`'=_I`!^@ZH`?HJL`)F/@P"'D(<`G92(`)66G@"DFHP`I9V7`)^G
+MC@"BJ84`H:B(`*2UB`"YLX\`J:>3`*"IE`"KJY@`H+"2`*2VE@"FO),`H["=
+M`(F,J@"0EJ``E9VY`(BEJ`"'N*,`M*:D`+>NHP"QK:T`I+>@`*VUK@"KOZ@`
+MLK"L`+2_K0"AKKP`N;.Q`+JVM@"QL[P`L+>_`+JUN0#)LX8`QKN+`,.\HP##
+MM*@`Q;>L`,BXN0"'QX<`L\&*`*S,D`"FP)T`H]"4`(O)HP":QKX`J,:G`*?&
+MK0"]R*$`J-.A`+G8IP"MR[$`J\V\`+O:L@#<P9L`R<&D`,G,H0##PZL`S\6M
+M`,G.KP#5QJ@`TLJL`-S+J`#<V*4`U=RO`,'/M`#;SK$`R=RQ`,C>NP#4U[0`
+MV]&S`-+3O@#5U+T`V->\`-'<O@#>VK\`X="M`./6O0#_VK4`EIW3`)*PR0"I
+MM\``IZW;`*>OW0"HKMP`I[':`+2^V0"RNMX`MK_?`+:_X0"MR\``JLW'`+;)
+MP0"XPL@`OL3*`*_9S@"VU<L`NM+)`+S*XP"\SNL`S<7``,C'Q@#(R,8`T\W"
+M`-+,R`#!T\X`T-/.`,7+T0#'S=,`T]+0`-;1T0#0TM<`T-?4`-/9U@#BW,4`
+MXM_.`,+@T0#,X=L`S.7=`-7GW@#@X<L`Y>78`-W>X0#7WO``W>GC`-CHY`#@
+MZ^8`YN?J`./IZP#E[.L`Z^OO`.KL[0#L[.T`Y_+N`.WN\`#M\_$`````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````(V,``````````````!`+F!NCDTZ0P`````````E+6Z@2@*5
+ME4,H```````C&62:7@P+`961/B<````\#TAIF1H;#06-EX,O.P``!Q!)971A
+M=1P#EY"!/1,```063U]M8W-=,(A;5C(2CP`*3EA<:W%P:%I543,L$DP`"1U2
+M66IG9E<R*RH8%0Y+``@74'&?<FQB03\T*10&BP`D4YNLKJ6>HZNKJZ**=P``
+M1SF=?1\W(B`U(1ZMB4(````FAX!Z?7I]>GMVJW@``````#:!I*BHJ:NMIH0`
+M````````1CA4AIVAA$8``````````````)*2E@```````/Y_``#P#P``X`<`
+M`,`#``"``0``@`$``(````"`````@````(````"``0``@`$``,`#``#@!P``
+M\`\``/X_```H````$````"`````!`"```````$`$````````````````````
+M`````````````````````````.3DY!JXN+A&FIJ8<Y24D(.5DY&#GYN;<;R\
+MO$+GY^<7````````````````````````````````]/3T"KJZND2(A7^DGYV&
+MX\+"JOK2T[[^T\W"_LBWN/NLG9OFEHR)J+Z^OD#V]O8(````````````````
+M]?7U"::EI%^*@''5N;./_M74O?_EY=C_P[RC_VYG4__6T='_U]'1_[JVMO^8
+MCXC=KJRJ7O;V]@@``````````+Z^OD"%>6O4LZ1U_M+*K/_BW\[_R<&D_]V4
+M$?_1A@+_:6!)_]/2T/_0T\[_K;6N_YB-?>'`O[]!`````.?GYQ>#?7R?G8Y<
+M_LFSAO_;SK'_XMS%_].[>___O&[__YPH_Z)\)O_)R<?_T-?4_[;)P?^@J93_
+MF(M\LN?GYQ>_O[]`<6U<XY6<6?_&NXO_W,NH_^/6O?_/Q:W__]JU__^^?_]\
+M;U;_T]G6_\'3SO^MR\#_I+>@_YJ*:?+`OKU'I*"B96M[6_F.K&K_L\&*_\G,
+MH?_;T;/_U<:H_^'0K?_<P9O_JZN8_[K2R?^KS;S_I\:M_Z2VEO^=DF?^IYN2
+M@)Z8FG!LGF_\A\>'_ZC3H?^[VK+_R-Z[_]/<O__8U[S_P<^T_ZW+L?^HQJ?_
+MIL"=_Z:\D_^DM8C_G91@_Z&+>9V@F9IO:YUN_(/&>_^CT)3_N=BG_\G<L?_5
+MW*__W-BE_[W(H?^@L)+_H:B(_Z*IA?^AIGO_H9]P_YR(4_^?AW6?J:2F86Z,
+M6?F%OF3_K,R0_]#=OO_@X<O_WMJ__]37M/_)SJ__M+^M_ZN_J/^CL)W_GZ>.
+M_YV8=O^8?U;_I)>-C,G)R3=X@GCBB\FC_\+@T?_G\N[_[?/Q_^#KYO_5Y][_
+MW>GC_^SL[/_M[>W_Z^SN_]?>\/^\SNO_D*_(^KV_P5#O[^\/C(2*F(>XH_[,
+MY=W_M+[9_VYWH/^5G;G_?HJL_W=_I/^)C*K_?H.J_VEND__M[O#_O,KC_XB9
+MJ\GGY^<8`````,[.SC*!@HO5MM7+_K:_X?^GK]W_MK_?_Z>QVO^RNM[_IZW;
+M_ZBNW/^6G=/_Z^SL_Z:TOO2]O\%/````````````````M[6X47Z%D=JJS<?^
+MV.CD_^7LZ__CZ>O_Z>WM_^SM[__KZ^__YN?J_[6_QO.GKK)T]O;V"```````
+M``````````````#-S<XTAXJ7I'^>H>R:QK[]K]G._LSAV_[=WN'^O</)^)ND
+MKLB^PL1-]O;V"````````````````````````````````._O[P_'Q\H]H:6P
+M=I>BK8R<IK&/I*FS@[R_PU'HZ.@7`````````````````````/`/``#``P``
+M@`$``(`!`````````````````````````````````````````````(`!``#`
+M`0``X`,``/`/```H````(````$`````!``0``````(`"`````````````!``
+M````````````````@```@````("``(````"``(``@(```,#`P`"`@(````#_
+M``#_````__\`_P```/\`_P#__P``____````````````````````````````
+M````!W=W<````````(__\```!W=W=W=P``````"/__!P"'=W=W=W=P``````
+MC__P=PAW=W=W=W<``````(__\'>(=W=W=W=W<`````"/__!WAW=W<`=W=W``
+M````C__P=X=W=P``=W=P`````(__\'>'=W<``'=W<`````"/__!WAW=W<`=W
+M=W``````C__P=X=W=W=W=W=P`````(__\'>(=W=W=W=W``````"/__!W>'=W
+M=W=W=P=W=P``C__P=W>'=W=W=W```'>``(__\'=W"(=W=W`(B(AW@`"/__!W
+M=P_XB(B/_____X``B(B`=W<(B(B(B(B(B(>``(B(@'=W````````````<`C_
+M__@'=PAW=W=W=W=W>`"(B(B(@'<(_________W@````(B(@'"/9F9F9F9F]X
+M`````(B(@`CV9F9F9F9O>``````(__\(]F9F9F9F;W@``````(B(@/9F9F9F
+M9F]X``````````CV9F9F9F9O>``````````(]F9F9F9F;W@`````````"/9F
+M9F9F9F]X``````````CV9F9F9F9O>``````````(]F9F9F9F;W@`````````
+M"/9F9F9F9F]X``````````C_________>```````````B(B(B(B(B(@`__X'
+M_\#X`?_`<`#_P"``?\```'_````_P```/\``8#_``&`_P```/\```#_````#
+MP````<````#`````P````,````#`````@````0````'X```!_````?X```'_
+M```!__@``?_X``'_^``!__@``?_X``'_^``!__@``?_\``,H````$````"``
+M```!``0``````,```````````````!``````````````````@```@````("`
+M`(````"``(``@(```,#`P`"`@(````#_``#_````__\`_P```/\`_P#__P``
+M____````````````AW=W=W=W=P"'B(B(B(B'@(?_______^`B``````````(
+M=W=W=W=X``C______W@`"/9F9F9O>``(]F9F9F]X``CV9F9F;W@`"/9F9F9O
+M>``(]F9F9F]X``CV9F9F;W@`"/9F9F9O>``(______]X``"(B(B(B(@```'_
+M_P``__\``/__``#__P``__^``?__@`'__X`!__^``?__@`'__X`!__^``?__
+M@`'__X`!__^``?__P`/__P$`__\``````````$@$`$`'```````L`8P`````
+M````"``````!30!3`"``4P!H`&4`;`!L`"``1`!L`&<``````````````(``
+M@5`*`%4`T@`,`/L#``#__X$````````````````````!4.0`4P`\``\`Z0,`
+M`/__@``````````````````,``!0``!]`)8`"```!```__^"````````````
+M``````,``4"T`&X`=@`*`/`#``#__X``````````````````#```4```<P"6
+M``@`_P,``/__@@````````````````````!0`````"P!/`#N`P``__^"````
+M``````````````<``%```$8`+`$C`/P#``#__X````````$`__\`````````
+M`$@(RH`.``````!+`=X`````````"``````!30!3`"``4P!H`&4`;`!L`"``
+M1`!L`&<``````````````````U"F`,D`,@`.``,```#__X``````````````
+M```````!4-@`R0`R``X``0```/__@`````````````````````%0$0')`#(`
+M#@`"````__^```````````````````0``D`/`"T`+`&,`/H#``#__X(`````
+M````````````!``"0`````!+`<$`%`0``/__@@`````````````````0``)0
+M!0#!`$$!`0`+!```__^"`````````````````!```E```",`5`$!``P$``#_
+M_X(`````````````````$``"0```P0!4`0$`%00``/__@@``````````````
+M``````)0!0"\`$(!"`#H!```__^"`````````````````````E@%`+P`0@$(
+M``0$``#__X(````````````````````"4`````!,`2,`"@0``/__@@``````
+M``````````````)0:0`%`-<`"@`-!```__^"`````````````````````E!N
+M`!``T@`0``X$``#__X(`````````````````#@``4`````!D`",`%@0``/__
+M@@```````0#__P``````````2`0`0`0``````"P!C``````````(``````%-
+M`%,`(`!3`&@`90!L`&P`(`!$`&P`9P``````````````````4`$`&@`\``X`
+M`P0``/__@``````````````````!`(!0```*`"P!"P#L`P``;0!S`&,`=`!L
+M`',`7P!P`'(`;P!G`'(`90!S`',`,P`R````````````````````C```4```
+M```L`0H`[@,``/__@@`````````````````%0(%````9`"P!;@#X`P``4P!Y
+M`',`3`!I`',`=`!6`&D`90!W`#,`,@`````````!`/__``````````!(!`!`
+M`P``````+`&,``````````@``````4T`4P`@`%,`:`!E`&P`;``@`$0`;`!G
+M``````````````````!0```J`#P`"``%!```__^"`````````````````(`(
+M@5!!`"@`Z@`,`.@#``#__X$`````````````````````4``````L`1X`[@,`
+M`/__@@```````0#__P``````````R`@`@`,``````*<`*@`````````(````
+M``%-`%,`(`!3`&@`90!L`&P`(`!$`&P`9P```````````````0``4"@`&0!X
+M``H`!@0``/__@@`````````````````#``!0"@`*`!4`%`#_______^"`/__
+M9P`````````````````!``!0*``*`'@`"@!,````__^"`%``;`!E`&$`<P!E
+M`"``=P!A`&D`=``@`'<`:`!I`&P`90`@`%,`90!T`'4`<``@`&D`<P`@`&P`
+M;P!A`&0`:0!N`&<`+@`N`"X``````````0#__P``````````0`0`0`<`````
+M`"P!C``````````)``````$M_S/_(``P_[0PMS##,*\P`````````````(``
+M@5`*`%4`T@`,`/L#``#__X$````````````````````!4.0`4P`\``\`Z0,`
+M`/__@``````````````````,``!0``!]`)8`"```!```__^"````````````
+M``````,``4"T`&X`=@`*`/`#``#__X``````````````````#```4```<P"6
+M``@`_P,``/__@@````````````````````!0`````"P!/`#N`P``__^"````
+M``````````````<``%```$8`+`$C`/P#``#__X````````$`__\`````````
+M`$`(RH`.``````!+`=X`````````"0`````!+?\S_R``,/^T,+<PPS"O,```
+M``````````````-0I@#)`#(`#@`#````__^``````````````````````5#8
+M`,D`,@`.``$```#__X`````````````````````!4!$!R0`R``X``@```/__
+M@``````````````````$``)`#P`M`"P!C`#Z`P``__^"````````````````
+M``0``D``````2P'!`!0$``#__X(`````````````````$``"4`4`P0!!`0$`
+M"P0``/__@@`````````````````0``)0```C`%0!`0`,!```__^"````````
+M`````````!```D```,$`5`$!`!4$``#__X(````````````````````"4`4`
+MO`!"`0@`Z`0``/__@@````````````````````)8!0"\`$(!"``$!```__^"
+M`````````````````````E``````3`$C``H$``#__X(`````````````````
+M```"4&D`!0#7``H`#00``/__@@````````````````````)0;@`0`-(`$``.
+M!```__^"``````````````````X``%``````9``C`!8$``#__X(```````$`
+M__\``````````$`$`$`$```````L`8P`````````"0`````!+?\S_R``,/^T
+M,+<PPS"O,`````````````````!0`0`:`#P`#@`#!```__^`````````````
+M``````$`@%````H`+`$+`.P#``!M`',`8P!T`&P`<P!?`'``<@!O`&<`<@!E
+M`',`<P`S`#(```````````````````",``!0`````"P!"@#N`P``__^"````
+M``````````````5`@4```!D`+`%N`/@#``!3`'D`<P!,`&D`<P!T`%8`:0!E
+M`'<`,P`R``````````$`__\``````````$`$`$`#```````L`8P`````````
+M"0`````!+?\S_R``,/^T,+<PPS"O,`````````````````!0```J`#P`"``%
+M!```__^"`````````````````(`(@5!!`"@`Z@`,`.@#``#__X$`````````
+M````````````4``````L`1X`[@,``/__@@```````0#__P``````````P`@`
+M@`,``````*<`*@`````````)``````$M_S/_(``P_[0PMS##,*\P````````
+M``````$``%`H`!D`>``*``8$``#__X(``````````````````P``4`H`"@`5
+M`!0`__\``/__@@#__V<``````````````````0``4"@`"@!X``H`3````/__
+M@@!0`&P`90!A`',`90`@`'<`80!I`'0`(`!W`&@`:0!L`&4`(`!3`&4`=`!U
+M`'``(`!I`',`(`!L`&\`80!D`&D`;@!G`"X`+@`N`````````````0`'`!`0
+M$```````*`$```<`$!````$`"`!H!0``!``@(!```````.@"```&`"`@```!
+M``@`J`@```,`,#````$`"`"H#@```@`0$````0`@`&@$```%`"`@```!`"``
+MJ!````$`/#]X;6P@=F5R<VEO;CTB,2XP(B!E;F-O9&EN9STB551&+3@B('-T
+M86YD86QO;F4](GEE<R(_/CQA<W-E;6)L>2!X;6QN<STB=7)N.G-C:&5M87,M
+M;6EC<F]S;V9T+6-O;3IA<VTN=C$B(&UA;FEF97-T5F5R<VEO;CTB,2XP(CX\
+M87-S96UB;'E)9&5N=&ET>2!V97)S:6]N/2(Q+C`N,"XP(B!P<F]C97-S;W)!
+M<F-H:71E8W1U<F4](E@X-B(@;F%M93TB3G5L;'-O9G0N3E-)4RYE>&5H96%D
+M(B!T>7!E/2)W:6XS,B(O/CQD97-C<FEP=&EO;CY.=6QL<V]F="!);G-T86QL
+M(%-Y<W1E;2!V,BXT-CPO9&5S8W)I<'1I;VX^/&1E<&5N9&5N8WD^/&1E<&5N
+M9&5N=$%S<V5M8FQY/CQA<W-E;6)L>4ED96YT:71Y('1Y<&4](G=I;C,R(B!N
+M86UE/2)-:6-R;W-O9G0N5VEN9&]W<RY#;VUM;VXM0V]N=')O;',B('9E<G-I
+M;VX](C8N,"XP+C`B('!R;V-E<W-O<D%R8VAI=&5C='5R93TB6#@V(B!P=6)L
+M:6-+97E4;VME;CTB-C4Y-6(V-#$T-&-C9C%D9B(@;&%N9W5A9V4](BHB("\^
+M/"]D97!E;F1E;G1!<W-E;6)L>3X\+V1E<&5N9&5N8WD^/"]A<W-E;6)L>3X`
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````````````#O
+MOJW>3G5L;'-O9G1);G-TID4``#O8"0!=``!``0!3$3P8G_AQWRGNZV&61NLY
+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
+)_^%HF".+(6-[
+`
+end
Index: unk/src/sys/arch/i386/stand/misc/rawr32.zip.uue
===================================================================
--- /trunk/src/sys/arch/i386/stand/misc/rawr32.zip.uue	(revision 151)
+++ 	(revision )
@@ -1,2097 +1,0 @@
-begin 644 rawr32.zip
-M4$L#!`H``````"*Y3RD````````````````%````:&5L<"]02P,$%`````@`
-M;8)0*5V(P\%G"0``[!4``!(```!H96QP+U)A=W)I=&4S,BYH=&VE6.MNVS@6
-M_F_`[\#1`C,)X,B)DTQZ28+M]((6Z&V;=F=G_]$2;7,CB5J2LN.^T;[E?N>0
-MM-3$P6*P0-%8$L_]]AU>_E2:PF];)5:^KD3;S2M=B.QH.MV<%M-IZ<OPX2P_
-M%M[*QFFO32.KZ50UV?5X=$E?^:^2)?X*(2YKY26H?'ND_MWI]57VTC1>-?[H
-M*^1DH@A/5YE7=WY*],]%L9+6*7^EG3EZ\N3\Z=%)%IEY[2MU_45NK/;J="9>
-MF:*K02Y)C\MI^`SYTZC`Y=R46_K[]F1`=20^*O_;S2M1:G<K="V72GAC*K$P
-M5ORNF]/9Y10$X]$?IA.UW(K.X<!*N_Y4:U4KK6Z68E&9MMTR*R?PY9_O/HM:
-ME5KB\'@T-\8G:0MKZER\\\++6^6$%`M=*5'(JE*ER,*CVSJOZJ!3)@XZU^'S
-M=CS::+\"198O7"9<MUCHNT.2)N'`&LHX!QYK:"0;\%\IJ\QB1RZ8FFCSY?=L
-M/$KTLBD%^\0)#2H#;E;59JWD'(J1$1T4_DJ&XY_3M:ZDI7/P0`V7-\OQ2`8G
-ML@3(%1GGQ4)9$4UAJS)A6@H10JN*6U7F"$E[S9Q;:Y96UF(E28M?G%B9&KY%
-M2*07.(;DL6IQE5$*/4,B;C9YV;G;C;0JA^U3F\*:7?_/(Y=3>3V!,\D_8HO@
-M;G15"5DYF*3A#):_Z*KJS\B=HD94XU1.R9M=QR?AE:U=%$B._A,,2[-I*B/+
-MR-&9SA9(%%,JX@??O1!N9:P7:V4=>16Q)M\GT?`JTM.:LBO40/!?XO?L>JXJ
-MLXF\$(=7*%%=(7L;.'^#^.IF;6YCRG=>5]IO.5G8/SV_HB[?ZP;\H'Y-WRL\
-MQ4BSZ0*V"7775A(?2L%B<_9M(VMUE;G"*NH<=)8UN5S9ZY1O**!MJU$>(AP3
-MFQ75R\;86ZH[SKA=3>?B<Z4D;"]@Y"U9`H>,1ZA1[Y)[(AN.N^DJ4A=&EL,6
-M`L)GK`C^JV4;U7SS^8-LC[G!P:"=^7/?W*A*%1X5N9(M#EI^*(RQI;O*SD[.
-M)^)\-A%G%_AQ<;&/P>^D_E?S"C7T")>+XXDX/3F=B),+L#H]/7_`1I7^#3Q#
-MNC["X^0,E-#A[/@)%-G+X5/GV^XQ2XC^*1N"'[.+V3Y+7M_I1\F?DGQB,N-?
-MI[_N8_!65>TC#$Y/?B4&I`'_.GWR@$'==#?<<!YA`=H3R(?]LX?V%_7\J[1+
-M]:@!QV0V),]F;,1#\?#@#4B,?4S\66)Q1F%,+*9(,OJKZZ6X^?(R543>-LM,
-MS$&J[-4QC1^<@Y1!(H9:&=12[X!43F]GU^$-6GG38:3-\):KR_6ON=(:X[TL
-MJ4*ISL>CV*R'G0#M>&XZ#Z7N)J)4T%//J0SI2V':K=7+E4^5EGHZ>L)XM-1K
-M.DAE1]],B\[5-=12P'^MG>:!U;?]>SP._M4Y#SW&HX+JF]A@_"P-46%"?/OR
-M_I!:2G+&QQ<?7E]E?6D.G<%OXMR-[OC4HB.F43RW9N,PN3"\*[,D]=R01`R'
-M,[_9#<?QB%1._6HCV38T%64C+<4(1N`M#\E4KV1LG/68MI[PPMU>:X9]8F`2
-MOR99-(3S/(]6W7CN>ZQ3&L?I4%!YWGF/".,77M*X+T778%`[=O!*KE6T794T
-MX]>RTJ4HK5ZS-#!U361Z()MM@`V,&GBBEB:`BT28(!9BB%0)^(21$)^>JUX)
-MT@EX:$E=G^L)'EH`"\)W:$]NZ)N0]JGS#)Q"S]$1?^MT]$-,IUS<D-LEX0Y8
-M2XGY^N;E7K;<CP9LZ3FR?<=5X<*`7.&]H,S-Q5OM"16)-R?)#^$((8R',H9]
-M>R#G06[L*E?UJ12+)#F6?$B3$%"Z#W0/>&51J!:.Z!'F>-1GL1,'`1$&>!E"
-MM_RNVZ,!MKP/3G=$XU$"EH>46VH'&$JC7/,+@Q2]V,9&P6#?_:C^@<[A.^0=
-ME7AS#VS#&K8"N83)7^[&-64*2*Q@A!V`_(*3EZ;Z(4`74IQ@+3X!?VQ#%GQX
-M=1X@J.OJI`27]@&G:UG&A6:;/I:J]P%E;]!_0K)VM%"U/Q2<`!.0^1VA?*N2
-M"O"B;D(/Y&&+PJ()0I)1%CI4UHHA3#LWTI9[6/%*YE9@Q?A'P;E4?8Q]T+>!
-MNAO9`AQR*XY[!WN(5Y*)`-(E'Y&?26=B"9'<J5.@Z#O::VAI!GU=PR$A5'MS
-M."*'009_CJV[AD<H508)G+IZ\(#;'1F.%`<LIJ9\DAI2:!9_1*TQJD)C)52]
-M19Z$&635A(*-4#"HD^+KWY\)GAP;Z8NPFL`MFX<6]+-_8$%X$QI>ZJEA%!"C
-MOMNE12_FZ+`D8Z.%E^<&71UZ.4^=`+L%LX7MTF(5HEZ4[3AF-()96:ZU81%3
-M/;'YKFMIAK),WL$@'QMS&<I^7X@B-/EA%G)S=;<Z];2/M-/1LEBI!<9\)9O;
-M"=?BPE2`[>1G=2<+ZL3.VZY@D(\JK+8_,5Z^,3SA$#PTON"7L"0'8(UP%A1-
-M6J<)5%3K@!N(;]U57K>52IV%!H6,/*`DDGN=H,9"6\248'VJT'`,`[M1O)D;
-MR@:$2#K2[T#E2[ADK@I)MB!%J(:QCM#0)S8Z(!WR_6$*&=(,_512@<1B0U`X
-MZ:(:XU'3U7-%PTD<G)_,Q&];1-_I[ZC_.+=BWNY)M[@S42PH$C1+BN`C*L*7
-M<96B0^)36J5^C!!5Z'!%2T4UIZ;;45[R%D3*AD5(O/['Z]BKXF*$>&++=+R<
-M&4N66#HK:86[9>#G0\WA=&K)P"UIWXGP@0)E@*!`=P\[D0FNKQB6?6_QZJO&
-M[#*7$BE5.J_E]WG$!OI`?9)76KG\6=;M\]*:5A":,@EPI>D?1;QH0I9$G,NS
-M9@AUDT/IQB8.KG[!G2!O`G)@3[):_92*EQB4][5"QB21[RB\6T$8-DT/RZ.#
-M*DA0\@ZN7GB<!;05#8ZC]R!"3+H28I_$RR<Z>CA4O0X`1'-U>`41WF[W-2I2
-MGWE!FR,A%P19P:-N?03M$TKR`I/6[<GFW8U"WUG>AU<Q9U_N5H/_B-GQ\;'X
-M0#77B+>\TS2-^+GRSW<W"K74E3?/:C[SU]WM2`D!#]^1R)^7_GE^.2>=7L!<
-MED27'\C$M2IS]OPWIW9KQ:!8\'.!72L7WT)?P"[!>,)L&O`A_'2C@J/H0FAW
-MMX(6@P8>+DP"_W>+/9EMX7>T28U"N5>D.B0"7:$AD\*EA0N2D$PDZO^]>@JQ
-MH%Z8]$1DINDF=!KO:/\+4$L#!!0````(`'UA3RF'-[K#:`\``/L1```/````
-M:&5L<"]S8W)E96XN<&YG[5<'4Q1IMVY%1'#!L"(2!%$14<'0S"@HDB0M"$C.
-MP<4FBS(21B0LZ.**`A*=(0V2&7#0(2RP`X,!#-UD!@$516P)@R`#*$'F=L^M
-M6]_>6W6WOA_PG:JN?L][WO><YWG.J:[J/RS-C<3%9,0``!`W,3YC!0!K4.QQ
-MWR"$[53<S-,!`"'`TLS&`'-C!$^,X!4C6+$Q>\/N[7P.`@`$`!0`@+$@"(`@
-M`($`!01@$.`+8B`$0!!`@0`8`OB"HR`%@"@`A0+`%(`ON`G"``0#%!B`88"/
-MN7P`X@,4/@#S\:0@G@.[!`HB>`W,(!"D@"`,@GQ!2<R'()`"@3`$\@4(L#!$
-M`2D4$*:`?`$@[#0$@Q08A&&0+\"'78;X((4/PGR0+X`+XF`Q=!@<#`*.'L03
-M8YFPJ]A9G`RV@1D%@F`(X@NX884QGT*!8`K$%U#%<&!A"@S!,,07,,=@8:<I
-M?`CF0WR!$""N"B8#QAOCBNL"X@PPR!A&#!0N$XC7P1)CF;"KN&H@[N$&4RA\
-M@8@80ZPPYL,PA2_0%".,X<#",)_"%T@,XO)C,4Q@3%1<<1"7"K\,X^SQ!H`X
-M(3P7C&/$^P'B9?'4,)X);P^(!_%*F/$%W<*DQ!ABA3&?+Y`5PKN*M1'K%2XQ
-MA,N/G^,+^@KBFN'X8%P&O,T@S@R'"^-@\:Z#>'T</8RGQ'L#X1&\@(X'V\.#
-M'>/!IGFPV1[L]QYL((:]*X:M$\/VB&%C@TG#9C.&_3Z&#=#8NVAL'1K;@\:.
-MH;%I-#:;QGY/8P-L]BXV6P>_C1W$]MC\Y1G-BT4Q,3'XN/$!ON#%%ZPPTS%M
-M/@$`$K4F9W1MP@>G<KI2Z`<V&RQSS/JV\?E,4NY?J:6=XN+WC_J]B<@!_SAZ
-MYKKPS5L'%).']FQ='QP6I4#M4/,;?7N;VORB,A_:4+KXN]?0A2[JLTL+U!2I
-M'8^01UTK2MH_S^HC>68,=*<?[PB7V;I\:'W"A_HLN6+[@L5A!6WMI,RVWF;O
-M,:/M;0'RVEHWIWG*O!L2\LT33O4MHB:(;+A?QK@2'>$WK2Y;KY3"_-&@V67*
-M=!'Z>3AML:<DP$KX\#XINZ`QBD'&CEQ)1\-7]6@]45O]52'YNSPZ<:)OV(6G
-MKF6!*GZ>/C_/3^R+L'SUP_Q5C[LU;]_O1\BAM4C'X`JO@)#IET[-+]9H-Q9O
-M^+%L)_Q878@<EY^A:]?)69FW&&W&K.QAE_S0E.?-VG15\&`/U\9JV?N7I'?L
-M:&N>A+K,E%'SI,7<L.E$;&2C:G5E\KQA8W']E[O4;_E]PJD,1OBET<EZ?<*2
-M<V=V2,N5!%??ZK+%M^JAI2EH\P^HP#$P.2&06:>?7CM4;FI+'/RB=SX\M,6-
-M%AF^M_\:>\ERY.2?:>B[)_N\5)\P6GQ6T;*$QETI>?$C?QAO*)6.93_TV&P)
-MKNO]:0U!7P?Y_Y=%Z.71SQ_=CQ^,3;&^I.X]+6VS]`>V34`Z#"/D.G[(#6BM
-M)D7W)#QE\^(7E55>#ZCLS:\-E"=HWQ"^[-;]]`37.;I3NW`TH;,<V?WP]+X[
-M*9J^N>@B?8X4O(9*[<E^'#I#F+QJ]JS?TX2D7GJ&*#/E`MJZQ[6K.1AGNI4U
-MV59V05)<OSEY8>?`A*N,,WEHNJO*`NO!^B3?OR.U]%E5RM0QN7M'G1#DNG_@
-M9U4#HM:[\R:\"/ER73M/0E!`<=GB!';8R">**A^2E+II9(@F]/Q[R$]IPK:F
-M?IUB2@,G-WC[M+/:9]M4YNVN3Z=:=QTBB<J\/V2OGA!<=XGC(8(<LQW1I5]+
-M0`/&3_Q)1:2OT1W=.N6R7-UYVPJ+R!+?`]I%WC:5C&NDO=X\05=QJ!C@<3X$
-M2`45EM?O#DU%JR5#B5UEZ1G[C1M_ENQ5V62EHC(26?+JCE?19P[AKS+',['R
-M"XKM92,A=VKK',WOU#ALU'?,"B'?,]6M^'`_NK94(^\OYB>TEBP?UR<77A>'
-M[C7F^*KME2!_\/6U.W<E:$$[W<_"^4Y%SK#[6V*)'&?0;*BQLR=W+4>]+;1Y
-MP975U53WJ1;UU=L85;.1PZFH0SX&]&W+I"+K74):4,-3JF9A:ZT4=$(XEHT>
-MC]P+(H'#K<'>3RRHRXBYU*'&V4]B5/>*F\<9;7M.%8O_;4)^Z_OKPI&!6%1<
-M*9[;D16_DN-Z^\73"$+J2;U_F*;_N[2,D)"LETP?*N[AL6C0AG*J@?LMI=6/
-M);/Q%D697$\;7L&QYR8V=<A2E]+XXY=<DWT#)+.]S4N<T]MO9!O.?_@M$5T<
-M^:Y'.K3C:Y?RXI/2_8LN=CZAN:9I?J25HF&Q3EX]MT@CHFF7[)1_5W=`@T?^
-M.Y\(UR/+1PZ$MI@7\]88R&::,Z4\'7F<N/.G[H4JAIO)KO7[/8:JB$$IE<:7
-M2;*-JOK6O`'A).XZ@GY5(?GC5_J5^^0GC,SH^X8U3YDY7^5'B#%:\H?)G4U?
-MCU9:*EQ^%ZC+XYS3(V9EKFVJ"H\,+0H_^BU[X<FW9^XF)J=DF1J*1ET%9"%E
-M_]R.^\*5LZI49I%[NCD"C?6_X=:(1&EYFX1>//:4EWQ9M/W/1\%>CF+0['%B
-M8Q,4\>U2L\-SO>L/J^`7+Q6V%*1*EI14/AD(M?>KI:#B:OM;-U_?\3IQ7_*(
-M<OMFX<H2!VY:DM5@CZP+<VX$#AN\_4KO^KALV/4SQ+G':;D;^V;ZU;V%FKL_
-M6M^&3JX[5%/(L]$XH[O)ZKEABDK9L_B*E+9T<</SEQX?WYWFD3'8F6WAUC8[
-M6:/1X>9\+\3=F65Z\21=W,"L)70@4UU9]Q$F8;[J*56$**3F5<\L8845Y!`[
-MIPP;84<C$L>X.'X>IIZMC;!SVD)-=^KQ<7\1/!W%E'F@%:8V9WB857B'-NMP
-MI:68:UP96D3,W/-B+N.U_^E@Y"JA9(RYI=60=&',R?A%N_R67\7NOLSHF(BM
-MYU8MT*4NAR>R=GP(^4E;PX#W\GQ4."O\Z&/3OH];Y'OP]HT-YF_MJ^Q63=$4
-MM6ROL[C1'Y]X*YF49!;B]&,X<9BZ_=PC\[N.H8-=M3GE])JRH!)GTOZP1=Y.
-M$14T@I2M=-/UZH^Z%F<]$N/5.M4GM*I"QVGE\.65`SU%V4&V%S[$J9XB((N,
-M;"&E^6Y(?V)_E4.E1F.H[92"YEGZNZ'Y4.V=R%*X[X#EI%;WE05:9_9.5B)3
-MB&`O,W5E9M>KLF3D*.&8E#3SE/]UY$5DR`D-'X7SMS)[8@Z6M6Q"*^2W^1/H
-MQPF2O,[<W<&#5JXES%\=%.L?WMB5E]>_;/EG_\;#=J*=P492L-R-GR80\VUK
-MMJMG+3:AP?Y3S0V_,1?]T@%51G>V_7IKV8TUJD?KC1TE3T=,W7JL2CY1\3:(
-MJ+P9;B]=JGUC$MC<&DBZ*>L9=#5WS]4&9;&O=IO$Y(7C_F?P8X^+MQV_"=I&
-M59XTBM*6"+;W44CLXT9*1\RH5.T4]S+*#%%-\\I^H#$U6;AI@';8+XIBCBP2
-M1#WGE7:D-IZ?<]MVSW8X(+E:DYO#$0GBAQUD49]IKU1?56?D2.M547OFYD@1
-ML0>3XM(;4K\,<FU/T.LC17\_7>J;I-^7I!EQP<!__:GLFKL["1;:W=I'">WR
-M<A:%Q^XZ0=.W#6;\P/'S->A.M989F:F1PIMAO^^I69^^5?_`G%O(%I1#+)1(
-M^V)]8\9)JJ*3*S$*%FQ^+3SY^5.!A[>7^J<'GX0(3#%&?%LU3M*M86)W@#\3
-MF98Z'+_YL%<VH?G6>`Y%=[?6Y]/P0\JCK%*1Y]?V,EQ"'J8%UB19K6M?R"K/
-MEV*T638*EX67UC`J@DYS7E18-;$M1I_1U18Z#^7;DVH97*X-?9KC)U',IOF;
-MV^N-)<C/K59KI.=KMYI5N$B<^Y(M,F2I[/GN_8H+ST6KCW'@Y"C:NCXT_<H9
-M!2Z99RL5Y9MY):5@Q<<_/S=X$UF2=$!Q?JS3(?E:3?H3_\46C9K?DLZ]:21^
-MIEJKK:/7/]>.G'A,;-.<OD;6_53!*K(H]W)3?+ZI<GSM]I)TL,=XU.#U05+>
-M2Y2NED'P!JV)%P@JX52MKV[5H1J)D.NN4RV*]]P:>ISR?1]XQ?5+W/)^.Z5I
-M$K+F0L_@AC)"YA`WN*'6-8PPW+R1^#F'-;';?,RWD4`ZG>%Z1(M^+=VCP>-.
-M<HM/:*MH1D^[P^.*Q8[#N:R'4/"F__YF_NWS^9_E/RQI9>1=8?E%E#=;_K4=
-M^\U_52M3Z.6,2,7\&NHGLT2?\@6+#U_\(Z^CJ0N2"G*%Y&\VECRK];Y1962W
-M9XV^M9>M>=6WR.:W9>.5]C;)Y8E&^'PQ^9C-+DHV\LU%;IKK9*K6$?NC]^WT
-M/$"YE,PU1X[6#99],?WD2?5F:*[15.IV,'!`=I8UW4>Y/VR1#BMP]2SC8]L1
-MA+R2MT>Z.>!"K-SHXMU[9$:A/L^&8&-EN[NM4&O5].!O0?V'RG*(0[]4DIV0
-M04ZI8]:%1-U>.G4/^@K:=YLZS%BBW'O-<A@D>ON^VJH2*7K*G'0DO3\@Z]E>
-MSQOHPY>MU1T*E>@XJV_3]YP?\E8Y;4]A>@_7MTW2WBT5_1KWM#OJ/DH[=KSR
-MCWO2&P^44_T-WO3)R63GD]T*#!"BK2$IC!22"#T$M]M4=''[T+^4RGRC+M'0
-M'6&-):PW/OX#WKX+,H$OK.XW;!V2"7PK3!KB5;T1/OF`R0IN=@QIF7U0N'^Z
-M?RQ6N$\XX0YS/+-R(G;Q1O1!)YZN:Y4$,NE3PM]JU))A=UE%>4F"*4<1[>4:
-M.Z6P?QWL-U6T<#UT(5E+RP+A'7AGRE-Y(K;@/BKB%S79+:6APSMY:[*=_CT*
-M,>)\$CK&!3\\-__W1^*U!6]99,.&@J88U#6CV\76D!6ITKN2?X[A+$:(]NF=
-MS-!#%&3F&XHL>?&&K(LJ0=W9;XL+68_0P:_SHE\L8II>1ABLLN1JD#@">MJ4
-M>=:Y:<)5NBH!;2T),XQT1IX)]_=>"T,^GHWO)7#0C.-?[X>?LP]@_#+CA_!^
-M_'J5>4D;Z9F?^6'_<W0*ND(\/C!WK4/>1';<5M2M+E#"4^,!JR`WR+-HZY#T
-M<A_!XL71,-`JS'*_.MWY6\79F25#YQ%5`TW2^+/2/M4]HZM4VW)3Q%-Q,BA?
-M`X4#U;T#KW@71([5UFMGNMT>+%YJIR*!%V5<CX3D%;];QW@7Y';(*L(H<ECM
-M]1>76<O>UM+EM^=X(D9G$=FMMZ7_Q?=_2?$H"ZW3WF6^8WZ1&A9=3>55$0PC
-M&Z!@SW]6.-PG:MED>["F2/9Y1:GWT;>;QA^)7MLWC/W2`B8&YF<>Z'G$_A=0
-M2P,$%`````@`;[A/*:/HW`*750$``,`"``T```!287=R:71E,S(N97AE[%I_
-M=!15EJ[J:D)#-:2#W22!1AJZ0$(BHIV9C4,<.Q@9U`S3W4DZ*A%P!&Q;10F)
-M@XH,L1.D\U(LSJ#+G$4'9MA=9_2X[JXZ."+3E<1T3":0$"$)C.:7DI<$-RA*
-M?H&U][[J_$3/F7-V_LR#[JIZ[]5[WW?O]^Z[59V?WK^/$SB.T\-'53GN**<5
-M)_=W%)[C9L[_\TSN[6FU"X[R&;4+LGR/;+,]F??$PWD//FY[Z,$M6Y[(M_U\
-MDRVO8(OMD2VV])]EVAY_8N.F93-F3)<B0]S^:OHSSZI+$X8_-[;>FK`^<NZ#
-M3SQ<^]AU8L+Q;Y<F+/YD0<)6N.[OD!(VJ'AM2[@$1]VG"Q)NAJ,$UUO9<4'"
-M+^%X;"`IX1DX>AYYR(=C3J3@NI/C,G@]=VAN]ZW#=:U<-"_R41Q7!P27\ZQN
-M\Z/P9<)&O'9JYR;-;EB&CYQ)T-J@Z+2*R+5II-[$C9;M-^FXBWAR4<=1"_>/
-M*X#SB)[[WK(L?]/V?#@^7\5K@.KX\<"@V#ANP[*\C0_F/\AQ%0]S&O<G(\<Q
-MQ0G_EVG=.,.+\.4"YJ[(<7R_T+*\;7D/P3GC"IQQ$N[0-?V<W&29+)-ELDR6
-MR3)9)LMDF2R39;),EG]H"5QXS!&2,R1S,%WBW/!E@(\1/B;Z)323+&D[29?R
-M/=#%ZG+3&?#D)V=)D@P=/"YZ'"Y)AG0#=%L,W18%*N(*VU2XK[`=O]W09EJ$
-M9Q[H<9W6Y(*.L[$E7NLTTFX=;9^/[0LGM"\:;5^"[8D3VI>-MM^,[<GCVO=+
-M;R$NK8O;]Y9K)>>A-\[EN:/X,%M8\39\E^_;!S?K'1\%5YN#JTUACK??^7#8
-MJ0^^7ML;=AJ^_=N?#X2=QJ>R;C%!3ZW`/,9,DBL9LKUR<BU:E&2:<DB90@79
-M7!UHO7W%F6"F:9N@WF$FSYI)_0=.Z*)TSTNDPN"*VN"SYCPOR9?B2*V\(RZ.
-M*$J7[M*_D:I`FW#IB'Q/G#N3SD437Y4+;B>/25*@PK#BFVU6(!LGI]^BN#+I
-M%?1AI1,:`F'GBF_R/@-`5D>H1^=0L5?B23DY]MJAUZ][8*U&(7#!`+[DO#ED
-MAQ3G-\B_,'E=-`=I1`4JC,`"*+R7@I/TI^1->6\[G"56N7VO?9;&Y5#U6U5%
-M[?@-[ASZ%5S`E$E^4XZ'/=T'*J3W9L/1$;KT^OIU@!!GQ'E,Q>I3/X:N!C2>
-M-W!"E5?RB5^5Q`04_1Z72MQ7E&[#'A,[FO:X>'82M\>E"X3TLCEJ16/>Q^O6
-M#SL@<,$)HZS.S$8SNG+\3E"GF421G7JRSD"V&-T>T/(&:ID&C,(PYX:^.E)C
-M_]!^$MB)"NI34.12W?8C_D;2"$:B\4K;5%$1PJ3*7M=7;Z\1J^$NLU`M[T_P
-M_BE,2;7295;:C6*U4$7J25??*7NCG8JGP3MQPFG2)1^\[MR3-HDT*-W12D>,
-MV"#4D[/V[KX&>Y/X"72R"I_(!^?_[XD/%#*D=,Y6>J:+0^2L,!C<(65!<U9?
-MHWW`_@G4/2;90%99PE72(Q>E_&?TCF](O](;K[1.%?N%(1*V]_;5V<O$#U$6
-MPH=R*;^T\H6?(`&STF;4"!"*!.R]8BUT6B+4$BKOGW[=JN6O(8EHI3U&(V%G
-M)!B%).$T$.!?6G45"+0S=`VD6:@/9D70G;+7V9'&<B!V&O$!NF.Q30=V/4(:
-ME>YXI7.JV"@TD$%@#$3$J]`U6;B*!/K2"1(P*ZU&(#`(SD`"Y?9N1B%%^)#T
-M`HG_6@LB`A+12EM,Q`M(HII12!5JY8/B\<;<(*E1VABZ&M(D5`4S(NCJ[2<9
-M.J=8`VPU=/NG+XS9]R@RCE?:IP+CF@CC.L8X'1@?B_WUU@-7D8!9Z30"@7K2
-M30;[3D<\D2NM!H.?!1)[[WCZWY%$M-(:HY&PM_35@<#NM2MB.73,$/`[2SXH
-M+#"\?1<I5UH9RG+P<!BZ9=F;X!;D:Q:;A$^0<?S/%UU_F4$%UG.5MBE,E/<*
-MY>`X.N(X)-<`5)S_XPS!&$`F5FF?%G$?TD@5SX*PCLUWW[]N,1*9I73.%!M)
-MOU#?UPCZ&P#U(1&3,*3A6_''\+M=J$"STF.$IN:(`@<B&AQD=I3$(=`?WE"4
-M\H#IIC/(?:[2.H4IL(QT,P?VCCA00UG*9YK3=?86)!2KM$V+N!%)9(C-@'+_
-MG,+SAQF)64K[3%A?C4)5WRG2#-)J`;GE2C:A04-Y7=500R<JD:%L`%]K2JR+
-M:+&>H4P>T6(7N/)\;=L"M,!<I7,*6&!`:``Z0R`SU.)JX6H$95'*F:G_5&X_
-MBY1BE=9I$7<B"2OZ!CSSPHS37R.)64K;3/!*M1#NJR=-(+&S(+M<:;E0HZ$4
-MOS#??R<JDJ&L(2T119Z,:+**H4P?T22NPBE='7]`"\Q5VJ>`!>J$&J#38.\:
-M"20:RF.Q_;_OO6)O1D*Q2N<TILU!.Y)($EL`95%<L^Z)AY'$+*5UIMA/%&$0
-M(ER+O<S>S!3I'%%D2<92&17)4):C=U&5CA8'*A%6-#!>>>N@2IJ5'JO2IA>;
-MR4FAR5'EJ&'Z2Y5+IQ=>WOH"J5>Z+4J;*-:#DZI'FE?+I=$+'WSE<3*@])J4
-M-I,X`/8:=)Q$0T2ZF.4B@S'E\ZND2FF+5>@TL0KVVBSAI$-ATK$!Q/3NXT<`
-M(K4J'7J`V"(HCN8(O"20S1].?GH/.:OT6)1V$?3>1!H<]8XZMH`WW//^9322
-M2>DT@=>'A`;'(.EU4`&4*;^1\.2QOQPGM3CO%]/8HDH7JAT#3`PF^5A*Y<Y_
-M74+".&^G7@R309AWP-'/FJVP5@9O.-P-:Z77HG2(L"+Z28L&"R`5+^_]&"&9
-ME':3>!:4W.)H(-ULWB4P[Y1Y>_3CYDT6:ASU@'B_Z=:ZCYLQ3;`J[7JQC#3`
-MG$@F2W("G<]_<^X\TK$HG2+XO(X,,D`[I`R`T[_C=_,1CDGI,&F;!W-B+N0$
-MI?&;O&]4@`L[8I6N:>#":J&EKUZL<9P48*<#!Z0O3/@:'-`U1VF-`@>$07=U
-MHN(H%]+1PKI_49?>@:!F*^W3-5!]I\0Z0)P%'CX6^Q_V_:\CK!BE,YJMK;J^
-M1G&0`9,`V*V'?GT%8XI%Z0$[P6H=[&L06QQG`9H3H)7?MW83JFN.TA8U`9H5
-MH/WJK\9_1FBSE=;I$Z"E`+3GONY5$5J,TAX]`9H9H-4_4%0,T-HM2J\X`=IR
-M@/:SG:\]@3:;HW1$38"6`=!:SR=]B]!F*VW3)T!;`M#,=_"_1V@Q2FOT!&CI
-M`.UPC&$-0&NU*-WB!&@V@/;\SLP^M-H<I3-J`K14@/:#KW[T`4*;K71`+@!1
-MJ&D$&CKT_5.-2Q%:C-(6/0Y:+5DF=`.X%QMV]Y`U!E(77$:VZ(4:M`$5Q3JR
-MRB@T!-<8A&[8>[;H@ZN,F/4%*IPCN2N6;%P"Q5\\E<9R,<BAC#E_@41.E=-T
-MB0..CQRG2GQ\B4LM,4#RI;09Q&JH<0T&*K6+X)HKLG'JBMJ\TS`V&_<HA<QP
-MS`Q>\J6?H]'/\EPXRO9Y&D<JUXV;']II'"2)E^')@\^?YJ7/+N8A<]1#OS(]
-MMV]?5W`GSXWI3T7HW(5II7;]WENOK.2Z7@;$VK6OU>KDZ*-W<=Q]Y:/M[XZT
-M^U5?U*DT;N-A3-5=&X.+\%AXX6_PC5`V!WB.G*#QS_,<)+9Z>@F`0WZL)R=<
-MX2+I`J<5&H1JB%YF3+%70\<E?4US0YB/N6BBCL-;EU06212Z\L$U5KRD=R_E
-MQ]9S=);`.NK#6@4@5&D+CELJM;*L>=W&X`R&KH)JSR81_(N_`[\1GA(.O[%Y
-M)8>/<3"B.?(+'5SJ`;_!IX<*EY^#V6UPQJN6IM8TG-[@SW53=P9FZX;B4+Y0
-MR7'^;5A/;[^%Q\<_=KO'A56^*_#0Y*;],UB#*5!A\O-^SL]Y?%]#@Y]3+1O;
-MV:#ZR@@"^M>;&.MA2(SDT9L8280\PC`.+LH,X%/F]#'%Z^=`01NI=PDJZ.+Y
-MB0I"IQV=-48_*Z1Q^IDXWM'0Y^/T"?9,N<:>;L*K^RK@A,Q@-@4"_B>9K^"Q
-MESEOX<W,!MSW&("#CD9&MF89CT_(^@A3L-DX^>/\6Z^='QYG'%_DD"^S_9N#
-M\'1([[T!S+@S-PC[$3E)UX%GPE-M0VF:R^7C!]#34\.[\1EV'TWC*M,EJRX<
-M%>I,XVAM,0!P&LF\SSK2N&R_#?[QOETXF=H0W'T0R?Q1ZY+M-\&_D49R(KC[
-M$#;O/,PH2/ZMP;WX#$U.!M\\@C.^^1HVQRYGS>;@FV]@8R5&F5&VU_ASXGHG
-M"\?Y"^QQ^%I[P%U@![U&B>S&V=$5^+.QB]ZEC2#O13,`=1-/LV\$>ZW)Q0N.
-M]N;CFL;^S"._M3.\AG7?Z1*8"1]1C?*J7)?O`BS1'!J_C><**W%PKZ^'U;R3
-MQW/K-;Q'^\?KZ6C3^7'7^#Y!WI.!$V]YB><FFF-L^XO?TVY$M+@276ZYA/6L
-M?AEZ&EG/P@N@=\[QD9>\+3GA#+2JAX_!$8)O?(\3!T<3'*U!]-%,$&<<7-E(
-MD81_V>#&=;T9;&.(YHC)[8(S*UH)CA@GT,JX-#G58RP.[;@>T%CQ]0\+)QZ_
-MZE(M&T#Q@7Z^0!>,@I!56(%PRN*X,?C-8?Q#$0AH969N'WR/HSB,/Y,<_'OP
-MB_\?_,\9':&U(PAQL[/ED-N0`'!*&N;D51N13PK$O:3AL`EU,%%26,"QR'XI
-M&:?V=6$$USSRYKT@JBIZX#X4QMA9-"&#JM\'58_&:U03+')8XO1/L.&1558_
-MK#G+,5BC+FI;"S7]Q6K^0R/QQ^3?A"]:((SB&L="?YNDA6&RLA\"MT1^HB?S
-M0G`_!B0?9]#6,-Q)<O1N6-><1VV`(4PP!"YBMA26P9Y$6`P@:ZQD7BO.'@D`
-M;KCYY4/8LLKJ@0&Q#@;TX^Y8\`K<9L`7+1[?1=-*J(]AF^$:J\NM6DHA`<!+
-M%S&I'GRY9'7Y2G!&R^HV:%FSG0&\AV=SE*"@(*H5A?+OSE8M&6TH)EW!8A>,
-M;LWVT(15B&U[H,((`\7!>IZ#[O#=H=U-K@8^4AVAK][LJ[^K)#V!EQ]+X(M"
-M!>\2KS;)&O0H=-N-C,%(9A?S&5#XULO\17/85H1Q#,(6>Q.X=F1/PBA3/N*_
-M)O0?\#)%?+CHHHIO3W,#_::"5`SYU#W`WH:AYC8R#^4LY(<W@XW,WM)\%GIR
-M1R*/#_8\NO^F[Z@=7A^!"QLA)($30!UO@'^*0]%%OT+QY'AA:!NMW0PW[X`\
-M$PP)#O!SF(G8PR[_#>`*="BY[2T4A:@V^HVD26TD_3`86-?H@1'?Q@Y[F0#`
-MO/C2U)RH)(:=OTDL0VG5]R-C:V)98GFD:@E4>53+T0ZVS5EI"*9?OW9=H&)C
-M.5BU&C8[=CXF?A7BZ*,5(V3VH4Q.T.M_"+>,WX]O:+@VO]'K(OD-[@3I+&DR
-M1?YH"-]9^S=C',"L`RIY6I3`<_Z'H<I(GTY@F9K>Z_+K41-^GF5C^Z9HFT"E
-M-HXN6"HA3EP@]$P4SR+:;6@EK/'05Z="=X"KZ0=NBH.;!'HTBZGH=]G,S\;A
-MP>@96-)RJ72,8WVQ3D_+%K-.ID@%3V/GL8IA"!P]I/48YL844[J8"=0`UZ/I
-M(+:6C]IK]37V&MXOY;VX)8\D+;<O'K<1OFS]CHT0QMMUS7B!"W'X@K6+[GH.
-M;EFMIW=!4&7N@,&2(DXP,A/`-:]%1E)+#V0R^PS^D$4J8R2,^`5T@P_.=H&4
-MEF!0:`H,J<%<R5I@EF4,C73^(O`@#A%S-TO`XUR9JB4)NT+\)Q<A(KO].C\'
-ME<O;<%'@EA!=M`<6<(Z7N5D/$DO&_A!'HXL>@@92C`O:1>?,X6$O"K*K8#$N
-M_>'$V8K;#3@=XTRRX/'FT$_/JRJ8A=3"^7_S+(:D$QGO(2_A_0R9VT/?A7Z@
-M,BG2!L]]&+'>02JX@LQNC\O_B)?6ZS!3B>NYQTL?C4=?!-]A_>M)'^G7$&EO
-MZ:LAGV$OZ@D#B.L2UR,D`&Q,C]_GI45L,#.S4L]J&.U.7%;[68S(OT^U',"U
-M/9.D]3M=?IUJ26%V!H.EXLF/2=U(Z$P<R"0*(!@<^PN!:G%"OTP_/"D<A(%4
-MRR$<+A<"#6`!^RS7T8MVIE>TUG*>MFMIE01A)QWN7)^I'0%<\Q1FN%22K47E
-M52PJL^"$RTP"X#XJX/9B.8*3_!0V#+SVQ;`H;WE-"S9,6QQ]!N9!U3$)7WQ&
-MT^,)BS;YV-13*M?B9RJF[S(^J6=(3I>;PIZG/>P41`4J4B'4XC[\WDP.,Q1Y
-MAV2^]#J^EY*3=]6?]]**6";=+'\*H5"=ZS.Z5R(8F_]+-V3CR;#*4H(0%D$Y
-M2;0UBD,I5YB+ST67OLJQ7\K,?IV'-D[5&@R!(;Y@)=,G1[\2F6.3W=DN>EX[
-M3W*<(A<=H9*M0DD:7^+6@5:4=H-8!U4\.UEQ)E\(U+#?7-QT0102T1>?V_$#
-M_$D,TAF3*[B;Y>0S$/9>/`VR9!D4]@WIA\[#\D(79]/H6)8Y.T+%YS!KCWXE
-MI%ED-!RSWVL,)+J$3YT?71R`H4K<_*Y!DC_]1Z&"7Y24I;Y:L'77TSI#P:,E
-M;D%.FWZY3)?/.S.]E\OT^7,W1[^[W.DX5W@>_["X)*6P`X_BIW)Z''^YS)`_
-M<U<*EV\HN9=W%ITKZ'=>+C,-5[F@ZA14X2\OB57D%N'_B/L?^"BJ<V$<G]V=
-M))-DDUE@`PL$B+(HFM!&%S1Q$]U`-@0AN&')+A$(]A;2=+4M)C.`-H&-D]5,
-MCJNTM7]\:WNE:&MOO:VWM8BMXBZ+24"+_%%$00U(=>*B!L%DD9#Y/L^9V?P!
-M['O?][V?WX\/FYDY?Y[SG.><\_PYYSGGG)%OK)/35E(!O2;FB`PO_VP=EL^1
-MPV6C^-5<7;E:;6*HR/S*B)K,)L<QK[=AH8'V-=K_WE"=77S;<>,H4\\"C&@)
-M*IN46Y?;EQBJ/6!+*'=\EW8%"W0EZ[+`W1[%I-)&PZ$>N#L`#3)C'0J.5&$B
-MMD\[0%'^`4JHW&Q?TGLOE*!L-6K(@.+&>)'_L5[XUY`+74KG@XKS<W&&WQOX
-M@9*YC@XN#<R#23#7`X07TY)==?;9/U"!)5VM8::U>+0WG=]E)#_#=I>4,NB9
-M<\F#*`><,:A5(=2N`'LLC"'4MQF!Q;X+H7;E-QNUT73W>,IS[5ZT^@L#N=70
-MCXL"H`::0$7+I4Q5V:"G70YI:[2A[KP@5/0C5/&V)$>U!;Z/:@)0T6-4/KM*
-MXQ?5FJ6F3(-O+Z@`WR@W,)3.&-D+EALTIS?P/85;:V!Z9R+GSJ'@@#&C_H6I
-M/`U6(%HUY%IA4AHN4I9KAW;PZ@+&&S`A?2U)^9*05%7,]G@#]RA_!EG0^PJ6
-M_Y<-6A6:@<]H%$(L6&=,R/)ZHSWI'K^:DX>Y*5DU@@)9\KS`\?U`L+EJCIT*
-M'P%Y?)Z6S!D5YP]WI5Q:_3RL?HKR.30B:K5:[9<IT_.TZG]S`25++BU<^>5T
-M`Q//T`B0!JCZ-=IBI$DQZ!A_8!E%,:5A^JBNLG(Z98]HE*BT<]P^G;+&\C%F
-M^<@<8.OIQR#$_^*L9*=BH5.5TYD.%F-@H-@TL6MU1*3SQC7\3R.M>S`FEM0_
-MCEY!7^!H#_#Z_`X55!&PIQW'T*=`,]U1T@/54(&U5#=\IFGDT[Y)R6/V+DN&
-M_!EL!)FV"S8[J4R@+1S:*V0"Z\[Y._;=^`1XS>BB:?#?*QCHI\(#\D]93+6/
-MEY88F-`Q(3.@`MMM5/[\+4T/2UJ*RG73#)J`[5I3-T(AJTZAWJG#4X?T'RG3
-M++6M'VIF/GX;1GWC_,9FZ+C#\QM_&#=F?D,I%6@;]D[EZ;QFKV7"F/E-ZG]P
-MR+E;N)%4YCKW"?D^V6.5/9SLL9%[S<L&WI_:[Y$^2I-O(*Y<4@E,)TZE`%BV
-M=;&=.'$[=GII*UJY7*A?*`*M&VA^`UEJ!Q)>3UQ6^,KP>937K%0<0C19.AOL
-M-Q\Z&715Y#*T0^A`1S1T;`-L562;_9"D@^G(0IEX2Y0/?824:[;;BOC0,6PU
-MP6YV#HC<&AT$J<B3-]N<7=!B%7FN2A<C;YY=O-DNIG55V.^"3R@_8`L8``5D
-MJ<XNN2(7,P]JF9$Q;[(27Z[S#?E^<XL9$!YXI\N%LXB,=)YK7BF=Y[?X()X*
-MB<,]\NT6-&JKS0/O3CWD&3C4>M*RT,4L\RFWI%)S%XJ0RQ">K_A^JVA1#@^A
-MJL?2XM;4Q90F[1MD35W,I_Q5CQW28M?L_$JGBN9X8`GU^_FVB(F:R\CB_PJO
-MTJT,W_:LB3(GF^.8]!7[R@7(Q?\TMOCE%,3ZPPLP$FQ(>4XZG\4_%(2TJCU<
-M=#/2@@WMY=O6`;]?Y#@D+V7)4JZ,7)"7<B2[8YSL83'71.A'T@E^?O`\)T\4
-M<KH8[+M0HZX*6S,TB1Q@X[^!),1CB?:R4I1S[MM@&YVH04O4>S].F-`Y&E+!
-M(O:?P7NE8Z]<`<5P+G*!U.7*%1Q)=1QZ>0:V.>>24\D"-MK#F:(#7X8."5=U
-MF2A80`IJ1&L'\#T(OX'MG0+P^Z-Y?`BL!Z;+A/)K.%GO170;J;3Z?=6*"P)0
-M2S%+ZD71AC@:=:A=+KJ5I?<`)`ZIHI%<D%0#'T)-$LN\0#S6<"5;[5NF'-?:
-M`("02LHLNA@SYOS9$-:1&ZEC!M81RM`KB;6%&I(+'5STA$V^'=ZQDE`TDSZ2
-MZ2U*.VB#ROFRCZ-9<QV'.L8!!I5<]*3%M$^N')4S8R3G+_]U3NZ2G)G)G,*Z
-M9"Z:!?+27)60`;K#2!;:SM#"?%LY$GE4*Q?IK?S812#TZ`:B^Y-H(6(:,K_5
-M*V,C&$*GJV"A(*1N]*0-.!`09VDN%-9E,%V>;V+E&#I6Y'9D8*L`+2VF@UIF
-M'\UL9"_/G#V<^9">^<IDD6=?&=O+*+-F#&$X>6EA71<#PYY9O1/KC#E']:T*
-MVVP@D=[%<!H(!SFD69K;93`SHV:&8OAVD49N_;G#Q63/=3',32ZF"'XB_/X(
-MOW[XA2#\"_A=.\_%?`M^OX3?3!C4<W!@@\$=VBN:')$8LGHO<@^K-,0-'.`?
-M^`P*\9.AZ.<F<L!QK$/WCW,<)D>C<8ZP/WU.`8WU,\X1*QL;#^^U!F*E\5&%
-M<QPH([NIUYLCID6Q(1KU">?8#5G__Y,-DNJ9(/@./C09.2D(INECZS(FV5+Q
-M9-W*@0.C11J5/RC3_#`V4LC2$AG[5K/=(B58(45*I(C9Q&<F"V<O\ZA^%&72
-MK:EB%K!3?[6R?I(NZF9W86=@Y(JY<D4AJ2C2Q5TH`H()7X1QFHVF'I`K2E!0
-M+"Q<HXM`+_64LP1<`0,4`F7DD3Y($>H765`?8N2.V0U/PN@*<-40A5DK[-!C
-MQQ'_;-\R#2&4*"O1*<,&`+RH/.@)9T-"$,)V2%N-:2':IU7"HN=!5SO&%//[
-MY(H">6F15@NEE\HF,ZZ\K(Q)IPN!1$7HDEA40S@"DF)!'KD;9\\YLG@N5<(6
-M%/J<W7[0IZT06MZ4DA^MC*>0!07Y49P$(28ID<X_]`TS"J/0U@H7"G*;=-'4
-M5$)G>=%_#QA:6AI.VU=V\*AM(AY@8_[C\$GI570@M69^L1!RX-H5*'^6QOUQ
-M%O.13JDGC70?5*03!BEADA?;-OX(RM@)94B?FO39]7]()]*BGYD.?Y;?B_E[
-M[U&I7V$E6B3HAEJ`<\-SJ^&S9)E'>1U:#B=/(441H%>"<YCEZ`VZ!.=E'LG"
-M%I\M+Z`\^"=`+X",4&EQ2+[>+``_.A"96V\"A1*Z939#A8%DTL6\)C#.G5_Q
-M;>^D8KV!>$LZN#M&ZMR,=79!.J1PXYOD"-D/.L<)M'BCGU@<!T$EPHR?DJCS
-M57DQ*]]CM_%M.!5!.9)LZ@UAD0`%IZN^3*65R@45((2*-5E<`#4J=QX49T'C
-MD:;9SDYA*CGB/`!HE#>EY>^N)-UQ8_Z^T%XT.L1[`>4E`*O2X_?*WKG*T:D`
-MPCN7-!6B7G4$,%RB923[\_<M@J9?7)"_#]H?,SO1G2U/O)HLF.WL@T(.0'JM
-MD"^6DOWQ5#1X\_?)&G*4HI1&"]AD-W!V;3"2+F<4_D91,X+H<M)-#NHS#^CG
-M*YTPY1\X^Q1=G,#,@KV<NDQ9R&(V/V'JR^]&<D*+E$/1N4`M/O0=%%X+;#BY
-M#5T(R.6[2,D%_3*[Z2;DH=A,H7Z^[3;:/DL[N,O[):3*_`K:*)NVT2'2-4N]
-M#>*[H7M()V9(YZ>!"H85`I[5`]V@]:LGX2__T#T8)M@K`VQ429%Z9H3;.",J
-M'IJZ3,?N`C,=$MB_/L^6/LWN6H":!N@Z*%.`=P.B"(%X831RT4\RI-VL<W?3
-M]W%0%5'C!D8VTG,I%G70L;>#NQV')Z(.B!\^F:P+1=]$T7^=+.9(%Q`#>BVQ
-MAI\[#4;:8C/(#IG]$?%R\V4O1W9#@<G2&G\,&79.P!;J;KH*,P]GZF)_1`D%
-MN<@^R.?L;OR`>.V^\&)K>(%E&?&:JSW+NAC4VY0EXZEUA+8]5#ET''B=O(#K
-M,J6,K>@"%DLX`-2*?I(BG02:&9%FSFY>(DB[!1:GTN1,5ONY%*W:MR?K22N_
-MW&X!+8*V'G85($3F5V5.!3M*XZL@90ZLG0_86V=V@=Q?'C6$V2B=(G"Q4@(7
-M#.<VV<B^_$\`^\.?`S(RVP&T=_7V,NC+/)[.H@BF<.47DC(>NS-V+=,^>T+&
-M&9U(IK.W:4$2O7'_??1H+P8(SM[&**K]9!\4#M").8SHSGS#A.Z=N8<_!\4&
-M2)C?BYAA_&*6'(1.J%/KX0S:PZ#WFW8[H_Q#^UEJ6<VUB%:R6TH8^`=>8I$M
-MF,F2UD$8E,"V'7NAIBYYR0.#6"YV'YOX*31-LBDTR+3[)IOB`1%YSF([)/'A
-M'(\KC+P3WPIPXH<V/+H]I>#HZ)E1MBS%@#.RGJX%5MJ[R^WEZ=K3A:Q4>2X'
-M.Q$NVI:`C`4![+,#9N72G@+L*G4L96I%@!X*DEP?LFI(5:TH:;1/X1`*L=B?
-M6(TWC^I/.$907OTP3[X[E]P*8];'@OJ7_X:,E5\".J8/E\C+/3[*\8Y0B&:D
-M5&@WI134$/!<CG@K#3SVP#P0AP`)X-R=2U>4%Q2B>SWR'LO7RL8%M-=/97%L
-M(ZS>_0DZ\U\I-U',WB`6TL#E(YLK-_5"!9<`N33-4F[@Y"**7>5$BIWFCE6(
-M>F`EK9P&`I*!T+:0-Y)0`H.>D;SF*^3%A6$3MH3TZD4095TN6P)U_F%P8!IP
-MY.W`Q?R#D+32]$D2W.*YRLLY8\$M&:[)#>2[G%S-D@/Y1V0#-J/I$Y2J\G>Y
-M9=5>><%<Y8'+LVI8D`.!BUUEMJ,C.""L_".F3RB@RFKY/A;`4""EEP&Q46HN
-MSJ,&/^0MA!J0@X`$[A;0D=`IN@PK0JO1;[V4*C:DB@R-7*Z!^2;9R,EWL-!Q
-MTO+_83HCPQ=(1("US.]57K@L>R4M7NMM&@9:^5@+FFM4JU(,A,M`C'16S=X#
-M1`*#I-N'?=9TT*MU6`^V:=$5B]?;%&CILCV/M!S!!EMT":ZP:U@M0:R\V*B`
-M2'S"I<`LPXB@EV#^VW3(E`,#6DHS5_NZ*FA5:(,\>TEVKWG44,Y#?3IQL1<G
-M,/]/`7O_%6!LK5RMOF"._6*DMK>2`]KDAPY]B6E?X*(/"J`P54T8)6'BW--%
-M,57OA;I8_1I`PVC:JGT4UE_&7T:W*W.<P*#IH$]KO25R*AV4&\?FU:8XXNBW
-M4T[57HV#+8'F`?ZD+!J/#&DN\5)U[*!P,S)L*$3VYF&)Y!M8TMORK?EOD>]S
-M,&B^S^D9+9<6PUVI&!M%>P%%^QND2T?[U8#!=`#1EF^E_77/N"L./)IW[.!#
-M;C1J_`4N#H^ZX"4PENLPD.K>2SJK)3"D]]9*[*W#,$K&PMAJO\7%3'&ZF##\
-M7BIQ,>M*7<S26UW,KUTN9I7;Q<3@EP;V0CND^RW\4B#=*V6NX2E4S845/;@"
-MC,^O_.,,L.>%LY-3FP2LJF2O6SK;K\UVVND<WV7YR1NZ^OXYZ)4X$8G625T,
-M+2M;Z!C_X)?P6=-Z@0J]6&/*3GS)/PJZ!__P[[#_*=%/6?+6P+O1DZQI-Z@H
-M$Z5.BPG=9WUG3.>UER^2+V>3+^>2+U\F7_J3+P/)ET3RY7SRY:ODRX7DRV#R
-MY6+R92CYHN*+Z7P5*-5@^H`5;4;D3/LJ3.<KQ7,DZCCTXAFH]L`9TO4*OA#(
-M-3`0.D:^XA]"8VDUZ5H9[;&LR8PBT:#!J7\:B/$&.S6OQTY`0SSG43IF)?UQ
-MD3$&<L%XKIQ=K7I0>08,KNY8;F<[`$J[!P>=N;UR'':9+H9R6(]5KK0EH4JG
-M+=J4:QXVTFSBRR/`6X&Q?Q,G*4&A($L+07K;B8_:NLZ#(,*IC;.T@)HM5IQK
-M!?/V0BJ=:RWTN)A6,#90(^(?0!<08"*S,_@'?J2Q$#OJ*')%GER72V:05U&"
-MW,'EQ^1OFKHI`[R#DWUS2:6->'`&<QEUF*X<U^&Q@/&Y#=4,R``HZLBY-.1*
-M`#EIC\UY$%?>1N,70J<WJX#<T%*IV3I&*9(&8C/:6ZY21<,"Q@'=F8B4J303
-MW*C($9?9>13U26I-S$9%JH7%Z<W7('"V(]+A9J08=[@'X-J3'AMT^X7-#?D@
-ML+&;F#5]&JH\DU:-N+@PVPV6+J3JJ$3!;3^,NC?J2G82S3^*V=%2">T5<W#V
-M$<E1R6GS;'2ZM3]J$69@L'2"1R21Q2QBM6E'8`J]C32-2YRF9353WE7)ALW=
-M.JQ>SY!69YP\;GO"A'.6R%E[BS#<Q5U:9]GT_UAG`V55-KVN(_6D1!_710_*
-MHD2W79GHW/\K`E]+]/QW:""5E1W<UU&6U?#KM5VDE.5#?P9:]_[JRM1::?Q_
-MII;YRM3J8M`:!$8+]I=>+3,8G9-(10%PW7RZZS*_S&S:C2HU*/F0BMI`=)6/
-MKGN<9*BM@-97Z*<45@&=F+"),TE%(0!Q1H7)Y*#S`(R>W974`++E[Z9N0%;Q
-MVS@DP899YO<I[V5`9LH*BB`CRML#36FD^Q*6L+0`QB)4!:??$'3.9:`1,+Q1
-M&^6WAF'M(G=^DE@=Z>VWJQA21JL"4!=1T#BELK1`3`/`-**2701]GP]-IVLN
-M^*\W<$%5_T<JVY?^/U_9%S4^:.FHY))5;<]`;.?3^NE5^-U76!NJOBVTO;1L
-M/A-?@MU"QG6C/&"<"SGRC_S7NA92==`4E;\I+^1&(7YS^B@EP!+3^I`.[2F`
-MAKT2NZV\5&?$_Y`7L@`T_[7`15/4C\"^";K-7.4S[E)`_X*!`_.&R()J/\WZ
-ME[%9I0MI&[(PKQ3GRJI0L(S"]R&.$AJX.1)Y'VAP2[3*+D7-:3:9@<7\PY/_
-M&EG#F=[QRVN2^"V]##^+OBCU]34TC*FA^;];0Z!,MQ_EDY;OS;2Q^;Z^O*$Q
-MY3TQ-M]6TR(7\RK\7KS=Q=RRV,5\#+\[E[B8AZI<C.T.>,+OE3M<H_V_672/
-M,&L"WWZI@E#M13F>%V`#$Z!_43_%Y+SZ450.CHGIVA+PREI4,)%)V'#/DHUZ
-M#WAQ#B%O68V'SM=/"$RH5E8BA#YISVQIZ*(XA?AG>Y=!+V*!<VG3[Z2S;O4:
-M`"8-71!2I1:&$<T0W_/M^<PN7-JA&<:F'(WNUM;3*'K)PW;T#$=-Y'FZL07]
-M'([@#EKXK8#?*OC=!;^U\&N`WSWP6P\_`7Z;X-<LOV0/(K=^R=ZF/=JUQ\/:
-M8RO6PB!%67)/V_)P>=MR]^WR;/'38L&^7)P!I<]&)!ZSHR>17"S?`LU#G<X1
-MMQAY@H:_B"I"N-R^@N3+]]@MQ45B>ID48:7S_(:S).KLQ5'>E$HGK'K_QF/:
-MYVFQQ;>*W.W29ZSS;?&<\Q-05PHVI,KH7?3)+JITY!_^R+FO:7QXU</+\QV;
-M9I5),?8@A#1^$38C]T*_ESRRRKP\O,2\//\LSN+>9QE>.--1-+T/=:2[5B8[
-M]MXN3'`<,RW)70&0;I<?SL5P\7.H'1+6<8S0^<LW<"I8F$D>>QA]3X#J11`9
-M?IA^R;D_PSGD^?(XVD,>IB[_"YSO-.[!WD'>&SA&'C/3;`_3;#J'+G!&Y<=H
-M6FB0(D`(DT`GM*%;"'R^R=`8%_Q*^$<?1Q\QP3XW[%'#2]J6`SIY5-U<#K_Q
-M9-_M(5P3L/-M%9`NSA(\(\.<[XSRCXR'`N9#G`<D';0#T;>-F=Z;;_H'G;`$
-M"N<?!EB5SK<V&,E;,!P\P+1?T_T8G%T;\G&SKO2&FH\;4F>;NH#\MC+X,X&T
-ML-*K[$%,DY;?!4&-GY)GZ>:$O]',)XD;YRI+3`=:O\)5*?ZA?NPW+]&M$W(-
-M=4P(LUTXRQ8Z%'[I)5KC<EKC)7*:<"M$:-/3@MW5OL1>"-K"2X]10H+MVUYN
-MOP'$>]=AA=R.<XZ%^6>B0Z;\/MD:E84H&\]*=E,DK@'HC<:I%2CRZ)>HD&A-
-MT8%;N7.O/]R^W'X#T1HC;/Z1L[<QK;/<7AB)+R(BMEHN3EB>:;*V#F'WF7(H
-M>/+)X.Z[(%-A/"__#"3`W1;1CXP=UFSXP)T?P=T>,C<;4P"%Z+ZI;DH3X,E=
-M0)?7#BO.<GM)TU6`ERMLCN(&:-!'K@L7O$7[\+VLZ1^8H/$C[$)Z4X2Z!,Z1
-M.*B$NL0$DNYE#":O.1*'_TD>IG0)M]$']J>JF9\[>X4\;/+;\]_3DTH*"VDY
-M&B>>TCW:[+1;'*C4]3MKZ!`?>NDBU0FP>^4!%W#1K@9==KX3YR&MV/OX1X(7
-MZ2I5N4-U#O!M"5`CP'@I,/!MGUY`+Y75.R^,&G+X/3CJ>YC_@CU;`'QLP6Q_
-M@&U`TM%--$@%U9M'W3%"JI@YG)VRX;DZVC9DPGYZV`JNN15XJAN>^;2,:2C`
-M/SA97+-,V0>Z`67(H7X^=)C1S"JIB.';/M%Z$@*;/0RH"`'-1I%16-WPQ&<`
-MQPY_?&'S,\NJE<TCL$0[II-N842N]2(6M7$EUL&C>I.+K*LIET<AL!A,_:X%
-MMN=0"'@UUIZ,O@#L5(]^;*TN`RY-,RB8(7I],IJFOS0-%N.=[5\&"9=<H1@-
-M1,$P"$PZ-LTH>4FRCJ+2L]S.R=RVXYK^8Y:-$&!Q1+H,/1#29>SYM_G8B+3]
-MS#7:(3)WS_63'Q:2"K/S(AJ_T`UM&TSD[@)28<G_W*D`=U%"GPH\])*\"R+J
-M<WG8S,1GS7_5])9<89%]5K*@"`SR<61Q20U4\H"\@*Y_@QKZ#S)`)YGTA3RT
-MU="-V/3JV:=H^.("TT7HG/#*AUH1ZH*YN%`9Q855T20WS854N8!A_F=DH>7K
-M<?%KN"RTR/[1N/A&<%E82%G2/\A!DJ"XF%XEN)B"G-6F8R3K4XI(LC5U<K59
-M7H"Y;*LO%>=;I=.HH\]&25X[E]Q;2*KIQ$*)\WUY%3!J4(J^26&7Y3:EYY]=
-MBK6)IY-%!?FOH0Y-AZBVM),4*B.?>5+"VC0#C1U4E=&&K&+(&=)]^",IPF4>
-M<4-TXPF*I6`OG+G/<:PC=W]X[O[0,;[MURCY]G8L-1S^)#\*F0OZ8Q:QN#\&
-M)AVZ`!/SKZ@I5L?.W&=Z;73&=5?(*'1)'_+Y,3T3Y%C*4G;RVN%/I`3_KS'D
-M*89Y*/A&,+P,LQLH9M15]XJ878;1&X"1,]8T'7L.+?4.[#CD/.F&@@]_G/FV
-MVQEK/$E*-&!+6>S=,[\RG4><D>;Y,>#ZP"NP.<B]R!FMY)W\]YT?-,X@9_*Q
-MH\XNZYA>T5ZKZ@_I<R.4,#L^!_*M`ADZ0(8`9A'94)`_X/Q@P\3\#Z"Y9W=,
-M;Y]<5G&'.*#%P3="HF&8&Y02Z!EH]L3SAJO40;&SMF<#$K:*1;C(K/<,&QZX
-MTGH>IY8:"Z0+&8W7]GZ"'!L4=(@@??FO13\S.<_H-@XO[8;^W_MW1ILT2L8V
-M&<E^Q":_5_;EA:WTA*G\W:;7Y(I<,FE8V]\-ULPW-7O&*B^=JZF#Z,3:'\L3
-MEEU:XO\M3,T+"L%>H0YH]?U?`Z:Z(76Z50X<H[M%.&(AW>HR(>:(Q&*J8&>5
-M?_N(86IWLZ`6JT_N02K!LQN>7L>QXFG/[)S/^/P"\,?B:4_".__32.\+$-E@
-M/8^;5XY3)W#G!6$#F=<#[PT,!/O5(\[8]JV06EC3<#J1#'@,`Y8V'!\.^`4&
-ME#9T#P<\@0$%#<\/!SR%`5,;GAH.0!2$C(!AQ79$+%XH3\-BY&F/T;^_H'^?
-MH'^?I'\10%<*ID42:]X^/K]RE39!:X'Z:[\<S!J_J1\XDDF\'J>JH<(5W.:I
-MQ17FS1.UK7X>]>WBU);T@`&>%6PSZXC$4R#7W/%KZG9S3`TY+9TN4+J&*.1L
-M532K(J?F(&+QV_O=9I.01A/'2VFXMN50X,/N-STT('&RC(EGA=U]VN?@21J/
-M<#!,60@8QXV.R-YD41:O3[GSDL*PSO'OM[9P6)#X;;+:[.AWOB_<*3EG-]8`
-M&)_'%RA4<\YIL!?XY296;N)\9!Y63ST2,,@+S.J1\`^M8;'OZ:>?EIR5`</3
-M=?("B]QD7]/(2['9#;G0OEXUYRBV>R<B5+<242)E>:&(F*[>FZOFW(.T4I[K
-M!UT(G;9Q25MSVD[S*?T?0E_37+9W/G^DC%&J)C!,M5S5UV58>[&,D=8-,LK;
-MN)FSZISN,;X7@4`;<<I;&`X&KU1O9J1Z"R,_2.V*U-G,?#R[`+"XK+B'1HKK
-M,F"Z86#M7P/,]?7`;AD-S*4#&YMDTJCJN=Z&ZGU_?+)Z6U6]>N_/&5L]1(?^
-M[F75G/4]97A<`XY+^BW@-\L,]]/D#^,V89P%>X,JYJEBKBK:5-&JBA:].V":
-M9DBS>G>NELA^A728J)MN#N/X5PY$%0O_2D0N8\'BBZ[>G7?E@O=\F"R8N.G9
-M%L3%7A&ZAR8_?A)Q^!I80:T2R68Y,^W*S9(P?&VS;#\QJEDPW7`;/_4UP"S&
-MKP7F&PT,TUW>QHZ1)#N-1Z&-.RSZQE"QKROU'LC3Y1Y$;J.<`:4_"$T>7IJG
-M?.\0PTA5@VIX*:M\"]ZA!]2-]'"_LF6!@0EDDC[E3TL-3'A7"<`D-X?ZA8D^
-M\H:R9J&!@??/2&K`0/:KEOBI0*;2OQ2WQ%-G5RA<JR/'T#58T"O9<(7%`QR!
-MCM-D5='I5NJT^(#=07@=ULT?WFSQJSEMF&XIIUP\P%`P"`Z"'\8-AW6QG6NQ
-MGK_A(>ZTV8NYY'5]LG@Z7&?Q:GFES69&O$&]"7MXN()3-[`>Y4<`"U2,1>0@
-M_Z>)H;WA<B/;G%U&?&;9(E>8\U,7B6?)9K.7I,&75A00!3V0=;JLW!LC[M-2
-M!.N!L71SWYZIC':FHIF<":G"5.\(#J">>^4T>;,.;"4]2`(WZ$-G,"M+,NE\
-M&P1!OVT];8$60I?3,X$LI:0*^DDJV=_E/G?[$\:@ZLDCJT%(>ATJ]&&Y*B&W
-M#,)X4@(&38#*+>=ZJ;E5E0B[!Y%=*[@K`_U7'L7@U'#58#4T$PQ!CST4:?F!
-M\ILR*,#%A<-]P+#IT0?5'OV@F%"?QL-OUMX@.!>&"^FK"+,W21&3?5#QXCKH
-MH,^OY79$`FJUQU,OIZDYIZ"6B`$TU`K*TEM8I+\J#@)JB):(Z+@'`?PUA//2
-M`5EMD]WG(,Q#.+6:4QTT);(+!4_J`6+\^Q+`U7TN_/2I(;1U@;N;@;NS4D(5
-MIH'ASHJ3T'XB91S838LX/-#%PX(\!MT=!HB4AZ=1<+C6QS%>\HZ`&R@YP/V'
-MYEV6<?/1`PGD2GA!KN=IY8EJ`RZ->)6?5--A:I5-%"ET]]7Z*ZF@Q19#L9SH
-MD#;G,L*<@"4,O05W9"K_2_/8`;DS"35M=%4WD`VY/I(Z"B4+1:D.*H'VG"5T
-M3+@.:D,AYM$-)O[P?>:G$:E[<WT*!ZC(TXG)"Q`0#3/C4RX"_=5Y;[XUGU$,
-MTX">.?A:2[(.P`-TXB^D3M;9V52Z3/D0;'O:6[7$W[XZB1[KZ(\7:!GRLS!N
-M._Z)GC>&S>VR!@?PD0U2"KZ#BJK\&-N\LT[3S^X#T8]KEK4#1RMC=!^>LG@B
-M]K=:"D?,"MB4P12&V481@_K2E^T(*P9]O1J[N=LL1<RR>W`MF89#BYC6;J=/
-M-P=*`OGV(/G>H-JS1I/E*VH?8NUJC_Y`"`A"VX@FNQ/`W?KJ7>C$C?V&C@Q;
-M!X(R@QBP7R159I`?6FJR.B&;ULJT2!TXU5U8@#<(V#@B'H^'PA@16\J==+4[
-M3W9;(0MQ6\D_5\=H+BO68MUI%%6T#UN[W'W;ON-B7#A$H6HZ@J?#H=-`,:V"
-M((VJ`;0RO0"PZ09VHM<[NA=A#@)$W'2VWJ*NY[!"\*0X')E)<=`+G@OH2NN.
-M`E\_WMS@@IK"&.J!K++[%''GRFZ%N`'=T]*Z/I#PY^"7H)(>T%L*R>5UY^3O
-M)9+8'0V'C@YCU^5^W:"U@NP^0-P6V?UFV'W``]]J(459]334UDKK7F>DED%&
-MF#3<>F3UT6'"0C=W'TTVY^M(9L0:*8RMZV*EGGI4-`'?+A?.YC$X-*I`D+C-
-MZGHK_6NA?S4*T%=*A(.T`^<AU3?9&3$3&9IH5N)H:F&GR25WYZG?M@$X*'2U
-MWM6D%A`<I(4C&\UDC85TRB+4;;"Y6!I2Q11E/#9#E65IF-U1O$1BPZS4DN*L
-MY#:G8+09ZUV%O10R(9R6?<"H2)6U0KZ!5-ED@W.A>2/K[-N0HNS+9QB`L:8.
-M(`S7MX9N@F_[KHM![-L>8IC5V(.@^P![8`?*6%Q`IZ864*.<GOQCD8T[<>TY
-MAF,$F(4G,-3P,`!8J\Y#>NJ[+@DZ,:[@R'HSH"E\PRG8[<+L\-P-Q/P7L$@Y
-MN=(L-?^%9<3Q=&:.E/^%4US8]Y;_A8O'UCZ*:[;:4L]*,+K6$NVPB?M8+`CH
-M76TFR\S%U9R80G&+>:O_KMP->GR&_H+=?3$'G%.^VUR[4I-?/D=_\;R7#L/@
-MY_51\Y]`D=K:^#)_8+*2C^^0K6,<OV,WOR/1_U#T3>`KPO2.:D-9VR%A/+_C
-MJV@/E]E5[#:+EO"]:CPSU!\WX9>1G($4XJL`I8)"P4DT.@I*L3C:M'(+)X[3
-MQJM?69=/ZQ9O\D&6/U\/U:^QU(8.":7`!SH,M_,[^OH?I*6WIPD3%I9!S&0(
-M;D];6-86$:SQ5/JTA`Z)A^(9P>^H3)P-?F>((;MO#T7JA`GAVPV.B#8S]@=M
-M<_U_0#'/7D_'3.T:BEE`;9B=/I]I./VDZ[+=LBN@7>5U"JBL("H=ASK>E'-V
-M[@*2=FO'5<M9S\-7]`3NALIZ#E\5R_9GX1DP*+&Y4'U@WEP@5XE!VEKEFMG(
-M="'`HOP9`QS]LCBH!&[`$WB>`5F^_2BR_=F%#+/],8"A')P#G'H"_NG,AK+$
-M`V'W4W@4`R15GBI`9O!$O_N`04CE7W"_&3<%,E8`+WS"Y].L:H]RPTN8YDF/
-M\GPVUO<TX4BZ7/4+3[7RV?78V#$"-1-_H?P6HJ72)Z!(`PRQ2NBY5&QL@I<&
-MK"78EM"-(/U(HIG)1%YXJ=53/0N(Z00M^CJ"VG"@B!S_)U",\/\I::AGH]5Q
-MS'E6-`4,=5(G+WT$FJ$9+,-C\NH>B.4?HB>!/'QH/B,E3&(9:3GE+&V#KXW-
-M@70E"#2ME5</^I7#Q?CF[D$E6<%5L^+5/4*=*IZ*5SJ.$=$,B9_'Q#$\QJC,
-M.>^I'P&(8@@MQ5!=Y2:=404TS^O+1\%:HL,:[P,-J$?!77S082%$O-47X-1Y
-M[8?PE(#GH/*0`X.O+9[V9&0^(\P`^W$>[01\J!#-[W%)1/(I(@2$0%6?KJPF
-M^2X0S_._(1YNIGAV-$V<`'+CM0`2I89/$>=1[$\!UT[W@1J-G[6T*LC`I)93
-M3+P:<OSVVB0UO/!U\[4C5`B[>SQA]U&/3PG-IY65W<=1!$#WZE'%HTJG%DI!
-M9E*0QQEQ&G"1>`9`6DKA^D`8Z*1YLP<U\S$5??WUU]&=#/DJC.B%CD@'\%,_
-M.2]]Q3;.&7@'!JK`Y1^$4;Y(_(ITT^VL^+#`8Y]TT@3C64@]^P?(F@II;H<T
-MD'T--640-/T'M/3[@-P@+E"<1,E!4Z=S:`/G3/`/;():#E`_<=$*L`"B=)YK
-MO.[LTZK]I^WK04)W_0TCI5ZVT2SUF$S=JCWTY`]<Z)?V"XC>"L]<?#X'8<?A
-MQ\#'S(,=@$Q'A:%]H:&CP@A@VQ<:I4Z3U$6!OSX,/+QH)"U-99`ZC5*7$5/]
-M=CC55BU-!:18B#$/C\Z_!1[WP&\M_%;!;SG\EL"O''XEB'_Y(Z?D\D=/P5.!
-MIP+/T_`\#<\^>/;!\QP\S\$S`<\$/`?A.1AFP]A$ICY3(DD)%2O\)/R>A5\$
-M0]Q<W9J]L:V(W>AWK>9Z".`XAAI`BF3:L'##8+BY>%"GOWV$_ED7SSX]".7F
-M-6*Y`^\`E0_<2^N;;(_S6GOD8WO,OI>V!R;>6@3O*^`7A%]'A6GFP?:%IJ4`
-M^`X$NV,46,1+CQ]IH\^,TN>4^@^/2KEU5#I(--)6GYFDSQ%=_H$[84R/A?TF
-ME'\<?J?@=QI^Y^`W"#\6HB<UTG;)!3KGPM,&3QL\K?"TPM,"3PL\S?`TPY.#
-M)P=/%I[LV';1Z%,(?XO@5PF_58VCVJ7"!%B/:@?Z/;8-1H>-:3<8-P'5H_,=
-MG`C0>8]\C]T<AI^'CC%^!]<AHU`.GF!=;7L%@ROV?S_>$DU7'F^6)MJ^G*"-
-MMX?A<VL>_%D"O_5-_\WQAL#_]^,-4UUYO.GY/X?'<?B]";_7X;<'?B_![WGX
-M/=OT/S7>*"54K+`%?KGP*Q3^?S'>MHK#X\TE?NUX^X5`VP,3;WT&WKOAUR?\
-MB_&V5?SOCC<*\_]HO.FPR^&Q!'[+X;<*?FOA=P_\!/@])/Y/C3>-/D_"WV?@
-MMQ-^KXO_0^.-FH=@(7$^T(?!$`0-`H0O*,9=[M,@9,'`.P65WN)1VLJHR%6K
-M3I&^31QH#L$\.MO?XPDPRATNE/!@[^^EPS/`\#N8_B#5FE?P/XVXJ$RD-DP4
-MFU6P=AA0:W9IG^(9:F`0P]_4H:'-I@-2G^K8+479WS,&0ZN@D+)!2'MCVRG!
-M_GO0\AAA`CQ`^3/&_Q$N0U<(-C\:"Y<-#;]=''X;U-]&:IFLHD6OGR=96[V:
-MOW+]BVHVW#9230!<+Q4SX3*CD%%/+"Y7/9@`_?G1@XE*:LTYCA6OMOC\?-O;
-M4$KQ-&KJ3!R9([BMDI9#%_7`(+AE.M0(^!9PKQ:NMI[?P?,[H@OE*K-.16$.
-M0!,G\#M2Y=7),'$3.1J?WY'6%A%3(#2>X3BTL.-,QP&YQ@P`IO,[8A7)W+E2
-MBX41TCM2H8PVG,XY%D]W[*WHB'=TDW?JBU>;15L]VJO"++#A(0WH6E,=QWH%
-MH`D@-P16>KUSM;F6>IU7@HXU6?ED&MH/D6&[&8RUUO.HA6^HJT<ET.^(A%N&
-MZO]`HNU5F5&%TZVO=G?&&B@^LC<6,(3=@^J\/6!QJ/.>@CAHB8R`T0.&RX&%
-M2!L\D^8(8#7$B&_TNP=982_8Z7O!!'C])V`";#8'V&KEAH78('MCVR*@2W>P
-ME5(/NS=&S_=JMEN3*8&4:0'.H[`T<1P_29:6H4SJH=/_"^.'^!TW+Y2&YI#/
-M!##E\T46OQW'1I7F4V(5%$"F7MIZ*`TR9X797X9751S`#/$WI(MS2$PT#AQ%
-MUPUM]@MWJ=?&%-Q?J[P.S;[]*;2M&N'MV,E8;.?%5UU,5\HI*.9WNUW,]IZ?
-MX'J?`G^S8AAQ&MZJ=N-;'[Q]B4G.P0N,J.I2O)4W#/9[H[6U%]_GX)^0@88W
-MG<[O)GM"!G*"X!R*9Y0)[/4-&]W/+*%5V@`M^@)N!1=IYYM>'SHF@.4;2_:?
-M*<`S*F`03N-?>(W?$<$#WKN+J\S"Y#C'OQ`#LUO(K8AW`I##4VFWB,^"]RY\
-M#U>H<1M\_`VAN\VU`"`_JA^)WHF=!T^!G]J5>@^8',I<3+2!K0WUXS+%^K-`
-MM\!490O"H5/]RAM`RN%EC'NZAY<QDD<93?<I/[N@JBZ/$C=0NZ=6R`0#9'P5
-MUK(NAH<6;>/NF8^3X$;U0,-C'K!S@O!'.0V-T]",GPQ^OH>R9X\E1D]ZP+EW
-M[=(B,P88:`"K!_B5?\<1;%A37*I`LXKCZ$)8S@JT?]6<Y\'PD)KMVM2M52X]
-M!4G:I_5@PA(ZQXD[7+1Y55_XWD%G7^,$DJHAAVZ6=!JVZ=.ZAB<1LU\@9@L8
-MK$K#LQCP%`;<2`-"QU8*:0K.IJVARW$RQ4:SB-?$`EG*.Y/1)H*7&Z90XP@)
-MYH2*-&4-%]C)QC^M&[9>@%^#]A7"4RV7VUD845^@1T;FVR"ZA1M_3^>@,CNR
-M;^'%914+*X5I'=D=DXH.BNZ.I88.OP'>G*C@@)JC&,4/<9&G&\0X6DWY9W\G
-M7$N6#A+_(*2R%'TIFJ.]EN@G%O@R%GU)+QF?&EDC'57K8E#Z'C*1\$7[Q(\K
-M!5O19V)/I3"N]01*@=:3^-=Y4/Q')8!7YZ'!2]?,3)0@N../[=EX-1V!Z+(&
-M?4&<6`Q]AZZ9L\KWK]'"WG=$=*MW_==9O6:P>H=-W04P1ISST/SG'_H)-GVZ
-MTF(;MGS?N$ZS?*EEBHM5A%K!W^M]4$OZ%UO2Y+U36WGDPNMQPB%N"ECJ9(1,
-M9P6^`4FOM5TV*V"=.PIZ5A*Z.,<7SP6L(,]RFV;6XQ&6)F"74H2W]WE&#.'G
-M+C>$1[,%OSA>YPL>O"6AME?6I-,3DY`U?)UHFDA%4*JTSLS\*QDTH2/URJ(G
-M71,]$^/;H:@?3[I<UFR>-$;6^'"&,!U1`GS(0/`V1JCE=V1WM&(YS[#"S2A:
-M.$VHH$`Q^AIP8Y$F:Y3"V^F<,)#^1I!94L+0GKW96M'^C3AOSRO)$]/X'7($
-M,K9G5P1O9<3?05'J1.0S>*Y0#+[.3-0X7-^(3N$/<+6[VJ'WA%MZSCXMNQ-T
-M9GTP[#[G4<4^53R%LQ8Y.W$HUN$*0F#,0K+.2BR:DF+VXN2[#V<I.V:$-QID
-M<7"4'(NA'"MQ:7),$V(0."S'4CJF5\0/!"_,@5S0(%568SPE>"%?3(5P"`+9
-M'HKP#\LX?Y0P\&U!^F+G']T(+P$+C@9[\$*AD-[EMN#Y5/$;.U)+-@E9)2MH
-M$-U2.D.NLA176<1)D%`<3^/9DA4BUU%GJ,`RI&[5<6A`M+R")[;([G,Z\OR.
-MLYH,W7+;E60HQ^]Z3>HMC-^8K&NFWZ<L'YVTGK#K9W9!TMOY73&/LGPQMDFW
-MU'NSL\K2=!,1$U!;SBF>:[2*YB0.SGT;D`AL/)W_DV@QG9%%:)E!U3W88>O%
-M4[>)VZI6#9+5YF<X$=?54NDRQB`V0'SQ,^PNU`C%J<\8Q%NA*PKIK2T)H$!P
-M8SH,KH)B,;'A6N6;:0S3[[8:NIBKD2%":0DU;@&X=F,_RKBCID[H#@`Z!0J6
-M39#4*(!2F1@X2GM)(IX)7079KUQ$^W=R`NZ9KV-%N70"SBP-]6Q(<T3H$9C#
-MG&D-,(`O)NBL"/J/7_GT*LHO>J"$Z=*Z4XS&MS:.]_D]RKO7Z8M[@DENT3C*
-M>"RBI8?A0^@\U8M%:[.%%R?H7(L/X2:$4/_8J5)(<?\$9M3DW7$/.@51%%[]
-MACY_=Q1*FJ<A05G<E.AGK`_&QW%5?%/YSHUT".C(!%3J,'3]QR#_:^.WC9KE
-M.\J(A?')&E(-%*DQN(`-PP4L26;W$IT0/04\\HJ3G)%_1>-AHE9`2;\:GR2J
-MR/F47^0QR<G-3+)A4/HL719[XB8B:I.U]+`%G.&L@1#('!V?Y/@(:MGXR^F$
-M_/;7<T:1*9/?41C]B!T#=DZR_A.PCL,,/8(,O8]T7E)#K>@*6C1E*SAQB^K9
-M.(8N+?T45WF.UCJG(8^LE5=S8IJCOW<]A**GJ`^>CD,[/:`H%=L$08H4SB]U
-M?6\^TW@F[%;PM.VUZ,M@J'-V\J&KD'6XI%G(6Y$OOA(!)EPL*F?_\!\RA<X_
-M&,=1T_(9P[?AJ>?AJL\[QK4=XMO^!!_\CC*5WW'(N9M_"!U;@NU45+CBGR&U
-M`ZXDO/#<96?_`!3YC_"O[P*D@DZ&O"84=%0;V@X)L_@=P%V^<G9MM)*:P8X?
-M5T(";BO"<3F[-GQ95A8L9L0W8=!+,4YJ&60;HS#*NU)0XF$C>+8CDLI^Q&S'
-M<LC[RG/P_?33M=NQ1D_'EP&`^U08$NB^1CHU##E7*9HZC6>\"NYKT=+*=#DK
-MGB;-HM(44$=(?_C#'^+94NEIT,88@5<>A^3*RSBZ'L:CN?:C>?7O%D9;IEJI
-M6<_2+)I:2@R)%M#_=VF(JK/N0B^5Q,6Q@7M0PTP,BORVUR-H."1C**0Y3X$R
-M)%PM*:PP25*R!'.E@*?+[61!Y,1VCJ=_60[_CL-W_PC%H?GT"E#Z;,<JT5I"
-M?=;$J/^)-06[\&D8PU32:KV"'JLR$?M/9!?BT=Z6<AHJZG)V-I[K<'_1&<*O
-M/+`D;O;ZPS5G^1T98$XXHQNGY7>'7Z))RW;FP3_RCK9B]AI=,9L_OV.^"LK#
-M@34K`TPX=!I/V!QC.5*P/K0='RN&_HAIT&^4QOJ&HWVZ"C!GOIYF\/(THU6%
-M%+K*L`HLV3`664_&]>\V"!.U/F#I>"P%"VG?BNI"/!>/M[9H47D8!;#C'P:?
-MQ$C&558&!'@EODBGBI0H:YPL)>[<:$W"Z@Y&\]K;*:094N);C1.DQ/T;LY/@
-MNH.]>?&>)#``M:N.&L(XYL3Q@8N*#4JK[4K!`-KX.!<J[3GWRW=:AGY93]Q#
-MP=?-]2#9WOG>X`<MY][YWA!QGR,UB;TQG[(!F3Q>JM(O<SN9[\]GG!QTF`A7
-M4=KP`QSQTOD)C5=+Y^T;IRET.HB>'ED74W!UF9B_9"%'G<S%6L_CV&[,:3V_
-M#YX;LZC!I.U?A,0<_9BH?X!:#`7$%!7]F2)FG1USF5_#CF>CR%O-.53G!R+Z
-MB2J6<U#9WH^,5#HY!T2S5W'_$X,.&D>D(1\J1@6DY3A=P,/[BH$AOFE&UMTR
-MZ%4.3Z%,_"B>5?L41.J2<8G/ZU$B5R<E8XJ\^GB\R*><GT93'W=V"=>3!8.5
-M(%*A$8RD$YBA>%R9\)&J>I7@%.H=`0"V34$`MN*6X^)BP"\56"5(R6%QZ?./
-M7;)#L#.O`/8EJ)075[NJ*3PKE0-W`K+%+4?%JP'P&"'L\_K'"K[C!"'S(=Q?
-M5%R*YA'?]E_P[E.:T!;$-<'WH,OW_M*@*?=(8J#1./.PK,?3T'%U=+QS8`.G
-M%:3;*>8D8<]JA/UAYFBQ]B:(M6Z/5]E[#24D2<@M!_#LNO^@A$;IW[2*O!^-
-MLX`RL&:Q6_G.]4GYSU$=#*CN5:ZY5J,ZA%[/[TB+]K"R^W6=0-23X[CR^"E5
-M3<+X,RW-!O6@JX%>WUBS1P-4>BD@2NEEH\#<K8&)3_!Y1P#H%*4M<`WV?"2M
-M6*^15:CS*7DVG:0?`DGCBS5Z`F%B&2@5U9@C@H3,'=-HE[08`,S1`6:!(3F)
-M`A0['9'+M1<?$6W^5_)2?C*Y^%8A1=F,F[O=7+^+K1=F2)M91OB!U)++B-_%
-M&XO0,<FLY)HH@>,^=',4/*U%WV[Z7@]HL9NL&ZXEE;ED$1?:*TSC=]38EVE.
-ML+Y1+K`'P5Z*ST@ZQ]I'12EH)D`L]:#1?8ULH-(&T<G)!=:5*KO[FCE297.6
-ML<TIRIL<FIF@1OT=R]>K,)T/X94_TF:+2?RWXLU6<34ZRHE^Y7W<8+SI'NBW
-MUT"\\@9>E;#^'J4+GZ[U`8-/=ELZW:<-RLWS*;%JQ12E$4I`B.<9':(%(692
-MB"G*<CWVF![+AP[B>-ILU51>TM*'&H[FD8C5M2G*,3Q!TTJ.@@+O="N\1#"#
-M<TNS\X?LEHUD@45V<P3/^`-;9_-:/%3690YO8@E>/.).;)ZA;LA5;T:5J]2@
-M<Q5QBEJ5D+K88G=BRPFUZISDYBQ2RSEFR^ZX715U)V<OS33:$]FGF(T(H0"0
-MI-J,M?>[(+Z"T-"XG<"GW)N"YA+M(AB(Z&L.S7UCP>A-%G^K]Y^I#+KB5%?[
-M_$IC*M*Z@1&N2F8;XXJM_/4=I$,NH-]$6G+#[L08*NU^5Z-2'Z52HND.YZW-
-M"YR;V2VWD@HS66J!(6>*DLIST,E2@_=QC'A-P"!%^K2B?.C`=DEQ>91:!5C1
-M3FO\]V`WQW2?V85H+]X>W,0Q80\GE*$#)%G*.J."18IRU<N4GQ7I?>'J_E2C
-MD-*?Q@FXD])*F&<,^&D0TI\!8ZX_S8CST'$3[;JZ#,K[.AEDUKQP8$R3)DX6
-M3Y$6BU.T"C72D+HYQ;D1N_9Y(#^U$19RI+P/D30WH`T,\N#;>$0?L([X%&A?
-MY9L,,EBR3L$@`(1``2)DFPM\_%3\MW(3=ZDZCSO_&&W04@VN]_H4VG122Q[C
-M):MS<;[`+%BPX_B1?-LH^:!;%:"Z+YK\<9,J%BA?'`$=%FA^DT9NOY*"2FT%
-MVX!:@RK.=LD+.;7)3&,M%-`$VED*H#9I8#.N/T(=:I-.2X5?1Z[<)+EL\NHW
-MI77'J7RI&`3IJ&3@D7NN>\!^4E03'<<@]91S)CJ;(V^Z1Z'W`U59Y,KUF@<B
-ME2D:[P%>;?4I?SY"^YKL?A,34)9\"V7);UY"-23V]X>)O>Y-1K<K#QU%NQ+:
-M_@UM3HNXC\H5@\IZ6O`IN?(>91U][0$<6F^CC/(Z:0NPDIFM6ZS(L<0I5,)8
-MI98W&2%;^03@>?S*&0-#79I&M94X6=H$^2:T;M+R94B;8&"B9V]L>-:Q\G_7
-MYZHLI(R>42M"`=CO^;:[4627<1AX%[[6F,/-%C.2H]_`">4X%VA0-]B4&:6(
-M$B;#7=T!@U^Y;CAD.F:LL,EII,J*(\>C_)Q60$[KY:A&8.U/-0C+4(P9U":;
-M<K@DF?,4H\%Z;SCD$#;1!BLD\RL;>NB1P])F*\N'=F'#I&&2Y[%.G9PO_G-I
-MLXU)0A5O47XX#.5A'6Y(#Q$V`TS,@\5_A0U9"V2>J,&/URMER70^S'5'\JL2
-M:[ZZA'(!P=F?R@JY`4.X@O,@F+]H8"`)X'\81/6,9,SCHV)>PI@4Y1JC-FXO
-MZ5?8?-"C>O&P%ZT-5URY#:G7,38AG>F=2N4L"RQP'+94M;K>IGBAH"N4X(@4
-MN<W\3R.TF-L,FH9.I^R)@52SIL[0H>8L,O=&$-O$G&W:9XK6:?X/Z)A</>PJ
-M#>76H#\L]*#O#2KU,&Y`]3RPIHZ\MQK":DB\]3P.?#'E12-BJY1#BM6UU%_>
-MIVQ!EI#S!+7IU.WKP1@0;@D(8&$]<10W6M>&^FN%Z\"BPA@U)ZC==F+S*:CE
-MUZHYUI.0<2FK!@QRZ@IMY05'1I?+XUJ/)ZK3.V"!IZLYST!6#0Q)J#F;<!M$
-M7ZA?O(T6]LV1PJZYM+`<G_)[7%H;*4Q.C:-OXW^]#:$`^3FZ=628NS?\ZU;2
-MG2$!8O'ZNX09R2TPM;CKVW,7Q,4S]98?YCN8O3?CEF0W"/[K`C#;-N$'=-%G
-M8I*Q'8BG71'J(BC51^8]28GS$E;[B#KO6?WYA/YLID]:/YR'EDI"FR"$"<^E
-M3_%6?\"FG,3[QQ*U(9PV&J?\[`BNJ8U3]@%XZ5:FUB]F:%MLY%OCJ<K0VUHL
-M]L3:-2`FZ*X43;%#UV8-KK8YA0;B-#6HMGO5+_Y8-O#.'1UN\\4O_KBP*$U`
-MT6HD78.:1X^^GK3$;O9#][_?YR7OX,;8@4Y<J\%E)3$-S'WQ!_&K.E(KT.=.
-MF-46$:[3XL4XG0P0JZ4/34*6E@!BO[E8/(L.SROKUL0TSQ)A/&;EV_!&2=W7
-MY#,MZST0L5C\:F6=YJ4G3P+U:Y'P)^IN0%)UAP,R4>K470[>;SLD%+3U"],'
-M=E.'`S,^00AURI/BMM:3>/0?O&5K!]/#&^LX1&$Z(HN$#$=$3D/X8@(0%D-)
-M'&NH<[F2@;[G?>H&.NN':BWJ*GP;CX-\!1<Z)J_F^#9TPI8NI(#->!>'SNZ]
-M5)N]8-!/OUJZ7*X:Q%T*2Y?C-1_G.3Z$UC?)V0E#BV2]!']-^_S.@RW7ALW+
-MHB>,9+-'BIJEM<6@G932--,PS7S3!\[#S2=1_V#(YA6ECS!,1$SOJE@A`;!X
-M7>G6Y'<K?B\M_5'R&X^EB=]:^I/D=PB_OU$:3GX_@-_32Q]-?N/:5SR[],?X
-MG0;?],K/#2L"G'JX5MZ\HG9-G,.*5L,G3I-7+)>ZU7@Z:H(YW6`840T(=^QD
-M[5D_7UOJ+;[13W8+X\(EB\(E?P-FY^QJ8HL+Q2_#YD5A<X<SBE^"D1[>F)PF
-M25%>^XP.*?1Q[D@MN5J<A8O:)5<+.=";QO$[(A[%=Q-=$Q0^JHA_&+SU:C&K
-M(IY1DK<AM2)X:][&KW#]2F#ANQ<WMM"]Q0C:YP?8/P#89!XZ33O4CM1;8L+X
-MDE+!L-"GI+T'0RHLI!KB2IA]&9=Z/,H='U*FYCPKS^O&I6`T%"\>@G2D%"$4
-MS1"*:_S*/XY#*J76';RM5+BZ1ID"F9RQ6CF5)M]_B+*XFY2;OP%="#INK>EB
-MT0QQ[VJ5(J',?1/BY6GX+D]?4]>5TJU/#:VD';%Z+/;_]:FJ[MKZ"G`OW-GE
-M\VH[N[8=I;.:1]'=?*C()AA)(JGW>[U^I0J[G#M!J@;#;+M'N?^D=OZ&S7D6
-M,.24`L0PF1Z:-<P^Z`$[8Q+--0@*7*4\+P*@U]1M?PD>FF$+AB)Q6[T^Z2I0
-M0"RHU.J7SX`$505.OAD&EMQB#A9=+9;C57#!KZX6KM,F@0_U/Z"M,YI50ZA?
-M2.VPM$^L<-'WM^A[?#_]8(/7,!4(H,(57T!#4FATA\7%[WBW7QH-)*7#UCZ]
-M`DK)$]*AE/3@5^GBZVV'1%-EG*.@ZE70^6U,$(\LZ0$\.RR8-@73F5SQ,S0<
-M#<O1R),:JVKL<J.2Q3B.!8M6B:QK07P`42KHCQG$60ZUN,4F9`4W&:X.>PPB
-M2W;'33*HJ2UFQZ'B&AO_V&ZYQG8P3@XO#AT2LA<@(IVIJRI4`W#$#@O@>;O4
-M8F/$#$3E-D!%N$5JX1CA&Y!P\J@JIFKTT6C#CR*@"4)5@ZMW!6XQUPFF&GHG
-MX:<JF*1KH3EP9Y,*,J"Z>MMCD?F,MX;,*0`A[/,[CCGZ'=!118?Z%NESGA7,
-M72F8`FL;GZWFS#ZI;;?7CGC1XE#[Z,6-AW3V&+D-]"&SEI]O0]9;7SR==`K9
-M+E=]L4T\KSV^R.\DI5:01`<37J_+Z_7XO%ZYW#Y7?9LHSKAP8XWR\0?:D`$.
-M+,ST>FL\JF"W0RKU;3!CL^G:J_D@CA,\KP!^/C7G`*ZGQ.)>7*]9XKR`+"B)
-ML5!2-(-T"1FN(IMX`?_TYW>YB%*C!#_0AS/=)I=9X_<IAD-4204=Y/6>Y#9S
-M>I:+OAQ3"1I!0Q"X@;+@`UW!@4$S51G8C^C,>_(03N4_>7@^DP>5#S^(*9U]
-M3=.#]2PC9:NXO;6S(B5C&Z:3.NTI&!]_/^S>J6_.J)=:/H&>=Y".G-.H6W?B
-M:U%X!1MFG:`9[L2966>B&89T<2F6T^+;]=0A=(9!G/[T/F[HK!5*)`T'.37<
-M3E&(-N4&[P(4.!7Y=:<K)8-D2Q%[:Y0BT`-L2(/6_$(\E=`W1W](W;P$-T%Q
-MTGE5*.HP@15^XS.<F(EW$/=0/6XFV4\ZH^?Q_@1B#F.=PFPDS+8"9R'I,M>1
-MV0Y"SCW(5BQP#C0_[SA&LK0TQZ225C4\MU6L"AWKK&!;Q91`_XIX!HEIYZ-&
-MO@1J'$?RXQ5_PB3_<(%F>B>-?"LV<FIP*>N*\[C4EP&O7)R%O\$%T@53\\_5
-M>4_2A8W"DV6:7DYE3X"1KM'/C:AO+:JZ4[22RA)0:[),T8[**>W9':ZI[14&
-MJI3M+!@/Y%S^KJJ&0PTP?+R>+OK$M2[M\CS`9HKT\B8(,XKCI)?152RED4.1
-M;X01$PZ]"9RY8:L%I$;#<YF(RZD>[:+G`Y1[A,.8H.A7^%>8T&$H^58S5W+_
-M%K8@K]U05C19_%2#$)CH:?@%9%?VSDA.0G%:3'Q1.+0VN:77HS/^HE]A4#B,
-M?[\&*D9Y-!`>NK^WMM89$VX-%'B4FFO@"X:=4.@BW2`VLH/%3I%MGQRG>;\(
-M9'@]RE?O:T9BPBA,`](+-ACYP@24%,HOAG!2:S`5'4`B)FH,!1CTVVE`KS;^
-ML0BT:A[=*[P=YTZ%FY2?X$I:PK0=9_[%K(8$:'[*'X"GU,8SL(5MRC^SZ+8G
-M/CG;JD`=P?Y&O=NWX,;"%0L*"^FHY'`+'OH#@+@9<-'-=GP(E1FZ6&^A+AT)
-M><$@:3*3'W*XD^Y;8?,&J?E1EA'<OIKPW19U^:/LZCJ`D!D1')M*()57N:J;
-MW@\'L3ZOXJ,?'&0+&$CYHYSR#@00]E$\MF+YHQQD@"@R]]'X-NH(%=>NK(OG
-M(/"`ZE4F:OFU\U:2FP-KT#PDUY&R7`\ILWF4,UU:HMTLLPWW2R%QLX``UTNE
-M@W?C]JFK&@8ANV*#/]M^`0P8+67TA\-AH2`WKM66^)ZBDPN<8^_./M"\G!8A
-M4XIP9:7!>W%ER$?.1#\R.7^&47P(CV%+%L:WH0T#!6;I!6I.L*U?8:E\&R[&
-MA$.KAGM=@-&Z'628H(<_F3T?]*25>#1TK1;D]X1?QJ>R`TQF5ZV4*-EPG1;C
-M4;8?1A-'^Y(49\!D2C0\`1#\BGR67M(<#MT%`ZLA2*&FS,+B,<#O4;CACX9F
-M&CM@AZ&YXQS420OV*/^$D`9+GB&9;CE-][T".C&V)GY-V,V%:0:<QKQ)F0C(
-MU,)+X)S&?3S:5:!U>V/;GHA0VX]'_S/U`'+8Y%10@POG9\:L5T#_#F*'-E!7
-M8VG6ID.X&CFK&1\!PW8!GG)6&Q44]\!?/!YS16P;1H?-P6U!^FP'CHTG"K+Y
-M'G/K5PPD:DR3(M:XHLT^2:<MI(KSTCT39:!M#4F=@_GWF:.?\^2-[^[%>]7#
-M#QMPMYE<U4>R%_5'#6!W\"&Z\F:](9Q[@UQSCO@&Y9H$J3G7O]L@KS:+FZ-?
-ML;=+7]VVP12X[4ZRF'4NYL0ETE=Y3=/1TSE(]AV.AY<8V8'#5ZW:63Z4+LX&
-M#*Z:'+\J?'L/33`<_<1./,D'4J1BBEJ64$^=N`F?7HZL9$U5Y^0[65)C1F,(
-M7I9Q>*_-P3'EKP8;#-`ZQX>0Y>:+"0B)7F`#M\FB>7&=\_T-1O*^J2I!#@(,
-MS.@\`B%'G.\*WP;SBMS+.N_E1)=T(:\I=Q?%_K7#GPT<N4H`S)>86/$:Q.R&
-M^(SPXAX:32.?U_#&>(KYO2P%Q9%%+-XR0,&211S>,"!B=7"YZAS8`,YW^394
-M?0C0>M5!-FP^*-=!#DZ&Y$M9&0`L99U+.?&N#J`/$+2]BA^*ML-[TZQ@"\^(
-MV</TA5+3)X]0NWQG>;HM?AU-9!DA,Z:J9>'[;_3[DW`;13S=@B98JEQ>.$C<
-M?2J8E@/();#WH=C!(Q9(UGKX(O/LP(6C)WA3I?GO3!#&".-B&&^U>D2+IUET
-MV.D>CG[J.5T6Z:EV+$Q+!-]#E0NTUTI+\+X%C)@NW<4.T1!I$Z>*W\6EN/5F
-M]0@-4M=;QF[MH[V>Y-`^SP:C/4;231/F=X>7C#M=':ZT5GN4]U]#AR\.??NS
-M,+TS!9-L8*7O<58Z7.B0PM7'4D1R.\8..TB>MHXJP^N#4OSAD@<P<<M@N'*2
-M=*(/ADCT/+M(.I_7DBWM5P]_AJY@LG@N;I&B/>B0UG]8@4^0)-MH.4>='X"I
-MWS09;_=QSJQ*S!S*?$/,E&)6Y^I!B&C\&)[B?>1=YU%,EC,F60HDBW_D/"K6
-M0J*F<=(/.>@_$`8IXY]BOFN2^;)H'$W_&:3/5HIP[!ZETPR"U:N\BV*2++;(
-M!K+`(A6I(CJ5\1`H3Z-8+K`0B_25*M<,"E;R\%9ZME;SUO(D(C<3+6A]^<R:
-MQ$SQ'#T[I;(\\P@1SXF3R(]PHD!U#T(D'E<[-+,X\VVAEX"(W>=0+V$PY\@2
-M@+M?S-*+">1!(6M">YM3#IY8&!_`<U66GV=)1CX,CS-R52(ZQ"Z5AF[;#,.\
-M#H^XS$)1=3OKO)T3OR6I>2WYV@!X`SOZ8+BY"%B*O/KTS%7MY3+\AGBQ".<]
-MJDY?E1F_(7S'R*"@:<,/T^X)7&CR$`_9Q$P]\6*6CEAR.T?N9Z66!"/?QT*I
-MY'Y.OH_CV^CYIX!I\QD8OV?D^UGY=GI1SNVL7,WIV*WM6)+*2D,P?C-;KAN*
-M!ELRF78($3-?H0CO/_QYNG/X%?!);VXOCW]S5,*L\-(>F@!2_A#98O@EBBT$
-MZUPH_692E<`+3N4,><FX0>29"2+VF0Z&EQHPZ,9!:!^2'=H;OL\@WRI.<4[#
-MSBZ.!UA..D+%-%W>0(C,A>>S="!H0R`+I0V]YC<J%H;+90^,-X\Z#P?&)<O9
-MPK<D33110:;GQM>&/65X#2*,(BT#Z/":S,.+?2W"]0&V`0V?!A18H+6?UF/,
-MHE7=8/&/'OF.2'R2M)13Y5OES:R:0HNHL(!]DISVK:8"SD_NM9`RSG$L%('^
-MU`/6-HD%;OMN!'O@G>&V0MH%@>VY.-G%@HIS.Y#G0H"-?LR;[C-3O;,!.9R.
-M"VK/,*)[T?L[_'-F/1A&7VTL"2^T2)4)56H_S4.G#[</PJ/+-=@'#R!A^^#G
-MJBI7LEU!W!F.@2ET\T9EGW/?ABZ<'KG#G)(PT)T$D$PNX\*WF^5*3BYCI;6_
-M+F?DEWZ-;=Q1L:"C>RC:%@'6T[YT@6A*W\12'HNG'PX<NLK#D=@(TS)#Y4%O
-M]=+50?)V>/VD_&J4]-)'?=%/>++OLB%XQ^`B)PPN,(:+Z8X]>?4@_\@:B.R/
-M@6%^![R8W@&3_%&W@78-C>'=!J-Q0VK@MEIXDC6L<PTG5@(;;)HQ/*82X24&
-M*O&WHL3/UR2^'?CB92F>V'J)T+^#`Y!R+;W&8PL.,E)ER=]OJ!K$XT3X1]"C
-MA+3@7&A49>\(+[EA4%*IZ%]#5I\+YUZ05UM`4\#\JRUR+2<#%ZUEY<4<_'76
-M<N*JCB5I+'"+]JH)*$O3V*:K@BT3AF7I&[HL#9=O+=>H_$9\%DU@&<TRJ!QM
-MHYA#<%+D64`SP<%9?B,,(7F)`8=AC3E<89#G#\KE-R9ZT;L&N.T">/#A6Y"B
-MJ\W7`608HXL'PZL<,$@MH%$AHX,`X'58K[I^]R`T!<ZX$G%09X(T`BCDO(,3
-M%P)K2>I:^T'Z"ZE)RF>/Z%I+1W2MU"N2'4P@H/Q&%I4/H/Q&#O4/T6(2!V71
-M,J;4$6[W0R0LDGHQ$)S35;]5P]R.:BNIE,*HK8QB<5QZ\0B%]\=GZ9K*,)?#
-M%/<-4WCI*`J#36:2RVV#V@$NZ!*W%4P3%3>`B6F[T$R)3VO(R[M4M<;U);X-
-MKP<G<W!`C_`;>BC06R2!WDIXVG.`!4(9&,H"O'[U+52!T&]U)\)V]HG3)6H,
-M@8C=CD^IM(U^Y6['9SQ'3MV&+W(%*\_#%P(OA>&'L)SP(_2,\PIKN,(F+S7+
-MFRUR!>?X]$4TCAR'I(L6_E>[;Y]Y\':W;`%^`#RI]2+#,DSSAZ`*^96R5[1[
-M72LLII@ST30U^"BZIJOAA9R<UK60[8./UBY$.GZ<=,:OI=PK@/P+=;;6(<15
-MX"\Y($&;H=+F./0,P&ZU+,7SGOP13E1#!;;CFPZ"7K"3#7#H3;N@I5:RHR'6
-MQ:0LVB!U^NH'H53P2YLMJB8LJ<*PRP+$_SO3=QO3>AMB+A:3&%4F31462GF/
-MA@283C,D7E6SGHH@*=%!CW5V;3#A>6GN0;6*$[):XYA>^IP+'6OY,[((LI]L
-M8(4"Z3Z;BCXGX;*\.U'-,<]'BGY%*?JY]A33JA4&EQ.=%$DA`R=-^4<]JG:&
-M&%V]_!O6VD?V.<LL&U*<9=9&CJ3C'0_QSY[AQ1M(W]]PFK/U(Q78N_.+1CP:
-MURQG4P^5[OK6$TQ??E3.SM]=%TVPX7*.&UX41?,]O](2/6\.EW?C\;!F?L<X
-M@R5X%=-:A`3I<K'8+<1):@I672K%OWGT&)>GAG!OH3:EC\N%T#9^XD.=C6_#
-MC6ED,Q=^Q`;T)5WYG9)BBR9,T1ZS:;?S/,B[IEL(#]J,\[7F*<5KV`TY7E"3
-M\6H`;89(1$-@#2MUZ1"HP*+Y&KLU+:@";!)+>+,-E%IG`BRH)@=)<\::)R,P
-MJQ>/Q:(GSFG@K@%8K>Y!VCY=G+,ET7A(@W*3DZ(MY/0N`%K+]..Z&?)FKA>/
-MB*<CC22D+1952)6VF!FP56]S)K09A;A"UE"W!W*6Q/('I,]LT2%3]".S::-%
-M<JKB..@!EA:<LT`_HB)5^!RJ!&*]1Y/I'A\@KJL7G7P()USP_*B$3SGY=[`5
-M:@81\4/DM<V%81BW-8/!]G-TD'E8V3/X-VP8&)OCNLIHXU#J2%%.K1H4C\BE
-M6(GP0T@V9W>362I6A12(C'_A[)X:F1F5%^(44WL%)Z_AKC-=5\$"'^;"#V+O
-MD;/C<Y6Y%^B)>M>!.=1>RX673^;HJ)/'T5+S#X-.R>\X?)W'%F[%/-KLLB;U
-M4>$A-2#SP<STD^+PX\@8G%^`G4*ZT*ZX*LQ.:I_DC#6E&<9=5\W&TZ5OL4RX
-MC),-P#QZT0W>-!"\E1&,I#,\U^(\V[2@P]9V3"R$L;/"4!=T,B*[H"(^X/RB
-M::G3/2BF@(2(@]@R%]>8^0?0AP+%<2R>PN\X:Z(01*[QY?"]G'.@:7.8G>AT
-M<TT;Z$8P%T"L,ZQ`B+,6N.(#X5R+$RR6]/POY,D(5$/L7DZ^H=T"+1B_R;F[
-M:<)U;BRH<2XY&_\COR-BZHO_+IP[4<NW&_*5C:Y0^\1P!7?W7C[:P^9'Q]((
-M"`0RSL?OR,`5;-J#8OD++=&$V5EE#3=WV3:,)VYK?G>[T<`#/\4&CM_5M`["
-MPG.-88G2M&]C39@=Y^QLR@@6,;C<<\[9*<[O<%O;C<3D/+`QW]FWX=IDVB:K
-M(R([BE+%-%>P))41SLL+$-5O`ZH+.-F47V6%@O2]?NY![80:9`M^KZ]C'*Z0
-MMQT2OMMQKZ&M7[B##.#QR!UI%44'Z-IE9D<JOF8`4;^L6[G&$8EA0)\8#V]6
-M.[YE;#LES.Y(E3J-13WBGHXR$^2P==2K4A0"A`_B_X4'X*[IV-V['?71A2I\
-MQ$@7_D5'4WJ^'?V'RLLBIL.8$1'2YO-_8.WQLP3TX+WJUK*.5`RLX+>S]L8O
-M2%3:DU>W5_-'^3_.WS2<OP9/1*-^8V929WGF`;ZM'XCSC(L/?89/@S!1JF>9
-M9RQ\V_M(M*6<?4C.!B,!TF,$[D:T?VXVUO_>;$#3X>K6H8:?`Y?A6H?:X2EF
-M>I7;<K4=H&D^I0^W&-</5)@Y@U_X#C*V6_,3X4H#<.^EMD4A55[*;K;X/5[E
-M[<F,MD_''+])NJ`*D\EK)':%M8MXRL[N]?.9?A>;)V0%C`'&J^RQT:P`O*.*
-M:^?B5KI-<0U";1V&6MQB7@-\;JDY+\X#BZ`+%7'.G`=5`)-#=[UK/5UIU,[^
-M;#$[^CMF+&P[AE,+XFFYQ<RWG4NEDTB.0W%T(R3B`5PU/,T_?!S"@Q?RFB<$
-M+VS:DLWOBG4$?Y$-TJ2'Q['![VKKW`F?()ND1)KL/L`_]+_H/7BA%W:Y&*FJ
-M3Y5K7I=KCLHU/7+-*>"&<LWQWDV0`@!)2I[@E!23,$=2.&%&9:4P'K[X4&TJ
-M]9_B>CW:"]N[4'LQ]-Z*R%0-!GOG:2'&W@**WO7BS+#;XE'PFG-H&]G=PX?'
-MZ[EQTUQ/+T[+$PC>]1K8C^'RL@/Q7KFFK_?3%"W[=)I]1S)['Q\^C(Z9@'_O
-M/MRPPLJ8$[)!7.].FFF1\(W@A08A+WCA'F%\\,)&/H07H@2K+G*]/Z=Y!RV]
-MCV@O>;TAC+KM)M$:W&*8*V8O7`CI@D#WWGM2\-Z4`]JF3"`.[IXO+S,$A<EA
-M]VGT]J#[%K=`JHX9T-8+(<_HB/H4V@5Z9Z5H)$U\AW\TUXA+HNOX\,]054JL
-MX!_%K51\VR8,5Q9H$AZHO1Y^]TB*F0^A\V3]@'NPD!-9K`!8_?380KJ5D5+F
-MB10MA86K)=U@L?%M0\!T0GO%=)+U/&)>E>AR'Z=\*$J.+`T=XMO>A*]Z>BO'
-M/GASN>(?ZZ<^!F-Y0!-7^&4\I-VY3VY)\.$W4%]Q]]&;_G#]<30V6KF(AN!4
-M"E/P\(T09O4HI5/T`7`N%&FYL<M]%,''KY.4.X4;)25=>+62;U,@K!>OT5..
-M@KI6VTZS=KG/85(-#HCSWH_1HL6*_H75?#D<]-XXH:#??9$3)O&O,`<5>MKF
-M.;V:O7]%:JX[CC6'V-[M\+GM.:2$.^'I?83!6Z""%[XCID&M-/9L4<7702+)
-M^-)'*D'SV4E<@[+[)6Q(O4;:6BR>Y0!FFK3'VOI1D,%S3Z26/C!^]$2@>T""
-M6H0^/M0_*O@4#:9DG2-F`>D,X9=?Q`JV)/S*7_^&>UU05$C*=[5%7DE)X=M^
-MC9V!;\,YMTJA&@=@VT7(4PEA_T73P(C<:\#6>?-:I&X)GE72^_QPZS^GM;[>
-M[`('4DU`)X;\:.^C-%L?W<;CQNO"&#!#@T![7'405G>XW^QT?U+(5G>Y3^'J
-M4;L['J_44V`>P0E5,,;GT7:9:J*Y\VJ%]'I2=;I>YN(I\)0YO=5[9QKI4'-!
-MY@Q:TL6@8*99/Z6+>F686[@*_KIH5S(KW1C.OQ)Y/#Y+>8F^OQ")?S&<@%-^
-M1S/V*/^.3\<AC!&FA@YMF=3,AB)-XP:.2H?`*!QX%RE-OHJSI(]\A>6*)NEC
-M!INL)5UO_3B>3SQ`.C.[1!8WLX;=+]#%P3ZUJB\4V9**,8*3N,\]OLSC!_TR
-M(M?L46;279=[R%$I5JB*$;]/V8;*XH5B+&>SR;3Z30**:%6BW1;_*P#,AP]W
-M`LHW0B\%"5.5"!87BBRNIT$B%WQW&@IQ:W7+488/H4Y*5@_VQUS"-?U=!B$5
-MFF).W-H?TU[SX^G],:.0":]YT#RT!XL]^>*I?/%<?\PLCM>9D"^0ITRBRKH%
-M0\+N3^C^@U,>Y48MM#\&PZ<_QH[*4:C\DV$T/_/CC%"&ZQB;L>YD=2*\2:TG
-MI@5T(]`"I6ZBYN>V^<9PU>EJR$O#E:-:;M)U!]3M0#Q'!ZR*YT`+5_ZFQ=*C
-M7T9C>:^>J\6L23Z0>:$)YW%R_S35F^:]Z&(R=[J8:^#7"+_?P^^_X/<1_.Z#
-M..IF9%87L9NRR;@.4,.-J@%TR7@F(J:$!M`Y7$H`.(N8(G'JZACZN=#-!QJF
-MFZ_"*T=\*OR!GU5Y5M76LF]5A32:8`N>=T'OWB&QQ3X_Y+B&7G`#=B"_*]5?
-M`;ER/8JH9[L-L\460[:3>+PJW0#*L(0!EJ)_<(0C90E2/3@268^QZ'_I\Y(J
-MRX?7D'?0CWW`$?GBCP/OF%XC0Z`XG?UM1X7JV'O+0G4C*["+%@T<)-&5^I%/
-MU:!;@'JC^?]N-.LG";S`EL67D6ZP(_$S>I[C=QSL+_<9@G5"=G#=$-->-=CN
-MOA@PQM.#ZR["*,=YEW!51L"`QZ144T>O@$';14YWBACWQO@7W!DSW>;DGNLB
-M_E\<+"FO4[8]`Y:MXY@S)MX:=I\":'6^AD+(XU-S$IKO!DLZX],PSM=0@!%>
-M->><[A*!QDO`N&([PL"%?SMQYP*DE&TOX=$@HW:7>+0\O2@^J<L13D44K[:)
-M'-U$*[MM7J^6F+CSM+MV.1?=HD(/+,=M>C'AV_+JP7`)V-7:&><_V`GL>9U"
-M0`T[#DJ[\N__J;FI)WV&T2\*O7N=9X7K5+''I\$/&(:A`D@(L7IP#[M66U3+
-MPNM>O_S@RI'S6?"B%$MF-TX9B'A6.#MP8K>%\0Z<('C;*C>PUFXU:6\G3(=7
-M0E0#V'?XQ\`HD0ETOP*=*;:]E^(!:KZW.O%>2B5]Z7O/W7=<3!RO2AS_7M][
-MJY7WW,KQ:4?3YS,?]/QZ0PH]B0E/<6H0^/FZ,PQZ9#>L@$\4?-IW"MC3!V*]
-MCU-?9L$.FDZJ1[G/2K6:6J&@8N1DBUVI`=:C_-M%NN,?/T>=T(2<[\V.K`,_
-M0;_-]NR*CNSVU(YH1W9%VU[QK#:#TI%#8[FVO8+YEGT"UU%I<$'LN0X.3P>\
-MGD9D!<^O`ZEVWHU2[5/271DL*A2^*K*(ALJ.<:ZRMD/M%K&?0GN/.3YMJXE6
-MM7'49HWJ:IP2@H83IJ)?H])L8^B11K7`D64.ETHJV;TQ*JD>&8FRR)P^'3\[
-M[#[J\^`6%!A]U=7O,>_EVA5N,C)D"PVET\,>1P0DSAS^L8AC;ZB?__>HZ8!I
-M7[7R71OJ-7UTJY35AUOZZ$WV;K.TIU"WEAS'BE;;P&2RHDTK3'5$BE>;^7^/
-M(,!;$9ZIRZ-L0`E8"]^D2TSM3)L37FB`5)O'=W@,P`_:+22J$;J=<^P%:`U!
-M:$_^L:BIVU1EKE;VF7"<6*!:W8*IT^`&6ZL,J5A"ZMC%]Z4,'.LTS"F3+JQM
-M'D=B@;6/UPT,,082>WQ@B+P+P1DT.&-,,%-KP)-55J[^%R3ZYZ01$KG/F3I'
-M*&1RFSW*'9.2E!E+EH(1(Q+W6/E)!5L9;+$RPA2GVRSF./92JF#57B/13J8P
-M>)>!0<)<`,*8YH1_:(`,P)4MN+D$]V#4=J85UBZ,&TT)/*YF<SF&7POA3R*]
-M:MO3R`9V86VHOR6?%L(.O!]/&WB_6#0WFV3D.F:_@E[<..@+_4KP]W03TQH2
-M&ZF[UP>U]U]:^X\G8GU`IEK"Z]71-4=OW#Z/UZ\LU5(`SZUT]O%/1*7$8/,U
-MSEC+U=#I,SK065X\G[=P"&EDP/VN9N6?0]0M!B4NAD&/HL$O7-202BX@M5C6
-M@?K=8G$+!?"W'H^>L.K[\Y92"&80COK&/1HZ5\4SAL<$&2E,R^H8W;T74H4I
-MR`G,/N6S/^$Y73[3@$]9\"Q-4[=F%'.#?^'YZLI8^"D[LK[P6CNCG='K)4>C
-M/7CR.3>PFWK]3^C(F%_TCG`0:ENM!8F?9A[U@UG^H<67>91DO$+=_*,@'E\S
-M]9G.2V=4]/=_P]$I[69;3Z##OY@[B_K]'\:'0>1:/P(H07%/W9J5,/3)_,&B
-MH\)-;1'A\Z+CPK5MIX2/HXH%@G#RY3@$I4+0F_&?U:W1,)X_!/G@<5%[#.*#
-M\NOEVE2OCF0),=YB$+^1$1&NN>5;!G%6QBEA&L"]I<PH3H;`<;=\RR1:I"@+
-M6&:<$@\1:/S8UJF1@SVN&%$'=J,F)U@[C/,!2&\99.@9V(W*M_!,/3%*NQ'V
-M(0C=A[#W`NRH%#7&'QY-7VP1+A[0*4SH28I^_8!&7CN@T9D\H/%?G\TX$P@P
-M13N;,7OD;,;[U'A6^+ZA.!>^[V+<%+X/#V,TZ_`G=XS#<]S7MD]:J!?Q63R%
-M[J'0-F48DILRQ@V7=0+2SVWK%Z[5-V6,US9E0%%=\B1M8T>]]M*YT,@,?ZR)
-MM>O/_\Y\%)V*RM"FHLZ&*]3AN2A07MJ_3GG1MSLZU.+29T%_$"O\_H!AI9=J
-M+O2\!]SFQ&@BD9.G89KXU7Z_5]-@(&Y0UV"N1CLKY5G=);JXQ;K9HNDM"M[Z
-M5ULKNZW;GM6UFVE7N"^)`NI]/ZG6'*9`\H;5FCR_7TM.W/91:DV>IH"0H_+J
-M4\X/^+8G&#PX83#,3M54F\?^I*DV>_0=\/$)29U&Q6,`</O:ZE/%+<>%>B\]
-MS@=+0,5&APN5KH+*TB@-2X;N\9+%H\X!X<9^=Q8KN(I;<ODV/)/>*>9NF:Y5
-M[=(LR>MI4"OJOD0K2IX]D+QRIN>/&L['\0AWQ'G\,,Z.8Q1E*/T#X7D\4?W4
-M9>4(3P`^?K_(^OWQ5`T9G[<ASZAM1,VQ4OS1Z^1>W#_;V8MNNW2'2CF>)NX+
-MWZZ"M@'F,^<B9Q:!97\6/NK$E'P\'9SL3G(YJK^CWOXV:NYT$Y5T?D@8?\<=
-MSH$F<\<U'6GMJ>W75MP1[R.[46_7-@"FZEM+K71K:79R:VE*[Z2]JKKM.<W%
-MT.I15IJT^8]TT)TQE-YTMIME&K:^Y@*-C84Z;,?PF#H/'UJ(MJL%]65Q`@X:
-M*?&M9C"&[M^R7%+R5L9\NQK0S0,@GH;$Q=/6HK]%J0+O0K9/?3LP06G<BSO(
-M#"NI<_UT!L\3TOSO,R!R!T;&39`2-T6AM8-:E52*Y3%><1JZ9R6^Q3_\)]J!
-M[^<?_2V^*'F].+4!(KSU`@ZFEMDCAW(:O<HWSE*=,7F@V`JIQX@7UI!8_&Z2
-M@V$@"!)@R73WE]]N"*(ADP&F"]>^.ETS9-*9=MR,"H;,(#5D3&C(<,ES8!`U
-MY2)>GTN/C/L]C"LQE=_A'HQGP=^+_(ZJ0;R'(HJ*N6Z/T3W%X93G(]1YC1&=
-MSZE$!:[RC8[4BHYK%Q;M$;XH*"N9,F5O\$2>,<J6/=@SYK.H1S@T)9*K\KLB
-M\4U]:@I27"I%2C-;V``3S^E3LS`,Z)G2K:I=++T192=.%#N.;85RKL5R9BP$
-M^?2%QZO<CV=#')7VL,KZ=+3+V**8\"X,_:,J.;HB,R*FZ^#BV$`YFJLRB5$[
-M$32G<KL-TMCH)9K09(Y#`V>H96&&Y^%X&>G&8RWQ%A(,.]A[\-C!3PX>S03%
-M>^`LZ0/KPP8IRNW6@8],!QNSG9!N(]>8YH2T&PQ+'8=(9QW:)$EYY,6D>G$4
-M("T.C9<S9+?C4-Q#B[/08_LA])+BNM'8^1'\L>AEF:&L;+PF:0,'`\\R=;G=
-M"D\.GN:!=P>.2N\R6+@/;$P\T)/^<CAM^!L=_;C%:VQ<7\\5XH!EF,?D"60H
-MT4/H<:\LRD:6'3`IW7^`;U8_2)1EZ$QGC-^!9@L(Q#9ZQH^82R^<$K+!"'?O
-M@UX[$U#%(0M]V4`]U>G(?#)*=VS-;]ACH7Y6)_2M*=_1[Z[<:4$OK".AR'9,
-M*7@:GM$"&A[#Y_:GHKA?=/LS\-B&[[@153V`_H!"]K9GM(`4+X;HLQOT!R8V
-M0EM#+W^))[2C0^G6B";7E;9N])>WL@9AEM^G=*(KE`[%I\R&JOM(0N%Q\FN/
-M%?7^F/+I"]"'&53:E3B\2GD,KG-HO`X@S,<;VQ)JK9BEQ(93QN?@Q`LEJ`UW
-M`YS0]W@@`\?=Q!K=!+`-<B%/+>XFG$'V2Q_-`$Q)YPBBP;6M[,4P8$M1^3^H
-MUV?95ZK7S?RH>N6,U&O"J'K1U1LK2U=O<)^716Y)R"U]U.^RWH!Z/!=-I(1S
-M0U@F\L.>&>&Y$6**?F3L+R]D\X3L@)$>S'!,4\")R=39[V*#?%N4H78/@G0/
-MRBT<_R!NL`J'3@/S`MLTO\J,)R5>!Z]X`&)Z\'R&F*:Z^SJ9+%<[R*GN\$\Q
-M9?Z^UO/4*^)U=*BG(6!FG`O0,[8NH,L\,:ES"S6?=J#Q`C`\#.Z$LZLYD[@'
-M\]UFI]O2V.%0"8;QH:U4`^&$?PNDU!6+G+A$N?C78;I<@%>Y,%ZF-9KLYN)=
-MX:IS_FI=GQDI!$"?@QK)[D3\=R.)GT`R./^J-W`!,2&!7((9CY\IFL*W_0?N
-M%GB$%H?GORH/8W%%\4/Y[C[M>(B49Z/S-=<>Y>7?X^Y+O`LD(I=Q0I:TR,QU
-ME=FH!\TX^&##95:(@"!4S$@9AXO,LH'.%CCI)JE&/)8##[G%3@:=1>\V'=!G
-M)-#8M]V%7I,!:RA2)Z;M1-D23W5VMJ21SNT8@Y,?Y8\##MN7[YY/%R6O"K`^
-M>1[&*?EC(KC`%.7`+R#$L7=GY<_1)QEC9':<%,'KX$N['Y_/-'_BV/NW%1AY
-MAD2C0[0;S_VKWHT)^R#>28>S*B8I0Y5VYY6U?K43$C<?A'[[[Z!3!4M[Z'%U
-M*;T/FO63Y%[$HIS1QDFESP#\C9;\*'13*9+K48)1]$"!PCW:;G%MDC)A1;\+
-MB/X6C::ZQ-@D7P_QT5$0'[X<XOI+(-(DU-`?HYUH>@DR392=2?WD4$373S3K
-M%#44T*K-H*50#<4:'=90W.;DM(1VG*YQ=4S75,3Q]:3*7(_'G6\L#AC:N16K
-M8^$J3EK',=7H4H7*">@09K"L-9UQWNM4P;)JO3F5[L;,5L[^&;OF]2@/NE7M
-M$'7?+]_!BQH'M0--^@"'@0,SX<'-=)LS^WS*7W5T:]_YGCEYV#XW2U4'5`\]
-M^G@G^B_5TKEGSA&IZ8\9_((I8%G1'V,%HYG#*7RCF<5;MHUF8W\L#QX&7!U(
-M@4;G&/Z%UWSDX"X&VOP5!K3'F4=>QHXJS-`<I`0K/#EX<LXC8F9F5SPM\]6X
-M*?BZ8>8;=4*F\Q^B.0OG%>,(#.ROU?U=EI44,LLD,?)AT7CBSC`F.EY&>%AP
-MR<)HSAN((3*((7GM;Q2/?;LH'M.TZ6IAO'._D.[<)V8%7S?'N>#K'&+!DM?P
-M7&@3(Y@A&:034S,[X\;,W74(CV56"I#(<KE^6X;Z[9V@WT;^6_KMCW?]"_WV
-MR*Y_I=^"W-8TW#+^X?^@&NZ=_*-H24+1O8]K&NXK6,&`P?E!7<NL8MJ1-F?Z
-MO,KM"M5Q,Y(Z[LQ.7<5==R45ET<5-V#4E-P5PSHNZ?0%&-1R=0W7KVNW,\XD
-MM=L_.CNOJ-PF_=]P^>7QVH'S@1G0-Z&&CP^<K\7@_'W2/O7PR8%#(>MS8FZ%
-M-&1J&1=FGY.*&#&[0HJP$-#\!;3Z\#$@Z)(=R$/=$<%18%8`%B[YBS\P`\B[
-M(G_?X1Z/>K.RB^JLYJ6;<B$.)YC!L(;@W^G!TN=LJ+_EXR2E\>03@!S>I`;R
-MZ'FMX34&*"96]SC%N5N;<W1S=0&#7)4(L^TPE/*_N)/L/WPR9!&N6N!%EF#%
-M,82,-IO*V:7X"1*U%N<4]ZF8-F"JO0I,Z(3+&<7=W%Q^=[CD`4?D[!^2GCM$
-MFYAG?0%3?O>=I%">:P`JW"Y^64=GP6`@T%,TD:TY]B*5LLJ02N<U*L62F[/,
-M6G6@!BW<2FF_^CAY#<Q<G"P9.$^OCS1#O=#/A>P[_%'^NP-'2!KIGKD?UW#W
-M'58RW68Y#??GOR9UL8=[U*I!J*UXG+2<"QA7DH$`5PLZA?.#9AYJ0*+YG82U
-M@!")XPTO$I@4BZ5>]KZ>$5]R&X0#,OP+E1GD'1AI0?08YTAE*OJ-5QKY%QC2
-M8FG]4-W",*UQ]3:,341[+*T7#!%<F!\4KP$UPM'O45)5NKE8.WD-C\A6%/1A
-M#!A7]$;U$#R#37D!0M6-'$TQ0YNOA`Y@6$`6LJ0[_P[.^0XZ4$#D[S%[O,1Y
-M=,MM^3&B'^`&X1MP#ZO[G,^C_'$4J#?Q_(V%9I>6YC$*.,_1W]L,29PSFF?3
-M8!_-8`Y6#03I]_?@FVRT0I<SW1PP]"Y3:32$!-<-;,$4IK/*(D2CUA&!#IQ_
-MAYELL1S^B%1Q`^],W8M\B0EFGLD4STFJ2\S"/6`U"?E>5AX7SY#4/#$%S_*X
-M@=*Z`<5WTN90'M"4O%A#S^C0>_10K9-H,UHJ7K)NUBIU/4</^:7OVN*D?>_7
-M)KZ8-I+XIZ,2)UWDB,B1V\W^\&9#9VIAZ!CIVCQ#7LTYCN$9OD(JO^M06=P4
-M*+RSW>)2JSBQ%[(%\X`I-H\/%L]KSJH,%A6+*9U,8?S+(29XZPUBBCJ?C8_W
-M*WV/X^POJ-(+?T:;=M02@`^8DU]#;B'*N[#[:&U8/.<!VWP<#HK!IY^N?UJ9
-M:*:+`J3%*E=P_"[WNW(J_PH>Y,7BL<I^94:<MJR\V8Q;09)N?SB>ZLG\U%=4
-M/$.P>Q9VXV@O._,-&!MD/DO&\R^\0S?1@%#EH1JR."A,<'X@<.$7F1(\P.`5
-M[.#QJ^@2Y7CG83$;]X"M8&5;O;R"BR\.OVB`9/+J0;(OVIL3[<G,[(8$F<!'
-M3V;BM@Y+:#\(`8MI+WDW&I^1^4[8/%[&_*U=>*8,>2W^`72%S#?JY4I..VK*
-MJ)QZ1/?PI0R!^BI6>GV5?N$[E95"!1[M6X:N5R7X=KVDI`JV2H%N3ZE`<V):
-M+BB'K^"?^'PRS88?^"<^CTS+PP_\$Y^M"#M&G4HS'C,F:J4NKI;,B$\CTZR8
-M$O\$#,E3D3I>P)/DN%KI@D&<2/=BM+T)X5[E$%I<O7CFA6.O\QW16EPU*'`!
-M@_(W#`=C^.]/:-OP$IR0(24RA10IP8I3B6\YA,@P*I8N%Q<1WXJNBA5X')A<
-M<P["Q9M)%AY;LXV>;!-U=K?,#K.+<)^?SR-%S-):XV#R\)M23%)F^LKY1O/)
-MN%'FZ:VS6/XMU!)LX3@Q,WGT3&U\/)J,AR$TLY:J9:PX'C@FII(KEHNI:'94
-MK-#]1B\]@::1Q2-HQH\^@B:E>#TKGAL^@P8_]4-HJ#1P9J&AX&]:05#5#9=H
-M-EY4-_'2@!U36\X@W(R^RC<F-VO/<$3RNP7+(H%;)$[P!,[%.4_@R[C)$^A7
-M<RRHZ*9)YD(5+/.)RI//#!M7OWXF:73J-ZQK9DK3C,MM%&K7AME6P428F+)J
-M!,:=PS`H!&\RJ\]/YFI&<:[V*(E$/S::!J3-'"/.#(Q3[@%3"S_`;`]7F/5+
-MW-4*/(#JSVBP$5.XO,BL6P-)KX?+$0/3W)Q4\+W^@-%Q3!G_5]J-UA27HFFT
-M>;5O&UH_9`"(1UB\R*2LWV66A"RP(C*UF0,0&9)J;;Y.2\BF:D8#WAY/0]2Y
-MJ4I:6%7I1ZUD3V46.BGLYJ?K8/29*+JQ-?J^")\RD]&F55.H.=]?D>42>'6#
-M1?D5%#=PM+9N:H0J.5ZZRN4XYD?WU6[IA"EXWBC>7/][SB#<H+N7AM3-U_@]
-MF/>!SRE#=W8!.ZDP/Q,4LNT7Y0IS/`W]0*775,B`+JUR*ETNC$%O1BNT%J_\
-M1:(X5.7"7U35T5];3`W&S8)>U^>`'FLH/6H]/F7M%\E:UD(4J33W1R6A4&JV
-M6PPB[U%RD?DCO:8MB$_!4%"1^Z-&(=NC&/0HT9B9T(GVG$^I_P(%7H63EMG\
-M,!#K"&`!.:T&H)A@I.NZ,7IY#*5%)&R^T;FOD77N;T(3`&<-Z^0,?:8'O6M\
-MZLWJ3<IKFE\,H#XI7,%Z0-\K5%X8#C-!+\)@=2,+X?]^23@'X7CQ]$-:N-[S
-MH;L6DDTLV6_JEPO#<V^+]L[(/$,J.?*VO)Z-?C+CX(G,?6N`XPZG]H!>PY(O
-MR/GH1S,.]F;N!\Y-N.C'\'[PD\PWUL@>3N;J-):,ETV#G+0X#CEW^X`Y+G4!
-MTYH@>UG9RVVH]LMN"SD;;NE[^FGOT\IZ%8^)Q@/FZ,*M8J3?>*<<Y>O:M=O\
-M+D9V]VD)3E!!GZOBI=(6<8?CT)IB+R?.QKW`T:ABD1=PQ$3ZHI]9HB<LF6=0
-MVW(/]N'99$VL;(H?WH72+=3$B1:O<@Y`02Q*F=IXO!XTU;IZ>4%&4KM;19V)
-M+6'W4Z`:@YX6N5,&65JCX%22NT]V'Y?=/;+[3=E]0':?DMT)V7U:;K%T\,'S
-M>6!NG$\7,H+G,X24X/DLT;0P_G&`K>N8L1#8.__01B-U(GY(<3'!"S<TFX,7
-MBK>D!4R]TR#\EFFX="ZF!5)Z*XRZ)W&^,!WD6C;U5GS3J)\+%#!VN8]B;5;$
-M?X?7F(.R&/\U@)-K^II3`.+F/VJ@M!L&@A?RA1N"%^8(!7B9R;+@A07\([(1
-MP]V;QP<O?)M_Y(?T:QW_:".\!%)[NT&FW1'([(T8&(IE.L#D'_%!RR3AXBF`
-M`(T/_16%X^[>:?`-I1?G4!MM'+\C!GKF]G=Q1`0,=\:S1]_-@M::,!TDT>0F
-MZ"[G5/=@,%ZHNL^UV^(FU9T`2L5?T$GQ'=+9NQM;'<06@)=KCH.5>Z$0I%05
-M37=V;($W_HL"<VF!XT872%T,$<R+0"*^+8/6:0[?AN.[]RTH5H,.I28+./C.
-MUQ:@'>=-.N/^\!U#V!95%JTMRO5V%*`=U])VQ,/M`EQ\G5S3@Y5)013Z(0O_
-M\!>TN8KY1WOA)9Z!M,_&'I(>2%]Q1R_ZOV*&\G@4#[H5K@?(X3M4``Z%"=;*
-M2CY$CQ6M4M1`VHI>&9+CLQ6?&7>LD!(9?!O>S]#[`U3Z6RR][0PZL/:@!N/H
-M'W.M#NM1_DF/A;WT6AT\R#>7.IOO"`ME!UJ'/%:&V4*KL&M7M15OQ3YU*:1?
-M?BTDFN_`'7$C.8_V9$L?(Q?Q;>]@%[>M*'8/;L@)MOP]I=DTY/X[/;_S7"5T
-MD+@)O3M0QWKP:4A9B=M-<)\11GT1=D=`5WY*%0<]2@"G>MVGP*;<8RZN4EJ,
-M`T=-[D1Q58]H,KEMQ57'15.^.[<4:["YL,O])G4&76U!-1KX5(V%GF=[E^/8
-M3E1RJ1KL.-3E/HW")EY7^AQHU.@'>P"SQ;O05PT+5WRH2M=$R.K=1.PD[GWH
-M]?97QR%'Q-'O.!;_0_(-`.':1SQ':CG`"/RH8(I&%9?I/KI&OC=5KC76RV49
-MQ'T:.-0X8%">4R[FW^'7#[^\?[J8'\+O"_C-_LC%-,*O&GY'X!>!W\,?4?].
-MZ70N[GO&@Y%)]RYJDU*+=69G?6BOO]-]ZO5.]S_A]Q'\/H:?`K]>^'T"OSC\
-M3L/O4_A]=J'3_?EMR7TY!X34S@7&.7$6_H)-;L8+'Z>'5'%*<0LGYM1+,QF,
-MZ%Q@,G0N8`M[T:^^WGE$O!\WE@7KNTP&QID0M=D_?J`+`EUB6H-B`06\`M`2
-M<EIQ#0\/S8$4XC<:>C"&ARPS:<"TAJ,0$%X`_6O!^]"_H)P4.LG1^WTHJ.%`
-M,O(:/3*U-GZ"?V$W>0,D1*_MNQ%+%9@ZGW'UTKH^T./#YJ7U<LU7=^^MDEOZ
-MP\\;S)^^A/.<T2&+[/Z"?Z5SX"CU0U+NT[8EU+>V?*7>U@@"XE2%%N$RX>I6
-MO]MFJ)<=PCBPPR"7"92:+5SO&3276ZR2FK/9%,A9P[\@?M7ZV=!MN(M@W5<P
-M`'/1*9Q"69T`UE.56RN>"?6W3!IXO_4CI,'F+!KY?8A<6BN>#=]A@)J%]LKN
-MW,T>N<H:%OO"+=S33V.BIY4I"4V>*N/H"Z>A]]L!/?0"O'2X+Y"JW."Z"[@\
-MPP(GS%6KK.T&<0=QYW94JI65P?/SPHO9YD)GM)%'BS45+-;*^!D\1])5KYJ&
-MF.MC!:;V!29^5R2XUL8.;]&"].9@42&>!W@.$K\SI@\8"H/?3L'3.^.'1ZWW
-MH[]NYEZ^#1D>VM8MYE%+Q4M?*/O+G3ORT"_EFHQ3'6G"51D185K%PJ+!QM2B
-MXQN-QH^*$O!V%-XZB_:(68O$MQU[B_;P;;\$:"_BK`3_`"ZY#+Q#;VZ[PNKQ
-M9'VYE[P3F*"\^OOA]6/R&@S'8T3M2,V,=,P09F8>$V94+*P&):08AKVV@/Q-
-M:E*SM6#ZIB\2WP+[+B:DTU(;C0/OC%E,SJ;P.W^O+2>_ICL>:ZJ>](;:7V%V
-M@<%5;V;BDWS*$Q^KJD_!K02XBM;SL;:P-;PDIV>0A+D^Y>ESZ$F:4&YE\011
-MB^(S,=KVTI842!4?3RKPUM!,CS*W%:#4YX)&#X506'0*VCD-C2"?OZD1ITR'
-M;;#8*!L,5Y$,PC*ODGX6*IY6JWU?YU5>0'T73(?E=!H?S\U]AOJ!Q(V._E"_
-MD*/D_Q+7LY2IOTP:4-)^T.^N0O\$$)/9BG$D`JVRE9KJ94].L]23Q1F.B!]5
-M*UW?.E5/*C+(^;\A`W,D9NZ>N:_U8V1C]:7JEK#5(-=PO(0'@>%2Q!9>^D_Z
-M^M7%5_B'?J.]OG+;1CR(]Y;Z4.1O*EYF9@-=,N0#C=`1*:Y@Q<SB5#&M]P<&
-M]*FI=W:+TS$:5,R)Q0M8<5RQ2<R2*SC<O9[:BT>.4\44\!KL<IM3L-.X^TP1
-MZ@RYR-097LSI-]]5G9/="CT9]!S_`L._D,[_*4JJ!J7H8+5'O4'YY&Q2:0<#
-M>Q!/T'0GC-+WSAG5*D7LEMR#1A6W4Y@1\)8G6MV<,8*<`WC@YEG][H^#H@UG
-M>)2KSZ%&RU&-EL9N.:D]BO50^M62S[_BY@:.&MP<.=KO/FX`2\%]F@+@`<#B
-M6O$3J>4T([#!JN,&X'+'F>!&GKB/SU)5`U/*!`V,.$]J>5\5"Z1U[S-2RTE5
-MG":M.PG$;?E(5<5,(%A]E_LC)AC/KE?='\4YU7T2M;KW@9EB,S5-K2=5[V=V
-MU<O9>*#\4B.>,+\TM5ZNR(A/K1_X8*J*EATT*XB(UBXFJ&Z1KF'DS=RH0SR\
-M?W?]K_D,"/7X77CEZK=;T.;X^Y._G,_@AC@S#;;@9`57+W.8H@QT>0B/+8^V
-MF$U23YHS*EP;!D;66B(QP?!<J=$<;CGW]--/JU7]8?$<^ILKC=3QVK$7LHO:
-M`2*C5\.+OGXU?)K?I_1\CN,WN0I^0]_(^%7X7PQ/)F3]XO+5_;6?ZS9GB31D
-MP'MWC>)$L".K(#A@`%CE\%+K[*H5<GU*T>?:\"L?._P2,/R@]%_B^;N=N,2?
-M2`'SE@[KL+D_N+:=Q<-7S7YEW,]5;:58FY'1G*G`VI:$:<]PPF1U`Z>HS:I:
-MWUIO'KC@B-3*J5K?KXNILY[L*6/460VG\.]:^G<5_;N<_EU!_SX!?U\?\P^M
-M25QD=41BCKWU)"O[R'P&1D#.GI-E>'WOZ]!,U!/V355CDR`\Q0)<5Y$2J2`9
-M2OMZT"T'6HZ4O+H6WOTP2+<A$(]/S7D)3R5%&H^4!]8HIN".:%-4-K^'E&)9
-M/CSO5#LB>A0$&O:,'C9^5-AC>IAY5%A0#[,,AXGK\3MCY/LNGY*I500^O,'2
-ME!.XA)P/J"XY15LL+UQNYP(61%X`K/#>XH;!)X`D:HZ9GNX`5<_S!`8AW@XY
-M/)?6=DT=7I(YEKZ<=)I-GHUO]?M(3N5NR%"]#+CTA]@Y2%8Y!!0O-8L;M]$H
-M-2=R$L_M+,T#R&M,C;9`'Z$S5)L@?1<`A(HRS[`BA^\H&!%ILM3L"3`-?>,8
-M1+;G0WJG+VAQX[<MP7D6B*U6ME!;G7-$MF,YVS%B.Y:-;00TV6UFDOLU6!HI
-M4\RTH^L])"L7^T;#DU^XF`"KYC1`$13.&(=H7"7STDX#1%1VH4VSQ&XGR^VX
-MDI8+A5<O\_J@*MTG:=6GO7ZR;'2#'\9WJ_ZN3<Z\/N:?[E\(C#D+H*R%/M^%
-MVSB99!_S[2K'KI7LKU(G"]80A#2>;L"'\I(6/MPEZ8IAPU5,'T/6L\1"*LWY
-M^XF+J\[?C0Y>'M\R(.9C])B0X?1FZ,.SD'GC29S$'+(#7-)LMU?[U9P\>G(+
-M5'5V&/W#3,3+DKLY/+G,+%>S\G=!@-YCGRN7H7.8U54_\*J1D<OMN8(-FM""
-M.Y0"C`=W8M-S4)H1&&2$!#CB,+D!D]N^/GD])"RL+RZW%PCC^1<B.G;#F"W@
-M,'LE`&(9NB+\]8`&7H7.XR`F3`9`<S$38X$O*_#`>^PVX]?E].F%X<&?EPR&
-MU^GY^C`>+.'E=KP_UH#G#-['R4929I8;6?E^H`]04IYOKB==D(:KG\4S!+>B
-M!0R!M&4^I047O9;8<^&7%\9GN=T.O]F@,_L!!V.U3[F3=G*K/A+IN9107KD=
-MAIR:\SR.N"5V<](1MAKCEV'WI`/R+L![+,[8/UI/XRCS@DGK\X=A#`N+26GE
-M*?3;Z.""YZ\1T_"@Y3GQ>473D)\(,V_)8D_@E!$&3XQ/#YZ?CK-.,T0\E5G@
-M/>K;\=0.SM6>70'Q+P-F9JB)U=.9B@,W5^,Z-@]IL^=!J<B+M_;H2&M!."DI
-M<^1A.RK%0&1Y7.L>1)!B[6OHP2L'Z62V_MHV_)K"'DG>C""5XKM!M&FG!>/=
-M3%'M%E1%SL`MI!BN?,/(4&\0&$\PQK8QD`7=<T>U)XX!QZ<:BR!'1Y58/&<5
-MI-[\@S#[GS@^BY\(KCV"IZ@%12]Y\!YXK93I0Z!#H?C!N^!=+"(/-AP9YH!J
-M%H)P4D`MT\*[,$EXH?5%JM;UN<\^31):9'.O6W_YD89!UJ45Q:/UMV4RS/"1
-MM,E:8">`'DQ='C%,Y[H9)M"_TU`([^8`!$-!)+^1N4G[#0.=..D@F*2/!D?5
-MN[44$4%9Q+<=81B=>Y($*+,IE"*37T1"%!?S;7]`+3MJ=3EI1/-I_S;DL)Z&
-MY]++F$"*QF%Q#@MG%TD.IL%>$#UIE!_^,=*"4/I$3QCEE^2U8[[;9"3C-OK9
-M8^QJ"R*EL>K)(/GYX/KA''+I<OR;M0*)1G'1ZX/THQ2CU89LJ@8I_L&H!#I1
-M]/Z@5==QJ)CBNSE'JZQ!X*&B\YTTL+D/K_=$L+'_??_Y]N7]9^&8_O/_WF=^
-M=6EM5X\2.\FV3W%$H'MHO07$++)_C_+*>!PQEM$C0D^/U1+3'1&]JZ'DITH#
-M2G#'7E**RH,F_,+61<7L6W>!ZB3.`N[U<#\5T409+11K,._;CLB+:'^62>=3
-MF_>*/RAUI98Q8A[D6?'U>>*5CHBF8(W6J<2\L?J4:!FK-PGC`X91@IAJ-H$4
-M'YF7AUKD$50"A7%^Q0*\&#T]:8#X^65C:RP]1(XN4N+X:;9;0VKS/9*:NN4[
-M.)A\BOBEKI4)PZD"?3J]R%%XN0=>/#KA25>T)\7K4[<FQLW'V1+T=[>&V2W$
-M_"K2$2CR,PJ.T_LN0DM"Q<N'4(>P@&;/)`L54;[F$F2[`<S^,77^M5`!QL9&
-M4V(/50+%?POCQNG2'DT?,_\O8`1>0*Y\,H.*;&NS%B0Z,7#!)8'7C-89L0>@
-MS$9W\MQJW!ZH!,84?J7^Q&$_M`92/&0.;1!Z%IQ06H_Z=(#!^RNTI:5`BA_B
-MT'%ZHM_GU5;(]N!^!"U4_`0;CV86NT<:CQMC(7Q-^<U8OG^X0V`9TU&UL>'H
-MJ/$J3U,W8PN616/%CQNPN_J5P;,C+7.%XI+E^81&E+RE<R%=XW=*;X:'<!?]
-M$F\85HR;\/`R"W1,4#BH^B[PPYW&;BHQB:FXF\2,H\^\K5"G^"]0F&;-/H+]
-M1%-4ME4>0;%F9K348]`9EJ?(D@*,4II*]R>0OE$\`SWJ1_`_70)ZMX<2#/LR
-ME.V)\_@W`%+TCU]H(W6)?54H4BW@KH15H"RN&-&)X^.@WJL@?(5G&>#W_,FR
-MI/A!14S,1D50TZQ*=EMQR_FS5$@(ET1`K[3JEH$5A\WGX[`34K,`C(DY2"&?
-M^A:N@^*E(*A4=+>>"#(N2^MY_,N'\.R460P3`2Z5@#$U!U]AG/FF?CKPGG31
-M,#7BRC^JYK13`P8*R472#IZD>DHNJE/7@=8?X"$F+Y!VW7)[8<`(*!4@)X<G
-MFN&,QZ_\Z9RJ@K)3"&,XH`944'_*3U'U)S?`HTY9[5<>OF(2DH5MAFKMW!Z:
-MH0#U6L2#6.1QQ,/B@;8>CKC,U7ZYFM/T;;LIY1Q4!5*6*"D`%H(*(.O<?(B"
-M1LFGL0&J)I[6M+`"0.#869H24PSG1P/8KJ77RYY;#4%S_:88O+N4WVF=//2I
-M4`%CHA`462RHA!A-J^R%8`S,Y^3OLF2962[CM@UBH;PIAMJK7(VJ8*6\RKX$
-MX"R'TL,4$NYK08.B`%#-J]8*]AO*[4407F1*26A8N91OGJ7F5AZ:63IMT$_T
-M86RE,=UCU'@[;=;-8)^?;WL(VF54AZ?&<+J'S//`1V<*:K73&W)_!?I!(?XI
-M^17NU*`VLAE>JTDIVLA4H*1IJ6?H$!JLF-X^*A.$-["_0K$].OFH487ZNSGV
-MNG:U\IA!J.8<IU(A8/:2>0T]FD0*9`.GX?^4H(Q%4MD6HR,2,)#2Y]!*Q?&C
-MOEU:A^PC)X"O0>3$&5TI=&0QE'MK=-('FW!UPSV`'9EW`)U"CM1OQPF+>L#T
-MJI$\HY"EFC&E[NQ8PW):P_KMV5H6X1\-:_40G*UH6*5]2*7XQ=1OQ^D)[3*"
-M>E3V/D#(2_0,**(;RI,9QFL9+#3#4\D,.*W>L%[/8-7*Y-MJ4#9?K[[]&VQ;
-M9>(03E;1Z_*HP./;YD'\WU%:[CHW#EV2MN+830W[3LLF:%!SM12S+9,Z\Y!8
-M:`BW#CT_'CK9XM.-[Z+!XFDP!NE!A&\G6<]VG`CJ[85RMA7``-4^WX5/$+PC
-M)-,H=(6@*_+;G8B?5,0(J5TTJ12QT?FFQKB2TZ>J0!&.MM4X;3Z)S&-QGD(]
-M$D_57B%!-DV0K@O<$;)CD'DX*",9E#$<-#X9-'XXR)(,L@P'69-!5BWHBIUC
-M]/07].?"42I1.E5+I#V%L7I'/YG&`N7X%X;J*T!%(&S+D^,1Z.%Z:0C,]I=R
-M&T_IDH\QT:D?=(;!29ZYC)"!W`>L_CQQ"N@9><%@$-GLW$@DP@B8="Z&0%(7
-M(T[?A3,"X69[[HMY@.?9WXKFI)J$>"!'@08O`!Z>ZT&V@Q;R;+202SS5VVS8
-MO1S]RQJZOH/Z[YJK0'"4W@-#$-B/F7^AL[Z"+&G+#>?BT;]@S;X-J)OD\EQ+
-MXX>.B&,O_\*!XB6/601OO:N^U,0T?@X8F1FA7%F($Z.K[%:<,_D;SM^`E9U+
-M#*_0F95%G&R4[\13RE_$B2_0X*&L-77;<3J'8IZD'RT_O*3-4JT<^91J=EA\
-MHT([K!+3@H8)/MP>-CJ-TVPO;%4?`&BB'5AV42`5\"FJ`;D]UPN:XC4TLU5C
-MH+;=%H8*]H)+]4)A-N:%G'-K(!<*_)<_H9)`%^XC^5M5O&]NX[Q6%4G5]"U)
-M-0NH"<Q%`,G,P:_-7`3UWCBQ5<5CCWC)"7];50OJ2$WQO[6JJ'$V_KE51764
-M?[`06%W\J1&E:?:PTB!.HU5E:%6QFK<-J.I(,9?6Y4SOE='!N+<@#N>I('YD
-MWC)G6!N#+HBF2W+2TJ*K)I;DC*5O>,;2PHC7^I0=H"<EBT==%U&XK-RO23!<
-M/DDT9@UC`"5G4N/!I_P>97_7"!Q`Q#9FRM=6W;`)^6D.I[7J+<.4"#_TBAEO
-M2Z;T.*&,I@<R56K0XZ9V]#KI_16#9S/KY0.ULX?!].+EA:4,HZH;;AF><-CX
-MS2L7<_\EQ0B5:.\LCI>-;I^1V!2,G3,6Q,V7@J").,A(]2M$O?WBI4V_\S,3
-M.J(P24U=B]$]#%_].&DZL>A).-+FXT917*!Q=(S6C8PW%L>;;O#WC>+VQ?-P
-M%D+XEF.OD]KP+=?MI','A4*V%+&6:8'-?7&S-E$AT^1:J%@P6AU?9<^CYASN
-M"O7@^=%TGEVK`LYQDU+,/SH'I,1<P"WX$*YRD?S6EMDHX<3-P.2O/H('&=\U
-M4L>I"#[0Y]'T:/6M*_5NH&#NZ!Y>,ZJ'\VW(:*A!5*/$/Z)M$T=[)Y>&>92-
-M6GO%Z\+LRPBXOXW.UAB$*H*'R6P:2A)_%GQ#<]ZD8VD3"CRZJ:QXDXD$O.L>
-MU7)/P$!'0+629J366?1C(VYGSB,/OT)G4'S5EY+J]==':DWW#N)J1L\']:7I
-MS,94;0H'0D>)-US?&<E2B'HRLD485$S`@G.9^A"#VH^GJRHXQ*`S3HT`/BZM
-MKXR9@!U;?KWF"3J3VK]]^HJ(U&/".[HR\8ZN$:3T":;A_-CK&M,T"Q;K8=.R
-MB;?48]/7HX_X<*QFW0Y;E5E^+WI,'=1P&YDBHO>QC7R.`!H5>*FEK(!1,`?@
-M&6N45D:WD6MP,W2RE+LO+45'2J<'MD#]K!F@)G1+YTU""4X>F)^Q"!G2>>/F
-MV=)YLS#SF3QAEG2>;4Z1SJ=OSAEA_!;IO*4Y4SH_?LNHIH/VHO,AN?X:G_+Y
-MA\D^DZ&5BDU!Y_DM'L>GOK\/CL,A(]`YBV;[[/J04YB`T>'%ISS5P^QRHA3+
-M<[=>>`D:N/'X")QAQH!T*H`.65CM]7M\Y-5H3\KP5`YND0;F1JDX1^_5%G%F
-MN/Q[S,CLSHI_TN$!*:=&5KN&T1R=Y*<?7B&)WC]Q+<!+S\K+\_@UJS70Y]=P
-MPX-A+*2/;R,XAK7>ZR25MOYH1,Q`3^.4_JA!O#>H^4I?A6<.Y%=:G'BTF96X
-MK#B%E`]*C+.[.<5E0,I`ZP0,>'P1M5O]VNC$A2_+*6I?F0&%PSC_#P;;X8%.
-MALEC!%:%[DUS,HA@\\DR9K@&M+W\8,,WV^TZSJ1/AT.K@MH[EEC]?U4B0EGQ
-MX9CR<A&B1J^Y-22-^%FRA@/[/`T,V87F0!IT'I??AZM;M6AH*^^>NI+%CB.W
-MW"#>"#0M1#:@S5K,1),=8072/#[E2<Q9/IQ3IYFV.+>0!6N.!T+BK`TNR&G!
-M=V#P0BY@J*SVC(D`S`R5F.62#'JX!S)5)G,`:I6&J<<&CBW`-T9(V[8$NET\
-M95NYKMW-U19@\C00R^UYN`R&TP<X=>#Q5B_3`6&'H6G03O>BXNR!U+.'XREX
-M\3X*WO%I$K(*Z>!G#QW;7#<&0L#@PF$"(.R>T67,3J:PZVNKLX&U#R<(+U:=
-M_]C,4\J.4-'M?&_+;^A,EUI.E\WRABMV!8!YGN':C12,(S;9<F+6MI(C(Q-J
-MJ$)AEX*1#6:"%_2#4W36I`A`%.;3]3G+X_F[HPF#H9Q*9SL$YN8C%:'RPS$X
-M#9MG`EC.:+.11!$9H/1LE(P0:M5"*1$AV"X4TSI"7R=S3E/+[RUH5<PD*:9A
-M"+,Q*33[<!A"I!GS(+8<L07U'8?(G"(JS9V`LEB0!*V3#S_]GC`21,WITX99
-M+O8LURE=J--U+$N2J!K3RXV]WGIZN4%?*7[)W@"OPZR&'/5+/7G2AS/('!RA
-MB"94X'G[/9C(")]Y`*M$(VXYF8,KEQZ<KKW'7AE>;B_'F2M"UUT#-]`I)3].
-M*'T7;^61J\V:MH%3AB$\8T+'"K\#/)G#TEEC#,7YS\!X[?T76F?(]?L:YAGH
-MA18(8U3_+X&>4:1/?[E`^[E+RU!4O0P2O46>M:^';`.OTO-VYT@7T@1L.5>R
-M;Y4D(6#?*L>`D;[EU_H5-@U=7D&7:[]6/BA4>`4D0S>HR,A7SANF[I5ZV#*<
-M(H-^DQDE!Z(]IOS=I@@TQ&P$8A5SI"@T=?2$*9^>[1*V5LK+[=:!5_&P7C$]
-M=`PT8)`P.4#:M0VHX2+?>_:DU@K2A73^(;!/&=7^JSV3:!678Z\"JJ_%+E#I
-MQ0K[E1-?H8S)[1UOHI.:-CSH"1?6<>7/;*1&33M2B%[4<@$*V88FJT>?F,-9
-M<;[M/0,5,[:&/.9UABY`P%=E-52D@/$'L@+9?-N/(0E0RP.Q'DG)T@:+":NU
-MO%I2LGL[(![2%QK%!Q"+*5!^+Y[;.O`JO1NTK<E(;2U<+B^D50"J*[-.(.X6
-MR)?'B#8]>KFGNB'X*_2>2-6CR^US62BH$$;?7"G"XM2I/D2+!E[-8^BDM$L0
-MT8"$?EF"?1**6$X,=$4?,%ZR#%0?!9L6+/@`)\\W0Q.NI9.&JT#^X#S@<JJ;
-MDGDHGJJU&.R%H"SB^W(8W<"/<'&^6;?^6O?@D$(=+@_8YA+X>0(\D"5@!,($
-MC,!'E@-8#PB4.]ZG`F4%"A1M+.L3N^4@<QBZU%/P/K7L:<^YG*G-I4QBM@<J
-M=0_MK,@H>J_ZVA990J70PY#9FYQ_57-FPP,=/6!4+*8$%[(PJ:2,1WK&,W$X
-M2!'\F/NU:-@O1P,=-+!]Z0U?T$9(K.'V=7]`^:\'T*R$GVN8_\K:K#&V:!%%
-M!EL0,0#]^1[[$HI%/$U'!_M8P(!)`P:<P(:P\I%)^G+$K!I'1,D(4YR;9(J0
-MMR#).[Z&0>H-N?7;UC(&?X_JOX?@EYJC_:;`[_%)6IBFOU7J\S5W#<_7E-L;
-MZ"1&@P=TD;4XD;'AV*CYFLKD?,VJR^9KKL>\D'.M!^<XH.-GO:,MT,SIU@3*
-M"(16%2_8(%T;<_BV:3CDE#0IP6VTJ_;0DU/*F-*SM#%,$%-*YU\R2[7IEQYM
-MA(\IY7='OZZ4ER?B\-W-,"/+G_89)>DB];1IP#)\&EMT?-J+1^"]3,^P__'H
-M]%2%%;(@6YJ8]O+5\!47*=CX]X=YJPX$M$+`BL1#GXJHJ=K(G#<UCO\642Z!
-M-T[ZF)/>2$4KX;KS=!TQ=$PT8R:ZC(D81495`[G@I:51Z3,&*M]V$JU4-4W@
-M9P''^MQ#H^U:[QE#,?'MT3,8R.(QEVT8'/)>RTCVRRIZM%5%X@F<UHQBJG.5
-MW2(4^_2U!%P_+7!`4'_,))BD?[`^Z4/.G_D>".!3.)9]RMP$K?2HY911O0NQ
-MQ:\N.EFR4Z$.WS1"?<-6QKP#OZ?AI^K/],G:$W]S)H_UR)1.EU-[S..O&:X<
-M$DZG5Z:),ON[3.)TNL))UUL;_(;AFJ(C)-Y]"XE6@2:+HTU37^S83F@@^"ZS
-M".RZ15!0_S*/BVJ'_<DE%ARQL_"&0YS;$]CZE],8/8@RCCPAI;[UGQ?4P#D=
-M4US8S.]N/6\;5%4^M,R@"<;_I4D@7%RG2^2Z9&]MUJ*0TXB3D@D6C"3`"%1^
-MP/KT#\\<E(^>.8`A/!EJ:C/P(3SE'2#.C9OP0FR\>$DW?;"S!-!;;3:5K[@P
-M9CZE,>B'-92MU5I]*<W(4;[M86:4GJ9/+RS!Z86%4-T!=7AN@/([C[[P"<@V
-M<!8J&5P0,1OD$%BX2N8[E!-3+HQ+=KCSJ&BXU?S)5A.0C>%]5!0I(&?1J:06
-M61Z#4B^JZ.:&LPG88#4>K_)GRD3,6F^X%9N%]@B<02X(&-4<7/G*5P(X1F>#
-ML8:A:9#-24>2U:?\F1ZIPO;^AJ&]!<32,@0=0%NPD+KU>97LMS4U'F2L"^"Z
-M9%V8CH#G+@%__`C-L4*F546YFLL(\RE@3D5)I@'^ZQ'JQU>.)O\]4%S.,$!V
-M&&`A!4B.4'R3S372KT<3:/3X877YD*O+AUGHC0F%(('!*!/LN35XIH/WK5$B
-M`IT\<!9PK(#`3)K';PU.64`NKT^8K/0>NA+W9F/*@4.7,"F+=,$DSAAQ9.G6
-MYPW0H=*2S(;ODFK;.$&HE%1>F#DZ3E(KA&I]0O]C;4)_PXKX>P@V2^^7*3@+
-M]9H7'?@B]`A(<_SEX3GEIC]K&MX?D(<:/M=F%7\]'-WX$V#GGWRF!3^T\Y-+
-M)WS9&,XW60)&7`)$4]:"R]R691[EIYJ3Y:B#$8?IGT?Y5Z&_=6A8/+M&5'\8
-MH:"?^)4W#U,`M)@\I#YHL#KU_:.64S2SH0CRNL"0]R_S*W<?'$UD/;\T9-OH
-MX-MP6Y$TQ`O>*^1S7"E?ZQ#.Q&_,XMNVT:P5POUQ"*3T_GOKD";!RX`@\?^$
-M'N!*@D607K_2<V`T2-)';SUT4JN`'NA!BQ@F-B_5HP-.L[T(^--*7)Z%U-^C
-M"TM<[V(5O?J3*1\H4>DH*O'XE<5ZBNO&I)"FJ%2US4U.^U`*EVLU!B44:UQV
-M"7JXAH=S.<1([F1!'S9JG@BUNB>"YGQ@37I8``<K!G[94@I0;7X<^=9P&:J/
-MN?]Z1BE,9[R2\U;#9,#:C$C(7BHA\V*O:_W+<%G_^NO%K^E?D))K/4\;")YT
-M0$RC,$R8W;.LFO)SY<L+R?P8J9>*HN%2B'3["KU]5[1HTSL^EN`)!_F[/:2"
-MRX\BR"JS[@5.6CBHV#-8L:-A5XH4,4D]@XK-C^?XTMM>A?NEF)&X![U)@Q)Z
-M\7?J_^XRD!8KZ;+S)68ADWQ0+WW(U[>^YC$,=`51*S$%W^#H]AI.F$!U?R@1
-M)U11_<?]2E6#I,;,OQ#S^`(J6D*H_H/&DDWW+PVG#*_#NT7(/U>/76^VTO&8
-M=V5]HMB@^PCY=-]H9$8],Z3$>/XAU'(=>SO:G[6#ZF(/M]E1KR)SJ`\1$[C!
-MI_N666#H%B3-'7(TSN(W>I;1R0N?OZ%(TT[HL@1JEJ%/A8R:9'H%2\2^`X+9
-MIWQ?/T/IF,`E(88^U4R<9`Z-,UEQ6MH:X)%MH.<,#)1_.S"*H8^-QRDO^A<T
-M'>66`W1^<O;(_*1N%%JITY&QVJ],^EI01IR250;>&!/__9EES'GX308*K;6/
-M??^^_MX,/_B7;C":V)34]/2T]/1TCN.@?5S:W.IR75PA_U\58('=K$)S9@4J
-MG[_;/\(L74EKQG.9-7,M9D5W,JHULS[EMM<OXWF8'<3,QG2A45(SA-*X51<O
-MYN1Z,3W'^!)`_:]=$9"N/GM(PJ?\1.,V@*U\47_3)+:^XH[I$22Y$%+IC`.=
-ME7HSF7WY</;;M>RZ>6$>,2]&P`!V([SD-.4E+GU@@_Q'KP*#CP_A2=T-3]*%
-M7+SZHZ&-NAO1:S_0(U"F.Y^$%)^ZW,Z-6H>4YZ$7MCP/?1V`M!!2S^_HKH^>
-MX.#Y9GWF/APZP7HY"UFQ8*GO2J&+%+C!<8VI,5W_SF,":60>ZC3JD<H`MQU=
-MMO"-W9Z@;X'IVP?I"RUY.W-BC`=R'96]E-^5T_U#NL]J#?1T5.-/:#:+:$X:
-M7>SN/.KJU8`Q1_&-H3P_U#\VC3?@`LT)$\$P'!M%+I+7HKW&LT^3UZ03IK-/
-MH=X#P_]U<B"YO@DDB'YB:5^.9RQG`L?N.!`]B:K,[,Q]Y`#$R%6SDTD=>S%9
-MQ^N.0Y")IL,,D`XG8P_(5>60W+$WF;KC=4P-*<?"+<C<YSC4`:DKX1M10004
-MBQ8*\87)^+57CI^;C%\^$A]@AE-D[I.K/$D#,,#4A*L:J@,L\IDVY$Q]_J1/
-M6(V:<X[Z>8X0"X]6'/U3GJBCLD69WL*@[&1#>]LKK2(7N*A<M9*>QK@"79H-
-M`49Y\$&&44X^!&;[S^`-MU@S#4PJFLO*+A#J#?\YNXQ1`J60Z3<>W%U%)905
-M-TNN2VCW*7)R59_L/AV\C>';+ACQJK]9?.A=>/$K;8M`<4C4=J25S.+;NHQX
-MA$1;!`\(*RN9*:;B)M;XS)+K15YRFUE<%L8KX0;CEI(Y@KDD7^!*"@6V)$_D
-M08U)`FJ+B'N*Q4'Q.K]R^`[MF$$,%";SNR(>Y;=+Z4%Y0J9?25^$>X@3\1..
-M8\';OB%>!6RRDL((WG:]>#,6B#L^R8I!Y8-*FA)/DPF8&G(_1[_@[U=1M2D4
-M$>=*7:8N]SD\#S.^RJ_48:'D*"WS'[3,&_4R7_$K/ZW4R^1WI4E*A3`3SQ;#
-MLUFF2,H4/*"%%2=36$8FGD9?#%#6&BT7Y,ETGWOQVQ#FC/*/XIUTVO'^]-I"
-M'.4!2VU^5/.*Q.?/].?/X3GG@(K))3V(9@8<$M_E'\7U?[YM'ITC6JC=""HI
-MX_BVF33$S+=-,=!+\-YCZ&.K]L`["7LQZYPF0$BXB18@7",IN+8+?W+AC_C$
-M2+L!Z\KS*%.6X+F",S$X8*R+%XR.%U,"J77QR1YM4Q'IDX8,+::`H0[O%<<;
-MHT'*ICK/-AO)6:<XR#^*6RJ).-B+QF]8NA4P*78/;C:!,J/=5H!D!_`<P4,=
-MJZNE6.I[KL1[N7:O*@XV6*$1?<HMBW&3[8NW8U/FQF_$U+N"`"X^75*^+]Q8
-M*<RL%,R2DB),Q=/@)L;M%.^\.BC#%'-V-EM)7]S2[^YGA8\P;_P4QAO$1#S#
-MKRP"J`9WHM:O/%E!FZ]W<!"/=^M3Q039KSPS$X\(/(UGI=VDO+Y(T\'W!U3E
-M?8@(KZ.'1*+C.@Q-*E7H(87;`$)LY^G#,.`*`&CUMF?K\0H*`$DO;`Y7]2GG
-M9])S/_#")%7L4WX`.?!F!HQZ[BJ,.J??\+`WMO/?W@9`'[H!$!Z<?4P5<\D9
-M6>SS*K53&$:#O7I0?O!9)'#%JL`2KZ?3/6CH2@TR\QEEPGSMB*4]9OE!W/$:
-MWH77*.,-&.%'GH.WE)3U#-,^0ZXHP>WK#^+%[,1MS<IC@DS[Y/0'L1?)O\9[
-M)KLJ5BW!C\V;NBJ:60B0'\$VZ'H0^Z@+?L73RG?-9T2;\CMZMZR0)CV"N2U:
-MN#`^^`C.)W**=Q,4X3++%6N+5UNZ'GP2`K?<4,8(?`-"544+<,KGT7%GM4VX
-M"67Z+JP9>4-Q`6&\\+1>#4.HV:-<BYW4&:L5TMIM@6:\UXK20*YH`/)1"R%)
-MP]TVQD?.*!^?'U+[0?`9P-!7KL]AF%K2B?O.JJMK(-JO;MBD]^FES:[\;E/%
-M)MPYH1QTT58'^88<?3_(=[-#529.QI+N4D(%@%O%763.5FV^)6=D%3HC8%B#
-M]\C?I;[E5?)%ANE_D%*`'!52Y"9;/-6G7,B'L;L+VP6;SB.D*3_?K:KQ%*4#
-M'M*W;726*:2N%-("!@I(.X[?HA>@?5G1KMJO[+)1!<NRIFXU[KP.&%?4UL9V
-M"MAY?KL`.D\UGG[B[6^E./C\<M5I_1BCLESTU*(WIF?1WE351TI1K<;.ZE'?
-M]BB_N89A=F'K0/_TD:/*C_/P!O&&M7@215,NF8:ZNWHX%&G)P`Y\_W0\SRA`
-M._,+>?2H!&E3@A%N(.[3ZOI<!%@-`'T03Q)*A09K'<+:F$NAW(0YYP*4Y)#X
-MU70<$J?5>S?!F%%>I%_`+KC13<PR6HGN/'UD]7F4=Z>.P*A%K+KI=BM')+;;
-MS*CWYB:=FG;/0CE)NI7&!0P3H\=E6*CV;/7ZR1D\Z5ZQW,+025`\AIHLY$JW
-M@3K)MZ$O7NEOZ"LZ7I9NAU>AIO0I?)26/HV/ZTM_BX])I;_#!QY)L8FDDOWJ
-MUN.0(?Y=[;T'WU=K[Z?PO9JDJALM^'D`N[0I[M*V!3F.>1LJ3H!H'X=C94,N
-M=7.W>[T-ZTSZ=WRB!@9W5L8[M7?T`@=5`<@%]8:NWA"D'<[:56%&M="C[D`N
-MK2@S-,XP<%2NL-`3X<R^4(2<$4Q2'B-M-C-B&O0SNM5YLX41K-C]`(J':BMT
-MS,;34+$,@M8'`*`L/'DT[!YL.)H/.G*7>]#V=V!)KX!,3D;D%6@1P;]!Q&\A
-M8N<O3//U(\WI)0$<W^8%'!O^\JLRYL4].R%5>S-NN2O>;!.FX/$-<^P,]8*$
-M=[+4IAQ>A#S*1EK,?T>IY[P@_AN9I\"@;BADJ5YL@\=V81=]9_%]O?9^#LK=
-M?H_V?@K?&[3W`_B^EKZKHG7[7?@F6NAQR5^`EMD+C<$X2S'!SG%40N-9`\Z$
-MB.<&6;)9O@UY4JO*1"#N`3R$"W-N0O;?U[`".#10U%%%&6:ZSA_$=<Y21$KD
-MH1.(UF0GB-_O+$7\Q%E2:3D]HSX=.+7\(#+GD2:7?DLO!8Y7.4NQDN(T4F4E
-MJ=%>2S7_0I6U&I*)%G4KWCX*/7&VLQ1K*9[3\M-2K`&&]C!Z&ZFVLX?VG-74
-M2_-,P*#\]#:-OP/F?5>A#V9O+SR44U?1K:[(21TJ66J5-YOES19Y,R=O9I5O
-M8R_>;-5/)235%MFB+C++918Q1=D''0HW,Y:Q/F(AZ[G0(;F:%5*E?V/QRMEO
-M<3!`NW#BJE,[/YO_$_1+*<)ZE%MY9.$@>LDXV2(;H+^%]@KC?.2&:F4)1H7Z
-MR7[Q#.2*.O;B";259KG2(E>B<PC;Q;1!PW:YN'&(6:5-PUQ!838L(M+X81$!
-MAM(9>B<>'K#S>3;0N9YE:ND")#`+LY#K)Q>B'QO]RG]`'&CX'KF"57Y^"YUV
-M6"/7<71'VF@8?TC"`$KA.3U2/6CYI3BTZJU`TIV;C@+?_@P"JH$==QD0663'
-M])C[T=H!P,3!*'XS@$-1W6#S*&_C$51+;4"BL'71HM#></G6<\U\&?$!T6%@
-M@ZZX2/P"!BCAU`JSO-0BW<4RTET<<Z6V6:2UC78\0B>870H[<"]N<3?+%K((
-M+Y>V$/9'V'GQP-=4PL3/XG8WK.N];*C?+\S$J^\<ATB7GM/ZL]`A(;OX?E9@
-MR?CX63*?TPXE@4+PCC(T0_`@*^A$]"1+&-G?Q--ZS`$#]-`-G-*$E=NOI$"<
-MO(DE2UD\PMO\(YG37F7V1VND"%>WFB*MH7#C)2BP/PL#%A%A2O$F1/D`('V&
-M%'KD&Y5!NI]EQ3!&2`\\01/O$9]"JCF'&CJT81QT5%((%C"W$$CL_*KQ"W(K
-MV,RSH6F]I);3:'1VOO-PDQ52AMFMI`BBN?F8^'#C%RN1>#@Q*1=!#AGG**VD
-M@ELC&Y!A[G2!QJLU:BXC6A3O7=I8`RN./,X@L_`8<<@!5N>5CV?AR<5XKG5#
-M`-B__!#V7A0".<^@0`:N3,<U<F?//=H6\^5X7LA\EO0M%59)GV4+?J_CF+\4
-M&=<KW!GT82F^TRP:%@8,*W%BH.%)`V50/ZZD6&205']#(=X+DM-0.425CDTT
-M1L28`(HKCP4/C(UG+*.*\+=!J&.QR98E9T+JEC*_T@!U(%1]Q(LCH!/=0@R0
-M-121W9SP#2TF7,,MPU`K\(1N]<?(.>E9<"?B6>C+R?FA]#RT1"/PN::.?R*R
-M6NM#U5Z=!5%EUMG%MX7A2::5G,")PL/\"Y5&:`Y3]_!:G[@>))&?'O^<_R)V
-M.6$->?`QFE=(]2@;_#"B\?8X#BP2OV*$))[`?&VZPR/3A.KA@-'O2:;H@3$J
-M)0S".%VLS@,`\BZ:3AQ47H)8:C6PC/+][Z$JC![7G%*BO<<4![P$-UD9T>M3
-MO@R@G-!/2@'&?,@)[%C5MO`W?(PB<07P;[FB4$G;@"FES59&R%3Z[H&RUG.J
-MS]HPB(F60R+%(V+'D>ZS0PH@>1HQ@$[IP26J6+6WQN</&!S'R)DU,N@^S@M"
-M0?C[A5[X5Z/FW$6U31@`H%R2B2IZ6T!++[L++P9QJ"!AWZ;=S+.*SA6F0L8:
-M_%Q+^ZT!X%G7C(5T(/YK+4<#Z*HK:Y-'SZYG6X?`HF:$R:U#3S*X`0L77;C6
-M(1MT3S$?Y-7U!+K#)EMQ]2HQH_B^N\04Y[UKA8\Q<+U-KEXEWWL74%`N6TLE
-M%A4I13%OC>-37_$]=HN??W0/=H3[<O_^;1@MSHO0TQ;F.E\5K@65?96F4>?6
-MX+7+7E!$_<IIW&#MJZ%?2M\-T)"/WPWVTGKH_PUGGL!E-^5B$\!;SSF_U,SM
-MXN_G"FN<`\+*XC]B=Q4YH(,R?H$^)K4B1$Z+;)X&17DAPJ=(DU$["QCT`*4-
-MRB(/8B+GJYN!%>Y7]H.TEQZAR@/9L#S^J,)?BDD38%+<8!'-RH0*A*;D5.#0
-M@'I;D<8P.M#.(09L:'D),H39P#D^=7XIK`3Y97L%U1.R@'5V-4VJJ?&H&UAE
-M_6PL7[R>W.3\4CP5GPO,JJ;&[U%6T'!!(946DNY<S`H<!$L16_R4VH1\S:HV
-M<3!JA]DH-##R8GH%JG0;(X+-+6B,?;)RS57(P$+]@HE4Y`+L&V^@?`:O6([/
-M@N`9ZLW*-6#D0@7#WX1B.X4L8#2HJB"Y1]CT$A!.92QN/L&CJ>/CI`0O9H#I
-M=8/F=0Q*/P@DY=WO:@,+99DX,]3?`EW+`*Q&G*0T#M)QGTUY)O`;G[IL??RJ
-M44KGA$9F>'+.IZXOU'8TT%W@V'E;-[$X:RS>+&WBUHLW@'D;52S]>USB-62>
-M!U4HBWJD/A1IGA08I[UD!\9K+RDZH70!J*USBF;',>=9,-$&^;;9J-ZYN?R8
-M(%96"AES\$"\W@FH_=^D9$#/<<:$54"?GWZ#T:Y#NP,LY#_=^O^Q]S<`41;;
-MXS@^"PNLN,JJ:)BH:Z%9HJ)H0FCN`HM8@(O`@OF*L@B$0/`\BETA;*7<GK;L
-M]=J]W;+7Z[VW[K57,4U13+#,2"TIM:BL'EHK+#-,9'_GS,RSNZS`[7[OY__Y
-M??__OZN'>>;,S)GWF3,S9\[0<DR,76H69LOUHY%EZ(Q=$`Y389J:O20C!MJJ
-M-0.@=UWP@RXG#O=>5L`:C3)^;=@+Y?40?/VLF3"$1/MC'!6C():K+;(_K45!
-MYQUR3;AS?^QBC;A:,G7&YNB%$F@ULS"Z\KQ9J$MFS6*O,MU31O!YOIW(,!,Q
-MH2C(4=6ZH-&&5F1A?WY!$CNE-+W\*^,W1\#0DMJ*'*PY!Z5/;<_1@%A^_?@W
-M4U>/\YQ1#PUL"%W:BK!$3J'+O!-7$3JW1M=GFQW5468\3#.PCC]N??4TG$.%
-MJUD#PRCP%92AB5]18;MDA0\&9K)(M2#Z"/*39HW=K+6;D:6TF\,:ZHX=`Y[M
-MIFF,9Y.,.F38;'M15-;?90[WYMKHRTI0TT6JVOJ%P$*E:O`1[5`@VM:*8Y0I
-MW-8Q?LT=PB*H\@R;'"PD)0LWV^1APB2ZPY4L%DJF,`CEBG*5J5U9H6U;::AN
-M*-Q.1#M\WD?G'JW3Q.S.N]`RT=L_%!+@5]KDZX5Y&,7-R8(^61B<3!>L\UUB
-M&`^9X/F\"=^(IS8+6*-/Q"X)#WFT`15/.D=[\,YO+HM&:J$O/^\+)[08\!*`
-MK:-+NB".D6?D8T)#I9H8'?9Z?*Y5!]-JMFN^N@UE;VP=E\0_2(MU].67#Z2$
-M*%0R'N0R1U)1JT6H-E&T2&O4C,U.1CW\0CS%SHPU:41\T!D6L;:;H9Z=8ZFZ
-MK]%%N`.GD_O/5#:*!P`WUFBB"V-[@MIV0.M\19KMW`()=6;CXV$#I):0[?5[
-MG3I\4R9@)[9[*4CZ@(ZH,&9-H6R`-@/'T,AK*7>DEFYT?HUOPY;I</55QM^'
-MSI9_N>3B.OGH\@IW\]6D[I8G_6J@#<LW6"E'`)QO$Y3"PSCD-<A#.=+EA:S;
-M>A:8QKHF^K>#_HWZB;&110/D\#*^/C3KZ:JM21X(-,"A`AP@P?VD0,I<F]6P
-M[$C&<'23I"X'/W'IU$C*X-.>K+<G:^@R*H(NH[38[)/#8>W40!<V>&-L'%V+
-MK,,!&5]_L7UQR;;7O^9]=3JP[EC_0Z=!/W)FV5"%7+9HD*I#V;9:W)QP<2IN
-M__`-F2FAD.:T4&!3_*6YX44DG8Y),ZG;T%`Z(5P[DX[(6O`FM\<1LK0Q"?D$
-MJD@*&4"6H&MI@E(D?'V9)DCCG9HH3,UD*2F4;:Y0\2G<E:>[5.?WZX4AX$;?
-M6M05G%7P=,J!^>QLM"OZ8"S,:E)@R&-[Z;BDCJW6"M-CJW5B5.RL&%Q9#Y`O
-M+(29F5J$$:[I:$+*L@L(U>+*DA'Y%1Y^LG2S9-]$DYT@I6FR]Z#/['3J,8*Q
-M]=K\L1?/]V^$%F8&[PJ5\4C%&>*BNAVAK87+MZ:PXI#%'_#"/'V)XYDRW.$;
-M@'_=TW*VO",6)V)8,(N#J`=(`G2Z9GP*ZDO<26T`JFKYQ`WX',MZJ#P=Y<@H
-M\N7!A)@+:J"%R%4S<=%=OT#0,IX=QV1G$)_@H'W7;:&MDL:)"[S!(VCW$('#
-M^?@ZML*P59H)'7-6K;^+3:F+I#D:6\<()I`TKZC=-<-]#]184/,S%,@,>=\M
-M-/24(C_*:3W/QO3^GJW8J_`PW[UGINQJ..DB8L%40I3U)\R]BS7X4+14!2G$
-MO>@,.?LBY59R8(`)P(<V,\\WU@CSUE\D[814S*'T6*-=-XBF`E^*I_G'T*[Y
-M.*2$RX/H?5@A[#(W(<#-*2E;+#(T<,\F!+Z#Q#<AZF2<8#Z9"!.,A1X!-`;>
-M_S/;IL7EHA`@CQ_.-CPA6\NNPN'_W!+/.8+Z(PC]9PAM.S,MPP+KOMC%.B!C
-M;;>+)\7^\LYE.+)H8$25M^%G'8[!13I[58M]\1G[8MF^N%-^.AI/%>O]B?Q8
-M-&ZN"3?@I'P(&_\F5$<?UT!?\WQ61;>YI"#J!D,CC)4:X`N$K_A1R&F'J14/
-M*<P.TVFS?7$KKKW^.!L/W+6H6CGDT;W27J"5470#$^###6J\T5X@G(,*%T_+
-M\3$N^E*9,*X@CZ,F*Z@A!8LX*IRCQ)1\6U6K1O1G43E2Z^5*O"<MML(GI,-/
-M?LZ`F]OU<M<L:MI-9S!Y\A=@C5U\1M#B&=!07$%"1FQID2Y;&JJ7FHE#D4D+
-M*<4FZR\9PC,*1B08V=X9C/1#0R'MCM33=I.\$4KOXR#H#R.EU&/RL1@,>-*6
-M'.FJ*TO"<19?)VMASW-#L8[P%%UH[&)9Z"\%9BAE+`\.5=;<B$*%'>AE\/FD
-M"!W.*[)K:!A$"S6&*1],4VY`=2/X@0?.L"Q8+(<\5@^M8ZG2/(!K8JPL+-B,
-M.3E\A)/[]X?BJ)Y9I"\BV:RQR?NNHS)DX7BBE(372K0AVYOL0?8T`PX4R&AC
-MP)(E?&4K]*,;ZX'00Z4D,[)"4$J.M,QTL[SY5J8U]SR,(%SE]5EY^A""^PK_
-MQ%=F5V>ZCSKZX_D'6/&4Q9:?2>0!+((E-`:8(>7GY^),J,,VOOT&;.-A=!^`
-M-N_34E*R5)T(U2!_M!A:6;6!2#E:893<"#;X*@IPK39D,`$(<P87<D".(AA8
-MOPY:Z[*M2H85'3XNA;OID$1\+`_:B6R#Y.-.]1E[5:LPBI8R'W4&95,;IIF_
-MO&"Q5W7*@8/IF:*<,@!OTD.%`;&EL`"):Q3F8R4*5Q>II<,+Y4G38!C8KQ+\
-MBP(60NW+K1.AIJO#A8D%R-IEXP^P*\"7\VHI]:1\UXW8J$[31O5.,FU4IZ/I
-ML6(LI`Q+4$D-)%8(95QQ7%*XV(\Z:,'&^(0<(%N&^VQ)D=W;"-80I#`,>0:<
-M9UQF@1HX!FJ^,K*Y-YO.RF>EF^6*1)@:@.`?ZUF)[>O/5?XUT`DZT+7I$+;G
-M^$7@NA%'&YCOHZ4DY.XC)4M*[1$A6(I%?579X<Y@:1`L2PVP,$/.?D`1#G$E
-M+IS6G-/A<V5_PFILW/FDL2I!CU,Y31;C&;[HSW;8H9TXH[&ZL+VQC:GT=$NV
-MO&<AK<-*->W(<;)C,%;';ES8"%=).D=J1WIVM@7&;<^0/4R^;R%M@M11TG%G
-M?&^-3N,I.(>:Y>LGX&$8I!P2^?X--!4#BK`PYHVGO9CEY'FJT69)`UU*@7TU
-M;@$@-QDJX^LK>"@C';:U!ICEAJETR4,["RSS^XUG&4,.3EX"5);@NVE9\$&W
-M"&UW04M?DRS-211&9<B?W*:T]C6^K7TA$C&SQBZUP[+D?(XP(W]]M1^T@H'`
-M$J=I\Z6DP?G2ZE"G!C6SPY<V_]>]JC`Q!-47!><#Z^"9R1J4]_KH+F#M.$+H
-MN1-8D,.0C#-K\?+^-I2?@#R.D@VW*:/%`$E7I,*2?!@W[]QK8US18:"@`"IS
-MX<=6]%#,N/)7V2K/D74#[8&V^G-F]GRI4\<FFD#7%"B7(%RWTAE41GV-;2%(
-MVE!DWA'U-"Q#UPZ#PBKHO!4&CENO1@:'HMON`S3S/IAZ+T!6>X<&0\RA(2:E
-M0(CA+`2BVW)\0R"7M*/U*0@QE(98AB&^'4Y#(+IMW&4A8"V^HPY#?#440SR,
-M(=Y@(1#==@[0['TMZ1,HRWXLF_[.@NPBP]*X7^\*87GJ-PRWQS7.67MJ<%;^
-M]:X@FD3G-_2156K'!#@_WH,;;M2.Y)T''$D#S/(WOZ!`3IF&2<+5Y$5IB;U,
-M;:O7VOV7,KV31F#)#*(VG<5V`^9N%L8D:M)91$ZZZD<KC>?D+(PG7>31O"^_
-MA%'0CA+H2#X7-V`;9$,8S2H0WYRMK;\K6!IH:]/*FZ#]\\ITOU-.?0^VN+WB
-M450!^*.;02IZV#R4-HJ`MB=0]BD'4ZE2$<I\7I!FV*K/J:I'RU7@YEK=(7U`
-MW]&4DCH,9@MPDX8Q="G()B3&K`8"-=5=`7&5G=4A$%<BA,.QM[P+]W(YX^Z5
-MD;">,M)(>R?-"GV/`8G7GK`'"C=*#7ME'7:C_BB,*^/E3>>8#"Z+@(-:*$86
-M`.&!:;Q1WJ)WN47!W3P\\M.IF"SH<J'@Z0_@"9(-DW1EAQ18$Q%#E,F9>JYU
-MT9$N*)O%DHV[C*_10S::'\\).'"(#O5HZ'H19MEVB=$/`_HC*/T,L$7Z-YIE
-M+4U3&*9(Q[4@Z&I=TEDAA96=(^?<71.DY`Y':&R<N?,N?;9_$Q)*EX^.YNE4
-M83K!1TV$BCB'82ZDP]EF5UF'7.K"M\)4M*RYEDHU%CBAK@^RHT'EC"Y%J2V,
-M,2`NN;,Z*ENJ[(C[H,I/^@#X5'DWS+2..<!Y)FC-D(\,)?X,*"CY2<CA4BF0
-ME2MP(^]?HLP.M'8J`<2K9*#=V"$-7((I[5;^?\"D!+H+7`I4VH9<"W0@LKA)
-MT.KIZVGKSZ`XA64W]I)L1RT>/%F0:[2G=LJY.%MV2`<F--HZ_%:'2:F=S(-9
-MOIE.$[6ND*?KG3$94A<X^7=E.^:`DPL](!M]+89ND1HG-$#HZE/@I<@E1]&9
-MLO8$!%P(,Q2F2GXODVUIXD&/9-!:\!L:+:&\B^BG#\3=329'&'$!V,>A>(K^
-MW/UU\:2!C5G(%!21'6;<R]-CYRHPIL-P%3@4N_;Y@)0Z5`0]J&8`_:#>VMX+
-M)MU"JW;H,/27!$/?A:&;0CVA_930?M1;F\,GM&M'\W8(_3P-_3:&OL\KM%H)
-MK:;>VN;YA.[:L0E#Y]/0%S%TBE=HC1):0[VU#0IF>X=RI]/E*M([DL*+B+DQ
-MT``E(_\KG'=(QL)^T\]K^=;0[EZ^4<;X;0CNJ`[G'#4-7A9.&UD8=M8@W@'I
-M0$=G4&1BZ$V,P_)(X!_PY'`)/>MF;_"=-PW16<25^)S.8;GS>D)O0)I%"\J_
-M>,*:M)(F+K5=G`VS;)SIG#BC2$T=\;89\!1^E(GH#]R11%D4\2JVMD#1!<["
-M'Y8M>D*6'.1"'7C(QL[@-O(X#:(1;-_@JK-*!PWP`_E3^(YK@25B4G@M<,H=
-M8L"8JDYGH#0GW&[J=)@Z\"W>@A)_*D/$UN1T]Y;EK$K;91&MZZMT*CP1&@P?
-MJ%U(Z`<?:MRPO@4E@2JOHNF[F>X.E5%.[U<5YYRN=PUMP5,S^6N<\=J%X9"Z
-MEZ^G_@?2O+?P30!D,!;CT6L4KAW^,(JOC[/I)C4L'^B.M3P86926HJ`%CJIZ
-M1\(T7'-+[;`P_OD%?-(8'^/%+5Q3J*W+SYXP4S*%V2MB[`D&<:`T;QH_;2,N
-M\R(\[US?1;=/!K('F_#!WH&H?EX,H]N(8JC%M0F9'^;-;@H38^DCQ>A1`QZ=
-M-\@-7^&._AE)9]L[+1UW$[2N^<7XD+(I3%X+-5BW/Q/9_\5GBH(@)8X_3%O@
-M$.LQI=T6?*'$XK4;/V4!H4>-S5!H]J1$U]!C\!&RIPFFII`]]?:T9'M2BB-I
-M&FWB7L%^R\%M,8,T#-I+V4Q768SKX2T$#QKKDK`X(T>BZ.8]9L(/)\5D^@98
-M?$;!S@=1'OE[Z$S)4HM<\3UVDR9[*GWD%\4*BE1%X07)OX"GQ$AVUH,KF0Q[
-M4J@\#3PO1`FPI-`E7O)?>(0IU^(8W$Z7((?E4A3.Z[!`6QPVGJTQP5L1D9>A
-MIR88$`\*R**J;7O5\JV?4TD'96JN/4$GR`BD.06]=V38EX0[YJGEK,_IY&^/
-MDO=>YQ:KXGN.U=#28?E&Y*XNNM_3'UJ:(UDMW_&YBS[)9,N/84M=G`*JM,O\
-M404X-D(JRK0<^1$Q%'<.Z`:Q62Y`]6FX<[;,@KNZ9BS23T9@"S4PD>W=,1U&
-M;*06?KO-9CU#]X/H*T3:(I5-#EP8L@%5G=ODJYE<L4U>+MPV\0&"]UE1+#E;
-M;D#NIQVW8ARF9K-%ONNBD@[*PF;3/06\H>$23]OQ!2'T5'61"J)(IC/>;4H'
-M?N2BSFQV7QI3A:JH\48&/7T?BOHSG;.S93-&F1I*Y9+VI(:FF^4@F)>C3]36
-MASS:@*41*D]$?D=JE\?BW`AI`?[C(I4NMKO+R),R2%8;+@?Q26K3ZRC*:JJ3
-M3#J[:1?*2)GJY4VMX`@+N==I?VFE_:45E^]SH1+KQF4;J="9);O@N6>A:5<B
-M"_ZZ!<<RK=3.3A/FK'>A\+6@7^^Z$<TPIB]1T*UW43W2FO4NJDAZM&LU].M[
-M#[,)&5,J?S.<G6L"(6<(PV53<0/*TV`%L\'<JU\]FT7E'?QAJ!2N<K<(5UDD
-M.WEL>QO'N514LE4&W&&L?"D%ZO--0ZBT&++>`4N#P>?G7&L(J2U4,;G%7#!M
-MLQ91N;&4HF^`NZS[DEZ75T$S2$1B<\9+35`?^;4'Q:OTJ?@,:U&`.1_04&V'
-MH/8`4=!Q@=8B>[,F9`,>DJ#8-X[_N$.Q!T6GZ1:"F4T@-=C>F+0:GI;DVJHZ
-MB+A0FH52"]!3TFUWZ8EP*]UW+_5'?3;RZM^PX]A-[<(T.1`?L^S,L)LT;,O7
-M);9+[1-$3<:OGXTXG^3*UD,VQT.I@!_6WIQ#Y2.8A':+&Q5W0*!/S*LDL1-%
-MJYQ+J!/3G8CB)K<R/?:T(UDRJ#QE#-"$3ZJ?'E%Q)HT8`6T8E?:BW'KE>%)W
-M#EJ,&%#WF`4%,Y3((`Z4#2SR=ZWF]809ECJ$`12!#PG8\B/I"$`G.FANGAK?
-MEH&#)/*2L=6AP@1;=201K_&(?I3E>+_>8$^*%`/DOWP,RSR4JL/QQXN4E9*2
-MVVYA!]["8"DIDF^(*VF@DB(:+!'<=Z`["K0-1D$/LM#W-[7T23/H0N=H%VK'
-M.<UT1C*%T[%%;S>=EDP1=E.K9!IO-YV43)'26;NI119PI\^@<:0VVTW')%.4
-MW=0L!:9S^1"8#MV;EC"ZIF5;Y`XZ]S6[Q&,NL<4EGL3.*9[&CHUB]^TN\9Q+
-M!.Z[TS5T/)9PASR$GCM[;W]2EOBQ>F1L(QGG9*L>#Q,L#-T_A*/D^OB4#CK7
-M\UU^R(FEMCX;!GB7TU^J#'>)>L@BRM6;U1(N%[20@0F_33@`RR*3;CZ.;0;D
-MSK$'PMA^C/?:<%*7AP-R\C"O#7GDZ-P;\F/7=R';*XR$N1S-H>N[D!45!JSO
-M0J92")#78,]+F^8ECR,EQ=12<;H(46U;%J%LYS_]!1UNEW@+_G4/:,N?AFP:
-M/BO)ZS(R@[*<CYW`Z2OZ1-Q%(3IV3;@X3FY.)B0F)U0<+A^`K[A*M=A/?C>6
-MCE&!&?(U%=!;EX;'KM&+_O:E>BDM*NX]08.R6&;[DBB(M$A5>W"A$"BI,GBT
-M&Y9$""ER<A+DI0ZW]/#9`-M=4``SBB(=IF,H12\-PA4VW36F+_P!NM%T##6V
-M8^,.4$.4BUOH"2!5K#$+.VA1)Y5HE@X#@W#/KS@64'M<`]24>WB1,-5:,W-C
-MO1`F_@X^$-'V@;VMP;8VG$CX!-ZR'-<6Q"I"=E2;:$8V5.S<7W$_@$[8LU!#
-M05H,K+X/BOTI9=Q3=P;04H"%;0L5A=9@-`U+%]+RIKM^XZ%E7H,[FTK2O*9S
-M2@8U[SN'>./X[4?*@SJ,X^D28O(<"%TS3<>$_RQT(=#,A$0L<FLB'2CNH25=
-M+UPE&?#A1Z;*1:5V:]BBAZS2FRAV(8P$AG@XM)*A*(R"8B>P2,:-1R:%KAQ^
-M9>.)_B>8JHIP^8G)?$<U%6?Q;;B*$'4AV^MKS\-(+DRUW3R^?**4$&Y+4ZML
-M:1$N]]EI-CX=5\TUA9W?KQ>#UJ<AQUX#(\H2IS\^_[AP,1-#AP*&XIW$)!8A
-M`D>R"N]9:\WRUG:</!&/EYUQEP\6L;<#TJF%&L"ET::-/.'*+@7=Y`%.[VI4
-M1U`]C9Z3BM/=YX%T38"*692(S.#7B-%86"10'!_(&HQB"-3L+_1H4H`53I,\
-M'_F*H*5+)$,'W74$PKBU>K-*'.9:'2H_-8IZ#9-T;`?8B:K@`7],2Y=2P-/+
-M!\_1?2*ZW^PP:2UF7)"==95IY']I.6=@TCJQ13T-/J$ET$T.C0767>!+*]L5
-M4H?E:O3`12JA!%.U,`(,=J#ZUAD^I#(9*2UA^X79KM5JU]`GL3A;HH&-JHYE
-MF"UTD;1_)`V,\DVA9BJ1C0):3AWS\SSXB4N,"!4&S(F[N*Y1>?0$11RV0$!G
-MNW>A&+PFHI/`E4CSPF.3S6*`JRS3J<$[Y33"C)'T_-LL+Z%Q"=?SXM,Y1TNK
-MU44J"TK=J8+=&^9-<G9_=WFN_9F79UT9#L"-.N2(H]B2U&%J`GX8&D^$:[7.
-M-703955$U,;WZ)>T[5.^/DD^E``3QPD8!6&04LF_IN$`U"F_2:7U(J3I3<CQ
-M5$Y#76*FX`.FX&!S]L;%_5T?XW`,_F?,HZR_SXI*C9)WX?.0<$:&?#R<WG.P
-MG='BG(JS(SX1ZBD=F%GEG;?B;!GC2#TW$95NI^/,&PA]:3CV35P%+D%QIKH-
-MF,W6$'H%#(8'70+=+X=)60[`3QBP#I_"$2_Z!"Q,%G>Z-FUC8P.?)/'*5S:3
-M<<C(*!I-1U&4..06>7`_@J/F]1IDX]I[\M$.3JZA&[`=-`A!B#6[CN,1+[W5
-MYMJ&M_MH7]M(RWLIGFMD%`2=)43.F<S.I.7;XEE28TZQJ<QS=P=RN.D7QH%G
-M2(LUV#NR=+`\L/U!!V-7G+\08&L(<YZ-RU"+Y^-NU92?C;M5N^:,?;'&&1"-
-M3!R4[T+.1>-$[$CMI.OSP'04(#K,1]I-3](R@4XK,KEHCMY"D#D%AJ>3[F[4
-M;<6R%@9BD\JD5Z8@19;L]1>IH,\%,0R#!V%@<R5]$0'0;2-AV+5=3!/'`[]@
-MBR$A&V:CYZL<J>WIR#?`LG[^.N3"8\%?&U[8A+'4=C%0U%GDI+-TG:#-EI]'
-MC2D7]6*8=``6W>:0/0=@Q=_^`U6D7;L3SS"XF%&J!AFQECH7$+JVY=JFHJ#H
-M3^3IV-52-0[UPCAM;0&,A8YP:L`"38R,2]"(UTD+U45!]L4Z^4[PBEH"_P0Y
-M7P_+\7J\FH)KQ#;)'XO(WM^>H!$$9R"$!9)OH8>X=RN&4=UVKC*UG-G%F'2=
-MN,II1&DD<)AOEF<I:"$2WVW7H8AHEB9V4,B&<?Y,;Y>M/JP`J9GE06X2'V,L
-ME!D_(SY@6P%]*$ANN16Y.MJ[/*U$!R[V!#7K,XNA?>BDA:&VM9JK):-.',SN
-MU`-RIGI$?42[K7YRLJTC*N1>?$W-%5&[M0#7#UIY]340>]M%0@7BVE!YEZ>T
-MT7T[3!]MOR)[@+:_H<W?#V4"3LI/C`'/26IVA7,+\##R&2=E,V`80VD!6&S*
-M3_](1\YP:<XTZ'Z#7>(N1[)>_O$P'>-@,=?B,&VQX*Z/]('9==1F;05F<1>I
-M44BVRW_[1;D)>M(Y"6.]EL4*8R7EFD["O-5HZO3##+#PX!D?)P:O5T'>VC[&
-MUF5"^5-8I+=!ZW%>QZTAVTW:-ERZ6J`9'6W[.W[)[UV%9[0>#V;J]@`2P8^-
-M*E90_52\H$+VU-.R:OO44W3;#[0%,W]RY0\XH\IWH!%=#]QFR*/UYK9V5MSR
-M!3T6_MO<9KX*IPXW#5K\,Q&'7=.ILL@3,/4?N#TX@R'BO3]`$@[37B7W1_=G
-M:$41^&Q;Z<+-IE^^A[B=<>XR^!KLS@5@#=G3#!C;6MU(?#UZ3SVN2$,L\CO?
-MLPX(@X'S%O-\I]K">NS1-E36[!6E<PUBG2(M/N<=0-'B+M8PB+I[ZJBG%/0+
-MI(\VFMJAA(@S#O(!GA@'\(&[T%U'H0K;/KT(/"YMXBW)K(DO#%420Q=@H71^
-M3VVW:V#N:3L%2]V/K$;R%8`30)=O)/<`[`9X/Y_A3H%IAZ;_+9C^*XU$"]`)
-M$`HPC@/:IP',!U@&4`10#2`!/`[P#X`=`/L`/N00#C23"QCM?@##"A@.:3U:
-MT!TP#>C7!FY^\+V`^[L6S&D`.*,]"OQV8R#YS8BK-15M6NPZ4J.12O79C>-A
-M=MW'9:0C8<"'M4W(]@Z\L@"E&(N['AKQ)ECBY#M2C\E_HR<Q\)617D0WZZI:
-M7&9M[.).X6:8-:3`#)2F0;E2LY9+#'LQ+=<A?UU3!['&)84+`S*P?07Y,^8*
-M]^K>C[LH[@(>XATVN5-Y;3Q6')7!^&1@DG$^2=)X3_5:N3G!378.D,6-`GF;
-MGX=L!(R8P`?`$!NR/56[_B`A:<@B2$$PBW5*']AA%<Q3BQL'5%0"Q9N%2'99
-MEU[4O?"=BPG4\PU\Q@8`[[4ZW/FY=,#[_6>+_/-W3(`;>*N+/W?AYW6PE'!>
-MTTV9HD'HQY7L./O15R?PR`#Y;KKRI/+5J$'?(K5;Y.<9*Q<@M9N=/UGDXN]<
-M]+WKLY">0,]2JUO*^@';,=G%$ST(+-<P&H&PP&ERGL560+?E^&3-6/E9-5]R
-MAGX2>U=0Q]93%KF9,:ZS4<[7(@;);6W0]Z?(_6A.Z5X1+"<QX`@EQ%,LQ(`B
-M/YXWY^?TU@([AL"(-2P^'C#75@7KVE$6^8TVFM`(SX9M6;A9WOXM1*ASX[CV
-M1%M5&!'"65J'NL1P%W(1BA?Y41>^=ZA$_P1&SNZKS]%1%7I:(OK7G+YDIJ<P
-MPW6XP,,SWJ%AM"8TR@IH!J1NLD4>R=(5(NFR48QB$ROG07'`H`LZ14ECN_.(
-MYYX;E:3P;O]&>C"H87OZ!F5;'T7,J13B+F20,@*009IIP77S()E&68QW]\K4
-M>"C4U4A+=0G7E8BGRTZ*$N9(!IP9#=DX+QYOY#4_)=N16B>?.(U;05Q'0IU=
-M;)=7`,)F/<8O<==)[;*=/G;N'`C]+QB'QB9YMHNRDTN7>+&3V#/7QA"+$(?<
-M&A7(=MQ#</:AM[ZIFL@N9+C+M>N[Z*LWN,,[&EA.:-9^=A46SB#OK7AZ;NC9
-MJ46._BUD"./V6=84"_&VC@DA=R,/;.N8O/H.6T>L4&SK2!.KD`D20Z'KXH!@
-MUD2?=Y@Z+##D[X.4INV"R>DW:+%4-0;,!]'G822S@,N@MRW@]'DS+;`R2%21
-M*NYPCE!@5SGS9N'[>^41LX:"L3IH%@J,($<;&D!VX:R*R37+,<!$.&-GT0Q&
-MS:+YNU[*T@8<IEOJ5:'T_.U<=O1YLZ5@.(2S9W7(:@@3.V.IB,=AR&NA9GVU
-M"EJ&H,%/C9\8PB2AY8N7:.72^[]?L]4H]4S$H7(BRJS5X&-C!C$(%D-I/^+!
-M,VMB\H(;"1?S"8DM"Q>#=\AO0W,[`"U:OOE&?NEM@OQ-$\WW-?(I^$!_89Z;
-M;K)^-I+`8<_/U0P)"!Z@G#X.QN4*U5L^%!<LLW$?^+`\[VLZ!N%MR1/3>103
-MO>@UWXQ[*7(YBW.(7(AQ5H;#N)04P2*QC<T#+IIRK[#R1`%,I<O(]NE*?G28
-MSOZTTS3)E8TTZE*MDK2KY4=.X\72(A4LYO%>7AF>OLI/7F02*[A+]XEL<'M/
-MD@>>Z6+](DZ:Q:\/'<==F\BB0>SCVJ+![.-J?EO[<MGF(.D].?TTDYE@0@AU
-MSBY7W`&EV!\)H6N^@_T]J?S^JQY2>?XWFIO`T^Y]!^\=#+7\_44^Z/-MAU-?
-M\1T,)HVA@P[5'\:()RZZ&\U.]*$<8(=C[F?AQ<#=8U2XIK98'*;34-:?T"?\
-MA&%X+*7<O^%N9N=IR)SP%;](Z;490C=")OFDZ-:O^$8(%?#.QB.=3QR4TY7]
-MO;S.\CKZV3$3-S&E=L%?NBL<6&_H[K@1@L<VD.6KE+GK/?G'+UVXAYRDIN+;
-M/$]:>L:YPE852H3%N"+L4`E9$$VZK2,`%;[ZB0,H_[J7;3+=!'W17*3%X69H
-M1"LN4ZBT"7M:W11&94^*P([J]:ED,57+Q\=O/,:MP^=W<!'=A"/S#E<7C,P1
-M=._7;FVG\L['+/19&/F%*-S4PT-H>DA8=49Z$!D2Q[WXUYXJ2VGA=@UEG*A(
-M-]XG;C1I*.=Z7=V,"B936H`WA8NBI,-2(-[WA;8!39>[`D63#*.QG5*D*CJ\
-MMT?HTPD:O&QNQQ<5U/9D-1^MSRQCXKIBAWQC/[X@U]"JJ0QWQIPWN0Q"?[>L
-MO;._E_P"W:2D:]."V_V]5=_ZH2Y)^G:)J85N)AY%,B&UR-9#D.'=7V<1@M#0
-M"W[1KEI7HVD+;DV+-\DVF7)&5&HY=4MZD<HL-[=UN<SR].^@CTX/1U65IM=A
-M1=>$BN7IEXQO!5H0@WHK35O,17[9\I]I(`*!W)Z&8F#G1'>NI.E456(+.F8@
-M,22`1I&?&=46HGIAR=0DI39+5:W^>R=4M4B+3S\Q8=^$Q2>E)JD1OJ2L8Q]>
-M^+!C0I-D.N2_#Q'M4@,8'W8!LCTN5:Z"U8/L'"29VOTOQ'54:R:86OU-+5)3
-MG'@&G,0S3IW_9W&+SU7WD\23$\33_N*YHJ&HS="2+J5V0"\^'\1VT^E.5TX#
-MT]&!S,<GPG3Y3FQ<9=H"NMH##H5KE(MK%(:;N>:XN$:Z^S9(D33MR(8^%$C8
-M:\J<N1]/]_%0O!'6N=CTV$8%C!*:T_C*S\#\VH,A&VH`E924+P4F)4G#;`?4
-M^;.F#89EG3`J?Y9*+0;5U4!(9TS^+'^U&%"7`!:*'V%+/>G"YE`$[;J%+BS$
-M5KII[AR2/ZM&)03FSTI0B<.!A;?`.!.R?:\9A5..8Q^D"W]_48/Z.$-J\0XK
-M?BT5AN`%?+.Y((])LLCO_(+'T)VLE*3,"+44S^]`!M$[D*L'4F'(\I!9_<!8
-MHYDO#PYD`@[@']_A87>Q45/1>/5"Z,.+(L+LZR)"!9T<'L@&:QU>TA;4@-6Y
-M6X\M#;PE1H3++^Z%^$=V8E.2;>]$0?6$":M16-QS`7LEUAF^Q@V=MSR031Q'
-MD1K$&:$21X-SN#`<_H:*0\`MNP"'9JC2\7Q7'WSYT<>M0_&!'W,V53_@GGT@
-M@ON`6)AS@WPUI@7ON\S'R^%6&NVUDDD]"Q=U0M`L%((363J^"_!*!SM$+H,P
-M,^6/ZY%&%A+!*^5:5/U-:PZ2USU;F]I"H%:RY=P<8,2:7,X@6W[$MU)2)%Y"
-MMM'WU"5CA*U51Q>6=F,DV+;JA"$1/]J-$;02*7.(NA/VJ=D&/"Z4LNU)$?)3
-M$Z$=;D=5#0:M-(M`0TRG\Y,]*53L7T#N0L[R.%@L<F$;W9O&;??=XW]C+^6B
-MGDB+U.$:NHOJ4:P](604Z,`M(_H\4QP)B<?7WT+WU`-_<VTC[K6+U[F&AN(,
-M\*MS)+)=>!M+&`()"JUU`:M!W?+7'ZZ?#:O.>JI&D&W*TSXT3?X^D@VBAK!?
-MF\?`TICN&#SB1]^,B785C7>8#F6;H\_+/__2Y7J&/@>-)W/-\ALH,F.`^>8\
-MC/MVT\EGQ@.;M-!N.FU??$X8!:$:38>`94"E/>UXJBJO9<P_:H"#('IA1$WJ
-M(0G\H8=-Z"&'>[`=UH,'/V$,.-JKJ'M.!]Z,D'4X-4UQ>_,#;VI!7Z"Z$V8F
-MTZ&"X@Y4M+`8`LER?I?B2[UAL4:XKL"/>UJ'GGC:@"2.*7(L\^S7_V>@J!-&
-MPCQ;@`4,_CI<Z&$!>.C?GK_>JIE=#UX,0BAX*3*@NTXAT+\=7&J$JS!P#<MX
-M!^Z^R>'4L0Y[=JU)(X28<1JW+^Z0_;F#'W,80AT@E!Y#?7,)'7?BI;Y:R,`0
-M<,M`1VS1\D'JN(=HP+&*.6:CHP$=7[K$R.I\R*K1\4'NJ/=QQ!3+Y=S1T"VE
-M51WR`NY0XYL%`W>`S'4CAWF2KU4<_7P<(0]49J-_NY3:^1:6=+\[PB1CF-1Q
-M[6]QOXD:K<YV6&<'^X&EUYHT2Q9.,&GP9H.!#I3KV4I5&#S+KQ7&AOZS5&BH
-M<9JA^PNHADLC+_Z45NGDRZ1,@(D__BEJYNBDG84>!-MN)J*?/9`?_*.@UXX"
-M%/F\\]LN%[VB(,V=1@T5/6`U9^(=*",L3\6AZ)F.!KCA8):?^038O/X2'H^I
-M<2`JHV/)Y3Z1NX%5&KN$B>,>'E7.+V;=D@7P.@_&4!W(SNCH16<FR`?X^0(_
-M(*5W68;+8Z['G2.\(,-6&!*LX^='.`>XE+LWY[YB>S*2,09BT!:U4]+(VC10
-MLLO+%)<SOBX"<PEQ9Z,=$S30G=6'L7"YV`3U.9;Q9<@0^>QDL.'S-!YPHQ/+
-M4)CW*MKU,)[!X/:&;ZQG?&+=PF)EWH*I%\&=Z&?Q^-Z7PB8?"EN]*>BHEU`J
-M[?K1<9>+TT'Y5K8_-=56'4/$2/=L2B^VH2#`M.VTP0UFVQ;]V2GEP[ABQP+'
-M309Q&%6;I+BG*^ZX5?+`QS``CC_7Y;+(=U]'J`QDF*\,9/Y^+@-9NK\'&4AU
-M0=@E\&3P[R8#&29'[5=D(,.\92!AR7TO%6[$8I!1IFH?E7@L[T'B<<&;7+<3
-M"BZJ&1--%3[54L%%-6:_[DT47%0SH47;6ECCXVZ?#*MD?`&NF5;)7H63Q_)0
-MD^INVF6RJ*P[#!N2RI'5.=_Q6"<,$`4XCLQWF?$R%;0.E&]'`7F4>/QI,&1T
-M!+VR']1HTNK;<5>CD]ZGU,H#AO#3PF2_>(A8Y>*U+1>R\J8B#\(PBDR)T,J?
-M*AN2,)?3QSOO1VV(FW_"!9(VPQ)=GQUKU,(:20BQF\[`;.E*UU(1IS,^U]Z`
-M:9;'`*VZSKL@PU@S<9!EH#M7YSRKW&^FH@BS<)$FG2T*<1TOTMF3QH,1:D^*
-M!&.P/2D*C$![TC37<6E6&8H<A-B38A@N`KD'/90Q70[CE5<@TA_<M/8D#?"?
-MU07$GJ05@N1^4Z!\`JBF%/>3]2,+Z'M@13FPWBBZ#?B5,-?1["(($,X4#0-C
-MT"#[C862-.BX:CWYYPB"@@#GI01=W(&0#?@(:7+<`7N"+J3V'?B.%36H.$'C
-M$D+E+.@"<0>@;1LRP5!;+*YFZ5:]_"$,]]*MX?)!:H;)>ZD9*N^@9H3\"DX'
-M^1A-I=IK=_%@)%]:Y[*K[B%FN4`%$=`%XX**6VU[\`.Z!SA3[5#`]9AEDPI%
-M<W"37\XZT^5:L,"U';W)Y"(NSQ9`V8B#8F$RHGMUSM_`!Z"BZY?&)NB6+`QY
-MC.J&JOL8:_]/[5U46BN[*-B1IL9-QE.OX"9C)W%4ZXO4T@?R^Z_@(PI%0=('
-M3(]J,30V^>(K5+@4E[9,56J2`87CDA*1[W)W0"VI:\5(IF,DZ4Q$M]8%+4PZ
-M*PZ)]KUQJR;9D`3YPU?IULB7CC1]MKS_5;83):49[#-5_DVVZD0_L=&^5NW<
-MQX:+&<@.I\UD0KX:^7J\H0(<I1@@/_A/8'Z!B/S:J[0ST9/!,#D0`R0!M3#_
-M!DK-'Q6G-;3AM1HLK6_VT.P2^;K.+BZOP,;$+&"=<7[&H]D.878VE(\#.,H/
-MZ'R/\OORR5<I:7]3IPT51`)M-2J3@]G?6RX-93X/+,6$7=SF<N']2'IC)KH^
-MK@.*)=@.S5\-K=RIRY9/8!LPXPYR$`[Q!Q0M;%1\(DEMJS>8%4WCD*I`P9!M
-M9M>R8;@"_AIUF<OKG5UX&R-__5U^D+\`:8[6Z2<%N6[\M7FO'&AK56&'HA>B
-MJ>@VBMJHH,"#S.QR-(PJMC'T%3AU_OI*2L%6?[73WU8_.%_2%/GEK[_@<MTF
-M#K;5J\%.;>(@L#C#_/?!PE3X#K#.<^P[@'[#'VH5SU/%HIKH>DO^^C\`Y8R0
-M1^N!;7G(A2]P(&(!I/963&W_\WL-PM72X6RFL\+/Z)B9G"W7PKBUP)$XQV\I
-M'JCD2[?JG)"&6S5`>W4.BL3:O@FT'1@<LOU#JEG9_X`[@=U2&XJI'66K]\,D
-MM@':8'">X]8@;@W9KKG%D:CQ$]^8T`"#!UT'L=N@D,0D3&+@5@,[SK'(S2C+
-MG1D1N@`+B.3;@Z,/,K_0JO1%^I#']LZE>9B6#(-RN'SH76337!9Z17=HZ!>4
-M:](6N63I7:I]CPLOFG%K8:W:GMI!50I<(KAT08U.,^D:"N*0$OSR9[E<(8_N
-M1<.>V@EI2\"T^:.L;ZL!B\1N.F?[QB_IPV]BJSJ%0-NM6@-497^#P[2M2`^)
-MP#/`;.!94-A'G822QK)?%U4#'7W07M4>FWI.&.A0SS#+_<YBV:<D^4E9&D=B
-M+!2O8]U5_DC]6_9`!]1'!JV/#$ULJD8(RZ\]LGJ(E-HQH<5_@3K#G"W?=H8V
-M2SJ&M.=+6=H)!\SY]D&0$O_#YG0Y#K=\Q8X)5>=0U_"-JFHU:Z2V?`V57%VX
-M5#G70-%_:7H,/@)8%`RY7KBG#`8H5"P%@XBF:`!]]?D61VI]>A$^H(<[BH"(
-M+2*.JI-\PFB73-"KJP)^;;&;ZHMN0P7_K2AEG.P2ZUU#7\+5:A&4,9L]\JG:
-M/7_[8@V>A:5V9LN+NMPJ[%!WSWLN>2J.CNURY2C*HH;#B(^&`G+\1,K:Q]''
-M15"(A>XLUJ+4%^/CD9&6TL*QSZ"$90Y7#^<,8A^9P!V],)>0I:@X"%]J,(;3
-MG7Z=6U455U2SI0L5U:BIHAHME:3T5WE=QKIQIT>7QKO(FCF^0];LVY&,-0OW
-M9<W>>XNS9L?>NHPU\P/6K`Y9LQ<N,"4^G#4+EQ][2V'-PGMGS8Y=8,Q7]_N8
-MUX`GO`62#;P7JDUM>PD:=I04B,,;E(.VB"NVZ\ZS177GV=0O<^%7<ZB;=:L[
-MB=E]JJV+ZQ/%@J)BRL"P"5KY)<;/X9.2WFJJV#Z)AHW!\$59O%P-:;#EJDD#
-M;MA&GP!V)1*#)='=6C/P-BU2DCHN22,$LQU\?V@@M.+8==I94>@[#19V<6F:
-M'"$(EU[I$&JU!D:U8;5,!E'+SDH]-\I94Z.+0%C<Q3`2TBSV-@S,)&D:09WA
-M)J.&D>*X6?[97]E85&[U`,?G#H=A^M>>@)5,@MKL#AK"+_Y0+*7RLIL*2@PW
-MN1@%/:?0/?U!/.U*);F];_Y=WI7D&?Z][RRJN8`6:"(M?EKD`U`9@;(:X\$&
-ML*MV[#CZ.!U_.I8N07UCG=!5W!?Z&*WD_T%:*?^#M,P>6D,8+>]U)Z<XA%'T
-M.EOOB6ZH-]V<_\$T+OJ?3"-;U\(D$-Y*MR/KVK$#G_JZ2[EJ(`=?I!PI]N+&
-MP#`7S&!IH;`H3S?;DW3*"SB'Y3^S<[<`.0[9<M2+W^W*G*^VH=`W/2.D&CG9
-MVSTQLE@HIXQ*OU&Z%E_0@4A6761":_#Y"+L6YJ5VZ&HD$_$U#K3586R@U?L.
-MM,O?X`/M[6_TN`;>A`/MS'/=!EJ]'/F&,M#J>Q]H;S_7PRIW9?<1\\A?^UKE
-MYK4RT52JL%S'-9EOW@&+@E_:%8Z9YF9(43L]GF//.X;$F;14E=6UN*D8S$[N
-MZ&N3IG,%D7[QRD4JO@7&)W=@L5N!-7%[1LD%4VN/7G46ATF;S;SB6\@P*)VF
-M=X3<4BXF"Y-(0OY(F.SS].IHO")L81>$H2DZJ"0O1%3,)*8#BOPLSNV*S!!O
-MZNO/X"8?RJ0IKW_0_<^X]C77FQVUQ,7NH#.!^K@#V,2U"EIY6%/+MX+H1A.5
-M;F;*I5$97S`O;=LXNKN"<R,LGX3K@443@"D9BYNV4E,R-(L0BZ-,E<U8I#3Q
-M/`J:(/>^%&M:WH,ZA##_L]@2\T:S'/`S\&^X.^=(5\?M6Q,":TE9^QEP9/E:
-MLL"IF[#7)JO-B*Q$1F\!94/EFY]A6EFD];AM9<'-BEE!9_V)$"4-PF>?J8X2
-M\+?T$![7T_-0+M<D'1:#Y$0U=?U<S14VGRWRDQ_40]+P(:G=6S`O]VRAWJO'
-MN*9'H&+YH35XDN&JCK!1=Y4XPGX/;G8YA[C>1-/V(J*Y/R"W3<]UETGV&J3$
-M^*=E>MPUE>Q;&:H?W=]4PU+,[9'ND`"C%4XQS)^(VEO5P/>I7#JG.XS&FWA_
-M!1O%=SRH*@;'*T@@VU'7/@IZW2!@/0P:25UGIC+/8I`T,!M)NED7.>H]+MTP
-MREL43-!):07NU&I<YCP^S:T_@R(O].D3Z4(&<.7R#FA0T!?-&3(*7T>?CVL`
-M1EP(R\@H6.W/MHLH3QC7(*BE=F=PW$4AT+$=JS#N9_OB#EA;![*K;2C*'D"(
-M/[$'2HNUYQO:Q:ND!NBXM@[5ZF#4O:"Q=:C7`/\2A;K?I+LJG5<[:H%/=]&7
-M2LS`4;^--M?0EE;Z\"MN4IUS#5V'=7A>ZD"Q@@Y[(%T>4.U+G6R7$OA_&*+.
-MX:I)N0@(V93CABC2)$.[;P?3W42Z1QQ]D$LCP6CJHG?6-Z!&N,;/N[P?F=$H
-MC\P\^C;.$#H\O/3'*PAF&KI=?L#E?FT&F';#3CIB>T\,6F"81N(V:)94#"Q'
-M=NWWTB^B5;;1BA*SY)*#N.LBID2?AWQV20>$?F98?1\%U*^UWXL#H&I1:+",
-M+346180!EV6$(KPIVZT::W)<ES"AB&3;X_C.[1BI+!S"_<M'^/!IB^LHU.'7
-MMFOI;L!B/.&2/T?1E1I4YNP^%Z#'/NPU"]YL'/3.!0Y'P%+)\V0\KH5U3("\
-M_B]LWH2>;T]BFN*SN'YR%"C[0-Z*Q3,;DBZ,][HO)*7JS+)NE^?"$"!@T?KQ
-M3GHR8-*YHBSRI[^QFX%:QM>'XATX,4YBBI!04B(/AT*(8N*W3!I&/O<D!!_N
-M6A,NX3T;+/+8I'!!@U?6MR@'B>ENI<WT`H8TG=Z0ZXC^?J>5Z;$>EI4%K0^7
-M?V79\FA\*;<C[I+X'7^Q!KZ%P6X?:=GRI8\@3AEE<^09X#GN';?V.C.OM(XL
-M"#-("3(B6WZ7!4F,""V8\X67FN"/F0)OBZ+P2L_&1[U<HB-,=ZEK=0K35,K&
-M2BB#B2[W!44=LLC5ZPB^\Z.1_W0U'[8SLATF79':7`2C$>60AFI;^0$J:36R
-MZYZ/UB]U3F#35H'N$KV5?#\[Q<2)[$T\3#(K,TW9%T:FN:(N#)FHS2>]6!K]
-M1<;2R-\WNGF8L0=\>!@ZUNWC=T<U-GF"<$NR<%.R<(--UE)]CQXYP;N/0TFA
-M.GO`;*HGR'.%VE7.L1R#C=89QBU4/V9_;L'M3!@CJ0[([")>R[397"B8B\6]
-M!HH;*\TLWX<JZ-&I(-G;`5IC\@Y^,4K^?B"^EA>;'$EU*3;(I\#.]NFC("/R
-M8;0:HAJH?A?;V(UX0]LV]GXT,"$US]7`YW,;X`_S8I&FX_4*:!![T+FV4="X
-M/LZ?!8O'@=!&&L6KT>9/Q,$%*?C,"M,54PG!G4&VL6@2JCJYD33Q]PWD!V,4
-MMC/0(F]!%8",ZPS%$>V73[O85:=LY'1?#D#M;(V!S3^BZCJ-O:I3P.=>9+^O
-MZ#YOI=/?7ETI7QR`.]I4(;I#0MWH\I)A!!57N8;JOD2=%N/996JZA1MIKX`%
-M=H%]-XZM]MW87.S5Z^R[-U+K5OH7)[U\^^Y7F;&->BFST]>H['1ZMN]^GBBJ
-M_>V[-]._K]._N^A?*CYU#]W.]F.[F0M]>&_4O.+FO3?_W<U[2T/7/15/:H\(
-M8;8=F`SB6(^&Z&?7V<:BDV=.[L<TBVBQH$.M\;01-7"(#=@%15]MX@J9I`'U
-M8`7&*?H(S*7:]7'3T?D^5<BC#3,G"NJ9DT7HL,;;I*",^53UI%8Z$$<IK'N'
-MZ_W:RU^(2@Y5/L*4CW#E0T\U!K<;2:-!3>4TZ&:,/5G7<-EJX\6_>58;<['>
-M+[5X=4VDX4C3`[,-PQQTV]=AUD\+I^HZ[Z??851'9PU\TPLT::&R\+I/SZ4G
-M0GA_5B.=%8)D:!!X>O(^(82/R(-5A*IQISL$6=)$Y%(MV05U[7@"D^'Z"$]-
-M&Y-TF(*V!^%/P>O@PO#]`(^2`,X[I5G(G1=LI4ZX<9%;\*3[.ZM@LSM(B)FJ
-MFH>`>&KO-!;<KWA#IVSJQ,3MAA?4N)VN-LLSJ1.=WW"AX@P"$BB23*=$K)AL
-MR1SJ2`ZUW=E!A&F266?[S5^<+E6&.9+#;'<!3A]W1!PK588[DL.I70?VH8YD
-MO630H[XTL1^=1D^]!N/'/GPA*Q8X.R$BU@A\VVWB`(MT1VAL4L<2P=^>KHLU
-M:L2@6*-6])/VL3VAND58>8;CO-/2VL/.RE[RB#X1]YY]<:?GAOL#V+_BWE,0
-MH;(AF-U'GR0-J('&#4X#N%_[2$1(`];YHA'!7^EHP%<ZFG]V*2]^4'L]V/.E
-M>[#7XJD<+H+`P1_6X8"E79I;I0>P0R_U)$<MOX+7(9-U<6F5HK\]1Q=;ID93
-M[5I=*;=\")S7ZG5R,YIOXF@AOT,_<1R1WZ*?.)C(_X)/G$[P)?K#]B7CY1^C
-MZ?K;,P306?,!SJ/3;4^==`\.']!F!IL+MD+Y%=3]2-?7'W3PFQ3LA3OP$&BK
-MU`4(@^7`?ERH&05=_X&KWGMV,1\H'YT4LZ2A3H\C+M-[A<VGH>!;&"'E9<#"
-M+6B@TJYM[PV'4?\.K,*JCZ`*BV;*/VEQH65/;8^NCVM"%20!\B-!I-O>(';F
-M$=%>G?F3%SR=>3,2B_K(LUEQ8`LNI:`D3)V-@7([#L<I]B2SC*H8NS.?=)<P
-MVN5(6F2O#C?;J_7VZO'VZDA[]31[=1XL#V%6M%?GV*LS&Y,B5+0'--35MZ-V
-MG+T8Z<YC$&D!"HC)$R_/A$O=/1-%47(0NS8=U$@*SE+=YPU%:OFG_@JRC",Q
-MNW>&>DU9W_=7IBQTVN+M=,3M1)<OV!XR\!)]^%>H4:F%WJ)KLEW4VU//5?L7
-MZ1<Z$CH=%2%/3-BWMTN-BM\^=.UM5?MW3+AH<VG!@W9ID3XGKJD:CQNH")*C
-MM@QJN@!7PV9Y:C.LIDQX:F"K_PW&RB<AP1]VA/SK@/_Y1E,'5KOC41/ZE_#L
-M+C_D37*TU67JC#[X:_-]AS;&JS8&^W_L2NT06QE5,Q4`%\]EN(9FMN+1<6W]
-M<ZBT?*$XJ.`K*N8V5`_9H+B##7655-M\#=/K'>V*I;I>!"ILAD*;7I+V^<BT
-MM\=6J\4R&,ATOQJ`7]?54"/4T(%&6/T%-,*7=:&A7W8)C0B#BMX)6_8;VB*W
-M7#00>1"*+.+S-JA;>X3RSEBHO3H,F@QM,1&LT30FT1DHMCJ4LKC]Y>,!/"2^
-M1$89FQT;L0?@%SV]IP?O!3-_P?L^!5%@V`/A(P(_DM3P%4J_-/"EIE]:^.HX
-MAU\Z^#I-OT+AZQ#]"H.O>OH5#E^OTR\]?&VA7Q'PM>$<XTR.`TM"%:W7C449
-M[E\^I$.I_`OR#>VR/D"YJ][/]@"NAEW.%5!!&U&_34-5<`9]7@TRF-YX#[I2
-M6;*G_XA',K%+<AJ3,N]XQDC$*44&6?LLWUYKYT.RO'2P1[#$GI0C%V"PY!SY
-MA<'*!7?O$4M.@J%"_G$R"GKMA0$.9U?1($?3N(!S'RREY71329)#Y"F0!UL=
-M39=C&QIBB&MHS6G4*+CAM'NOAUX@L0AXAT)+;T0Y8VRS-E!.9WH[<)[B`-?'
-MK@!$/+<U'Q_CFQ"`YJQEWQ&R>@`G^#%UHXH!3F$Q_K.9#6=#GU&R[1D*HK:Y
-MNCVD5E>&-]#K?L)PJS&<A0F+[:['W0H8PR!H.P9%!:`__PNO*\[\#5K+`5^M
-M+'(84<:"_IQ&/R@K-B"T'00.O0[5FC5TTT4[DWG\?D^7JZ%@X[.0ACT-7509
-MX;*GN1I%^D&]M?V`WNH"<#'SW@>819UL"+ILL'.<\\EAQV_TH,RV$1\*=-DV
-MTO=6&\FY3LZ2#R%>@]B`(#=+GH@1+?^`RTW0V1W#2`^@!A*ZV;`;OU`3!3N]
-M"^FFSR9*FE7/]O[H?$M5$=&OU5H\U;#(MG=Q<\[["E>#E\#(9H_>1C9__?4Y
-M2,Z6?73^0A_L%O?>Z"..C3.![;>;P^UFO=T<83>/MP^RIZMM&U-0=,ZQ,1E=
-MTS7V]'![NOX^^@A@9R?RJ>/#@4*C08_,J=T<MC$YM-$0A9$UUA@@#%8H'^>[
-M%1&*+/,BRL<BFGW8NX@Z:1$EZE`>E<JQ0Z$$TD+120\4Z_`I7OP+V.&2RO$X
-M)@Y%HKH5'N5K'Z"+&4TPG;J\RJCM%^13]N)M"MLR+6DDZDN8&6TFS<SX]^-[
-MJM8;/6FNQ#1+[WLS;4@!'R2$:)F2GP!4\J.3TL(8CT*_P[V^]5[?$5[?,?!]
-ME6VME@B#Y&L?0-VE;_T%^V!:C+--2HMB18'J@Y@.([<EQLO2;>CQ;@!;7X"$
-M/UU/&T`]-H#@0=U>",W7\)TT,:0@XD7`HB?Y:PVVHX]@:.GV<E:LAFTC.9+T
-M9D5EKW@-ZJQ$]1D:LRM=@YK[V/FF&X&O)5H*!*R8`_Y\VV((E6.ON(1#@Q8+
-M\L"2!BHAX5L'K[KU4;<UH(HSC2P\B?M!"X3^C20/0J(0#957,X"E84<S)O_&
-M7?0B2G]T:R3K+GG8DF[C#?7[Q"YEO*G;@I7\XGO*N2^ECML=42T^@P.*&78?
-MDS2,V(*=.":%_Q7H3-C#QJ2F.CXFT0_JK>TV]%97UN6F@BJM"ZYIISIBZ6G)
-M3]N1D!4)?;F;5AZBV\;4=<&(Z!,N@H4C&"ZH#L/]!</]G85#=-N-@(:!+_;/
-MK.CPYMVOG[M<M-S&([DZ@G^A=(?]V5VZFUQ>I=N"6;;LR,&W9X^_U>6YA/RO
-MS[$.M[BZUV&W<J:!INQTC^M_;H5QO8Y65Q0ZW?N6=W6%D?B>JXOZ_>XM=W5%
-MXF'9KP>5ZMK$#]SDE5_[5->FRZI+Q]+T]QU86N]M!3KKWF;5U:%4%_V@WMK^
-M@=Y\JILFIHB&[_\W/'#S"N^GA/>CWMIN1V]U^(!M0QV^$NE=>=>RRJ./_7Y!
-M*_TV)/?]+EIYB&[38:67^80;P\+1MX#/TW`/8[@W6#A$MXV%<%*ZFJF`GF*?
-MYH?/9L+Z=U#M$<KBQ=+#))@#/Q:#\9U.=91=Y=37'A%&2W/5V=+,07%=,+X<
-M!]\_UQY9*O23U%/LZD%<0ISN$Z!\V?,H8M2.*NWEF^YU\;JA'`I]<UOM&AKV
-MI9%/"=%X!P18/>!?<4T/;")?P@-S2$]BGT0IG@Z7/1"HG;G'!2L;W&?=\@5K
-M7/1<,A#?E4()M$V(34(U#T.D2G41/<%]T8\*3#:*WTM)^);85>#O479YBIU_
-M\;,OVX%PBVOH9CP%6]+`GS3'N/`)<6"U,$2)6JK6Q%VJ&@"4SJL[5"$;=F#=
-MJY;&_5@]`G"V>LUYHA+P85/PMN[GN$LA]]-GQ,#I'7UM?88X1'IG;ZN_N<!/
-MCZ=0*(?GO$9)3TL&2X_T#G5&?\BD(H8^O@D)T2'#3D^.,839==1%;[+?#Q:Y
-M&56WHGC'42I!(C45'@3$:/_W'>J&O5_XT[?830U4B,J^1&<O42^,J]:N"W3,
-M44%)8PJU'7ARI'.H.RA.P^CB&<OB!0OH`2[N@UUPS($R,77R(ED3*BW&<_EK
-MXY9HJJZ2@))VL]=$G:2U16PFTFHU-(93TAR=2^RT1;1T.=0MC#H7@\I2GAU%
-M'>&5M')0$:QDTCB6:N+\0^[''0<4:@[9@`M^9SP,7`_0:]1"<",9[Q</`8`+
-M=]E6PER^4DL@%*VZ*I[,;-S<4E]2&@_-UQQ<_0R"%.YM]3.C*!VV6B?,O=HB
-MO[U?^*6#OW5T-K//T4+3NV,#-&1_7JJS_=.TZ$>:IRTB#O5ZL^Q$%A5R"X7K
-M3W-1P^+`YW53M4N7V+6;%A[D]YZ[369?=RH=A!<Q*N&"F?"3I;'5N%5;'2^9
-M\!`V3+I5%YMX00W\,T0SLXX((W%D<[(RK_,I\SHR)ZY:LVX_/3R+=?PA/)L5
-MA,5Q:Z@\L!/UT--2<*W6LLX(5:CA#YGIH#"B60;X_6"L&L>2\`Q&@[[:+%ZM
-M5!6D+=)%]06;Y9MPX3&*]<"KLND68:4:'5#ZFW9"Y](,%C-[T1EUGLTFXD1I
-MP.LPK-4>%,-WU,&'M!<(])-/H3!$$U3L03MUEZV0<GO0,_@MS7!%N1,P(*Y,
-M4Z7!NV73MH'W\]#:0EV9D"8:3&K'9PDVHZ2OHAW\+#TOURG1XH[7"'#'Q10L
-MQW$2>;5!$4$^&XT2R+$WBZ.@U0V$T01J!6P!KBR-/9#J,]/)*W&A&7BY.C.=
-MG.J'F^_9V;*FF0H[I-MB\95$%5.9!7]I%?634CM9]1UL<">*75#!?<4_=+E<
-M4%RV6=O`A0@:UP#\$(>YO6KEGW^#Y(]%*V&'0Z$9%GR7=_=HX@<),.,E^8(8
-MZ"D%,+C6X)-45><@(_:J#M=0#95Q%&]"B0:4K\FVX(.]%>NDD>I6(ST0QK/)
-M$<SYG%DRG6$^MN'6#%ZW/AI;U2E-Q\,E(0"]?QQ;U8%?':Z/)=,YJC^2"?I$
-MGP?FOE->Z**';%UTSAF+4>)YM*4`TVJQ6%"LU#44X\YF1U904DSMOFW6Z;<A
-MAQ9Q6I%JB7TZ6ICBJIGJBA`\\JP1-/;IK8!V#K:-19,41.U"3SAA/(/^ES1P
-M(D*B:P!^V&91?^)T>G<`)P`6Y/CN,U":.Y/A&U\\#,AP'7<-M#6$V0ZHUU_$
-M(.MDO!F0$7TB=B32@4%B,>0K=B2ZB9GLS"`V_&VD(HW$GN.81BWB]5EO8PQ9
-MKJ-XQ6J(0WV70_T.QL,G-E=@%NLDB[V=CK)#!"6Y0W$2=Z@-GJ`88I_R2`LL
-M=PC55-!6@+S!DZ]`F_['ZY03H-@?1KE5"POC+-+T;50BPO6QH<C_.?0`7XT!
-M9G#&N?BY,[3@O+RY?=G&HB?%!Q,RI#42?;!(==^AD#>;0]X\N/=+C?^[]K1,
-MU)`\>J;:GI8SHGZ!(?K$A*:X!GO2(GO:,GM2GGU)@3`81H=B"#R+$#4946^P
-M)Q7`%'[=86@NA^U+(N1/WH>O6:UX6N!W%\']?7IY-,.>-!/W@`S1];%+%MF7
-MF.U+$I>&/(;A=<!>P/BZ$-@L[-8G]GB=D.".)<Y\*"I5+^!I:3,7%;3P2Z'=
-M)+%>I_<?]BC,)6YM/H-[<SQ\/\D0QC>.O3A-[X77F->`P+C7:"7@F])M:\\J
-M#]@P#_'H(8!Y0,IM9?[TAI5\X#Z4[6Y,FCG3/Y[DP'B8%&%/&M\8V`P=VIZF
-M;TR:AB<IC4E1NNO0B#&,AF$J+=*>%JZ\JJ`9Z;77O.I!SZL*TEF8PI)0U/G1
-MTW08P-U'>U(X8]SK<B!"/J`X3&?`US+*>0S-^X+>`(@SG1E1_VO+0;8;*!^%
-M#O`<:LFFLOK:+$LV;H1"=46?EV:AK+K%(LD62U:&!65#I11^Y[H#5A@69!_U
-M9N;$1172?P\5"Y#0NX::\>2)TD"2;CIX^X&_H2Q-7X2)AD:;/T!58W9]+`=!
-M^2/#:R^#_UJYHQVL!J;*)B5":R\KL"<7T[?FD\OP:69[L@"K)%1?(;\/7O'@
-M8`GT>KN-"MXSY3;KSVBI)F[4'(QJ6*4.*:E@)VX5V>=HX!.X"4?M.9AK,LRN
-MU05,]H4ABB:9Y5%O=+EJ]&3!`E0Q4XNZG3/,S-4LX\$$C#5/X:D)#!K4U2S/
-M>@</<>]!9.R22G$J^.[$&V(H85-`6B&IZ73Y)O1C+F9G(#]X\7^''?]*297V
-M.;K8I_`(QD$/=,4QTN+.@CQU/'2PH2U?*`DTR\W[NV#^K;F6++#1,U\BCF7I
-M*%BDID,05?O)4_;<?IHR]$=G`'8;7.JJ@<'TFOL"9RX2-#,G"^J9-XG]+/)R
-M7*1('19Y`?UH=W["V(Q@_L*.P3D(>5WV?,[0UW%\J:?2'75E:KS+MK>11/2+
-M[V'#IO9GA;]J5%$?WOWMU3>AOSWV+]K?-NWF&]EME@YHC6ZANOY\SV(<<?)W
-MIB4C[F4$4;RZP;97G<Y>S<+(;=5JZ$UJ=K<CF^^((#<K<EE\'162]":A:6AK
-M@&Z3(7W"'J;RS[:XS(FHM/(A2`WPG.^YS#'0C`)C`_2#8/8PH)!L0`1^3I>2
-M-'$!X_'S!N#[X@(B\7.T-$\=?21VD#`0EG#^#;$Z\5;;7HWS!VEVW&_B5\Z9
-M4K9:"@:F82*05(G7@*<X2/'5D*:X)(TX6#)JXY*TL/Z+A\"V&"(.L.W3.-^7
-M9D,F]C/=M5Q^6E)9LNVI'2QY<]3@5PB`I8_SO*-,;;O9)40B2]0AJ3&O(R0F
-M5Y75.1\O*KH&4=DV4R<8`VP'-,X/*/T=3%A2K3R#=X&*:N$3._2^4G_I`[FZ
-MB[Y:-X*Z?R!70-'9`U&R<VS7'M==`7X&4L.N)=$B9E>)*1<%<3H]+!5T"LI2
-MK86X''>HA3'9!5BZLMB%E=_!:K0(&9!U;)>=O3I1AR\ZQ)JT(E=OA0)2\O4P
-M.CNOKQO$G4;FVZIT*\1A7+<0$^E4]`I!&^+OE-+5,@R9#F#<TA;Q1HJ3NJU#
-M93<N$D*B#]HZ_-CU'_^YTEZE5,+P&1P4X:M>5A1)G\&IARX@%\+0`:'U>)*%
-M7:<Q*)+@*CI/"-!JP,`;N8U)91_7P4KR'A2MH,QP#R^FFNWNR:%1A:3;&NZC
-MFGB9G+;G%<K4SG2S//@3*"^8IN72+;B\6F:6(V?@J"?_8PM.VG+$DTS11S<1
-MOB*_G+@.(<;F$D5MXSTXY-!#^PB;:[4PW.9:HV!1;,`Y$.^SG89JL5,<%82$
-M>15%UO`DUS6V[#3VO8*7WS(2VHOEFW#GOEU*T^#F<,$RK-:G.JD0;26=X@2Z
-M`TE%4Y,T,,<M:(%A8.]V/`D(E6_\$1<=W4X"GKK8???(9=1##]8CSY!LA^\L
-MKHE)FHZ:-(K\HT\4A12%.$RG88S'VT2CBU0+O?0P^7-76)%3`;'3>+N#+X.!
-MCF7W)ES0!A;YF<W<%]?0(8Q<7R5C4>$[/C)5_C%2,K7OE77G]QN$P<B8=AV"
-ML.7[J!(RJF3&>;YN`F;ORS>[7.O/X`$_BH*>QS=/**/M<"R"MB0_BZN?5(T+
-MN'.&H;(A05#JT!K%0,DDX\NM*/3(_']YR<6>+_'54)1Z1KX1AK.ZCW?B%F("
-M1KVRAZBQ,2AQC^LQ;NE2;W'G]Q'W6_L@[OF[,.Y*>LD9F>3D_7+R;U2,7;&N
-M8U8ZAB2REZ(0W005[=:L!?3Q2+;RM!AKJ]*J+$(@&&KQNMVHK26;ZM+*=E>-
-MJ,M&327TM0EH9LBKU"]Q#L&`0C"&$[B08,=2O)Y`NSGT4I7%4;9?&`]675Q2
-MU.H1MNH(@G*];$'M,B_#G:U^J/*J'P3'YU-16U;4$D61'B;2DNVHW(_BN'-B
-M0NZQ$Y3HC5T3&5);BWT\R)%ZF@HCH0*9.V+7C!>*,XK\=Z)`50'JS\F`7/!V
-MVS@G$GLA;9-%_L)`MSMJ#/NN`#?E=F+CR_`T7:%?D3]U<'Y'=3IC1'FVE9'8
-M\!8Z(VE"@*_V<^J+_&B!63QMN;\G;3FL3^/-M$S<F,3,QX?Y[\V7;M'FVRYH
-M!?]\^\"0[;=H;7N[;!<&KIGGBG"\N]M([B,;DS3.Y'R).&\X14XMT<#<IK&G
-M:5"W=Y+6.1F8M3GTXK^$A\[.T1*]`9"/WT-0#'4F.U8+PN*WZ:D<$]6DG*01
-M?F:SN].Y"N)YD$,YP%INW@.P@^,?!WB6V__)(7^WD551&*[#96SWJ1UF7/RN
-M?!XE#K2HJ#LF7TK0YL_2PA(L/S9(&&.F7J&,$ND%`!A]JH*E5)U]2AL*XCBJ
-MY)#M"5JI(LQ6W^4O=M@Z!JXI=474:NNA*.9H-@8Z2_*E.9I\>Z#3>FJ.YM0H
-MYQ*PV@.E.5I[DMJ9[EJCL<AY>`LD*;H^/W:.!E9(SANR/04Q&:6=]<1Y'03#
-MH965@47^\3QT.*3D'``^&DV=&N)7`QZ9&JX8E!N%$7Z=5EH86GL"->QVN([2
-M)3L5SJ[<8R1'.*P'V,C-QP#V</P6@']P^R<<[MACY'<;TC2V6)=XE6112_ML
-ME6'XD'B]WOG+A'U[.P+L*AS#)2Y>FHX\AG)O7#!+:]39<IT+7T:RH]J-U?K\
-M]=5:5PBP!:(6-[#82SR"SG9`GQ"W6%/>*LUVF3J=#:BGNL,E#@[9;NK<VZI+
-M"-G^7O^][/4%M\H\*165Z.*);92T6"NUUYZPBQIQ5NUYZ;"P#I@JVP<P>(0)
-M`_+75V*4`S#-/TC]:@^*7SH723GJN,_%@2CU;,+-D):XSX7\VA/5"=$'I2ZJ
-MN1`?M8QKJ@B29AN!,?H%LG-==LCVG^4V&)/CVM=<!0S7WF\"I)3`TX[$P%;;
-M!9<P/NX](4(2-30%PS$%6%;!L3EJ%GD[C?Q;_E:ZAC0:=<UX=LUD!Z2S,-.-
-M^077#C!API1[^R],OZ)M;WO;1^=1=S[NB4=_GRT%9DFS\,YOEJNLPYR5!6NP
-M+%AS`5]N0/G0EKA3L"@REK+M:'SDDON"Q5@#BCN';(<AEVKV4M>&00+N"[;5
-MJS<<%*ZSU$`NPL[O->S.[,3G@79O`B/DS8.V+_;XJQ^X[Q95_(:#XHDER@4>
-M+:OH(O5">XC_16"Z0@.%(#2TR%GJ[$'^%Z6L,)NU@TA^J`DX7F,WA4KQ6N5Y
-M'ET-JIJ_%X8OE#]/#<T/>5-3AU)!]E1-?ER3,`BOD6O7?[$'<#7O&P`KB9VQ
-M8FC(_0<("L`UA6RXA08.E<1S*'+4CH-5R(;UZ"H-RX][5U@M+=8WFK0:Y&5:
-MP'6@X&]/U>;'96GQ+7MM$;Z/1#L[L/OWXT`*C0J]B3`R!.;C#:BA4@7J&FY'
-M+BL!^,B4+ZG"F]4:^7/``2J_T5^#6@8Q#@A=I)9^7@C9#MF^U]8Q*.1!G`6$
-M*A@P;!W]0^Y%$4P8,6[?CY)4,`Q60R[$(5`F3!]"*->DY"RB6@=*,3]B87YC
-MP+:Z>!),&@/JP%1#Y]^-".>?3R5I3HUV]H<>:`^"]8<=U@"-&N=$'%V2Z.@R
-MRC[#&1[R)L04&@#L.4SHNC4#(0%_WH\[+QJL(I=)!\7?A@]FH\;'ZI"Z@1"!
-ME!HN987:!SF'2[2>A!#$0`VJZD+`F=VJ@IX83IYK,)*(_0R^A>\?&IBIX!"Z
-MP-YO?W?<[X4)/H"XN@@\%G[P952$$EEC_9$_<F!/;942-,#?T*>QQ$"'Z4=\
-M?`O9?US#GC=I\36T!)W==)H._':3+"0XDORIO@&YX'68%SKIYJ?<^;<N%WI!
-M10RS-,1>I1']BP;FU&AGN)(VJF?4Y,U0$2DAU&:5"7U(*E0JT^S]1BT=8*1&
-M(JF3,"`MU@J1EB*2(=_Z-WKR0]^%TLAWTE>^''ABA=Y_>`UCAE$F&,H^J*9M
-M%<[R4FJK2PQSF`[1A8YLING:T,G&TC#@>#)A<)3'+.ZTR6IA2K(P.MF2G>P2
-M3PO]Y"]1L*+%.5G^!#Y.99T\M?B0\QK4!7U:;F08YQEFK0/K)_AB!73-0_3Z
-M@!@*/%>U9O5PVD7I;3<VPYBT.CS3*/]>PMA#:IL([;?XAL3=M.G+^79-R/:#
-ME$?0A=S[(FWJCH1&F'%R-&WT'$XA/@0&[`Q&=XZM08=DVZD.CQ5U72Y[CL99
-M+*4>LB=KG'G,E%*;[<E:I^64Z=`I<$W[]<2($_GH+]$A'I(Z7H"?,Q:+PR9K
-MA+')PC";["\$)`L#\?+B(3Y'.J^"R7&(Y)_A,FN<>',Z*(-U9ZK8Q&'=Q7E9
-MVJY#R5<'C&07P%Z`XP`'N;G+"SX':./?$QN[PP.`8^QNNWS+CU[<;[M<_6,/
-MW&^[_&X[Y7ZY+\G0[C*',XU<5`4QNW*"%SBJM+!F+FL7@NJRH;D`NQ"(+W4@
-MOXKM(JA.!6MPJO_986J7#N,%8+GVSUTNRN%E<26RFB)=@0XF&KSBN*9=?N\U
-MVC[Q0*].!1V<OG(0?2)V<9A]L4:X&7E%#=X(SLAVF76HRA<U9&'?"H7%/2[#
-MT\>C6@:-&:SIFO5=$VK\:L0[=P?B6%'!=EZBH-FB0NF8N(NB.OJ\<R*L[>MP
-MOVH1\9,:6$\XO:T+Y6S/F<TUXX"/*')EF\U,R0;TRS#Y3[_BRB,<CZ-58A"C
-M[A=]'M\M[5"M[N]8"P7G`B;AYW](!QS6<W2>#2-U43A:Y&(//)-)RT^//(HC
-MIQV&"OOBTP+D0"^;_X3R&+Q,=/);K_H4B`%E;_V1R7[/90Z%<@Y&O;4U;>,1
-M+X8[JIJQ&4+[KCHIA-FJ3JKP=9ECMIA+0"`(";CHY3YMAFS`7+3'_6H7PX&(
-M/[I]A0^,J!;F0WF+R5*2+JY1'(S/Z`V&CWXH_]DOKE&8C)@;<,NID3YVCV,:
-M#L2QII8U_1I-8528/Q@^<"JR+SZ)RG=;8;)KM)M:A:MBJW7V*KT0@M2"ZP(P
-MUE7^^+2-['*8MIGM56?R&TU;@HD\YPD8^VQ58>J0VB=P1Z4*IM1-=)YMSK?%
-M]!/38RLU0@H,7U5;(,-FN^G,"_*0)[#P'*9Z/.5>^CQ7%;+5D57O$L=C"XEP
-MB<WSB_S8I@VN7M+#4.U/2.T`%2V^?%NUME]([005GM912MEF>1@C!".&N`3H
-M.+*VT287(6GF`^7Y1?Y>]].17MSG(;5_Q<G?5K6M'_(@=5!\P3MI7NG,BS2:
-M>7+T\XO4_"U+9RFFTM0,$=CJ@5R$W50OF5H\D23;34TT:AT&=L<FSF(Q_87&
-M)#R.],5F1Q6,)R>!"@1_`>)Y@44$G[H7[*E-J&2&$<!B9T/3^HO8"D)J7X+L
-M*]];5'CD?H;@\YG-^"XJ\RI5-3M$+/@7).R!+=%T/@@_;PKS%TSP5R4.S8^M
-MU@JC8ZOT4,\X6;?58C5"(8Z-:UP]AI:T$$QG^;;;L;SKP:O=U"+J':G;[*EZ
-M[$I`HZH5VXI.O&8G]4DWU\`Z!(HTA-+>26E?H&/_:7M5IV0,A=F64@/6PVX,
-MI:%CJZA"8+$_E(1%?O(LK'YRV0NL2WY"OMN9@<Z(`0_0QRWRZ`[P\PU,?Y)1
-M@P]/K'P5-9<=0D:Y"E;G_>E-M0AY+XU8*R>#,[!X_2`QS!<N!DRGZ626JH$Y
-M.#E4S)9,X7&FEM7S@!W,M\7U$XW`U0&7?Q-]T69;7(N@R9#G/=Z%]_-/8"VF
-M-DN!$$F&1PD"L(HPO$HM4J`%YX\`VJIH_0S!YQ]]Z@9FET%2ZOC:@T*P!+-2
-MAPNU\DL-/@?4$>S``K<TZ<Y,D1ZY#WGT,\`.I"+OX:AMQ\U]^:*1OK;U+JJI
-MF44OKH\\34_>0S;LIM.P5DK6YDMFC3WU''*P]D&266=/UTGF<'MZN)0<:D]M
-MC[VC0TB(.TR/?">DNXX;@`WWKV?#[JI_0(S[76*GW=1!U0JUY]NC+'AW%;4]
-M#$W&&%,U=J,68S*$0:W$EG6$;$#>-NX`HVCN3G&$+T5MSQ35S@3(:@&*8,G.
-M;7A0PO-,#U"$T()@?(-KX-TNO/.:WTB"SSH'4P7>\F_K%9SF;*QXCJ9B(EY@
-M[I:.1_[N3H>6IN.<.QU:3SIB[T`],>*M\FJ\?6K0X=)?VV.^$O[^._,5>X=6
-M-,?>H1-NE<=0HFJIYGY:7OC^X/4H/]PQQZ&>S<B>^1N2S684@;1"5.RP>!>_
-MXX7376ZM\;?E+/#71M@'3=!&2%\L<#4WU!&\0;+V6>6`%.\J4B4Y>]7ILF5/
-M]SU4^>8">BPU0#)DXEX#O3?1S*3#-GS%=':\A/2N?];KQ!:OODA)X_F)*XI\
-M)4([E*T?X5,':J8^C=]"?7F5R^<NVUYSNOS!;I>KH2X4MR6;G_$BC`>I5%(0
-MQ0LYA=M]*5C8DY?"0*9["\]+4;:5'K#65,<389B4A+O"^%"L0!WUI":?GIS+
-M3QY#A5Y2NWSH<Z"Z.@)Z/SZQO0\7_ZO#G<!^RM>TXC4EO*TLEZ!OE23+3X%O
-MVSO3HD](O\2,$JXI"K;(I5OI4=F"C:/E.>#-5::!.HJ"Z!QK5,Y/BU0;%Q/Y
-M.`23KS]&ZSVN`6(R9((1D(%E+'_^(=T>I^+G3/0\[CUAH*1BEVCQ"-L^6CYS
-MU.7".V5ZMP`ZO1CF.HYOF"9%NBU4.W2#PX$O.+6M;G2Y'(Z9^'E?6I>KKG)T
-M/&D+>JP+D#(TG+;0=>B.E_[;^L%GW59T__;1+KQ*W_;K'P#3@IB/`'.HVT\"
-M]UGE6!WMMKV+VBH:Z.?ZO;BIW+8;`Q(]!'Q2"8C^!WC\)W3S_P#ZCT'_Q8I_
-MMK/<)J!+&;K,[YX$1^KFMJU+($>;T7'Z9>ES.-HO0?AI?\#\X5EIV_7T$_5R
-MMOTK$PN@`S^'>+`+D%P]DOOF$5]R-/TQZ$$S!CR\<YD'+"_-$BRWDVU[[@2:
-MJ:?;ME.SM>U?8-9%83B'.YPCM;[MC]1]?]N#U&QJNY>;=U%S5UO=8J1WJ*T4
-MPY=A^%2O\.UMV8BO1_QTBD=<`N)DQ(VA.$SW\QLAW;IK`#?`C9O2B46.N`L/
-M*[AU&[M8_82V=:[E5176=E;Y#&_[!C[KEF&@_1@(P[1=!-061+U"Z:`ZAN<^
-MPB[=A,@G$8GI^@<&;4>4W1W?DX6`"[L6<*(;MQ%Q!L3ENNEE4'H%B$Q1XFV^
-M%_*T"5&Q[K`WWXLBRX@;^S`KC]-MT6NQ+.O;Y'^"6RNZ]:-N=<D1\'WI(26.
-M]?>B^.\61,J(K&O"SU/<72,?@J%G04.=?BQ@&Q]"`6_\>OLA)>[F`BP'Q/V-
-MXNJ:\/LO#[%T=+2=60AA].,P_QQWLBWF-4S;EK9[4(@6[.-?PZLTZ,?*_=2U
-M%8%;70WBTAG=K?AM<J?[X#V8;MUU@(Q").*^>H&F-0:1(P")N)!C6(;+$*5Y
-MB)?A0*2]$5&_;**TM^%W&_O6C,?\;U+RMPSBJ6M&W$$W+N6>+M:)\?I!V\V'
-M@5H'^OCK)HIOB\0PXZ\'S&.;E'+<4$S39D;L7=R?&OU5(F:5FW9[+>"V(&Z!
-M.VPR"]N$V`0>M@G]M2-FBCMLZRO8KFX`W$@W[A#B#(CKYZ;7<3NE5X#8GQ]D
-M]"J1WB;$?/&@$C8/<?H)@'O?C8N\C><=[Z^VO;\::PY]_.-!-G;N1$PE8IZ@
-M8>JB(N';P;XWXO=Z-RTUTF]%W"HWKGT#CC43,?\*#F;MMC<6\<ZH;_O[(AQ5
-MT,<,\%&W#+\F>ONU>_Q6H]\Z]-&?YU.?C^,$8BX\0-L:&V^?_`+0NDF`_I*B
-M%?P&Q)<A_EV&QS:U\T-L4\V(?1VQ=1WX^;<'W&6$>3!/QOH''+GRN_*[\KOR
-MN_*[\KOR^U_^S3?YD64`Y0!WF_PH;A#!AU((N3'!CV0"+`<H`U@'<`_`PP#/
-M`KP.4`]P&.!+@`X`;:(?&0?F-6!.`T@&6`10#+`.8!/`DP!_!W@38#_`JW,`
-M!_`PP#J`<H#$!):6=;%^9"/`GP!>`G@+X`C`-P`=`($W^9'!`.$`,0#S`0X`
-M7CO=CVR#[WJ`PP`R^HN#=`%,!4@$L`#D`ZP&>!3@>8#7`30W`FT(_PW`,8`F
-M@+<`7@)X'.`>@$J`(H#;`%(`I@)<@_Z3_$@!Q)\)D`@0`Q`)<#6F%4".\2.?
-M`AP"V`7P3X#'`>X!*`'(`\@$F`D0!1`*$`AP?H8?.0-P$J`98#_`ZP`O`FP&
-MN!]@-4`>P'R`)("I`'J`8("?($^?`KP+L`O@)8`G`>X'J`0H!E@&D`)P(\`-
-M`*,`SD.YJ:%,BL'<`/#43:Q>4!U+,(`:0`L`V)I`@,<!@@">X6WH56A3S_)V
-M=23>CWP&L`_@)P`-U'&2$<H((!)`#Z`#Z#+XD7,`K0!'`/8!_!U@,\!&@-4`
-MF0#)`%,!Q@&$`@1BN-E^Y#3`88`7(8[7`>Z#[S*`Y0#S`6X"B``(!0@$^.YF
-M2!?`(8!Z@&<!'@80`/(!+`#)`%,!K@'0`:@!VF=!NP<X#/`6P%:`/P%L!*@$
-MR`>P`"0!3`48!Z`#Z)H)=0GP&<`1@'J`99#.3(!M\+T%X`&`.P$*`&X#N`7@
-M9H`;`*X&&`C0!?72#O`G"+<18!U`)$`)0!WD*P7,5G`_`G`3?(\"T`)T0!G+
-M`(<`3@(\#O`FP/,`RP'N`Q``+``O`9T_`>1A&4._7`(P'R`)8"K`-0"!`+]!
-MNY>36#V/@OJ>!C"0U_L9Z.,MB>Q[$_BY$^!Y@%L`I@+H`70`WX'_+AR/.!T-
-M;T/X<W_\'_X,/QI)^VDCP=,)_*&\+P*T73)@D['7<.\^:20UX0:R:92!Y,\V
-MDG<,1B("7`)PQC#X`WR;P8^?T4A>@^]?`?8`[`"X1F1^%6@'?]4W@O\X(_ET
-MEI&DS3"25;%&\BC$<QSPXDP("_A/@.XGD*X&@+LV&\DV,#<^9"3I8`X`<]M(
-M`TW?EI^,I.EK3[Z^]V>`^2*C#;WDBH4CWQC)8%5W/-Y/UH\UD!`?_TAO"^!G
-M^."O!5@VSD#\>O!?!G@E7=_Y,T#\)@4/]C8.B->-]_B7_1D@OC[2X_\'#HC7
-M3S&0WGY1D+]6R%^[+IZ\SG&P8'5-?-I(ZD>Q^CR78"1'%O=<G^VC?E]]+ID+
-M];C02+X".F^!N;[82,XN86X/+(<Z76,DGP$\46@D8XN,9`VXM0+M*$B[`6`A
-MI.'+/QC)FRN,Y#>`J"6,YIY54/>WL/3\DF0DV^<8R2RP/PYTG@5SYRW,'^:G
-M3/_O\V,8TST_9K#_3^5'-^;_+#_+KC5<EI\M0&L90`U`/7Y?8R!E`#77&&@-
-M8CT^'A6T)C)WX`]OI?=[8OC^54$/GBLJF_["BK;G'LM[:NK&$P.?KSNY=E3;
-M1ZT;/SGRQPDI;_9[>]TKU4$3Z[Y]:.2>37FZ[2-_TF\K2KYCQ\^?&7=OJ#KV
-MZ=7.TZ=6I;]Q[%QC[5&;97/QD/JMM^?=>6'YI3,'K??-6Z0*_:0X<,6*62&_
-M_3)`XVC2E\0MT16FG#8N^ZC\CI7/?GC:?^:<8^I;+]4..'+[&\$O_+;UC>G%
-MFU^-__C@SA.&"[M>^JJX9:JXZ'/3!P,^/KE@UH?_>"GJDW$WD<_2:]*/-PW+
-M;=[SQKG7QUR[_S7+$X^]]4'("V_7/57G-UZS,6#IJY]H#T2T]7_EWG6EDP>E
-M%.3\8V3NWED3\]_<9#RY.O".$ZI=^B.;;]!]]*.]]I4[1K_Q9N`+I_<\'7VL
-M3G[V8%#EM`LDY(&M_1X/VSSPBYT#BNZ:.&N5YH_%>0^I%JWXYESZ[;<OSRT.
-M;XFRUJ:1Y3]]_UA@\1]>4(W8>TYS=_;^D%\.?++-:F[;/OB[NMW2NHT[.C\?
-M>6KYW(F?#OUYW='[K2G'+N;DOIIZ./V-FP2RZ[DOHW8>,[[P^2W''VN9M6K_
-MA\]?//?QT:*VPH3.3TJF)6U<^7)SW;)/*R:J$[\>Z1^]-"7X[P?7#3@U\XX`
-M\]^-?M?I=/UWWZ/7'AS[1D'V:[6E^G['\G<\?3KW\,`+GRW9?/"3ZZ_9W+SM
-M]:W'&Z^:]=J"]0->GQ2WZ.WM+Q>_5:^WU7W_YFM[_J3]\DW_/QUY18B=\]%W
-M_UISY"]#QYU0VX:=K!C<?\57&^+R'KVY:-6`K;<5W=G_@X&G_^+J]\AU_R3!
-MKSP55)7X2$C[D><T]Q;\I!K5M2^P<''V\E_?6VFMN>/&XN'?!MY>LGK$L:[6
-M"4?MM]WYJ>[0+:=6EGZ^X\*%'W<_D+![^U4?/;!MF?S<QQ]7/_+A,_OWM<3,
-M_^GS>6=7[OQP9?:N%T\%OC'[UAM?3?YTPH"6E!'!_SI_B_^-R^Y4&QM^7/9Y
-MUN<KM_[X0,F4M;L+D^Y_+?>]JVWYN[8<*1U[XY<%\Q];HSWD/Z?_SAW#_*Z9
-M/"X@:W?<6^^,[__VJP_?]OH$==%KB_[J.KYOR@?-;TA/?1(Y\I^?+=RV+^_/
-MXWY:<>;)YXK$X$=6^?TML-^3LV\<Z*Q=&50^))L$W'W+GL="[ZS[\I\37OE#
-MS(@WM7]^X,C#`W9_]/7V'T^N&_/YB?['CAR])_[+8V<[7CM54&+[=/3[PW:O
-M7SANQ_DOUFPK73-G>]@WMVDVEA6%N-Z-"\Q?U%\UR/64]<'"?R[O..JZ/=?T
-M0?&PRB^#M_QP9,#Q3)LZ;=]K_K&YXU;^]==ARYI3YQ3./;&FY.9;BC[\Y\G;
-M/OXDO__GAO:XEAD9_]SUMW>>VOG971^\.J?-]494^$]OOWW?OK?>C7KDM8P7
-MGWL](N#&YK<>"3S^_O79GV7N6?G)M9/NS'^M[I;<_7XC"A8_.J'TAAF[^[_^
-MS`/:AA&?!]SF^-%OHH[0]0F=I_"'$BSXA!+PHP3?PL3;M'AO#"^=H)H*G"?P
-M<@H>#.(<-9"P*RPXO^D+2_*+<P6K?LJD*9.B]0FE96O+"U<6"/HIL;'3)\*?
-M&'UJ;OGM>F->L;5<S^BH.?U`'J^&QQW,XQS`:6,:\7H;WD$<`3":L+ER`D`T
-M0!Q``D`&P`J`"@`;P',`#0!?`?CYS,U]_50^X.<#_CZ@]H$`'\!?&0>%GG?^
-ME3+'_&)>AP.,`9@"@-Q4+L!Z`!2^4`&!]0`J(*("(O@,L0H*4`6%IX(*4D&E
-MJL(`]`!1``:`9>2RGV_>?/.BI#V0>.I'J2.EGI2Z4NH+0<MA`(>Q-TRZ(1_,
-MN3=.(S'`-]839>8!7J2=\8H)V84EQK(RLO6LD23_Z.&_C%\P0'I/W<OPR'?H
-M`(>`5[V<FSS^$3?Z"Y:?ZQYBM'OZF<NMJPNM:\RY*ZW85$B&51`*2U;2;S(D
-MGBSY(\R=8"*_N@+XQ7_'KU8"K_E[^)L]0.M_@E_=`G[;(7U/W64D64^P]#6!
-M:12%TE6Y0F%I"2&F5<NM>7F0*\A27IZ59)646U=66,M76\O9=V&%`)^L70JL
-M7%J@/O#>O%(_J*<1?U@_F07EUMP\0L:'QI.7_P)Y^\N_+Y>7#;^O7-#_#S&>
-M<GDWEI7+`8"7X[J72R7$/^@IX-/!C'R*I6\3I#/<*]WXT"--=\*JO,S<\I56
-MR%]@2$A((/'\MIWMO7W@KP7;8GX\2<EGM+#=^?KQQFF`1S9SO__.OXO_\#L&
-MUPZ#XO&!WFY^S#\9N]F7_=0]O;JA\602E.UN`'V\D:P&V`Q^%A%/.:!R0OPE
-M)!;F%I>N))O`OA7\#"?=?]C?9]_JZ4?*V(#][M5%GG6$,E8@_BW`HR9Y[Q^.
-M`QE`)[\'_$.`UZDNQR\%/C6J.YKB;P)\:0]T7B[OO=Y,>86T)==`V2`OOS;1
-M^&]Y^:R$W]=&_T]X^4W_@VN39&OQ:LQ;:H8^([>D0I]A+2_,Y_8":W&Q/K$8
-MNSJ97[BB`,M!GVFM%/2Y)7GZ><N+K"N$"N[&\$FEY3!0H/^DPF)K6NXJ:[;7
-M-^)3"DMNUV>4BN4KK/I$:\6*\L(RH13&"T:M&\K;+QMW%`M1QB&KD@P>'D,`
-MK34EUG+V2=)@W%IM9?6X#-KI3,+:<<<S1D\[SK2N*LLNR5/J>Z.7OWKPYQFO
-MF!^<3S:#GY@>VETRU%ET+_CIO>"G]8*_L1?\U%[P,WK!3^B.)GJ`JY<9Z3SG
-MBY^<VW,__N<=1A+K@Q\#D`UTQOC$B[Q4'O@/]<&/!$@`_-!>\!.[HVEZU@/]
-MR3YX'&^?`?RD7O!W^^#I_L0B&"=\-D"0/_4KA?3TX#\=\"-\\,@?CBDS4G[0
-M^W<#0#'@K_;!8[H/`YV>]EV>A?24]#`.30;_U3[^$=\,]"F3X_6[ORZ>#+^C
-M]W'+F%\YKS@/&JVYO'3%M*G1'`>(:5,KV'=":8E07EH<GUO.4(A+39R;5`[=
-ME6+`3BWSRBW`VKC#S2NV\J`\W!RKD%I:4@@==VY)/N3!5"*N2BRL*"O.7<OQ
-M%81_))67KC*7%I;0<<(+-Q_[L9<=N(.\TC6,=L9:8"M6I5J%\L(5-+ZL#-/\
-MZ*F$),[-,*<8%Y`5I:M6K1#*BY<FEN>N3`$F)+6"CEMU,&;_!'TX9KZ'K^AM
-MS"Y;\;\S9O]A2>]C-L:%Z4%:A3!D:H;%D]I"-FXK,!>**`'R6UK"ZZ#"5(EY
-M39B7FI"9$CUU4F)*"MJ70=C%ST+>G_W_OKSC3W?1,P[CSSU>0^:7E\:78J;K
-M((_'('_F*8;_Z_,X[/'N>1SR.(.!W"2=1CKF*?EM5G%^$WH;]J5<`>;@RA76
-M,L:*]_I3_P=XWS7F[X&>PFJ\H*^P,5?%DQ<:C>1>@,<!=@$<`[BZ"=8@!XWD
-MT%Y8AX"?LU"G[6"&/F\DAK!XT@3F)C!37H0RYS-UU"4CC0_+ZW[`HX):_-'Y
-M/-5:(O)TYGCY*P9_;CZ>^VD%NO<`/F`I:T-*/XL:#ND`_-87C=WP6[WHQ6TU
-MDA;O>.?D%7*6A#0#7L?]??=7(T%%L&Y_B0FDW8O.NW_U2I<7#?R%0;A,XFD7
-M;CKF7!A%$Q,(_QFZ//']U9L>][(,W#=[T7&WKRQ8P'DUK(V]^9MOK:`,F)??
-M&BBCW1#7._>R,@JT0QH`K@88#1`!D`7P",`'`$/O,Y)$@`J`9P"^!XB5C*06
-MX!3`]?=#?P.X?IF!S`)(!2@$>`#@`,"7`(-S#:09XMT/\7Y[__]NO/JKX\EI
-MB/<T;RME8)\.;4"W]7\W'?40[Q:(,YO'&S4BGLR`=`D\7>HI,$_`.GXCX$L!
-MO]<'C[\R$D_PAK)2SS5\+9B`##M?VY'P>#+N;T;RX<1_O^99.^5_?GR]-/G_
-M?,WS_43/FF=8-/"7T<Q?"]`\!=`*\!5`IQ?@;R.T]Q[;?UJID"&6E966"]8\
-MKSY0UYO_5.NJTO*UEPW9,K@K_1Y_[G[JY3,'RCT2RCTGMWN];0-\'N!?\,&3
-MD<`+OFQ$/FAYZ7(Z-9**TGQA36ZY58EWF5\\'8-]=Q`2^&"3##2:@"YCMMCY
-M7`V$B1H43^=A0OB^`;09U)<S1,7V"]4`00#/@/OS`'AKSQ_L@0"H]@3W2_$"
-M,:J4W`QQ7`=KZ`=>^\_W>6R[>FY/G[T%[0'@!X`;=QK)_0!!X)>,BB=_!=,.
-ML!E@-X#^;2BCMWG[]X_O>7\G-;?,+)1GEL(?M)N!SD%([[EHEF;EA^>S6X!&
-M3^N!J=&]\^7(J^85KUR:817FSXE/*"V&U:Z"@S5WF;<?ZCKO5K==64L#RD.G
-M`"K94EA:S/?H%'Q*?(:U.*$@MV2E-0^:;F'^6ES79R>;3"E+Y\]+24G-F$,F
-MS4V;B_%-2DXQ*^G;J(XG5!DI+Y?-:EXNP(?$BQ5KE:%A&^"7D1[&CWF>X:,)
-MRJ[H32/YQX[_=\:/_V;/Y,B.GL>/L5/)V.F0S[%3%R6D9,Q-)&.GX/?<$IA&
-MA=SEQ5;F5E9>*I2N*"U>E"'D8;7A]DEAR<I%JZWERQ=%D7%T6ZD/?WQ7=2Q=
-MM]&(%F%$T]W?BV!=MQ*CG^IQAU0`O17)N25X(`(KI-)B*ZP(\HJ+O?RDE*[(
-M+<Z@Y,$'C<#M9O%*7614Y-3+W*:0<?/*K"6^;MUR[X4WBI7(7F2N+;,N@KBF
-M]>863<;>Z.V6:,W/%8N%N2N@18^-CAP[P\LMM;!B18:0*X@5)+I[WG&EVRUC
-M'GJE*_@P1[<%H=R[8;S*%'@JE@W?M)@J!6M)!7:QL;&1^K$Q2&=30#QY'N!U
-M`'4@C,T`-0!/`KP.T`R@"6+]IR>_O]=?3S1G`F0"Y/%PF\'_20`=N$<`)`.<
-M";S<31_DP6_B<2A^>@K;EQ]OG/[?I*.2NS\)YG@-S#7<7`10`%`#<#]`.^"W
-M@8G^$KF_1!]_6[S\A8V.)VMAC,&Y:5ZQ@:P`P)^RQWWK*H/[^YC7]Y(2S_>;
-M\+T,Z#QXIP>77N7Y?AF^5U2L:O7>NL+M&WW`(^[M,L6O^FY/N">\O@TVS_=.
-M^&:_]MG)-ZU:=5-%!<F#7Z0^%7YZ_%@+/Y(Z.6\R&,2<2H@1(-&ZPKIJN97.
-M2VFEJ]W?\U8(I?B9`0R$@C2**\4*6$/<(A:O13^WB"6T<QK+R@MA.""IN>4K
-M\%PFR;J\7,PM9WYR2^@GQ(/TD2[21%I(!VE`N+5(`\-C6`Q#,J`WEN?E4AI)
-MY87T*[-`+*_@N&QK7HF56S)%]I5:6D(1&2(W<P4,B^'0/_I#/^A.2THI.Z?=
-M4XYQ$OO.>-!`%C]HZ.;ORTW,7@_FNYN8O[!'#"3\$8^_.^';YF5'<]QCS#X8
-MS&&/>>):Q_$%8!8#+%TZ)V5>O#%E:;+):%Z:84HQ)62:$@G@4S,L"?,SO?$8
-MKEPL$0I76?76\O+2<CTA`X*A+%+F960PS`!ZSC$W;8Z7E23.2S7.3?-@YM\8
-M-35F0/!$O5B"@Y1>*-47EL!\D5M<>*=57V#-+6/AT-\,]%=2*NBM):7BR@)]
-M15GN"JL^'^(N+EU3Z!60\@V><#?V&JY"R.LCW'0,5R:66_6K"\L%,;=8GR^6
-MK$`_>IAOBJE']#>M5_I+2TNLE87"Y%P!#3T=A]WTI\1VSW<IS$)ZF!XJ8(K3
-MYUE7%Z[P\LO+R%I9!@.\-8^6C'>YHI\9/GY6P1A?*-`#22BA%;?[^N^]7'B@
-MO%PA%[P/",Y=7H(G(<5ZF(M7EN>NT@O6\E6%)=W+*RJV5WK6$BC!TI)5UA(!
-MO*/?F%[]YI:O%-%CA5*^45/1;WYQ:2ZR$?HRW&JE00&39\UC\:<6KB@OQ06"
-MWE)8@565,&&"?CYOH"F%R\OY>!",;8ZC35@<8X*#S2Q3-T$3)I,F32(SE5R6
-M`&,*!7I[2>F:DIOI?GP@KA5TQ#\0%@,ZM<ED"L#?]"A"F4W]^!AS3I"&S(B*
-MRC8'@5V/RR*B65:P#'[`H)=5PD\#/D@0T:!2+@W\0RL93TJ(2(KAW_48A(PO
-M$8N+V:?[A_TV::^!W`+`?_75*C,RJ34NUQSCW`ID%ZP5%:7E258<OZSF<FN%
-ME6Y,WVJ:GV9*0>Z"$.N$J*@H3N_J=PUDU+ML3#@,YA&`I6M+`*8`1)'\<FA.
-MX#=_52G=I5I:L+:L%`@N79&['#>NB_.8.SCC,1O)9V@"U47/O%98Z=!,!!A3
-M5Y16D(K"$E)Q1SG="8+653*5F]2.'M!$3RP,#N<8CIJ`IB8PXE.BF$G*2M<0
-M3`&,J3"TP@@+`RV,MS#L9M"#.QC+84B'D1T&>!CG8;B'41\&?Y@#8"J`&0$G
-M!D+WY%-R*P3C"CQ>,Y>6B644Q^Q\YSX5BC9WI36^M!+X_0IDR1@?.N7:]#1C
-M&IISTY((,Q.IF4'QU_!)MIX9272!Z6WOY:>X#_.Q*W.V8G_PU<=?>?VMJW5O
-M/DG^3J:-#!KH$Y^_C[WFVH_N"DH;H?OG1`V9,*EQ2#\?]_X^]NM\["-][%K2
-MW1XO"H+OAF[[54:RK+^1GI?C<0;;[?;\ZL?`FJ8_.UM2SJ>]?\M&,W=<[WMM
-ME[M_[1!>KV7[C\A*%Z[H'KX^PDC:M>P,G89/Z4X`XV_E\8>2$.CC@TD`4!L$
-M73[,&N_VI\R=^(NQL@<0?/%-@X&/&^P)H_R0=JL/'FFT<UQ.+_&4]1+/)L#[
-M]8#?!GCE*,X;OVP(\*X`40!A0RY/'Y9MI0\>:6WBN*9>TE'7"SU,6[,/'FFT
-M<EQO:<&T:T*[XS"O81RGR>\Y'8;0WLL]QX<>TBC@N/&]T-O4![VM/O201AW'
-MY>3W7(^M/F$PS@X?'`T[E.$J\WNNWTWY/=>O`<*-']IW_>8,]2E7H%7&<;V%
-MQ;@V^X3#M&WEN*9>RJ\9W'WSC#_,D^Q##VET<)QF9<_YTP_[]_F+&>93ST#+
-MS''Z7NA6_@ZZFWSH(JVM'!>SLN?Z-J_LN5P*5O9<K^2J>"(#S6:?N##-85=U
-MQR&-\1RWM9=XVGN+_ZK>VW6-3SQ(8Q/'Z0IZZ?]]T&OVH8<T6CDNJA=ZFK#>
-MZ>G#NN.11A3'Y13T7*XYX-Y3&K%<RWSH(8T:CJOI)7U;PWH?[^I]Z"&-9H[;
-MW$OZ.L"])YJ8/MWP[CBDH>>X;;VD+WEX[^E;YD,/:91Q7%,OZ=L,[CW1Q/1M
-M\Z&'-.HYKK67],E]I(]<W1V/-'0*KK#G],5<W7OZS#[TD,8RC@OKA=Y&<.\I
-MC4AOBP\]I+&-XVIZH;>EL.=QIQW"M0"8K^I]W-&,Z(Y'6GJ.:^J%;O*(?T]W
-MF0]=I%7)<7(A.U?!7[=^613OEM/NUO\AW!:`?S?_H#Q3LT^\2+.=X\J*>LY/
-M6/B_ST]4>'<\TDKFN$V]T"W['70W^M!%6ELXKJZH%_XOO`_^SX<>TFCGN)8B
-MCUNW_(_L'@;CC/+!8=@8CNLHZKD=+AO9^_Q>Z4,/:6SDN+#;>\YGS.T]Q],$
-MX;:-['D>:_6)!VFT<UQ!+_&$C>I]O(@:U1V/-`P<M_'VGMOK5L`K,L[>^!H(
-M5S#JW[=EE._?[!,OTJSCN*9>\M$ZJO=VT>%##VEH1C.<OKCG=A$U^O)VD>R#
-MP[!FA4[`(\,QKLT^?I0?TF[_T$B_+X*I^&_JP[_N"/,_X@CS3WG:/OQ'<7]T
-MKUG?NS\SIYMSA*T95WB%R^DC7`T/MY&'>\0K79OZ"+?-RU]='_Z:N3]L5ZU]
-M^&OGZ;C(TQ%XE*TM!QUE]O"CGOC&C^F=CH'[P['(W(>_94=9?`6<?AF/KY*'
-MQ_:^J8_PFWCXS3S\%FYN!9/.\T?9VKO.*]VM?=!K]O*GN:9W?Z>]_$7UX:_#
-MRU].'_ZTQSSE5=.'/_TQEM_QQU@^HX^Q\KKYF">>^C["9WKYD_OP5^#E3W=M
-M[_[6>?F+Z</?)B]_R_KP][R7OXU]^*OS\K>M#W^'O/RU].&OU:O\200;!_41
-MW?VC/^7['"__SF/&;GBL"VQWM#R\PLO6>()Z+1<F><:G`AY/92_Q>-/%GXK#
-M)A^Z)\'?MF2O^H_H/9_A'WGBEWG\'?]A_+JQW>/'?;2_9'KB-XSM/?Z97O$7
-MC.7Y'_L?YM\G_E9L#]E>^>\C_D7>^>?Q=_R'\>O&=8]_/_B+6>Z5_W&]Q[_N
-M(\]\4-"'OTT?L7Z^^2/6OK9\Y*&_I8]PKWOEKVD<RU_+N-^?/PS7[IV_?."'
-MP-^0"I8>S.]IL`^O\!K_KNL]/<>\TIW3AS_9RU]-'_XZO?QM[<.?[F-/.31?
-MQ\JA];K?7PZT77CYQWPW@;_'#WCHCA_/Z,:,_\_*U^SE?^-*UG[W'?*4+_:G
-MCP^Q\:6)[]$HM+SE?FG=_AMWV=J[NU*.[3[I5WX89J97.89=W[L_\\<L_3D?
-M>^HGN0__95[^ROKPM\'+W^8^_&WV\E??A[^7O/S)??BK]_*GNZ&/]NWE+Z8/
-M?[*7OV5]^.OT\K>Q#W^ZXU[S7Q_^(HZS=A13V'<[R>G#'7G&%HBC#F`;M)5-
-M`&4^;:8#W-SCWX3>TQ-SW&O\[\-?RG'6GC*]\KFY#__%/)_CB_K.QY8)?>>C
-M?@+KT\G_AH[\;^AH(N/=^31',IK+(G__.(%0Z>4?^_$9\!?T+T_Y;>5TZ_Y#
-MNLT^=&7P-[#&4\YD8A_]S*L^QO?A[R6O>C;WX:^>U_-[7OYK)K)\;9KXG^5K
-MZ\3N^<+R^O9N#]V6/M)QAJ?C5Z_\:2;U[E_;XIG'HR;Q-C/I\O3J6XR7A5?2
-MZ\?-99,N3_>%G1[ZFSC]K3W0C_D=].M[H"_N\N2SO8]\FEN\QO_)+!WC)_]G
-M]6*8W#U^;&^F%0;/^#^Y]_C+('[-%#\W;G^<']G2JB+'IGIP5R?XD>(O561#
-ME`=W.-&/A(._0],\.&+R(WFG5627%RX1<)F`*_`*^RC@"(1M\HIC/^"601SK
-MO/PU`RX4_*FG>W"?`>Y)H-?B%<>N)#]2!K@M7O0.`"[F2Q7IZ7=%S^`5/8-7
-M]`Q>T3/X?[.>P0@5O6F<)Q9;E:L01KR-`MC$\L+55I0E-Y)1:$\I75FX(K>8
-MHC.$<M3$@G>Z$XI+*ZQ,/IX\HII37+H\MSBK!.7]"+F?VU.H;3VW&8O!E7RL
-M2LTMPTO0\_(Q9C*=))1;<P6:#'`I`_J0DL$8,Z(R"N^TDFE>?HSD<[_L\D)F
-M(45^&<P?O0F-XKJ+2"*589Q;RF_U$A%I6:SE*')NJC22(W[9A7G6A(+<\LS2
-M5)15C%\K6(G&O[A"*"^VED#LAU14M#^IW&HEOZ$\5H)87FXM$9B6E;EYA%RX
-M#`OSG1]26+&JK-!(.I5OH&;C^4^T%EL%JU$H745((\20FZ=<!,2[/4F%)6Z[
-MD7R$*;C=X[Z1TZ!)(JLP1YF%*VY/*!51S&Z;:BYF'@O?FC>W9$6Y=145OWO9
-M&Y]H=>-/J]SYSBQ5"H/<C%11E,^8EU=NK:@@9)RGE;":AMSXT7):4;86OC<H
-MJ8*T8[Z,Y"ZEKO,X@M@Y!J7:`,-;V@56/KD"?`M>]4/(ZP3SJ(A.[J/EQ&W@
-MMY]22]G`QRLI@2J[`]L!2M)1X4I"OL(<)A:N!NY"-:>;2Q.K6]88R=]5<]UB
-MOPG0J@KIC0XJ;$N>]<LLKN#^L@BK/5\_$L\=[PCD.0Q#*VFO*L6:N_JR`.1!
-M'F*^E9'.)R:LH\O\O8"4(%.6W&+12CY@J58"D>?1=8[B>J]2#\6Y*RO(UZQ_
-MF*'#YJ)1FH_]B/9<*$&34LM0PTJA/^:'W:PTW]/>]M#V;48E!&0*AIAG2DTP
-M$Y*'Y4Q+$IH%^/O5JQ]PHN3O)*E8K"C`7ADOYN=#'(1,]ILOP/"P!AH*,2.]
-M#"&W7!#+F):#=RF5TE6KH!13"DN@@5014V6AF^(3JF1K;AG+^M/TF_6#I_PR
-MN4"P5?%*^OO-SRVL\+Y;^RP-H13=<]1&AQ6R@\I:8KY>]LLJ*:!UZ+F1"!F@
-M(\JKM$6:/++$[E'PM5Y<LDD@YO%R!Z+I&0^M>166+&M&O%?/9^64I[2MH<J8
-MB(,SZ>=#R9);7H@BW4;R%YK#1"MTCM*UY,_4QL9/J%<_"Y,IIP6X4['Q5E6G
-MFEL1GYO'FH]03C)8"C");$(@ENX82/<>50I>]'.WKWIO.[A+F*]>"_<-%N-\
-M&$#I+<%7F3T!&A>UK\/07F6@R!,S"=@M='28NRIW):8M%/R6Y'%I62.>EQK+
-MRBBF1#2R=J_HOR@1R=](8GGN&GHOBK33]E=<",5(M6<D>?OENC+NAY2A;Y3P
-M_$QE+JT0/#'YT7FS>.5<>M]S)IL;@5[9\M+<<I@9KL5<N.V)N4(NCG.F567"
-M6B]?1U5X(<R#V`XC`]:HHL"CE<::+A8J,9-QE*Y87@$#VVZ5MYPPK2<6,*64
-MULLF2#]#,*IY9+@R,G:3/IY.QX=<[-!D.=)G@2J22TMOQ]FSD_=XB-.,<M,G
-M56:K]79/63SLCL=26%&(%\#^Y`>C5&$>M#]:N&0H2<@M+DZS5@J,)I_M;[6N
-M10E:*SEUF03T8T31V^")YVZ_S/+<D@I4:J@4![F!SE>*EVBT8310,YFYRVGE
-M!-$^5+I"A)2_P<L7FP.K.>`S"JPK;G<C8C'_BBV^4%B56P;A]JM@["O,7\O:
-MU74LSA*1)9YLIFV2>>8<%+HRPKGEMR<6KF*WWX#2`X3W4I[/%,[GL%N?<TOR
-M"LNAQ*`R<G$F?=!=LH2$8\JZE=$.R$T>ORYZ7C6?:Y!SMR:F4@JH_(.F3^FN
-MBSSMA%;.0H_=7)R[@O,+,+O2SD!3`K-@>04;M]<R_J("0M+01U3S\O,KK,P"
-MW4))!2/HJ;N%GG9%VU".Q\Y;ZWQ/.D@4Y?%*RZTKRV%@S.-8#:M)'VRD5PM`
-MTA.][)FH"(8$0*I6E:[&"0/J9QAMBSPIR/J0F_C\B)S;/3@K0!OMU@5(/*:'
-M^W"RD2.WHH(E?`&O0=[3H+]L@#K.]XZ`J/AHD0",S-Q$0I9X\HK:O\#'TNZ8
-M%&O)2J$`\-<JK0G;(P2-I^.4N)PIX+C&VY7/(>$*COSDU28@N4#M6W?:66V^
-MY+>FH@RO;>8;R8O`(Y<D6U$=$SE-_>66X<T.0E*08F9IF=(2$PDJ$V4U'NR7
-M`3RFM22SE`VFN(=ES"L2*[R:&/;WR:Q&:2],X&,MN[^]`U<'2LN`I%20$#JJ
-M\\'5W80>\LLJRW.7,W`";":`\=E(_+U&8VB?P#O/K6`=P],"EWA:'"]S6$D4
-ME*Y1Z#F4GDG+[B;"\I-9RO)'R"4LD\0$X@^MJ=B:6V&%[TQ/K8%-2^*AO$NH
-M;A%"=F+OY-\5?C`:+;?F8<3S1(S[7W0N8@G)4\TISUVK],\_T7RQX=9(OG?7
-M&&.COU.9A;DEK.P3O<LQOES$NRM?T!F#K4\\>;\3>NWJ;B,RTP+%YM0(WH+9
-M",;Y9QQ&Z,6%GU50;IA05EWD?;3'W\YM\]`ONPP,\9@YSXQJ4^I5&<`,X]<.
-M:(<5`O1;L#1"Z&+PK&AIH>T^0X#EBH(YS.A39O-+_(;FP3C/\VC#=23JD9A7
-MOA+;U?U\_.F._L7;IZF2ML"]J@Q@IZT^V`LJ=ZO@F'W,7S=<C6?4PW*A19C!
-M\ZJD>RQM@W0AFH"31BHOU8Q2*'=>.W^'VE/FR'^JD(QB"_#SM(VG@!,6W-;'
-MB*EB12ZP?V1.XEQ>9?VQ56#Q>JWD^R$.V0DOW(I25&>@U',XXU+H/6WD<N>0
-M1.B0JQ@?7V8M%PJM,$BL(TB$>P(:V7/3,LSSYJ5,2IQO@7$<QQ1*!B9OJ#VT
-MT6R"%<>^<L0@`6Z_!^W*F@81Q)AH,9J5C!#@.%%9HJG2ND*$E3()Q7ZQ,EVT
-MEJ]E2W^2D6Q*4=@_MYXN&K846)KBE>S[1Z*,=1@^$?)#R%G`K2Z]W>K!'"3S
-MBJV>Y1]I17M6B><>*,X.I<@H9Y6(%5:^"H5B(2&`!XX$1IL2K]9K`*P2+^]M
-MG,N=0UTP=MIY>8#]&!]=*GEXOO=HFBKXBLJ#]Z@?F)=B,F9E*KF^E<]6WDN\
-MA]Q\`F1F!7:6L007^&ET?+D#6B]5!4W;;37.3C!6LJGI13H.T8&9S>?0]E84
-MBWE6-MC.7PDCGY6.DPG`(`HD7Y6,FP?T6_+SZ*U59IA'5>9<(;X8RJ:,SAK6
-M2G;Y7Z!CNY$,(C#*4/<;>/^`12#P>=@)<*R(4OBAN<IH=.5WY7?E=^5WY7?E
-M=^5WY?>?_H[?:B2!*482`U`$L.)9(]GT'/!,+QC)KR\"![352+X!:'[22()?
-M,Y()`']^TTCJQZ/..`,Y_;21:-*-9!3`(H`_`;0`S/JKD8@`4_\&=`'6O6(D
-M/T%8^7$CZ?]'HSO^['P#>?I>`TDY:B`?OV=PX\\=]7Q_R_%CHZ96_C>`-%"Y
-M!YK(']XT>?+DL17P'^ST&1`P%RV:M`@1:*Y>4UB"FAI*K-8\?5XA/8?`,YC"
-MDA6EY;@1115SZ%?@3A;2].`+8'UI+5=<"MGJ4K^&\J#Z"N2DN38+/:Q!RO!L
-M"969K+(*!:C=0?&_O%#0%].M#GVYM<Q*]2@(I:7Z5;DE:Q6'TG)(68606[+"
-MJJ]8NVIY:7&%.SQ=50(9JG.$^:]@Z>3TJ8.`F^=D?'H\V3P_GI0]%4_N!W,=
-M?@,L`D@!F,;=,(\*1ZI?K9Q1$;*<'FPPS28LC@K`%*[`70+(&.HK)+2TN(\*
-M`1C951[_6!^^;B5>9>'.).7?/?CB0F"O<XLG\^*@KOC.!\JT+<,+0BI"#WFI
-M7A`-H7I,,S7LS97Y04SW-N++N$F5>/5C.A10=4@PQR_CIIZ[;^%VPLT:;AJX
-M>RL/'\CQ.=P,X^ZH!R\CB+T%@_A*;L9P]V8PTH/8^RJ(+^#F>.Z^C=LUW-S(
-MS63NWL[C5W-\)C=#P<C2L#=F,/X)'"]P<QH/W\3C'\#Q>=R,X.Y;N5VAOX&;
-MB=Q=YO$KZ5O$S7#NCGHM,X/8&SB(7\?-F=R]A;#ZN8KCB[D9R=WKN%W+S?NY
-MF<+=.WC\_AP_GYNHFQWS_QQA^;^6X\NY.96'WT]8_OMS_')N7L/=G^=V/V[>
-MS<UX[GZ:QQ_$\;=Q\VKN_BAA^4_@^#NY>1-W/T98_H=P?!$W;^#NKW.[TC[O
-MX^8MW/T<CS^`XRW<1!TF];126/ZC.7XU-V_DX0\1EO\0CL_GYCCN_A*W*^W[
-M'FXF<?<S//Y^'+^$FZ.X^Y.$Y7\%QU=S\V;N?I*P_(_@^!)N3N+NN[A](#<?
-MX&8:=^\DW?M_.G?'_H3U;R/=^_\=W)S"P^\CW?M_+C?'</=GN5W%S?7<-'+W
-M+TGW_K^`F\.Y^\.D>_]?R\U8[GZ$=.__A=R\GKN_RNU*^=JY.9>[_T2Z]_\L
-M;N*;!&8-H>]+>?=_D9O3>?AW2??^;^7F6.[^=VY7VE<M-TW<_3O2O?\OYN9(
-M[OXGTKW_5W%S%G?_E'3O_ZNX.9&[O\7M2OH<W$SE[K^1[OU?B0?[$]9_`^G>
-M_RNX&<W#'R#=^[_23J_E[B]RNT+?QLT$[OX-Z=[_%W)S!'=_G'3O_W_@9AQW
-M_YAT[_^W<W,"=W^3VY7T2=R\E;N?)]W[?S8WL3SK::5T[_]KN#F#AS],NO?_
-ME=R\CKO_D]N5_-W+S3G<_0?2O?\OY>9H[OX4Z=[_[^+F;.[^&>G>_TNY.9F[
-M[^9V)7T/<G,>=^\B_]W\OY?T/?\_P^V$FS7<-'#W+TC?\_]#I._Y_T/2]_S_
-M"K=KN+F1F\G<_2SY[^;_@Z3O^?]OW-[;_-]&^I[_GR!]S_^?D+[G_QW<WMO\
-M?X'\=_/_.Z3O^?\%;N]M_O^:]#W_/T;ZGO\_(GW/_V]P>V_S_R_DOYO_WR=]
-MS_\O<WMO\__WI._Y_R^D[_G_%.E[_G^;VWN;_R^1_V[^Q_FAK_G_.6[O;?[_
-MBO0]_S]"^I[_CY*^Y__7N%TI7SLWYW+WG\E_-_^_1_J>___![;W-_T[2]_S_
-M9]+W_'^"]#W_[^3VWN;_B^2_F_\;2=_S_U^YO;?Y_UO2]_S_1]+W_'^<]#W_
-M;^?VWN;_7\E_-_]_0/J>___%[4K^[N7F'.[^(^E[_G^:]#W_?T[ZGO_W<'MO
-M\S]>W#$'L/Z9C2:V]P#6GQ:B'1B!]`!6/@O0#ATE*X#UW\5H-[#P6+\Y:(>!
-M/C.`]?]%:-=#^@)8_FY#.\1M"6#C0#W:E['P?CS^]3S^X4K\82S^("7^0!9_
-MKA(_#Z]6XO=G\4]1XH]B\0]0XM>R^/=ZQ<_V:O`47I^WMB1W5>$*KRVE"KV`
-M$H^EN(<C+L?7\?`AO%[]>='RV7*ASKYT>O1C1?D^STX.(O5K"L&YV]Z4)\W>
-M'M'--ZV^[OC#^L8ZPW+%MH'M#=L4MB]L$R[PX`(/+O#@`@\N\.`"#ZZ[\'X6
-M"U_<C\[B9-)LHR4AK32S/%>1OS`8B(_[4F-2SM+LN6E+,S*-F:;+W1.\`G;#
-MN]_Z9&$N"Y>MO&':N[NQK*P'NAZI891B0@]N=S.XNP5.>Z9+\X-2!(F>'/7B
-MGID\WV1,!`\NK]]EZ81\9LUE<;T?;[PL/GS[4$E)-SP34*).2+<^/YZ\#N![
-M)^^R<)G6"L$KSF[NF/]N;Q+U4%_\S4;??+O?!@,'+WS6W"RVD>OC/VNN(J#9
-MW;_%^\VMN=#0+ZL?</>MHF[A^ZH_LS''Q]YK^Z/UR&K07='>[NB<.B\Q*\74
-M<SOP<O>ATD,\\<8,TV74?/*%<F4]Y5=Y<\NW'!,3W`70#<_?KKJL_MQO7_50
-M;DH\G.9E>)^PW<HWHQ"'JVZUTLW]LK>M>HF_+SJS_P,Z_ZY]LP?^O'J7C[OG
-MC:;+R]=,ZZG;VT.7Y;?'MXQZK._>Z<S^W72R$M@@B2+D/;<')BB?FEO62WG-
-M*[9VDTTR^/1O7T>?\#G=W7LBYY-OSQM`2HI\T^-3_)>Y>][*N3P]M+_-Z][/
-M\%XR\?J%_L%`^1)Q,_"]`&EK#<3*P?OG31=/B986\@F%_S:]Q[Y5?FK*43X/
-M\^JRN]?>/8:[O_@Y,Y]Y@9GKGV[%;5EBJ*ZAYE;PO_>Y3Y_3DYY_Z[N8:>#F
-M&[_3OY&;;X+_#YX]_>S5Y.MGY6<7]NK?4/T,_4)^+/W3)9_JR=)/BSZ=>KG_
-MHRV?M5X`'JR:A9P-S/1L8%#-JU@YD?[QI#,XGG0`G`-H!S@#(`.T`K0`-`/L
-M!Z@#V`;P/,`6@"<!-@,\"K`)X'Z`C0`;`&H`U@%4`@@`Q0#+`'(`S-Q_,H`!
-M(`8@$B`"(`Q`"Z`!4`-T0GW*`*T`LT<S7@?W`_R(1\\3FLASXCX5%`?E+W$-
-MBWPN\E2XWZ+A9C]N!G.W_EYNPWA8-$,X71W'(0\^F`/BQW#\=&XW<GL"MYMY
-MF/D<G\'-;$Y_`8^[F.-QK:@G;$\/]YMP;P?3&LC]UQ"6YO7<O)N[V[C[!DX'
-M]^BN)VRO$NVXYX?I>9[']U>.Q[48IN\P=S_.W<."6%DH_01YEW<?9=]1>WB;
-MZ>6WS,>]TL>>_&_"_V_\H'W4]^??L*ZO5_/OQ[V^'9[E)N[1N+\?]/K>Y/7]
-MD-?WPU[?CWA]*_P][IEB_5&>,)CT^<.VAW43.9"]D4?`Q#H_-B">!MTV@+UI
-MOP%,K,M,,+%]1H&):W`UF-@G#FGCZ1KN>3!Q+Z\83%RC3M.R-]^T8&*Z.F$L
-MP#V=,V#BWMY)'!O`;`$3&=@F,&ON8+"9@\)#X]GM67+E=^5WY7?E=^5WY7?E
-M=^5WY7?E=^5WY7?E=^5WY7?E=^5WY7?E=^5WY7?E=^5WY7?E=^5WY7?E=^5W
-MY7?E]_\+/Y0-:%5Y[!$A\20TQ"/W\>Y#\110VL7WWWCWO\O=+O^73'1]_MO0
-MP[_N/M9[_5/]SG_>X>_V^N?W._\I8?67E=S___VPF4SBIO*SG3+T",H/[P*:
-M=?'T3DZ*CLFS).N8/(L!3)2=C]$Q^9<H,,>`.1Y,O'.E!Q-EG\+`1/DNG8[)
-MSVAT_*U7,/&N5V<(DZ/I`%,/YKD0]A[8&3!1=N@TF'@GZ60(DY\Y%L+D:PZ%
-M,#F<_2%,[F87F"B;]3J8>(?E)3"O`7,KF'@GYWDP\6[B%G?_:+^+F1U<JN9'
-M;M=Q=W9E$TU=HKO<:O`":$T9L[>?=;G,&9GDO_F9$_^[\!&/Q9.\QUB>?&7?
-MO>T)'/[?_OW?D`;EA^6#;1#O5.']2Y3+PGM7>'<2]2O@';E!4-%1`&DJ?$7`
-M$P;O8:)<(=Z+PKO:J&\![^3AO7H=^)L,D`I0#+!L'ZL?-%7>'5!'+ONA#)JW
-MEY[<_?IPO_*[\KOLIX8VU>ERH?PLCJD&PNXXU8"Y'MHSCI\H\Z@G[![4H^-8
-ML$E*^#_%DZA]_Q[NXC_-GWQD3[?X&=S?30&>[]\T[F_#DUKWM[DAQ/T=<6ZP
-M\EWS^.9ARK=^U^[A[%N]Y^"(!Z;A]S/?'SH\8M_1-(.^_:DWRB9L??F=OQ0:
-MFA=?&OOUU0_,&^ZT&>YX_/AC"0,#'-?_ZRG#A3U;$K]?/_C!]7?O,.R9^=&+
-M'[CFCJ[<=]10>J#U_K::@W/>>F2K<5?M[5G7Q3I^+6M=%[_KU`.?7?C+16?U
-MW],3GOEF]5>'?KI^\H;UXQ+'ZZ[Z>\<_=5^]L_^W1.=?C_W\J_.+6^Y\[`.3
-M]5#C0P-?_.>6X5\]ES3`>I567'^/N/I@<FI._.F_/A(;-[WNU>\S4O_Z]>)9
-M[RR.DYYZ^#;7XA?;G]'79[YP_XS<#R])MTDM8Q?;+YQ8^??'.GZ^;L^S38M/
-MU92D'/SS'_7W^<U?MG\LO8[[_J'W#['?Q=EWS`H^_EP9_NF8?5M>W.?S''\L
-M&6S[97;#T4CK\"]SKMK^X=G9S2'7;I@S8LY+[_SUA]F&%]\L+/Y7P-LS[G'.
-MCIZU*_[.KS]Z=,_'W\[>=^G2X=P-@]8<^L?IV9-3%GZ1NG_WHX]]<W#VP_LS
-MXL3$]T-W_^E?LS];^=:CL::71[WRP:.S(ZX]\.6NM^*FY$IWSL[-6K"W^I6,
-M=8-W+IU]_(?)CL#=#]<.O9@X.V+V"VVQ+USWW5U;;YA=]=(SIW?EK4MJ/I5U
-M\XH_!!ZZ-G.-S?70^ED/_7;3\#M7C$V84O_2S#'V#V/NGO/'.G+I>-S)C3F:
-M$:_(7]WSHG_<@0VF^*`WGQ!GG)AT4_0=X4>N/3'UA[F;;HM]\=[=]=F?OG#W
-MB\^^,?7+@E<'_77^TXD+MNLBQ\X]/?'&:?,R_GGX]K$/+E`_7__9OJJ+\H%1
-M3WV[\;;LAV;N,=NN"4N[U;K\DNW!?P4^6C7H],3/GCY\I$E]ZL668&M>(55Y
-M4)!;LM(J%I/;<TN*"L%N+5E97%A10,I+5^66>-Q7H=9KZH=^P;S`-*"3A.B\
-MY#3K&C13N(D&Q2-]Q',3@:I'N#9ZZHP944PG1&)A!:K<9[=8^+,NJ($=+T.Z
-MWW9(3$DA5WY7?O\?_050N?H8&(>1?X>VB6^M(<]4@_S^9N23"=4[5M,]G!_E
-M9YH(?9^-M/;@CKI#.@"/.B2`=[K,'67YQP,>YRC#9>X,D=,#'N,MZP$?I,;W
-MH8C/C^$W]X+?V@.^GQI?@.D9W]0+OJ47^G(O^`[`M__J1V0OIJ_E-S\L#_=/
-M]Y,?^9.7?7RG'SGCY3_,Y4>V!'CL=6I_<H-W?.#_&B_KMI_]R$PUN>Q73YIJ
-MT&2DG$QG"C&2Y:24B$0`_F$^R06.N)P4@LU*HJFV%`U))1G@E@%N):2"?EFI
-M'ZQO?ZYZIS^LYH;"BA/YZ[OA+T940_RHVWA88>X".LSM\CCTQ$(I5@"N%.+0
-MDRG`NT0!3*'`?@JM44`KC--*`/]E9"VEMI(4T#S\#6`JA,9_>DA[+K@*X(YT
-MDR&?%1#7*IJ7$J`^@`1#"13#/[T7E0IJLU*_Y60U_,WCW)2*^--T3""S"*Z4
-M532O\YA>!N:#NE=Q]^_]T=T"E"MHCO5`OQ3BMT*Z<R$V]\5V^,U4HW8>"Y3O
-M4OAK@I+*('.!=AK8Y\+?)*;]@+RM_K&+K3)4O)<P$^_!8Q]3D\O7($_Z(RX#
-M4E!.RV(E4"N$7%N!<@G4).I?J*1^HL@T@%AJ+J?ZDC:1F8!/H.G&E)?0$B*T
-M=*PT1P+\*X,UU63XMX;^FP2^K(!=#KZP[$HAWI7@%\L][[(P>;1>;H=PN;3<
-M)Y$5-+;)8+N\119#:U>YTY](ZVD%]5-&:[J4:9-Q^ZB`%E)!PZ\"S"I>[GK`
-ME,+?/%HWM\/7"MZ:F$LIO6]F@$6>)Z[N[930VNJ[Y1;0M*:`KY40;W$/+9;\
-M#[1BU/\TK%L\F;3D\KBO<L@?5;_P']05ZGK"]CV/IPOC1LI*6:!M%6V_E_?H
-M2=!Z<ZBNF':(405#!+JN!G_H(Q[2CS1PWLBB.<$2+Z#UH(>TE4,*5M+TKW+7
-MDJ=NTFA:_Y_VKN:UC2N(O[5,U2VA&">'IO2PHL3$;A(K%8;$;3&4NC2'IH*X
-MI*>"(LG$1)&%9'NK8*@<*#2W!1_,@Y+T3RCT#Z@NA5YZ"+2'0BGTUB]*CH4<
-M-K^9>?OUM$IQT^/.LMZ=M^_-FS<S;SX6M'Z;_@,%L,T<'7LI+1/%LVS??=S=
-M8+V2?&_SGMY"K\4)2Y`Q,F*;.6OS?9^I;[,_:(!6ASE/4Z+O:[U@UKO-5MW$
-M^*NQI/)D)=_4<F!)I*?)74G?Y)IE#?>-!^ZP'!,;=&>_8F]_%J>GI#YTY,M`
-M$K1S8221?#22"QVX&8_'N%)+:#ZH$<J%CI#?GTPC^`Q0@ILI]ZK'P%VME0[H
-M+^.UFKY\&*#)#4Q_[1Y6$[SL:]V['*3Q(;I;N)O@0^JO8_IEW_=[\?03^/'!
-MQ4R@'L0-@4OL)QT"'6B=Q@/PE\)UD!VOZ6>6;HRZW#G!_T\(+?A'K86/,N=+
-M:X_4B0=ROH+S39SG<#Z_)L^_X7XQW#L(PY]J8?@0P?+'5\/P6^#?/P[#SQ_;
-M4S&0G5.NZJG$SL=3N1T]NYW31Y3\4OX5&9#6-7T(7;BUP,&?T^[%(_]H6')=
-M[6N^7CPZ\H>ETYIPTED5UD,O'OE:5M-@C"`^LDX*[".5/9751_B7!S/*\^98
-M2I2!.FIN3C#*/R/7X*AHL;.4(P;\S2UDZM_Q->MOWXFCY954)-V(XR7_]M9Y
-M6L:8AIEZ&=7!S_"9HMF[N3';4PLIC[Z:H3!2!Z`QKYYS7E2_TW=_P@-K#J=^
-MRIE79Q#+_N#G(U`C?F@6\LX7^,@"\;6H?DGQ5;>BT@)[]`&.*,YD^5)S1&-%
-MO>ZTU)\\[]V<.>[#_Y^(YUB`'!L<>]L<HUHF:MIK+CF5^EOJ"\3.5?47T_YL
-M@O:7H+V<HGW-K%:BV@!SW>)\R>*:Y?D#:%_"V+]SY3E3/^G<Q_B$]B>@N()L
-MAS)Y^E7TCDIGM03.1^?5UYP/_Q;KX'H<!>WXFZ<1Y+?U3PT-V@9$8QTS;W$&
-ME>E9?VCZO?NK]'N/M9WGKD^"CZ?7/\++%<16R7][JF_T3E&?<H=-MG`[XUC"
-M*'IR`6UWU#FT12V+:M]Z^D:,[\>U2)+71-26XI%+N.ZC!OH`W+0Y(VRD1GA3
-M<Z%JO+NF]UD%=@9/J"YZ'[M])=-R#3WOQ+TZG,G?,!JGYQ_G2BF[FO\V\X=8
-M9S.7]N!?>!):E,EM*LDCN_Q,JICT'*\Q][N&1M=DBM1SEW=[W^2O)&_*9;<X
-M$XORP*2.H*Q[#UB3^:RH>]!JG_L,F3[QO&NU^*F9.QA[2R7[PL_LE)M\[>")
-MY/>MC!23O13Y#EF?A^I0:MT-'.OPZANFMEQ5Z>S;YU5US"I(3^3WAKQF:;<E
-M&$DVXBR1@U0KU-ZP_%E%/<B5=0/4FT:[63E6C"X;1C*)!,GVHQQ\U]C4P,PN
-M]?N.D5)4>T8RO\EZ%!HMK@V[/';':#J27\_P+38L>US>'%QEOMN6#.T*I@6L
-M;235!8VA$GWW64I2-U[GV:FGSSU)/\L3K5%%6$&UMX[Q?>//(PN1RM[VIQ58
-M`'&;CM@#KDTB66^R)B+.A)9H>-(W5[DVV6')2D7H\;WP0I)HYFA6K(;JS";C
-M0G6/[:UK/.T>_'D+W%:F5*G'>4MP*1/CLQYRF@<B3QO9R';J78*LL<%<Y\?G
-M1?#R,N32,18B(P8J&W,EXGI<Z76P%K+J>=XU%)V6<Z,/2>)V3N0JH(`""BB@
-M@`(***``&YX`4$L!`A0`"@``````(KE/*0````````````````4`````````
-M```0`/]!`````&AE;'`O4$L!`A0`%`````@`;8)0*5V(P\%G"0``[!4``!(`
-M`````````0`@`+:!(P```&AE;'`O4F%W<FET93,R+FAT;5!+`0(4`!0````(
-M`'UA3RF'-[K#:`\``/L1```/````````````(`"V@;H)``!H96QP+W-C<F5E
-M;BYP;F=02P$"%``4````"`!ON$\IH^C<`I=5`0``P`(`#0```````````"``
-I_X%/&0``4F%W<FET93,R+F5X95!+!08`````!``$`.L````1;P$`````
-`
-end
Index: unk/src/sys/arch/i386/stand/misc/rawr32src.zip.uue
===================================================================
--- /trunk/src/sys/arch/i386/stand/misc/rawr32src.zip.uue	(revision 151)
+++ 	(revision )
@@ -1,597 +1,0 @@
-begin 644 rawr32src.zip
-M4$L#!`H``````&(#72D````````````````$`!4`<W)C+U54"0`#MU+[.<]4
-M^SE5>`0`S0!D`%!+`P04``(`"`!9!%TIY]5^R6D#``"`!@``#0`5`'-R8R]#
-M3U!94DE'2%155`D``XE4^SFT5/LY57@$`,T`9`"U4DUOXS80O?-7S&TW@*"F
-MV]NV*$I+M$U`EER2BM>WE24Z9FN)AD@ER+_?(>5L'`0]]F290[ZO>?1\AJ,Y
-M:P>=<7XTA\GK#LP`_F0<-&-[,D\:?S6XZ?"/;CUXBS,-1WL^VV<S/)+67EY&
-M\WC"D1Y[]Y60[.?)Y_8.OMS?W\.F&3VBKB>G^V88X(\^'OS53>[?9X1/._UG
-M2BBJB0\=C-KI\4EW*2$J2&EMI^&Y09WZ29_M!54>7C[`'NT8U1WTH(_&@SV2
-M!C%+[1<R![PUHJFA`X5WKH=+.PU=XXT=D$KHGS'@0;R*CT(>SDYCJ^/)P0S-
-M^!*X>I?`L_$G0-KP:R=/>MN9HVDC8A*3NV`LQH=<+Z-],AU^^%/CW\>(!H?.
-MA$>.A$>]]E_)KRF\5^30T:N4F$@_.8]9^2:N#/4=[%,871=``&"PWK0ZF3=Z
-M1K"`\<86+;V7@HSMN3&]'E/RY:,$I+J)X%4">NLFE/4_J)C[J`-,9]NIUX-O
-M7O?S"T9O<3A"WV#_3'-V;S''W0346P,I^2V-!1B:7@<54?&$VPL8+T$I]B?L
-MO0MEUT-G1^P`3A&WMU[#;-6[*`@YL:9PQ-ELSMFC#Y6^-N+Q!.ZBV]`)?&A"
-M4\;0AF'NA7-S\]2:2Y#54NVH8(#?6U$]\)SEL-B#6C,HF8IUK>HRIXI790*\
-MS%*@90Y952K!%[6JA"3?OU.)`)\^Q1$M]\"^;063$BH!?+,M.((BBZ"EXDQ&
-MF*+.>;E*`"&@K!04?,,5RXFJDDC^\1E42]@PD:WQ+UWP@JM]Y%MR50:N)9)1
-MV%*A>%875)!M+;:59!#LY5QF!>4;EJ>`]$@)[(&5"N2:%D5D?/,99+\SN&"H
-MCRX*-I.@P9P+EJG@Y.TKP_!06I&`W+*,AP_VC:$/*O8)8A+$E.SO&B_A$'*Z
-MH2NT]?F_TX"0!JXEJP7;!+75DLAZ(157M6*PJJH\9BR9>.`9D[]#4<D85"U9
-M@@R*!N(`@2GA&+\7M>0A+\)+Q82HM\'Q':RK'0:"OBD^S6.P&$2PBME48A]`
-M0P8Q]P1V:X;GN-V2Q*1HB$!B8IFZO89\&*"Z\8BM6A5\Q<J,A6D54'9<LCM"
-M!9?A`I]I=Q0YZV`Y;@=5S9\WI4WB#H$O@>8//,B>+Q-<N^37BN"1K+/U->Z4
-M_`!02P,$%``"``@`P[U<*1.F^>&7!```2PD```L`%0!S<F,O340U+F-P<%54
-M"0`#'DG[.;14^SE5>`0`S0!D`+55:6_;1A#]'`'Y#P,W322#E8_4Z>&B"$6N
-MK`4H4B67/E`$#4VN+*(B*9!+'PWZW_MV*=IJG?1+4<'':'?VS7MOALN#_1>O
-M>/;JQ?[!R\'+P<'^-R\'M$].M7FH\YN5HF$ZHN/#PT,2*TF^5)/(I6G5EEFB
-M\JJTB)?IV!RQUVLR1QJJ92/K6YF9C2_AS9-:Y27-VD8625G23X59>)^US>]W
-M22W'F?SYWY')_!&KO*&TRB3=)0UE\E:NJXW,Z/KA68EE59."C&M9RF6NJ%H:
-MA`3X6V7(K!M*RNSS<G?*AC++&U7GUZW>,$=PF%"NJ=HZE6;E.B^3^D'7+1J+
-M[G*U(E#0_ZM6&9BBRO)EGF[-A&S:R+K(E8*"35W=YAD"M4J4(;ZLUNOJ+B]O
-M(+C,<GVHZ23@8"'5C^;+T?@?[!HH[6D9IXJV4?!2):"K<9/KZE9O;9MD4/`I
-M*Y6GTD(*+%X#4.,\5382_TX+5=-UDA>R[JPZ?DX%)7=LZ:E`:]:"WO_$ACJA
-M/516I6TA2Y7TO3M`6RHDU%0D2M9YLFZ>[#=]T\B[0CI];\=F4,JDD)J-8=^B
-MNQKG03/&K.FY`+.*9)E5-68$N\`N*B6IDZV:1V*HC?&F)?8[H4VU5/IQV$[-
-MS8J:C4SUS.!PKJ>IUM-2=G/3-#VU[MF8\8BB8"HN[)`1XD48G'.7N32YPB8C
-MGPDSX4'LN[;@@8\'VG?&9/LN.8$O0CZ)11!&!NWC1SL"R)LW9MOVKXA=+D(6
-M112$Q.<+CP,8E4+;%YQ%!LJ+7>Z?6008\@-!'I]SP=R.76`9$L^/4C"E.0N=
-M&;[:$^YQ<65J3KGP=;TI"MJTL$/!G=BS0P.WB,-%$#'24ET>.9[-Y\P=$VB@
-M-+%SY@N*9K;GF:I/FC7]9V(G#%SMB<>Z8A#K\I`Y0JMZBAR8"8J>1=&".5P'
-M[))!CQU>6<#M+K_`C]@O,1*10*X]M\\@<?AE=XPS:)43AVRN60=3`Q3%DTAP
-M$0M&9T'@&M\C%IYSAT6GY`61,2Z.F(4JPM8$-`Q<PS;B21QQ[9\!X[Y@81@O
-MM`,CF@47,`@^V#CN&K-AC)8-KX+P2@-K/TPO++J8,:RCZWZO4(2VMB2"BX[8
-M345=F"IV]&+JSCQ^QGR'Z=U`(UWPB(VZVS[DD4[B7?D+&[5C;8'I&MAUX<Y@
-M6Z:WQ*=DN^=<T^^2NZF`*WP[0EB.8F>V;8%Y3/#6&WR5E^FZQ;6XUZ@L6=Z/
-M5WN#@;S'/5#2GK-'GW8RNE?"@7[@FTV22IW[;+?(3O3ZGX/!)`@\<I)U.G=/
-MAKBK<&E-KM"^?<(+)4&;+H+0I2;_`_>:$^%RP:WUFO!R&`T^#:C+727-ZM>C
-M=Q].L5#(HI%JJ)<L.K3,R6HY;,LFOREQ;Z2KI-:YHY'.Q@_J_N:(2TK5_6GW
-ME9>Y&K[&]]%V(=Z`BS1+UI:6ANVWI[BLU]N*VV/8`,7Q%/=WHH9[7Q\>W_^7
-MWSUK0+L?(_CP@[55W@?'??"V#[[M@Y,^>-<'WR'X#.KW_?X/C_!/A1XK'3V6
-M.GJL=?18[.CD0^<!7J`M1D2$,3O5S?X+4$L#!`H``````"X#72D`````````
-M```````+`!4`<W)C+TYE=$)31"]55`D``UA2^SG/5/LY57@$`,T`9`!02P,$
-M%``"``@`P[U<*=>-:/K5`P``?@<``!8`%0!S<F,O3F5T0E-$+VYA;65S<&%C
-M92YH550)``,>2?LYM%3[.55X!`#-`&0`M55=C^(V%'U>I/T/5]J5=D`4YJ/M
-MPVY5U20&+(6$VLZP\\2:Q`Q6\X$29T;S[WOM,(+N=/M6'L#DWGON.>?:SG3T
-M[B/+/[X;3=\/W@^FHY_>#V`$07U\:<SCP<)5-H3;Z^MKD`<-L;8S$<*\[JI<
-M65-78V!5-O$EI"C`E[30Z%8W3SKW@1_AK51C307+KM6EJBKXK?0/_LB[]J]G
-MU>A)KG__;V3P7_)@6LCJ7,.S:B'73[JHCSJ'W<N;%ONZ`8LR=KK2>V.AWGL$
-MA?@G99C9M*"J_-_E7K3E.C>M;<RN<P%?@L6`[=JZ:S+MG^Q,I9H7U[=LQ_!L
-M[`&0@ONM.^MARCHW>Y.=S$39<-1-::Q%!<>F?C(Y+NQ!64]\7Q=%_6RJ1Q1<
-MY<85M;T$+"RU_>S_W$R^8]>BTE=:WJFR:RUZ:172=;AJ5S^YT&E('@4_56U-
-MIL>8@A87".APSIV]Q'_2PJY9H4RIF]ZJV[=4L.6%+:]44&O>(;W_B0WT0E^A
-M\CKK2EU9]3J[*8ZEQH0&2F5U8U31GNWW<W/(ET+.>ULNF0"1S.6&<`JX7O/D
-MGH4TA-D#!BG$5/IME*1Q2"1+8CPU<3`!$H<0)+'D;);*A`N/]NT;$0CRZ9,/
-MD_@!Z-<UIT)`PH&MUA%#8.S$22P9%1XJ2D,6+\:`,!`G$B*V8I*&/;MD[$F\
-M+85D#BO*@R7^)3,6,?G@>\Z9C%V_.38DL"9<LB"-"/=PZY2O$T'!20V9""+"
-M5C2<`-+`UD#O:2Q!+$D4^:YGS8[^&[$SBES)+*)],Q0;,DX#Z52=5P&:B12C
-M,8@U#9A;T*\4]1#^,$;<_H9)8D'_3#$1$R`D*[)`B5<_=L<[@Z,*4DY7CG4R
-M]T`BG0G)9"HI+)(D]+X+RN]90,47B!+AC4L%'6,721P!!X.N81C7LU0PYY\'
-M8[&DG*=KY\`0ELD&#4(?"):'WFPTQLE&KQ+^X("='WX68]@L*3['J<>O"B4G
-MSA*!+@;R,A7[HJGR0B_NND7$%C0.J(LF#FG#!!WV5RIGPB6QOOV&8._46>"G
-MANSZY<7&'OO9`IL#">^9H]\G][L"76&G+82/11HL3R/PQZ1_M4RA->6QT%"I
-M4K='E>G)`?:FT/Y>WICJ[A:/<WDT17\L\727^2_9)!L,[`O>Z'H/7=6:QPJ/
-M9%'C\>ZVIK)WMUO[Y6U">Z@;VV?<_.HR!A\P;BH-V^V,+EB\#6D0"9B.1M.+
-M$(W#4P"^#ZVOMMNCPHM\"'!:G:,A(PLB<)O(4]:P+Q]\.#;JL53X;FHJO)*N
-M\`I1NT)_AI]O[FZ&@[\!4$L#!!0``@`(`,.]7"E]I`A)TP8``*\.```1`!4`
-M<W)C+U)A=W)I=&4S,BYC<'!55`D``QY)^SFT5/LY57@$`,T`9`"U5VMOV\H1
-M_6P!^0^#^-Y:,E0Y3;[)35N*7$D$*%+E([)Q<Z&[)E<6&SX$/NRX0?Y[SRPE
-M6[9OOC6"(9$[LV?./'9G?'%^\HN=_')R?M'K79S_M4?G9):[ARJ]W3;4CP?T
-M_MV[=Q1N%;FJF0063<NV2&23EL60["(>\0XCRTCOJ*E2M:KN5,+K/P!;R*I)
-M"YJWM<IE4=#?<[WPKZ2MO]S+2HT2]8_1FQ_A:H'^"K=I37&9*+J7-27J3F7E
-M3B5T\_#*Q*:LJ($/-ZI0F[2A<J,1)/#W;D&SJDD6R9_[>F365TE:-U5ZT[)`
-M;\%F@KFZ;*M8Z96;M)#5`]O-ZR'=I\V60(%_R[;1,'F9I)LTWD<2;M-.57G:
-M-/!@5Y5W:8*'9BL;37Q39EEYGQ:W<+A(4MY4=RY@8ZZ:L7[YV^@%NQJ>'FCI
-M2.5MW2"6C01=QI4WY1V+]DG2*/@499/&:@@5A#@#(.,\6=8N/J<%JW$FTUQ5
-M7:C>OZ8"DT=A.5"!KTD+>C^)#76.'J"2,FYS533RD+L+I*6$0D6Y;%25RJQ^
-M"K_.&R,?.]+Y]V&D"Z60N6(VFGV+[#+.`S-&K7%=@%E)JDC*"C4"*;#SLE'4
-MN=W4C\1@&^5-&\@[1^MRT_!QV%?-[9;JG8JY9K`YY6JJN%J*KF[J^D!-'XVY
-M'5#@3<.5X0O"\]+W/MF6L&AR#:$@5X2ZP+W(M8S0]EP<9M<<D>%:9'INZ-N3
-M*/3\@,'^^,,(@'%VIJ6&>TWB:NF+("#/)WNQ=&S@PI!ON*$M`HWD1);MSH8$
-M%'*]D!Q[88?"TMR\H:;P>B=Y4UH(WYSCU9C8CAU>:Y-3.W39W!3V#%H:?FB;
-MD6/XC+:,_*47"&(_+3LP'<->"&M$(`'#)#X)-Z1@;CB.-OKD,)-_Z>E$@*@Q
-M<41G"IY:MB_,D%UZ>C(12!!TAA0LA6GS@[@2\,;PKX>`U=>>YP;BWQ'T("?+
-M6!@S^-?_<61T6)`E,_+%@CE[4\8)HDD0VF$4"IIYGJ5#'@C_DVV*X)(<+]!!
-MBP(QA)'08/.,@HA!C.=)%-@<.\:RW5#X?K1D[P<T]U8(#F)@8+>EXXR@L,^(
-MD^=?,RX'0Z=A2*NYP#KR[>[="WV#PQ$@@&9XK`FKB&=XY"RJ;>;8,^&:@J4>
-M`ZWL0`ST'>_;`>O8G?&5`<L1NZ_S!6[=XU$]#W56R9Z287VRF7RGK,L!$;'W
-MI8/5(#+G^^AS0T*/.TV+.&MQ$[ZMFT1NOHZV;X_6?,F'2GUX_X-E*[ME"42;
-M1&UH;8E)-.N=XCDM<!FH>](K:U>L>J?H'=!AZNNI[8A>S;=.3/%65D^KO_U.
-M'VFM']?KR]XIKHIT@U;\__P`C<Q''XS=KM>;B)GMKA>H#(1FO3"6_6<*0S)7
-M:8$'I(@N+KY],Z97ZT4P>ZW9*7S_OE?`F^>N36^Q0$'U;6L]%\[R$6T\]HJY
-MRK!)N-8SZX.?[3+W"]SAN')Q3_9ZSV3C\;-7D/G6^_X3"''#*(MN0"B+[.$%
-MP_+F/RIN7G#CSH*?RY\>G[1`-Y59^E_916CB>0Z]"),-'1MAE$6L=)0X]Q3@
-M/9%5\@J"R-A\]3+%V_J#RZ=C@V*Q'`=R4<B;3'U(S+)HJC*KH75R<L+<>#33
-M;?!^BQ;7UMS5%U.3V[FD&D<(O9(Q3E56JS]!"O1A8[S7:%E:?&$\=&:&[,XE
-M5!X>CY_V*]ZJ^(L>'>,RSSEI&9_RG:S0]#$K]&LN?M/LA`YD=K$I*<X3_KV$
-M;"G1]8_D_;V,8]&9J!2F#HP7,BMOAX"NZ^?&4FBSD>,;B)+L]H`TRM=%L%59
-MMK="'S^^8C0>3]-,>3MX_D_J.TLSQ*4]>`+`L6`%ET>9\9."&SG.@+W(U[L%
-MYL45H]-?8/S`OFH+PFRYIT\W$B..W.VR_50+)2B/K')1)C+K/SH=X%Y5^[%*
-M;]QB?+]1H!=G)2:F(0^H;570U'!P_==E-P;?*U)?4ST.=SC'MK!'ZBD.J@5G
-MM.KFYB.5LQJ#<EW+6Z2PS7?H!\_L7/*1ORO3Y&71X^KB.ZMOK3S?HHOSY-Z2
-MC3R_&%*$CHJ%PLPY,GS3K;DQBJOP_&+PIO?M#6<NP."(6FNKC/W*HBJ[Y/40
-M4XZ/A#?;WQ;&U7IIA//?AW2^T\*9:A"S-E.'O/0Y&4.M/J2#_D#K[KA_-'%=
-MQ=NJWRF<??Y\U@G3#?5W`\!"Z9U>Z2B,G%(F'3-<TH&^I=>1[W2[P'4TQ8@N
-MF_XZ[+_=@,08=\:O-?[>#@XT.J1N!P\#0BMSJ`A(8_JU_ERP=GM0TG4JOJJX
-M;0X.\0[\SW;0&U*WW'T'JW6`*<7U_(6AF7U_T_L?4$L#!!0``@`(`,.]7"D=
-M<2K\NP0``/<0```1`!4`<W)C+U)A=W)I=&4S,BYD<W!55`D``QY)^SFT5/LY
-M57@$`,T`9`#-5VUOXC@0_EZI_V$N>Q_:U1Y0^G*KYC@)"+!H>1.AM\MJ)>0X
-M)KA-XLA)"OWW.TYX">6=_7)24V)[YIEGQO,8\P':G$H1BG$$!GMEK@B8!#.*
-M;2Z@)\4SHQ'4N<O@+^@0CY6T/IE*'K';HH93/4)?B,.@._69+/US]^_EQ8=]
-MB`V&=B1B-E1B[MH)\B>H"^F1"/YC,N3"AX=<H:!P/GX$HPN=[@!J1G.`P\L+
-M-3TH]QN#8:\&VC?NWQ;A:O;YX1K*0>!R2B($T*`P*]P4;I1YM=XH+1DCX=3%
-M8%;L7%[\T:Z99KE1@\&$AX!_OHB`P"MQN0T>>6%CI)>#@0`K81LILV!>E#CD
-MO@.==OEK[5,&*@X9VC&HS0(A(VC/48`*SR.^#>J1L9_QR+PF:)`?PZK*.>2A
-MY;:;#T4,E/@0!HSR\1M2I\(?<R>621U@.F&^"N8OF6:<K3>PD5JRI@A[!'<-
-ML%Z`GFIBP=CE/A8!]PC8C'B!RQY/(Z\P,VVSO@G:=JR>"$-NJ;)-!*<LA#&&
-M7T^.R%U$ML3J,Y>1D&EP9>&'K5+<V3W7^Z%2VJ<"I:U;80[W%[)2$[U^MP=E
-MUQ73'I/5)#^#!<RWF4\YIEU8&IF4CI2C$B%HVMI\2U#B]D@T21:JO5Z)NCDV
-M8Y<7[4&KY'%[/NJ;U9*DZ3MR:]8!M#^O<'NN-2B5]M4MI9\$K)3-&CR%;-2N
-M5^%^<SJISZC%+4GD>@J)23>.@C@:&5QBO"5ZUJ+I1TQZS.9X3NRS&Q#IL#G2
-M:FF3V7Y2>_D<0:7I^$*R42IW%2&#O<&P;!@I=]PCR/O"%8Z`?'L`^6^WD&]\
-MAWRW"'D#6ZK940>L>NT8M<I3(WT?X;S1_6;B:!AK8623\2PWP5'=@#Q=1-@$
-MOSL17(W:E>J!.$DFV&&K8%E$[R5Z0RU8Q0*F-E7=M/`[PR4)A>T+>1</][O"
-MWY"WEXX+H]WK%;-Z6RQ9(56'>MK_&=QD=<%HN;(^V6IVOB($GH4O&_[IVBJE
-M,+;"MS!BWB/F8(MIB)D1.L%C]+%Y^_EAX7N$6V!;C[[PV3H`Y$40/4HV3E1<
-M:YFU(Y2\.&W/UO'-;ATOL/>K>)O5?@T_[-7PS58-OXMRD,;1&K7G(O52+?UH
-MHI[L]WH:'2O6QH^=@C7LN6(SD8Z*DE&M>BW7OQNMUN'H6V4\.EW&HW-E/#H@
-MXR6PO<KJ?Z!I6S72>V6B8C%Y]ABR(#I!Z$=@*:EW#%1Z]BJ1=F\ZD]X,]GV'
-M[[99B2+%;4@1!Z"9(I:4);?T,'MV&&Q,8C<:X0+*"S0:!#K5Z6RF2ZKCK5*7
-MNK!='2\>^B1XUBT29;`SH`K2[#[UJ[52[F?;N,\AD#*LX;5SS>R0;X=%%=/X
-MZ=GW-+<NJR9^#22+"0/SJ3+HEZN#=&V(ZAI2)9"S@JZNN>?27B%(^GL`ANN<
-MS<*,[#(>#G/W9>6&='5L[,!54TFK;'3.%T9L[(R#G3/!!@GT"7;.Q-.Y[VJG
-M%&WR^S4[$X*%R<J9[O."G^?\FOY*WNF]>T\6K`_O"J="I['4+2_0;==!51?Q
-MB72+^[IT0MWA8_TY</!AR;\C=DVR,+-S&.!X^KL@J]W>L-]L?!GL@5H<D.EH
-M^<OK%U!+`P04``(`"`#$O5PI*G0"C04!```N`P``$0`5`'-R8R]287=R:71E
-M,S(N9'-W550)``,?2?LYM%3[.55X!`#-`&0`M5#!3H-`$+V3\`]CO2II;/5`
-MBDF5I1(K$"!R,6FV,#9KZ2Y95AM+^'>AH(F)!P]E#C.9]_)F7MX32Z4HQ:L"
-M&S\P%P5*B-1[Q@0D0F[+@J8(#LOQ`APA=U3!,\J2"0XWQGBL:^>0S$//]18F
-MV#YX?@S$=F/P0[#)DL0$X@<W@L0/'Z-@?D_`<9?D3-<:X6FK/1E(\8:I,F$4
-MTKUD"B=7(\MX^5F,K"S@$@*:;ND&P=]SE-9L>GO4=J`UNV[6JJITK:[K7\3T
-MFX"F[G##./0/F^@*Y!GR]+-C>WS5X"N/[A`..5MW%.'9G[+^VZ"IM"[:0-IY
-M;"<*9#COBURL:6[^S\]D>#]?4$L#!!0``@`(`,2]7"FGN&K1A@4``)$+```/
-M`!4`<W)C+U)A=W)I=&4S,BYH550)``,?2?LYM%3[.55X!`#-`&0`M59K4]M&
-M%/ULS>0_W(;,\(AK""33#&DSU6.-=T:67#TP?%*$M<8[U<,CR:8TPW_OV94-
-MIC3]TI0/(/9Q[CGGWKV[QT>]-SQ[TSLZ?F6\,HZ/?GQET!'9U?*^EK>+E@YF
-MAW1Z<G)"T4*0)UHK=&A8K<HL;655]HF7LX'>8N8YZ2T-U:(1]5ID>N);>..T
-M;F5)HU4CBK0LZ>="#_R:K9K?[]):##+Q^=^12?^*%K*A694)NDL;RL1:Y-52
-M9'1S_R+$O*JIA8P;48JY;*F::X04^!ME6%DWE);9/\O="1N(3#9M+6]6:D)O
-MP69"N*9:U3.A1VYDF=;W*F[1].E.M@L"!?6W6K4:IJ@R.9>SC9F034M1%[)M
-MH6!95VN9X:-=I*TF/J_RO+J3Y2T$EYE4FYI.`C86HCW7_[P;_(U=`Z5;6MJI
-M8M6T\+)-05?AIC?56DUMDJ11\%-6K9R)/I;`XAR`"N<ILI;XG!:BSO)4%J+N
-MK#I]204A=VS94H'6;`5Z_Q,;ZH1NH;)JMBI$V:;;W!TC+146U%2DK:AEFC=/
-M]NN\*>1=(9V^LX$NE#(MA&*CV:^0785SKQBCUE1=@%E%HLRJ&C6"66`752NH
-MD]TVC\00&^5-<\QW0IMJWJKCL*F:VP4U2S%3-8/-4E53K:JE[.JF:;;4NK,Q
-MXB&%_C":F@$C?$\"_Y([S"'K&I.,/!;I"O=CSS$C[GLXT)X](--SR/:]*.!6
-M'/E!J-&^?#%#@.SOZVG3NR9V-0E8&)(?$!]/7`Y@1`I,+^(LU%!N['#OHD^`
-M(<^/R.5C'C&G8^?W-8F76\D?TI@%]@C_FA9W>72M8PYYY*EX0P0T:6(&$;=C
-MUPPTW"0.)G[(2$EU>&B[)A\S9T"@@=#$+ID743@R75='?=*LZ+\0:S%P-2V7
-M=<$@UN$!LR.EZNG+AIF@Z/8IG#";JP]VQ:#'#*[[P.V:G^^%[+<8"[&`''-L
-M7D#BP;?=T<X@578<L+%B[0\U4!A;8<2C.&)TX?N.]CUDP26W6?B)7#_4QL4A
-MZR-*9"H""@:N81K?5AQRY9\&XU[$@B">*`<.:>1/81!\,+'=T6;#&"4;7OG!
-MM0)6?NA<]&DZ8AA'UKVMPB@PE24A7+2CW:6("U.C';VHN@N77S#/9FK65TA3
-M'K+#KML'/%2+>!=^:B)VK"S060.[[G.GL/LZM\2'9#J77-'O%G=5`5?XIH0P
-M',;V:),"?4QPZQE[<DX_9+@12I$=F,.K)#"G`?)P=IJ,DN3L)\NQWW\X33[8
-MUC!Y_\ZR$FMH6LG081\_VM;)A[/3LR3IQ#$G.33V.BCZKT@=L60<VHG*S&=Z
-MAVO3V%O6Z6V14E7.A+&'EH(UQ\<OEJF])8A0DH#'E'N*@-';$W5=J6XXRU>X
-M!_:;-DOG?PP6^^A3:,=B,Z.:I^X^<YD+?6U.[-$FFH+>;'^-ZUC?*H/%ZUX/
-M+`IUH33WQ4V5-X9Q_#U_@$9VD*IN)\Y.S>7R7(V$0M#CX&"V7#[>\;)8YN*I
-MQ^OFK!X*>=HTV&D8^NLY))W3<G63H[7:4UEBP/AJ=`/G1N_9RH/#3TH?^6L8
-MBDNB,91\6T%.Y9]IG=$MWAAUJJ[QM:S;59K3?%7..BZ[F[Y^575RR8,H-MV#
-M9T$.C=YC]"V(Y?LNWERRY673IJ@!,$$=/P995S(CD!^)?'G@3/W`H>S.2=NT
-M3S%./)5VD=$O-&+N)%&GEEU%D`(>#P\[/+0V_LQ!XXGL.+QX070+@#FCYS`T
-MWX`E8_0:'+1D;$X.#HT'6/:=:\+84N+HL$&4N+ZM._K#@Q(PEK.Z4O<G7<I&
-MF6._?8MK%*\]6>*=UU*:=6\'3&4"]5"GFR=*4>#1@N3E]]MSH4IJ68NUK%;J
-M\5&*@;%S^KYC]S#^`E!+`P04``(`"`#$O5PI/DY72O0&``!X$P``$``5`'-R
-M8R]287=R:71E,S(N<F-55`D``Q])^SFT5/LY57@$`,T`9`#%5^UOHD@8_][$
-M_V'*Y9IV0WS!VG9['RXHHTZ*8!CH2]*$L#+:21$,H+:;_O'W#*!@K;M[N6V.
-M-@+#/&^_YW4:C1&?Q%$235.DL14+H@6+$4V7/H_0C(4L]E+FHY@ET3*>,)1,
-M8KY(Z[6C1J-V]`</)\'29TC:?*\_2;4C^."S*0\94L?4=C1BNA96-=/0'USZ
-M,.J:.A7TO_'*U6DTT&"K\32.YBA]8LC&]S8Q>KJC8:1L#=FSP)N^P+=,_W)Q
-MQ>*$1V$]GDB_7>,_EB&@]".(/@$D`"B>>R$ZS>^O9UM`DLQO?(J.<]_YIVK_
-M'I2BIF/UL*OI^AEZ>T/5C[9J#5P-.V<9H3#&O2-&6ZD=Z:HQ<-0!1N+!'6!K
-MI!HRHDZW\@Y$B]B;S3TTB7SF+KP9.VTI'45P8Z$/FC0:&WY;`5NTB'%KWF#M
-ML^*H$C3Y6NVHM1-)&J$]U=+4KHY1[:B+!P0,0G!54N&Q"5&##4U0*[](7<9>
-M&9'28_P82OL;*M$I566U?U%6E::`'"ZP?A_E3PG&#&DRB<(-Q,4K6O/T"071
-MFB4I(AI:><&2H47@341>\QA6TPBQ,%G&#'F+1<`G7@I`(%[P@J">>SQ,(++"
-MA"<I"U,$G[T@0,DKO,X32'^B6>Y()4;?4D<8E1?IF8:X5W';./;QT?+6,4]9
-M6ZF#,.D=;C]*KM^,WN=4!QS.`IX\H5.G3NO_O39@XZ>U`1L#G=!A61R*!=>A
-M_ZY`?$YT:MP+HMDF/HFFN99Z9Q$;MQ57(ZIN#E!^P_>H*8O_M@(_2K-9.Z+V
-M`X2.1MV1J:EZ'F9OZ(ZZ8W/LC//'6T*)"+#LI:>.;0+!E[W0!SH"_"!![W-&
-ML(;O774\!I,U\ZYVM-DN&2SM4@UT39X1F0-,R(ZB`(*S;QHVNI*1-**(>I`/
-ME,5\*LF%JLV7UDY!T$79J&2"U.<!RQ,&G7#!^%J2B=9SJ:W:I"=?PI\"YK::
-M.3W6B%UE(;:2$;C:-<!VV-RZDI4+16Z=RYBZJF.;0]JS3%W/R<<.'78=V\[3
-M#\2?4!:P25JOUW.Q7<N\HUA6+B\$IS;P.S^@^#B.9K$'6L]9DH#>R7O%SUN@
-MN;+5?(]!OMUT[+%CP_9.6VXW06JS*5-PC6/<X$.8G=A>/&,I\F.^VL.KU;F2
-M.P"8DA/W3.CT7?.^"IAFD5M,Y8L6;+Z0KSHRD/2Z%-;-,;C=@.2P(4+$$C4M
-M\9CS>G^)X,K1S>/)5KO4-L<'M*:`<Q2CY.29+W:5;ETT,[7/+[=J?^1GBGNV
-M:;GTAHQEI:5DRL,_/'WDZCWY+ZC34E#W-64[PI7+3B:\?;45OA\E=Z(@BX[@
-M0P)L@R7+4LA1>B.?`Y/+K_+%A8B\@VC!5E'KM7R#AOL[DB3\PE/!V;P!52Y+
-MA@>T&K)@(;:[0ZP#(LVO58JBYWY:T<*4#`SH;.:F<!V<G@8.T;!.#$PK5(='
-MAH\*H%Q4P'Q'97/F:-RW1]`*"(Q_E^6R10;#[7J[U2Z_0(A^L+]K`K2CS8?6
-MUX(@PS'[^=_&%YK&/)PAV_L6L`W:U+:(,;`S^'X`)>1%%RI,)?_S>%:_1<L4
-ME8,&1'1)8HZQ4135/H$TL@3):2^:+Z!9)\P_0],$9;4Z0:=?ZM.D/OLN(_%P
-M]E:\_B7N;RH,0U-1W\6V+^+CE[>WCP79Q,YG(,E<,!BC,KIBDLIE5>A&F%)!
-MY!A0W<8P(U"L'2A1.WUFA]\U^C,10^](ZVP>*?\NE@,??8,J49F(JT(K(I%4
-M@E(8^A,)3C@I*9(]<;`315,Q4HIY,ME0;;48PU'H%CKVR.VK1!<:9+;UHB4P
-M":,4!M;E/#N<(F_E\4!$3%:R8&Y:<1BRCBNL5`N[#Z8#K<;:SJ:2"N/N:[1$
-MV=PK'M89[X`_9^5OG==!./(&D>>##9FA66$4O0CT17\+C54HWH:8'*YA,T]@
-MVH90\&'6CJ/7;$;>F"C,%>PR)7D(SU[1UZJJ&F9697<]6EKM3<"TI+#Q.`/2
-M`WWSV1W-F<^7X!*(V3!AL3BX>Z&?&??D@<Z>/^<A3/``FS!A`<+!E1#<=<')
-MB%)6&+$H.KX?@:.C,'@%<.)G,?7?\="/U@DR[,;F$<:S9M6$O%=@RS*MT@0<
-MQ]`1!:@BP8OV<EP).NKT>A!KNX8+M?(9+%EFED^7@5`&V`"FVRZUB]_MO?8N
-M(PAX(`Z]`#&AQ36X9(,G.">$9BTXK=8\A/JP>O&/RX/<+Q>?H3F"++7T';E/
-M:;JX;C36ZW7=7R;/:R]F=<B*1KRI1E7[8<:WW2$Q[)U!0HQL18VH)APZ%8Z-
-M%N*@!G9Y**W,26=50+JJELT1NX`$X':@2XI!!>84="O.A56/B%Z[;Q)TXD99
-M39_2^8%3[^'#SR><W?X!4$L#!!0``@`(`,2]7"F*^>Q.EA@``!=$```4`!4`
-M<W)C+U)A=W)I=&4S,D1L9RYC<'!55`D``Q])^SFT5/LY57@$`,T`9`#L.VMS
-MVT:2G\4J_X>)L^4%98J2Y6S.)\6N`P%01)D$N`"HQ[E<6(@<DKB```L`]8BC
-M^^W7W3,`AI1D>_>23W>J1`)F^C7=/?V8@0_W]_YBS_ZRMW_XHO6B=;A_\*+%
-M]IF1K>_S>+$LF39ML^.CHR,6+#ES>-GS3=;/-NDL*N,L[3`[G78)14\21B@%
-MRWG!\QL^HXGGZ(VBO(Q3-M@4?!6E*?ME10/_,=L4O]Y&.>_.^(>O4V;T*UC&
-M!9MF,\YNHX+-^`U/LC6?L>O[1RSF6<Y*6,8U3_D\+EDV)PH1T)<K`\B\8%$Z
-M>WJY"EN/S^*BS./K#4X0"B`S8%=DFWS*:>0Z3J/\'OFNB@Z[C<LE`Q'P;[8I
-MB<PJF\7S>"J5"<MF:YZOXK*$%:SS[":>P4.YC$H2?)XE278;IPM8<#J+$:D0
-M2P#$%2]/Z.5-=T>Z`E9:B46:6FV*$G191B`NTHVNLQN<DD8B*O"39F4\Y1T`
-M`14G0!#I-)QIB=MB`==I$L4KG@M5'3\6!5@J:JE$@;7.-B#>GR0-$PNM2,VR
-MZ6;%TS*J;'<(9LD`(&>KJ.1Y'"5%HWZR&U)6%R+6][9+CI)&*X[2D/0;L"[2
-MN4>)P=?0+T"RC/%TEN7@(S`+M%=9R9E8=EG4@@%O<&\VAWFQT"*;E[@=I-<L
-MEJQ8\RGZ#"#'Z$TY>DLJ_*8H*M'$WAC8/O/=?G"A>Q:#Y['GGMNF9;+>%4Q:
-MS+$"\G!WXIAZ8+L.;&C'Z#+=,9GA.H%G]R:!Z_E$[1__T'T@\M>_TK3N7#'K
-M<NQ9OL]<C]FC\=`&PL#)TYW`MGPB-9R8MG/684"&.6[`AO;(#BQ32.=V2(C'
-MJ,SMLY'E&0-XU7OVT`ZNB&??#ASDUP>&.AOK7F`;DZ'N$;GQQ!N[OL5PJ:;M
-M&T/='EEFEX$8P)I9YY83,'^@#X?$M5DSBO]HL3T+9-5[0TLP@\6:MF<9`:ZJ
-M>3)`F2#BL,/\L678^&!=6K`>W;OJ`%T1_%S'M_X^`4``8*8^TL]@B=KSVB'-
-M@*F,B6>-4&JW3X3\2<\/[&`26.S,=4W2NV]YY[9A^:=LZ/JDN(EO=8!+H*,`
-M2`:T!M/PW)OX-NJ/B-E.8'G>9(P::+.!>P$*`CWH@&Z2LD$QN&S0E>M=(6'4
-M!]FBPRX&%HR#U9UJA8&GHTI\T*(1J*#`%Y0:*.L%KSL;VF>68U@XZR*E"]NW
-MVB+:>[:/0+9@?Z$#[PFJ@*P&THE'Q;$[9%MF]YENGMLHO@`67@%:L:4+P;`_
-M,0;2!+1-(.NU?HS3:;*!L/BR*&?1_*Z[?*F,>1'N,/[V^)EA,UG@3(O?0>!(
-MV4OC)?NBP/V6Q->'^`N!'I#9?,;G+#2MWN2L]2,\QRD$$'[+:"1TK(O6CY!O
-M``87&?;MH=4J,%)-V709Y<WHI\_L/0OI,0Q/6S]">(GGK=;A'_D#U,`EKB%;
-MP3(A_D5)MA#Q#'.IOEXSFFRU(,X6A0)ZPM:;ZP1D-DQ":GUIB8&3%FO`M/8I
-M"LP$##.C,H+IP\,O7_3^98@^K-6PZ!T00C<K]H79I@EKA]^AW@/GZ+F7[.'T
-M!:$^/%2H+7IG!DIV$?\6Y3.V@,2?1YA;;^*\W$0)FV_2*24!2#EY#N&^4`0X
-MM[U@H@\5&6`20G;)IT`#5U*1N<GB&3,S7(!U!V9*%UPSU+=]MC8OVZ<8XW&]
-MYN6A:9ZS8K->9WFI""Y9DE;LU3KA=9IJ;3&N1!SY9ZIX>^"^X:I8"('<U-_D
-M\T&VXJ#H%ZV]B@D@H;),"V*D9X4C"`FP'\*1/M;:K0<P24WQY$2Q%1A56E-3
-M`,`*;;#NMME"V[&#;;VIIJ%IW`TDID+LVRHD5E*,1_"DXUU1<%G/2P*S*$C/
-M.K.=+4W4*)V*77M;[[N$]UPG[#FA,;2-CY:IV:81^A.O'P[<$82HQA;M;4L@
-MF1<MRS%W[/#BD7)4<T(1^@5MZ*;N1S(NOA@^E"=0]VSRA'8#_.T.LV@FAD$B
-MGX0))]ZP30#^DB>)=<>GFY)KSF0(Z2L,M)=0/Z<OVQW$[S`Q+'[[%Z$/F<)Q
-MO9%.)!Y>_!D!1XVM,NB`3ZJCX)?JJS8<&P&D'A:OH@7OQPEWH")#>RDNNXT/
-M;BM6)3QJ%2YMJ"4AJF@#&])9^^0$-6<C/4V?WYWQTN.BA!Y`O9B`"3ILI'^T
-M((U"">1./,,"!7M@/-OI>_K(@GD;TTR(Y#KL[;'X?^A!Z._KDV%@N$/7(W<%
-MYOX*NI`_5X(W/XO_GY+`2J/KA.N;,EM1L-&D7/."^(-0J*JM,3_^#<>/R)%6
-M(6D>M0YC6U:0\^#$ZTVYZXY^`#5<.(`EM"5<`2$NR_U?X[4D_O#(]/^];7MA
-MP!E/.!34M7BG37C9QOZ>$//B6S'FQ9-!1F5$Z0KB?&AD:9EG">*!/2`HF)Y]
-MCM7Q*IQAL5\(:@@:0`W1P$%B&T^"3JV[K1!>,7WQ3/!21?EZ`-L2&B.*$UZ,
-M0O_*-]S1".I`K1D<@V<%RCO4M-Z5Z>EGZ&#*N&G!7G2OJI&=H-CSW`N?(F(O
-MSVX++J$L@()Z_\PB(.&XCBY"I\-OR:A/$[SPH&@.H>3_B+`7N!H)O?>(K@^%
-MN^N%_D=[C,`&V=2O?>X[8[/4.)70?=WXELX;.&Q9=@%MVPQM,\_6090O>`FU
-M.SRWB>LV`^!K7KB>N>O1EXAP<J+/9AZ?R^TP@OK<-4.H_H?NV<3:Y2E8,#P#
-MV$#1NL9#E(,/%I6P45)1HCWT-98>;+JHX'\$SYH4,?4#4U"#WO`9WG_?\/S>
-M3@%['DVYYEE]4"2+XUE'%#_[^^OUS1\@V`Z?5\0!27^OH&8>+2S$!P>$0.)>
-M_Q>X&\-04[^!#*3EP_U%/O_([WTH^?C^(32!+KC`$,;7);X**$"=W5KS.2"*
-M]?4Q'P=68+#YJL0@[0=GT/K:DQ$KR@5%;;XJ>*F]@M<..^JP`H(WG@F5B[8Z
-M#>CJ-+S2-/SM3N?]+(?D`%'9@)K&]-QQ-97$T*[<P<3!FVJHO%]!D?V>!5<@
-M1S@X&[H]?5A-SFYU/,-`4N:YCHUS$&('"9TN@NS7JT,`X&/U^PCBN(Z%\P/(
-M=I"\\"P0`!0M'GR`'(FO<B&OJN7%<Z;U=>B33`V0VFV&2JOM[8?N1X1Z0-K(
-MC\W`;DB'<C&.M(%2=WF69-=1@J`!1!2/S66&^P2[\Q*V=C#XC),3,!F#/@43
-M($J(]B<GP@&MH@UZONO+GTY-"NJOBE8M>4/J/7M3R?Z<D@QW?%4M9FM]W^^K
-M+G1"VO_*'[\EW+\HV)!'-U6L^9=(9.L_;0M^9XCY_YWZ?VZG/DOT>5K?WD&L
-MRE*HQV1AEWRU4S:U#S[XO+P`@V>W5%=6S-K/A8<_N8];\:+`5F))S4M>0!'E
-MNL/=O>JF=AJ7LF7;:?:WYT[E^0X4*^PE-<G=;O<EL$DW#.BM\,2]N"_P"<>Z
-M$MPV1\VA$5T^7'-Y.U"!3[/5"B\3<JP-NX"F^[X%=9NVA?M*N,51&ZVMSI""
-M)<H6QB^(<71T)$0W1B`5Q!'_OL`GL#/8TB<)\!VVP="W:M>JP7YX+[M61OZU
-M5_7\19F3$A`(D?;4@=VV:TO4/:3_PQ:X75BK=7FOM9'-'O'9JR0X^*"OUSR=
-MD9"C/E344-3J@6PDOP(7>'36K:JDLR6V(/!`[HFAD9?8$&NR->^PP)N`0O;V
-MH$+'278=+U@,,]NP=2?=85*%-4*!4P(%J_*FYF;[,XK&8`';C(MU5$Z7T@`'
-M'W8*P$?ENH;EYOY^^]5,Q&"/+V*P8HX;GW(."'610M$HYV<0_I1JMPY2()M)
-M#>&GM\?[/['7[,W19RG4,%O$TTA,"S,6FHS\-=;A[L"GH\^=YDUPJLY)J/,4
-M[;QH0KL>A[R"O2I/2]']XPFO1K/@FS6=4]`5(0L:[/5[%I;3(N&I@&V_KB,?
-M^A7&)QP.[M=<`N!^H1XX]*R1>XYW+!5&I0J\3_OTT^=3.8@,TNGZ7DLI6!*9
-M#CMN5_,$?OR9#@SD4+TN"`_2\=,J^(GP]Z"N'KS#V.0^3S2Y.U%VY5"C36C?
-M'VQ55&39A%MTXE.*1,H`8YL4\D;![K,-`SO(>\SIIL`H%N$M)YXA/'>DX::P
-MYPP1M321U&RS`\:&C3EBR3C*HY6(I;@L#2:_$KWJP-(<^R<+>J;M6;UTS6R4
-MS:)$J_,)3PI>(S<Q6Q&-I)+B"*P'<=`]IX5'$,DCMHK3>(5G2]>;LLQ25`!,
-MYO(<L$.0MS'LXY1S<>%+5]K7/,END1@BS/+HEJ9PKW>A[`)7'O4-%JW7B;QL
-M+]BFP+A)][KR.OCP)N:W>"7/DXX@A3>P\%\D#\9@#R;W`)YRVATHRO6],!:L
-MB=]F^:_=YTPTCF+<6:RV@UU@E(JG(LH*M1&0:;#95$/>[5-TE!F_B>GF'C;G
-M74F<UP@'XJ.K[OD492F[:A<C.NVS/-VW>A_/'%"X=D%^T`:B74PQT9P/@'X;
-M2A#AZQ@>#8X!CO2%V7":Q#``+CHM(0DFG-($#$SOY!FEDJM@=TT+S1^%QB6=
-M6Y[6P/=?`[YJ@`T/"QUD1J\`;A!_'-9>X7A#%*M7#8>Z%_&L7()"#RJI7F/1
-M=<B.:]C[&G;`\4L"`7R_`RPU8*H^0YX^[>(8Y94[\+M.=4C\+8^7EJX]?&!,
-M/!_OF'==@C(+I@GBL=78:!*I73$]?7[SFQRR:'9?^9;';[)?^4[V(6D4&6N<
-MK]`5QW,5V:K0@#H2/.54&2GC,J%D(J9VBPTH7AT9*_OV,+!$H4!(7P$-[&`H
-MRA\#"V=Y0PC11\.`N7TMX?:=<&";EF?IINL,KSI2$O&MB$BZR:*["K-YVDW6
-ML/(`N8-WU*+CAD28.JJ)N.A^K%+3]\=^)`/0XZA<8OR'[5U[PM-ZKDXW:TU?
-M1#&FHP(V^A)"WP)O,$7-*#6.J4R6!L\*=;8EE$Q^V#CICCFTV!*UBBUBSJ'1
-MI=Y$9-<S"Z*';82H3"BA\';9'^`UH1B0&D=#69>V'U!-1U!Z(+Z@``GH?DA>
-MKU3:E0Q!J\ZY/H0B2@@2PLND+@#J>P)9?XIT/5G/0$;J%YNJF&I$T8UCY3.`
-M#2[:X6%V*V(.,L1;"L$:NTP)1_B5'D;1>DL-\+Y&?Y1(8KUC5&SC7H\8[JX5
-MB%1+&HY[5X$%01665;6J8JP-4.>0<=PYJ1^1I"I'^EBJ^ZCN\H&+5`=RJ,DU
-MI=/C&Y"J%'I\B[,U7M_DR(G*RY91L70W4.'B@YW6TU$R'9E_:T10M"`@Z\(,
-M)9VDO\5KX=^/,=J-^`WA6K#.MHR=2J*:ON(PXLR#HDAU5F^X(_H\R0(]"M\6
-MXGV3[`-%=D4R587XJ09:[Y-<PN?3QV!2HQ)"`>`K+&.5!3ZADN];W,3YSN4U
-MJY)_(=<52]@CLB&7HT_N,?QIL+`GQJ_RL,*"`F%]G47Y3+&T"^V>48UK6Z:E
-M[:S,-6ML=C`HK%XP]CP\75!^ATS=@%>[%D]X<)?308^>)-E4.QM9HQ`:"@L[
-M"J%.A<]P3(W/-"W%!L2WMD`?9M-?-:*HP&//@;8"!/4*KIX7J),T49'KKWLF
-M#E0WIE5_WQ.$@749A/U1@/FLFL:QUH]413P#*"'$EST5:Y_J(Z%*,EB#U&&[
-MZS"2K.!/:/ZAU?PF&'FI3*&K*G"V)C!(-<W1.<_C.;3%H!6PT:M732^%Y5NV
-MH5J7SL&(Q3@K2J5&E7>+X@);U*>/KO*:6SXH5371S+1/3I2<5S76VYAM4=/(
-M;Z;HD`FO]LX@#`UX-..Y#+_0`RF[3_BA'*)](SYJV1??8BX`6_V$]H3M']9&
-MTWW#ML/^4#^#E1[=';U!M.NX9$?8S)W0.1]^-W0=74/[$!73.&94RBLT\%C5
-M=B;B@T2@<5S1>"-H8/4?IQOQQ2JT^:M-4L8'ZR@OA6S$0Z$'#N'I4'!90Y-D
-M^JFB=RSH`?L\`BR>X(?&T/RG6^*XGGU&E0032WI7H;\5Z%D>+^(4/Z!"OO3]
-MZQ-4T,SX_2(35-X<551^4A2#QVV(]P2^Y1C>U1B_B"3\XQK_;PH^]&<\G>;W
-M:_RN2T&&V&AYYP(7D(T:^>?.OYW0H;+XEAQQ:B33`C-*ANQ=Y>Q-YOIT]!F]
-M&M8R1Z=OQM_(\7?7[2ID_OX[^R<0_YU#Q,0P2^;,P"P8;S';0"0'1UZ2[\IV
-M@U$*PD^^EQF>WC?DCC\W18*<_N%]O:QVU5]0C#]M*,V3:%%L$7HK"<G-LE8G
-MZ7"JX2.07VWY<)NM7[]^#**X99,?-FD1+U*P!.0E\.>$8].X7^,S&OD=PO8^
-M5%6__,+>G3)E<HUG4`!QJD0TE67MR@W#VR4Z#I%3"56/#T^LC!SYGZ50Q1)V
-M\)ZM#VKUG3:SLB)<GZKW''1&M'U*+^WU\/2IN5)C[9:;563;B6MTYKL3%A6<
-M!GK78P#WMQ`Z*!ZM0OSG%K![U^K%E!A1[Z;$".44(0KD4LK8LDIJM+0OO4JN
-M(:O54]=<*BKYIR#>32&<88X&V*S1L9R,;J(X:69K`KOX<:KZ^","S;1`1BW2
-M&4DI[S1I&CRFY'A/<=SHX@!O=RYZ=N#7'0*"?X!MK]QP->@-YG^&_I5C0&J9
-M^`.E^B?H]S@;0)LP"BU'V4U"R=-\"@3A]]MC[6B(E$0G<U17`"H$_.Y4FNM4
-MRRZS,B*]U2@U:9]PZXY!B1';"E5X"93UIZ//.X._XRA$0=K83TP=T]2;GY^:
-M>TMSQS^I#8><_X'6UJX+(:'A@S?;&Y3T;:6S2N5-:_F4E78+_%U%G;:>[1:V
-M4*4*'K<#M0D>E_`DE.SQ:A]O`D0EZJGZD?DHM"_?_8Q'F5D*E0>>F$*4Q7_R
-MDD^7[^.W[W[NB'_V<AM#OQ,5Q0;R..3K*+V_C>ZW2BAODZ;0%+JIZ?KRJ,KU
-MSRW/AUAO.WV79064A(4:"L2(&@K$""U'/'9GMT`%'J"JL=-YIC1.-;@\Z)!0
-MUEU%N*U\2E!3&X,]\=\5V93V0+YP#(D/K]W#"]MY>QSBS?5#75(_?2#3?$*F
-MGM?^L%7RMI6`7<>"='9'78Q2"8M;A>:*&"'>,Z,76I[75O&KKEO>;JR*Q=;]
-M#'9$/7&4,[N3=R"B&@?(ID$<AWA4<^5.\-MCJX$3W/7YG2S">]F=!HA0@/?"
-M*\MWW/^IWEA;$HFBWP/_PRU84[%)BUU8@T`=BX'2:$K\((CIK,F6AF-N03]^
-MS^N^QK&%OFU?TN.]9\Z]<]Z/#_B`&=GXKG>#'K6/J(RW&86P,G-NG],XN,3Y
-M)/`,)^.4T^1/R6P\>5<;?H&IQW]:TGSVTO(&V#B'E:J?;^`#CQ>':QIX2BC+
-M3WEQ8#"J!,!&A0X=@M1F/E:;/_/%Z4FPF;Y9]Z[/3!!&O?8(-F"#W0E0K4[I
-M<>OWEP1/`^;M=;)6O.RV<QG%=\#H3CC+>G"5S$:=UN`L#QSF@]OYX.8.)%$N
-M.,X%7Z"K(LI-^9175>7&AYQQ-*FCZ3#9^*G`@R'\!<,AW^&!SD.)"9$L%08\
-MH[!S!7'LJ(?!6B_N.(DP2841[L^S?DKYC(G<U^V-^H/06![-<*R[N;'"?SMP
-M!T:KDOH!@*M[X*M@.ZXPT@KQ#,HMA!8_&AK8O$+-3L7-Q>OS0[)2I5KM$6#-
-M!N"KXZ<6?$K6VKA45'N`JIX78[,.]9-2[8Z9M823@-@_\FBVA+@%%"Q.J,[4
-M$Q=X9:>@,DOC1FN@CL[5%+TAC51^/:;_1&YP/?Z=W+^\@"M7UO[D+!`&TV?"
-M..1('38/,ROH"+Y].U;?ZR>9941V+0-L(9!;QLJ9]*-><R'Q!822M5J=REIB
-M;I+5:KGB^05==DW=?ES]_ET"W"7"RN*:/%CRR&S]NDU2B)0!:OU79=AN1Z:=
-M?[1;0U(TT5*W<B-/5U6^,JDJ9CSFNA)R'2S-@14G#]8;$Y;V\BWPD++02^9'
-MTX-AI7^M1;G6\F<"Q0D2L#K2J;&5YM0&2"P/B1*8EFS'_GV[W8GCLLTB<VH,
-M@S!GYXYT(IV3GRLV&#D!I8.,@=K6^^"-3)>@T>=<%+_O1@,%ODD0!'LNT?,%
-M=^MVI3*B/(BVCSC<(IKM6XH3+M8\&F4(3PFEZ<%1B"XV6R-IHCK,E$@^G.]T
-MYU^LF?!;M]1\2852/NP3'9HO`/^4QIB+*S=+NA9#9-43S`IH#WUV.BPUS>,4
-M@R.P>GK92"VQ.CE@=.\NZEU5@:(@D<M#`=%H]S,Z[3\0D*P>T#=@JHB%W!2`
-MYYS*<!BM@[?>!\NB%:"!;\9/\^DV&$L#U^G,^\&XIJ_/S^_"'<P;)M"1KC0U
-M6Z)CMEPDLLQF:\EWW1K!()2YLS]V9[3(V5@D^DV/ER9IGQ#:!C;,M>W34GCU
-MS+[VA)1G8:!+-URS02=;<^:2"AQ]\-T*IL(>HF@4MDNS3GKZZ)RGK5C#E1B'
-M/8&0)[*VS::M9DA7P#ML]`=(>""OL".JR<ZZV"%"CW<8R5]02P,$%``"``@`
-MQ+U<*3UXNV48!P``$`\``!(`%0!S<F,O4F%W<FET93,R1&QG+FA55`D``Q])
-M^SFT5/LY57@$`,T`9`"U5VUSVD@2_FRJ\A_Z-ENUX.6,$V]V]^*[K172`%,E
-M)%82?OFD%6@`79"&DH0=)^7[[??T"&P<.U>U53D^@)B>?KK[Z9[N4>_XZ'N9
-M?G]TW'O5>M7J'?_]58N.R=:;NS);KFIJSSOT]O3TE**5(D_5_="A@=X6:5)G
-MNNB2+.8G1L5:K\FH5%2J2I4W*C6"K^&-D[+."AIM*Y4G14'_S,W"[^FV^G";
-ME.HD5;_];V0R7]$JJVBN4T6W246INE%KO5$IS>Z>F5CHDFJ$,5.%6F0UZ85!
-M2("_BPP[RXJ2(GTYW`.S@4JSJBZSV98%1@7*!'.5WI9S959F69&4=VPWK[IT
-MF]4K@@O\J[>U@<EUFBVR^8Y,A$T;5>9972."3:EOLA0/]2JIC>,+O5[KVZQ8
-M(N`BS5BI:D*`8J[J]^;/FY,OO*L0Z=XMPU2^K6IP62=PEW&3F;YAT2Y)!@6?
-M0M?97'6Q!12O`<@XCY9-B$_=@M7Y.LER5394O7WN"DP>T+)W!;&F6[CW?_*&
-MFD#W4*F>;W-5U,D^=SVD16-#27E2JS)+UM4C_29OC'P82!/?V8DIE"+)%7MC
-MO-\BNXQSQQZCUK@NX)DF5:2Z1(U`"NQ<UXJ:L.OJP3'81GG3`O(FT$HO:CX.
-MNZI9KJC:J#G7#)0SKJ:2JZ5HZJ:J]JXU9V,D0PK]071I!8+P/`G\"^D(A_K7
-M$`KR1&0JW)]ZCA5)W\.!]NP3LCR';-^+`MF?1GX0&K0__[1"@/SP@Q%;WC6)
-MJTD@PI#\@.1XXDH`PU)@>9$4H8%RIX[TAET"#'E^1*X<RT@XC7=^USCQ7)7\
-M`8U%8(_PU^I+5T;7QN9`1A[;&\"@11,KB*0]=:W`P$VFP<0/!7&HC@QMUY)C
-MX9P0W(!I$A?"BR@<6:YKK#[&S.X_"[8OX*O5=T5C#,$Z,A!VQ%$]/MD@$RZZ
-M70HGPI;\(*X$XK&"ZRYPF^;G>Z'X8XJ-V$".-;:&"+']=78,,TB5/0W$F+WV
-M!P8HG/;#2$;32-#0]QW#>RB""VF+\)Q</S3$34/1A97(8@<8!JQ!C.?^-)3,
-MGP&37B2"8#IA!CHT\B]!$'BPH.X8LD$,APVN_.":@9D/DXLN78X$UI%U;Q]A
-M%%A,20@6[>AP*^R"U.@@7E3=T)5#X=F"I3XC7<I0=)IN'\B0-\G&_*4%VU.F
-MP&0-WC6/!X7=-;DE.2#+N9#L?K.YJ0JP(G<EA.5P:H]V*3#'!%.O]3I;T-]2
-M3(1"I6UK<!4'UF6`/)R]==QA/(KC7W^R?K9^.3N+3X7UC_BG4_%S;`G[37SV
-M[LQ^\^X7RWIG_QK'37S"B3NMUPT:?0.PQKUX'-HQY^<W>H/AV7J]*9-EGI`N
-MYJKU&HT%>WJ]9]M:O6_Y`1K90<(-1R&<-3?89*V7K1:Z;%5](7M/F^ULC39E
-M.\VNST8?G;HNT?+0IUK-AO<M>JK:=B=VA$*B+$^6:I"ME8?^VCD_@GY5HULG
-M9<J-OP'2)?3_\Q2@<\ZA4V.8G*1.L*?7^_R9$\)'H_UD/PKO2!7;G#Z3=!SZ
-M%W\_YBUV<&S](=V?8YMMZWRF^_KC41ZGW*LKLQIB+A1+K&&N;[8UK_5Z]_=[
-M<R@R=MYFFBZS3^S_$G>0,N$Q?Y.5]399TV);&%H(TZ\L,7DJ5FI\OI!!-+7<
-M+]QN'6%^U&H.E/>MHSW.C<Y2<C1'+3[.5TFQ5&W[\-\Q;9RKAD['N>HYS@55
-MV\U&E_6CUSN#AD:9;];J85RV#FV.)(X^Y?%*(A_G(/EA(<QQK6I6L>Q.^M?H
-M6GF\J"0GE;<ZEW[@/"Z%V2<%WA[7*\7)#3]DFQU$4Q1Y;,J"2\*L]WW?I6GQ
-M*=L8F/;.5%8@#QQU=P=H%MA(YYQONEP/-%^I^8=&8JX/JDAF:]7#G.=?^NZ2
-MN8ZTDU4?OB/,_5H7K_8F+S"J%W>2=5%OC(8+U;8L*`JF,+]X49M6N*/.%,9U
-M8RIM"F/X4`RYJBI$@>O#YJ$@#NI@'`Z?U<`^[\8KOY!%5C>%S\?@*%E\C/-J
-MV52%7X1W%2H8M^&T/<4$H$(Z75!K!=:8UI.D3'*FYTNM"2Z*]1.X$693R,V[
-M^&.KRCL'[8B3_9))1^&@ZKN71/U2WU;J)8FG;IMTOB`SO'Y5:IL:#Q^*I]TY
-M/(T@$/\<@=M!(.(QAB$F03RV)NT.$LO5MQ.9\3BP[+V0TRZ&TCL0\/VC[91Z
-M@YL`_T1)N50UXQ#FH#/&B/2=-E,C"EPJ.VW)]>C/_@W?CG=EB3GO`]'E))B%
-MSOD+^OX-J_\%!5<E-ZK3?D&F-W_!#^$Y+\7;:=V;!MO4I,3M)HABU[?-;>K^
-MGGO&.)N7FN^N=)%57)WVCS_B"HLWK:S`.Q:.6]K<VR%*%>9'F>Q>#_(<+PPX
-M"^L['!2\(C3O!)M2W61ZRQ?_0IVT#F;>MYW<K?\"4$L#!!0``@`(`,2]7"G9
-M<FD9M@```!T!```*`!4`<W)C+U)%041-1554"0`#'TG[.;14^SE5>`0`S0!D
-M`%5/.T[$,!#MYQ3O`F0K*"AA)2IHLA=P[`D[6ML3V6-0.#V.:19I7O.^FHLB
-MN1O#KE)1M17/\)HVB8Q=&S)S(,(#WF><^6NV%D3Q=#!5$\.%("::7<3:,Y7H
-M5;>]US%6C5&_)7_^*5B+IB%\L+W,9P2I5F1I1QR23>]%JFT)4MB;EOV9J!9_
-MBK(<\*<4^CWZR0^Z[G6@4].5Z(UM%!U?1#;&3\_\'W,YH.7-^1O$^O3P#]O]
-MZD2_4$L#!`H``````!@#72D````````````````(`!4`<W)C+W)E<R]55`D`
-M`R]2^SG/5/LY57@$`,T`9`!02P,$%``"``@`Q+U<*;4HD(!!`0``-@0``!4`
-M%0!S<F,O<F5S+U)A=W)I=&4S,BYI8V]55`D``Q])^SFT5/LY57@$`,T`9`"U
-M4[%JPS`0?8X*KJ`4CPUT"!1*APX.G@(%]Y.\"6_NEFX"#^:F?DJ]=.S0H4/_
-MH&/&0H;K279MQ21#('WRT].33O(9G8$(,RP6"1R^9\"M:))T_BX"+I6HC!?"
-M1V&$,[]6S7``E7]059VX)H.V;47=#/L'S)VXYJ9<=W*H%(B+]`BOB4#6]=YG
-M&:UJ*U/:]O&DZW3TL2$J5C;TI81/O!Y]Z>)I.#\VQA1!OA-_/+2\24ZWPX35
-M+OTQP)(E"KV5_`)/=G<_0<8Z/)]"?TKP!#_(>;/#JWR#BY>.U\('X;WP/._6
-M7WW<@.<GYJ^,^4,Q?]XPOXE_WS*OM[P/KLZ3OM;_ZKS%/]9Y)C1JOT*!**-:
-M[D)G-I)NKI>-:4JE-1GRNFP:4ZHY.>_N+)7J,;+5:WPP\U;^ZVI"1/WG!,0D
-MILL?^`502P,$%``"``@`Q+U<*9-Q;5L/`@``.08```X`%0!S<F,O<F5S;W5R
-M8V4N:%54"0`#'TG[.;14^SE5>`0`S0!D`(W446^;,!``X/=*_0^6]MY`:)?U
-MT<&7QBJVD6W2Y,E*$S,Q13`1TG:J^M_KT$V)4V<;+PC\<3K?G1D,7E^Y,`1R
-MX`1X2D&]O5U>#`:(5:NVV39EAXA]LIOFIVV1ZG;KJD'?;6W;96?7J*I7F]W:
-MHK+:V*O^LV+K7C_^0G+YW%:=3897[6J_<'GQ96W+JK:($F;P6!1Z+.8H<$4O
-M411'QY[\U<>1A]4_<.Q'EOA!4@W)T!"*,W'GXZ$?6;@J&<KP'9@)S33(_\2:
-MZ@S\R(F/&2BUEP5/!<NE>P)RP-=A_)GN\<TQSEUK9\`+9B:89L?P`W_U,99@
-M%J(PJI#PN70C'^_GAJI[%*[S-Q_W538@I9`!?.MO4!5IZO85CNS/1I_&;$[0
-M&1S[D:>"N2+++(Q/.J@TEMI,*=<AG/AIC#$QZI[FX<@G'9Q"EI]/P^N@-`Q3
-M/I&800@/O3JGO^L<[HL[*9&O/\:3!V,['?MZ+,6#@C.5COSY3XT[A'FAS^K$
-MUT32&:BS^MK7;CXG?2_#^N9$0ZJ%#'?':7<&^E\7MR\=<I\M=YL./2TW.[M%
-M9=.BVCZCYO&'777;WKG@5>D<PKG2!:'"4#X3]T#ZA=I;D8")X-G"J`4;BTP=
-M$C/.&`YS[8P2A4S!S'!6P*&SMR'LSCS#G/@6)</1*`YSKJ7(3KC;]"BD79)P
-M&OK//]/6ZZH\W-\!4$L#!!0``@`(`,2]7"GP.R)%E@,``!H'```.`!4`<W)C
-M+U-T9$%F>"YC<'!55`D``Q])^SFT5/LY57@$`,T`9`"U54]OVS84/]=`OL-#
-M5Z!-H#E9=]N&8;1$VP1DR26IN+Y5ENB8F"0:(I4TWWZ/E-UXR[K;?+`ID>_W
-M[SW)MS=OWK'ZW9N;VZO)U>3VYL>K"=Q`;([/O7XX./A07</'N[L[D`<%F7(S
-MD<#<#%U=.FVZ"%A734,):1H()19Z957_J.JP\3V\5=D[W<%RL*HMNPY^:\.-
-M/^K!_OE4]FI:J]__&QG"ESQH"Y6I%3R5%FKUJ!IS5#7LGE]1[$T/#FWL5*?V
-MVH'9!X02\4_.\&1OH>SJ?[=[0<M5K:WK]6[P&Z$$BP'IK!GZ2H4[.]V5_;/G
-M;6T$3]H=`"7X7S.X`-.:6N]U=0H3;<-1]:UV#AT<>_.H:URX0^F"\+UI&O.D
-MNP<TW-7:%]G1`A:VROT2+GZ:_D.=1:=G62&I=K`.LW0ERO6XY<X\^JU3DP(*
-M?CKC=*4B/((1-PCH<5Z8@\6_RT+6JBEUJ_HQJH^OI2#E12QG*>BU'E#>_Z0&
-M1J-GJ-I40ZLZ5YY[=XMM,7B@A[9TJM=E8U_B#WWSR)=&1G\_3\.@=&6KO)J@
-M?L#N>IQGKQAGS<\%*C.@NMKT.".XB]BM<0I&V\Y^$X;<.-ZPQ_W1J#5[YQ^'
-MT]0\',`>5>5G!HNUGZ;>3TLWSHVU9VGCL[%D`D0^EQO"*>!ZS?-[EM`$9EO<
-MI)!1&28\+[*$2)9G^$!G\11(ED"<9Y*S62%S+@+:ER]$(,C[]V&;9%N@G]><
-M"@$Y![9:IPR!D8F33#(J`E1:)"Q;1(`PD.424K9BDB:CNCP*(EZ70CZ'%>7Q
-M$B_)C*5,;@/GG,G,\\V1D,":<,GB(B4\P*T+OLX%!6\U82)."5O19`HH`ZF!
-MWM-,@EB2-`VL+YZ]_%=F9Q2UDEE*1S(TFS!.8^E=O:QB#!,EIA&(-8V97]#/
-M%/T0OHT0=WSYY9F@GPH\B`<@(2NR0(L?OI].2`9;%1><KKSJ?!Z`1#$3DLE"
-M4ECD>1)R%Y3?LYB*7R'-10BN$#1"%DF\``^#J>$VKF>%8#Z_`,8R23DOUCZ!
-M:UCF&PP(<R!8GH2P,1AO&[/*^=8#^SQ"+R+8+"G>QZYG9X>2$Q^)P!1C>7D4
-M>3%4>>$7IVZ1L@7-8NIW<X^T88)>CV][SH0_Q$;Z#4'NPD<0NH;JQN7%8$>A
-MM\#F0))[YN6/A\>IP%38:83PMBCBY:D%X3'!?[W)#[JKF@%?BV^MJ\O]U^GA
-M[00_?P%02P,$%``"``@`Q+U<*:J/-8$-!0``[@D```P`%0!S<F,O4W1D069X
-M+FA55`D``Q])^SFU5/LY57@$`,T`9`"U5MMRVS80?;9F\@_;<::Q'46*W5R<
-M)I,)14(69BA2Y<6RGQA:A"Q.>=$0H!TWDW_O`2C%2ISTI:T>)(A8G#UG=['+
-MX='>8YX]WCL:/NH]Z@V/GCWJT1'9]?JNR:]7B@X6AW3R_/ESBE:"/*%&H4/C
-MNJVR5.5UU2=>+0;FB%449(Y(:H04S8W(S,;/\*9IH_**)JT495I5]*XT#SYD
-MK?SS-FW$(!/O_QF9S%>TRB4MZDS0;2HI$S>BJ-<BHZN[!RZ6=4,*,JY$)9:Y
-MHGII$%+@;Y3!LI&45MF/Y>ZX#4262]7D5ZW>,$=PF.!.UFVS$.;)55ZES9WV
-M6\H^W>9J1:"@?^M6&9BRSO)EOM@$$[)I+9HR5PH*UDU]DV=8J%6J#/%E713U
-M;5Y=0W"5Y?J0["3@8"G4[^;/\>`[=A)*M[1,I,I6*L12I:"K<=.K^D9O;9)D
-M4/"I:I4O1!\F"'$!0(US[]E(_)86O"Z*-"]%TX7JY"$5N-P)RY8*M&8MZ/U/
-M;*@3NH7*ZD5;BDJEV]P-D98:!@V5J1)-GA;R/OPF;QIY5TBG[[>!*90J+85F
-M8]BWR*[&N=.,46NZ+L"L)E%E=8,:P2ZPRUH)ZF0K^948?*.\:8G]3JBLETI?
-MATW57*](KL5"UPP.Y[J:&ETM55<W4FZI=7=CPD,*_7$TMP)&6,\"_YP[S*'1
-M)389>2PR%>['GF-%W/=PH3U[0);GD.U[4<!'<>0'H4'[^-$*`?+DB=FVO$MB
-M%[.`A2'Y`?'IS.4`AJ?`\B+.0@/EQ@[WSOH$&/+\B%P^Y1%S.G9^WY!X>)3\
-M,4U98$_PUQIQET>7QN>81Y[V-X9#BV96$'$[=JW`P,WB8.:'C+14AX>V:_$I
-M<P8$&G!-[)QY$843RW6-UWO-FOX#L2,&KM;(99TSB'5XP.Q(J[I?V0@F*+I]
-M"F?,YGK!+ACT6,%E'[A=\_.]D/T1PQ`&Y%A3ZPP2#WX>'1,9I,J.`S;5K/VQ
-M`0KC41CQ*(X8G?F^8^(>LN"<VRQ\2ZX?FL#%(>O#2V1I`AH&4<,VUJ,XY#I^
-M!HQ[$0N">*8C<$@3?XX`(0X6CCLFV`B,EHU8^<&E!M;Q,+GHTWS"\!Q9][8*
-MH\#2(0D113O:-85?!#7:T8NJ.W/Y&?-LIG=]C33G(3OLNGW`0VW$._=S"[YC
-M'0*3-;#KECN%W3>Y)3XFRSGGFGYGW%4%HL(W)83'86Q/-BDPUP13K[>?+^F7
-M#!.A$MF!-;Y(PLC1/Y,D.;&L-V].7SJ);=FODA>O7CO)Z:OCT^3%\>G+$YN=
-MO!Z-3Y*D4\:<Y+"WW^'0OX+I*"73T$YT3M[3,09F;W_=I-=E2G6U$+U]-!/8
-M#(</S+Y2.+<3=H&TN,SR]O9T=X$U^[0H6DR`!BVEN'MF6I-4[7+9M9QYCAYU
-M*VDE4K0BJ8E4W8%WZ?(3FNI@]9ZV'\!-QS9:<---.ZGPG389GI3KND)_E=^>
-M%Y_4#\[CJ:ATW_K..E,+5<#^*W=M+-OUNFZ4&>6\0JNNA(*H=0$2#;W`BT99
-MHJ7;=:6:NH"`D>^[9*?%8NJ\/,"TP-@87>("'1%&>HJ+,O<#AV3^%R:+':*]
-M8V[\2JM4K@[?]GK#X>?/.H<<-SB($M>W3<?X\J6G^>2+IM;]F<YSV:8%V4^?
-MHDWC;2*O\!ZA*,VZV82M3&`2->EF!)8EAB(&37&'^;#4\=.38]V(F[QN]7"K
-MQ*"WD^/_JCI[?P-02P,$%``"``@`Q+U<*0"'"$/$`P``E0<```T`%0!S<F,O
-M=F5R<VEO;BYH550)``,@2?LYM53[.55X!`#-`&0`M55=;]LV%'UN@/R'BZY`
-MFT!SXO1M&X;1$AT3D"6/I)+FJ54L.A9FB89$)\B_[R%E+]Z2[FUZL"F1/%_W
-M4KHX?_=!5!_>G5^<GIR>7)S_?'I"YQ3;[7-7/ZP=?5J>T=7EY27IM:',N(E*
-M:&IW;56ZVK81B78Y"EO89D-A2T^=Z4WW:*HP\2.\>=FYNJ79KC=-V;;T6Q,>
-M_%'M^K^>RLZ,*O/[?R-3^-'KNJ>EK0P]E3U5YM%L[-94=/_\BF)E.W*P<6]:
-MLZH=V55`*(&_=X:574]E6[UM]XA6FJKN75??[_Q$V(+-!+K>[KJE"4_NZ[;L
-MGCUOTT?T5+LU08+_MSL78!I;U:MZN0\3MFEKNJ9V#@ZVG7VL*PS<NG1!^,IN
-M-O:I;A]@N*UJOZD?+&!C8]POX68\^I>Z'DX/LD)2S:YWR-*5D.MQRWO[Z*?V
-M10HHN%KKZJ6)L`01;P#H<5Z8@\5_R@+K<E/6C>F&J*Y>2P'E42P'*?!:[2#O
-M?U)#@]$#5&67N\:TKCS4[@)EL5C045,ZT]7EIG^)/]3-(Q\;&?Q]'H5&:<O&
-M>#5!_0[5]3C/7C%ZS?<%E%DR;64[]`AF@=U89VBP[?J_A8$;[4TKS`]&>[MR
-M_CCLN^9A3?W6+'W/8'/MNZGSW=(.?=/W!VG#V9@)12J?ZELF.6&\D/F-2'A"
-MDSM,<LJX#AV>%UG"M,@S'.@L'A'+$HKS3$LQ*70N54#[]HTI@'S\&*99=D?\
-MRT)RI2B7).:+5``83))E6G`5H-(B$=EU1("A+->4BKG0/!G4Y5$0\7HKY5.:
-M<QG/<,LF(A7Z+G!.A<X\WQ2$C!9,:A$7*9,!;E'(1:XX>:N)4''*Q)PG(X(,
-M4!._X9DF-6-I&EA?/'OYK\Q..+2R2<H',IA-A.2Q]JY>1C'"A,0T(K7@L?`#
-M_H7##Y-W$7"'EU^>*?YG@8580`F;LVM8_/3C=$(R*%5<2#[WJO-I`%+%1&FA
-M"\WI.L^3D+OB\D;$7/U*::Y"<(7B$5@T\P(\#%+#-,:30@F?7P`3F>92%@N?
-MP!G-\EL$A!P8MB<A;`3C;2.K7-YY8)]'J$5$MS..YZAZ=G"H)?.1**08Z^.E
-MX$6H^L@ONNXZ%=<\B[F?S3W2K5#\;'C;2Z'\(C'0WS)P%SZ"4#6H&X9'C1V%
-MVI*8$DMNA)<_+!ZZ`JF(?0OAL2KBV;X$X9B$K]Y/%3X'K2$$H)#&5Z:^>A\0
-M,5SOQZ/+T7@T?O_F4IR`O)#PXJ]Q=!F-H_';F"AE,!TP9>E/KOE\13?XYOCW
-MT`O+=U!+`P04``(`"`#$O5PIV57>%S<#```#!P``#@`5`'-R8R]V97)S:6]N
-M+G)C550)``,@2?LYM53[.55X!`#-`&0`K51;;]I(%'Y'XC^<NB]=R2(VT)3T
-MS9>!6#&VY;'91(ID&3S`*+Z@&1-::?_0_LN=L4W61"5]Z0CD.;?OG#FWS[3<
-MY,>,@/)*&*=5.=HKP\%PX-AV8IA^')G^(]B.X?H+\<&6$=J&Z2(`396_\>2K
-M"K/Q<("C)\&U<;+T;<.=A\82P3_P-TX"/XB#]FH90>3X7DO@)[Q$7CP<G+F*
-ML:Z.-83IB=&:3,8BC+GO13!305EBP&G)`1-&MT)@HH7C#0<@CF,)V]YQ[#!9
-M&H[7A*`ZMI7@R(@<2]5U5?^FCG5UK+66;H0>HY[E"H58!)(8(CCD1<BS+NRG
-MFJK?J?ILIL[4%N#]P3CQ_"!$<^?QUQX4JSK\9'2WK^%?&&N:!LN4U;2$^R,G
-M15J6HV?V7!IY#HT2!T8X8:\D&RE77%[&-]&:^,;35ME&\R#&]V8<14V.%/]!
-M$2_R']3I1+W5U=M;59^JHA:+T(^#UN;"0-JL**<U[*N"'-(=4=J,Q.$\N?=%
-M?O7QUS>DX0!YMNR=SW1;9F0+H@[6<'#S)X^$DW]8M=W:TL/!"B?G\HG2^^=:
-MRKMXU]QQ4<?I5SE$V(]#"PF-(/3MV(H^5I(P<]=8X*6!'T#[,=FZS6.;M]K(
-MC!=]):%P)^4DY^0=?];PRXQN.X$ON5.WHZ*G``E:/],X-CN6YE[TONGZU@,H
-MN&:TW,UI3IQR6RF=['^UGJHVU>ZTZ5I3>I)+Q682##=&LEN+@I0U5\0$<D)@
-M7]>'[S<WI]-I5))ZS;-1Q7:0EME9DAWYRREE9+2IBAMV'N3GOK<>O`S8)GS#
-MZ*$6I91>)(O_Y#4I:"&Z#>H*,LI?8"/F1A!5_A%6UQ(2I[N"<C'44>AX"U"N
-M8;ADE^9O$RIA?C^N'T%%+,V$&GMI$OC+Y%VS]X576J:Y?%:9%D0"O"W&$7I$
-MUPP#1E_3FIA'FF?2*.8BB7O*X<"J'4L+F=$FF1ZI36S#]BWAT&2<PY=MQ6!=
-M5344)*/I7^<:"(D05/6>,+&6BNJ5I.N<=$K7PZFRXZ;VWC_A0K_9&A>7KEE7
-M*?NXJ3LO(M$ES].NB<0@:7<JZ*)@/=CS:FJF3G+%#OG4+JC_`%!+`P0*````
-M``!B`UTI````````````````"0`5`'-R8R]Z;&EB+U54"0`#MU+[.<]4^SE5
-M>`0`S0!D`%!+`P04``(`"`#'O5PI$J`FD2,$``#Y$P``$0`5`'-R8R]Z;&EB
-M+WIL:6(N9'-P550)``,E2?LYM53[.55X!`#-`&0`Y5AM;^)&$/X>*?]AZNN'
-M)+HSA$1W555.`FPH:G@1)DU3G60MZP%O8[QH;5](?GUG[9`8"(2S[[ZT4E"\
-ML_/,/#O[[+#F'?0$5S*2TQ@L_(J!7*`")TX\(6&HY#_(8VB+`.$#]-D<Z\9C
-M("8&C8:,W[$9PN`^1%7_[?+S\=&[?<$Z2'XL1@^:B0B\-.A[:$LU9S'\B2H2
-M,H2/9K6JXYR=@36`_F`,MM4=T_#X2)O'C5%G?#NTP;@1X44-3I:_?#RE!"P6
-M'*[$1#'U8$!U63VO7FI$J]VI:[Y$-P-8.$EFQT<_]6S':71L&/LB`OH+90P,
-MOK)`>#!G=S@E<B:,)4Q2KK%V6SQ5(XE$.(-^K_&'_3X7*HF0_!#LY4*J&'I/
-M48#+^9R%'NB/2L(<(O>81H/*%-+RFD3!,%_WO)4)<!9"M$`NI@_$FLMP*F8)
-MU597\-['4.<)GTGFP),'\(A5.J>YSAEM%U"5@)#:L"(;B)#63YL#N&3S18"_
-M'LQ;A\M4LEYUX_4(0QE%8J+KY$O!,8(I)5U?$E.[TJ^G&6&`+$(#3B;TS]-K
-MVJ>3TYV!,KZEPSSQL1Y"-A>\2+Q,]4V<B7!U&+5A.!H,H1$$\GZ(JI76RL(%
-MAAZ&7%`)J\].#N>N!NJC"X:Q9K^2G`5#%OOI1&LXK//`Q"4>'XV<5EWQ[)G8
-M=-L`QL\GM*^G!M3K.ZJ><4VC-QN.#=<1NKUV*T?FV9S6U\T6O,XW=1DD\2*)
-M74LH,%ZBYSVZ88QJCIZ@?K+/;\S4#)\BO4QM,]M/:B^?`ZALL6A85L:/B@Z5
-M4`9R)J%R<P&5SE]0&=2@8I%$NOV+FI$^]BV[>=W)GEVR6X,;AT:WY-RVH,)7
-M,=?"]<;?(V1*D_0`E8#ZZF7UTVIBW=9T6A>U^B3BNGEFPLGAT]D5L^>9=>-5
-MMTD1J._<:3A\((FMQ4CG-V-L&$FK]I5C[]?KJAD55NOY;K6N8N_7ZFM>991Z
-M_JI2-[*\2>,;5?KW)Y*5MRDKMY!2+6\[;A<,TZQDEXV"2?Y[VMWX1ODQ+5=G
-M=%TWS>AN9=PO[<.Q/ZPU;Z7;V:&W/`\\`M^GLVX<@?]EL^Y;I/?\)2?;@<R2
-MW5EVW#5>G7[I:+NQ^4W/<G:43!9@.#)1'$'?V:/\R;)PRI(@=NE]A70$QIF9
-M!S^A],N,QCB#ZU'+KIM?F!>@NJB9Z=[8=*-><WP+3=?PA<(H*@I7O'!J>C\(
-MZ*`41(MP.@DDORL.Y]+#J#A\RJ*X.+K<RF.%9:@GL0@*HLMD3L)4;071CWM9
-M:U-ZO+9.V^_(/#I-!YPVWSA<M'XYT?KE1.N7$JU?3G9^*=D50S_J]_2B6/U[
-M@5]"<_XW:\Z2_&W!'=+;@YE4(O;G9KR,"ZV@Y;-PAE=R5@@]LAM6SSYD^7JP
-M^DK-1L^_(OP+4$L!`A8#"@``````8@-=*0````````````````0`#0``````
-M```0`/U!`````'-R8R]55`4``[=2^SE5>```4$L!`A8#%``"``@`601=*>?5
-M?LEI`P``@`8```T`#0```````0```*2!-P```'-R8R]#3U!94DE'2%155`4`
-M`XE4^SE5>```4$L!`A8#%``"``@`P[U<*1.F^>&7!```2PD```L`#0``````
-M`0```*2!X`,``'-R8R]-1#4N8W!P550%``,>2?LY57@``%!+`0(6`PH`````
-M`"X#72D````````````````+``T`````````$`#]0;4(``!S<F,O3F5T0E-$
-M+U54!0`#6%+[.55X``!02P$"%@,4``(`"`##O5PIUXUH^M4#``!^!P``%@`-
-M```````!````I('S"```<W)C+TYE=$)31"]N86UE<W!A8V4N:%54!0`#'DG[
-M.55X``!02P$"%@,4``(`"`##O5PI?:0(2=,&``"O#@``$0`-```````!````
-MI($1#0``<W)C+U)A=W)I=&4S,BYC<'!55`4``QY)^SE5>```4$L!`A8#%``"
-M``@`P[U<*1UQ*OR[!```]Q```!$`#0```````0```*2!*!0``'-R8R]287=R
-M:71E,S(N9'-P550%``,>2?LY57@``%!+`0(6`Q0``@`(`,2]7"DJ=`*-!0$`
-M`"X#```1``T```````$```"D@2<9``!S<F,O4F%W<FET93,R+F1S=U54!0`#
-M'TG[.55X``!02P$"%@,4``(`"`#$O5PII[AJT88%``"1"P``#P`-```````!
-M````I(%P&@``<W)C+U)A=W)I=&4S,BYH550%``,?2?LY57@``%!+`0(6`Q0`
-M`@`(`,2]7"D^3E=*]`8``'@3```0``T```````$```"D@3@@``!S<F,O4F%W
-M<FET93,R+G)C550%``,?2?LY57@``%!+`0(6`Q0``@`(`,2]7"F*^>Q.EA@`
-M`!=$```4``T```````$```"D@6\G``!S<F,O4F%W<FET93,R1&QG+F-P<%54
-M!0`#'TG[.55X``!02P$"%@,4``(`"`#$O5PI/7B[91@'```0#P``$@`-````
-M```!````I(%,0```<W)C+U)A=W)I=&4S,D1L9RYH550%``,?2?LY57@``%!+
-M`0(6`Q0``@`(`,2]7"G9<FD9M@```!T!```*``T```````$```"D@:E'``!S
-M<F,O4D5!1$U%550%``,?2?LY57@``%!+`0(6`PH``````!@#72D`````````
-M```````(``T`````````$`#]09Q(``!S<F,O<F5S+U54!0`#+U+[.55X``!0
-M2P$"%@,4``(`"`#$O5PIM2B0@$$!```V!```%0`-````````````I('72```
-M<W)C+W)E<R]287=R:71E,S(N:6-O550%``,?2?LY57@``%!+`0(6`Q0``@`(
-M`,2]7"F3<6U;#P(``#D&```.``T```````$```"D@6!*``!S<F,O<F5S;W5R
-M8V4N:%54!0`#'TG[.55X``!02P$"%@,4``(`"`#$O5PI\#LB198#```:!P``
-M#@`-```````!````I(&P3```<W)C+U-T9$%F>"YC<'!55`4``Q])^SE5>```
-M4$L!`A8#%``"``@`Q+U<*:J/-8$-!0``[@D```P`#0```````0```*2!AU``
-M`'-R8R]3=&1!9G@N:%54!0`#'TG[.55X``!02P$"%@,4``(`"`#$O5PI`(<(
-M0\0#``"5!P``#0`-```````!````I('350``<W)C+W9E<G-I;VXN:%54!0`#
-M($G[.55X``!02P$"%@,4``(`"`#$O5PIV57>%S<#```#!P``#@`-```````!
-M````I('760``<W)C+W9E<G-I;VXN<F-55`4``R!)^SE5>```4$L!`A8#"@``
-M````8@-=*0````````````````D`#0`````````0`/U!3UT``'-R8R]Z;&EB
-M+U54!0`#MU+[.55X``!02P$"%@,4``(`"`#'O5PI$J`FD2,$``#Y$P``$0`-
-M```````!````I(&+70``<W)C+WIL:6(O>FQI8BYD<W!55`4``R5)^SE5>```
-64$L%!@`````6`!8`2P8``/)A`````&(O
-`
-end
Index: /trunk/src/sys/arch/mips/conf/files.mips
===================================================================
--- /trunk/src/sys/arch/mips/conf/files.mips	(revision 151)
+++ /trunk/src/sys/arch/mips/conf/files.mips	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: files.mips,v 1.58.24.11 2010/02/28 23:45:07 matt Exp $
+#	files.mips,v 1.58.24.14 2011/04/29 08:26:19 matt Exp
 #
 
@@ -7,7 +7,7 @@
 					# and the rest...
 					# MIPS1	MIPS2 MIPS3 MIPS4 MIPS5
-					# MIPS32 MIPS64
+					# MIPS32 MIPS32R2 MIPS64 MIPS64R2
+					# MIPS64_RMIXL MIPS64R2_RMIXL
 					# MIPS3_4100
-					# MIPS3_5900
 					# ENABLE_MIPS_TX3900
 					# ENABLE_MIPS_R4700
@@ -18,14 +18,19 @@
 
 defflag	opt_ddb.h		DDB_TRACE
+defflag	opt_ddb.h		MIPS_DDB_WATCH
 
 file	arch/mips/mips/locore_mips1.S		mips1
-file	arch/mips/mips/locore_mips3.S		mips3 | mips4 | mips32 | mips64
-file	arch/mips/mips/mips3_subr.S		(mips3 | mips4) & !mips3_5900
-file	arch/mips/mips/mips5900_subr.S		mips3 & mips3_5900
+file	arch/mips/mips/locore_mips3.S		mips3|mips4|mips32|mips32r2|mips64|mips64r2|mips64_rmixl|mips64r2_rmixl
+file	arch/mips/mips/mips3_subr.S		mips3|mips4
 file	arch/mips/mips/mips32_subr.S		mips32
+file	arch/mips/mips/mips32r2_subr.S		mips32r2
 file	arch/mips/mips/mips64_subr.S		mips64
+file	arch/mips/mips/mips64r2_subr.S		mips64r2
+file	arch/mips/mips/mips64_rmixl_subr.S	mips64_rmixl
+file	arch/mips/mips/mips64r2_rmixl_subr.S	mips64r2_rmixl
 file	arch/mips/mips/sigcode.S
 file	arch/mips/mips/copy.S
-file	arch/mips/mips/lock_stubs.S
+file	arch/mips/mips/lock_stubs_llsc.S	multiprocessor | tsar
+file	arch/mips/mips/lock_stubs_ras.S
 file	arch/mips/mips/locore_funcs.S
 file	arch/mips/mips/spl.S
@@ -44,5 +49,5 @@
 file	arch/mips/mips/trap.c			# trap handlers
 file	arch/mips/mips/syscall.c		# syscall entries
-file	arch/mips/mips/mips_fixup.c		(mips3 | mips4 | mips32 | mips64)
+file	arch/mips/mips/mips_fixup.c
 file	arch/mips/mips/mips_fpu.c
 file	arch/mips/mips/mips_machdep.c		!tsar
@@ -53,5 +58,5 @@
 file	arch/mips/mips/process_machdep.c
 file	arch/mips/mips/cpu_exec.c
-file	arch/mips/mips/wired_map.c (mips3|mips4|mips32|mips64) & enable_mips3_wired_map
+file	arch/mips/mips/wired_map.c (mips3|mips4|mips32|mips32r2|mips64|mips64r2|mips64_rmixl|mips64r2_rmixl) & enable_mips3_wired_map
 
 file	arch/mips/mips/cache.c			!tsar
@@ -63,11 +68,11 @@
 file	arch/mips/mips/cache_r5k.c		mips3 | mips4
 file	arch/mips/mips/cache_r5k_subr.S		mips3 | mips4
-file	arch/mips/mips/cache_r5900.c		mips3 & mips3_5900
 file	arch/mips/mips/cache_r10k.c	(mips3|mips4) & enable_mips4_cache_r10k
-file	arch/mips/mips/cache_mipsNN.c		(mips32 | mips64) & !tsar
+file	arch/mips/mips/cache_mipsNN.c		(mips32|mips32r2|mips64|mips64r2|mips64_rmixl|mips64r2_rmixl) & !tsar
 
 file	arch/mips/mips/mips_fputrap.c		!nofpu | fpemul
 file	arch/mips/mips/mips_emul.c
 file	arch/mips/mips/fp.S			!nofpu | fpemul
+file	arch/mips/mips/bds_emul.S		fpemul
 
 file	arch/mips/mips/procfs_machdep.c		procfs
Index: /trunk/src/sys/arch/mips/conf/files.sibyte
===================================================================
--- /trunk/src/sys/arch/mips/conf/files.sibyte	(revision 151)
+++ /trunk/src/sys/arch/mips/conf/files.sibyte	(revision 152)
@@ -68,2 +68,4 @@
 
 file	arch/sbmips/sbmips/rtc.c		xirtc | m41t81rtc
+
+file	arch/mips/sibyte/dev/sbbuswatch.c
Index: /trunk/src/sys/arch/mips/conf/kern.ldscript
===================================================================
--- /trunk/src/sys/arch/mips/conf/kern.ldscript	(revision 151)
+++ /trunk/src/sys/arch/mips/conf/kern.ldscript	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: kern.ldscript,v 1.5 2006/08/27 04:48:44 tsutsui Exp $ */
+/* $NetBSD: kern.ldscript,v 1.5.78.1 2010/12/22 06:13:36 matt Exp $ */
 
 /*  ldscript for NetBSD/mips kernels and LKMs */
@@ -16,4 +16,7 @@
     _ftext = . ;
     *(.text)
+    __stub_start = . ;
+    *(.stub*)
+    __stub_end = . ;
     *(.gnu.warning)
   } =0
Index: /trunk/src/sys/arch/mips/include/asm.h
===================================================================
--- /trunk/src/sys/arch/mips/include/asm.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/asm.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: asm.h,v 1.40.38.12 2010/02/15 03:12:17 matt Exp $	*/
+/*	$NetBSD: asm.h,v 1.40.38.14 2011/04/29 08:26:19 matt Exp $	*/
 
 /*
@@ -55,5 +55,5 @@
 #define	_MIPS_ASM_H
 
-#include <machine/cdefs.h>	/* for API selection */
+#include <sys/cdefs.h>		/* for API selection */
 #include <mips/regdef.h>
 
@@ -88,9 +88,5 @@
 # define _C_LABEL(x)	x
 #else
-# ifdef __STDC__
-#  define _C_LABEL(x)	_ ## x
-# else
-#  define _C_LABEL(x)	_/**/x
-# endif
+# define _C_LABEL(x)	__CONCAT(_,x)
 #endif
 
@@ -118,11 +114,33 @@
  * WARN_REFERENCES: create a warning if the specified symbol is referenced.
  */
-#ifdef __STDC__
-#define	WARN_REFERENCES(_sym,_msg)				\
-	.section .gnu.warning. ## _sym ; .ascii _msg ; .text
-#else
-#define	WARN_REFERENCES(_sym,_msg)				\
-	.section .gnu.warning./**/_sym ; .ascii _msg ; .text
-#endif /* __STDC__ */
+#define	WARN_REFERENCES(sym,msg)					\
+	.pushsection __CONCAT(.gnu.warning.,sym);			\
+	.ascii msg;							\
+	.popsection
+
+/*
+ * STATIC_LEAF_NOPROFILE
+ *	No profilable local leaf routine.
+ */
+#define	STATIC_LEAF_NOPROFILE(x)	\
+	.ent	_C_LABEL(x), 0;		\
+_C_LABEL(x): ;				\
+	.frame sp, 0, ra
+
+/*
+ * LEAF_NOPROFILE
+ *	No profilable leaf routine.
+ */
+#define	LEAF_NOPROFILE(x)		\
+	.globl	_C_LABEL(x);		\
+	STATIC_LEAF_NOPROFILE(x)
+
+/*
+ * STATIC_LEAF
+ *	Declare a local leaf function.
+ */
+#define	STATIC_LEAF(x)			\
+	STATIC_LEAF_NOPROFILE(x);	\
+	MCOUNT
 
 /*
@@ -134,38 +152,6 @@
  */
 #define	LEAF(x)				\
-	.globl	_C_LABEL(x);		\
-	.ent	_C_LABEL(x), 0;		\
-_C_LABEL(x): ;				\
-	.frame sp, 0, ra;		\
+	LEAF_NOPROFILE(x);		\
 	MCOUNT
-
-/*
- * LEAF_NOPROFILE
- *	No profilable leaf routine.
- */
-#define	LEAF_NOPROFILE(x)		\
-	.globl	_C_LABEL(x);		\
-	.ent	_C_LABEL(x), 0;		\
-_C_LABEL(x): ;				\
-	.frame	sp, 0, ra
-
-/*
- * STATIC_LEAF
- *	Declare a local leaf function.
- */
-#define	STATIC_LEAF(x)			\
-	.ent	_C_LABEL(x), 0;		\
-_C_LABEL(x): ;				\
-	.frame sp, 0, ra;		\
-	MCOUNT
-
-/*
- * XLEAF
- *	declare alternate entry to leaf routine
- */
-#define	XLEAF(x)			\
-	.globl	_C_LABEL(x);		\
-	AENT (_C_LABEL(x));		\
-_C_LABEL(x):
 
 /*
@@ -178,24 +164,44 @@
 
 /*
+ * XLEAF
+ *	declare alternate entry to leaf routine
+ */
+#define	XLEAF(x)			\
+	.globl	_C_LABEL(x);		\
+	STATIC_XLEAF(x)
+
+/*
+ * STATIC_NESTED_NOPROFILE
+ *	No profilable local nested routine.
+ */
+#define	STATIC_NESTED_NOPROFILE(x, fsize, retpc)	\
+	.ent	_C_LABEL(x), 0;			\
+_C_LABEL(x): ;					\
+	.frame	sp, fsize, retpc
+
+/*
+ * NESTED_NOPROFILE
+ *	No profilable nested routine.
+ */
+#define	NESTED_NOPROFILE(x, fsize, retpc)	\
+	.globl	_C_LABEL(x);			\
+	STATIC_NESTED_NOPROFILE(x, fsize, retpc)
+
+/*
  * NESTED
  *	A function calls other functions and needs
  *	therefore stack space to save/restore registers.
  */
-#define	NESTED(x, fsize, retpc)		\
-	.globl	_C_LABEL(x);		\
-	.ent	_C_LABEL(x), 0; 	\
-_C_LABEL(x): ;				\
-	.frame	sp, fsize, retpc;	\
+#define	NESTED(x, fsize, retpc)			\
+	NESTED_NOPROFILE(x, fsize, retpc);	\
 	MCOUNT
 
 /*
- * NESTED_NOPROFILE(x)
- *	No profilable nested routine.
- */
-#define	NESTED_NOPROFILE(x, fsize, retpc)	\
-	.globl	_C_LABEL(x);		\
-	.ent	_C_LABEL(x), 0;		\
-_C_LABEL(x): ;				\
-	.frame	sp, fsize, retpc
+ * STATIC_NESTED
+ *	No profilable local nested routine.
+ */
+#define	STATIC_NESTED(x, fsize, retpc)			\
+	STATIC_NESTED_NOPROFILE(x, fsize, retpc);	\
+	MCOUNT
 
 /*
@@ -212,5 +218,5 @@
  *	Mark end of a procedure.
  */
-#define	END(x) \
+#define	END(x)				\
 	.end _C_LABEL(x);		\
 	.size _C_LABEL(x), . - _C_LABEL(x)
@@ -238,15 +244,8 @@
 	EXPORT(x);			\
 
-#ifdef __STDC__
 #define	VECTOR_END(x)			\
-	EXPORT(x ## _end);		\
+	EXPORT(__CONCAT(x,_end));	\
 	END(x);				\
 	.org _C_LABEL(x) + 0x80
-#else
-#define	VECTOR_END(x)			\
-	EXPORT(x/**/_end);		\
-	END(x);				\
-	.org _C_LABEL(x) + 0x80
-#endif
 
 /*
@@ -618,5 +617,6 @@
 
 /* See lock_stubs.S. */
-#define	MIPS_LOCK_RAS_SIZE	128
+#define	LOG2_MIPS_LOCK_RAS_SIZE	8
+#define	MIPS_LOCK_RAS_SIZE	256	/* 16 bytes left over */
 
 #define	CPUVAR(off) _C_LABEL(cpu_info_store)+__CONCAT(CPU_INFO_,off)
Index: /trunk/src/sys/arch/mips/include/cache.h
===================================================================
--- /trunk/src/sys/arch/mips/include/cache.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/cache.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cache.h,v 1.9.96.2 2010/01/26 21:19:25 matt Exp $	*/
+/*	cache.h,v 1.9.96.3 2011/04/29 08:26:19 matt Exp	*/
 
 /*
@@ -208,5 +208,5 @@
 
 	u_int mci_cache_prefer_mask;
-#if defined(MIPS2) || defined(MIPS3) || defined(MIPS3_5900)
+#if (MIPS2 + MIPS3 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL | MIPS64R2_RMIXL) > 0
 	u_int mci_cache_alias_mask;
 
@@ -215,5 +215,5 @@
 #define	MIPS_CACHE_ALIAS_MASK		mips_cache_info.mci_cache_alias_mask
 #define	MIPS_CACHE_VIRTUAL_ALIAS	mips_cache_info.mci_cache_virtual_alias
-#elif defined(MIPS1) || defined(MIPS32) || defined(MIPS64)
+#elif defined(MIPS1)
 #define	MIPS_CACHE_ALIAS_MASK		0
 #define	MIPS_CACHE_VIRTUAL_ALIAS	false
Index: unk/src/sys/arch/mips/include/cache_r5900.h
===================================================================
--- /trunk/src/sys/arch/mips/include/cache_r5900.h	(revision 151)
+++ 	(revision )
@@ -1,140 +1,0 @@
-/*	$NetBSD: cache_r5900.h,v 1.6 2008/04/28 20:23:28 martin Exp $	*/
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by UCHIYAMA Yasushi.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#define CACHE_R5900_SIZE_I		16384
-#define	CACHE_R5900_SIZE_D		8192
-
-#define CACHE_R5900_LSIZE_I		64
-#define CACHE_R5900_LSIZE_D		64
-
-#define CACHEOP_R5900_IINV_I		0x07	/* INDEX INVALIDATE */
-#define CACHEOP_R5900_HINV_I		0x0b	/* HIT INVALIDATE */
-#define CACHEOP_R5900_IWBINV_D		0x14
-					/* INDEX WRITE BACK INVALIDATE */
-#define CACHEOP_R5900_ILTG_D		0x10	/* INDEX LOAD TAG */
-#define CACHEOP_R5900_ISTG_D		0x12	/* INDEX STORE TAG */
-#define CACHEOP_R5900_IINV_D		0x16	/* INDEX INVALIDATE */
-#define CACHEOP_R5900_HINV_D		0x1a	/* HIT INVALIDATE */
-#define CACHEOP_R5900_HWBINV_D		0x18	/* HIT WRITEBACK INVALIDATE */
-#define CACHEOP_R5900_ILDT_D		0x11	/* INDEX LOAD DATA */
-#define CACHEOP_R5900_ISDT_D		0x13	/* INDEX STORE DATA */
-#define CACHEOP_R5900_HWB_D		0x1c
-					/* HIT WRITEBACK W/O INVALIDATE */
-
-#if !defined(_LOCORE)
-
-#define	cache_op_r5900_line_64(va, op)					\
-do {									\
-	__asm volatile(						\
-		".set noreorder					\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1, 0(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		".set reorder"						\
-	    :								\
-	    : "r" (va), "i" (op)					\
-	    : "memory");						\
-} while (/*CONSTCOND*/0)
-
-#define	cache_r5900_op_4lines_64(va, op)				\
-do {									\
-	__asm volatile(						\
-		".set noreorder					\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1,   0(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1,  64(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1, 128(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1, 192(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		".set reorder"						\
-	    :								\
-	    : "r" (va), "i" (op)					\
-	    : "memory");						\
-} while (/*CONSTCOND*/0)
-
-#define	cache_r5900_op_4lines_64_2way(va, op)				\
-do {									\
-	__asm volatile(						\
-		".set noreorder					\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1,   0(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1,   1(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1,  64(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1,  65(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1, 128(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1, 129(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1, 192(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		"cache %1, 193(%0)				\n\t"	\
-		"sync.l						\n\t"	\
-		"sync.p						\n\t"	\
-		".set reorder"						\
-	    :								\
-	    : "r" (va), "i" (op)					\
-	    : "memory");						\
-} while (/*CONSTCOND*/0)
-
-void	r5900_icache_sync_all_64(void);
-void	r5900_icache_sync_range_64(vaddr_t, vsize_t);
-void	r5900_icache_sync_range_index_64(vaddr_t, vsize_t);
-
-void	r5900_pdcache_wbinv_all_64(void);
-void	r5900_pdcache_wbinv_range_64(vaddr_t, vsize_t);
-void	r5900_pdcache_wbinv_range_index_64(vaddr_t, vsize_t);
-
-void	r5900_pdcache_inv_range_64(vaddr_t, vsize_t);
-void	r5900_pdcache_wb_range_64(vaddr_t, vsize_t);
-
-#endif /* !_LOCORE */
Index: /trunk/src/sys/arch/mips/include/cpu.h
===================================================================
--- /trunk/src/sys/arch/mips/include/cpu.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/cpu.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cpu.h,v 1.90.16.28 2010/03/21 18:17:21 cliff Exp $	*/
+/*	cpu.h,v 1.90.16.36 2011/04/29 08:26:20 matt Exp	*/
 
 /*-
@@ -46,4 +46,10 @@
 #ifdef _KERNEL
 
+#if defined(_KERNEL_OPT)
+#include "opt_cputype.h"
+#include "opt_lockdebug.h"
+#include "opt_multiprocessor.h"
+#endif
+
 #ifndef _LOCORE
 #include <sys/cpu_data.h>
@@ -51,9 +57,27 @@
 #include <sys/evcnt.h>
 
-#if defined(_KERNEL_OPT)
-#include "opt_cputype.h"
-#include "opt_lockdebug.h"
-#include "opt_multiprocessor.h"
-#endif
+typedef struct cpu_watchpoint {
+	register_t	cw_addr;
+	register_t	cw_mask;
+	uint32_t	cw_asid;
+	uint32_t	cw_mode;
+} cpu_watchpoint_t;
+/* (abstract) mode bits */
+#define CPUWATCH_WRITE	__BIT(0)
+#define CPUWATCH_READ	__BIT(1)
+#define CPUWATCH_EXEC	__BIT(2)
+#define CPUWATCH_MASK	__BIT(3)
+#define CPUWATCH_ASID	__BIT(4)
+#define CPUWATCH_RWX	(CPUWATCH_EXEC|CPUWATCH_READ|CPUWATCH_WRITE)
+
+#define CPUWATCH_MAX	8	/* max possible number of watchpoints */
+
+u_int		  cpuwatch_discover(void);
+void		  cpuwatch_free(cpu_watchpoint_t *);
+cpu_watchpoint_t *cpuwatch_alloc(void);
+void		  cpuwatch_set_all(void);
+void		  cpuwatch_clr_all(void);
+void		  cpuwatch_set(cpu_watchpoint_t *);
+void		  cpuwatch_clr(cpu_watchpoint_t *);
 
 struct cpu_info {
@@ -78,8 +102,11 @@
 	int ci_cpl;			/* current [interrupt] priority level */
 	uint32_t ci_next_cp0_clk_intr;	/* for hard clock intr scheduling */
-	struct evcnt ci_count_compare_evcnt;		/* hard clock intr counter */
-	struct evcnt ci_count_compare_missed_evcnt;	/* hard clock miss counter */
+	struct evcnt ci_ev_count_compare;		/* hard clock intr counter */
+	struct evcnt ci_ev_count_compare_missed;	/* hard clock miss counter */
 	struct lwp *ci_softlwps[SOFTINT_COUNT];
-#define	ci_softints	ci_data.cpu_softints
+	volatile u_int ci_softints;
+	struct evcnt ci_ev_fpu_loads;	/* fpu load counter */
+	struct evcnt ci_ev_fpu_saves;	/* fpu save counter */
+	struct evcnt ci_ev_tlbmisses;
 
 	/*
@@ -87,9 +114,16 @@
 	 */
 	int ci_tlb_slot;		/* reserved tlb entry for cpu_info */
+	u_int ci_pmap_asid_cur;		/* current ASID */
 	struct pmap_tlb_info *ci_tlb_info; /* tlb information for this cpu */
-	struct segtab *ci_pmap_segbase;
+	union segtab *ci_pmap_seg0tab;
+#ifdef _LP64
+	union segtab *ci_pmap_segtab;
+#else
 	vaddr_t ci_pmap_srcbase;	/* starting VA of ephemeral src space */
 	vaddr_t ci_pmap_dstbase;	/* starting VA of ephemeral dst space */
-
+#endif
+
+	u_int ci_cpuwatch_count;	/* number of watchpoints on this CPU */
+	cpu_watchpoint_t ci_cpuwatch_tab[CPUWATCH_MAX];
 
 #ifdef MULTIPROCESSOR
@@ -144,19 +178,27 @@
 
 #ifdef _KERNEL
-#if defined(_LKM) || defined(_STANDALONE)
+#if defined(_MODULAR) || defined(_LKM) || defined(_STANDALONE)
 /* Assume all CPU architectures are valid for LKM's and standlone progs */
-#define	MIPS1	1
-#define	MIPS3	1
-#define	MIPS4	1
-#define	MIPS32	1
-#define	MIPS64	1
-#endif
-
-#if (MIPS1 + MIPS3 + MIPS4 + MIPS32 + MIPS64) == 0
-#error at least one of MIPS1, MIPS3, MIPS4, MIPS32 or MIPS64 must be specified
+#define	MIPS1		1
+#define	MIPS3		1
+#define	MIPS4		1
+#define	MIPS32		1
+#define	MIPS32R2	1
+#define	MIPS64		1
+#define	MIPS64R2	1
+#define	MIPS64_RMIXL	1
+#define	MIPS64R2_RMIXL	1
+#endif
+
+#if (MIPS1 + MIPS3 + MIPS4 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) == 0
+#error at least one of MIPS1, MIPS3, MIPS4, MIPS32, MIPS32R2, MIPS64, MIPS64R2, MIPS64_RMIXL, or MIPS64R2_RMIXL must be specified
 #endif
 
 /* Shortcut for MIPS3 or above defined */
-#if defined(MIPS3) || defined(MIPS4) || defined(MIPS32) || defined(MIPS64)
+#if defined(MIPS3) || defined(MIPS4) \
+    || defined(MIPS32) || defined(MIPS32R2) \
+    || defined(MIPS64) || defined(MIPS64R2) \
+    || defined(MIPS64_RMIXL) || defined(MIPS64R2_RMIXL)
+
 #define	MIPS3_PLUS	1
 #define __HAVE_CPU_COUNTER
@@ -170,12 +212,14 @@
  */
 
-#define	CPU_ARCH_MIPSx	0		/* XXX unknown */
-#define	CPU_ARCH_MIPS1	(1 << 0)
-#define	CPU_ARCH_MIPS2	(1 << 1)
-#define	CPU_ARCH_MIPS3	(1 << 2)
-#define	CPU_ARCH_MIPS4	(1 << 3)
-#define	CPU_ARCH_MIPS5	(1 << 4)
-#define	CPU_ARCH_MIPS32	(1 << 5)
-#define	CPU_ARCH_MIPS64	(1 << 6)
+#define	CPU_ARCH_MIPSx		0		/* XXX unknown */
+#define	CPU_ARCH_MIPS1		(1 << 0)
+#define	CPU_ARCH_MIPS2		(1 << 1)
+#define	CPU_ARCH_MIPS3		(1 << 2)
+#define	CPU_ARCH_MIPS4		(1 << 3)
+#define	CPU_ARCH_MIPS5		(1 << 4)
+#define	CPU_ARCH_MIPS32		(1 << 5)
+#define	CPU_ARCH_MIPS64		(1 << 6)
+#define	CPU_ARCH_MIPS32R2	(1 << 7)
+#define	CPU_ARCH_MIPS64R2	(1 << 8)
 
 /* Note: must be kept in sync with -ffixed-?? Makefile.mips. */
@@ -193,12 +237,12 @@
 #define	curlwp			mips_curlwp
 #define	curcpu()		(curlwp->l_cpu)
-#define	curpcb			(&curlwp->l_addr->u_pcb)
+#define	curpcb			((struct pcb *)lwp_getpcb(curlwp))
 #ifdef MULTIPROCESSOR
-#define	cpu_number()		(curcpu()->ci_cpuid)
-#define	CPU_IS_PRIMARY(ci)	((ci)->ci_cpuid == 0)
+#define	cpu_number()		(curcpu()->ci_index)
+#define	CPU_IS_PRIMARY(ci)	((ci)->ci_flags & CPUF_PRIMARY)
 #else
-#define	cpu_number()		(0L)
-#endif
-#define	cpu_proc_fork(p1, p2)	((void)((p2)->p_md.md_abi = (p1)->p_md.md_abi))
+#define	cpu_number()		(0)
+#define	CPU_IS_PRIMARY(ci)	(true)
+#endif
 
 /* XXX simonb
@@ -251,5 +295,5 @@
 #endif	/* !_LOCORE */
 
-#if ((MIPS1 + MIPS3 + MIPS4 + MIPS32 + MIPS64) == 1) || defined(_LOCORE)
+#if ((MIPS1 + MIPS3 + MIPS4 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) == 1) || defined(_LOCORE)
 
 #if defined(MIPS1)
@@ -258,5 +302,7 @@
 # define CPUIS64BITS		0
 # define CPUISMIPS32		0
+# define CPUISMIPS32R2		0
 # define CPUISMIPS64		0
+# define CPUISMIPS64R2		0
 # define CPUISMIPSNN		0
 # define MIPS_HAS_R4K_MMU	0
@@ -270,10 +316,12 @@
 # define CPUIS64BITS		1
 # define CPUISMIPS32		0
+# define CPUISMIPS32R2		0
 # define CPUISMIPS64		0
+# define CPUISMIPS64R2		0
 # define CPUISMIPSNN		0
 # define MIPS_HAS_R4K_MMU	1
 # define MIPS_HAS_CLOCK		1
 # if defined(_LOCORE)
-#  if !defined(MIPS3_5900) && !defined(MIPS3_4100)
+#  if !defined(MIPS3_4100)
 #   define MIPS_HAS_LLSC	1
 #  else
@@ -290,5 +338,7 @@
 # define CPUIS64BITS		0
 # define CPUISMIPS32		1
+# define CPUISMIPS32R2		0
 # define CPUISMIPS64		0
+# define CPUISMIPS64R2		0
 # define CPUISMIPSNN		1
 # define MIPS_HAS_R4K_MMU	1
@@ -297,10 +347,12 @@
 # define MIPS_HAS_LLADDR	((mips_options.mips_cpu_flags & CPU_MIPS_NO_LLADDR) == 0)
 
-#elif defined(MIPS64)
+#elif defined(MIPS32R2)
 
 # define CPUISMIPS3		1
-# define CPUIS64BITS		1
+# define CPUIS64BITS		0
 # define CPUISMIPS32		0
-# define CPUISMIPS64		1
+# define CPUISMIPS32R2		1
+# define CPUISMIPS64		0
+# define CPUISMIPS64R2		0
 # define CPUISMIPSNN		1
 # define MIPS_HAS_R4K_MMU	1
@@ -309,4 +361,32 @@
 # define MIPS_HAS_LLADDR	((mips_options.mips_cpu_flags & CPU_MIPS_NO_LLADDR) == 0)
 
+#elif defined(MIPS64) || defined(MIPS64_RMIXL)
+
+# define CPUISMIPS3		1
+# define CPUIS64BITS		1
+# define CPUISMIPS32		0
+# define CPUISMIPS32R2		0
+# define CPUISMIPS64		1
+# define CPUISMIPS64R2		0
+# define CPUISMIPSNN		1
+# define MIPS_HAS_R4K_MMU	1
+# define MIPS_HAS_CLOCK		1
+# define MIPS_HAS_LLSC		1
+# define MIPS_HAS_LLADDR	((mips_options.mips_cpu_flags & CPU_MIPS_NO_LLADDR) == 0)
+
+#elif defined(MIPS64R2) || defined(MIPS64R2_RMIXL)
+
+# define CPUISMIPS3		1
+# define CPUIS64BITS		1
+# define CPUISMIPS32		0
+# define CPUISMIPS32R2		0
+# define CPUISMIPS64		0
+# define CPUISMIPS64R2		1
+# define CPUISMIPSNN		1
+# define MIPS_HAS_R4K_MMU	1
+# define MIPS_HAS_CLOCK		1
+# define MIPS_HAS_LLSC		1
+# define MIPS_HAS_LLADDR	((mips_options.mips_cpu_flags & CPU_MIPS_NO_LLADDR) == 0)
+
 #endif
 
@@ -327,8 +407,10 @@
 #define	CPUISMIPS5	((mips_options.mips_cpu_arch & CPU_ARCH_MIPS5) != 0)
 #define	CPUISMIPS32	((mips_options.mips_cpu_arch & CPU_ARCH_MIPS32) != 0)
+#define	CPUISMIPS32R2	((mips_options.mips_cpu_arch & CPU_ARCH_MIPS32R2) != 0)
 #define	CPUISMIPS64	((mips_options.mips_cpu_arch & CPU_ARCH_MIPS64) != 0)
-#define	CPUISMIPSNN	((mips_options.mips_cpu_arch & (CPU_ARCH_MIPS32 | CPU_ARCH_MIPS64)) != 0)
+#define	CPUISMIPS64R2	((mips_options.mips_cpu_arch & CPU_ARCH_MIPS64R2) != 0)
+#define	CPUISMIPSNN	((mips_options.mips_cpu_arch & (CPU_ARCH_MIPS32 | CPU_ARCH_MIPS32R2 | CPU_ARCH_MIPS64 | CPU_ARCH_MIPS64R2)) != 0)
 #define	CPUIS64BITS	((mips_options.mips_cpu_arch & \
-	(CPU_ARCH_MIPS3 | CPU_ARCH_MIPS4 | CPU_ARCH_MIPS64)) != 0)
+	(CPU_ARCH_MIPS3 | CPU_ARCH_MIPS4 | CPU_ARCH_MIPS64 | CPU_ARCH_MIPS64R2)) != 0)
 
 #define	MIPS_HAS_CLOCK	(mips_options.mips_cpu_arch >= CPU_ARCH_MIPS3)
@@ -349,4 +431,14 @@
  */
 #define	cpu_swapout(p)			panic("cpu_swapout: can't get here");
+
+/*
+ * Send an inter-processor interupt to each other CPU (excludes curcpu())
+ */
+void cpu_broadcast_ipi(int);
+
+/*
+ * Send an inter-processor interupt to CPUs in cpuset (excludes curcpu())
+ */
+void cpu_multicast_ipi(__cpuset_t, int);
 
 /*
@@ -401,6 +493,10 @@
  * Misc prototypes and variable declarations.
  */
+#define	LWP_PC(l)	cpu_lwp_pc(l)
+
+struct proc;
 struct lwp;
-struct user;
+struct pcb;
+struct reg;
 
 /*
@@ -425,19 +521,31 @@
 extern int mips_poolpage_vmfreelist;	/* freelist to allocate poolpages */
 
-/* cpu_subr.c */
-#ifdef MULTIPROCESSOR
-extern volatile u_long cpus_running;
-extern volatile u_long cpus_hatched;
-extern volatile u_long cpus_halted;
-#endif
-
 struct cpu_info *
-	cpu_info_alloc(struct pmap_tlb_info *, u_int);
+	cpu_info_alloc(struct pmap_tlb_info *, cpuid_t, cpuid_t, cpuid_t,
+	    cpuid_t);
 void	cpu_attach_common(device_t, struct cpu_info *);
 void	cpu_startup_common(void);
+#ifdef _LP64
+void	cpu_vmspace_exec(struct lwp *, vaddr_t, vaddr_t);
+#endif
+
 #ifdef MULTIPROCESSOR
 void	cpu_hatch(struct cpu_info *ci);
 void	cpu_trampoline(void);
 void	cpu_boot_secondary_processors(void);
+void	cpu_halt(void);
+void	cpu_halt_others(void);
+void	cpu_pause(struct reg *);
+void	cpu_pause_others(void);
+void	cpu_resume(int);
+void	cpu_resume_others(void);
+int	cpu_is_paused(int);
+void	cpu_debug_dump(void);
+
+extern volatile __cpuset_t cpus_running;
+extern volatile __cpuset_t cpus_hatched;
+extern volatile __cpuset_t cpus_paused;
+extern volatile __cpuset_t cpus_resumed;
+extern volatile __cpuset_t cpus_halted;
 #endif
 
@@ -525,19 +633,13 @@
 /* mips_fpu.c */
 void	fpu_init(void);
-void	fpudiscard_lwp(struct lwp *);
-void	fpuload_lwp(struct lwp *);
-void	fpusave_lwp(struct lwp *);
+void	fpu_discard(void);
+void	fpu_load(void);
+void	fpu_save(void);
+void	fpu_save_lwp(struct lwp *);
 void	fpusave_cpu(struct cpu_info *);
 
 /* mips_machdep.c */
-struct mips_vmfreelist;
-struct phys_ram_seg;
 void	dumpsys(void);
-int	savectx(struct user *);
-void	mips_init_msgbuf(void);
-void	mips_init_lwp0_uarea(void);
-void	mips_page_physload(vaddr_t, vaddr_t,
-	    const struct phys_ram_seg *, size_t,
-	    const struct mips_vmfreelist *, size_t);
+int	savectx(struct pcb *);
 void	cpu_identify(device_t);
 
@@ -547,4 +649,6 @@
 
 /* vm_machdep.c */
+void	cpu_proc_fork(struct proc *, struct proc *);
+vaddr_t	cpu_lwp_pc(struct lwp *);
 void	cpu_uarea_remap(struct lwp *);
 
Index: /trunk/src/sys/arch/mips/include/cpuregs.h
===================================================================
--- /trunk/src/sys/arch/mips/include/cpuregs.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/cpuregs.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cpuregs.h,v 1.74.28.18 2010/04/27 05:44:30 cliff Exp $	*/
+/*	cpuregs.h,v 1.74.28.20 2011/04/29 08:26:20 matt Exp	*/
 
 /*
@@ -133,5 +133,22 @@
 
 /* CPU dependent mtc0 hazard hook */
-#define	COP0_SYNC		/* nothing */
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+# if (MIPS1 + MIPS3 + MIPS32 + MIPS64 + MIPS64_RMIXL) == 0
+#  define COP0_SYNC		sll $0,$0,3	/* EHB */
+#  define JR_HB_RA		.set push; .set mips32r2; jr.hb ra; nop; .set pop
+# else
+#  define COP0_SYNC		sll $0,$0,1; sll $0,$0,1; sll $0,$0,3
+#  define JR_HB_RA		sll $0,$0,1; sll $0,$0,1; jr ra; sll $0,$0,3
+# endif
+#elif (MIPS32 + MIPS64 + MIPS64_RMIXL) > 0
+# define COP0_SYNC		sll $0,$0,1; sll $0,$0,1; sll $0,$0,1
+# define JR_HB_RA		sll $0,$0,1; sll $0,$0,1; jr ra; sll $0,$0,1
+#elif MIPS3 > 0
+# define COP0_SYNC		nop; nop; nop
+# define JR_HB_RA		nop; nop; jr ra; nop
+#else
+# define COP0_SYNC		nop
+# define JR_HB_RA		jr ra; nop
+#endif
 #define	COP0_HAZARD_FPUENABLE	nop; nop; nop; nop;
 
@@ -148,5 +165,5 @@
  *
  * Differences:
- *  r3k has 4 bits of execption type, r4k has 5 bits.
+ *  r3k has 4 bits of exception type, r4k has 5 bits.
  */
 #define	MIPS_CR_BR_DELAY	0x80000000
@@ -250,5 +267,4 @@
 #define	MIPS3_SR_DIAG_CE	0x00020000
 #define	MIPS3_SR_DIAG_PE	0x00010000
-#define	MIPS3_SR_EIE		0x00010000		/* TX79/R5900 */
 #define	MIPS3_SR_KX		0x00000080
 #define	MIPS3_SR_SX		0x00000040
@@ -260,9 +276,4 @@
 #define	MIPS3_SR_ERL		0x00000004
 #define	MIPS3_SR_EXL		0x00000002
-
-#ifdef MIPS3_5900
-#undef MIPS_SR_INT_IE
-#define	MIPS_SR_INT_IE		0x00010001		/* XXX */
-#endif
 
 #define	MIPS_SR_SOFT_RESET	MIPS3_SR_SOFT_RESET
@@ -448,10 +459,4 @@
 
 /*
- * TX79 (R5900) exception vectors
- */
-#define MIPS_R5900_COUNTER_EXC_VEC	MIPS_PHYS_TO_KSEG0(0x0080)
-#define MIPS_R5900_DEBUG_EXC_VEC	MIPS_PHYS_TO_KSEG0(0x0100)
-
-/*
  * MIPS32/MIPS64 (and some MIPS3) dedicated interrupt vector.
  */
@@ -470,6 +475,8 @@
  *  3	MIPS_COP_0_TLB_LO1	.636 r4k TLB entry low, extended.
  *  4	MIPS_COP_0_TLB_CONTEXT	3636 TLB Context.
+ *  4/2	MIPS_COP_0_USERLOCAL	..36 UserLocal.
  *  5	MIPS_COP_0_TLB_PG_MASK	.333 TLB Page Mask register.
  *  6	MIPS_COP_0_TLB_WIRED	.333 Wired TLB number.
+ *  7	MIPS_COP_0_HWRENA	..33 rdHWR Enable.
  *  8	MIPS_COP_0_BAD_VADDR	3636 Bad virtual address.
  *  9	MIPS_COP_0_COUNT	.333 Count register.
@@ -477,12 +484,17 @@
  * 11	MIPS_COP_0_COMPARE	.333 Compare (against Count).
  * 12	MIPS_COP_0_STATUS	3333 Status register.
+ * 12/1	MIPS_COP_0_INTCTL	..33 Interrupt Control.
+ * 12/2	MIPS_COP_0_SRSCTL	..33 Shadow Register Set Selectors.
+ * 12/3	MIPS_COP_0_SRSMAP	..33 Shadow Set Map.
  * 13	MIPS_COP_0_CAUSE	3333 Exception cause register.
  * 14	MIPS_COP_0_EXC_PC	3636 Exception PC.
  * 15	MIPS_COP_0_PRID		3333 Processor revision identifier.
- * 15/1	MIPS_COP_0_EBASE	..33 Exception Base
+ * 15/1	MIPS_COP_0_EBASE	..33 Exception Base.
  * 16	MIPS_COP_0_CONFIG	3333 Configuration register.
  * 16/1	MIPS_COP_0_CONFIG1	..33 Configuration register 1.
  * 16/2	MIPS_COP_0_CONFIG2	..33 Configuration register 2.
  * 16/3	MIPS_COP_0_CONFIG3	..33 Configuration register 3.
+ * 16/6	MIPS_COP_0_CONFIG6	..33 Configuration register 6.
+ * 16/7	MIPS_COP_0_CONFIG7	..33 Configuration register 7.
  * 17	MIPS_COP_0_LLADDR	.336 Load Linked Address.
  * 18	MIPS_COP_0_WATCH_LO	.336 WatchLo register.
@@ -552,4 +564,5 @@
 #define MIPS_COP_0_TCCONTEXT	_(2)  /* 2, 5 */
 #define	MIPS_COP_0_EBASE	_(15) /* 15, 1 */
+#define	MIPS_COP_0_HWRENA	_(7)
 #define	MIPS_COP_0_OSSCRATCH	_(22)
 #define	MIPS_COP_0_DEBUG	_(23)
@@ -714,13 +727,13 @@
 /* XXX simonb: this is before MIPS3_PLUS is defined (and is ugly!) */
 
-#if !(defined(MIPS3) || defined(MIPS4) || defined(MIPS32) || defined(MIPS64)) \
-    && defined(MIPS1)				/* XXX simonb must be neater! */
+#if (MIPS3 + MIPS4 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) == 0 && MIPS1 != 0
 #define	MIPS_TLB_PID_SHIFT		MIPS1_TLB_PID_SHIFT
+#define	MIPS_TLB_PID			MIPS1_TLB_PID
 #define	MIPS_TLB_NUM_PIDS		MIPS1_TLB_NUM_PIDS
 #endif
 
-#if (defined(MIPS3) || defined(MIPS4) || defined(MIPS32) || defined(MIPS64)) \
-    && !defined(MIPS1)				/* XXX simonb must be neater! */
+#if (MIPS3 + MIPS4 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) != 0 && MIPS1 == 0
 #define	MIPS_TLB_PID_SHIFT		0
+#define	MIPS_TLB_PID			MIPS3_TLB_PID
 #define	MIPS_TLB_NUM_PIDS		MIPS3_TLB_NUM_ASIDS
 #endif
@@ -731,7 +744,21 @@
     ((MIPS_HAS_R4K_MMU) ? 0 : MIPS1_TLB_PID_SHIFT)
 
+#define	MIPS_TLB_PID \
+    ((MIPS_HAS_R4K_MMU) ? MIPS3_TLB_PID : MIPS1_TLB_PID)
+
 #define	MIPS_TLB_NUM_PIDS \
     ((MIPS_HAS_R4K_MMU) ? MIPS3_TLB_NUM_ASIDS : MIPS1_TLB_NUM_PIDS)
 #endif
+
+/*
+ * Bits defined for for the HWREna (CP0 register 7, select 0).
+ */
+#define	MIPS_HWRENA_IMPL31		__BIT(31)
+#define	MIPS_HWRENA_IMPL30		__BIT(30)
+#define	MIPS_HWRENA_UL			__BIT(29)	/* Userlocal */
+#define	MIPS_HWRENA_CCRES		__BIT(3)
+#define	MIPS_HWRENA_CC			__BIT(2)
+#define	MIPS_HWRENA_SYNCI_STEP		__BIT(1)
+#define	MIPS_HWRENA_CPUNUM		__BIT(0)
 
 /*
@@ -850,4 +877,5 @@
 #define	MIPS_24KE	0x96	/* MIPS 24KEc			ISA 32  Rel 2 */
 #define	MIPS_74K	0x97	/* MIPS 74Kc/74Kf		ISA 32  Rel 2 */
+#define	MIPS_1004K	0x99	/* MIPS 1004Kc/1004Kf		ISA 32  Rel 2 */
 
 /*
@@ -923,11 +951,8 @@
 #include <mips/r3900regs.h>
 #endif
-#ifdef MIPS3_5900
-#include <mips/r5900regs.h>
-#endif
 #ifdef MIPS64_SB1
 #include <mips/sb1regs.h>
 #endif
-#if defined(MIPS64_XLP) || defined(MIPS64_XLR) || defined(MIPS64_XLS)
+#if (MIPS64_XLR + MIPS64_XLS + MIPS64_XLP) > 0
 #include <mips/rmi/rmixlreg.h>
 #endif
Index: /trunk/src/sys/arch/mips/include/cpuset.h
===================================================================
--- /trunk/src/sys/arch/mips/include/cpuset.h	(revision 152)
+++ /trunk/src/sys/arch/mips/include/cpuset.h	(revision 152)
@@ -0,0 +1,51 @@
+/*	$NetBSD: cpuset.h,v 1.1.2.2 2011/04/29 08:26:20 matt Exp $	*/
+/*	$NetBSD: cpuset.h,v 1.1.2.2 2011/04/29 08:26:20 matt Exp $ */
+
+/*-
+ * Copyright (c) 2004 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _MIPS_CPUSET_H_
+#define	_MIPS_CPUSET_H_
+
+#include <sys/atomic.h>
+
+#define	CPUSET_SINGLE(cpu)		((__cpuset_t)1 << (cpu))
+
+#define	CPUSET_ADD(set, cpu)		atomic_or_64((volatile uint64_t *)&(set), CPUSET_SINGLE(cpu))
+#define	CPUSET_DEL(set, cpu)		atomic_and_64((volatile uint64_t *)&(set), ~CPUSET_SINGLE(cpu))
+#define	CPUSET_SUB(set1, set2)		atomic_and_64((volatile uint64_t *)&(set1), ~(set2))
+
+#define	CPUSET_EXCEPT(set, cpu)		((set) & ~CPUSET_SINGLE(cpu))
+
+#define	CPUSET_HAS_P(set, cpu)		(((set) & CPUSET_SINGLE(cpu)) != 0)
+#define	CPUSET_NEXT(set)		(ffs(set) - 1)
+
+#define	CPUSET_EMPTY_P(set)		((set) == (__cpuset_t)0)
+#define	CPUSET_EQUAL_P(set1, set2)	((set1) == (set2))
+#define	CPUSET_CLEAR(set)		((set) = (__cpuset_t)0)
+#define	CPUSET_ASSIGN(set1, set2)	((set1) = (set2))
+
+#endif /* _MIPS_CPUSET_H_ */
Index: /trunk/src/sys/arch/mips/include/db_machdep.h
===================================================================
--- /trunk/src/sys/arch/mips/include/db_machdep.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/db_machdep.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: db_machdep.h,v 1.22.62.1 2010/02/01 04:16:19 matt Exp $ */
+/* $NetBSD: db_machdep.h,v 1.22.62.4 2011/04/29 08:26:21 matt Exp $ */
 
 /*
@@ -39,5 +39,5 @@
 #include <mips/reg.h>			/* register state */
 #include <mips/regnum.h>		/* symbolic register indices */
-#include <mips/proc.h>			/* register state */
+#include <mips/pcb.h>			/* register state */
 
 
@@ -114,4 +114,8 @@
 db_addr_t next_instr_address(db_addr_t pc, bool bd);
 
+bool ddb_running_on_this_cpu_p(void);
+bool ddb_running_on_any_cpu_p(void);
+void db_resume_others(void);
+
 /*
  * We have machine-dependent commands.
Index: /trunk/src/sys/arch/mips/include/elf_machdep.h
===================================================================
--- /trunk/src/sys/arch/mips/include/elf_machdep.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/elf_machdep.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: elf_machdep.h,v 1.10.96.8 2010/01/26 21:09:54 matt Exp $	*/
+/*	$NetBSD: elf_machdep.h,v 1.10.96.9 2011/04/29 08:26:21 matt Exp $	*/
 
 #ifndef _MIPS_ELF_MACHDEP_H_
@@ -144,5 +144,5 @@
 #define	EF_MIPS_ARCH_64		0x60000000	/* -mips64 code */
 #define	EF_MIPS_ARCH_32R2	0x70000000	/* -mips32r2 code */
-#define	EF_MIPS_ARCH_64R4	0x80000000	/* -mips64r2 code */
+#define	EF_MIPS_ARCH_64R2	0x80000000	/* -mips64r2 code */
 
 #define	EF_MIPS_ABI		0x0000f000
Index: /trunk/src/sys/arch/mips/include/float.h
===================================================================
--- /trunk/src/sys/arch/mips/include/float.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/float.h	(revision 152)
@@ -1,3 +1,35 @@
-/*	$NetBSD: float.h,v 1.13 2003/05/12 15:22:54 kleink Exp $	*/
+/*	$NetBSD: float.h,v 1.13.126.1 2011/04/29 07:48:36 matt Exp $ */
+
+#ifndef _MIPS_FLOAT_H_
+#define _MIPS_FLOAT_H_
+
+#if defined(__mips_n32) || defined(__mips_n64)
+
+#define LDBL_MANT_DIG	113
+#define	LDBL_EPSILON	1.925929944387235853055977942584927319E-34L
+#define	LDBL_DIG	33
+#define	LDBL_MIN_EXP	(-16381)
+#define	LDBL_MIN	3.3621031431120935062626778173217526026E-4932L
+#define	LDBL_MIN_10_EXP	(-4931)
+#define	LDBL_MAX_EXP	16384
+#define	LDBL_MAX	1.1897314953572317650857593266280070162E4932L
+#define	LDBL_MAX_10_EXP	4932
+
+#endif	/* __mips_n32 || __mips_n64 */
 
 #include <sys/float_ieee754.h>
+
+#if defined(__mips_n32) || defined(__mips_n64)
+
+#if !defined(_ANSI_SOURCE) && !defined(_POSIX_C_SOURCE) && \
+    !defined(_XOPEN_SOURCE) || \
+    ((__STDC_VERSION__ - 0) >= 199901L) || \
+    ((_POSIX_C_SOURCE - 0) >= 200112L) || \
+    ((_XOPEN_SOURCE  - 0) >= 600) || \
+    defined(_ISOC99_SOURCE) || defined(_NETBSD_SOURCE)
+#define	DECIMAL_DIG	36
+#endif /* !defined(_ANSI_SOURCE) && ... */
+
+#endif	/* __mips_n32 || __mips_n64 */
+
+#endif	/* _MIPS_FLOAT_H_ */
Index: /trunk/src/sys/arch/mips/include/ieee.h
===================================================================
--- /trunk/src/sys/arch/mips/include/ieee.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/ieee.h	(revision 152)
@@ -1,13 +1,136 @@
-/*	$NetBSD: ieee.h,v 1.5 2005/12/11 12:18:09 christos Exp $ */
+/*	$NetBSD: ieee.h,v 1.5.96.1 2011/04/29 07:48:36 matt Exp $	*/
+
+/*
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This software was developed by the Computer Systems Engineering group
+ * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
+ * contributed to Berkeley.
+ *
+ * All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Lawrence Berkeley Laboratory.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)ieee.h	8.1 (Berkeley) 6/11/93
+ */
+
+/*
+ * ieee.h defines the machine-dependent layout of the machine's IEEE
+ * floating point.  It does *not* define (yet?) any of the rounding
+ * mode bits, exceptions, and so forth.
+ */
+
+#ifndef _MIPS_IEEE_H
+#define _MIPS_IEEE_H
 
 #include <sys/ieee754.h>
 
 /*
- * A NaN is a `signalling NaN' if its QUIETNAN bit is set in its
- * high fraction; if the bit is clear, it is a `quiet NaN'.
+ * The SPARC architecture defines the following IEEE 754 compliant
+ * 128-bit extended-precision format, which is supported only by the
+ * v9 toolchain.
  */
+
+#if defined(__mips_n32) || defined(__mips_n64)
+
+#define	EXT_EXPBITS	15
+#define EXT_FRACHBITS	16
+#define	EXT_FRACHMBITS	32
+#define	EXT_FRACLMBITS	32
+#define	EXT_FRACLBITS	32
+#define	EXT_FRACBITS	(EXT_FRACLBITS + EXT_FRACLMBITS + EXT_FRACHMBITS + EXT_FRACHBITS)
+
+#define	EXT_TO_ARRAY32(u, a) do {			\
+	(a)[0] = (uint32_t)(u).extu_ext.ext_fracl;	\
+	(a)[1] = (uint32_t)(u).extu_ext.ext_fraclm;	\
+	(a)[2] = (uint32_t)(u).extu_ext.ext_frachm;	\
+	(a)[3] = (uint32_t)(u).extu_ext.ext_frach;	\
+} while(/*CONSTCOND*/0)
+
+struct ieee_ext {
+#if _BYTE_ORDER == _BIG_ENDIAN
+	u_int	ext_sign:1;
+	u_int	ext_exp:EXT_EXPBITS;
+	u_int	ext_frach:EXT_FRACHBITS;
+	u_int	ext_frachm;
+	u_int	ext_fraclm;
+	u_int	ext_fracl;
+#else
+	u_int	ext_fracl;
+	u_int	ext_fraclm;
+	u_int	ext_frachm;
+	u_int	ext_frach:EXT_FRACHBITS;
+	u_int	ext_exp:EXT_EXPBITS;
+	u_int	ext_sign:1;
+#endif
+};
+
+/*
+ * Floats whose exponent is in [1..INFNAN) (of whatever type) are
+ * `normal'.  Floats whose exponent is INFNAN are either Inf or NaN.
+ * Floats whose exponent is zero are either zero (iff all fraction
+ * bits are zero) or subnormal values.
+ *
+ * A NaN is a `signalling NaN' if its QUIETNAN bit is clear in its
+ * high fraction; if the bit is set, it is a `quiet NaN'.
+ */
+#define	EXT_EXP_INFNAN	0x7fff
+#define	EXT_EXP_INF	0x7fff
+#define	EXT_EXP_NAN	0x7fff
 
 #if 0
 #define	SNG_QUIETNAN	(1 << 22)
 #define	DBL_QUIETNAN	(1 << 19)
+#define	EXT_QUIETNAN	(1 << 15)
 #endif
+
+/*
+ * Exponent biases.
+ */
+#define	EXT_EXP_BIAS	16383
+
+/*
+ * Convenience data structures.
+ */
+union ieee_ext_u {
+	long double		extu_ld;
+	struct ieee_ext		extu_ext;
+};
+
+#define extu_exp	extu_ext.ext_exp
+#define extu_sign	extu_ext.ext_sign
+#define extu_fracl	extu_ext.ext_fracl
+#define extu_frach	extu_ext.ext_frach
+
+#define LDBL_NBIT	0x80000000
+#define mask_nbit_l(u)	((u).extu_frach &= ~LDBL_NBIT)
+
+#endif /* __mips_n32 || __mips_n64 */
+
+#endif /* _MIPS_IEEE_H */
Index: /trunk/src/sys/arch/mips/include/ieeefp.h
===================================================================
--- /trunk/src/sys/arch/mips/include/ieeefp.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/ieeefp.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ieeefp.h,v 1.5 2008/08/05 16:47:42 matt Exp $	*/
+/*	$NetBSD: ieeefp.h,v 1.5.12.1 2011/04/29 07:48:36 matt Exp $	*/
 
 /*
@@ -17,7 +17,7 @@
 
 #define	FE_INEXACT	0x01	/* imprecise (loss of precision) */
-#define	FE_UNDERFLOW	0x02	/* divide-by-zero exception */
+#define	FE_UNDERFLOW	0x02	/* underflow exception */
 #define	FE_OVERFLOW	0x04	/* overflow exception */
-#define	FE_DIVBYZERO	0x08	/* underflow exception */
+#define	FE_DIVBYZERO	0x08	/* divide-by-zero exception */
 #define	FE_INVALID	0x10	/* invalid operation exception */
 
Index: /trunk/src/sys/arch/mips/include/intr.h
===================================================================
--- /trunk/src/sys/arch/mips/include/intr.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/intr.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: intr.h,v 1.3.96.12 2010/05/16 00:34:45 matt Exp $ */
+/* $NetBSD: intr.h,v 1.3.96.16 2011/02/05 06:31:05 cliff Exp $ */
 /*-
  * Copyright (c) 2009, 2010 The NetBSD Foundation, Inc.
@@ -32,4 +32,8 @@
 #define	_MIPS_INTR_H_
 
+#ifdef _KERNEL_OPT
+#include "opt_multiprocessor.h"
+#endif
+
 /*
  * This is a common <machine/intr.h> for all MIPS platforms.
@@ -47,4 +51,6 @@
 
 #define	_IPL_N		(IPL_HIGH+1)
+#define	_IPL_NAMES(pfx)	{ pfx"none", pfx"softclock/bio", pfx"softnet/serial", \
+			  pfx"vm", pfx"sched", pfx"ddb", pfx"high" }
 
 #define	IST_UNUSABLE	-1		/* interrupt cannot be used */
@@ -62,5 +68,7 @@
 #define	IPI_SYNCICACHE	4		/* sync icache for pages */
 #define	IPI_KPREEMPT	5		/* schedule a kernel preemption */
-#define	NIPIS		6
+#define	IPI_SUSPEND	6		/* DDB suspend signaling */
+#define	IPI_HALT	7		/* halt cpu */
+#define	NIPIS		8
 
 #ifdef __INTR_PRIVATE
@@ -97,6 +105,7 @@
 
 #ifdef _KERNEL
-#ifdef MULTIPROCESSOR
-#define __HAVE_PREEMPTION
+
+#if defined(MULTIPROCESSOR) && defined(__HAVE_FAST_SOFTINTS)
+#define __HAVE_PREEMPTION	1
 #define SOFTINT_KPREEMPT	(SOFTINT_COUNT+0)
 #endif
@@ -123,4 +132,5 @@
 void	_clrsoftintr(uint32_t);
 
+struct cpu_info;
 void	ipi_init(struct cpu_info *);
 void	ipi_process(struct cpu_info *, uint64_t);
Index: /trunk/src/sys/arch/mips/include/locore.h
===================================================================
--- /trunk/src/sys/arch/mips/include/locore.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/locore.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: locore.h,v 1.78.36.1.2.24 2010/05/11 22:08:02 matt Exp $ */
+/* locore.h,v 1.78.36.1.2.29 2011/04/29 08:26:21 matt Exp */
 
 /*
@@ -21,5 +21,5 @@
  * Jump table for MIPS CPU locore functions that are implemented
  * differently on different generations, or instruction-level
- * archtecture (ISA) level, the Mips family.
+ * architecture (ISA) level, the Mips family.
  *
  * We currently provide support for MIPS I and MIPS III.
@@ -33,8 +33,56 @@
 #endif
 
+#include <mips/mutex.h>
 #include <mips/cpuregs.h>
 #include <mips/reg.h>
 
 struct tlbmask;
+struct trapframe;
+
+void	trap(uint32_t, uint32_t, vaddr_t, vaddr_t, struct trapframe *);
+void	ast(void);
+
+void	mips_fpu_trap(vaddr_t, struct trapframe *);
+void	mips_fpu_intr(vaddr_t, struct trapframe *);
+
+vaddr_t mips_emul_branch(struct trapframe *, vaddr_t, uint32_t, bool);
+void	mips_emul_inst(uint32_t, uint32_t, vaddr_t, struct trapframe *);
+
+void	mips_emul_fp(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_branchdelayslot(uint32_t, struct trapframe *, uint32_t);
+
+void	mips_emul_lwc0(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_swc0(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_special(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_special3(uint32_t, struct trapframe *, uint32_t);
+
+void	mips_emul_lwc1(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_swc1(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_ldc1(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_sdc1(uint32_t, struct trapframe *, uint32_t);
+
+void	mips_emul_lb(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_lbu(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_lh(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_lhu(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_lw(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_lwl(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_lwr(uint32_t, struct trapframe *, uint32_t);
+#if defined(__mips_n32) || defined(__mips_n64) || defined(__mips_o64)
+void	mips_emul_lwu(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_ld(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_ldl(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_ldr(uint32_t, struct trapframe *, uint32_t);
+#endif
+void	mips_emul_sb(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_sh(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_sw(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_swl(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_swr(uint32_t, struct trapframe *, uint32_t);
+#if defined(__mips_n32) || defined(__mips_n64) || defined(__mips_o64)
+void	mips_emul_sd(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_sdl(uint32_t, struct trapframe *, uint32_t);
+void	mips_emul_sdr(uint32_t, struct trapframe *, uint32_t);
+#endif
 
 uint32_t mips_cp0_cause_read(void);
@@ -64,100 +112,29 @@
 bool	mips_fixup_exceptions(mips_fixup_callback_t);
 bool	mips_fixup_zero_relative(int32_t, uint32_t [2]);
-void	mips_fixup_stubs(uint32_t *, uint32_t *,
-	    const struct mips_jump_fixup_info *, size_t);
-void	fixup_mips_cpu_switch_resume(void);
-
+void	mips_fixup_stubs(uint32_t *, uint32_t *);
+
+/*
+ * Define these stubs...
+ */
 void	mips_cpu_switch_resume(struct lwp *);
+void	tlb_set_asid(uint32_t);
+void	tlb_invalidate_all(void);
+void	tlb_invalidate_globals(void);
+void	tlb_invalidate_asids(uint32_t, uint32_t);
+void	tlb_invalidate_addr(vaddr_t);
+u_int	tlb_record_asids(u_long *, uint32_t);
+int	tlb_update(vaddr_t, uint32_t);
+void	tlb_enter(size_t, vaddr_t, uint32_t);
+void	tlb_read_indexed(size_t, struct tlbmask *);
+void	tlb_write_indexed(size_t, const struct tlbmask *);
+void	wbflush(void);
 
 #ifdef MIPS1
-void	mips1_tlb_set_asid(uint32_t);
 void	mips1_tlb_invalidate_all(void);
-void	mips1_tlb_invalidate_globals(void);
-void	mips1_tlb_invalidate_asids(uint32_t, uint32_t);
-void	mips1_tlb_invalidate_addr(vaddr_t);
-u_int	mips1_tlb_record_asids(u_long *, uint32_t);
-int	mips1_tlb_update(vaddr_t, uint32_t);
-void	mips1_tlb_enter(size_t, vaddr_t, uint32_t);
-void	mips1_tlb_read_indexed(size_t, struct tlbmask *);
-void	mips1_wbflush(void);
-void	mips1_lwp_trampoline(void);
-void	mips1_setfunc_trampoline(void);
-void	mips1_cpu_switch_resume(struct lwp *);
 
 uint32_t tx3900_cp0_config_read(void);
 #endif
 
-#if defined(MIPS3) || defined(MIPS4)
-void	mips3_tlb_set_asid(uint32_t);
-void	mips3_tlb_invalidate_all(void);
-void	mips3_tlb_invalidate_globals(void);
-void	mips3_tlb_invalidate_asids(uint32_t, uint32_t);
-void	mips3_tlb_invalidate_addr(vaddr_t);
-u_int	mips3_tlb_record_asids(u_long *, uint32_t);
-int	mips3_tlb_update(vaddr_t, uint32_t);
-void	mips3_tlb_enter(size_t, vaddr_t, uint32_t);
-void	mips3_tlb_read_indexed(size_t, struct tlbmask *);
-void	mips3_tlb_write_indexed_VPS(size_t, struct tlbmask *);
-void	mips3_wbflush(void);
-void	mips3_lwp_trampoline(void);
-void	mips3_setfunc_trampoline(void);
-void	mips3_cpu_switch_resume(struct lwp *);
-void	mips3_pagezero(void *dst);
-
-#ifdef MIPS3_5900
-void	mips5900_tlb_set_asid(uint32_t);
-void	mips5900_tlb_invalidate_all(void);
-void	mips5900_tlb_invalidate_globals(void);
-void	mips5900_tlb_invalidate_asids(uint32_t, uint32_t);
-void	mips5900_tlb_invalidate_addr(vaddr_t);
-u_int	mips5900_tlb_record_asids(u_long *, uint32_t);
-int	mips5900_tlb_update(vaddr_t, uint32_t);
-void	mips5900_tlb_enter(size_t, vaddr_t, uint32_t);
-void	mips5900_tlb_read_indexed(size_t, struct tlbmask *);
-void	mips5900_tlb_write_indexed_VPS(size_t, struct tlbmask *);
-void	mips5900_wbflush(void);
-void	mips5900_lwp_trampoline(void);
-void	mips5900_setfunc_trampoline(void);
-void	mips5900_cpu_switch_resume(struct lwp *);
-void	mips5900_pagezero(void *dst);
-#endif
-#endif
-
-#ifdef MIPS32
-void	mips32_tlb_set_asid(uint32_t);
-void	mips32_tlb_invalidate_all(void);
-void	mips32_tlb_invalidate_globals(void);
-void	mips32_tlb_invalidate_asids(uint32_t, uint32_t);
-void	mips32_tlb_invalidate_addr(vaddr_t);
-u_int	mips32_tlb_record_asids(u_long *, uint32_t);
-int	mips32_tlb_update(vaddr_t, uint32_t);
-void	mips32_tlb_enter(size_t, vaddr_t, uint32_t);
-void	mips32_tlb_read_indexed(size_t, struct tlbmask *);
-void	mips32_tlb_write_indexed_VPS(size_t, struct tlbmask *);
-void	mips32_wbflush(void);
-void	mips32_lwp_trampoline(void);
-void	mips32_setfunc_trampoline(void);
-void	mips32_cpu_switch_resume(struct lwp *);
-#endif
-
-#ifdef MIPS64
-void	mips64_tlb_set_asid(uint32_t);
-void	mips64_tlb_invalidate_all(void);
-void	mips64_tlb_invalidate_globals(void);
-void	mips64_tlb_invalidate_asids(uint32_t, uint32_t);
-void	mips64_tlb_invalidate_addr(vaddr_t);
-u_int	mips64_tlb_record_asids(u_long *, uint32_t);
-int	mips64_tlb_update(vaddr_t, uint32_t);
-void	mips64_tlb_enter(size_t, vaddr_t, uint32_t);
-void	mips64_tlb_read_indexed(size_t, struct tlbmask *);
-void	mips64_tlb_write_indexed_VPS(size_t, struct tlbmask *);
-void	mips64_wbflush(void);
-void	mips64_lwp_trampoline(void);
-void	mips64_setfunc_trampoline(void);
-void	mips64_cpu_switch_resume(struct lwp *);
-void	mips64_pagezero(void *dst);
-#endif
-
-#if defined(MIPS3) || defined(MIPS4) || defined(MIPS32) || defined(MIPS64)
+#if (MIPS3 + MIPS4 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 uint32_t mips3_cp0_compare_read(void);
 void	mips3_cp0_compare_write(uint32_t);
@@ -165,9 +142,20 @@
 uint32_t mips3_cp0_config_read(void);
 void	mips3_cp0_config_write(uint32_t);
-#if defined(MIPS32) || defined(MIPS64)
+
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 uint32_t mipsNN_cp0_config1_read(void);
 void	mipsNN_cp0_config1_write(uint32_t);
 uint32_t mipsNN_cp0_config2_read(void);
 uint32_t mipsNN_cp0_config3_read(void);
+
+uintptr_t mipsNN_cp0_watchlo_read(u_int);
+void	mipsNN_cp0_watchlo_write(u_int, uintptr_t);
+uint32_t mipsNN_cp0_watchhi_read(u_int);
+void	mipsNN_cp0_watchhi_write(u_int, uint32_t);
+
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+void	mipsNN_cp0_hwrena_write(uint32_t);
+void	mipsNN_cp0_userlocal_write(void *);
+#endif
 #endif
 
@@ -246,11 +234,9 @@
 void	mips3_sd(volatile uint64_t *, uint64_t);
 #endif	/* __GNUC__ */
-#endif	/* MIPS3 || MIPS4 || MIPS32 || MIPS64 */
-
-#if defined(MIPS3) || defined(MIPS4) || defined(MIPS64)
-static __inline uint32_t	mips3_lw_a64(uint64_t addr)
-		    __attribute__((__unused__));
-static __inline void	mips3_sw_a64(uint64_t addr, uint32_t val)
-		    __attribute__ ((__unused__));
+#endif	/* (MIPS3 + MIPS4 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0 */
+
+#if (MIPS3 + MIPS4 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+static __inline uint32_t	mips3_lw_a64(uint64_t addr) __unused;
+static __inline void	mips3_sw_a64(uint64_t addr, uint32_t val) __unused;
 
 static __inline uint32_t
@@ -328,5 +314,5 @@
 #endif
 }
-#endif	/* MIPS3 || MIPS4 || MIPS64 */
+#endif	/* (MIPS3 + MIPS4 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0 */
 
 /*
@@ -335,4 +321,8 @@
  */
 typedef struct  {
+	void	(*ljv_cpu_switch_resume)(struct lwp *);
+	intptr_t ljv_lwp_trampoline;
+	intptr_t ljv_setfunc_trampoline;
+	void	(*ljv_wbflush)(void);
 	void	(*ljv_tlb_set_asid)(uint32_t pid);
 	void	(*ljv_tlb_invalidate_asids)(uint32_t, uint32_t);
@@ -344,6 +334,17 @@
 	void	(*ljv_tlb_enter)(size_t, vaddr_t, uint32_t);
 	void	(*ljv_tlb_read_indexed)(size_t, struct tlbmask *);
-	void	(*ljv_wbflush)(void);
+	void	(*ljv_tlb_write_indexed)(size_t, const struct tlbmask *);
 } mips_locore_jumpvec_t;
+
+typedef struct {
+	u_int	(*lav_atomic_cas_uint)(volatile u_int *, u_int, u_int);
+	u_long	(*lav_atomic_cas_ulong)(volatile u_long *, u_long, u_long);
+	int	(*lav_ucas_uint)(volatile u_int *, u_int, u_int, u_int *);
+	int	(*lav_ucas_ulong)(volatile u_long *, u_long, u_long, u_long *);
+	void	(*lav_mutex_enter)(kmutex_t *);
+	void	(*lav_mutex_exit)(kmutex_t *);
+	void	(*lav_mutex_spin_enter)(kmutex_t *);
+	void	(*lav_mutex_spin_exit)(kmutex_t *);
+} mips_locore_atomicvec_t;
 
 void	mips_set_wbflush(void (*)(void));
@@ -357,11 +358,11 @@
 
 struct locoresw {
-	void		(*lsw_cpu_switch_resume)(struct lwp *);
-	uintptr_t	lsw_lwp_trampoline;
+	void		(*lsw_wbflush)(void);
 	void		(*lsw_cpu_idle)(void);
-	uintptr_t	lsw_setfunc_trampoline;
 	int		(*lsw_send_ipi)(struct cpu_info *, int);
 	void		(*lsw_cpu_offline_md)(void);
 	void		(*lsw_cpu_init)(struct cpu_info *);
+	void		(*lsw_cpu_run)(struct cpu_info *);
+	int		(*lsw_bus_error)(unsigned int);
 };
 
@@ -373,98 +374,24 @@
 
 /*
- * The "active" locore-fuction vector, and
- */
+ * The "active" locore-function vector, and
+ */
+extern const mips_locore_atomicvec_t mips_llsc_locore_atomicvec;
+extern const mips_locore_atomicvec_t mips_ras_locore_atomicvec;
+
+extern mips_locore_atomicvec_t mips_locore_atomicvec;
 extern mips_locore_jumpvec_t mips_locore_jumpvec;
 extern struct locoresw mips_locoresw;
-extern void mips_vector_init(const struct splsw *);
-
-#if    defined(MIPS1) && !defined(MIPS3) && !defined(MIPS32) && !defined(MIPS64)
-#define tlb_set_asid		mips1_tlb_set_asid
-#define tlb_invalidate_asids	mips1_tlb_invalidate_asids
-#define tlb_invalidate_addr	mips1_tlb_invalidate_addr
-#define tlb_invalidate_globals	mips1_tlb_invalidate_globals
-#define tlb_invalidate_all	mips1_tlb_invalidate_all
-#define tlb_record_asids	mips1_tlb_record_asids
-#define tlb_update		mips1_tlb_update
-#define tlb_enter		mips1_tlb_enter
-#define tlb_read_indexed	mips1_tlb_read_indexed
-#define wbflush			mips1_wbflush
-#define lwp_trampoline		mips1_lwp_trampoline
-#define setfunc_trampoline	mips1_setfunc_trampoline
-#elif !defined(MIPS1) &&  defined(MIPS3) && !defined(MIPS32) && !defined(MIPS64) && !defined(MIPS3_5900)
-#define tlb_set_asid		mips3_tlb_set_asid
-#define tlb_invalidate_asids	mips3_tlb_invalidate_asids
-#define tlb_invalidate_addr	mips3_tlb_invalidate_addr
-#define tlb_invalidate_globals	mips3_tlb_invalidate_globals
-#define tlb_invalidate_all	mips3_tlb_invalidate_all
-#define tlb_record_asids	mips3_tlb_record_asids
-#define tlb_update		mips3_tlb_update
-#define tlb_enter		mips3_tlb_enter
-#define tlb_read_indexed	mips3_tlb_read_indexed
-#define tlb_write_indexed_VPS	mips3_tlb_write_indexed_VPS
-#define lwp_trampoline		mips3_lwp_trampoline
-#define setfunc_trampoline	mips3_setfunc_trampoline
-#define wbflush			mips3_wbflush
-#elif !defined(MIPS1) && !defined(MIPS3) &&  defined(MIPS32) && !defined(MIPS64)
-#define tlb_set_asid		mips32_tlb_set_asid
-#define tlb_invalidate_asids	mips32_tlb_invalidate_asids
-#define tlb_invalidate_addr	mips32_tlb_invalidate_addr
-#define tlb_invalidate_globals	mips32_tlb_invalidate_globals
-#define tlb_invalidate_all	mips32_tlb_invalidate_all
-#define tlb_record_asids	mips32_tlb_record_asids
-#define tlb_update		mips32_tlb_update
-#define tlb_enter		mips32_tlb_enter
-#define tlb_read_indexed	mips32_tlb_read_indexed
-#define tlb_write_indexed_VPS	mips32_tlb_write_indexed_VPS
-#define lwp_trampoline		mips32_lwp_trampoline
-#define setfunc_trampoline	mips32_setfunc_trampoline
-#define wbflush			mips32_wbflush
-#elif !defined(MIPS1) && !defined(MIPS3) && !defined(MIPS32) &&  defined(MIPS64)
- /* all common with mips3 */
-#define tlb_set_asid		mips64_tlb_set_asid
-#define tlb_invalidate_asids	mips64_tlb_invalidate_asids
-#define tlb_invalidate_addr	mips64_tlb_invalidate_addr
-#define tlb_invalidate_globals	mips64_tlb_invalidate_globals
-#define tlb_invalidate_all	mips64_tlb_invalidate_all
-#define tlb_record_asids	mips64_tlb_record_asids
-#define tlb_update		mips64_tlb_update
-#define tlb_enter		mips64_tlb_enter
-#define tlb_read_indexed	mips64_tlb_read_indexed
-#define tlb_write_indexed_VPS	mips64_tlb_write_indexed_VPS
-#define lwp_trampoline		mips64_lwp_trampoline
-#define setfunc_trampoline	mips64_setfunc_trampoline
-#define wbflush			mips64_wbflush
-#elif !defined(MIPS1) &&  defined(MIPS3) && !defined(MIPS32) && !defined(MIPS64) && defined(MIPS3_5900)
-#define tlb_set_asid		mips5900_tlb_set_asid
-#define tlb_invalidate_asids	mips5900_tlb_invalidate_asids
-#define tlb_invalidate_addr	mips5900_tlb_invalidate_addr
-#define tlb_invalidate_globals	mips5900_tlb_invalidate_globals
-#define tlb_invalidate_all	mips5900_tlb_invalidate_all
-#define tlb_record_asids	mips5900_tlb_record_asids
-#define tlb_update		mips5900_tlb_update
-#define tlb_enter		mips5900_tlb_enter
-#define tlb_read_indexed	mips5900_tlb_read_indexed
-#define tlb_write_indexed_VPS	mips5900_tlb_write_indexed_VPS
-#define lwp_trampoline		mips5900_lwp_trampoline
-#define setfunc_trampoline	mips5900_setfunc_trampoline
-#define wbflush			mips5900_wbflush
-#else
-#define tlb_set_asid		(*mips_locore_jumpvec.ljv_tlb_set_asid)
-#define tlb_invalidate_asids	(*mips_locore_jumpvec.ljv_tlb_invalidate_asids)
-#define tlb_invalidate_addr	(*mips_locore_jumpvec.ljv_tlb_invalidate_addr)
-#define tlb_invalidate_globals	(*mips_locore_jumpvec.ljv_tlb_invalidate_globals)
-#define tlb_invalidate_all	(*mips_locore_jumpvec.ljv_tlb_invalidate_all)
-#define tlb_record_asids	(*mips_locore_jumpvec.ljv_tlb_record_asids)
-#define tlb_update		(*mips_locore_jumpvec.ljv_tlb_update)
-#define tlb_enter		(*mips_locore_jumpvec.ljv_tlb_enter)
-#define tlb_read_indexed	(*mips_locore_jumpvec.ljv_tlb_read_indexed)
-#define wbflush			(*mips_locore_jumpvec.ljv_wbflush)
-#define lwp_trampoline		mips_locoresw.lsw_lwp_trampoline
-#define setfunc_trampoline	mips_locoresw.lsw_setfunc_trampoline
-#endif
-
-#define CPU_IDLE		mips_locoresw.lsw_cpu_idle
-
-/* cpu_switch_resume is called inside locore.S */
+
+struct splsw;
+struct mips_vmfreelist;
+struct phys_ram_seg;
+
+void	mips_vector_init(const struct splsw *, bool);
+void	mips_init_msgbuf(void);
+void	mips_init_lwp0_uarea(void);
+void	mips_page_physload(vaddr_t, vaddr_t,
+	    const struct phys_ram_seg *, size_t,
+	    const struct mips_vmfreelist *, size_t);
+
 
 /*
@@ -613,5 +540,13 @@
 #define  MIPS_CP0FL_EBASE	__BIT(5)
 #define  MIPS_CP0FL_CONFIG	__BIT(6)
-#define  MIPS_CP0FL_CONFIGn(n)	(__BIT(7) << ((n) & 7))
+#define  MIPS_CP0FL_CONFIG1	__BIT(7)
+#define  MIPS_CP0FL_CONFIG2	__BIT(8)
+#define  MIPS_CP0FL_CONFIG3	__BIT(9)
+#define  MIPS_CP0FL_CONFIG4	__BIT(10)
+#define  MIPS_CP0FL_CONFIG5	__BIT(11)
+#define  MIPS_CP0FL_CONFIG6	__BIT(12)
+#define  MIPS_CP0FL_CONFIG7	__BIT(13)
+#define  MIPS_CP0FL_USERLOCAL	__BIT(14)
+#define  MIPS_CP0FL_HWRENA	__BIT(15)
 
 /*
@@ -621,8 +556,8 @@
  * RMI company-specific cpu_cidflags
  */
-#define MIPS_CIDFL_RMI_TYPE     	__BITS(2,0)
-# define  CIDFL_RMI_TYPE_XLR     	0
-# define  CIDFL_RMI_TYPE_XLS     	1
-# define  CIDFL_RMI_TYPE_XLP     	2
+#define MIPS_CIDFL_RMI_TYPE		__BITS(2,0)
+# define  CIDFL_RMI_TYPE_XLR		0
+# define  CIDFL_RMI_TYPE_XLS		1
+# define  CIDFL_RMI_TYPE_XLP		2
 #define MIPS_CIDFL_RMI_THREADS_MASK	__BITS(6,3)
 # define MIPS_CIDFL_RMI_THREADS_SHIFT	3
Index: /trunk/src/sys/arch/mips/include/math.h
===================================================================
--- /trunk/src/sys/arch/mips/include/math.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/math.h	(revision 152)
@@ -1,3 +1,6 @@
-/*	$NetBSD: math.h,v 1.4 2002/02/19 13:08:14 simonb Exp $	*/
+/*	$NetBSD: math.h,v 1.4.140.1 2011/04/29 07:48:37 matt Exp $	*/
 
 #define	__HAVE_NANF
+#if defined(__mips_n32) || defined(__mips_n64)
+#define __HAVE_LONG_DOUBLE
+#endif
Index: /trunk/src/sys/arch/mips/include/mcontext.h
===================================================================
--- /trunk/src/sys/arch/mips/include/mcontext.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/mcontext.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mcontext.h,v 1.8.18.4 2010/04/30 16:32:16 matt Exp $	*/
+/*	$NetBSD: mcontext.h,v 1.8.18.5 2011/04/29 08:26:21 matt Exp $	*/
 
 /*-
@@ -126,4 +126,8 @@
 	__gregset_t	__gregs;
 	__fpregset_t	__fpregs;
+	__greg_t	_mc_tlsbase;
+#if !__mips_n32
+	__greg_t	__mc_unused;
+#endif
 } mcontext_t;
 
@@ -135,4 +139,6 @@
 	__gregset32_t		__gregs;
 	struct __fpregset_oabi	__fpregs;
+	__greg32_t		_mc_tlsbase;
+	__greg32_t		__mc_unused;
 } mcontext_o32_t;
 
@@ -140,4 +146,5 @@
 	__gregset_t		__gregs;
 	struct __fpregset_nabi	__fpregs;
+	__greg_t		_mc_tlsbase;
 } mcontext32_t;
 
@@ -146,8 +153,9 @@
 #endif /* !__ASSEMBLER__ */
 
-#define _UC_MACHINE_PAD	16	/* Padding appended to ucontext_t */
+#define _UC_MACHINE_PAD		14	/* Padding appended to ucontext_t */
 
 #define	_UC_SETSTACK	0x00010000
 #define	_UC_CLRSTACK	0x00020000
+#define	_UC_TLSBASE	0x00040000
 
 #define _UC_MACHINE_SP(uc)	((uc)->uc_mcontext.__gregs[_REG_SP])
@@ -160,6 +168,60 @@
 #define _UC_MACHINE32_PC(uc)	_UC_MACHINE_PC(uc)
 #define _UC_MACHINE32_INTRV(uc)	_UC_MACHINE_INTRV(uc)
+#define _UC_MACHINE32_PAD	14	/* Padding appended to ucontext32_t */
 
 #define	_UC_MACHINE32_SET_PC(uc, pc)	_UC_MACHINE_PC((uc), (pc))
 
+#define	__UCONTEXT_SIZE_O32	(40 + 296 +  56)	/* 392 */
+#define	__UCONTEXT_SIZE_N32	(40 + 568 +  56)	/* 664 */
+#define	__UCONTEXT_SIZE_N64	(56 + 576 + 112)	/* 774 */
+
+#ifdef __mips_o32
+#define	__UCONTEXT_SIZE		__UCONTEXT_SIZE_O32
+#elif __mips_n32
+#define	__UCONTEXT_SIZE		__UCONTEXT_SIZE_N32
+#elif __mips_n64
+#define	__UCONTEXT_SIZE		__UCONTEXT_SIZE_N64
+#define	__UCONTEXT32_SIZE	__UCONTEXT_SIZE_N32
+#elif
+#error O64 is not supported
+#endif
+
+#if defined(_LIBC_SOURCE) || defined(_RTLD_SOURCE) || defined(__LIBPTHREAD_SOURCE__)
+#define	TLS_TP_OFFSET	0x7000
+#define	TLS_DTV_OFFSET	0x8000
+
+#include <sys/tls.h>
+
+__CTASSERT(TLS_TP_OFFSET + sizeof(struct tls_tcb) < 0x8000);
+__CTASSERT(TLS_TP_OFFSET % sizeof(struct tls_tcb) == 0);
+
+static __inline struct tls_tcb *
+__lwp_gettcb_fast(void)
+{
+	struct tls_tcb *__tcb;
+
+	/*
+	 * Only emit a rdhwr $3, $29 so the kernel can quickly emulate it.
+	 */
+	__asm __volatile(".set push; .set mips32r2; "
+		"rdhwr $3,$29; .set pop;"
+#ifdef _LP64
+		"daddiu %[__tcb],$3,%1"
+#else
+		"addiu %[__tcb],$3,%1"
+#endif
+	    : [__tcb]"=r"(__tcb)
+	    : [__offset]"n"(-(TLS_TP_OFFSET + sizeof(*__tcb)))
+	    : "v1");
+	return __tcb;
+}
+
+static inline void
+__lwp_settcb(struct tls_tcb *__tcb)
+{
+	__tcb += TLS_TP_OFFSET / sizeof(*__tcb) + 1;
+	_lwp_setprivate(__tcb);
+}
+#endif
+
 #endif	/* _MIPS_MCONTEXT_H_ */
Index: /trunk/src/sys/arch/mips/include/mips_opcode.h
===================================================================
--- /trunk/src/sys/arch/mips/include/mips_opcode.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/mips_opcode.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mips_opcode.h,v 1.12.96.1 2010/05/15 20:27:48 matt Exp $	*/
+/*	$NetBSD: mips_opcode.h,v 1.12.96.3 2011/04/29 08:26:21 matt Exp $	*/
 
 /*-
@@ -174,5 +174,5 @@
 #define OP_LWC1		061
 #define OP_LWC2		062
-#define OP_LWC3		063
+#define OP_PREF		063
 #define OP_LLD		064		/* MIPS-II, for r4000 port */
 #define OP_LDC1		065
@@ -183,5 +183,5 @@
 #define OP_SWC1		071
 #define OP_SWC2		072
-#define OP_SWC3		073
+#define OP_RSVD073	073
 #define OP_SCD		074		/* MIPS-II, for r4000 port */
 #define OP_SDC1		075
@@ -295,10 +295,12 @@
 #define OP_MF		000
 #define OP_DMF		001		/* MIPS-II, for r4000 port */
+#define	OP_CF		002
+#define	OP_MFH		003
 #define OP_MT		004
 #define OP_DMT		005		/* MIPS-II, for r4000 port */
+#define	OP_CT		006
+#define	OP_MTH		007
 #define OP_BCx		010
 #define OP_BCy		014
-#define OP_CF		002
-#define OP_CT		006
 
 /*
Index: /trunk/src/sys/arch/mips/include/mips_param.h
===================================================================
--- /trunk/src/sys/arch/mips/include/mips_param.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/mips_param.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mips_param.h,v 1.23.78.5 2010/02/05 07:36:51 matt Exp $	*/
+/*	$NetBSD: mips_param.h,v 1.23.78.6 2010/08/16 18:01:13 matt Exp $	*/
 
 #ifdef _KERNEL
@@ -70,5 +70,12 @@
 #define NBSEG		(NBPG*NPTEPG)	/* bytes/segment */
 #define	SEGOFSET	(NBSEG-1)	/* byte offset into segment */
-#define	SEGSHIFT	(2*PGSHIFT-2)	/* LOG2(NBSEG) */
+#define	SEGSHIFT	(PGSHIFT+(PGSHIFT-2))	/* LOG2(NBSEG) */
+
+#ifdef _LP64
+#define	NSEGPG		(NBPG/8)
+#define NBXSEG		(NSEGPG*NBSEG)	/* bytes/xsegment */
+#define	XSEGOFSET	(NBSEG-1)	/* byte offset into segment */
+#define	XSEGSHIFT	(SEGSHIFT+(PGSHIFT-3))	/* LOG2(NBXSEG) */
+#endif
 
 /*
Index: /trunk/src/sys/arch/mips/include/pcb.h
===================================================================
--- /trunk/src/sys/arch/mips/include/pcb.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/pcb.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: pcb.h,v 1.20.62.3 2010/02/15 03:09:59 matt Exp $	*/
+/*	$NetBSD: pcb.h,v 1.20.62.5 2010/08/16 23:38:01 matt Exp $	*/
 
 /*
@@ -83,4 +83,12 @@
 #include <mips/reg.h>
 
+struct pcb_faultinfo {
+	void *pfi_faultpte;
+	vaddr_t pfi_faultaddr;
+	u_int pfi_repeats;
+	pid_t pfi_lastpid;
+	uint8_t pfi_faulttype;
+};
+
 /*
  * MIPS process control block
@@ -91,4 +99,5 @@
 	uint32_t pcb_ppl;		/* previous priority level */
 	struct fpreg pcb_fpregs;	/* saved floating point registers */
+	struct pcb_faultinfo pcb_faultinfo;
 };
 
Index: /trunk/src/sys/arch/mips/include/pmap.h
===================================================================
--- /trunk/src/sys/arch/mips/include/pmap.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/pmap.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: pmap.h,v 1.54.26.13 2010/05/04 17:15:53 matt Exp $	*/
+/*	$NetBSD: pmap.h,v 1.54.26.18 2011/04/29 08:26:21 matt Exp $	*/
 
 /*
@@ -75,4 +75,8 @@
 #define	_MIPS_PMAP_H_
 
+#ifdef _KERNEL_OPT
+#include "opt_multiprocessor.h"
+#endif
+
 #include <mips/cpuregs.h>	/* for KSEG0 below */
 //#include <mips/pte.h>
@@ -103,9 +107,16 @@
 #define mips_round_seg(x)	(((vaddr_t)(x) + SEGOFSET) & ~SEGOFSET)
 
+#ifdef _LP64
+#define PMAP_SEGTABSIZE		NSEGPG
+#else
 #define PMAP_SEGTABSIZE		(1 << (31 - SEGSHIFT))
+#endif
 
 union pt_entry;
 
-struct segtab {
+union segtab {
+#ifdef _LP64
+	union segtab	*seg_seg[PMAP_SEGTABSIZE];
+#endif
 	union pt_entry	*seg_tab[PMAP_SEGTABSIZE];
 };
@@ -136,6 +147,6 @@
 	uintptr_t);
 void pmap_segtab_activate(struct pmap *, struct lwp *);
-void pmap_segtab_alloc(struct pmap *);
-void pmap_segtab_free(struct pmap *);
+void pmap_segtab_init(struct pmap *);
+void pmap_segtab_destroy(struct pmap *);
 #endif /* _KERNEL */
 
@@ -165,5 +176,5 @@
 	volatile u_int		pm_shootdown_pending;
 #endif
-	struct segtab		*pm_segtab;	/* pointers to pages of PTEs */
+	union segtab		*pm_segtab;	/* pointers to pages of PTEs */
 	u_int			pm_count;	/* pmap reference count */
 	u_int			pm_flags;
@@ -207,7 +218,7 @@
 #define tlbinfo_index(ti)	(0)
 #endif
+	struct evcnt ti_evcnt_asid_reinits;
 	u_long ti_asid_bitmap[256 / (sizeof(u_long) * 8)];
 };
-
 
 #ifdef	_KERNEL
@@ -255,11 +266,11 @@
 #endif
 void	pmap_tlb_info_init(struct pmap_tlb_info *);
+void	pmap_tlb_info_evcnt_attach(struct pmap_tlb_info *);
 void	pmap_tlb_asid_acquire(pmap_t pmap, struct lwp *l);
 void	pmap_tlb_asid_deactivate(pmap_t pmap);
+void	pmap_tlb_asid_check(void);
 void	pmap_tlb_asid_release_all(pmap_t pmap);
 int	pmap_tlb_update_addr(pmap_t pmap, vaddr_t, uint32_t, bool);
 void	pmap_tlb_invalidate_addr(pmap_t pmap, vaddr_t);
-
-uint16_t pmap_pvlist_lock(struct vm_page *, bool);
 
 /*
@@ -304,4 +315,6 @@
 #endif
 
+uint16_t pmap_pvlist_lock(struct vm_page_md *, bool);
+
 #endif	/* _KERNEL */
 #endif	/* _MIPS_PMAP_H_ */
Index: /trunk/src/sys/arch/mips/include/proc.h
===================================================================
--- /trunk/src/sys/arch/mips/include/proc.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/proc.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: proc.h,v 1.21.36.8 2010/05/15 20:27:48 matt Exp $	*/
+/*	$NetBSD: proc.h,v 1.21.36.10 2011/04/29 08:26:22 matt Exp $	*/
 
 /*
@@ -54,9 +54,8 @@
 #endif
 	int	md_flags;		/* machine-dependent flags */
-	int	md_upte[UPAGES];	/* ptes for mapping u page */
 	vaddr_t	md_ss_addr;		/* single step address for ptrace */
 	int	md_ss_instr;		/* single step instruction for ptrace */
-	volatile u_int md_astpending;	/* AST pending on return to userland */
-	register_t md_tinfo;		/* thread info (TLS) */
+	volatile int md_astpending;	/* AST pending on return to userland */
+	int	md_upte[USPACE/4096];	/* ptes for mapping u page */
 };
 
@@ -71,8 +70,12 @@
 
 #ifdef _KERNEL
+struct lwp;
+
 /* kernel single-step emulation */
-int mips_singlestep(struct lwp *l);
+int	mips_singlestep(struct lwp *);
 
 #define	LWP0_CPU_INFO	&cpu_info_store	/* staticly set in lwp0 */
+
+#define	fpu_used_p(l)	(((l)->l_md.md_flags & MDP_FPUSED) != 0)
 #endif /* _KERNEL */
 
Index: unk/src/sys/arch/mips/include/r5900regs.h
===================================================================
--- /trunk/src/sys/arch/mips/include/r5900regs.h	(revision 151)
+++ 	(revision )
@@ -1,55 +1,0 @@
-/*	$NetBSD: r5900regs.h,v 1.3 2008/04/28 20:23:28 martin Exp $	*/
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by UCHIYAMA Yasushi.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#undef COP0_SYNC
-#define	COP0_SYNC	sync.p
-
-/*
- * R5900 has INT5,1,0 only don't support software interrupt
- * MIPS_SOFT_INT_MASK_1 and MIPS_SOFT_INT_MASK_1 are emulated by kernel.
- */
-#undef MIPS_INT_MASK
-#define	MIPS_INT_MASK		0x0c00
-#undef MIPS_HARD_INT_MASK
-#define	MIPS_HARD_INT_MASK	0x0c00
-
-/*
- * The R5900 doesn't have
- *
- * LLADDR
- * WATCH_LO
- * WATCH_HI
- * TLB_XCONTEXT
- * ECC
- * CACHE_ERR
- * DESAVE
- *  registers.
- */
Index: unk/src/sys/arch/mips/include/softintr.h
===================================================================
--- /trunk/src/sys/arch/mips/include/softintr.h	(revision 151)
+++ 	(revision )
@@ -1,39 +1,0 @@
-/*	$NetBSD: softintr.h,v 1.4 2008/04/28 20:23:28 martin Exp $	*/
-
-/*-
- * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _MIPS_SOFTINTR_H_
-#define _MIPS_SOFTINTR_H_
-
-#ifndef _LOCORE
-extern const u_int32_t mips_ipl_si_to_sr[2];
-#endif /* !_LOCORE */
-
-#endif /* _MIPS_SOFTINTR_H_ */
Index: /trunk/src/sys/arch/mips/include/sysarch.h
===================================================================
--- /trunk/src/sys/arch/mips/include/sysarch.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/sysarch.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sysarch.h,v 1.8.96.1 2010/05/15 20:27:48 matt Exp $ */
+/*	$NetBSD: sysarch.h,v 1.8.96.2 2011/04/29 08:26:22 matt Exp $ */
 
 #ifndef _MIPS_SYSARCH_H_
@@ -9,5 +9,4 @@
 #define MIPS_CACHEFLUSH	0
 #define MIPS_CACHECTL	1
-#define MIPS_TINFOSET	2
 
 struct mips_cacheflush_args {
Index: /trunk/src/sys/arch/mips/include/trap.h
===================================================================
--- /trunk/src/sys/arch/mips/include/trap.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/trap.h	(revision 152)
@@ -1,5 +1,6 @@
-/*	$NetBSD: trap.h,v 1.15 2005/12/11 12:18:09 christos Exp $	*/
+/*	$NetBSD: trap.h,v 1.15.96.1 2011/04/29 08:26:22 matt Exp $	*/
 
 /*
+ * Copyright (c) 1988 University of Utah.
  * Copyright (c) 1992, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -37,43 +38,4 @@
  *	@(#)trap.h	8.1 (Berkeley) 6/10/93
  */
-/*
- * Copyright (c) 1988 University of Utah.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Utah Hdr: trap.h 1.1 90/07/09
- *
- *	@(#)trap.h	8.1 (Berkeley) 6/10/93
- */
 
 /*
@@ -81,4 +43,6 @@
  * also known in trap.c for name strings
  */
+#ifndef _MIPS_TRAP_H_
+#define _MIPS_TRAP_H_
 
 #define T_INT			0	/* Interrupt pending */
@@ -106,2 +70,8 @@
 
 #define	T_USER			0x20	/* user-mode flag or'ed with type */
+
+#if defined(_KERNEL) && !defined(_LOCORE)
+extern const char * const trap_names[];
+#endif
+
+#endif /* _MIPS_TRAP_H_ */
Index: /trunk/src/sys/arch/mips/include/types.h
===================================================================
--- /trunk/src/sys/arch/mips/include/types.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/types.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: types.h,v 1.43.36.15 2010/02/28 23:45:07 matt Exp $	*/
+/*	$NetBSD: types.h,v 1.43.36.17 2011/04/29 08:26:22 matt Exp $	*/
 
 /*-
@@ -54,7 +54,7 @@
 typedef __uint64_t	paddr_t;
 typedef __uint64_t	psize_t;
-#define PRIxPADDR	PRIx64
-#define PRIxPSIZE	PRIx64
-#define PRIdPSIZE	PRId64
+#define	PRIxPADDR	PRIx64
+#define	PRIxPSIZE	PRIx64
+#define	PRIdPSIZE	PRId64
 #else
 #ifndef _STANDALONE
@@ -63,20 +63,20 @@
 typedef __uint32_t	paddr_t;
 typedef __uint32_t	psize_t;
-#define PRIxPADDR	PRIx32
-#define PRIxPSIZE	PRIx32
-#define PRIdPSIZE	PRId32
+#define	PRIxPADDR	PRIx32
+#define	PRIxPSIZE	PRIx32
+#define	PRIdPSIZE	PRId32
 #endif
 #ifdef _LP64
 typedef __uint64_t	vaddr_t;
 typedef __uint64_t	vsize_t;
-#define PRIxVADDR	PRIx64
-#define PRIxVSIZE	PRIx64
-#define PRIdVSIZE	PRId64
+#define	PRIxVADDR	PRIx64
+#define	PRIxVSIZE	PRIx64
+#define	PRIdVSIZE	PRId64
 #else
 typedef __uint32_t	vaddr_t;
 typedef __uint32_t	vsize_t;
-#define PRIxVADDR	PRIx32
-#define PRIxVSIZE	PRIx32
-#define PRIdVSIZE	PRId32
+#define	PRIxVADDR	PRIx32
+#define	PRIxVSIZE	PRIx32
+#define	PRIdVSIZE	PRId32
 #endif
 #endif
@@ -96,6 +96,6 @@
 typedef __int32_t	mips_reg_t;		/* do not use */
 typedef __uint32_t	mips_ureg_t;		/* do not use */
-#define PRIxREGISTER	PRIx32
-#define PRIxUREGISTER	PRIx32
+#define	PRIxREGISTER	PRIx32
+#define	PRIxUREGISTER	PRIx32
 #else
 typedef __int64_t	register_t;
@@ -105,6 +105,6 @@
 typedef __int64_t	register32_t;
 typedef __uint64_t	uregister32_t;
-#define PRIxREGISTER	PRIx64
-#define PRIxUREGISTER	PRIx64
+#define	PRIxREGISTER	PRIx64
+#define	PRIxUREGISTER	PRIx64
 #endif /* __mips_o32 */
 
@@ -129,5 +129,8 @@
 #endif
 
-typedef	volatile int		__cpu_simple_lock_t;
+typedef __uint64_t		__cpuset_t;
+#define	__CPUSET_MAXNUMCPU	64
+
+typedef	volatile unsigned int	__cpu_simple_lock_t;
 
 #define	__SIMPLELOCK_LOCKED	1
@@ -140,5 +143,10 @@
 #define	__HAVE_SYSCALL_INTERN
 #define	__HAVE_PROCESS_XFPREGS
-#define __HAVE_MD_CPU_OFFLINE
+#define	__HAVE_CPU_LWP_SETPRIVATE
+#define	__HAVE_MD_CPU_OFFLINE
+#define	__HAVE_COMMON___TLS_GET_ADDR
+#define	__HAVE___LWP_GETTCB_FAST
+#define	__HAVE___LWP_SETTCB
+#define	__HAVE_TLS_VARIANT_I
 
 #if !defined(__mips_o32)
@@ -148,5 +156,8 @@
 #if defined(_KERNEL)
 #define	__HAVE_RAS
+#if defined(_LP64)
+#define	__HAVE_CPU_VMSPACE_EXEC
 #endif
+#endif /* _KERNEL */
 
 #endif	/* _MACHTYPES_H_ */
Index: /trunk/src/sys/arch/mips/include/vmparam.h
===================================================================
--- /trunk/src/sys/arch/mips/include/vmparam.h	(revision 151)
+++ /trunk/src/sys/arch/mips/include/vmparam.h	(revision 152)
@@ -1,5 +1,6 @@
-/*	$NetBSD: vmparam.h,v 1.41.28.13 2010/03/11 08:19:01 matt Exp $	*/
-
-/*
+/*	$NetBSD: vmparam.h,v 1.41.28.20 2011/04/29 08:26:22 matt Exp $	*/
+
+/*
+ * Copyright (c) 1988 University of Utah.
  * Copyright (c) 1992, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -37,46 +38,11 @@
  *	@(#)vmparam.h	8.2 (Berkeley) 4/22/94
  */
-/*
- * Copyright (c) 1988 University of Utah.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Utah Hdr: vmparam.h 1.16 91/01/18
- *
- *	@(#)vmparam.h	8.2 (Berkeley) 4/22/94
- */
 
 #ifndef _MIPS_VMPARAM_H_
 #define	_MIPS_VMPARAM_H_
+
+#ifdef _KERNEL_OPT
+#include "opt_multiprocessor.h"
+#endif
 
 /*
@@ -97,8 +63,9 @@
  * USRSTACK needs to start a little below 0x8000000 because the R8000
  * and some QED CPUs perform some virtual address checks before the
- * offset is calculated.
- */
-#define	USRSTACK	(VM_MAXUSER_ADDRESS-PAGE_SIZE) /* Start of user stack */
-#define	USRSTACK32	((uint32_t)VM_MAXUSER32_ADDRESS-PAGE_SIZE)
+ * offset is calculated.  We use 0x8000 since that's the max displacement
+ * in an instruction.
+ */
+#define	USRSTACK	(VM_MAXUSER_ADDRESS-0x8000) /* Start of user stack */
+#define	USRSTACK32	((uint32_t)VM_MAXUSER32_ADDRESS-0x8000)
 
 /* alignment requirement for u-area space in bytes */
@@ -108,4 +75,5 @@
  * Virtual memory related constants, all in bytes
  */
+#if defined(__mips_o32)
 #ifndef MAXTSIZ
 #define	MAXTSIZ		(64*1024*1024)		/* max text size */
@@ -123,4 +91,24 @@
 #define	MAXSSIZ		(32*1024*1024)		/* max stack size */
 #endif
+#else
+/*
+ * 64-bit ABIs need more space.
+ */
+#ifndef MAXTSIZ
+#define	MAXTSIZ		(128*1024*1024)		/* max text size */
+#endif
+#ifndef DFLDSIZ
+#define	DFLDSIZ		(256*1024*1024)		/* initial data size limit */
+#endif
+#ifndef MAXDSIZ
+#define	MAXDSIZ		(1536*1024*1024)	/* max data size */
+#endif
+#ifndef	DFLSSIZ
+#define	DFLSSIZ		(16*1024*1024)		/* initial stack size limit */
+#endif
+#ifndef	MAXSSIZ
+#define	MAXSSIZ		(120*1024*1024)		/* max stack size */
+#endif
+#endif /* !__mips_o32 */
 
 /*
@@ -169,9 +157,6 @@
 #define VM_MIN_ADDRESS		((vaddr_t)0x00000000)
 #ifdef _LP64
-#if 1
-#define VM_MAXUSER_ADDRESS	((vaddr_t) 1L << 31)	/* 0x0000000080000000 */
-#else
-#define VM_MAXUSER_ADDRESS	((vaddr_t) 1L << 62)	/* 0x4000000000000000 */
-#endif
+#define VM_MAXUSER_ADDRESS	((vaddr_t) 1L << (4*PGSHIFT-8))
+							/* 0x0000010000000000 */
 #define VM_MAX_ADDRESS		VM_MAXUSER_ADDRESS
 #define VM_MIN_KERNEL_ADDRESS	((vaddr_t) 3L << 62)	/* 0xC000000000000000 */
@@ -205,4 +190,15 @@
 #define	VM_PHYSSEG_NOADD	/* can add RAM after vm_mem_init */
 
+#ifndef VM_NFREELIST
+#define	VM_NFREELIST		16	/* 16 distinct memory segments */
+#define VM_FREELIST_DEFAULT	0
+#define VM_FREELIST_MAX		1
+#endif
+
+#ifdef _KERNEL
+#define	UVM_KM_VMFREELIST	mips_poolpage_vmfreelist
+extern int mips_poolpage_vmfreelist;
+#endif
+
 #define	__HAVE_VM_PAGE_MD
 
@@ -227,10 +223,10 @@
 #define	PG_MD_EXECPAGE		0x0010	/* page is exec mapped */
 
-#define	PG_MD_CACHED_P(pg)	(((pg)->mdpage.pvh_attrs & PG_MD_UNCACHED) == 0)
-#define	PG_MD_UNCACHED_P(pg)	(((pg)->mdpage.pvh_attrs & PG_MD_UNCACHED) != 0)
-#define	PG_MD_MODIFIED_P(pg)	(((pg)->mdpage.pvh_attrs & PG_MD_MODIFIED) != 0)
-#define	PG_MD_REFERENCED_P(pg)	(((pg)->mdpage.pvh_attrs & PG_MD_REFERENCED) != 0)
-#define	PG_MD_POOLPAGE_P(pg)	(((pg)->mdpage.pvh_attrs & PG_MD_POOLPAGE) != 0)
-#define	PG_MD_EXECPAGE_P(pg)	(((pg)->mdpage.pvh_attrs & PG_MD_EXECPAGE) != 0)
+#define	PG_MD_CACHED_P(md)	(((md)->pvh_attrs & PG_MD_UNCACHED) == 0)
+#define	PG_MD_UNCACHED_P(md)	(((md)->pvh_attrs & PG_MD_UNCACHED) != 0)
+#define	PG_MD_MODIFIED_P(md)	(((md)->pvh_attrs & PG_MD_MODIFIED) != 0)
+#define	PG_MD_REFERENCED_P(md)	(((md)->pvh_attrs & PG_MD_REFERENCED) != 0)
+#define	PG_MD_POOLPAGE_P(md)	(((md)->pvh_attrs & PG_MD_POOLPAGE) != 0)
+#define	PG_MD_EXECPAGE_P(md)	(((md)->pvh_attrs & PG_MD_EXECPAGE) != 0)
 
 struct vm_page_md {
@@ -239,42 +235,28 @@
 	volatile u_int pvh_attrs;	/* page attributes */
 	kmutex_t *pvh_lock;		/* pv list lock */
-#define	VM_PAGE_PVLIST_LOCK_INIT(pg) 		\
-	(pg)->mdpage.pvh_lock = NULL
-#define	VM_PAGE_PVLIST_LOCKED_P(pg)		\
-	(mutex_owner((pg)->mdpage.pvh_lock) != 0)
-#define	VM_PAGE_PVLIST_LOCK(pg, list_change)	\
-	pmap_pvlist_lock(pg, list_change)
-#define	VM_PAGE_PVLIST_UNLOCK(pg)		\
-	mutex_spin_exit((pg)->mdpage.pvh_lock);
-#define	VM_PAGE_PVLIST_GEN(pg)		((uint16_t)(pg->mdpage.pvh_attrs >> 16))
+#define	PG_MD_PVLIST_LOCK_INIT(md) 	((md)->pvh_lock = NULL)
+#define	PG_MD_PVLIST_LOCKED_P(md)	(mutex_owner((md)->pvh_lock) != 0)
+#define	PG_MD_PVLIST_LOCK(md, lc)	pmap_pvlist_lock((md), (lc))
+#define	PG_MD_PVLIST_UNLOCK(md)		mutex_spin_exit((md)->pvh_lock)
+#define	PG_MD_PVLIST_GEN(md)		((uint16_t)((md)->pvh_attrs >> 16))
 #else
 	u_int pvh_attrs;		/* page attributes */
-#define	VM_PAGE_PVLIST_LOCK_INIT(pg)	do { } while (/*CONSTCOND*/ 0)
-#define	VM_PAGE_PVLIST_LOCKED_P(pg)	true
-#define	VM_PAGE_PVLIST_LOCK(pg, lc)	(mutex_spin_enter(&pmap_pvlist_mutex), 0)
-#define	VM_PAGE_PVLIST_UNLOCK(pg)	mutex_spin_exit(&pmap_pvlist_mutex)
-#define	VM_PAGE_PVLIST_GEN(pg)		(0)
+#define	PG_MD_PVLIST_LOCK_INIT(md)	do { } while (/*CONSTCOND*/ 0)
+#define	PG_MD_PVLIST_LOCKED_P(md)	true
+#define	PG_MD_PVLIST_LOCK(md, lc)	(mutex_spin_enter(&pmap_pvlist_mutex), 0)
+#define	PG_MD_PVLIST_UNLOCK(md)		mutex_spin_exit(&pmap_pvlist_mutex)
+#define	PG_MD_PVLIST_GEN(md)		(0)
 #endif
 };
 
-#define VM_MDPAGE_INIT(pg)						\
-do {									\
-	(pg)->mdpage.pvh_first.pv_next = NULL;				\
-	(pg)->mdpage.pvh_first.pv_pmap = NULL;				\
-	(pg)->mdpage.pvh_first.pv_va = (pg)->phys_addr;			\
-	VM_PAGE_PVLIST_LOCK_INIT(pg);					\
-	(pg)->mdpage.pvh_attrs = 0;					\
+#define VM_MDPAGE_INIT(pg)					\
+do {								\
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);	\
+	(md)->pvh_first.pv_next = NULL;				\
+	(md)->pvh_first.pv_pmap = NULL;				\
+	(md)->pvh_first.pv_va = VM_PAGE_TO_PHYS(pg);		\
+	PG_MD_PVLIST_LOCK_INIT(md);				\
+	(md)->pvh_attrs = 0;					\
 } while (/* CONSTCOND */ 0)
 
-#ifndef VM_NFREELIST
-#define	VM_NFREELIST		16	/* 16 distinct memory segments */
-#define VM_FREELIST_DEFAULT	0
-#define VM_FREELIST_MAX		1
-#endif
-
-#ifdef _KERNEL
-#define	UVM_KM_VMFREELIST	mips_poolpage_vmfreelist
-extern int mips_poolpage_vmfreelist;
-#endif
-
 #endif /* ! _MIPS_VMPARAM_H_ */
Index: /trunk/src/sys/arch/mips/mips/bds_emul.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/bds_emul.S	(revision 152)
+++ /trunk/src/sys/arch/mips/mips/bds_emul.S	(revision 152)
@@ -0,0 +1,628 @@
+/*	$NetBSD: bds_emul.S,v 1.1.2.2 2011/04/29 08:26:23 matt Exp $	*/
+
+/*
+ * Copyright (c) 1992, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Ralph Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	@(#)fp.s	8.1 (Berkeley) 6/10/93
+ */
+
+#include <sys/cdefs.h>
+
+#include <mips/asm.h>
+#include <mips/cpu.h>			/* for MIPS_CURLWP */
+#include <mips/trap.h>			/* for T_RES_INST */
+
+#include "assym.h"
+
+/* insns are reordered in the way as MIPS architecture imposes */
+	.set	reorder
+
+#define	REG_REGMASK	(0x1f << REG_SCALESHIFT)
+
+/*
+ * Emulate CPU instruction in branch delay slot.
+ * These instructions are not implemented and causes SIGILL.
+ *  jump/branch
+ *  COP0
+ *  trap/syscall/break
+ *
+ * Args are same as mips_emul_fp, eg.
+ * void mips_emul_delayslot(uint32_t insn, struct trapframe *tf, uint32_t cause);
+ * It should be used to emulate an instruction in a branch delay slot.
+ */
+LEAF(mips_emul_branchdelayslot)
+	REG_PROLOGUE
+	REG_S	zero, TF_REG_ZERO(a1)		# ensure zero has value 0
+	REG_EPILOGUE
+	move	t3, ra				# need to save this locally
+
+	srl	t0, a0, 26-PTR_SCALESHIFT
+	andi	t0, 0x3F << PTR_SCALESHIFT
+	PTR_L	t0, bcemul_optbl(t0)
+	j	t0
+
+	.rdata
+bcemul_optbl:
+	PTR_WORD bcemul_special			# 000 SPECIAL
+	PTR_WORD bcemul_sigill			# 001 REGIMM
+	PTR_WORD bcemul_sigill			# 002 J
+	PTR_WORD bcemul_sigill			# 003 JAL
+	PTR_WORD bcemul_sigill			# 004 BEQ
+	PTR_WORD bcemul_sigill			# 005 BNE
+	PTR_WORD bcemul_sigill			# 006 BLEZ
+	PTR_WORD bcemul_sigill			# 007 BGTZ
+	PTR_WORD bcemul_addi			# 010 ADDI
+	PTR_WORD bcemul_addiu			# 011 ADDIU
+	PTR_WORD bcemul_slti			# 012 SLTI
+	PTR_WORD bcemul_sltiu			# 013 SLTIU
+	PTR_WORD bcemul_andi			# 014 ANDI
+	PTR_WORD bcemul_ori			# 015 ORI
+	PTR_WORD bcemul_xori			# 016 XORI
+	PTR_WORD bcemul_lui			# 017 LUI
+	PTR_WORD bcemul_sigill			# 020 COP0
+	PTR_WORD _C_LABEL(mips_emul_fp)		# 021 COP1
+	PTR_WORD bcemul_sigill			# 022 COP2
+	PTR_WORD bcemul_sigill			# 023 COP1X
+	PTR_WORD bcemul_sigill			# 024 BEQL
+	PTR_WORD bcemul_sigill			# 025 BNEL
+	PTR_WORD bcemul_sigill			# 026 BNEZL
+	PTR_WORD bcemul_sigill			# 027 BGTZL
+#ifdef __mips_o32
+	PTR_WORD bcemul_sigill			# 030 DADDI (*)
+	PTR_WORD bcemul_sigill			# 031 DADDIU (*)
+	PTR_WORD bcemul_sigill			# 030 LDL (*)
+	PTR_WORD bcemul_sigill			# 031 LDR (*)
+#else
+	PTR_WORD _C_LABEL(mips_emul_daddi)	# 030 DADDI (*)
+	PTR_WORD _C_LABEL(mips_emul_daddiu)	# 031 DADDIU (*)
+	PTR_WORD _C_LABEL(mips_emul_ldl)	# 032 LDL (*)
+	PTR_WORD _C_LABEL(mips_emul_ldr)	# 033 LDR (*)
+#endif
+	PTR_WORD bcemul_sigill			# 034 SPECIAL2
+	PTR_WORD bcemul_sigill			# 035 JALX
+	PTR_WORD bcemul_sigill			# 036 MDMX
+	PTR_WORD bcemul_sigill			# 037 SPECIAL3
+	PTR_WORD _C_LABEL(mips_emul_lb)		# 040 LB
+	PTR_WORD _C_LABEL(mips_emul_lh)		# 041 LH
+	PTR_WORD _C_LABEL(mips_emul_lwl)	# 042 LWL
+	PTR_WORD _C_LABEL(mips_emul_lw)		# 043 LW
+	PTR_WORD _C_LABEL(mips_emul_lbu)	# 044 LBU
+	PTR_WORD _C_LABEL(mips_emul_lhu)	# 045 LHU
+	PTR_WORD _C_LABEL(mips_emul_lwr)	# 046 LWR
+#ifdef __mips_o32
+	PTR_WORD bcemul_sigill			# 047 LWU (*)
+#else
+	PTR_WORD _C_LABEL(mips_emul_lwu)	# 047 LWU (*)
+#endif
+	PTR_WORD _C_LABEL(mips_emul_sb)		# 050 SB
+	PTR_WORD _C_LABEL(mips_emul_sh)		# 051 SH
+	PTR_WORD _C_LABEL(mips_emul_swl)	# 052 SWL
+	PTR_WORD _C_LABEL(mips_emul_sw)		# 053 SW
+#ifdef __mips_o32
+	PTR_WORD bcemul_sigill			# 054 SDL (*)
+	PTR_WORD bcemul_sigill			# 055 SDR (*)
+#else
+	PTR_WORD _C_LABEL(mips_emul_sdl)	# 054 SDL (*)
+	PTR_WORD _C_LABEL(mips_emul_sdr)	# 055 SDR (*)
+#endif
+	PTR_WORD _C_LABEL(mips_emul_swr)	# 056 SWR
+	PTR_WORD bcemul_sigill			# 057 CACHE
+	PTR_WORD bcemul_sigill			# 060 LL
+	PTR_WORD _C_LABEL(mips_emul_lwc1)	# 061 LWC1
+	PTR_WORD bcemul_sigill			# 062 LWC2
+	PTR_WORD bcemul_sigill			# 063 PREF
+	PTR_WORD bcemul_sigill			# 064 LLD (*)
+	PTR_WORD _C_LABEL(mips_emul_ldc1)	# 065 LDC
+	PTR_WORD bcemul_sigill			# 066 LDC2
+#ifdef __mips_o32
+	PTR_WORD bcemul_sigill			# 067 LD (*)
+#else
+	PTR_WORD _C_LABEL(mips_emul_ld)		# 067 LD (*)
+#endif
+	PTR_WORD bcemul_sigill			# 070 SC
+	PTR_WORD _C_LABEL(mips_emul_swc1)	# 071 SWC1
+	PTR_WORD bcemul_sigill			# 072 SWC2
+	PTR_WORD bcemul_sigill			# 073
+	PTR_WORD bcemul_sigill			# 074 SCD (*)
+	PTR_WORD _C_LABEL(mips_emul_sdc1)	# 075 SDC1
+	PTR_WORD bcemul_sigill			# 076 SDC2
+#ifdef __mips_o32
+	PTR_WORD bcemul_sigill			# 077 SD (*)
+#else
+	PTR_WORD _C_LABEL(mips_emul_sd)		# 077 SD (*)
+#endif
+
+	.text
+bcemul_immed_prologue:
+	srl	t1, a0, 21-REG_SCALESHIFT	# rs (source)
+	srl	t2, a0, 16-REG_SCALESHIFT	# rt (dest)
+	andi	t1, REG_REGMASK
+	andi	t2, REG_REGMASK
+	PTR_ADDU t1, a1
+	PTR_ADDU t2, a1
+	sll	v1, a0, 16
+	sra	v1, v1, 16			# signed immed
+	REG_PROLOGUE
+	REG_L	v0, TF_REG_ZERO(t1)		# load source
+	REG_EPILOGUE
+	j	ra				# execute the instruction
+
+bcemul_uimmed_prologue:
+	srl	t1, a0, 21-REG_SCALESHIFT	# rs (source)
+	srl	t2, a0, 16-REG_SCALESHIFT	# rt (dest)
+	andi	t1, REG_REGMASK
+	andi	t2, REG_REGMASK
+	PTR_ADDU t1, a1
+	PTR_ADDU t2, a1
+	andi	v1, a0, 0xffff			# unsigned immed
+	REG_PROLOGUE
+	REG_L	v0, TF_REG_ZERO(t1)		# load source
+	REG_EPILOGUE
+	j	ra
+
+#ifndef __mips_o32
+bcemul_daddi:
+	bal	bcemul_immed_prologue
+	daddiu	t0, v0, v1
+	b	bcemul_check_add_overflow
+#endif
+
+bcemul_addi:
+	bal	bcemul_immed_prologue
+	addu	t0, v0, v1
+
+bcemul_check_add_overflow:
+	move	ta0, t0		# result
+	move	ta1, v0		# addend 1
+	move	ta2, v1		# addend 2
+
+bcemul_check_overflow:
+	/* Overflow check */
+	xor	ta2, ta1	/* negative + positive can't overflow */
+	bltz	ta2, bcemul_store_and_done
+
+	/* must have added two positive or two negative numbers */
+	xor	ta1, ta0	/* result have same signedness as source? */
+	bgez	ta1, bcemul_store_and_done /* yes, then we didn't overflow */
+
+	b	bcemul_sigill
+
+bcemul_addiu:
+	bal	bcemul_immed_prologue
+	addu	t0, v0, v1
+	b	bcemul_store_and_done
+
+#ifndef __mips_o32
+bcemul_daddiu:
+	bal	bcemul_immed_prologue
+	daddu	t0, v0, v1
+	b	bcemul_store_and_done
+#endif
+
+bcemul_slti:
+	bal	bcemul_immed_prologue
+	slt	t0, v0, v1
+	b	bcemul_store_and_done
+
+bcemul_sltiu:
+	bal	bcemul_immed_prologue
+	sltu	t0, v0, v1
+	b	bcemul_store_and_done
+
+bcemul_andi:
+	bal	bcemul_uimmed_prologue
+	and	t0, v0, v1
+	b	bcemul_store_and_done
+
+bcemul_ori:
+	bal	bcemul_uimmed_prologue
+	or	t0, v0, v1
+	b	bcemul_store_and_done
+
+bcemul_xori:
+	bal	bcemul_uimmed_prologue
+	xor	t0, v0, v1
+	b	bcemul_store_and_done
+
+bcemul_lui:
+	srl	t2, a0, 16-REG_SCALESHIFT	# rt
+	andi	t2, REG_REGMASK
+	PTR_ADDU t2, a1
+	sll	t0, a0, 16
+	b	bcemul_store_and_done
+
+	.rdata
+bcemul_specialtbl:
+	PTR_WORD bcemul_special_genshift	# 000 SLL
+	PTR_WORD bcemul_sigill			# 001 MOVC1
+	PTR_WORD bcemul_special_genshift	# 002 SRL
+	PTR_WORD bcemul_special_genshift	# 003 SRA
+	PTR_WORD bcemul_special_genshiftv	# 004 SLLV
+	PTR_WORD bcemul_sigill			# 005
+	PTR_WORD bcemul_special_genshiftv	# 006 SRLV
+	PTR_WORD bcemul_special_genshiftv	# 007 SRAV
+	PTR_WORD bcemul_sigill			# 010 JR
+	PTR_WORD bcemul_sigill			# 011 JALR
+	PTR_WORD bcemul_sigill			# 012 MOVZ
+	PTR_WORD bcemul_sigill			# 013 MOVN
+	PTR_WORD bcemul_sigill			# 014 SYSCALL
+	PTR_WORD bcemul_sigill			# 015 BREAK
+	PTR_WORD bcemul_sigill			# 016
+	PTR_WORD bcemul_special_sync		# 017 SYNC
+	PTR_WORD bcemul_special_mfhilo		# 020 MFHI
+	PTR_WORD bcemul_special_mthilo		# 021 MTHI
+	PTR_WORD bcemul_special_mfhilo		# 022 MFLO
+	PTR_WORD bcemul_special_mthilo		# 023 MTLO
+#ifdef __mips_o32
+	PTR_WORD bcemul_sigill			# 024 DSLLV (*)
+	PTR_WORD bcemul_sigill			# 025
+	PTR_WORD bcemul_sigill			# 026 DSRLV (*)
+	PTR_WORD bcemul_sigill			# 027 DSRAV (*)
+#else
+	PTR_WORD bcemul_special_genshiftv	# 024 DSLLV (*)
+	PTR_WORD bcemul_sigill			# 025
+	PTR_WORD bcemul_special_genshiftv	# 026 DSRLV (*)
+	PTR_WORD bcemul_special_genshiftv	# 027 DSRAV (*)
+#endif
+	PTR_WORD bcemul_special_genmultdiv	# 030 MULT
+	PTR_WORD bcemul_special_genmultdiv	# 031 MULTU
+	PTR_WORD bcemul_special_genmultdiv	# 032 DIV
+	PTR_WORD bcemul_special_genmultdiv	# 033 DIVU
+#ifdef __mips_o32
+	PTR_WORD bcemul_sigill			# 034 DMULT (*)
+	PTR_WORD bcemul_sigill			# 035 DMULTU (*)
+	PTR_WORD bcemul_sigill			# 036 DDIV (*)
+	PTR_WORD bcemul_sigill			# 037 DDIVU (*)
+#else
+	PTR_WORD bcemul_special_genmultdiv	# 034 DMULT (*)
+	PTR_WORD bcemul_special_genmultdiv	# 035 DMULTU (*)
+	PTR_WORD bcemul_special_genmultdiv	# 036 DDIV (*)
+	PTR_WORD bcemul_special_genmultdiv	# 037 DDIVU (*)
+#endif
+	PTR_WORD bcemul_special_genadd		# 040 ADD
+	PTR_WORD bcemul_special_gen3op		# 041 ADDU
+	PTR_WORD bcemul_special_gensub		# 042 SUB
+	PTR_WORD bcemul_special_gen3op		# 043 SUBU
+	PTR_WORD bcemul_special_gen3op		# 044 AND
+	PTR_WORD bcemul_special_gen3op		# 045 OR
+	PTR_WORD bcemul_special_gen3op		# 046 XOR
+	PTR_WORD bcemul_special_gen3op		# 047 NOR
+	PTR_WORD bcemul_sigill			# 050
+	PTR_WORD bcemul_sigill			# 051
+	PTR_WORD bcemul_special_gen3op		# 052 SLT
+	PTR_WORD bcemul_special_gen3op		# 053 SLTU
+#ifdef __mips_o32
+	PTR_WORD bcemul_sigill			# 054 DADD (*)
+	PTR_WORD bcemul_sigill			# 055 DADDU (*)
+	PTR_WORD bcemul_sigill			# 056 DSUB (*)
+	PTR_WORD bcemul_sigill			# 057 DSUBU (*)
+#else
+	PTR_WORD bcemul_special_genadd		# 054 DADD (*)
+	PTR_WORD bcemul_special_gen3op		# 055 DADDU (*)
+	PTR_WORD bcemul_special_gensub		# 056 DSUB (*)
+	PTR_WORD bcemul_special_gen3op		# 057 DSUBU (*)
+#endif
+	PTR_WORD bcemul_sigill			# 060 TGE
+	PTR_WORD bcemul_sigill			# 061 TGEU
+	PTR_WORD bcemul_sigill			# 062 TLT
+	PTR_WORD bcemul_sigill			# 063 TLTU
+	PTR_WORD bcemul_sigill			# 064 TEQ
+	PTR_WORD bcemul_sigill			# 065
+	PTR_WORD bcemul_sigill			# 066 TNE
+	PTR_WORD bcemul_sigill			# 067
+#ifdef __mips_o32
+	PTR_WORD bcemul_sigill			# 070 DSLL (*)
+	PTR_WORD bcemul_sigill			# 071
+	PTR_WORD bcemul_sigill			# 072 DSRL (*)
+	PTR_WORD bcemul_sigill			# 073 DSRA (*)
+	PTR_WORD bcemul_sigill			# 074 DSLL32 (*)
+	PTR_WORD bcemul_sigill			# 075
+	PTR_WORD bcemul_sigill			# 076 DSRL32 (*)
+	PTR_WORD bcemul_sigill			# 077 DSRA32 (*)
+#else
+	PTR_WORD bcemul_special_genshift	# 070 DSLL (*)
+	PTR_WORD bcemul_sigill			# 071
+	PTR_WORD bcemul_special_genshift	# 072 DSRL (*)
+	PTR_WORD bcemul_special_genshift	# 073 DSRA (*)
+	PTR_WORD bcemul_special_genshift	# 074 DSLL32 (*)
+	PTR_WORD bcemul_sigill			# 075
+	PTR_WORD bcemul_special_genshift	# 076 DSRL32 (*)
+	PTR_WORD bcemul_special_genshift	# 077 DSRA32 (*)
+#endif
+
+	.text
+	.set push
+	.set noreorder
+	.set nomacro
+	.set mips64
+bcemul_special_op:
+	jr	ra;	sllv	t0, v0, v1	# 000 SLL
+	jr	ra;	nop			# 001 MOVC1
+	jr	ra;	srlv	t0, v0, v1	# 002 SRL
+	jr	ra;	srav	t0, v0, v1	# 003 SRA
+	jr	ra;	sllv	t0, v0, v1	# 004 SLLV
+	jr	ra;	nop			# 005 *
+	jr	ra;	srlv	t0, v0, v1	# 006 SRLV
+	jr	ra;	srav	t0, v0, v1	# 007 SRAV
+ 
+	jr	ra;	nop			# 010 JR
+	jr	ra;	nop			# 011 JALR
+	jr	ra;	movz	t0, v0, v1	# 012 MOVZ
+	jr	ra;	movn	t0, v0, v1	# 013 MOVN
+	jr	ra;	nop			# 014 SYSCALL
+	jr	ra;	nop			# 015 BREAK
+	jr	ra;	nop			# 016 *
+	jr	ra;	nop			# 017 SYNC
+
+	jr	ra;	mfhi	t0		# 020 MFHI
+	jr	ra;	mthi	v0		# 021 MTHI
+	jr	ra;	mflo	t0		# 022 MFLO
+	jr	ra;	mtlo	v0		# 023 MTLO
+	jr	ra;	dsllv	t0, v0, v1	# 024 DSLLV
+	jr	ra;	nop			# 025 *
+	jr	ra;	dsrlv	t0, v0, v1	# 026 DSRLV
+	jr	ra;	dsrav	t0, v0, v1	# 027 DSRAV
+
+	jr	ra;	mult	v0, v1		# 030 MULT
+	jr	ra;	multu	v0, v1		# 031 MULTU
+	jr	ra;	div	$0, v0, v1	# 032 DIV
+	jr	ra;	divu	$0, v0, v1	# 033 DIVU
+	jr	ra;	dmult	v0, v1		# 034 DMULT
+	jr	ra;	dmultu	v0, v1		# 035 DMULTU
+	jr	ra;	ddiv	$0, v0, v1	# 036 DDIV
+	jr	ra;	ddivu	$0, v0, v1	# 037 DDIVU
+
+	jr	ra;	add	t0, v0, v1	# 040 ADD
+	jr	ra;	addu	t0, v0, v1	# 041 ADDU
+	jr	ra;	sub	t0, v0, v1	# 042 SUB
+	jr	ra;	subu	t0, v0, v1	# 043 SUBU
+	jr	ra;	and	t0, v0, v1	# 044 AND
+	jr	ra;	or	t0, v0, v1	# 045 OR
+	jr	ra;	xor	t0, v0, v1	# 046 XOR
+	jr	ra;	nor	t0, v0, v1	# 047 NOR
+
+	jr	ra;	nop			# 050 *
+	jr	ra;	nop			# 051 *
+	jr	ra;	slt	t0, v0, v1	# 052 SLT
+	jr	ra;	sltu	t0, v0, v1	# 053 SLTU
+	jr	ra;	dadd	t0, v0, v1	# 054 DADD
+	jr	ra;	daddu	t0, v0, v1	# 055 DADDU
+	jr	ra;	dsub	t0, v0, v1	# 056 DSUB
+	jr	ra;	dsubu	t0, v0, v1	# 057 DSUBU
+
+	jr	ra;	tge	v0, v1		# 060 TGE
+	jr	ra;	tgeu	v0, v1		# 061 TGEU
+	jr	ra;	tlt	v0, v1		# 062 TLT
+	jr	ra;	tltu	v0, v1		# 063 TLTU
+	jr	ra;	teq	v0, v1		# 064 TEQ
+	jr	ra;	nop			# 065 *
+	jr	ra;	tne	v0, v1		# 066 TNE
+	jr	ra;	nop			# 067 *
+
+	jr	ra;	dsllv	t0, v0, v1	# 070 DSLL
+	jr	ra;	nop			# 071 *
+	jr	ra;	dsrlv	t0, v0, v1	# 072 DSRL
+	jr	ra;	dsrav	t0, v0, v1	# 073 DSRA
+	jr	ra;	dsllv	t0, v0, v1	# 074 DSLL32
+	jr	ra;	nop			# 075 *
+	jr	ra;	dsrlv	t0, v0, v1	# 076 DSRL32
+	jr	ra;	dsrav	t0, v0, v1	# 077 DSRA32
+	.set pop	
+
+bcemul_special:
+	andi	t0, a0, 0x3f			# get special code
+	sll	t1, t0, 3			# calculate index in specialop
+	sll	t0, PTR_SCALESHIFT
+	PTR_LA	t9, bcemul_special_op(t1)
+	PTR_L	t0, bcemul_specialtbl(t0)
+	j	t0
+
+bcemul_special_3op_prologue:
+	srl	t0, a0, 21-REG_SCALESHIFT	# rs (source1)
+	srl	t1, a0, 16-REG_SCALESHIFT	# rt (source2)
+	srl	t2, a0, 11-REG_SCALESHIFT	# rd (dest)
+	andi	t0, REG_REGMASK
+	andi	t1, REG_REGMASK
+	andi	t2, REG_REGMASK
+	PTR_ADDU t0, a1
+	PTR_ADDU t1, a1
+	PTR_ADDU t2, a1
+	REG_PROLOGUE
+	REG_L	v0, TF_REG_ZERO(t0)		# load source1
+	REG_L	v1, TF_REG_ZERO(t1)		# load source2
+	REG_EPILOGUE
+	j	t9
+
+bcemul_special_2src_prologue:
+	srl	t0, a0, 21-REG_SCALESHIFT	# rs (source1)
+	srl	t1, a0, 16-REG_SCALESHIFT	# rt (source2)
+	andi	t0, REG_REGMASK
+	andi	t1, REG_REGMASK
+	PTR_ADDU t0, a1
+	PTR_ADDU t1, a1
+	REG_PROLOGUE
+	REG_L	v0, TF_REG_ZERO(t0)		# load source1
+	REG_L	v1, TF_REG_ZERO(t1)		# load source2
+	REG_EPILOGUE
+	j	t9
+
+bcemul_special_genshift:
+	srl	t1, a0, 16-REG_SCALESHIFT	# rt (source)
+	srl	t2, a0, 11-REG_SCALESHIFT	# rd (dest)
+	srl	v1, a0, 6			# sa
+	andi	t1, REG_REGMASK
+	andi	t2, REG_REGMASK
+	beqz	t2, bcemul_done			# fast escape for nop variants
+	andi	v1, 0x001F
+#ifndef __mips_o32
+	/*
+	 * Deal with DSLL32, DSRA32, DSRL32 who need 32 added to their
+	 * shift count.
+	 */
+	andi	v0, a0, 077			# focus on special op
+	sltiu	v0, v0, 074			# less than DSLL32?
+	xori	v0, 1				# invert result
+	sll	v0, 5				# shift by 5 (now 0 or 32)
+	addu	v1, v0				# add to shift count
+#endif
+	PTR_ADDU t1, a1
+	PTR_ADDU t2, a1
+	REG_PROLOGUE
+	REG_L	v0, TF_REG_ZERO(t1)		# load source
+	REG_EPILOGUE
+	jal	t9
+	j	bcemul_store_and_done
+
+bcemul_special_sync:
+	b	bcemul_done
+
+bcemul_special_mfhilo:
+	srl	t2, a0, 11-REG_SCALESHIFT	# rd (dest)
+	andi	t2, REG_REGMASK
+	PTR_ADDU t1, a1, TF_REG_MULHI
+	PTR_ADDU t2, a1
+	and	v0, a0, 2			# bit 1: 0=HI 1=LO
+	sll	v0, REG_SCALESHIFT - 1
+#if TF_REG_MULLO < TF_REG_MULHI
+	PTR_SUBU t1, v0
+#else
+	PTR_ADDU t1, v0
+#endif
+	REG_PROLOGUE
+	REG_L	t0, TF_REG_ZERO(t1)		# load source (mullo or mulhi)
+	REG_EPILOGUE
+	b	bcemul_store_and_done
+
+bcemul_special_mthilo:
+	srl	t1, a0, 21-REG_SCALESHIFT	# rs (source)
+	andi	t1, REG_REGMASK
+	PTR_ADDU t1, a1
+	PTR_ADDU t2, a1, TF_REG_MULHI
+	and	v0, a0, 2			# bit 1: 0=HI l=LO
+	sll	v0, REG_SCALESHIFT - 1
+#if TF_REG_MULLO < TF_REG_MULHI
+	PTR_SUBU t2, v0	
+#else
+	PTR_ADDU t2, v0
+#endif
+	REG_PROLOGUE
+	REG_L	t0, TF_REG_ZERO(t1)
+	REG_EPILOGUE
+	b	bcemul_store_and_done
+
+bcemul_special_genmultdiv:
+	bal	bcemul_special_2src_prologue	# grab operands and do it.
+	mflo	v0
+	mfhi	v1
+	REG_PROLOGUE
+	REG_S	v0, TF_REG_MULLO(a1)
+	REG_S	v1, TF_REG_MULHI(a1)
+	REG_EPILOGUE
+	b	bcemul_done
+
+bcemul_special_genadd:
+	bal	bcemul_special_3op_prologue
+	b	bcemul_check_add_overflow
+
+bcemul_special_gensub:
+	bal	bcemul_special_3op_prologue
+
+	/*
+	 * t0 = v0 - v1 which means v0 = t0 + v1
+	 * Now we can the same logic for overflow from addition.
+	 */
+	move	ta0, v0
+	move	ta1, t0
+	move	ta2, v1
+
+	b	bcemul_check_overflow
+
+bcemul_special_genshiftv:
+bcemul_special_gen3op:
+	bal	bcemul_special_3op_prologue
+	#b	bcemul_store_and_done	# fallthrough to bcemul_store_and_done
+
+bcemul_store_and_done:
+	beq	a1, t2, bcemul_done	# don't store to zero
+	REG_PROLOGUE
+	REG_S	t0, TF_REG_ZERO(t2)
+	REG_EPILOGUE
+	#b	bcemul_done		# fallthrough to bcemul_done
+
+bcemul_done:
+/*
+ * Succeeded to emulate instruction with no error
+ * so compute the next PC.
+ */
+	PTR_SUBU sp, CALLFRAME_SIZ
+	REG_S	t3, CALLFRAME_RA(sp)
+	REG_S	s0, CALLFRAME_S0(sp)
+	move	s0, a1			# save trapfame
+
+	/* Fetch previous branch instruction */
+	REG_PROLOGUE
+	REG_L	a0, TF_REG_EPC(s0)
+	REG_EPILOGUE
+	jal	_C_LABEL(ufetch_uint32)
+
+	/* Calculate branch destination */
+	sll	t0, v0, 16
+	sra	t0, t0, 16-2
+	REG_PROLOGUE
+	REG_L	t1, TF_REG_EPC(s0)
+	PTR_ADDU t0, 4
+	PTR_ADDU t1, t0
+	REG_S	t1, TF_REG_EPC(s0)
+	REG_EPILOGUE
+
+	REG_L	ra, CALLFRAME_RA(sp)
+	REG_L	s0, CALLFRAME_S0(sp)
+	PTR_ADDU sp, CALLFRAME_SIZ
+	j	ra
+
+/*
+ * Send SIGILL, SIGFPE.
+ * Args are same as mips_emul_fp.
+ */
+bcemul_sigill:
+	li	t0, 0xFFFFFF00
+	and	a2, a2, t0
+	ori	a2, a2, T_RES_INST << MIPS_CR_EXC_CODE_SHIFT
+	REG_PROLOGUE
+	REG_S	a2, TF_REG_CAUSE(a1)
+	REG_EPILOGUE
+
+	move	ra, t3				# restore ra
+	move	a1, a0				# code = instruction
+	move	a0, MIPS_CURLWP			# get current process
+	j	_C_LABEL(mips_fpuillinst)
+
+END(mips_emul_branchdelayslot)
Index: /trunk/src/sys/arch/mips/mips/bus_dma.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/bus_dma.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/bus_dma.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: bus_dma.c,v 1.22.16.17 2010/04/20 22:08:39 matt Exp $	*/
+/*	bus_dma.c,v 1.22.16.18 2011/04/29 08:26:23 matt Exp	*/
 
 /*-
@@ -33,5 +33,5 @@
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.22.16.17 2010/04/20 22:08:39 matt Exp $");
+__KERNEL_RCSID(0, "bus_dma.c,v 1.22.16.18 2011/04/29 08:26:23 matt Exp");
 
 #include <sys/param.h>
@@ -44,5 +44,5 @@
 #include <sys/evcnt.h>
 
-#include <uvm/uvm_extern.h>
+#include <uvm/uvm.h>
 
 #include <mips/cache.h>
@@ -935,4 +935,5 @@
 			panic("_bus_dmamem_alloc");
 		}
+		KASSERT(uvmexp.colormask == 0 || (atop(curaddr - lastaddr) & uvmexp.colormask) == 1);
 #endif
 		if (curaddr == (lastaddr + PAGE_SIZE))
@@ -1021,5 +1022,7 @@
 	size = round_page(size);
 
-	va = uvm_km_alloc(kernel_map, size, 0, UVM_KMF_VAONLY | kmflags);
+	va = uvm_km_alloc(kernel_map, size,
+	    atop(segs[0].ds_addr) & uvmexp.colormask,
+	    UVM_KMF_COLORMATCH | UVM_KMF_VAONLY | kmflags);
 
 	if (va == 0)
Index: /trunk/src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: bus_space_alignstride_chipdep.c,v 1.10.18.12 2010/01/14 05:02:38 cliff Exp $ */
+/* bus_space_alignstride_chipdep.c,v 1.10.18.12 2010/01/14 05:02:38 cliff Exp */
 
 /*-
@@ -82,5 +82,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bus_space_alignstride_chipdep.c,v 1.10.18.12 2010/01/14 05:02:38 cliff Exp $");
+__KERNEL_RCSID(0, "bus_space_alignstride_chipdep.c,v 1.10.18.12 2010/01/14 05:02:38 cliff Exp");
 
 #ifdef CHIP_EXTENT
@@ -760,6 +760,7 @@
 
 		size = round_page((addr % PAGE_SIZE) + size);
-		va = uvm_km_alloc(kernel_map, size, PAGE_SIZE,
-			UVM_KMF_VAONLY | UVM_KMF_NOWAIT);
+		va = uvm_km_alloc(kernel_map, size,
+		    atop(addr) & uvmexp.colormask,
+		    UVM_KMF_COLORMATCH | UVM_KMF_VAONLY | UVM_KMF_NOWAIT);
 		if (va == 0)
 			return ENOMEM;
Index: /trunk/src/sys/arch/mips/mips/cache.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/cache.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/cache.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cache.c,v 1.33.96.3 2010/01/26 21:19:25 matt Exp $	*/
+/*	cache.c,v 1.33.96.4 2011/04/29 08:26:23 matt Exp	*/
 
 /*
@@ -69,5 +69,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cache.c,v 1.33.96.3 2010/01/26 21:19:25 matt Exp $");
+__KERNEL_RCSID(0, "cache.c,v 1.33.96.4 2011/04/29 08:26:23 matt Exp");
 
 #include "opt_cputype.h"
@@ -93,5 +93,5 @@
 #endif
 
-#if defined(MIPS32) || defined(MIPS64)
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 #include <mips/mipsNN.h>		/* MIPS32/MIPS64 registers */
 #include <mips/cache_mipsNN.h>
@@ -111,7 +111,4 @@
 
 #if defined(MIPS3) || defined(MIPS4)
-#ifdef MIPS3_5900
-#include <mips/cache_r5900.h>
-#endif /* MIPS3_5900 */
 void	mips3_get_cache_config(int);
 #ifdef ENABLE_MIPS4_CACHE_R10K
@@ -123,5 +120,5 @@
 static void mips_config_cache_prehistoric(void);
 #endif
-#if defined(MIPS32) || defined(MIPS64)
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 static void mips_config_cache_modern(void);
 #endif
@@ -170,5 +167,5 @@
 		mips_config_cache_prehistoric();
 #endif
-#if defined(MIPS32) || defined(MIPS64)
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 	if (MIPS_PRID_CID(cpu_id) != MIPS_PRID_CID_PREHISTORIC)
 		mips_config_cache_modern();
@@ -185,5 +182,5 @@
 			panic("no icache_sync_range_index cache op");
 	}
-	if (mci->mci_pdcache_size || 1) {	/* XXX- must have primary Icache */
+	if (mci->mci_pdcache_size || 1) {	/* XXX- must have primary Dcache */
 		if (!mco->mco_pdcache_wbinv_all)
 			panic("no pdcache_wbinv_all");
@@ -542,37 +539,4 @@
 		/* Virtually-indexed cache; no use for colors. */
 		break;
-#ifdef MIPS3_5900
-	case MIPS_R5900:
-		/* cache spec */
-		mci->mci_picache_ways = 2;
-		mci->mci_pdcache_ways = 2;
-		mci->mci_picache_size = CACHE_R5900_SIZE_I;
-		mci->mci_picache_line_size = CACHE_R5900_LSIZE_I;
-		mci->mci_pdcache_size = CACHE_R5900_SIZE_D;
-		mci->mci_pdcache_line_size = CACHE_R5900_LSIZE_D;
-		mci->mci_cache_alias_mask =
-		    ((mci->mci_pdcache_size / mci->mci_pdcache_ways) - 1) & ~PAGE_MASK;
-		mci->mci_cache_prefer_mask =
-		    max(mci->mci_pdcache_size, mci->mci_picache_size) - 1;
-		mci->mci_cache_virtual_alias = true;
-		/* cache ops */
-		mco->mco_icache_sync_all =
-		    r5900_icache_sync_all_64;
-		mco->mco_icache_sync_range =
-		    r5900_icache_sync_range_64;
-		mco->mco_icache_sync_range_index =
-		    r5900_icache_sync_range_index_64;
-		mco->mco_pdcache_wbinv_all =
-		    r5900_pdcache_wbinv_all_64;
-		mco->mco_pdcache_wbinv_range =
-		    r5900_pdcache_wbinv_range_64;
-		mco->mco_pdcache_wbinv_range_index =
-		    r5900_pdcache_wbinv_range_index_64;
-		mco->mco_pdcache_inv_range =
-		    r5900_pdcache_inv_range_64;
-		mco->mco_pdcache_wb_range =
-		    r5900_pdcache_wb_range_64;
-		break;
-#endif /* MIPS3_5900 */
 #ifdef ENABLE_MIPS4_CACHE_R10K
 	case MIPS_R10000:
@@ -866,4 +830,5 @@
 	mci->mci_cache_prefer_mask =
 	    max(mci->mci_pdcache_size, mci->mci_picache_size) - 1;
+	uvmexp.ncolors = (mci->mci_cache_alias_mask >> PAGE_SHIFT) + 1;
 
 	switch(MIPS_PRID_IMPL(cpu_id)) {
@@ -921,7 +886,7 @@
 #endif /* MIPS1 || MIPS3 || MIPS4 */
 
-#if defined(MIPS32) || defined(MIPS64)
-
-static void cache_noop(void) __attribute__((__unused__));
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+
+static void cache_noop(void) __unused;
 static void cache_noop(void) {}
 
@@ -967,5 +932,5 @@
 		    mci->mci_pdcache_way_size * mci->mci_pdcache_ways;
 		mci->mci_pdcache_way_mask = mci->mci_pdcache_way_size - 1;
-		uvmexp.ncolors = atop(mci->mci_pdcache_size) / mci->mci_pdcache_ways;
+		uvmexp.ncolors = atop(mci->mci_pdcache_way_size);
 		break;
 	}
@@ -995,4 +960,6 @@
 		    mci->mci_picache_way_size * mci->mci_picache_ways;
 		mci->mci_picache_way_mask = mci->mci_picache_way_size - 1;
+		if (uvmexp.ncolors < atop(mci->mci_picache_way_size))
+			uvmexp.ncolors = atop(mci->mci_picache_way_size);
 		break;
 	}
@@ -1138,3 +1105,3 @@
 	}
 }
-#endif /* MIPS32 || MIPS64 */
+#endif /* MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL > 0 */
Index: /trunk/src/sys/arch/mips/mips/cache_mipsNN.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/cache_mipsNN.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/cache_mipsNN.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cache_mipsNN.c,v 1.11.78.4 2010/05/11 20:55:22 matt Exp $	*/
+/*	$NetBSD: cache_mipsNN.c,v 1.11.78.5 2011/04/29 08:26:23 matt Exp $	*/
 
 /*
@@ -37,5 +37,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cache_mipsNN.c,v 1.11.78.4 2010/05/11 20:55:22 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cache_mipsNN.c,v 1.11.78.5 2011/04/29 08:26:23 matt Exp $");
 
 #include <sys/param.h>
@@ -61,5 +61,5 @@
 #endif
 
-#if defined(__mips_o32)
+#ifdef __mips_o32
 __asm(".set mips32");
 #else
@@ -69,6 +69,4 @@
 static int picache_stride;
 static int picache_loopcount;
-static int pdcache_stride;
-static int pdcache_loopcount;
 
 void
@@ -76,5 +74,5 @@
 {
 	struct mips_cache_info * const mci = &mips_cache_info;
-	int flush_multiple_lines_per_way;
+	bool flush_multiple_lines_per_way;
 
 	flush_multiple_lines_per_way = mci->mci_picache_way_size > PAGE_SIZE;
@@ -85,5 +83,5 @@
 		 * need to flush one pages' worth.
 		 */
-		flush_multiple_lines_per_way = 0;
+		flush_multiple_lines_per_way = false;
 	}
 
@@ -97,12 +95,4 @@
 	}
 
-	if (mci->mci_pdcache_way_size < PAGE_SIZE) {
-		pdcache_stride = mci->mci_pdcache_way_size;
-		pdcache_loopcount = mci->mci_pdcache_ways;
-	} else {
-		pdcache_stride = PAGE_SIZE;
-		pdcache_loopcount = (mci->mci_pdcache_way_size / PAGE_SIZE) *
-		    mci->mci_pdcache_ways;
-	}
 #define CACHE_DEBUG
 #ifdef CACHE_DEBUG
@@ -111,6 +101,4 @@
 	printf("  picache_stride    = %d\n", picache_stride);
 	printf("  picache_loopcount = %d\n", picache_loopcount);
-	printf("  pdcache_stride    = %d\n", pdcache_stride);
-	printf("  pdcache_loopcount = %d\n", pdcache_loopcount);
 #endif
 }
@@ -229,4 +217,13 @@
 
 	/*
+	 * If we are going to flush more than is in a way, we are flushing
+	 * everything.
+	 */
+	if (eva - va >= mci->mci_picache_way_size) {
+		mipsNN_icache_sync_all_16();
+		return;
+	}
+
+	/*
 	 * GCC generates better code in the loops if we reference local
 	 * copies of these global variables.
@@ -239,7 +236,8 @@
 	while ((eva - va) >= (8 * 16)) {
 		tmpva = va;
-		for (i = 0; i < loopcount; i++, tmpva += stride)
+		for (i = 0; i < loopcount; i++, tmpva += stride) {
 			cache_r4k_op_8lines_16(tmpva,
 			    CACHE_R4K_I|CACHEOP_R4K_INDEX_INV);
+		}
 		va += 8 * 16;
 	}
@@ -247,7 +245,8 @@
 	while (va < eva) {
 		tmpva = va;
-		for (i = 0; i < loopcount; i++, tmpva += stride)
+		for (i = 0; i < loopcount; i++, tmpva += stride) {
 			cache_op_r4k_line(tmpva,
 			    CACHE_R4K_I|CACHEOP_R4K_INDEX_INV);
+		}
 		va += 16;
 	}
@@ -267,12 +266,16 @@
 	 * address out of them.
 	 */
-	if (size >= mci->mci_picache_way_size) {
-		va = MIPS_KSEG0_START;
-		eva = va + mci->mci_picache_way_size;
-	} else {
-		va = MIPS_PHYS_TO_KSEG0(va & mci->mci_picache_way_mask);
-
-		eva = round_line32(va + size);
-		va = trunc_line32(va);
+	va = MIPS_PHYS_TO_KSEG0(va & mci->mci_picache_way_mask);
+
+	eva = round_line32(va + size);
+	va = trunc_line32(va);
+
+	/*
+	 * If we are going to flush more than is in a way, we are flushing
+	 * everything.
+	 */
+	if (eva - va >= mci->mci_picache_way_size) {
+		mipsNN_icache_sync_all_32();
+		return;
 	}
 
@@ -288,7 +291,8 @@
 	while ((eva - va) >= (8 * 32)) {
 		tmpva = va;
-		for (i = 0; i < loopcount; i++, tmpva += stride)
+		for (i = 0; i < loopcount; i++, tmpva += stride) {
 			cache_r4k_op_8lines_32(tmpva,
 			    CACHE_R4K_I|CACHEOP_R4K_INDEX_INV);
+		}
 		va += 8 * 32;
 	}
@@ -296,7 +300,8 @@
 	while (va < eva) {
 		tmpva = va;
-		for (i = 0; i < loopcount; i++, tmpva += stride)
+		for (i = 0; i < loopcount; i++, tmpva += stride) {
 			cache_op_r4k_line(tmpva,
 			    CACHE_R4K_I|CACHEOP_R4K_INDEX_INV);
+		}
 		va += 32;
 	}
@@ -393,11 +398,7 @@
 }
 
-void
-mipsNN_pdcache_wbinv_range_index_16(vaddr_t va, vsize_t size)
-{
-	struct mips_cache_info * const mci = &mips_cache_info;
-	vaddr_t eva, tmpva;
-	int i, stride, loopcount;
-
+static void
+mipsNN_pdcache_wbinv_range_index_16_intern(vaddr_t va, vaddr_t eva)
+{
 	/*
 	 * Since we're doing Index ops, we expect to not be able
@@ -406,40 +407,20 @@
 	 * address out of them.
 	 */
-	va = MIPS_PHYS_TO_KSEG0(va & mci->mci_pdcache_way_mask);
-
-	eva = round_line16(va + size);
-	va = trunc_line16(va);
-
-	/*
-	 * GCC generates better code in the loops if we reference local
-	 * copies of these global variables.
-	 */
-	stride = pdcache_stride;
-	loopcount = pdcache_loopcount;
-
-	while ((eva - va) >= (8 * 16)) {
-		tmpva = va;
-		for (i = 0; i < loopcount; i++, tmpva += stride)
-			cache_r4k_op_8lines_16(tmpva,
-			    CACHE_R4K_D|CACHEOP_R4K_INDEX_WB_INV);
-		va += 8 * 16;
-	}
-
-	while (va < eva) {
-		tmpva = va;
-		for (i = 0; i < loopcount; i++, tmpva += stride)
-			cache_op_r4k_line(tmpva,
-			    CACHE_R4K_D|CACHEOP_R4K_INDEX_WB_INV);
-		va += 16;
-	}
-}
-
-void
-mipsNN_pdcache_wbinv_range_index_32(vaddr_t va, vsize_t size)
-{
-	struct mips_cache_info * const mci = &mips_cache_info;
-	vaddr_t eva, tmpva;
-	int i, stride, loopcount;
-
+	va = MIPS_PHYS_TO_KSEG0(va);
+	eva = MIPS_PHYS_TO_KSEG0(eva);
+
+	for (; (eva - va) >= (8 * 16); va += 8 * 16) {
+		cache_r4k_op_8lines_16(va,
+		    CACHE_R4K_D|CACHEOP_R4K_INDEX_WB_INV);
+	}
+
+	for (; va < eva; va += 16) {
+		cache_op_r4k_line(va, CACHE_R4K_D|CACHEOP_R4K_INDEX_WB_INV);
+	}
+}
+
+static void
+mipsNN_pdcache_wbinv_range_index_32_intern(vaddr_t va, vaddr_t eva)
+{
 	/*
 	 * Since we're doing Index ops, we expect to not be able
@@ -448,30 +429,82 @@
 	 * address out of them.
 	 */
-	va = MIPS_PHYS_TO_KSEG0(va & mci->mci_pdcache_way_mask);
-
+	va = MIPS_PHYS_TO_KSEG0(va);
+	eva = MIPS_PHYS_TO_KSEG0(eva);
+
+	for (; (eva - va) >= (8 * 32); va += 8 * 32) {
+		cache_r4k_op_8lines_32(va,
+		    CACHE_R4K_D|CACHEOP_R4K_INDEX_WB_INV);
+	}
+
+	for (; va < eva; va += 32) {
+		cache_op_r4k_line(va, CACHE_R4K_D|CACHEOP_R4K_INDEX_WB_INV);
+	}
+}
+
+void
+mipsNN_pdcache_wbinv_range_index_16(vaddr_t va, vsize_t size)
+{
+	struct mips_cache_info * const mci = &mips_cache_info;
+	const vaddr_t way_size = mci->mci_pdcache_way_size;
+	const vaddr_t way_mask = way_size - 1;
+	const u_int ways = mci->mci_pdcache_ways;
+	vaddr_t eva;
+
+	va &= way_mask;
+	eva = round_line16(va + size);
+	va = trunc_line16(va);
+
+	/*
+	 * If we are going to flush more than is in a way, we are flushing
+	 * everything.
+	 */
+	if (eva - va >= way_size) {
+		mipsNN_pdcache_wbinv_all_16();
+		return;
+	}
+
+	/*
+	 * Invalidate each way.  If the address range wraps past the end of
+	 * the way, we will be invalidating in two ways but eventually things
+	 * work out since the last way will wrap into the first way.
+	 */
+	for (u_int way = 0; way < ways; way++) {
+		mipsNN_pdcache_wbinv_range_index_16_intern(va, eva);
+		va += way_size;
+		eva += way_size;
+	}
+}
+ 
+void
+mipsNN_pdcache_wbinv_range_index_32(vaddr_t va, vsize_t size)
+{
+	struct mips_cache_info * const mci = &mips_cache_info;
+	const vaddr_t way_size = mci->mci_pdcache_way_size;
+	const vaddr_t way_mask = way_size - 1;
+	const u_int ways = mci->mci_pdcache_ways;
+	vaddr_t eva;
+
+	va &= way_mask;
 	eva = round_line32(va + size);
 	va = trunc_line32(va);
 
 	/*
-	 * GCC generates better code in the loops if we reference local
-	 * copies of these global variables.
-	 */
-	stride = pdcache_stride;
-	loopcount = pdcache_loopcount;
-
-	while ((eva - va) >= (8 * 32)) {
-		tmpva = va;
-		for (i = 0; i < loopcount; i++, tmpva += stride)
-			cache_r4k_op_8lines_32(tmpva,
-			    CACHE_R4K_D|CACHEOP_R4K_INDEX_WB_INV);
-		va += 8 * 32;
-	}
-
-	while (va < eva) {
-		tmpva = va;
-		for (i = 0; i < loopcount; i++, tmpva += stride)
-			cache_op_r4k_line(tmpva,
-			    CACHE_R4K_D|CACHEOP_R4K_INDEX_WB_INV);
-		va += 32;
+	 * If we are going to flush more than is in a way, we are flushing
+	 * everything.
+	 */
+	if (eva - va >= way_size) {
+		mipsNN_pdcache_wbinv_all_32();
+		return;
+	}
+
+	/*
+	 * Invalidate each way.  If the address range wraps past the end of
+	 * the way, we will be invalidating in two ways but eventually things
+	 * work out since the last way will wrap into the first way.
+	 */
+	for (u_int way = 0; way < ways; way++) {
+		mipsNN_pdcache_wbinv_range_index_32_intern(va, eva);
+		va += way_size;
+		eva += way_size;
 	}
 }
Index: unk/src/sys/arch/mips/mips/cache_r5900.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/cache_r5900.c	(revision 151)
+++ 	(revision )
@@ -1,224 +1,0 @@
-/*	$NetBSD: cache_r5900.c,v 1.6 2008/04/28 20:23:28 martin Exp $	*/
-
-/*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by UCHIYAMA Yasushi.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cache_r5900.c,v 1.6 2008/04/28 20:23:28 martin Exp $");
-
-#include <sys/param.h>
-
-#include <mips/cpuregs.h>
-#include <mips/cache.h>
-#include <mips/cache_r5900.h>
-#include <mips/locore.h>
-
-/*
- * Cache operations for R5900-style caches:
- *	I-cache 16KB/64B 2-way assoc.	 
- *	D-cache 8KB/64B 2-way assoc.
- *	No L2-cache.
- *	and sync.p/sync.l are needed after/before cache instruction.
- *
- */
-
-#define	round_line(x)		(((x) + 63) & ~63)
-#define	trunc_line(x)		((x) & ~63)
-
-void
-r5900_icache_sync_all_64(void)
-{
-	vaddr_t va = MIPS_PHYS_TO_KSEG0(0);
-	vaddr_t eva = va + (CACHE_R5900_SIZE_I >> 1); /* 2way */
-	int s;
-
-	mips_dcache_wbinv_all();
-
-	s = _intr_suspend();
-	while (va < eva) {
-		cache_r5900_op_4lines_64_2way(va, CACHEOP_R5900_IINV_I);
-		va += (4 * 64);
-	}
-	_intr_resume(s);
-}
-
-void
-r5900_icache_sync_range_64(vaddr_t va, vsize_t size)
-{
-	vaddr_t eva = round_line(va + size);
-	int s;
-
-	va = trunc_line(va);
-
-	mips_dcache_wb_range(va, (eva - va));
-
-	s = _intr_suspend();
-	while ((eva - va) >= (4 * 64)) {
-		cache_r5900_op_4lines_64(va, CACHEOP_R5900_HINV_I);
-		va += (4 * 64);
-	}
-
-	while (va < eva) {
-		cache_op_r5900_line_64(va, CACHEOP_R5900_HINV_I);
-		va += 64;
-	}
-	_intr_resume(s);
-}
-
-void
-r5900_icache_sync_range_index_64(vaddr_t va, vsize_t size)
-{
-	vaddr_t eva = round_line(va + size);
-	int s;
-
-	va = trunc_line(va);
-
-	mips_dcache_wbinv_range_index(va, (eva - va));
-
-	s = _intr_suspend();
-	while ((eva - va) >= (4 * 64)) {
-		cache_r5900_op_4lines_64_2way(va, CACHEOP_R5900_IINV_I);
-		va += (4 * 64);
-	}
-
-	while (va < eva) {
-		/* way 0 */
-		cache_op_r5900_line_64(va, CACHEOP_R5900_IINV_I);
-		/* way 1 */
-		cache_op_r5900_line_64(va + 1, CACHEOP_R5900_IINV_I);
-		va += 64;
-	}
-	_intr_resume(s);
-}
-
-void
-r5900_pdcache_wbinv_all_64(void)
-{
-	vaddr_t va = MIPS_PHYS_TO_KSEG0(0);
-	vaddr_t eva = va + (CACHE_R5900_SIZE_D >> 1); /* 2way */
-	int s;
-
-	s = _intr_suspend();
-	while (va < eva) {
-		cache_r5900_op_4lines_64_2way(va, CACHEOP_R5900_IWBINV_D);
-		va += (4 * 64);
-	}
-	_intr_resume(s);
-}
-
-void
-r5900_pdcache_wbinv_range_64(vaddr_t va, vsize_t size)
-{
-	vaddr_t eva;
-	int s;
-	
-	eva = round_line(va + size);
-	va = trunc_line(va);
-
-	s = _intr_suspend();
-	while ((eva - va) >= (4 * 64)) {
-		cache_r5900_op_4lines_64(va, CACHEOP_R5900_HWBINV_D);
-		va += (4 * 64);
-	}
-
-	while (va < eva) {
-		cache_op_r5900_line_64(va, CACHEOP_R5900_HWBINV_D);
-		va += 64;
-	}
-	_intr_resume(s);
-}
-
-void
-r5900_pdcache_wbinv_range_index_64(vaddr_t va, vsize_t size)
-{
-	vaddr_t eva;
-	int s;
-	
-	eva = round_line(va + size);
-	va = trunc_line(va);
-
-	s = _intr_suspend();
-	while ((eva - va) >= (4 * 64)) {
-		cache_r5900_op_4lines_64_2way(va, CACHEOP_R5900_IWBINV_D);
-		va += (4 * 64);
-	}
-
-	while (va < eva) {
-		/* way 0 */
-		cache_op_r5900_line_64(va, CACHEOP_R5900_IWBINV_D);
-		/* way 1 */
-		cache_op_r5900_line_64(va + 1, CACHEOP_R5900_IWBINV_D);
-		va += 64;
-	}
-	_intr_resume(s);
-}
-
-void
-r5900_pdcache_inv_range_64(vaddr_t va, vsize_t size)
-{
-	vaddr_t eva;
-	int s;
-	
-	eva = round_line(va + size);
-	va = trunc_line(va);
-
-	s = _intr_suspend();
-	while ((eva - va) >= (4 * 64)) {
-		cache_r5900_op_4lines_64(va, CACHEOP_R5900_HINV_D);
-		va += (4 * 64);
-	}
-
-	while (va < eva) {
-		cache_op_r5900_line_64(va, CACHEOP_R5900_HINV_D);
-		va += 64;
-	}
-	_intr_resume(s);
-}
-
-void
-r5900_pdcache_wb_range_64(vaddr_t va, vsize_t size)
-{
-	vaddr_t eva;
-	int s;
-	
-	eva = round_line(va + size);
-	va = trunc_line(va);
-
-	s = _intr_suspend();
-	while ((eva - va) >= (4 * 64)) {
-		cache_r5900_op_4lines_64(va, CACHEOP_R5900_HWB_D);
-		va += (4 * 64);
-	}
-
-	while (va < eva) {
-		cache_op_r5900_line_64(va, CACHEOP_R5900_HWB_D);
-		va += 64;
-	}
-	_intr_resume(s);
-}
Index: /trunk/src/sys/arch/mips/mips/cache_r5k.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/cache_r5k.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/cache_r5k.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cache_r5k.c,v 1.12.96.1 2010/01/20 09:04:35 matt Exp $	*/
+/*	$NetBSD: cache_r5k.c,v 1.12.96.2 2011/04/29 08:26:23 matt Exp $	*/
 
 /*
@@ -37,5 +37,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cache_r5k.c,v 1.12.96.1 2010/01/20 09:04:35 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cache_r5k.c,v 1.12.96.2 2011/04/29 08:26:23 matt Exp $");
 
 #include <sys/param.h>
@@ -622,6 +622,6 @@
 }
 
-#define	round_page(x)		(((x) + (128 * 32 - 1)) & ~(128 * 32 - 1))
-#define	trunc_page(x)		((x) & ~(128 * 32 - 1))
+#define	mips_r5k_round_page(x)	(((x) + (128 * 32 - 1)) & ~(128 * 32 - 1))
+#define	mips_r5k_trunc_page(x)	((x) & ~(128 * 32 - 1))
 
 void
@@ -629,7 +629,7 @@
 {
 	uint32_t ostatus, taglo;
-	vaddr_t eva = round_page(va + size);
-
-	va = trunc_page(va);
+	vaddr_t eva = mips_r5k_round_page(va + size);
+
+	va = mips_r5k_trunc_page(va);
 
 	__asm volatile(
Index: /trunk/src/sys/arch/mips/mips/compat_13_machdep.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/compat_13_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/compat_13_machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: compat_13_machdep.c,v 1.16.20.4 2010/02/01 04:16:19 matt Exp $	*/
+/*	$NetBSD: compat_13_machdep.c,v 1.16.20.6 2011/04/29 08:26:23 matt Exp $	*/
 
 /*
@@ -16,5 +16,5 @@
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: compat_13_machdep.c,v 1.16.20.4 2010/02/01 04:16:19 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: compat_13_machdep.c,v 1.16.20.6 2011/04/29 08:26:23 matt Exp $");
 
 #include <sys/param.h>
@@ -23,5 +23,4 @@
 #include <sys/kernel.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/mount.h>
 #include <sys/syscallargs.h>
@@ -31,4 +30,6 @@
 
 #include <mips/regnum.h>
+#include <mips/locore.h>
+#include <mips/pcb.h>
 
 #ifdef DEBUG
@@ -88,7 +89,8 @@
 		tf->tf_regs[i] = scp->sc_regs[i];
 #endif
-	if (scp->sc_fpused)
-		*(struct fpreg *)&l->l_addr->u_pcb.pcb_fpregs =
-		    *(struct fpreg *)scp->sc_fpregs;
+	if (scp->sc_fpused) {
+		struct pcb * const pcb = lwp_getpcb(l);
+		*(struct fpreg *)&pcb->pcb_fpregs = *(struct fpreg *)scp->sc_fpregs;
+	}
 
 	mutex_enter(p->p_lock);
Index: /trunk/src/sys/arch/mips/mips/compat_16_machdep.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/compat_16_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/compat_16_machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: compat_16_machdep.c,v 1.12.14.6 2010/02/28 23:45:06 matt Exp $	*/
+/*	$NetBSD: compat_16_machdep.c,v 1.12.14.7 2011/04/29 08:26:23 matt Exp $	*/
 
 /*-
@@ -46,9 +46,11 @@
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 	
-__KERNEL_RCSID(0, "$NetBSD: compat_16_machdep.c,v 1.12.14.6 2010/02/28 23:45:06 matt Exp $"); 
-
+__KERNEL_RCSID(0, "$NetBSD: compat_16_machdep.c,v 1.12.14.7 2011/04/29 08:26:23 matt Exp $"); 
+
+#ifdef _KERNEL_OPT
 #include "opt_cputype.h"
 #include "opt_compat_netbsd.h"
 #include "opt_compat_ultrix.h"
+#endif
 
 #include <sys/param.h>
@@ -56,5 +58,5 @@
 #include <sys/kernel.h>
 #include <sys/proc.h>
-#include <sys/user.h>
+#include <sys/cpu.h>
 #include <sys/signal.h>
 #include <sys/signalvar.h>
@@ -65,9 +67,9 @@
 #include <compat/sys/signalvar.h>
 
-#include <machine/cpu.h>
-
 #include <mips/regnum.h>
 #include <mips/frame.h>
 #include <mips/locore.h>
+#include <mips/pcb.h>
+#include <mips/reg.h>
 
 #if !defined(__mips_o32)
@@ -90,11 +92,12 @@
 {
 	int sig = ksi->ksi_signo;
-	struct lwp *l = curlwp;
-	struct proc *p = l->l_proc;
-	struct sigacts *ps = p->p_sigacts;
+	struct lwp * const l = curlwp;
+	struct proc * const p = l->l_proc;
+	struct sigacts * const ps = p->p_sigacts;
+	struct pcb * const pcb = lwp_getpcb(l);
 	int onstack, error;
 	struct sigcontext *scp = getframe(l, sig, &onstack);
 	struct sigcontext ksc;
-	struct trapframe *tf = l->l_md.md_utf;
+	struct trapframe * const tf = l->l_md.md_utf;
 	sig_t catcher = SIGACTION(p, sig).sa_handler;
 
@@ -129,12 +132,12 @@
 
 	/* Save the FP state, if necessary, then copy it. */
-#if defined(FPEMUL) || !defined(NOFPU)
-	ksc.sc_fpused = l->l_md.md_flags & MDP_FPUSED;
+	ksc.sc_fpused = fpu_used_p(l);
+#if !defined(NOFPU)
 	if (ksc.sc_fpused) {
 		/* if FPU has current state, save it first */
-		fpusave_lwp(l);
-	}
-#endif
-	*(struct fpreg *)ksc.sc_fpregs = *(struct fpreg *)&l->l_addr->u_pcb.pcb_fpregs;
+		fpu_save();
+	}
+#endif
+	*(struct fpreg *)ksc.sc_fpregs = *(struct fpreg *)&pcb->pcb_fpregs;
 
 	/* Save signal stack. */
@@ -234,6 +237,7 @@
 	} */
 	struct sigcontext *scp, ksc;
-	struct trapframe *tf = l->l_md.md_utf;
-	struct proc *p = l->l_proc;
+	struct trapframe * const tf = l->l_md.md_utf;
+	struct proc * const p = l->l_proc;
+	struct pcb * const pcb = lwp_getpcb(l);
 	int error;
 
@@ -270,9 +274,10 @@
 		tf->tf_regs[i] = ksc.sc_regs[i];
 #endif
-#if defined(FPEMUL) || !defined(NOFPU)
-	if (scp->sc_fpused)
-		fpudiscard_lwp(l);
-#endif
-	*(struct fpreg *)&l->l_addr->u_pcb.pcb_fpregs = *(struct fpreg *)scp->sc_fpregs;
+#if !defined(NOFPU)
+	if (scp->sc_fpused) {
+		fpu_discard();
+	}
+#endif
+	*(struct fpreg *)&pcb->pcb_fpregs = *(struct fpreg *)scp->sc_fpregs;
 
 	mutex_enter(p->p_lock);
Index: /trunk/src/sys/arch/mips/mips/copy.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/copy.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/copy.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: copy.S,v 1.5.38.6 2009/12/11 17:17:51 matt Exp $	*/
+/*	$NetBSD: copy.S,v 1.5.38.7 2011/04/29 08:26:24 matt Exp $	*/
 
 /*
@@ -71,21 +71,22 @@
 	move	t0, a2
 	beq	a2, zero, 4f
+	 nop
 1:
 	lbu	v0, 0(a0)
 	PTR_SUBU a2, a2, 1
 	beq	v0, zero, 2f
-	sb	v0, 0(a1)			# each byte until NIL
+	 sb	v0, 0(a1)			# each byte until NIL
 	PTR_ADDU a0, a0, 1
 	bne	a2, zero, 1b			# less than maxlen
-	PTR_ADDU a1, a1, 1
+	 PTR_ADDU a1, a1, 1
 4:
 	li	v0, ENAMETOOLONG		# run out of space
 2:
 	beq	a3, zero, 3f			# return num. of copied bytes
-	PTR_SUBU a2, t0, a2			# if the 4th arg was non-NULL
+	 PTR_SUBU a2, t0, a2			# if the 4th arg was non-NULL
 	PTR_S	a2, 0(a3)
 3:
 	j	ra				# v0 is 0 or ENAMETOOLONG
-	nop
+	 nop
 END(copystr)
 
@@ -98,10 +99,10 @@
  */
 LEAF(copyinstr)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	PTR_LA	v0, _C_LABEL(copystrerr)
 	la	t0, VM_MAXUSER_ADDRESS
 	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(copystrerr)
-	 PTR_S	v0, U_PCB_ONFAULT(v1)
+	beqz	t0, _C_LABEL(copystrefault)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	move	t0, a2
 	beq	a2, zero, 4f
@@ -123,5 +124,5 @@
 3:
 	j	ra				# v0 is 0 or ENAMETOOLONG
-	 PTR_S	zero, U_PCB_ONFAULT(v1)
+	 PTR_S	zero, PCB_ONFAULT(v1)
 END(copyinstr)
 
@@ -134,36 +135,41 @@
  */
 LEAF(copyoutstr)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	PTR_LA	v0, _C_LABEL(copystrerr)
 	la	t0, VM_MAXUSER_ADDRESS
 	sltu	t0, a1, t0
-	beqz	t0, _C_LABEL(copystrerr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	beqz	t0, _C_LABEL(copystrefault)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	move	t0, a2
 	beq	a2, zero, 4f
+	 nop
 1:
 	lbu	v0, 0(a0)
 	PTR_SUBU a2, a2, 1
 	beq	v0, zero, 2f
-	sb	v0, 0(a1)
+	 sb	v0, 0(a1)
 	PTR_ADDU a0, a0, 1
 	bne	a2, zero, 1b
-	PTR_ADDU a1, a1, 1
+	 PTR_ADDU a1, a1, 1
 4:
 	li	v0, ENAMETOOLONG
 2:
 	beq	a3, zero, 3f
-	PTR_SUBU a2, t0, a2
+	 PTR_SUBU a2, t0, a2
 	PTR_S	a2, 0(a3)
 3:
 	j	ra				# v0 is 0 or ENAMETOOLONG
-	PTR_S	zero, U_PCB_ONFAULT(v1)
+	 PTR_S	zero, PCB_ONFAULT(v1)
 END(copyoutstr)
 
 LEAF(copystrerr)
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	li	v0, EFAULT			# return EFAULT
+	j	ra
+	 PTR_S	zero, PCB_ONFAULT(v1)
 END(copystrerr)
+
+LEAF(copystrefault)
+	b	copystrerr
+	 li	v0, EFAULT
+END(copystrefault)
 
 /*
@@ -186,27 +192,26 @@
 	move	a0, a1
 	move	a1, v0
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)		# set up fault handler
+	PTR_L	v1, L_PCB(MIPS_CURLWP)		# set up fault handler
 	PTR_LA	v0, _C_LABEL(kcopyerr)
-	PTR_L	s0, U_PCB_ONFAULT(v1)		# save old handler
+	PTR_L	s0, PCB_ONFAULT(v1)		# save old handler
 	jal	memcpy
-	PTR_S	v0, U_PCB_ONFAULT(v1)
-
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)		# restore the old handler
+	 PTR_S	v0, PCB_ONFAULT(v1)
+
+	PTR_L	v1, L_PCB(MIPS_CURLWP)		# restore the old handler
 	REG_L	ra, CALLFRAME_SIZ+CALLFRAME_RA(sp)	# restore ra
-	PTR_S	s0, U_PCB_ONFAULT(v1)
+	PTR_S	s0, PCB_ONFAULT(v1)
 	REG_L	s0, CALLFRAME_SIZ+CALLFRAME_S0(sp)	# restore s0
 	PTR_ADDU sp, sp, 2*CALLFRAME_SIZ	# kill stack frame
 	j	ra
-	move	v0, zero			# success!
+	 move	v0, zero			# success!
 END(kcopy)
 
 LEAF(kcopyerr)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)		# restore the old handler
+	PTR_L	v1, L_PCB(MIPS_CURLWP)		# restore the old handler
 	REG_L	ra, CALLFRAME_SIZ+CALLFRAME_RA(sp) 	# restore ra
-	PTR_S	s0, U_PCB_ONFAULT(v1)
+	PTR_S	s0, PCB_ONFAULT(v1)
 	REG_L	s0, CALLFRAME_SIZ+CALLFRAME_S0(sp) 	# restore s0
-	PTR_ADDU sp, sp, 2*CALLFRAME_SIZ	# kill stack frame
-	j	ra
-	li	v0, EFAULT			# return EFAULT
+	j	ra
+	 PTR_ADDU sp, sp, 2*CALLFRAME_SIZ	# kill stack frame
 END(kcopyerr)
 
@@ -223,19 +228,19 @@
 	la	t0, VM_MAXUSER_ADDRESS
 	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(copyerr)
-	move	v0, a0				# swap a0, a1 for call to memcpy
+	beqz	t0, _C_LABEL(copyefault)
+	 move	v0, a0				# swap a0, a1 for call to memcpy
 	move	a0, a1
 	move	a1, v0
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	PTR_LA	v0, _C_LABEL(copyerr)
 	jal	memcpy
-	PTR_S	v0, U_PCB_ONFAULT(v1)
-
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	 PTR_S	v0, PCB_ONFAULT(v1)
+
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	REG_L	ra, CALLFRAME_RA(sp)
 	PTR_ADDU sp, sp, CALLFRAME_SIZ
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	move	v0, zero
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 move	v0, zero
 END(copyin)
 
@@ -252,29 +257,33 @@
 	la	t0, VM_MAXUSER_ADDRESS
 	sltu	t0, a1, t0
-	beqz	t0, _C_LABEL(copyerr)
-	move	v0, a0				# swap a0, a1 for call to memcpy
+	beqz	t0, _C_LABEL(copyefault)
+	 move	v0, a0				# swap a0, a1 for call to memcpy
 	move	a0, a1
 	move	a1, v0
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	PTR_LA	v0, _C_LABEL(copyerr)
 	jal	memcpy
-	PTR_S	v0, U_PCB_ONFAULT(v1)
-
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	 PTR_S	v0, PCB_ONFAULT(v1)
+
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	REG_L	ra, CALLFRAME_RA(sp)
 	PTR_ADDU sp, sp, CALLFRAME_SIZ
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	move	v0, zero
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 move	v0, zero
 END(copyout)
 
 LEAF(copyerr)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	REG_L	ra, CALLFRAME_RA(sp)
 	PTR_ADDU sp, sp, CALLFRAME_SIZ
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	li	v0, EFAULT			# return EFAULT
+	j	ra
+	 PTR_S	zero, PCB_ONFAULT(v1)
 END(copyerr)
+
+LEAF(copyefault)
+	b	copyerr
+	 li	v0, EFAULT
+END(copyefault)
 
 /*
@@ -284,14 +293,14 @@
  */
 LEAF(fuswintr)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	PTR_LA	v0, _C_LABEL(fswintrberr)
-	PTR_L	a2, U_PCB_ONFAULT(v1)
+	PTR_L	a2, PCB_ONFAULT(v1)
 	la	t0, VM_MAXUSER_ADDRESS
 	sltu	t0, a0, t0
 	beqz	t0, _C_LABEL(fswintrberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	lhu	v0, 0(a0)			# fetch short
 	j	ra
-	PTR_S	a2, U_PCB_ONFAULT(v1)
+	 PTR_S	a2, PCB_ONFAULT(v1)
 END(fuswintr)
 
@@ -302,15 +311,15 @@
  */
 LEAF(suswintr)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	PTR_LA	v0, _C_LABEL(fswintrberr)
-	PTR_L	a2, U_PCB_ONFAULT(v1)
+	PTR_L	a2, PCB_ONFAULT(v1)
 	la	t0, VM_MAXUSER_ADDRESS
 	sltu	t0, a0, t0
 	beqz	t0, _C_LABEL(fswintrberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	sh	a1, 0(a0)			# store short
-	PTR_S	a2, U_PCB_ONFAULT(v1)
-	j	ra
-	move	v0, zero
+	PTR_S	a2, PCB_ONFAULT(v1)
+	j	ra
+	 move	v0, zero
 END(suswintr)
 
@@ -320,13 +329,13 @@
  */
 LEAF(ufetch_uint32)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(fswberr)
-	la	t0, VM_MAXUSER_ADDRESS
-	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(fswberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
+	la	t0, VM_MAXUSER_ADDRESS
+	sltu	t0, a0, t0
+	beqz	t0, _C_LABEL(fswberr)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	INT_L	v0, 0(a0)			# fetch int
 	j	ra
-	PTR_S	zero, U_PCB_ONFAULT(v1)
+	 PTR_S	zero, PCB_ONFAULT(v1)
 END(ufetch_uint32)
 STRONG_ALIAS(ufetch_int32, ufetch_uint32)
@@ -354,13 +363,13 @@
  */
 LEAF(ufetch_uint64)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(fswberr)
-	la	t0, VM_MAXUSER_ADDRESS
-	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(fswberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
+	la	t0, VM_MAXUSER_ADDRESS
+	sltu	t0, a0, t0
+	beqz	t0, _C_LABEL(fswberr)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	LONG_L	v0, 0(a0)			# fetch 64-bit datum
 	j	ra
-	PTR_S	zero, U_PCB_ONFAULT(v1)
+	 PTR_S	zero, PCB_ONFAULT(v1)
 END(ufetch_uint64)
 STRONG_ALIAS(ufetch_int64, ufetch_uint64)
@@ -381,13 +390,13 @@
  */
 LEAF(ufetch_uint16)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(fswberr)
-	la	t0, VM_MAXUSER_ADDRESS
-	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(fswberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
+	la	t0, VM_MAXUSER_ADDRESS
+	sltu	t0, a0, t0
+	beqz	t0, _C_LABEL(fswberr)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	lhu	v0, 0(a0)			# fetch short
 	j	ra
-	PTR_S	zero, U_PCB_ONFAULT(v1)
+	 PTR_S	zero, PCB_ONFAULT(v1)
 END(ufetch_uint16)
 STRONG_ALIAS(ufetch_ushort, ufetch_uint16)
@@ -402,13 +411,13 @@
  */
 LEAF(ufetch_int16)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(fswberr)
-	la	t0, VM_MAXUSER_ADDRESS
-	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(fswberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
+	la	t0, VM_MAXUSER_ADDRESS
+	sltu	t0, a0, t0
+	beqz	t0, _C_LABEL(fswberr)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	lh	v0, 0(a0)			# fetch short
 	j	ra
-	PTR_S	zero, U_PCB_ONFAULT(v1)
+	 PTR_S	zero, PCB_ONFAULT(v1)
 END(ufetch_int16)
 STRONG_ALIAS(ufetch_short, ufetch_int16)
@@ -421,13 +430,13 @@
  */
 LEAF(ufetch_uint8)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(fswberr)
-	la	t0, VM_MAXUSER_ADDRESS
-	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(fswberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
+	la	t0, VM_MAXUSER_ADDRESS
+	sltu	t0, a0, t0
+	beqz	t0, _C_LABEL(fswberr)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	lbu	v0, 0(a0)			# fetch byte
 	j	ra
-	PTR_S	zero, U_PCB_ONFAULT(v1)
+	 PTR_S	zero, PCB_ONFAULT(v1)
 END(ufetch_uint8)
 STRONG_ALIAS(ufetch_uchar, ufetch_uint8)
@@ -442,13 +451,13 @@
  */
 LEAF(ufetch_int8)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(fswberr)
-	la	t0, VM_MAXUSER_ADDRESS
-	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(fswberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
+	la	t0, VM_MAXUSER_ADDRESS
+	sltu	t0, a0, t0
+	beqz	t0, _C_LABEL(fswberr)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	lb	v0, 0(a0)			# fetch byte
 	j	ra
-	PTR_S	zero, U_PCB_ONFAULT(v1)
+	 PTR_S	zero, PCB_ONFAULT(v1)
 END(ufetch_int8)
 STRONG_ALIAS(ufetch_char, ufetch_int8)
@@ -461,14 +470,14 @@
  */
 LEAF(ustore_uint32)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(fswberr)
-	la	t0, VM_MAXUSER_ADDRESS
-	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(fswberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
+	la	t0, VM_MAXUSER_ADDRESS
+	sltu	t0, a0, t0
+	beqz	t0, _C_LABEL(fswberr)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	INT_S	a1, 0(a0)			# store word
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	move	v0, zero
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 move	v0, zero
 END(ustore_uint32)
 STRONG_ALIAS(ustore_int32, ustore_uint32)
@@ -494,16 +503,16 @@
  */
 LEAF(ustore_uint32_isync)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(fswberr)
-	la	t0, VM_MAXUSER_ADDRESS
-	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(fswberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
+	la	t0, VM_MAXUSER_ADDRESS
+	sltu	t0, a0, t0
+	beqz	t0, _C_LABEL(fswberr)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	INT_S	a1, 0(a0)			# store word
-	PTR_S	zero, U_PCB_ONFAULT(v1)
+	PTR_S	zero, PCB_ONFAULT(v1)
+	PTR_L	v1, _C_LABEL(mips_cache_ops) + MIPSX_FLUSHICACHE
 	move	v0, zero
-	PTR_L	v1, _C_LABEL(mips_cache_ops) + MIPSX_FLUSHICACHE
 	j	v1				# NOTE: must not clobber v0!
-	li	a1, 4				# size of word
+	 li	a1, 4				# size of word
 END(ustore_uint32_isync)
 
@@ -514,14 +523,14 @@
  */
 LEAF(ustore_uint64)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(fswberr)
-	la	t0, VM_MAXUSER_ADDRESS
-	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(fswberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
+	la	t0, VM_MAXUSER_ADDRESS
+	sltu	t0, a0, t0
+	beqz	t0, _C_LABEL(fswberr)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	LONG_S	a1, 0(a0)			# store word
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	move	v0, zero
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 move	v0, zero
 END(ustore_uint64)
 STRONG_ALIAS(ustore_int64, ustore_uint64)
@@ -545,14 +554,14 @@
  */
 LEAF(ustore_uint16)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(fswberr)
-	la	t0, VM_MAXUSER_ADDRESS
-	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(fswberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
+	la	t0, VM_MAXUSER_ADDRESS
+	sltu	t0, a0, t0
+	beqz	t0, _C_LABEL(fswberr)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	sh	a1, 0(a0)			# store short
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	move	v0, zero
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 move	v0, zero
 END(ustore_uint16)
 STRONG_ALIAS(ustore_int16, ustore_uint16)
@@ -567,14 +576,14 @@
  */
 LEAF(ustore_uint8)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(fswberr)
-	la	t0, VM_MAXUSER_ADDRESS
-	sltu	t0, a0, t0
-	beqz	t0, _C_LABEL(fswberr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
+	la	t0, VM_MAXUSER_ADDRESS
+	sltu	t0, a0, t0
+	beqz	t0, _C_LABEL(fswberr)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	sb	a1, 0(a0)			# store byte
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	move	v0, zero
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 move	v0, zero
 END(ustore_uint8)
 STRONG_ALIAS(ustore_int8, ustore_uint8)
@@ -590,21 +599,21 @@
  */
 LEAF(badaddr)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	PTR_LA	v0, _C_LABEL(baderr)
 	bne	a1, 1, 2f
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	b	5f
-	lbu	v0, (a0)
+	 lbu	v0, (a0)
 2:
 	bne	a1, 2, 4f
-	nop
+	 nop
 	b	5f
-	lhu	v0, (a0)
+	 lhu	v0, (a0)
 4:
 	INT_L	v0, (a0)
 5:
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	move	v0, zero		# made it w/o errors
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 move	v0, zero		# made it w/o errors
 END(badaddr)
 
@@ -617,13 +626,13 @@
 LEAF(fswintrberr)
 	nop
-	PTR_S	a2, U_PCB_ONFAULT(v1)
-	j	ra
-	li	v0, -1
+	PTR_S	a2, PCB_ONFAULT(v1)
+	j	ra
+	 li	v0, -1
 END(fswintrberr)
 
 LEAF(fswberr)
 XLEAF(baderr)
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	li	v0, -1
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 li	v0, -1
 END(fswberr)
Index: /trunk/src/sys/arch/mips/mips/cpu_exec.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/cpu_exec.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/cpu_exec.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cpu_exec.c,v 1.50.54.1.4.13 2010/02/01 04:16:19 matt Exp $	*/
+/*	$NetBSD: cpu_exec.c,v 1.50.54.1.4.15 2011/04/29 08:26:24 matt Exp $	*/
 
 /*
@@ -36,5 +36,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu_exec.c,v 1.50.54.1.4.13 2010/02/01 04:16:19 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu_exec.c,v 1.50.54.1.4.15 2011/04/29 08:26:24 matt Exp $");
 
 #include "opt_compat_netbsd.h"
@@ -53,83 +53,21 @@
 #include <uvm/uvm_extern.h>
 
+#include <compat/common/compat_util.h>
+
 #ifdef EXEC_ECOFF
 #include <sys/exec_ecoff.h>
 #endif
 #include <sys/exec_elf.h>			/* mandatory */
-#ifdef COMPAT_09
-#include <machine/bsd-aout.h>
-#endif
 #include <machine/reg.h>
 #include <mips/regnum.h>			/* symbolic register indices */
+#include <mips/locore.h>
 
 #include <compat/common/compat_util.h>
 
 int	mips_elf_makecmds(struct lwp *, struct exec_package *);
-
-
-/*
- * cpu_exec_aout_makecmds():
- *	cpu-dependent a.out format hook for execve().
- *
- * Determine of the given exec package refers to something which we
- * understand and, if so, set up the vmcmds for it.
- *
- */
-int
-cpu_exec_aout_makecmds(l, epp)
-	struct lwp *l;
-	struct exec_package *epp;
-{
-	int error;
-
-	/* If COMPAT_09 is defined, allow loading of old-style 4.4bsd a.out
-	   executables. */
-#ifdef COMPAT_09
-	struct bsd_aouthdr *hdr = (struct bsd_aouthdr *)epp->ep_hdr;
-
-	/* Only handle paged files (laziness). */
-	if (hdr->a_magic != BSD_ZMAGIC)
-#endif
-	{
-		/* If that failed, try old NetBSD-1.1 elf format */
-		error = mips_elf_makecmds (l, epp);
-		return error;
-	}
-
-#ifdef COMPAT_09
-	error = vn_marktext(epp->ep_vp);
-	if (error)
-		return (error);
-
-	epp->ep_taddr = 0x1000;
-	epp->ep_entry = hdr->a_entry;
-	epp->ep_tsize = hdr->a_text;
-	epp->ep_daddr = epp->ep_taddr + hdr->a_text;
-	epp->ep_dsize = hdr->a_data + hdr->a_bss;
-
-	/* set up command for text segment */
-	NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, hdr->a_text,
-	    epp->ep_taddr, epp->ep_vp, 0, VM_PROT_READ|VM_PROT_EXECUTE);
-
-	/* set up command for data segment */
-	NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_pagedvn, hdr->a_data,
-	    epp->ep_daddr, epp->ep_vp, hdr->a_text,
-	    VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
-
-	/* set up command for bss segment */
-	NEW_VMCMD(&epp->ep_vmcmds, vmcmd_map_zero, hdr->a_bss,
-	    epp->ep_daddr + hdr->a_data, NULLVP, 0,
-	    VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
-
-	return (*epp->ep_esch->ep_setup_stack)(p, epp);
-#endif
-}
 
 #ifdef EXEC_ECOFF
 void
-cpu_exec_ecoff_setregs(l, epp, stack)
-	struct lwp *l;
-	struct exec_package *epp;
-	vaddr_t stack;
+cpu_exec_ecoff_setregs(struct lwp *l, struct exec_package *epp, vaddr_t stack)
 {
 	struct ecoff_exechdr *execp = (struct ecoff_exechdr *)epp->ep_hdr;
@@ -146,7 +84,5 @@
  */
 int
-cpu_exec_ecoff_probe(l, epp)
-	struct lwp *l;
-	struct exec_package *epp;
+cpu_exec_ecoff_probe(struct lwp *l, struct exec_package *epp)
 {
 
@@ -164,7 +100,5 @@
 
 int
-mips_elf_makecmds (l, epp)
-        struct lwp *l;
-        struct exec_package *epp;
+mips_elf_makecmds(struct lwp *l, struct exec_package *epp)
 {
 	Elf32_Ehdr *ex = (Elf32_Ehdr *)epp->ep_hdr;
@@ -347,5 +281,10 @@
 	case EF_MIPS_ARCH_32:
 	case EF_MIPS_ARCH_64:
-		if (!CPUISMIPSNN)
+		if (!CPUISMIPSNN && !CPUISMIPS32R2 && !CPUISMIPS64R2)
+			return ENOEXEC;
+		break;
+	case EF_MIPS_ARCH_32R2:
+	case EF_MIPS_ARCH_64R2:
+		if (!CPUISMIPS32R2 && !CPUISMIPS64R2)
 			return ENOEXEC;
 		break;
@@ -361,10 +300,12 @@
 		break;
 #endif
+#ifdef COMPAT_16
+	case 0:
+		*start_p = ELF32_LINK_ADDR;
+		/* FALLTHROUGH */
+#endif
 	case EF_MIPS_ABI_O32:
 		itp_suffix = "o32";
 		p->p_md.md_abi = _MIPS_BSD_API_O32;
-#ifdef COMPAT_16
-		*start_p = ELF32_LINK_ADDR;
-#endif
 		if (old_abi != p->p_md.md_abi)
 			printf("pid %d(%s): ABI set to O32 (e_flags=%#x)\n", p->p_pid, p->p_comm, eh->e_flags);
@@ -383,4 +324,107 @@
 	struct proc * const p = l->l_proc;
 	Elf32_Ehdr * const eh = eh0;
+
+	/*
+	 * Mark the type of CPU that the dump happened on.
+	 */
+	if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS64R2) {
+		eh->e_flags |= EF_MIPS_ARCH_64R2;
+	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS64) {
+		eh->e_flags |= EF_MIPS_ARCH_64;
+	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS32R2) {
+		eh->e_flags |= EF_MIPS_ARCH_32R2;
+	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS32) {
+		eh->e_flags |= EF_MIPS_ARCH_32;
+	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS5) {
+		eh->e_flags |= EF_MIPS_ARCH_5;
+	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS4) {
+		eh->e_flags |= EF_MIPS_ARCH_4;
+	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS3) {
+		eh->e_flags |= EF_MIPS_ARCH_3;
+	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS2) {
+		eh->e_flags |= EF_MIPS_ARCH_2;
+	} else {
+		eh->e_flags |= EF_MIPS_ARCH_1;
+	}
+
+	switch (p->p_md.md_abi) {
+	case _MIPS_BSD_API_N32:
+		eh->e_flags |= EF_MIPS_ABI2;
+		break;
+	case _MIPS_BSD_API_O32:
+		eh->e_flags |=EF_MIPS_ABI_O32; 
+		break;
+	}
+}
+#endif
+
+#if EXEC_ELF64
+int
+mips_netbsd_elf64_probe(struct lwp *l, struct exec_package *epp, void *eh0,
+	char *itp, vaddr_t *start_p)
+{
+	struct proc * const p = l->l_proc;
+	const Elf64_Ehdr * const eh = eh0;
+	int old_abi = p->p_md.md_abi;
+	const char *itp_suffix = NULL;
+
+	switch (eh->e_flags & EF_MIPS_ARCH) {
+	case EF_MIPS_ARCH_1:
+		return ENOEXEC;
+	case EF_MIPS_ARCH_2:
+		if (mips_options.mips_cpu_arch < CPU_ARCH_MIPS2)
+			return ENOEXEC;
+		break;
+	case EF_MIPS_ARCH_3:
+		if (mips_options.mips_cpu_arch < CPU_ARCH_MIPS3)
+			return ENOEXEC;
+		break;
+	case EF_MIPS_ARCH_4:
+		if (mips_options.mips_cpu_arch < CPU_ARCH_MIPS4)
+			return ENOEXEC;
+		break;
+	case EF_MIPS_ARCH_5:
+		if (mips_options.mips_cpu_arch < CPU_ARCH_MIPS5)
+			return ENOEXEC;
+		break;
+	case EF_MIPS_ARCH_32:
+	case EF_MIPS_ARCH_32R2:
+		return ENOEXEC;
+	case EF_MIPS_ARCH_64:
+		if (!CPUISMIPS64 && !CPUISMIPS64R2)
+			return ENOEXEC;
+		break;
+	case EF_MIPS_ARCH_64R2:
+		if (!CPUISMIPS64R2)
+			return ENOEXEC;
+		break;
+	}
+
+	switch (eh->e_flags & (EF_MIPS_ABI|EF_MIPS_ABI2)) {
+	case 0:
+		itp_suffix = "64";
+		p->p_md.md_abi = _MIPS_BSD_API_N64;
+		if (old_abi != p->p_md.md_abi)
+			printf("pid %d(%s): ABI set to N64 (e_flags=%#x)\n", p->p_pid, p->p_comm, eh->e_flags);
+		break;
+	case EF_MIPS_ABI_O64:
+		itp_suffix = "o64";
+		p->p_md.md_abi = _MIPS_BSD_API_O64;
+		if (old_abi != p->p_md.md_abi)
+			printf("pid %d(%s): ABI set to O64 (e_flags=%#x)\n", p->p_pid, p->p_comm, eh->e_flags);
+		break;
+	default:
+		return ENOEXEC;
+	}
+
+	(void)compat_elf_check_interp(epp, itp, itp_suffix);
+	return 0;
+}
+
+void
+coredump_elf64_setup(struct lwp *l, void *eh0)
+{
+	struct proc * const p = l->l_proc;
+	Elf64_Ehdr * const eh = eh0;
 
 	/*
@@ -402,98 +446,4 @@
 		eh->e_flags |= EF_MIPS_ARCH_1;
 	}
-
-	switch (p->p_md.md_abi) {
-	case _MIPS_BSD_API_N32:
-		eh->e_flags |= EF_MIPS_ABI2;
-		break;
-	case _MIPS_BSD_API_O32:
-		eh->e_flags |=EF_MIPS_ABI_O32; 
-		break;
-	}
-}
-#endif
-
-#if EXEC_ELF64
-int
-mips_netbsd_elf64_probe(struct lwp *l, struct exec_package *epp, void *eh0,
-	char *itp, vaddr_t *start_p)
-{
-	struct proc * const p = l->l_proc;
-	const Elf64_Ehdr * const eh = eh0;
-	int old_abi = p->p_md.md_abi;
-	const char *itp_suffix = NULL;
-
-	switch (eh->e_flags & EF_MIPS_ARCH) {
-	case EF_MIPS_ARCH_1:
-		return ENOEXEC;
-	case EF_MIPS_ARCH_2:
-		if (mips_options.mips_cpu_arch < CPU_ARCH_MIPS2)
-			return ENOEXEC;
-		break;
-	case EF_MIPS_ARCH_3:
-		if (mips_options.mips_cpu_arch < CPU_ARCH_MIPS3)
-			return ENOEXEC;
-		break;
-	case EF_MIPS_ARCH_4:
-		if (mips_options.mips_cpu_arch < CPU_ARCH_MIPS4)
-			return ENOEXEC;
-		break;
-	case EF_MIPS_ARCH_5:
-		if (mips_options.mips_cpu_arch < CPU_ARCH_MIPS5)
-			return ENOEXEC;
-		break;
-	case EF_MIPS_ARCH_32:
-		return ENOEXEC;
-	case EF_MIPS_ARCH_64:
-		if (!CPUISMIPS64)
-			return ENOEXEC;
-		break;
-	}
-
-	switch (eh->e_flags & (EF_MIPS_ABI|EF_MIPS_ABI2)) {
-	case 0:
-		itp_suffix = "64";
-		p->p_md.md_abi = _MIPS_BSD_API_N64;
-		if (old_abi != p->p_md.md_abi)
-			printf("pid %d(%s): ABI set to N64 (e_flags=%#x)\n", p->p_pid, p->p_comm, eh->e_flags);
-		break;
-	case EF_MIPS_ABI_O64:
-		itp_suffix = "o64";
-		p->p_md.md_abi = _MIPS_BSD_API_O64;
-		if (old_abi != p->p_md.md_abi)
-			printf("pid %d(%s): ABI set to O64 (e_flags=%#x)\n", p->p_pid, p->p_comm, eh->e_flags);
-		break;
-	default:
-		return ENOEXEC;
-	}
-
-	(void)compat_elf_check_interp(epp, itp, itp_suffix);
-	return 0;
-}
-
-void
-coredump_elf64_setup(struct lwp *l, void *eh0)
-{
-	struct proc * const p = l->l_proc;
-	Elf64_Ehdr * const eh = eh0;
-
-	/*
-	 * Mark the type of CPU that the dump happened on.
-	 */
-	if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS64) {
-		eh->e_flags |= EF_MIPS_ARCH_64;
-	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS32) {
-		eh->e_flags |= EF_MIPS_ARCH_32;
-	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS5) {
-		eh->e_flags |= EF_MIPS_ARCH_5;
-	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS4) {
-		eh->e_flags |= EF_MIPS_ARCH_4;
-	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS3) {
-		eh->e_flags |= EF_MIPS_ARCH_3;
-	} else if (mips_options.mips_cpu_arch & CPU_ARCH_MIPS2) {
-		eh->e_flags |= EF_MIPS_ARCH_2;
-	} else {
-		eh->e_flags |= EF_MIPS_ARCH_1;
-	}
 	switch (p->p_md.md_abi) {
 	case _MIPS_BSD_API_N64:
Index: /trunk/src/sys/arch/mips/mips/cpu_subr.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/cpu_subr.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/cpu_subr.c	(revision 152)
@@ -29,10 +29,10 @@
 
 #include <sys/cdefs.h>
-
+__KERNEL_RCSID(0, "cpu_subr.c,v 1.1.2.17 2011/04/29 08:26:24 matt Exp");
+
+#include "opt_ddb.h"
 #include "opt_multiprocessor.h"
 #include "opt_cputype.h"
 #include "opt_sa.h"
-
-__KERNEL_RCSID(0, "$NetBSD: cpu_subr.c,v 1.1.2.8 2010/04/30 16:10:42 matt Exp $");
 
 #include <sys/param.h>
@@ -40,10 +40,11 @@
 #include <sys/intr.h>
 #include <sys/atomic.h>
+#include <sys/device.h>
 #include <sys/lwp.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/ras.h>
 #include <sys/bitops.h>
 #include <sys/idle.h>
+#include <sys/xcall.h>
 #ifdef KERN_SA
 #include <sys/sa.h>
@@ -51,12 +52,22 @@
 #endif
 
-#include <uvm/uvm_extern.h>
+#include <uvm/uvm.h>
 
 #include <mips/locore.h>
 #include <mips/regnum.h>
+#include <mips/pcb.h>
 #include <mips/cache.h>
 #include <mips/frame.h>
 #include <mips/userret.h>
 #include <mips/pte.h>
+#include <mips/cpuset.h>
+
+#if defined(DDB) || defined(KGDB)
+#ifdef DDB 
+#include <mips/db_machdep.h>
+#include <ddb/db_command.h>
+#include <ddb/db_output.h>
+#endif
+#endif
 
 #ifndef TSAR
@@ -72,5 +83,8 @@
 #endif
 	.ci_tlb_info = &pmap_tlb0_info,
-	.ci_pmap_segbase = (void *)(MIPS_KSEG2_START + 0x1eadbeef),
+	.ci_pmap_seg0tab = (void *)(MIPS_KSEG2_START + 0x1eadbeef),
+#ifdef _LP64
+	.ci_pmap_segtab = (void *)(MIPS_KSEG2_START + 0x1eadbeef),
+#endif
 	.ci_cpl = IPL_HIGH,
 	.ci_tlb_slot = -1,
@@ -82,12 +96,18 @@
 #ifdef MULTIPROCESSOR
 
-volatile u_long cpus_running = 1;
-volatile u_long cpus_hatched = 1;
-volatile u_long cpus_paused = 0;
+volatile __cpuset_t cpus_running = 1;
+volatile __cpuset_t cpus_hatched = 1;
+volatile __cpuset_t cpus_paused = 0;
+volatile __cpuset_t cpus_resumed = 0;
+volatile __cpuset_t cpus_halted = 0;
+
+static int  cpu_ipi_wait(volatile __cpuset_t *, u_long);
+static void cpu_ipi_error(const char *, __cpuset_t, __cpuset_t);
 
 static struct cpu_info *cpu_info_last = &cpu_info_store;
 
 struct cpu_info *
-cpu_info_alloc(struct pmap_tlb_info *ti, u_int cpu_id)
+cpu_info_alloc(struct pmap_tlb_info *ti, cpuid_t cpu_id, cpuid_t cpu_package_id,
+	cpuid_t cpu_core_id, cpuid_t cpu_smt_id)
 {
 	vaddr_t cpu_info_offset = (vaddr_t)&cpu_info_store & PAGE_MASK; 
@@ -96,9 +116,9 @@
 
 	/*
-	* Grab a page from the first 256MB to use to store
+	* Grab a page from the first 512MB (mappable by KSEG0) to use to store
 	* exception vectors and cpu_info for this cpu.
 	*/
 	error = uvm_pglistalloc(PAGE_SIZE,
-	    0, 0x10000000,
+	    0, MIPS_KSEG1_START - MIPS_KSEG0_START,
 	    PAGE_SIZE, PAGE_SIZE, &pglist, 1, false);
 	if (error)
@@ -126,4 +146,7 @@
 
 	ci->ci_cpuid = cpu_id;
+	ci->ci_data.cpu_package_id = cpu_package_id;
+	ci->ci_data.cpu_core_id = cpu_core_id;
+	ci->ci_data.cpu_smt_id = cpu_smt_id;
 	ci->ci_cpu_freq = cpu_info_store.ci_cpu_freq;
 	ci->ci_cctr_freq = cpu_info_store.ci_cctr_freq;
@@ -131,4 +154,5 @@
         ci->ci_divisor_delay = cpu_info_store.ci_divisor_delay;
         ci->ci_divisor_recip = cpu_info_store.ci_divisor_recip;
+	ci->ci_cpuwatch_count = cpu_info_store.ci_cpuwatch_count;
 
 	/*
@@ -171,7 +195,31 @@
 #endif /* MULTIPROCESSOR */
 
+static void
+cpu_hwrena_setup(void)
+{
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+	const int cp0flags = mips_options.mips_cpu->cpu_cp0flags;
+	if ((cp0flags & MIPS_CP0FL_USE) == 0)
+		return;
+
+	if (cp0flags & MIPS_CP0FL_HWRENA) {
+		mipsNN_cp0_hwrena_write(
+		    MIPS_HWRENA_UL
+		    |MIPS_HWRENA_CCRES
+		    |MIPS_HWRENA_CC
+		    |MIPS_HWRENA_SYNCI_STEP
+		    |MIPS_HWRENA_CPUNUM);
+		if (cp0flags & MIPS_CP0FL_USERLOCAL) {
+			mipsNN_cp0_userlocal_write(curlwp->l_private);
+		}
+	}
+#endif
+}
+
 void
 cpu_attach_common(device_t self, struct cpu_info *ci)
 {
+	const char * const xname = device_xname(self);
+
 	/*
 	 * Cross link cpu_info and its device together
@@ -181,10 +229,22 @@
 	KASSERT(ci->ci_idepth == 0);
 
-	evcnt_attach_dynamic(&ci->ci_count_compare_evcnt,
-		EVCNT_TYPE_INTR, NULL, device_xname(self),
-		"int 5 (clock)");
-	evcnt_attach_dynamic(&ci->ci_count_compare_missed_evcnt,
-		EVCNT_TYPE_INTR, NULL, device_xname(self),
-		"int 5 (clock) missed");
+	evcnt_attach_dynamic(&ci->ci_ev_count_compare,
+		EVCNT_TYPE_INTR, NULL, xname,
+		"intr 5 (clock)");
+	evcnt_attach_dynamic(&ci->ci_ev_count_compare_missed,
+		EVCNT_TYPE_INTR, NULL, xname,
+		"intr 5 (clock) missed");
+	evcnt_attach_dynamic(&ci->ci_ev_fpu_loads,
+		EVCNT_TYPE_MISC, NULL, xname,
+		"fpu loads");
+	evcnt_attach_dynamic(&ci->ci_ev_fpu_saves,
+		EVCNT_TYPE_MISC, NULL, xname,
+		"fpu saves");
+	evcnt_attach_dynamic(&ci->ci_ev_tlbmisses,
+		EVCNT_TYPE_TRAP, NULL, xname,
+		"tlb misses");
+
+	if (ci == &cpu_info_store)
+		pmap_tlb_info_evcnt_attach(ci->ci_tlb_info);
 
 #ifdef MULTIPROCESSOR
@@ -199,14 +259,14 @@
 	}
 	evcnt_attach_dynamic(&ci->ci_evcnt_synci_activate_rqst,
-	    EVCNT_TYPE_MISC, NULL, device_xname(self),
+	    EVCNT_TYPE_MISC, NULL, xname,
 	    "syncicache activate request");
 	evcnt_attach_dynamic(&ci->ci_evcnt_synci_deferred_rqst,
-	    EVCNT_TYPE_MISC, NULL, device_xname(self),
+	    EVCNT_TYPE_MISC, NULL, xname,
 	    "syncicache deferred request");
 	evcnt_attach_dynamic(&ci->ci_evcnt_synci_ipi_rqst,
-	    EVCNT_TYPE_MISC, NULL, device_xname(self),
+	    EVCNT_TYPE_MISC, NULL, xname,
 	    "syncicache ipi request");
 	evcnt_attach_dynamic(&ci->ci_evcnt_synci_onproc_rqst,
-	    EVCNT_TYPE_MISC, NULL, device_xname(self),
+	    EVCNT_TYPE_MISC, NULL, xname,
 	    "syncicache onproc request");
 
@@ -233,4 +293,8 @@
 
 	fpu_init();
+
+	pmap_tlb_info_evcnt_attach(&pmap_tlb0_info);
+
+	cpu_hwrena_setup();
 
 	/*
@@ -343,4 +407,7 @@
 	gr[_REG_EPC]   = tf->tf_regs[_R_PC];
 	gr[_REG_SR]    = tf->tf_regs[_R_SR];
+#ifdef __HAVE_CPU_LWP_SETPRIVATE
+	mcp->_mc_tlsbase = (intptr_t)l->l_private;
+#endif
 
 	if ((ras_pc = (intptr_t)ras_lookup(l->l_proc,
@@ -349,7 +416,10 @@
 
 	*flags |= _UC_CPU;
+#ifdef __HAVE_CPU_LWP_SETPRIVATE
+	*flags |= _UC_TLSBASE;
+#endif
 
 	/* Save floating point register context, if any. */
-	if (l->l_md.md_flags & MDP_FPUSED) {
+	if (fpu_used_p(l)) {
 		size_t fplen;
 		/*
@@ -357,5 +427,5 @@
 		 * context to the PCB first.
 		 */
-		fpusave_lwp(l);
+		fpu_save_lwp(l);
 
 		/*
@@ -372,5 +442,6 @@
 		}
 #endif
-		memcpy(&mcp->__fpregs, &l->l_addr->u_pcb.pcb_fpregs, fplen);
+		struct pcb * const pcb = lwp_getpcb(l);
+		memcpy(&mcp->__fpregs, &pcb->pcb_fpregs, fplen);
 		*flags |= _UC_FPU;
 	}
@@ -408,4 +479,11 @@
 	}
 
+#ifdef __HAVE_CPU_LWP_SETPRIVATE
+	/* Restore the private thread context */
+	if (flags & _UC_TLSBASE) {
+		lwp_setprivate(l, (void *)(intptr_t)mcp->_mc_tlsbase);
+	}
+#endif
+
 	/* Restore floating point register context, if any. */
 	if (flags & _UC_FPU) {
@@ -413,5 +491,6 @@
 
 		/* Disable the FPU contents. */
-		fpudiscard_lwp(l);
+		KASSERT(curlwp == l);
+		fpu_discard();
 
 #if !defined(__mips_o32)
@@ -428,5 +507,6 @@
 		 * proper size of fpreg when copying.
 		 */
-		memcpy(&l->l_addr->u_pcb.pcb_fpregs, &mcp->__fpregs, fplen);
+		struct pcb * const pcb = lwp_getpcb(l);
+		memcpy(&pcb->pcb_fpregs, &mcp->__fpregs, fplen);
 	}
 
@@ -504,6 +584,8 @@
 {
 	KASSERT(kpreempt_disabled());
+#ifdef __HAVE_FAST_SOFTINTS
 	KASSERT(lwp_locked(l, NULL));
-	KASSERT(l->l_stat == LSONPROC || l->l_stat == LSRUN);
+#endif
+	KASSERT(l->l_stat == LSONPROC || l->l_stat == LSRUN || l->l_stat == LSSTOP);
 
 	l->l_md.md_astpending = 1; 		/* force call to ast() */
@@ -535,21 +617,25 @@
         KASSERT(kpreempt_disabled());
 
-	if (where == 0) {
+#if 0
+	if (where == (intptr_t)-2) {
+		KASSERT(curcpu()->ci_mtx_count == 0);
 		/*
-		 * We are called from KPREEMPT_ENABLE().  If we are at IPL_NONE,
-		 * of course we can be preempted.  If we aren't, ask for a
-		 * softint so that kern_intr can call kpreempt.
+		 * We must be called via kern_intr (which already checks for
+		 * IPL_NONE so of course we call be preempted).
 		 */
-		if (s == IPL_NONE)
-			return true;
-		softint_trigger(SOFTINT_KPREEMPT);
-		return false;
-	}
-
-	/*
-	 * We must be called via kern_intr (which already checks for IPL_NONE
-	 * so of course we call be preempted).
-	 */
-	return true;
+		return true;
+	}
+	/*
+	 * We are called from KPREEMPT_ENABLE().  If we are at IPL_NONE,
+	 * of course we can be preempted.  If we aren't, ask for a
+	 * softint so that kern_intr can call kpreempt.
+	 */
+	if (s == IPL_NONE) {
+		KASSERT(curcpu()->ci_mtx_count == 0);
+		return true;
+	}
+	softint_trigger(SOFTINT_KPREEMPT);
+#endif
+	return false;
 }
 
@@ -582,4 +668,7 @@
 
 	if (!__predict_false(ci->ci_want_resched)) {
+#ifdef __HAVE_FAST_SOFTINTS
+		KASSERT(ci->ci_data.cpu_softints == 0);
+#endif
 		(*mach_idle)();
 	}
@@ -598,4 +687,30 @@
 #ifndef TSAR
 #ifdef MULTIPROCESSOR
+
+void
+cpu_broadcast_ipi(int tag)
+{
+	(void)cpu_multicast_ipi(
+		CPUSET_EXCEPT(cpus_running, cpu_index(curcpu())), tag);
+}
+
+void
+cpu_multicast_ipi(__cpuset_t cpuset, int tag)
+{
+	CPU_INFO_ITERATOR cii;
+	struct cpu_info *ci;
+
+	CPUSET_DEL(cpuset, cpu_index(curcpu()));
+	if (CPUSET_EMPTY_P(cpuset))
+		return;
+
+	for (CPU_INFO_FOREACH(cii, ci)) {
+		if (CPUSET_HAS_P(cpuset, cpu_index(ci))) {
+			CPUSET_DEL(cpuset, cpu_index(ci));
+			(void)cpu_send_ipi(ci, tag);
+		}
+	}
+}
+
 int
 cpu_send_ipi(struct cpu_info *ci, int tag)
@@ -605,9 +720,189 @@
 }
 
+static void
+cpu_ipi_error(const char *s, __cpuset_t succeeded, __cpuset_t expected)
+{
+	CPUSET_SUB(expected, succeeded);
+	if (!CPUSET_EMPTY_P(expected)) {
+		printf("Failed to %s:", s);
+		do {
+			int index = CPUSET_NEXT(expected);
+			CPUSET_DEL(expected, index);
+			printf(" cpu%d", index);
+		} while (!CPUSET_EMPTY_P(expected));
+		printf("\n");
+	}
+}
+
+static int
+cpu_ipi_wait(volatile __cpuset_t *watchset, u_long mask)
+{
+	u_long limit = curcpu()->ci_cpu_freq;	/* some finite amount of time */
+
+	while (limit--)
+		if (*watchset == mask)
+			return 0;		/* success */
+
+	return 1;				/* timed out */
+}
+
+/*
+ * Halt this cpu
+ */
+void
+cpu_halt(void)
+{
+	int index = cpu_index(curcpu());
+
+	printf("cpu%d: shutting down\n", index);
+	CPUSET_ADD(cpus_halted, index);
+	spl0();		/* allow interrupts e.g. further ipi ? */
+	for (;;) ;	/* spin */
+
+	/* NOTREACHED */
+}
+
+/*
+ * Halt all running cpus, excluding current cpu.
+ */
+void
+cpu_halt_others(void)
+{
+	__cpuset_t cpumask, cpuset;
+
+	CPUSET_ASSIGN(cpuset, cpus_running);
+	CPUSET_DEL(cpuset, cpu_index(curcpu()));
+	CPUSET_ASSIGN(cpumask, cpuset);
+	CPUSET_SUB(cpuset, cpus_halted);
+
+	if (CPUSET_EMPTY_P(cpuset))
+		return;
+
+	cpu_multicast_ipi(cpuset, IPI_HALT);
+	if (cpu_ipi_wait(&cpus_halted, cpumask))
+		cpu_ipi_error("halt", cpumask, cpus_halted);
+
+	/*
+	 * TBD
+	 * Depending on available firmware methods, other cpus will
+	 * either shut down themselfs, or spin and wait for us to
+	 * stop them.
+	 */
+}
+
+/*
+ * Pause this cpu
+ */
+void
+cpu_pause(struct reg *regsp)
+{
+	int s = splhigh();
+	int index = cpu_index(curcpu());
+
+	for (;;) {
+		CPUSET_ADD(cpus_paused, index);
+		do {
+			;
+		} while (CPUSET_HAS_P(cpus_paused, index));
+		CPUSET_ADD(cpus_resumed, index);
+
+#if defined(DDB)
+		if (ddb_running_on_this_cpu_p())
+			cpu_Debugger();
+		if (ddb_running_on_any_cpu_p())
+			continue;
+#endif
+		break;
+	}
+
+	splx(s);
+}
+
+/*
+ * Pause all running cpus, excluding current cpu.
+ */
+void
+cpu_pause_others(void)
+{
+	__cpuset_t cpuset;
+
+	CPUSET_ASSIGN(cpuset, cpus_running);
+	CPUSET_DEL(cpuset, cpu_index(curcpu()));
+
+	if (CPUSET_EMPTY_P(cpuset))
+		return;
+
+	cpu_multicast_ipi(cpuset, IPI_SUSPEND);
+	if (cpu_ipi_wait(&cpus_paused, cpuset))
+		cpu_ipi_error("pause", cpus_paused, cpuset);
+}
+
+/*
+ * Resume a single cpu
+ */
+void
+cpu_resume(int index)
+{
+	CPUSET_CLEAR(cpus_resumed);
+	CPUSET_DEL(cpus_paused, index);
+
+	if (cpu_ipi_wait(&cpus_resumed, CPUSET_SINGLE(index)))
+		cpu_ipi_error("resume", cpus_resumed, CPUSET_SINGLE(index));
+}
+
+/*
+ * Resume all paused cpus.
+ */
+void
+cpu_resume_others(void)
+{
+	__cpuset_t cpuset;
+
+	CPUSET_CLEAR(cpus_resumed);
+	CPUSET_ASSIGN(cpuset, cpus_paused);
+	CPUSET_CLEAR(cpus_paused);
+
+	/* CPUs awake on cpus_paused clear */
+	if (cpu_ipi_wait(&cpus_resumed, cpuset))
+		cpu_ipi_error("resume", cpus_resumed, cpuset);
+}
+
+int
+cpu_is_paused(int index)
+{
+
+	return CPUSET_HAS_P(cpus_paused, index);
+}
+
+#ifdef DDB
+void
+cpu_debug_dump(void)
+{
+	CPU_INFO_ITERATOR cii;
+	struct cpu_info *ci;
+	char running, hatched, paused, resumed, halted;
+
+	db_printf("CPU CPUID STATE CPUINFO            CPL INT MTX IPIS\n");
+	for (CPU_INFO_FOREACH(cii, ci)) {
+		hatched = (CPUSET_HAS_P(cpus_hatched, cpu_index(ci)) ? 'H' : '-');
+		running = (CPUSET_HAS_P(cpus_running, cpu_index(ci)) ? 'R' : '-');
+		paused  = (CPUSET_HAS_P(cpus_paused,  cpu_index(ci)) ? 'P' : '-');
+		resumed = (CPUSET_HAS_P(cpus_resumed, cpu_index(ci)) ? 'r' : '-');
+		halted  = (CPUSET_HAS_P(cpus_halted,  cpu_index(ci)) ? 'h' : '-');
+		db_printf("%3d 0x%03lx %c%c%c%c%c %p "
+			"%3d %3d %3d "
+			"0x%02" PRIx64 "/0x%02" PRIx64 "\n",
+			cpu_index(ci), ci->ci_cpuid,
+			running, hatched, paused, resumed, halted,
+			ci, ci->ci_cpl, ci->ci_idepth, ci->ci_mtx_count,
+			ci->ci_active_ipis, ci->ci_request_ipis);
+	}
+}
+#endif
+
 void
 cpu_hatch(struct cpu_info *ci)
 {
 	struct pmap_tlb_info * const ti = ci->ci_tlb_info;
-	const u_long cpu_mask = 1L << cpu_index(ci);
 
 	/*
@@ -620,4 +915,9 @@
 
 	/*
+	 * Setup HWRENA and USERLOCAL COP0 registers (MIPSxxR2).
+	 */
+	cpu_hwrena_setup();
+
+	/*
 	 * If we are using register zero relative addressing to access cpu_info
 	 * in the exception vectors, enter that mapping into TLB now.
@@ -644,10 +944,10 @@
 	 * Announce we are hatched
 	 */
-	atomic_or_ulong(&cpus_hatched, cpu_mask);
+	CPUSET_ADD(cpus_hatched, cpu_index(ci));
 
 	/*
 	 * Now wait to be set free!
 	 */
-	while ((cpus_running & cpu_mask) == 0) {
+	while (! CPUSET_HAS_P(cpus_running, cpu_index(ci))) {
 		/* spin, spin, spin */
 	}
@@ -663,4 +963,10 @@
 
 	/*
+	 * Let this CPU do its own post-running initialization
+	 * (for things that have to be done on the local CPU).
+	 */
+	(*mips_locoresw.lsw_cpu_run)(ci);
+
+	/*
 	 * Now turn on interrupts.
 	 */
@@ -679,5 +985,4 @@
 	     ci != NULL;
 	     ci = ci->ci_next) {
-		const u_long cpu_mask = 1L << cpu_index(ci);
 		KASSERT(!CPU_IS_PRIMARY(ci));
 		KASSERT(ci->ci_data.cpu_idlelwp);
@@ -686,10 +991,10 @@
 		 * Skip this CPU if it didn't sucessfully hatch.
 		 */
-		if ((cpus_hatched & cpu_mask) == 0)
+		if (! CPUSET_HAS_P(cpus_hatched, cpu_index(ci)))
 			continue;
 
 		ci->ci_data.cpu_cc_skew = mips3_cp0_count_read();
 		atomic_or_ulong(&ci->ci_flags, CPUF_RUNNING);
-		atomic_or_ulong(&cpus_running, cpu_mask);
+		CPUSET_ADD(cpus_running, cpu_index(ci));
 	}
 }
@@ -703,2 +1008,169 @@
 	(*mips_locoresw.lsw_cpu_offline_md)();
 }
+
+#ifdef _LP64
+void
+cpu_vmspace_exec(lwp_t *l, vaddr_t start, vaddr_t end)
+{
+	/*
+	 * We need to turn on/off UX so that copyout/copyin will work
+	 * well before setreg gets called.
+	 */
+	uint32_t sr = mips_cp0_status_read();
+	if (end != (uint32_t) end) {
+		mips_cp0_status_write(sr | MIPS3_SR_UX);
+	} else {
+		mips_cp0_status_write(sr & ~MIPS3_SR_UX);
+	}
+}
+#endif
+
+#ifdef __HAVE_CPU_LWP_SETPRIVATE
+int
+cpu_lwp_setprivate(lwp_t *l, void *v)
+{
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+	if (l == curlwp
+	    && (mips_options.mips_cpu->cpu_cp0flags & MIPS_CP0FL_USERLOCAL)) {
+		mipsNN_cp0_userlocal_write(v);
+	}
+#endif
+	return 0;
+}
+#endif
+
+
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+
+#if (CPUWATCH_MAX != 8)
+# error CPUWATCH_MAX
+#endif
+
+/*
+ * cpuwatch_discover - determine how many COP0 watchpoints this CPU supports
+ */
+u_int
+cpuwatch_discover(void)
+{
+	int i;
+
+	for (i=0; i < CPUWATCH_MAX; i++) {
+		uint32_t watchhi = mipsNN_cp0_watchhi_read(i);
+		if ((watchhi & __BIT(31)) == 0)	/* test 'M' bit */
+			break;
+	}
+	return i + 1;
+}
+
+void
+cpuwatch_free(cpu_watchpoint_t *cwp)
+{
+#ifdef DIAGNOSTIC
+	struct cpu_info * const ci = curcpu();
+	KASSERT(cwp >= &ci->ci_cpuwatch_tab[0] &&
+		cwp <= &ci->ci_cpuwatch_tab[ci->ci_cpuwatch_count-1]);
+#endif
+	cwp->cw_mode = 0;
+	cwp->cw_asid = 0;
+	cwp->cw_addr = 0;
+	cpuwatch_clr(cwp);
+}
+
+/*
+ * cpuwatch_alloc
+ * 	find an empty slot
+ *	no locking for the table since it is CPU private
+ */
+cpu_watchpoint_t *
+cpuwatch_alloc(void)
+{
+	struct cpu_info * const ci = curcpu();
+	cpu_watchpoint_t *cwp;
+
+	for (int i=0; i < ci->ci_cpuwatch_count; i++) {
+		cwp = &ci->ci_cpuwatch_tab[i];
+		if ((cwp->cw_mode & CPUWATCH_RWX) == 0)
+			return cwp;
+	}
+	return NULL;
+}
+
+
+void
+cpuwatch_set_all(void)
+{
+	struct cpu_info * const ci = curcpu();
+	cpu_watchpoint_t *cwp;
+	int i;
+
+	for (i=0; i < ci->ci_cpuwatch_count; i++) {
+		cwp = &ci->ci_cpuwatch_tab[i];
+		if ((cwp->cw_mode & CPUWATCH_RWX) != 0)
+			cpuwatch_set(cwp);
+	}
+}
+
+void
+cpuwatch_clr_all(void)
+{
+	struct cpu_info * const ci = curcpu();
+	cpu_watchpoint_t *cwp;
+	int i;
+
+	for (i=0; i < ci->ci_cpuwatch_count; i++) {
+		cwp = &ci->ci_cpuwatch_tab[i];
+		if ((cwp->cw_mode & CPUWATCH_RWX) != 0)
+			cpuwatch_clr(cwp);
+	}
+}
+
+/*
+ * cpuwatch_set - establish a MIPS COP0 watchpoint
+ */
+void
+cpuwatch_set(cpu_watchpoint_t *cwp)
+{
+	struct cpu_info * const ci = curcpu();
+	uint32_t watchhi;
+	register_t watchlo;
+	int cwnum = cwp - &ci->ci_cpuwatch_tab[0];
+
+	KASSERT(cwp >= &ci->ci_cpuwatch_tab[0] &&
+		cwp <= &ci->ci_cpuwatch_tab[ci->ci_cpuwatch_count-1]);
+
+	watchlo = cwp->cw_addr;
+	if (cwp->cw_mode & CPUWATCH_WRITE)
+		watchlo |= __BIT(0);
+	if (cwp->cw_mode & CPUWATCH_READ)
+		watchlo |= __BIT(1);
+	if (cwp->cw_mode & CPUWATCH_EXEC)
+		watchlo |= __BIT(2);
+
+	if (cwp->cw_mode & CPUWATCH_ASID)
+		watchhi = cwp->cw_asid << 16;	/* addr qualified by asid */
+	else
+		watchhi = __BIT(30);		/* addr not qual. by asid (Global) */
+	if (cwp->cw_mode & CPUWATCH_MASK)
+		watchhi |= cwp->cw_mask;	/* set "dont care" addr match bits */
+
+	mipsNN_cp0_watchhi_write(cwnum, watchhi);
+	mipsNN_cp0_watchlo_write(cwnum, watchlo);
+}
+
+/*
+ * cpuwatch_clr - disestablish a MIPS COP0 watchpoint
+ */
+void
+cpuwatch_clr(cpu_watchpoint_t *cwp)
+{
+	struct cpu_info * const ci = curcpu();
+	int cwnum = cwp - &ci->ci_cpuwatch_tab[0];
+
+	KASSERT(cwp >= &ci->ci_cpuwatch_tab[0] &&
+		cwp <= &ci->ci_cpuwatch_tab[ci->ci_cpuwatch_count-1]);
+
+	mipsNN_cp0_watchhi_write(cwnum, 0);
+	mipsNN_cp0_watchlo_write(cwnum, 0);
+}
+
+#endif	/* (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0 */
Index: /trunk/src/sys/arch/mips/mips/db_disasm.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/db_disasm.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/db_disasm.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: db_disasm.c,v 1.19.62.2 2009/11/14 21:52:08 matt Exp $	*/
+/*	$NetBSD: db_disasm.c,v 1.19.62.3 2011/04/29 08:26:24 matt Exp $	*/
 
 /*-
@@ -36,5 +36,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_disasm.c,v 1.19.62.2 2009/11/14 21:52:08 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_disasm.c,v 1.19.62.3 2011/04/29 08:26:24 matt Exp $");
 
 #include <sys/types.h>
@@ -135,9 +135,9 @@
 static const char * const c0_reg[32] = {
 	"index",    "random",   "tlblo0",  "tlblo1",
-	"context",  "pagemask", "wired",   "cp0r7",
+	"context",  "pagemask", "wired",   "hwrena",
 	"badvaddr", "count",    "tlbhi",   "compare",
 	"status",   "cause",    "epc",     "prid",
 	"config",   "lladdr",   "watchlo", "watchhi",
-	"xcontext", "cp0r21",   "cp0r22",  "debug",
+	"xcontext", "cp0r21",   "osscratch",  "debug",
 	"depc",     "perfcnt",  "ecc",     "cacheerr",
 	"taglo",    "taghi",    "errepc",  "desave"
@@ -398,4 +398,28 @@
 			break;
 
+		case OP_DMT:
+			db_printf("dmtc1\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
+		case OP_DMF:
+			db_printf("dmfc1\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
+		case OP_MTH:
+			db_printf("mthc1\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
+		case OP_MFH:
+			db_printf("mfhc1\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
 		default:
 			db_printf("%s.%s\tf%d,f%d,f%d",
@@ -403,4 +427,68 @@
 			    fmt_name[i.FRType.fmt],
 			    i.FRType.fd, i.FRType.fs, i.FRType.ft);
+		}
+		break;
+
+	case OP_COP2:
+		switch (i.RType.rs) {
+		case OP_BCx:
+		case OP_BCy:
+			db_printf("bc2%c\t",
+			    "ft"[i.RType.rt & COPz_BC_TF_MASK]);
+			goto pr_displ;
+
+		case OP_MT:
+			db_printf("mtc2\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
+		case OP_MF:
+			db_printf("mfc2\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
+		case OP_CT:
+			db_printf("ctc2\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
+		case OP_CF:
+			db_printf("cfc2\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
+		case OP_DMT:
+			db_printf("dmtc2\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
+		case OP_DMF:
+			db_printf("dmfc2\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
+		case OP_MTH:
+			db_printf("mthc2\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
+		case OP_MFH:
+			db_printf("mfhc2\t%s,f%d",
+			    reg_name[i.RType.rt],
+			    i.RType.rd);
+			break;
+
+		default:
+			db_printf("%s\t%s,%s,%d", op_name[i.IType.op],
+			    reg_name[i.IType.rt],
+			    reg_name[i.IType.rs],
+			    (short)i.IType.imm);
 		}
 		break;
Index: /trunk/src/sys/arch/mips/mips/db_interface.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/db_interface.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/db_interface.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: db_interface.c,v 1.64.16.16 2010/02/01 04:16:19 matt Exp $	*/
+/*	db_interface.c,v 1.64.16.22 2011/04/29 08:26:24 matt Exp	*/
 
 /*
@@ -28,6 +28,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.64.16.16 2010/02/01 04:16:19 matt Exp $");
-
+__KERNEL_RCSID(0, "db_interface.c,v 1.64.16.22 2011/04/29 08:26:24 matt Exp");
+
+#include "opt_multiprocessor.h"
 #include "opt_cputype.h"	/* which mips CPUs do we support? */
 #include "opt_ddb.h"
@@ -38,9 +39,12 @@
 #include <sys/param.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/reboot.h>
+#include <sys/atomic.h>
+#include <sys/cpu.h>
 
 #include <uvm/uvm_extern.h>
 
+#include <mips/asm.h>
+#include <mips/regnum.h>
 #include <mips/cache.h>
 #include <machine/pte.h>
@@ -60,25 +64,33 @@
 #include <ddb/db_interface.h>
 #include <ddb/db_lex.h>
-#endif
+#include <ddb/db_run.h>	/* for db_continue_cmd() proto */
+#endif
+
+#define NOCPU   ~0
+volatile u_int ddb_cpu = NOCPU;
 
 int		db_active = 0;
 db_regs_t	ddb_regs;
+
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+static void db_watch_cmd(db_expr_t, bool, db_expr_t, const char *);
+static void db_unwatch_cmd(db_expr_t, bool, db_expr_t, const char *);
+#endif	/* (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0 */
+
+#ifdef MULTIPROCESSOR
+static void db_mach_cpu(db_expr_t, bool, db_expr_t, const char *);
+#endif
 
 void db_tlbdump_cmd(db_expr_t, bool, db_expr_t, const char *);
 void db_kvtophys_cmd(db_expr_t, bool, db_expr_t, const char *);
 void db_cp0dump_cmd(db_expr_t, bool, db_expr_t, const char *);
-#ifdef MIPS64_XLS
+#if defined(MIPS64_RMIXL) || defined(MIPS64R2_RMIXL)
 void db_mfcr_cmd(db_expr_t, bool, db_expr_t, const char *);
 void db_mtcr_cmd(db_expr_t, bool, db_expr_t, const char *);
 #endif
 
-static void	kdbpoke_4(vaddr_t addr, int newval);
-static void	kdbpoke_2(vaddr_t addr, short newval);
-static void	kdbpoke_1(vaddr_t addr, char newval);
-static short	kdbpeek_2(vaddr_t addr);
-static char	kdbpeek_1(vaddr_t addr);
-vaddr_t		MachEmulateBranch(struct trapframe *, vaddr_t, unsigned, int);
-
 paddr_t kvtophys(vaddr_t);
+
+CTASSERT(sizeof(ddb_regs) == sizeof(struct reg));
 
 #ifdef DDB_TRACE
@@ -93,73 +105,20 @@
 #endif
 
-static short
-kdbpeek_2(vaddr_t addr)
-{
-
-	return *(short *)addr;
-}
-
-static char
-kdbpeek_1(vaddr_t addr)
-{
-
-	return *(char *)addr;
-}
-
-/*
- * kdbpoke -- write a value to a kernel virtual address.
- *    XXX should handle KSEG2 addresses and check for unmapped pages.
- *    XXX user-space addresess?
- */
-static void
-kdbpoke_4(vaddr_t addr, int newval)
-{
-
-	*(int*) addr = newval;
-	wbflush();
-}
-
-static void
-kdbpoke_2(vaddr_t addr, short newval)
-{
-
-	*(short*) addr = newval;
-	wbflush();
-}
-
-static void
-kdbpoke_1(vaddr_t addr, char newval)
-{
-	*(char*) addr = newval;
-	wbflush();
-}
-
-#if 0 /* UNUSED */
-/*
- * Received keyboard interrupt sequence.
- */
-void
-kdb_kbd_trap(int *tf)
-{
-
-	if (db_active == 0 && (boothowto & RB_KDB)) {
-		printf("\n\nkernel: keyboard interrupt\n");
-		ddb_trap(-1, tf);
-	}
-}
-#endif
-
 #ifndef KGDB
 int
 kdb_trap(int type, struct reg *regs)
 {
-
-#ifdef notyet
+	int s;
+
 	switch (type) {
+	case T_WATCH:		/* watchpoint */
 	case T_BREAK:		/* breakpoint */
+		printf("kernel: %s trap\n", trap_names[type & 0x1f]);
+		break;
 	case -1:		/* keyboard interrupt */
+		printf("kernel: kdbint trap\n");
 		break;
 	default:
-		printf("kernel: %s trap", trap_type[type & 0xff]);
+		printf("kernel: %s trap\n", trap_names[type & 0x1f]);
 		if (db_recover != 0) {
 			db_error("Faulted in DDB; continuing...\n");
@@ -168,8 +127,26 @@
 		break;
 	}
-#endif
-	/* Should switch to kdb`s own stack here. */
+
+	s = splhigh();
+
+#ifdef MULTIPROCESSOR
+	bool first_in_ddb = false;
+	const u_int cpu_me = cpu_number();
+	const u_int old_ddb_cpu = atomic_cas_uint(&ddb_cpu, NOCPU, cpu_me);
+	if (old_ddb_cpu == NOCPU) {
+		first_in_ddb = true;
+		cpu_pause_others();
+	} else {
+		if (old_ddb_cpu != cpu_me) {
+			KASSERT(cpu_is_paused(cpu_me));
+			cpu_pause(regs);
+			splx(s);
+			return 1;
+		}
+	}
+	KASSERT(! cpu_is_paused(cpu_me));
+#endif
+
 	ddb_regs = *regs;
-
 	db_active++;
 	cnpollc(1);
@@ -177,8 +154,18 @@
 	cnpollc(0);
 	db_active--;
-
 	*regs = ddb_regs;
 
-	return (1);
+#ifdef MULTIPROCESSOR
+	if (atomic_cas_uint(&ddb_cpu, cpu_me, NOCPU) == cpu_me) {
+		cpu_resume_others();
+	} else {
+		cpu_resume(ddb_cpu);
+		if (first_in_ddb)
+			cpu_pause(regs);
+	}
+#endif
+
+	splx(s);
+	return 1;
 }
 
@@ -197,13 +184,8 @@
 db_read_bytes(vaddr_t addr, size_t size, char *data)
 {
-	int *ip;
-	short *sp;
-
-	while (size >= 4)
-		ip = (int*)data, *ip = kdbpeek(addr), data += 4, addr += 4, size -= 4;
-	while (size >= 2)
-		sp = (short *)data, *sp = kdbpeek_2(addr), data += 2, addr += 2, size -= 2;
-	if (size == 1)
-		*data = kdbpeek_1(addr);
+	const char *src = (char *)addr;
+
+	while (size--)
+		*data++ = *src++;
 }
 
@@ -214,29 +196,12 @@
 db_write_bytes(vaddr_t addr, size_t size, const char *data)
 {
-	vaddr_t p = addr;
+	char *p = (char *)addr;
 	size_t n = size;
 
-#ifdef DEBUG_DDB
-	printf("db_write_bytes(%lx, %d, %p, val %x)\n", addr, size, data,
-	       	(addr &3 ) == 0? *(u_int*)addr: -1);
-#endif
-
-	while (n >= 4) {
-		kdbpoke_4(p, *(const int *)data);
-		p += 4;
-		data += 4;
-		n -= 4;
-	}
-	if (n >= 2) {
-		kdbpoke_2(p, *(const short *)data);
-		p += 2;
-		data += 2;
-		n -= 2;
-	}
-	if (n == 1) {
-		kdbpoke_1(p, *(const char *)data);
-	}
-
-	mips_icache_sync_range((vaddr_t) addr, size);
+	while (n--)
+		*p++ = *data++;
+
+	wbflush();
+	mips_icache_sync_range(addr, size);
 }
 
@@ -254,5 +219,5 @@
 
 		for (i = 0; i < mips_options.mips_num_tlb_entries; i++) {
-			mips1_tlb_read_indexed(i, &tlb);
+			tlb_read_indexed(i, &tlb);
 			db_printf("TLB%c%2d Hi 0x%08x Lo 0x%08x",
 				(tlb.tlb_lo1 & MIPS1_PG_V) ? ' ' : '*',
@@ -311,23 +276,15 @@
 
 #define	FLDWIDTH	10
-#define	SHOW32(reg, name)						\
+
+#define SHOW32(reg, name)	SHOW32SEL(reg, 0, name)
+#define SHOW64(reg, name)	SHOW64SEL(reg, 0, name)
+
+#define	SHOW32SEL(num, sel, name)					\
 do {									\
 	uint32_t __val;							\
 									\
-	__asm volatile("mfc0 %0,$" ___STRING(reg) : "=r"(__val));	\
-	printf("  %s:%*s %#x\n", name, FLDWIDTH - (int) strlen(name),	\
-	    "", __val);							\
-} while (0)
-
-#define SHOW64(reg, name)	MIPS64_SHOW64(reg, 0, name)
-
-#define	MIPS64_SHOW32(num, sel, name)					\
-do {									\
-	uint32_t __val;							\
-									\
-	KASSERT (CPUIS64BITS);						\
 	__asm volatile(							\
 		".set push			\n\t"			\
-		".set mips64			\n\t"			\
+		".set mips32			\n\t"			\
 		"mfc0 %0,$%1,%2			\n\t"			\
 		".set pop			\n\t"			\
@@ -338,5 +295,5 @@
 
 /* XXX not 64-bit ABI safe! */
-#define	MIPS64_SHOW64(num, sel, name)					\
+#define	SHOW64SEL(num, sel, name)					\
 do {									\
 	uint64_t __val;							\
@@ -354,4 +311,46 @@
 } while (0)
 
+#define	SET32(reg, name, val)						\
+do {									\
+									\
+	__asm volatile("mtc0 %0,$" ___STRING(reg) :: "r"(val));		\
+	if (name != NULL)						\
+		printf("  %s =%*s %#x\n", name,				\
+		    FLDWIDTH - (int) strlen(name), "", val);		\
+} while (0)
+
+#define SET64(reg, name)	MIPS64_SET64(reg, 0, name)
+
+#define	MIPS64_SET32(num, sel, name, val)				\
+do {									\
+									\
+	__asm volatile(							\
+		".set push			\n\t"			\
+		".set mips32			\n\t"			\
+		"mtc0 %0,$%1,%2			\n\t"			\
+		".set pop			\n\t"			\
+	    :: "r"(val), "n"(num), "n"(sel));				\
+	if (name != NULL)						\
+		printf("  %s =%*s %#x\n", name,				\
+		    FLDWIDTH - (int) strlen(name), "", val);		\
+} while (0)
+
+/* XXX not 64-bit ABI safe! */
+#define	MIPS64_SET64(num, sel, name, val)				\
+do {									\
+									\
+	KASSERT (CPUIS64BITS);						\
+	__asm volatile(							\
+		".set push 			\n\t"			\
+		".set mips64			\n\t"			\
+		".set noat			\n\t"			\
+		"dmtc0 %0,$%1,%2		\n\t"			\
+		".set pop"						\
+	    :: "r"(val), "n"(num), "n"(sel));				\
+	if (name != NULL)						\
+		printf("  %s =%*s %#"PRIx64"\n", name,			\
+		    FLDWIDTH - (int) strlen(name), "", (uint64_t)val);	\
+} while (0)
+
 void
 db_cp0dump_cmd(db_expr_t addr, bool have_addr, db_expr_t count,
@@ -396,8 +395,10 @@
 	}
 
-	if ((cp0flags & MIPS_CP0FL_EIRR) != 0)
-		MIPS64_SHOW64(9, 6, "eirr");
-	if ((cp0flags & MIPS_CP0FL_EIMR) != 0)
-		MIPS64_SHOW64(9, 7, "eimr");
+	if ((cp0flags & MIPS_CP0FL_USE) != 0) {
+		if ((cp0flags & MIPS_CP0FL_EIRR) != 0)
+			SHOW64SEL(9, 6, "eirr");
+		if ((cp0flags & MIPS_CP0FL_EIMR) != 0)
+			SHOW64SEL(9, 7, "eimr");
+	}
 
 	if (CPUIS64BITS) {
@@ -424,26 +425,28 @@
 	if ((cp0flags & MIPS_CP0FL_USE) != 0) {
 		if ((cp0flags & MIPS_CP0FL_EBASE) != 0)
-			MIPS64_SHOW32(15, 1, "ebase");
+			SHOW32SEL(15, 1, "ebase");
 		if ((cp0flags & MIPS_CP0FL_CONFIG) != 0)
 			SHOW32(MIPS_COP_0_CONFIG, "config");
-		if ((cp0flags & MIPS_CP0FL_CONFIGn(0)) != 0)
-			MIPS64_SHOW32(16, 0, "config0");
-		if ((cp0flags & MIPS_CP0FL_CONFIGn(1)) != 0)
-			MIPS64_SHOW32(16, 1, "config1");
-		if ((cp0flags & MIPS_CP0FL_CONFIGn(2)) != 0)
-			MIPS64_SHOW32(16, 2, "config2");
-		if ((cp0flags & MIPS_CP0FL_CONFIGn(3)) != 0)
-			MIPS64_SHOW32(16, 3, "config3");
-		if ((cp0flags & MIPS_CP0FL_CONFIGn(4)) != 0)
-			MIPS64_SHOW32(16, 4, "config4");
-		if ((cp0flags & MIPS_CP0FL_CONFIGn(5)) != 0)
-			MIPS64_SHOW32(16, 5, "config5");
-		if ((cp0flags & MIPS_CP0FL_CONFIGn(6)) != 0)
-			MIPS64_SHOW32(16, 6, "config6");
-		if ((cp0flags & MIPS_CP0FL_CONFIGn(7)) != 0)
-			MIPS64_SHOW32(16, 7, "config7");
+		if ((cp0flags & MIPS_CP0FL_CONFIG1) != 0)
+			SHOW32SEL(16, 1, "config1");
+		if ((cp0flags & MIPS_CP0FL_CONFIG2) != 0)
+			SHOW32SEL(16, 2, "config2");
+		if ((cp0flags & MIPS_CP0FL_CONFIG3) != 0)
+			SHOW32SEL(16, 3, "config3");
+		if ((cp0flags & MIPS_CP0FL_CONFIG4) != 0)
+			SHOW32SEL(16, 4, "config4");
+		if ((cp0flags & MIPS_CP0FL_CONFIG5) != 0)
+			SHOW32SEL(16, 5, "config5");
+		if ((cp0flags & MIPS_CP0FL_CONFIG6) != 0)
+			SHOW32SEL(16, 6, "config6");
+		if ((cp0flags & MIPS_CP0FL_CONFIG7) != 0)
+			SHOW32SEL(16, 7, "config7");
+		if ((cp0flags & MIPS_CP0FL_HWRENA) != 0)
+			SHOW32(7, "hwrena");
+		if ((cp0flags & MIPS_CP0FL_USERLOCAL) != 0)
+			SHOW32SEL(4, 2, "userlocal");
 	} else {
 		SHOW32(MIPS_COP_0_CONFIG, "config");
-#if defined(MIPS32) || defined(MIPS64)
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 		if (CPUISMIPSNN) {
 			uint32_t val;
@@ -457,47 +460,194 @@
 	if (MIPS_HAS_LLSC) {
 		if (MIPS_HAS_LLADDR) {
-			if (CPUIS64BITS) {
+			if (CPUIS64BITS)
 				SHOW64(MIPS_COP_0_LLADDR, "lladdr");
-				SHOW64(MIPS_COP_0_WATCH_LO, "watchlo");
-			} else {
+			else
 				SHOW32(MIPS_COP_0_LLADDR, "lladdr");
-				SHOW32(MIPS_COP_0_WATCH_LO, "watchlo");
-			}
-		}
-
-		SHOW32(MIPS_COP_0_WATCH_HI, "watchhi");
-
+		}
+	}
+
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	for (int i=0; i < curcpu()->ci_cpuwatch_count; i++) {
+		const intptr_t lo = mipsNN_cp0_watchlo_read(i);
+		const uint32_t hi = mipsNN_cp0_watchhi_read(i);
+		printf("  %s%d:%*s %#" PRIxPTR "\t",
+		    "watchlo", i, FLDWIDTH - 8, "", lo);
+		printf("  %s%d:%*s %#" PRIx32 "\n",
+		    "watchhi", i, FLDWIDTH - 8, "", hi);
+	}
+#endif
+
+	if (CPUIS64BITS) {
+		SHOW64(MIPS_COP_0_TLB_XCONTEXT, "xcontext");
+	}
+
+	if (CPUISMIPSNN) {
 		if (CPUIS64BITS) {
-			SHOW64(MIPS_COP_0_TLB_XCONTEXT, "xcontext");
-		}
-
-		if (CPUISMIPSNN) {
-			if (CPUISMIPS64) {
-				SHOW64(MIPS_COP_0_PERFCNT, "perfcnt");
-			} else {
-				SHOW32(MIPS_COP_0_PERFCNT, "perfcnt");
-			}
-		}
-
-		if (((cp0flags & MIPS_CP0FL_USE) == 0) ||
-		    ((cp0flags & MIPS_CP0FL_ECC) != 0))
-			SHOW32(MIPS_COP_0_ECC, "ecc");
-
-		if (((cp0flags & MIPS_CP0FL_USE) == 0) ||
-		    ((cp0flags & MIPS_CP0FL_CACHE_ERR) != 0))
-			SHOW32(MIPS_COP_0_CACHE_ERR, "cacherr");
-
-		SHOW32(MIPS_COP_0_TAG_LO, "cachelo");
-		SHOW32(MIPS_COP_0_TAG_HI, "cachehi");
-
-		if (CPUIS64BITS) {
-			SHOW64(MIPS_COP_0_ERROR_PC, "errorpc");
+			SHOW64(MIPS_COP_0_PERFCNT, "perfcnt");
 		} else {
-			SHOW32(MIPS_COP_0_ERROR_PC, "errorpc");
-		}
-	}
-}
-
-#ifdef MIPS64_XLS
+			SHOW32(MIPS_COP_0_PERFCNT, "perfcnt");
+		}
+	}
+
+	if (((cp0flags & MIPS_CP0FL_USE) == 0) ||
+	    ((cp0flags & MIPS_CP0FL_ECC) != 0))
+		SHOW32(MIPS_COP_0_ECC, "ecc");
+
+	if (((cp0flags & MIPS_CP0FL_USE) == 0) ||
+	    ((cp0flags & MIPS_CP0FL_CACHE_ERR) != 0))
+		SHOW32(MIPS_COP_0_CACHE_ERR, "cacherr");
+
+	SHOW32(MIPS_COP_0_TAG_LO, "cachelo");
+	SHOW32(MIPS_COP_0_TAG_HI, "cachehi");
+
+	if (CPUIS64BITS) {
+		SHOW64(MIPS_COP_0_ERROR_PC, "errorpc");
+	} else {
+		SHOW32(MIPS_COP_0_ERROR_PC, "errorpc");
+	}
+}
+
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+static void
+db_watch_cmd(db_expr_t address, bool have_addr, db_expr_t count,
+		 const char *modif)
+{
+	struct cpu_info * const ci = curcpu();
+	cpu_watchpoint_t *cwp;
+	register_t mask=0;
+	uint32_t asid;
+	uint32_t mode;
+	db_expr_t value;
+	char str[6];
+
+	if (!have_addr) {
+		db_printf("%-3s %-5s %-16s %4s %4s\n",
+			"#", "MODE", "ADDR", "MASK", "ASID");
+		for (u_int i=0; i < ci->ci_cpuwatch_count; i++) {
+			cwp = &ci->ci_cpuwatch_tab[i];
+			mode = cwp->cw_mode;
+			if ((mode & CPUWATCH_RWX) == 0)
+				continue;	/* empty/disabled/invalid */
+			str[0] = (mode & CPUWATCH_READ)  ?  'r' : '-';
+			str[1] = (mode & CPUWATCH_WRITE) ?  'w' : '-';
+			str[2] = (mode & CPUWATCH_EXEC)  ?  'x' : '-';
+			str[3] = (mode & CPUWATCH_MASK)  ?  'm' : '-';
+			str[4] = (mode & CPUWATCH_ASID)  ?  'a' : 'g';
+			str[5] = '\0';
+			db_printf("%2u: %s %16" PRIxREGISTER
+			    " %4" PRIxREGISTER " %4x\n",
+			    i, str, cwp->cw_addr, cwp->cw_mask, cwp->cw_asid);
+		}
+		db_flush_lex();
+		return;
+	}
+
+	cwp = cpuwatch_alloc();
+	if (cwp == NULL) {
+		db_printf("no watchpoint available\n");
+		db_flush_lex();
+		return;
+	}
+
+	/*
+	 * parse modif to define mode
+	 */
+	KASSERT(modif != NULL);
+	mode = 0;
+	for (int i=0; modif[i] != '\0'; i++) {
+		switch(modif[i]) {
+		case 'w':
+			mode |= CPUWATCH_WRITE;
+			break;
+		case 'm':
+			mode |= CPUWATCH_MASK;
+			break;
+		case 'r':
+			mode |= CPUWATCH_READ;
+			break;
+		case 'x':
+			mode |= CPUWATCH_EXEC;
+			break;
+		case 'a':
+			mode |= CPUWATCH_ASID;
+			break;
+		}
+	}
+	if (mode == 0) {
+		db_printf("mode modifier(s) missing\n");
+		db_flush_lex();
+		return;
+	}
+
+	/*
+	 * if mask mode is requested get the mask,
+	 */
+	if (mode & CPUWATCH_MASK) {
+		if (! db_expression(&value)) {
+			db_printf("mask missing\n");
+			db_flush_lex();
+			return;
+		}
+		mask = (register_t)(value & __BITS(11, 3));
+	}
+
+	/*
+	 * if asid mode is requested, get the asid;
+	 * otherwise use global mode (and set asid=0)
+	 */
+	if (mode & CPUWATCH_ASID) {
+		if (! db_expression(&value)) {
+			db_printf("asid missing\n");
+			db_flush_lex();
+			return;
+		}
+		asid = (uint32_t)(value & __BITS(7,0));
+	} else {
+		asid = 0;
+	}
+
+	if (mode & (CPUWATCH_MASK|CPUWATCH_ASID))
+		db_skip_to_eol();
+	else
+		db_flush_lex();
+
+	/*
+	 * store to the (volatile) table entry
+	 * other CPUs can see this and load when resuming from pause
+	 */
+	cwp->cw_addr = (register_t)address;
+	cwp->cw_mask = (register_t)mask;
+	cwp->cw_asid = asid;
+	cwp->cw_mode = mode;
+
+	/*
+	 * program the CPU watchpoint regs
+	 */
+	cpuwatch_set(cwp);
+}
+
+static void
+db_unwatch_cmd(db_expr_t address, bool have_addr, db_expr_t count,
+		 const char *modif)
+{
+	struct cpu_info * const ci = curcpu();
+	const bool unwatch_all = !have_addr;
+	int n;
+
+	n = 0;
+	for (u_int i=0; i < ci->ci_cpuwatch_count; i++) {
+		cpu_watchpoint_t * const cwp = &ci->ci_cpuwatch_tab[i];
+		if (unwatch_all || (cwp->cw_addr == (register_t)address)) {
+			cpuwatch_free(cwp);
+			n++;
+		}
+	}
+	if (n == 0)
+		db_printf("no watch found on address %#" PRIxREGISTER "\n",
+		    (register_t)address);
+}
+#endif	/* (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0 */
+
+#if (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 void
 db_mfcr_cmd(db_expr_t addr, bool have_addr, db_expr_t count,
@@ -519,5 +669,5 @@
 	__asm volatile(							\
 		".set push 			\n\t"			\
-		".set mips64			\n\t"			\
+		".set arch=xlr			\n\t"			\
 		".set noat			\n\t"			\
 		"mfcr %0,%1			\n\t"			\
@@ -539,5 +689,5 @@
 	}
 
-	if ((!have_addr) || (db_expression(&value) == 0)) {
+	if ((!have_addr) || (! db_expression(&value))) {
 		db_printf("Address missing\n");
 		db_flush_lex();
@@ -549,7 +699,7 @@
 	__asm volatile(							\
 		".set push 			\n\t"			\
-		".set mips64			\n\t"			\
+		".set arch=xlr			\n\t"			\
 		".set noat			\n\t"			\
-		"mfcr %0,%1			\n\t"			\
+		"mtcr %0,%1			\n\t"			\
 		".set pop 			\n\t"			\
 	    :: "r"(value), "r"(addr));
@@ -557,10 +707,22 @@
 	db_printf("control reg 0x%lx = 0x%lx\n", addr, value);
 }
-#endif /* MIPS64_XLS */
+#endif /* (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0 */
 
 const struct db_command db_machine_command_table[] = {
-	{ DDB_ADD_CMD("cp0",	db_cp0dump_cmd,		0,
+#ifdef MULTIPROCESSOR
+	{ DDB_ADD_CMD("cpu",	db_mach_cpu,		0,
+	  "switch to another cpu", "cpu#", NULL) },
+#endif
+	{ DDB_ADD_CMD("cp0",	db_cp0dump_cmd,	0,
 		"Dump CP0 registers.",
 		NULL, NULL) },
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	{ DDB_ADD_CMD("watch",	db_watch_cmd,		CS_MORE,
+		"set cp0 watchpoint",
+		"address <mask> <asid> </rwxma>", NULL) },
+	{ DDB_ADD_CMD("unwatch",db_unwatch_cmd,		0,
+		"delete cp0 watchpoint",
+		"address", NULL) },
+#endif	/* (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0 */
 	{ DDB_ADD_CMD("kvtop",	db_kvtophys_cmd,	0,
 		"Print the physical address for a given kernel virtual address",
@@ -570,5 +732,5 @@
 		"Print out TLB entries. (only works with options DEBUG)",
 		NULL, NULL) },
-#ifdef MIPS64_XLS
+#if (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 	{ DDB_ADD_CMD("mfcr", 	db_mfcr_cmd,		CS_NOREPEAT,
 		"Dump processor control register",
@@ -683,26 +845,16 @@
 inst_load(int inst)
 {
-	InstFmt i;
-
-	i.word = inst;
-
-	switch (i.JType.op) {
-	case OP_LWC1:
-	case OP_LB:
-	case OP_LH:
-	case OP_LW:
-	case OP_LD:
-	case OP_LBU:
-	case OP_LHU:
-	case OP_LWU:
-	case OP_LDL:
-	case OP_LDR:
-	case OP_LWL:
-	case OP_LWR:
-	case OP_LL:
-		return 1;
-	default:
-		return 0;
-	}
+	InstFmt i = { .word = inst, };
+
+	/*
+	 * All loads are opcodes 04x or 06x.
+	 */
+	if ((i.JType.op & 050) != 040)
+		return false;
+
+	/*
+	 * Except these this opcode is not a load.
+	 */
+	return i.JType.op != OP_PREF;
 }
 
@@ -710,37 +862,30 @@
 inst_store(int inst)
 {
-	InstFmt i;
-
-	i.word = inst;
-
-	switch (i.JType.op) {
-	case OP_SWC1:
-	case OP_SB:
-	case OP_SH:
-	case OP_SW:
-	case OP_SD:
-	case OP_SDL:
-	case OP_SDR:
-	case OP_SWL:
-	case OP_SWR:
-	case OP_SCD:
-		return 1;
-	default:
-		return 0;
-	}
+	InstFmt i = { .word = inst, };
+
+	/*
+	 * All stores are opcodes 05x or 07x.
+	 */
+	if ((i.JType.op & 050) != 050)
+		return false;
+
+	/*
+	 * Except these two opcodes are not stores.
+	 */
+	return i.JType.op != OP_RSVD073 && i.JType.op != OP_CACHE;
 }
 
 /*
  * Return the next pc if the given branch is taken.
- * MachEmulateBranch() runs analysis for branch delay slot.
+ * mips_emul_branch() runs analysis for branch delay slot.
  */
 db_addr_t
 branch_taken(int inst, db_addr_t pc, db_regs_t *regs)
 {
+	struct pcb * const pcb = lwp_getpcb(curlwp);
+	const uint32_t fpucsr = PCB_FSR(pcb);
 	vaddr_t ra;
-	unsigned fpucsr;
-
-	fpucsr = PCB_FSR(&curlwp->l_addr->u_pcb);
-	ra = MachEmulateBranch((struct trapframe *)regs, pc, fpucsr, 0);
+
+	ra = mips_emul_branch((struct trapframe *)regs, pc, fpucsr, false);
 	return ra;
 }
@@ -758,5 +903,5 @@
 	
 	if (pc < MIPS_KSEG0_START)
-		ins = fuiword((void *)pc);
+		ins = ufetch_uint32((void *)pc);
 	else
 		ins = *(unsigned *)pc;
@@ -767,2 +912,54 @@
 	return (pc);
 }
+
+#ifdef MULTIPROCESSOR
+
+bool 
+ddb_running_on_this_cpu_p(void)
+{               
+	return ddb_cpu == cpu_number();
+}
+
+bool 
+ddb_running_on_any_cpu_p(void)
+{               
+	return ddb_cpu != NOCPU;
+}
+
+void
+db_resume_others(void)
+{
+	u_int cpu_me = cpu_number();
+
+	if (atomic_cas_uint(&ddb_cpu, cpu_me, NOCPU) == cpu_me)
+		cpu_resume_others();
+}
+
+static void
+db_mach_cpu(db_expr_t addr, bool have_addr, db_expr_t count, const char *modif)
+{
+	CPU_INFO_ITERATOR cii;
+	struct cpu_info *ci;
+	
+	if (!have_addr) {
+		cpu_debug_dump();
+		return;
+	}
+	for (CPU_INFO_FOREACH(cii, ci)) {
+		if (cpu_index(ci) == addr)
+			break;
+	}
+	if (ci == NULL) {
+		db_printf("CPU %ld not configured\n", (long)addr);
+		return;
+	}
+	if (ci != curcpu()) {
+		if (!cpu_is_paused(cpu_index(ci))) {
+			db_printf("CPU %ld not paused\n", (long)addr);
+			return;
+		}
+		(void)atomic_cas_uint(&ddb_cpu, cpu_number(), cpu_index(ci));
+		db_continue_cmd(0, false, 0, "");
+	}
+}
+#endif	/* MULTIPROCESSOR */
Index: /trunk/src/sys/arch/mips/mips/db_trace.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/db_trace.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/db_trace.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: db_trace.c,v 1.35.38.4 2010/02/01 04:16:19 matt Exp $	*/
+/*	$NetBSD: db_trace.c,v 1.35.38.5 2011/04/29 08:26:25 matt Exp $	*/
 
 /*
@@ -28,5 +28,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.35.38.4 2010/02/01 04:16:19 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.35.38.5 2011/04/29 08:26:25 matt Exp $");
 
 #include "opt_ddb.h"
@@ -36,5 +36,4 @@
 #include <sys/systm.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/cpu.h>
 
@@ -145,24 +144,9 @@
 	struct proc *p;
 	struct lwp *l;
-	bool trace_thread = false;
-	bool lwpaddr = false;
 	const char *cp = modif;
 	char c;
-
-	while ((c = *cp++) != 0) {
-		if (c == 'a') {
-			lwpaddr = true;
-			trace_thread = true;
-		}
-		if (c == 't')
-			trace_thread = true;
-#if 0
-		if (c == 'u')
-			/* todo */
-#endif
-	}
-
-
-	if (!have_addr || !trace_thread) {
+	bool lwpaddr = false;
+
+	if (!have_addr) {
 		struct reg * regs = &ddb_regs;
 		stacktrace_subr(regs->r_regs[_R_A0],
@@ -179,11 +163,16 @@
 	}
 
+	while ((c = *cp++) != 0) {
+		if (c == 'a') {
+			lwpaddr = true;
+		}
+	}
+
 	if (lwpaddr) {
-		/* trace/a */
 		l = (struct lwp *)addr;
-		p = l->l_proc;
-		(*pr)("trace: pid %d ", p->p_pid);
+		(*pr)("pid %d.%d ", l->l_proc->p_pid, l->l_lid);
 	} else {
 		/* "trace/t" */
+
 		(*pr)("pid %d ", (int)addr);
 		p = p_find(addr, PFIND_LOCKED);
@@ -193,13 +182,11 @@
 		}	
 		l = LIST_FIRST(&p->p_lwps); /* XXX NJWLWP */
-		KASSERT(l != NULL);
-	}
-	(*pr)("lid %d ", l->l_lid);
-	if (!(l->l_flag & LW_INMEM)) {
-		(*pr)("swapped out\n");
-		return;
-	}
-
-	pcb = &(l->l_addr->u_pcb);
+		if (!(l->l_flag & LW_INMEM)) {
+			(*pr)("swapped out\n");
+			return;
+		}
+	}
+
+	pcb = lwp_getpcb(l);
 	(*pr)("at %p\n", pcb);
 
Index: /trunk/src/sys/arch/mips/mips/fp.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/fp.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/fp.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: fp.S,v 1.33.38.11 2010/05/11 20:54:27 matt Exp $	*/
+/*	$NetBSD: fp.S,v 1.33.38.13 2011/04/29 08:26:25 matt Exp $	*/
 
 /*
@@ -101,10 +101,10 @@
 /*----------------------------------------------------------------------------
  *
- * MachEmulateFP --
+ * mips_emul_fp --
  *
  *	Emulate unimplemented floating point operations.
- *	This routine should only be called by MachFPInterrupt().
- *
- *	MachEmulateFP(uint32_t instr, struct frame *frame, uint32_t cause)
+ *	This routine should only be called by mips_fpu_intr().
+ *
+ *	mips_emul_fp(uint32_t instr, struct trapframe *tf, uint32_t cause)
  *
  * Results:
@@ -127,5 +127,5 @@
 #endif
 #endif
-NESTED(MachEmulateFP, CALLFRAME_SIZ, ra)
+NESTED(mips_emul_fp, CALLFRAME_SIZ, ra)
 	PTR_SUBU sp, CALLFRAME_SIZ
 	REG_S	ra, CALLFRAME_RA(sp)
@@ -138,7 +138,7 @@
 	andi	v0, v0, 0x1F << PTR_SCALESHIFT	# mask FMT field
 #ifdef FPEMUL
-	PTR_L	t0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	PTR_L	a3, fmt_tbl(v0)			# switch on FUNC & FMT
-	INT_L	a2, U_PCB_FPREGS+FRAME_FSR(t0)
+	INT_L	a2, PCB_FPREGS+FRAME_FSR(t0)
 #else
 	cfc1	a2, MIPS_FPU_CSR		# get exception register
@@ -648,9 +648,9 @@
 mfromc1:
 	srl	t1, a0, 11-FPX_SCALESHIFT	# fs is in bits 15:11
-	PTR_L	t0, L_ADDR(MIPS_CURLWP)		# get pcb of lwp
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t1, t1, FPX_REGMASK
 	PTR_ADDU t0, t0, t1
 
-	FPX_L	v0, U_PCB_FPREGS+FRAME_FP0(t0)
+	FPX_L	v0, PCB_FPREGS+FRAME_FP0(t0)
 
 	srl	t0, a0, 16-REG_SCALESHIFT
@@ -674,9 +674,9 @@
 
 	srl	t1, a0, 11-FPX_SCALESHIFT
-	PTR_L	t0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t1, t1, FPX_REGMASK
 	PTR_ADDU t0, t0, t1
 
-	FPX_S	v0, U_PCB_FPREGS+FRAME_FP0(t0)
+	FPX_S	v0, PCB_FPREGS+FRAME_FP0(t0)
 
 	b	done
@@ -685,9 +685,9 @@
 dmfromc1:
 	srl	t1, a0, 11-DFPX_SCALESHIFT	# fs is in bits 15:11
-	PTR_L	t0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t1, t1,  DFPX_REGMASK
 	PTR_ADDU t0, t0, t1
 
-	DFPX_L	v0, U_PCB_FPREGS+FRAME_FP0(t0)
+	DFPX_L	v0, PCB_FPREGS+FRAME_FP0(t0)
 
 	srl	t0, a0, 16-REG_SCALESHIFT
@@ -711,9 +711,9 @@
 
 	srl	t1, a0, 11-DFPX_SCALESHIFT
-	PTR_L	t0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t1, t1, DFPX_REGMASK
 	PTR_ADDU t0, t0, t1
 
-	DFPX_S	v0, U_PCB_FPREGS+FRAME_FP0(t0)
+	DFPX_S	v0, PCB_FPREGS+FRAME_FP0(t0)
 
 	b	done
@@ -722,5 +722,5 @@
 cfromc1:
 	srl	t1, a0, 11
-	PTR_L	t0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t1, t1, 0x001F
 	li	t2, 0x1F
@@ -728,5 +728,5 @@
 	bne	t1, t2, cfinvalid
 
-	INT_L	v0, U_PCB_FPREGS+FRAME_FSR(t0)
+	INT_L	v0, PCB_FPREGS+FRAME_FSR(t0)
 
 cfinvalid:
@@ -758,7 +758,7 @@
 	REG_L	v0, TF_REG_ZERO(v0)
 	REG_EPILOGUE
-	PTR_L	t0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	v0, U_PCB_FPREGS+FRAME_FSR(t0)
+	INT_S	v0, PCB_FPREGS+FRAME_FSR(t0)
 
 	b	done
@@ -845,5 +845,5 @@
 	REG_EPILOGUE
 	PTR_ADDU a0, 4
-	jal	_C_LABEL(fuiword)
+	jal	_C_LABEL(ufetch_uint32)
 
 	move	a0, v0
@@ -855,9 +855,9 @@
 	or	a2, a2, t0
 
-	/* Free MachEmulateFP call frame */
+	/* Free mips_emul_fp call frame */
 	REG_L	ra, CALLFRAME_RA(sp)
 	PTR_ADDU sp, CALLFRAME_SIZ
 
-	j	_C_LABEL(bcemul_delay_slot)
+	j	_C_LABEL(mips_emul_branchdelayslot)
 #endif
 
@@ -1315,7 +1315,7 @@
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
-	PTR_L	t1, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t1, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(t1)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(t1)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save exceptions
@@ -1395,7 +1395,7 @@
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
-	PTR_L	t1, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t1, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(t1)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(t1)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save exceptions
@@ -1828,4 +1828,6 @@
 	jal	_C_LABEL(renorm_fs_s)
 	move	t9, zero
+	sll	t3, t2, 32 - 3			# convert S fraction to D
+	srl	t2, t2, 3
 	b	norm_d
 2:
@@ -2033,7 +2035,7 @@
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save exceptions
@@ -2145,7 +2147,7 @@
 2:
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save condition bit
@@ -2168,7 +2170,7 @@
 1:
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save condition bit
@@ -2309,7 +2311,7 @@
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save exceptions
@@ -2432,7 +2434,7 @@
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save exceptions
@@ -2591,7 +2593,7 @@
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save exceptions
@@ -2738,7 +2740,7 @@
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save exceptions
@@ -2755,7 +2757,7 @@
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save exceptions
@@ -2776,7 +2778,7 @@
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save exceptions
@@ -2798,7 +2800,7 @@
 	bne	v0, zero, fpe_trap
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save exceptions
@@ -2816,7 +2818,7 @@
 fpe_trap:
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	/*
@@ -2824,21 +2826,15 @@
 	 */
 	REG_S	a2, CALLFRAME_SIZ + 3*SZREG(sp)
-#ifdef MULTIPROCESSOR
-	PTR_L	v0, L_CPU(MIPS_CURLWP)
+	jal	_C_LABEL(fpu_save)		# on RM5231
+
+	REG_L	a2, CALLFRAME_SIZ + 3*SZREG(sp)
+
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	PTR_L	a0, CPU_INFO_FPCURLWP(v0)
-#else
-	PTR_L	a0, CPUVAR(FPCURLWP)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #endif
-	jal	_C_LABEL(fpusave_lwp)		# on RM5231
-
-	REG_L	a2, CALLFRAME_SIZ + 3*SZREG(sp)
-
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
-	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
-#endif
-	REG_L	a1, CALLFRAME_SIZ + 1*SZREG(sp)	# frame
-	REG_L	a2, CALLFRAME_SIZ + 2*SZREG(sp)	# cause
+	move	a3, a2				# fpustat
+	REG_L	a1, CALLFRAME_FRAME(sp)		# frame
+	REG_L	a2, CALLFRAME_CAUSE(sp)		# cause
 	REG_L	ra, CALLFRAME_RA(sp)
 	PTR_ADDU sp, CALLFRAME_SIZ
@@ -2846,11 +2842,11 @@
 
 /*
- * Send an illegal instruction signal to the current process.
+ * Send an illegal instruction signal to the current lwp.
  */
 ill:
 #ifdef FPEMUL
-	PTR_L	v0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	v0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	#nop
-	INT_S	a2, U_PCB_FPREGS+FRAME_FSR(v0)
+	INT_S	a2, PCB_FPREGS+FRAME_FSR(v0)
 #else
 	ctc1	a2, MIPS_FPU_CSR		# save exceptions
@@ -2901,5 +2897,5 @@
 						# 3rd arg is FP CSR
 	move	a3, zero			# 4th arg is FALSE
-	jal	_C_LABEL(MachEmulateBranch)	# compute PC after branch
+	jal	_C_LABEL(mips_emul_branch)	# compute PC after branch
 
 	REG_L	a1, CALLFRAME_FRAME(sp)
@@ -2919,5 +2915,5 @@
 	PTR_ADDU sp, CALLFRAME_SIZ
 	j	ra
-END(MachEmulateFP)
+END(mips_emul_fp)
 
 /*----------------------------------------------------------------------------
@@ -2925,5 +2921,5 @@
  *
  *	Read (integer) the FS register (bits 15-11).
- *	This is an internal routine used by MachEmulateFP only.
+ *	This is an internal routine used by mips_emul_fp only.
  *
  * Results:
@@ -2936,9 +2932,9 @@
 #ifdef FPEMUL
 	srl	t2, a0, 11 - FPX_SCALESHIFT
-	PTR_L	t0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t2, t2, FPX_REGEVENMASK		# Even regs only
 	PTR_ADDU t0, t0, t2
 
-	lw	t2, U_PCB_FPREGS+FRAME_FP0(t0)
+	lw	t2, PCB_FPREGS+FRAME_FP0(t0)
 
 	srl	t0, t2, 31		# init the sign bit
@@ -3034,5 +3030,5 @@
  *	Read (single precision) the FT register (bits 20-16) and
  *	the FS register (bits 15-11) and break up into fields.
- *	This is an internal routine used by MachEmulateFP only.
+ *	This is an internal routine used by mips_emul_fp only.
  *
  * Results:
@@ -3049,9 +3045,9 @@
 #ifdef FPEMUL
 	srl	ta0, a0, 16 - FPX_SCALESHIFT
-	PTR_L	ta1, L_ADDR(MIPS_CURLWP)	# get pcb of current process
+	PTR_L	ta1, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	ta0, ta0, FPX_REGEVENMASK	# Even regs only
 	PTR_ADDU ta1, ta1, ta0
 
-	lw	ta0, U_PCB_FPREGS+FRAME_FP0(ta1)
+	lw	ta0, PCB_FPREGS+FRAME_FP0(ta1)
 
 	srl	ta1, ta0, 23			# get exponent
@@ -3154,5 +3150,5 @@
  *	Read (single precision) the FS register (bits 15-11) and
  *	break up into fields.
- *	This is an internal routine used by MachEmulateFP only.
+ *	This is an internal routine used by mips_emul_fp only.
  *
  * Results:
@@ -3166,9 +3162,9 @@
 #ifdef FPEMUL
 	srl	t0, a0, 11 - FPX_SCALESHIFT
-	PTR_L	t1, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t1, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t0, t0, FPX_REGEVENMASK		# Even regs only
 	PTR_ADDU t1, t1, t0
 
-	lw	t0, U_PCB_FPREGS+FRAME_FP0(t1)
+	lw	t0, PCB_FPREGS+FRAME_FP0(t1)
 
 	srl	t1, t0, 23			# get exponent
@@ -3272,5 +3268,5 @@
  *	Read (double precision) the FT register (bits 20-16) and
  *	the FS register (bits 15-11) and break up into fields.
- *	This is an internal routine used by MachEmulateFP only.
+ *	This is an internal routine used by mips_emul_fp only.
  *
  * Results:
@@ -3289,15 +3285,15 @@
 #ifdef FPEMUL
 	srl	ta3, a0, 16 - FPX_SCALESHIFT
-	PTR_L	ta0, L_ADDR(MIPS_CURLWP)	# get pcb of current process
+	PTR_L	ta0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	ta3, ta3, FPX_REGEVENMASK	# Even regs only
 	PTR_ADDU ta0, ta3
 
 #if defined(__mips_n32) || defined(__mips_n64)
-	FPX_L	ta3, U_PCB_FPREGS+FRAME_FP0(ta0)
+	FPX_L	ta3, PCB_FPREGS+FRAME_FP0(ta0)
 	dsrl	ta0, ta3, 32
 	srl	ta3, ta3, 0
 #else
-	lw	ta3, U_PCB_FPREGS+FRAME_FP0(ta0)
-	lw	ta0, U_PCB_FPREGS+FRAME_FP0+SZFPREG(ta0)
+	lw	ta3, PCB_FPREGS+FRAME_FP0(ta0)
+	lw	ta0, PCB_FPREGS+FRAME_FP0+SZFPREG(ta0)
 #endif
 
@@ -3417,5 +3413,5 @@
  *	Read (double precision) the FS register (bits 15-11) and
  *	break up into fields.
- *	This is an internal routine used by MachEmulateFP only.
+ *	This is an internal routine used by mips_emul_fp only.
  *
  * Results:
@@ -3430,15 +3426,15 @@
 #ifdef FPEMUL
 	srl	t3, a0, 11 - FPX_SCALESHIFT
-	PTR_L	t0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t3, t3, FPX_REGEVENMASK		# Even regs only
 	PTR_ADDU t0, t3
 
 #if defined(__mips_n32) || defined(__mips_n64)
-	FPX_L	t3, U_PCB_FPREGS+FRAME_FP0(t0)
+	FPX_L	t3, PCB_FPREGS+FRAME_FP0(t0)
 	dsrl	t0, t3, 32
 	srl	t3, t3, 0
 #else
-	lw	t3, U_PCB_FPREGS+FRAME_FP0(t0)
-	lw	t0, U_PCB_FPREGS+FRAME_FP0+SZFPREG(t0)
+	lw	t3, PCB_FPREGS+FRAME_FP0(t0)
+	lw	t0, PCB_FPREGS+FRAME_FP0+SZFPREG(t0)
 #endif
 
@@ -3559,5 +3555,5 @@
  *	Read (single precision) the FS register (bits 15-11) and
  *	the FT register (bits 20-16) and break up into fields.
- *	This is an internal routine used by MachEmulateFP only.
+ *	This is an internal routine used by mips_emul_fp only.
  *
  * Results:
@@ -3574,9 +3570,9 @@
 #ifdef FPEMUL
 	srl	t1, a0, 11 - FPX_SCALESHIFT
-	PTR_L	ta2, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	ta2, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t1, t1, FPX_REGEVENMASK			# Even regs only
 	PTR_ADDU t0, ta2, t1
 
-	lw	t0, U_PCB_FPREGS+FRAME_FP0(t0)
+	lw	t0, PCB_FPREGS+FRAME_FP0(t0)
 
 	srl	t1, t0, 23			# get exponent
@@ -3589,5 +3585,5 @@
 	PTR_ADDU ta2, ta0
 
-	lw	ta0, U_PCB_FPREGS+FRAME_FP0(ta2)
+	lw	ta0, PCB_FPREGS+FRAME_FP0(ta2)
 
 	srl	ta1, ta0, 23			# get exponent
@@ -3761,5 +3757,5 @@
  *	Read (double precision) the FS register (bits 15-11) and
  *	the FT register (bits 20-16) and break up into fields.
- *	This is an internal routine used by MachEmulateFP only.
+ *	This is an internal routine used by mips_emul_fp only.
  *
  * Results:
@@ -3778,15 +3774,15 @@
 #ifdef FPEMUL
 	srl	t1, a0, 11-FPX_SCALESHIFT
-	PTR_L	ta2, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	ta2, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t1, t1, FPX_REGEVENMASK			# Even regs only
 	PTR_ADDU t0, ta2, t1
 
 #if defined(__mips_n32) || defined(__mips_n64)
-	FPX_L	t3, U_PCB_FPREGS+FRAME_FP0(t0)
+	FPX_L	t3, PCB_FPREGS+FRAME_FP0(t0)
 	dsrl	t0, t3, 32
 	srl	t3, t3, 0
 #else
-	FPX_L	t3, U_PCB_FPREGS+FRAME_FP0(t0)
-	FPX_L	t0, U_PCB_FPREGS+FRAME_FP0+SZFPREG(t0)
+	FPX_L	t3, PCB_FPREGS+FRAME_FP0(t0)
+	FPX_L	t0, PCB_FPREGS+FRAME_FP0+SZFPREG(t0)
 #endif
 
@@ -3801,10 +3797,10 @@
 
 #if defined(__mips_n32) || defined(__mips_n64)
-	FPX_L	ta3, U_PCB_FPREGS+FRAME_FP0(ta2)
+	FPX_L	ta3, PCB_FPREGS+FRAME_FP0(ta2)
 	dsrl	ta0, ta3, 32
 	srl	ta3, ta3, 0
 #else
-	lw	ta3, U_PCB_FPREGS+FRAME_FP0(ta2)
-	lw	ta0, U_PCB_FPREGS+FRAME_FP0+SZFPREG(ta2)
+	lw	ta3, PCB_FPREGS+FRAME_FP0(ta2)
+	lw	ta0, PCB_FPREGS+FRAME_FP0+SZFPREG(ta2)
 #endif
 
@@ -4010,5 +4006,5 @@
  *
  *	Write (single precision) the FD register (bits 10-6).
- *	This is an internal routine used by MachEmulateFP only.
+ *	This is an internal routine used by mips_emul_fp only.
  *
  * Arguments:
@@ -4021,5 +4017,5 @@
  *
  *	Write (integer) the FD register (bits 10-6).
- *	This is an internal routine used by MachEmulateFP only.
+ *	This is an internal routine used by mips_emul_fp only.
  *
  * Arguments:
@@ -4037,9 +4033,9 @@
 #ifdef FPEMUL
 	srl	t1, a0, 6 - FPX_SCALESHIFT
-	PTR_L	t0, L_ADDR(MIPS_CURLWP)		# get pcb of current process
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t1, t1, FPX_REGEVENMASK		# Even regs only
 	PTR_ADDU t0, t0, t1
 
-	FPX_S	t2, U_PCB_FPREGS+FRAME_FP0(t0)
+	FPX_S	t2, PCB_FPREGS+FRAME_FP0(t0)
 	j	ra
 #else
@@ -4124,5 +4120,5 @@
  *
  *	Write (double precision) the FT register (bits 10-6).
- *	This is an internal routine used by MachEmulateFP only.
+ *	This is an internal routine used by mips_emul_fp only.
  *
  * Arguments:
@@ -4143,15 +4139,15 @@
 
 	srl	t1, a0, 6-FPX_SCALESHIFT
-	PTR_L	t2, L_ADDR(MIPS_CURLWP)		# get pcb of current process
-
+	PTR_L	t2, L_PCB(MIPS_CURLWP)		# get pcb of current lwp
 	andi	t1, t1, FPX_REGEVENMASK
 	PTR_ADDU t2, t2, t1
+
 #if defined(__mips_n32) || defined(__mips_n64)
 	dsll	t0, t0, 32
 	or	t0, t0, t3
-	FPX_S	t0, U_PCB_FPREGS+FRAME_FP0(t2)
+	FPX_S	t0, PCB_FPREGS+FRAME_FP0(t2)
 #else
-	FPX_S	t3, U_PCB_FPREGS+FRAME_FP0(t2)
-	FPX_S	t0, U_PCB_FPREGS+FRAME_FP0+4(t2)
+	FPX_S	t3, PCB_FPREGS+FRAME_FP0(t2)
+	FPX_S	t0, PCB_FPREGS+FRAME_FP0+4(t2)
 #endif
 	j	ra
@@ -4553,780 +4549,9 @@
 END(renorm_ft_d)
 
-#ifdef FPEMUL
-/*
- * Emulate branch delay slot CPU instruction.
- * Enter from BC1x emulation.
- * These instructions are not implemented and causes SIGILL.
- *  jump/branch
- *  COP0
- *  64bit operation
- *  trap/syscall/break
- *
- * Args are same as MachEmulateFP.
- * It should be used to emulate instruction in branch delay slot.
- */
-STATIC_LEAF(bcemul_delay_slot)
-	REG_PROLOGUE
-	REG_S	zero, TF_REG_ZERO(a1)		# ensure zero has value 0
-	REG_EPILOGUE
-
-	srl	t0, a0, 26-PTR_SCALESHIFT
-	andi	t0, t0, 0x3F << PTR_SCALESHIFT
-	PTR_L	t0, bcemul_optbl(t0)
-	j	t0
-
-bcemul_special:
-	sll	t0, a0, PTR_SCALESHIFT
-	andi	t0, t0, 0x3F << PTR_SCALESHIFT
-	PTR_L	t0, bcemul_specialtbl(t0)
-	j	t0
-
-	.rdata
-bcemul_optbl:
-	PTR_WORD bcemul_special			# 0
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 1
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 2
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 3
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 4
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 5
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 6
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 7
-	PTR_WORD bcemul_addi			# 8
-	PTR_WORD bcemul_addiu			# 9
-	PTR_WORD bcemul_slti			# 10
-	PTR_WORD bcemul_sltiu			# 11
-	PTR_WORD bcemul_andi			# 12
-	PTR_WORD bcemul_ori			# 13
-	PTR_WORD bcemul_xori			# 14
-	PTR_WORD bcemul_lui			# 15
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 16
-	PTR_WORD _C_LABEL(MachEmulateFP)	# 17
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 18
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 19 /* COP1X */
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 20
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 21
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 22
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 23
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 24 DADDI
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 25 DADDIU
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 26
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 27
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 28
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 29
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 30
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 31
-	PTR_WORD _C_LABEL(bcemul_lb)		# 32
-	PTR_WORD _C_LABEL(bcemul_lh)		# 33
-	PTR_WORD _C_LABEL(bcemul_lwl)		# 34
-	PTR_WORD _C_LABEL(bcemul_lw)		# 35
-	PTR_WORD _C_LABEL(bcemul_lbu)		# 36
-	PTR_WORD _C_LABEL(bcemul_lhu)		# 37
-	PTR_WORD _C_LABEL(bcemul_lwr)		# 38
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 39
-	PTR_WORD _C_LABEL(bcemul_sb)		# 40
-	PTR_WORD _C_LABEL(bcemul_sh)		# 41
-	PTR_WORD _C_LABEL(bcemul_swl)		# 42
-	PTR_WORD _C_LABEL(bcemul_sw)		# 43
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 44
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 45
-	PTR_WORD _C_LABEL(bcemul_swr)		# 46 SWR
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 47
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 48
-	PTR_WORD _C_LABEL(MachEmulateLWC1)	# 49
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 50
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 51
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 52
-	PTR_WORD _C_LABEL(MachEmulateLDC1)	# 53
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 54
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 55 LD
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 56
-	PTR_WORD _C_LABEL(MachEmulateSWC1)	# 57
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 58
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 59
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 60
-	PTR_WORD _C_LABEL(MachEmulateSDC1)	# 61
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 62
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 63 SD
-
-bcemul_specialtbl:
-	PTR_WORD bcemul_sll		# 0
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 1
-	PTR_WORD bcemul_srl		# 2
-	PTR_WORD bcemul_sra		# 3
-	PTR_WORD bcemul_sllv		# 4
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 5
-	PTR_WORD bcemul_srlv		# 6
-	PTR_WORD bcemul_srav		# 7
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 8
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 9
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 10
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 11
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 12
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 13
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 14
-	PTR_WORD bcemul_sync		# 15
-	PTR_WORD bcemul_mfhi		# 16
-	PTR_WORD bcemul_mthi		# 17
-	PTR_WORD bcemul_mflo		# 18
-	PTR_WORD bcemul_mtlo		# 19
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 20
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 21
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 22
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 23
-	PTR_WORD bcemul_mult		# 24
-	PTR_WORD bcemul_multu		# 25
-	PTR_WORD bcemul_div		# 26
-	PTR_WORD bcemul_divu		# 27
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 28
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 29
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 30
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 31
-	PTR_WORD bcemul_add		# 32
-	PTR_WORD bcemul_addu		# 33
-	PTR_WORD bcemul_sub		# 34
-	PTR_WORD bcemul_subu		# 35
-	PTR_WORD bcemul_and		# 36
-	PTR_WORD bcemul_or		# 37
-	PTR_WORD bcemul_xor		# 38
-	PTR_WORD bcemul_nor		# 39
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 40
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 41
-	PTR_WORD bcemul_slt		# 42
-	PTR_WORD bcemul_sltu		# 43
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 44
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 45
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 46
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 47
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 48
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 49
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 50
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 51
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 52
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 53
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 54
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 55
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 56
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 57
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 58
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 59
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 60
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 61
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 62
-	PTR_WORD _C_LABEL(bcemul_sigill)	# 63
-
-	.text
-
-bcemul_addi:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	sll	t2, a0, 16
-	sra	t2, t2, 16
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_EPILOGUE
-	addu	t0, v0, t2
-
-	/* Overflow check */
-	xor	t2, v0, t2
-	srl	t2, t2, 31
-	bne	t2, zero, addiok
-
-	xor	v0, v0, t0
-	srl	v0, v0, 31
-	beq	v0, zero, addiok
-
-	j	_C_LABEL(bcemul_sigfpe)
-
-addiok:
-	REG_PROLOGUE
-	REG_S	t0, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_addiu:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	sll	t2, a0, 16
-	sra	t2, t2, 16
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	addu	v0, v0, t2
-	REG_S	v0, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_slti:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	sll	t2, a0, 16
-	sra	t2, t2, 16
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	slt	v0, v0, t2
-	REG_S	v0, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_sltiu:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	sll	t2, a0, 16
-	sra	t2, t2, 16
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	sltu	v0, v0, t2
-	REG_S	v0, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_andi:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	andi	t2, a0, 0xFFFF
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	and	v0, v0, t2
-	REG_S	v0, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_ori:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	andi	t2, a0, 0xFFFF
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	or	v0, v0, t2
-	REG_S	v0, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_xori:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	andi	t2, a0, 0xFFFF
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	xor	v0, v0, t2
-	REG_S	v0, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_lui:
-	srl	t0, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	sll	v0, a0, 16
-	REG_PROLOGUE
-	REG_S	v0, TF_REG_ZERO(t0)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_sll:
-	srl	t0, a0, 16-REG_SCALESHIFT	# rt
-	srl	t1, a0, 11-REG_SCALESHIFT	# rd
-	srl	t2, a0, 6		# sa
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, 0x001F
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	sllv	v0, v0, t2
-	REG_S	v0, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_srl:
-	srl	t0, a0, 16-REG_SCALESHIFT	# rt
-	srl	t1, a0, 11-REG_SCALESHIFT	# rd
-	srl	t2, a0, 6		# sa
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, 0x001F
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	srlv	v0, v0, t2
-	REG_S	v0, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_sra:
-	srl	t0, a0, 16-REG_SCALESHIFT	# rt
-	srl	t1, a0, 11-REG_SCALESHIFT	# rd
-	srl	t2, a0, 6		# sa
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, 0x001F
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	srav	v0, v0, t2
-	REG_S	v0, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_sllv:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	sllv	v0, v1, v0
-	REG_S	v0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_srlv:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	srlv	v0, v1, v0
-	REG_S	v0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_srav:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	srav	v0, v1, v0
-	REG_S	v0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_sync:
-	b	bcemul_done
-
-bcemul_mfhi:
-	srl	t0, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_MULHI(a1)
-	REG_S	v0, TF_REG_ZERO(t0)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_mthi:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	andi	t0, t0, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_S	v0, TF_REG_MULHI(a1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_mflo:
-	srl	t0, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_MULLO(a1)
-	REG_S	v0, TF_REG_ZERO(t0)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_mtlo:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	andi	t0, t0, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_S	v0, TF_REG_MULLO(a1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_mult:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	mult	v0, v1
-	mflo	v0
-	mfhi	v1
-	REG_PROLOGUE
-	REG_S	v0, TF_REG_MULLO(a1)
-	REG_S	v1, TF_REG_MULHI(a1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_multu:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	multu	v0, v1
-	mflo	v0
-	mfhi	v1
-	REG_PROLOGUE
-	REG_S	v0, TF_REG_MULLO(a1)
-	REG_S	v1, TF_REG_MULHI(a1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_div:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	div	v0, v1
-	mflo	v0
-	mfhi	v1
-	REG_PROLOGUE
-	REG_S	v0, TF_REG_MULLO(a1)
-	REG_S	v1, TF_REG_MULHI(a1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_divu:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	divu	v0, v1
-	mflo	v0
-	mfhi	v1
-	REG_PROLOGUE
-	REG_S	v0, TF_REG_MULLO(a1)
-	REG_S	v1, TF_REG_MULHI(a1)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_add:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	addu	t0, v0, v1
-
-	/* Overflow check */
-	xor	v1, v0, v1
-	srl	v1, v1, 31
-	bne	v1, zero, addok
-
-	xor	v0, v0, t0
-	srl	v0, v0, 31
-	beq	v0, zero, addok
-
-	j	_C_LABEL(bcemul_sigfpe)
-
-addok:
-	REG_PROLOGUE
-	REG_S	t0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_addu:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	addu	v0, v0, v1
-	REG_S	v0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_sub:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	REG_EPILOGUE
-	subu	t0, v0, v1
-
-	/* Overflow check */
-	xor	v1, v0, v1
-	srl	v1, v1, 31
-	beq	v1, zero, subok
-
-	xor	v0, v0, t0
-	srl	v0, v0, 31
-	beq	v0, zero, subok
-
-	j	_C_LABEL(bcemul_sigfpe)
-
-subok:
-	REG_PROLOGUE
-	REG_S	t0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_subu:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	subu	v0, v0, v1
-	REG_S	v0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_and:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	and	v0, v0, v1
-	REG_S	v0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_or:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	or	v0, v0, v1
-	REG_S	v0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_xor:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	xor	v0, v0, v1
-	REG_S	v0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_nor:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	nor	v0, v0, v1
-	REG_S	v0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_slt:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	slt	v0, v0, v1
-	REG_S	v0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-	b	bcemul_done
-
-bcemul_sltu:
-	srl	t0, a0, 21-REG_SCALESHIFT	# rs
-	srl	t1, a0, 16-REG_SCALESHIFT	# rt
-	srl	t2, a0, 11-REG_SCALESHIFT	# rd
-	andi	t0, t0, REG_REGMASK
-	andi	t1, t1, REG_REGMASK
-	andi	t2, t2, REG_REGMASK
-	PTR_ADDU t0, a1, t0
-	PTR_ADDU t1, a1, t1
-	PTR_ADDU t2, a1, t2
-	REG_PROLOGUE
-	REG_L	v0, TF_REG_ZERO(t0)
-	REG_L	v1, TF_REG_ZERO(t1)
-	sltu	v0, v0, v1
-	REG_S	v0, TF_REG_ZERO(t2)
-	REG_EPILOGUE
-#	b	bcemul_done		# fall through to bcemul_done
-
-bcemul_done:
-/*
- * Succeeded to emulate instruction with no error
- * so compute the next PC.
- */
-	PTR_SUBU sp, CALLFRAME_SIZ
-	REG_S	ra, CALLFRAME_RA(sp)
-	REG_S	a1, CALLFRAME_FRAME(sp)
-
-	/* Fetch previous branch instruction */
-	REG_PROLOGUE
-	REG_L	a0, TF_REG_EPC(a1)
-	REG_EPILOGUE
-	jal	_C_LABEL(fuiword)
-
-	REG_L	a1, CALLFRAME_FRAME(sp)
-
-	/* Calculate branch destination */
-	sll	t0, v0, 16
-	sra	t0, t0, 16-2
-	REG_PROLOGUE
-	REG_L	t1, TF_REG_EPC(a1)
-	PTR_ADDU t0, t0, 4
-	PTR_ADDU t1, t0
-	REG_S	t1, TF_REG_EPC(a1)
-	REG_EPILOGUE
-
-	REG_L	ra, CALLFRAME_RA(sp)
-	PTR_ADDU sp, CALLFRAME_SIZ
-	j	ra
-
-END(bcemul_delay_slot)
-
-#endif
-
 /*
  * Send SIGILL, SIGFPE.
- * Args are same as MachEmulateFP.
+ * Args are same as mips_emul_fp.
  */
 STATIC_LEAF(fpemul_sigill)
-#ifdef FPEMUL
-STATIC_XLEAF(bcemul_sigill)
-#endif
 	li	t0, 0xFFFFFF00
 	and	a2, a2, t0
@@ -5336,8 +4561,7 @@
 	REG_EPILOGUE
 
-	move	a2, a0				# code = instruction
-	move	a0, MIPS_CURLWP			# get current process
-	li	a1, SIGILL
-	j	_C_LABEL(fpemul_trapsignal)
+	move	a1, a0				# code = instruction
+	move	a0, MIPS_CURLWP			# get current lwp
+	j	_C_LABEL(mips_fpuillinst)
 END(fpemul_sigill)
 
@@ -5350,12 +4574,11 @@
 	REG_EPILOGUE
 
-	move	a2, a0				# code = instruction
-	move	a0, MIPS_CURLWP			# get current process
-	li	a1, SIGFPE
-	j	_C_LABEL(fpemul_trapsignal)
+	move	a1, a3				# fpustat
+	move	a0, MIPS_CURLWP			# get current lwp
+	j	_C_LABEL(mips_fpuexcept)
 END(fpemul_sigfpe)
 
 #ifdef FPEMUL
-STATIC_LEAF(bcemul_sigfpe)
+STATIC_LEAF(mips_emul_sigfpe)
 	li	t0, 0xFFFFFF00
 	and	a2, a2, t0
@@ -5365,8 +4588,7 @@
 	REG_EPILOGUE
 
-	move	a2, a0				# code = instruction
-	move	a0, MIPS_CURLWP			# get current process
-	li	a1, SIGFPE
-	j	_C_LABEL(fpemul_trapsignal)
-END(bcemul_sigfpe)
+	move	a1, a3				# fpustat
+	move	a0, MIPS_CURLWP			# get current lwp
+	j	_C_LABEL(mips_fpuexcept)
+END(mips_emul_sigfpe)
 #endif
Index: /trunk/src/sys/arch/mips/mips/genassym.cf
===================================================================
--- /trunk/src/sys/arch/mips/mips/genassym.cf	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/genassym.cf	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: genassym.cf,v 1.44.12.22 2010/05/16 00:40:51 matt Exp $
+#	genassym.cf,v 1.44.12.26 2011/04/29 08:26:25 matt Exp
 #
 # Copyright (c) 1992, 1993
@@ -82,5 +82,4 @@
 include <sys/proc.h>
 include <sys/mbuf.h>
-include <sys/user.h>
 include <sys/mutex.h>
 include <sys/cpu.h>
@@ -89,4 +88,5 @@
 
 include <machine/cpu.h>
+include <mips/pcb.h>
 include <mips/cache.h>
 include <mips/regnum.h>
@@ -95,9 +95,10 @@
 include <machine/locore.h>
 
+define	PAGE_SIZE		PAGE_SIZE
+
 ifdef __HAVE_FAST_SOFTINTS
 define	__HAVE_FAST_SOFTINTS	1
 endif
 
-define	PAGE_SIZE		PAGE_SIZE
 define	PAGE_SHIFT		PAGE_SHIFT
 define	MIPS_KSEG0_START	MIPS_KSEG0_START
@@ -112,12 +113,10 @@
 # Important offsets into the lwp and proc structs & associated constants
 define	L_CPU			offsetof(struct lwp, l_cpu)
-define	L_ADDR			offsetof(struct lwp, l_addr)
+define	L_CTXSWITCH		offsetof(struct lwp, l_ctxswtch)
+define	L_PCB			offsetof(struct lwp, l_addr)
 define	L_PRIORITY		offsetof(struct lwp, l_priority)
-define	L_WCHAN			offsetof(struct lwp, l_wchan)
+define	L_PRIVATE		offsetof(struct lwp, l_private)
+define	L_PROC			offsetof(struct lwp, l_proc)
 define	L_STAT			offsetof(struct lwp, l_stat)
-define	L_PROC			offsetof(struct lwp, l_proc)
-define	L_CTXSWITCH		offsetof(struct lwp, l_ctxswtch)
-
-# Process status constants
 define	L_MD_UTF		offsetof(struct lwp, l_md.md_utf)
 if defined(_KERNEL_OPT) && !defined(TSAR)
@@ -126,12 +125,13 @@
 endif
 define	L_MD_ASTPENDING		offsetof(struct lwp, l_md.md_astpending)
+define	L_WCHAN			offsetof(struct lwp, l_wchan)
 
 define	P_RASLIST		offsetof(struct proc, p_raslist)
 define	P_MD_SYSCALL		offsetof(struct proc, p_md.md_syscall)
 
-define	U_PCB_FPREGS		offsetof(struct user, u_pcb.pcb_fpregs)
-define	U_PCB_CONTEXT		offsetof(struct user, u_pcb.pcb_context)
-define	U_PCB_ONFAULT		offsetof(struct user, u_pcb.pcb_onfault)
-define	U_PCB_PPL		offsetof(struct user, u_pcb.pcb_ppl)
+define	PCB_FPREGS		offsetof(struct pcb, pcb_fpregs)
+define	PCB_CONTEXT		offsetof(struct pcb, pcb_context)
+define	PCB_ONFAULT		offsetof(struct pcb, pcb_onfault)
+define	PCB_PPL			offsetof(struct pcb, pcb_ppl)
 
 define	VM_MIN_ADDRESS		VM_MIN_ADDRESS
@@ -140,6 +140,4 @@
 define	VM_MAXUSER_ADDRESS	VM_MAXUSER_ADDRESS
 
-define	UVMEXP_SWTCH		offsetof(struct uvmexp, swtch)
-
 define	SIGFPE		 	SIGFPE
 define	SIGILL		 	SIGILL
@@ -148,6 +146,4 @@
 #				/* XXX */
 define	MIPSX_FLUSHICACHE	0
-define	MIPSX_CPU_SWITCH_RESUME	offsetof(struct locoresw, lsw_cpu_switch_resume)
-define	MIPSX_CPU_IDLE		offsetof(struct locoresw, lsw_cpu_idle)
 
 if defined(_KERNEL_OPT)
@@ -270,6 +266,4 @@
 define	FRAME_FP31		sizeof(mips_fpreg_t) * 31
 
-
-#define	KERNFRAME_SIZ	(sizeof(register_t) * (6 + 2 ) + sizeof(mips_reg_t) * (17 + 5))
 define	KERNFRAME_SIZ	sizeof(struct kernframe)
 if defined(__mips_o32) || defined(__mips_o64)
@@ -308,8 +302,9 @@
 define	CPU_INFO_CURLWP		offsetof(struct cpu_info, ci_curlwp)
 define	CPU_INFO_IDLELWP	offsetof(struct cpu_info, ci_data.cpu_idlelwp)
-ifndef NOFPU
-define	CPU_INFO_FPCURLWP	offsetof(struct cpu_info, ci_fpcurlwp)
-endif
-define	CPU_INFO_PMAP_SEGBASE	offsetof(struct cpu_info, ci_pmap_segbase)
+define	CPU_INFO_EV_TLBMISSES	offsetof(struct cpu_info, ci_ev_tlbmisses.ev_count)
+define	CPU_INFO_PMAP_SEG0TAB	offsetof(struct cpu_info, ci_pmap_seg0tab)
+ifdef _LP64
+define	CPU_INFO_PMAP_SEGTAB	offsetof(struct cpu_info, ci_pmap_segtab)
+endif
 define	CPU_INFO_DIVISOR_DELAY	offsetof(struct cpu_info, ci_divisor_delay)
 define	CPU_INFO_MTX_COUNT	offsetof(struct cpu_info, ci_mtx_count)
@@ -318,4 +313,5 @@
 define	CPU_INFO_KSP_TLB_SLOT	offsetof(struct cpu_info, ci_ksp_tlb_slot)
 endif
+define	CPU_INFO_TLB_INFO	offsetof(struct cpu_info, ci_tlb_info)
 
 define	IPL_NONE		IPL_NONE
@@ -340,4 +336,6 @@
 define	TLBMASK_LO1		offsetof(struct tlbmask, tlb_lo1)
 define	TLBMASK_MASK		offsetof(struct tlbmask, tlb_mask)
+define	TI_LOCK			offsetof(struct pmap_tlb_info, ti_lock)
+
 endif
 
@@ -347,6 +345,4 @@
 
 define	MCI_SDCACHE_SIZE	offsetof(struct mips_cache_info, mci_sdcache_size)
-
-define	SPLSW_SPLCHECK		offsetof(struct splsw, splsw_splcheck)
 
 if defined(TSAR)
@@ -356,2 +352,5 @@
 endif
 
+define	__SIMPLELOCK_LOCKED	__SIMPLELOCK_LOCKED
+define	_QUAD_LOWWORD		_QUAD_LOWWORD
+define	_QUAD_HIGHWORD		_QUAD_HIGHWORD
Index: /trunk/src/sys/arch/mips/mips/in_cksum.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/in_cksum.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/in_cksum.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: in_cksum.c,v 1.13 2007/01/24 13:08:11 hubertf Exp $ */
+/* $NetBSD: in_cksum.c,v 1.13.66.1 2011/04/29 08:26:26 matt Exp $ */
 
 /*
@@ -43,5 +43,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in_cksum.c,v 1.13 2007/01/24 13:08:11 hubertf Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in_cksum.c,v 1.13.66.1 2011/04/29 08:26:26 matt Exp $");
 
 #include <sys/param.h>
@@ -57,9 +57,8 @@
 
 union memptr {
-	unsigned int *i;
-	unsigned long *l;
-	unsigned long u;
-	unsigned short *s;
-	unsigned char *c;
+	uint32_t *l;
+	uintptr_t u;
+	uint16_t *s;
+	uint8_t *c;
 };
 
@@ -84,8 +83,4 @@
 	/* Align to 32 bits. */
 	if (buf.u & 0x3) {
-		/* Skip to the end for very small mbufs */
-		if (n < 3)
-			goto verylittleleft;
-
 		/*
 	         * 16-bit-align.
@@ -108,4 +103,7 @@
 			odd_aligned = !odd_aligned;
 		}
+		/* Skip to the end for very small mbufs */
+		if (n <= 2)
+			goto postunaligned;
 
 		/* 32-bit-align */
@@ -199,5 +197,5 @@
  notmuchleft:
 	high = hilo = 0;
-	while (n >= 4) {
+	while (n >= sizeof(uint32_t)) {
 		w0 = *(buf.l++);
 		hilo += w0;
@@ -209,12 +207,13 @@
 	sum += high;
 
-	while (n > 1) {
-		n -= sizeof(*buf.s);
+ postunaligned:
+	/* handle post 32bit unaligned payloads */
+	if (n >= sizeof(uint16_t)) {
 		sum += *(buf.s++);
-	}
-
- verylittleleft:
-	/* handle trailing byte and short (possibly) unaligned payloads */
-	while (n-- > 0) {
+		n -= sizeof(uint16_t);
+	}
+
+	/* handle a trailing odd byte */
+	if (n > 0) {
 #if BYTE_ORDER == BIG_ENDIAN
 		sum += *(buf.c++) << 8;
@@ -222,4 +221,5 @@
 		sum += *(buf.c++);
 #endif
+		n = 0;
 	}
 
Index: /trunk/src/sys/arch/mips/mips/ipifuncs.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/ipifuncs.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/ipifuncs.c	(revision 152)
@@ -28,10 +28,12 @@
  */
 
+#include "opt_ddb.h"
+
 #include <sys/cdefs.h>
-
-__KERNEL_RCSID(0, "$NetBSD: ipifuncs.c,v 1.1.2.3 2010/03/24 19:23:46 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipifuncs.c,v 1.1.2.6 2011/04/29 08:26:26 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/cpu.h>
+#include <sys/device.h>
 #include <sys/intr.h>
 
@@ -39,4 +41,10 @@
 
 #include <mips/cache.h>
+#include <mips/cpuset.h>
+#ifdef DDB
+#include <mips/db_machdep.h>
+#endif
+
+static void ipi_halt(void) __dead;
 
 static const char * const ipi_names[] = {
@@ -47,4 +55,6 @@
 	[IPI_SYNCICACHE]	= "ipi isync",
 	[IPI_KPREEMPT]	= "ipi kpreempt",
+	[IPI_SUSPEND]	= "ipi suspend",
+	[IPI_HALT]	= "ipi halt",
 };
 
@@ -86,8 +96,26 @@
 }
 
+#ifdef __HAVE_PREEEMPTION
 static inline void
 ipi_kpreempt(struct cpu_info *ci)
 {
 	softint_trigger(SOFTINT_KPREEMPT);
+}
+#endif
+
+/*
+ * Process cpu stop-self event.
+ * XXX could maybe add/use locoresw halt function?
+ */
+static void
+ipi_halt(void)
+{
+	const u_int my_cpu = cpu_number();
+	printf("cpu%u: shutting down\n", my_cpu);
+	CPUSET_ADD(cpus_halted, my_cpu);
+	splhigh();
+	for (;;)
+		;
+	/* NOTREACHED */
 }
 
@@ -106,21 +134,23 @@
 	}
 	if (ipi_mask & __BIT(IPI_SHOOTDOWN)) {
-		ci->ci_evcnt_per_ipi[IPI_NOP].ev_count++;
+		ci->ci_evcnt_per_ipi[IPI_SHOOTDOWN].ev_count++;
 		ipi_shootdown(ci);
 	}
 	if (ipi_mask & __BIT(IPI_FPSAVE)) {
-		ci->ci_evcnt_per_ipi[IPI_NOP].ev_count++;
+		ci->ci_evcnt_per_ipi[IPI_FPSAVE].ev_count++;
 		ipi_fpsave(ci);
 	}
 	if (ipi_mask & __BIT(IPI_SYNCICACHE)) {
-		ci->ci_evcnt_per_ipi[IPI_NOP].ev_count++;
+		ci->ci_evcnt_per_ipi[IPI_SYNCICACHE].ev_count++;
 		ipi_syncicache(ci);
 	}
-#ifdef IPI_HALT
+	if (ipi_mask & __BIT(IPI_SUSPEND)) {
+		ci->ci_evcnt_per_ipi[IPI_SUSPEND].ev_count++;
+		cpu_pause(NULL);
+	}
 	if (ipi_mask & __BIT(IPI_HALT)) {
-		ci->ci_evcnt_per_ipi[IPI_NOP].ev_count++;
+		ci->ci_evcnt_per_ipi[IPI_HALT].ev_count++;
 		ipi_halt();
 	}
-#endif
 }
 
Index: /trunk/src/sys/arch/mips/mips/kgdb_machdep.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/kgdb_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/kgdb_machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kgdb_machdep.c,v 1.12.16.1 2010/02/01 04:16:19 matt Exp $	*/
+/*	$NetBSD: kgdb_machdep.c,v 1.12.16.2 2011/04/29 08:26:26 matt Exp $	*/
 
 /*-
@@ -43,9 +43,4 @@
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by Matthias Pfaller.
- * 4. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission
  *
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
@@ -62,5 +57,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kgdb_machdep.c,v 1.12.16.1 2010/02/01 04:16:19 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kgdb_machdep.c,v 1.12.16.2 2011/04/29 08:26:26 matt Exp $");
 
 #include "opt_ddb.h"
@@ -82,5 +77,4 @@
 #include <sys/param.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/reboot.h>
 #include <sys/kgdb.h>
@@ -129,7 +123,5 @@
  */
 int
-kgdb_acc(va, len)
-	vaddr_t va;
-	size_t len;
+kgdb_acc(vaddr_t va, size_t len)
 {
 	vaddr_t last_va;
@@ -152,6 +144,5 @@
  */
 int 
-kgdb_signal(type)
-	int type;
+kgdb_signal(int type)
 {
 	switch (type) {
@@ -195,7 +186,5 @@
  */
 void
-kgdb_getregs(regs, gdb_regs)
-	db_regs_t *regs;
-	kgdb_reg_t *gdb_regs;
+kgdb_getregs(db_regs_t *regs, kgdb_reg_t *gdb_regs)
 {
 	memset(gdb_regs, 0, KGDB_NUMREGS * sizeof(kgdb_reg_t));
@@ -241,7 +230,5 @@
  */
 void
-kgdb_setregs(regs, gdb_regs)
-	db_regs_t *regs;
-	kgdb_reg_t *gdb_regs;
+kgdb_setregs(db_regs_t *regs, kgdb_reg_t *gdb_regs)
 {
 	regs->r_regs[_R_PC] = gdb_regs[37];   /* PC */
@@ -253,6 +240,5 @@
  */
 void
-kgdb_connect(verbose)
-	int verbose;
+kgdb_connect(int verbose)
 {
 	if (kgdb_dev < 0)
@@ -277,5 +263,5 @@
 kgdb_panic(void)
 {
-	if (kgdb_dev >= 0 && kgdb_debug_panic) {
+	if (kgdb_dev != NODEV && kgdb_debug_panic) {
 		printf("entering kgdb\n");
 		kgdb_connect(kgdb_active == 0);
Index: /trunk/src/sys/arch/mips/mips/linux_trap.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/linux_trap.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/linux_trap.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: linux_trap.c,v 1.9 2008/04/28 20:23:28 martin Exp $ */
+/*	$NetBSD: linux_trap.c,v 1.9.18.1 2011/04/29 08:26:26 matt Exp $ */
 
 /*-
@@ -31,10 +31,9 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_trap.c,v 1.9 2008/04/28 20:23:28 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_trap.c,v 1.9.18.1 2011/04/29 08:26:26 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/acct.h>
 #include <sys/kernel.h>
Index: unk/src/sys/arch/mips/mips/lock_stubs.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/lock_stubs.S	(revision 151)
+++ 	(revision )
@@ -1,655 +1,0 @@
-/*	$NetBSD: lock_stubs.S,v 1.9.18.10 2010/02/28 03:28:54 matt Exp $	*/
-
-/*-
- * Copyright (c) 2007 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Andrew Doran.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *      
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "opt_cputype.h"
-#include "opt_lockdebug.h"
-#include "opt_multiprocessor.h"
-
-#include <sys/errno.h>
-
-#include <machine/asm.h>
-#include <machine/cpu.h>
-
-#include "assym.h"
-
-#if defined(DIAGNOSTIC) || defined(MULTIPROCESSOR)
-#define	FULL
-#endif
-
-#if MIPS_HAS_LLSC != 0 && defined(MULTIPROCESSOR)
-#define	SYNC		sync
-#define	BDSYNC		sync
-#else
-#define	SYNC		/* nothing */
-#define	BDSYNC		nop
-#endif /* MIPS_HAS_LLSC != 0 && defined(MULTIPROCESSOR) */
-
-
-#if MIPS_HAS_LLSC != 0
-
-#if defined(MIPS32)
-	.set    mips32
-#else
-	.set	mips3
-#endif
-	.set	noreorder
-	.set	noat
-
-/*
- * unsigned long _atomic_cas_ulong(volatile unsigned long *val,
- *     unsigned long old, unsigned long new);
- */
-LEAF(_atomic_cas_ulong)
-1:
-	LONG_LL	t0, (a0)
-	bne	t0, a1, 2f
-	 move t1, a2
-	LONG_SC	t1, (a0)
-	beqz	t1, 1b
-	 nop
-	j	ra
-	 move	v0, a1
-2:
-	j	ra
-	 move	v0, t0
-END(_atomic_cas_ulong)
-
-STRONG_ALIAS(atomic_cas_ulong,_atomic_cas_ulong)
-STRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_ptr,_atomic_cas_ulong)
-
-STRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_ulong_ni,_atomic_cas_ulong)
-STRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_ptr_ni,_atomic_cas_ulong)
-
-#if defined(_LP64)
-STRONG_ALIAS(_atomic_cas_64,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_64,_atomic_cas_ulong)
-
-STRONG_ALIAS(_atomic_cas_64_ni,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_64_ni,_atomic_cas_ulong)
-#endif
-
-/*
- * unsigned int _atomic_cas_uint(volatile unsigned int *val,
- *    unsigned int old, unsigned int new);
- */
-LEAF(_atomic_cas_uint)
-1:
-	INT_LL	t0, (a0)
-	bne	t0, a1, 2f
-	 move	t1, a2
-	INT_SC	t1, (a0)
-	beqz	t1, 1b
-	 nop
-	j	ra
-	 move	v0, a1
-2:
-	j	ra
-	 move	v0, t0
-END(_atomic_cas_uint)
-
-STRONG_ALIAS(_atomic_cas_32,_atomic_cas_uint)
-STRONG_ALIAS(atomic_cas_32,_atomic_cas_uint)
-STRONG_ALIAS(atomic_cas_uint,_atomic_cas_uint)
-
-STRONG_ALIAS(_atomic_cas_32_ni,_atomic_cas_uint)
-STRONG_ALIAS(atomic_cas_32_ni,_atomic_cas_uint)
-STRONG_ALIAS(_atomic_cas_uint_ni,_atomic_cas_uint)
-STRONG_ALIAS(atomic_cas_uint_ni,_atomic_cas_uint)
-
-/*
- * int ucas_32(volatile uint32_t *ptr, uint32_t old, uint32_t new, uint32_t *ret)
- */
-LEAF(ucas_32)
-	.set at
-	PTR_LA	v0, _C_LABEL(ucaserr)
-	.set noat
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
-	bltz	a0, _C_LABEL(ucaserr)
-	 nop
-	move	v0, zero
-
-1:	INT_LL	t0, 0(a0)
-	 nop
-	bne	t0, a1, 2f
-	 move	t1, a2
-	INT_SC	t1, 0(a0)
-	beqz	t1, 1b
-	 nop
-
-2:	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	 INT_S	t0, 0(a3)
-END(ucas_32)
-
-STRONG_ALIAS(ucas_int, ucas_32)
-STRONG_ALIAS(ucas_uint, ucas_32)
-#ifndef _LP64
-STRONG_ALIAS(ucas_long, ucas_32)
-STRONG_ALIAS(ucas_ulong, ucas_32)
-STRONG_ALIAS(ucas_ptr, ucas_32)
-#endif
-
-#ifndef __mips_o32
-/*
- * int ucas_64(volatile uint64_t *ptr, uint64_t old, uint64_t new, uint64_t *ret)
- */
-LEAF(ucas_64)
-	.set at
-	PTR_LA	v0, _C_LABEL(ucaserr)
-	.set noat
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
-	bltz	a0, _C_LABEL(ucaserr)
-	 nop
-	move	v0, zero
-
-1:	REG_LL	t0, 0(a0)
-	 nop
-	bne	t0, a1, 2f
-	 move	t1, a2
-	REG_SC	t1, 0(a0)
-	beqz	t1, 1b
-	 nop
-
-2:	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	 REG_S	t0, 0(a3)
-END(ucas_64)
-#ifdef _LP64
-STRONG_ALIAS(ucas_ptr, ucas_64)
-STRONG_ALIAS(ucas_long, ucas_64)
-STRONG_ALIAS(ucas_ulong, ucas_64)
-#endif
-
-#endif /* !__mips_o32 */
-
-#ifndef LOCKDEBUG
-
-/*
- * void	mutex_enter(kmutex_t *mtx);
- */
-LEAF(mutex_enter)
-	PTR_LL	t0, MTX_OWNER(a0)
-1:
-	bnez	t0, 2f
-	 move	t2, MIPS_CURLWP
-	PTR_SC	t2, MTX_OWNER(a0)
-	beqz	t2, 1b
-	 PTR_LL	t0, MTX_OWNER(a0)
-	j	ra
-	 BDSYNC
-2:
-	j	_C_LABEL(mutex_vector_enter)
-	 nop
-END(mutex_enter)
-
-/*
- * void	mutex_exit(kmutex_t *mtx);
- */
-LEAF(mutex_exit)
-	PTR_LL	t0, MTX_OWNER(a0)
-	BDSYNC
-1:
-	bne	t0, MIPS_CURLWP, 2f
-	 move	t2, zero
-	PTR_SC	t2, MTX_OWNER(a0)
-	beqz	t2, 1b
-	 PTR_LL	t0, MTX_OWNER(a0)
-	j	ra
-	 nop
-2:
-	j	_C_LABEL(mutex_vector_exit)
-	 nop
-END(mutex_exit)
-
-/*
- * void	mutex_spin_enter(kmutex_t *mtx);
- */
-NESTED(mutex_spin_enter, CALLFRAME_SIZ, ra)
-	move	t0, a0
-	PTR_L	t2, L_CPU(MIPS_CURLWP)
-	INT_L	ta1, CPU_INFO_CPL(t2)
-	INT_L	ta0, MTX_IPL(t0)
-
-	/*
-	 * If the current IPL is less than the mutex's IPL, we need to raise
-	 * our IPL to the mutex'es 
-	 */
-	sltu	v1, ta1, ta0		# v1 = ta1 < ta0
-	beqz	v1, 1f
-	 nop
-	 
-
-	/*
-	 * We need to raise our IPL.  But it means calling another routine
-	 * but it's written to have little overhead.  call splraise
-	 * (only uses a0-a3 and v0-v1)
-	 */
-	move	t3, ra			# need to save ra
-	jal	_C_LABEL(splraise)
-	 move	a0, ta0
-	move	ra, t3			# move ra back
-#ifdef PARANOIA
-10:	bne	ta1, v0, 10b		# loop forever if v0 != ta1
-	 nop
-#endif /* PARANOIA */
-
-	/*
-	 * If this is the first lock of the mutex, store the previous IPL for
-	 * exit.  Even if an interrupt happens, the mutex count will not change.
-	 */
-1:
-	INT_L	ta2, CPU_INFO_MTX_COUNT(t2)
-	INT_ADDU ta3, ta2, -1
-	INT_S	ta3, CPU_INFO_MTX_COUNT(t2)
-	bltz	ta2, 2f
-	 nop
-	INT_S	ta1, CPU_INFO_MTX_OLDSPL(t2)
-2:
-#ifdef PARANOIA
-	INT_L	ta1, CPU_INFO_MTX_OLDSPL(t2)
-	INT_L	ta2, CPU_INFO_CPL(t2)	# get updated CPL
-	sltu	v0, ta2, ta0		# v0 = cpl < mtx_ipl
-	sltu	v1, ta2, ta1		# v1 = cpl < oldspl
-	sll	v0, 1
-	or	v0, v1
-12:	bnez	v0, 12b			# loop forever if any are true
-	 nop
-#endif /* PARANOIA */
-#if defined(FULL)
-	INT_LL	t3, MTX_LOCK(t0)
-	nop
-3:
-	bnez	t3, 4f
-	 li	t1, 1
-	INT_SC	t1, MTX_LOCK(t0)
-	beqz	t1, 3b
-	 INT_LL	t3, MTX_LOCK(t0)
-	j	ra
-	 BDSYNC
-4:
-	move	a0, t0
-	j	_C_LABEL(mutex_spin_retry)
-	 nop
-#else
-	j	ra
-	 nop
-#endif /* FULL */
-END(mutex_spin_enter)
-
-#endif	/* !LOCKDEBUG */
-
-#else	/* MIPS_HAS_LLSC != 0 */
-
-#ifdef MULTIPROCESSOR
-#error MULTIPROCESSOR not supported
-#endif
-
-/*
- * Lock stubs for MIPS1 and a couple of oddball MIPS3 CPUs.  These are
- * implemented using restartable sequences, since LL/SC are not available.
- *
- * The order of the generated code is particularly important here.  Some
- * assumptions:
- *
- * o All of the critical sections are 20 bytes in size, and the entry
- *   to each critical section is aligned on a 16 byte boundary (see
- *   top of _lock_ras() for why).  The entry is defined here as the
- *   point after where a restart occurs if we trap within the section.
- *
- * o The entire code block is aligned on a 128 byte boundary, and is
- *   128 bytes in size.  This is to allow us to do an pessimistic check
- *   after taking a trap with:
- *
- *	if ((addr & ~127) == _lock_ras_start)
- *		addr = _lock_ras(addr);
- *
- *   See definition of MIPS_LOCK_RAS_SIZE in asm.h.
- *
- * o In order to keep the size of the block down, the routines are run
- *   into each other.  Use objdump -d to check alignment after making
- *   changes.
- */
-	.set	mips1
-	.set	noreorder
-	.set	noat
-
-/*
- * unsigned long _atomic_cas_ulong(volatile unsigned long *val,
- *     unsigned long old, unsigned long new);
- */
-	.text
-	.p2align 7
-
-EXPORT(_lock_ras_start)
-
-	.space	12
-
-LEAF_NOPROFILE(_atomic_cas_ulong)
-	PTR_L	t0, (a0)	/* <- critical section start */
-_atomic_cas_start:
-	 nop
-	bne	t0, a1, 1f
- 	 nop
-	PTR_S	a2, (a0)	/* <- critical section end */
-	j	ra
-	 move	v0, a1
-1:
-	j	ra
-	 move	v0, t0
-END(_atomic_cas_ulong)
-
-STRONG_ALIAS(atomic_cas_ulong,_atomic_cas_ulong)
-STRONG_ALIAS(_atomic_cas_32,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_32,_atomic_cas_ulong)
-STRONG_ALIAS(_atomic_cas_uint,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_uint,_atomic_cas_ulong)
-STRONG_ALIAS(_atomic_cas_ptr,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_ptr,_atomic_cas_ulong)
-
-STRONG_ALIAS(_atomic_cas_ulong_ni,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_ulong_ni,_atomic_cas_ulong)
-STRONG_ALIAS(_atomic_cas_32_ni,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_32_ni,_atomic_cas_ulong)
-STRONG_ALIAS(_atomic_cas_uint_ni,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_uint_ni,_atomic_cas_ulong)
-STRONG_ALIAS(_atomic_cas_ptr_ni,_atomic_cas_ulong)
-STRONG_ALIAS(atomic_cas_ptr_ni,_atomic_cas_ulong)
-
-	.p2align 5
-	nop
-	nop
-	nop
-LEAF_NOPROFILE(_ucas_32_ras)
-	PTR_L	t0, (a0)	/* <- critical section start */
-_ucas_32_ras_start:
-	 nop
-	bne	t0, a1, 1f
- 	 nop
-	PTR_S	a2, (a0)	/* <- critical section end */
-1:
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	 INT_S	t0, 0(a3)
-END(_ucas_32_ras)
-
-
-#ifndef LOCKDEBUG
-	.p2align 5
-/*
- * int mutex_enter(kmutex_t *mtx);
- */
-	nop
-	nop
-	nop
-LEAF_NOPROFILE(mutex_enter)
-	PTR_L	t0, (a0)	/* <- critical section start */
-_mutex_enter_start:
-	nop
-	bnez	t0, 1f
-	 nop			
-	PTR_S	MIPS_CURLWP, (a0)/* <- critical section end */
-	j	ra
-	 nop
-1:	j	_C_LABEL(mutex_vector_enter)
-	 nop
-END(mutex_enter)
-
-/*
- * int mutex_exit(kmutex_t *mtx);
- */
-	.p2align 5
-	nop
-	nop
-	nop
-LEAF_NOPROFILE(mutex_exit)
-	PTR_L	t0, (a0)	/* <- critical section start */
-_mutex_exit_start:
-	 nop
-	bne	t0, MIPS_CURLWP, 1f
-	 nop			
-	PTR_S	zero, (a0)	/* <- critical section end */
-	j	ra
-	 nop
-1:	j	_C_LABEL(mutex_vector_exit)
-END(mutex_exit)
-	 nop
-
-	.p2align 7			/* Get out of the RAS block */
-
-/*
- * void	mutex_spin_enter(kmutex_t *mtx);
- */
-NESTED(mutex_spin_enter, CALLFRAME_SIZ, ra)
-	move	t0, a0
-	PTR_L	t2, L_CPU(MIPS_CURLWP)
-	INT_L	a0, MTX_IPL(t0)
-	INT_L	ta1, CPU_INFO_CPL(t2)		# get current cpl
-
-	/*
-	 * If the current IPL is less than the mutex's IPL, we need to raise
-	 * our IPL to the mutex'es 
-	 */
-	sltu	a3, ta1, a0			# a3 = ta1 < a0
-	beqz	a3, 1f
-	 nop
-
-	/*
-	 * We need to raise our IPL.
-	 * call splraise (only uses a0-a3, v0-v1, and ra)
-	 */
-	move	t3, ra
-	jal	_C_LABEL(splraise)
-	 nop
-	move	ra, t3
-
-	/*
-	 * If this is the first lock of the mutex, store the previous IPL
-	 * for exit.
-	 */
-1:
-	INT_L	ta2, CPU_INFO_MTX_COUNT(t2)
-	INT_ADDU ta3, ta2, -1
-	INT_S	ta2, CPU_INFO_MTX_COUNT(t2)
-
-	bnez	ta2, 2f
-	 nop
-	INT_S	t1, CPU_INFO_MTX_OLDSPL(t2)
-2:
-#if defined(DIAGNOSTIC)
-	INT_L	t3, MTX_LOCK(t0)
-	li	t1, 1
-	bnez	t3, 3f
-	 nop
-	j	ra
-	 INT_S	t1, MTX_LOCK(t0)
-3:
-	j	_C_LABEL(mutex_spin_retry)
-	 nop
-#else	/* DIAGNOSTIC */
-	j	ra
-	 nop
-#endif	/* DIAGNOSTIC */
-END(mutex_spin_enter)
-
-#endif	/* !LOCKDEBUG */
-
-/*
- * Patch up the given address.  We arrive here if we might have trapped
- * within one of the critical sections above.  Do:
- *
- *	if ((addr & ~15) == ras)
- *		return ras - 4;
- *	... check next ...
- *	return addr;
- *
- * Registers on entry:
- *
- *	k1	fault PC
- *	ra	return address
- *
- * On exit:
- *
- *	k1	adjusted fault PC
- *	ra	return address
- *	t0	clobbered
- *	t1	clobbered
- *	t2	clobbered
- */
-
-LEAF_NOPROFILE(_lock_ras)
-	li	t1, -16
-	and	t2, k1, t1
-	la	t0, _atomic_cas_start
-	beq	t2, t0, 1f
-	 nop
-	addiu	t0, _ucas_32_ras_start - _atomic_cas_start
-	beq	t2, t0, 1f
-	 nop
-#ifndef LOCKDEBUG
-	addiu	t0, _mutex_enter_start - _ucas_32_ras_start
-	beq	t2, t0, 1f
-	 nop
-	addiu	t0, _mutex_exit_start - _mutex_enter_start
-	beq	t2, t0, 1f
-	 nop
-#endif	/* !LOCKDEBUG */
-	j	ra
-	 nop
-1:
-	j	ra
-	 addiu	k1, t0, -4
-END(_lock_ras)
-
-/*
- * int ucas_32(volatile uint32_t *ptr, uint32_t old, uint32_t new, uint32_t *ret)
- */
-LEAF(ucas_32)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
-	PTR_LA	v0, _C_LABEL(ucaserr)
-	PTR_S	v0, U_PCB_ONFAULT(v1)
-	bltz	a0, _C_LABEL(ucaserr)
-	 nop
-	b	_C_LABEL(_ucas_32_ras)
-	 move	v0, zero
-END(ucas_32)
-
-STRONG_ALIAS(ucas_int, ucas_32)
-STRONG_ALIAS(ucas_uint, ucas_32)
-STRONG_ALIAS(ucas_long, ucas_32)
-STRONG_ALIAS(ucas_ulong, ucas_32)
-STRONG_ALIAS(ucas_ptr, ucas_32)
-#endif	/* MIPS_HAS_LLSC == 0 */
-
-/*
- *
- */
-LEAF(ucaserr)
-	PTR_S	zero, U_PCB_ONFAULT(v1)		# reset fault handler
-	j	ra
-	 li	v0, EFAULT			# return EFAULT on error
-END(ucaserr)
-
-#ifndef LOCKDEBUG
-
-/*
- * void	mutex_spin_exit(kmutex_t *mtx);
- */
-LEAF(mutex_spin_exit)
-	PTR_L	t2, L_CPU(MIPS_CURLWP)
-#if defined(DIAGNOSTIC)
-	INT_L	t0, MTX_LOCK(a0)
-	SYNC
-	beqz	t0, 2f
-	 nop
-	INT_S	zero, MTX_LOCK(a0)
-#elif defined(MULTIPROCESSOR)
-	SYNC
-	INT_S	zero, MTX_LOCK(a0)
-#endif
-
-	/*
-	 * We need to grab this before the mutex count is incremented
-	 * because if we get an interrupt, it may see the count as zero
-	 * and overwrite the oldspl value with a bogus value.
-	 */
-#ifdef PARANOIA
-	INT_L	a2, MTX_IPL(a0)
-#endif
-	INT_L	a0, CPU_INFO_MTX_OLDSPL(t2)
-
-	/*
-	 * Increment the mutex count
-	 */
-	INT_L	t0, CPU_INFO_MTX_COUNT(t2)
-	INT_ADDU t0, t0, 1
-	INT_S	t0, CPU_INFO_MTX_COUNT(t2)
-
-	/*
-	 * If the IPL doesn't change, nothing to do
-	 */
-	INT_L	a1, CPU_INFO_CPL(t2)
-
-#ifdef PARANOIA
-	sltu	v0, a1, a2		# v0 = cpl < mtx_ipl
-	sltu	v1, a1, a0		# v1 = cpl < oldspl
-	sll	v0, 1
-	or	v0, v1
-12:	bnez	v0, 12b			# loop forever if either is true
-	 nop
-#endif /* PARANOIA */
-
-	beq	a0, a1, 1f		# if oldspl == cpl
-	 nop				#   no reason to drop ipl
-
-	bltz	t0, 1f			# there are still holders
-	 nop				# so don't drop IPL
-
-	/*
-	 * Mutex count is zero so we need to restore the old IPL
-	 */
-	j	 _C_LABEL(splx)
-	 nop
-1:
-	j	ra
-	 nop
-#if defined(DIAGNOSTIC)
-2:
-	j	_C_LABEL(mutex_vector_exit)
-	 nop
-#endif
-END(mutex_spin_exit)
-
-#endif	/* !LOCKDEBUG */
Index: /trunk/src/sys/arch/mips/mips/lock_stubs_llsc.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/lock_stubs_llsc.S	(revision 152)
+++ /trunk/src/sys/arch/mips/mips/lock_stubs_llsc.S	(revision 152)
@@ -0,0 +1,376 @@
+/*	lock_stubs_llsc.S,v 1.1.6.2 2011/04/29 08:26:26 matt Exp	*/
+
+/*-
+ * Copyright (c) 2007 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Andrew Doran.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *      
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "opt_cputype.h"
+#include "opt_lockdebug.h"
+#include "opt_multiprocessor.h"
+
+#include <sys/errno.h>
+
+#include <machine/asm.h>
+#include <machine/cpu.h>
+
+#include "assym.h"
+
+#if defined(DIAGNOSTIC) || defined(MULTIPROCESSOR)
+#define	FULL
+#endif
+
+#if defined(MULTIPROCESSOR)
+#define	SYNC		sync
+#define	BDSYNC		sync
+#else
+#define	SYNC		/* nothing */
+#define	BDSYNC		nop
+#endif /* MIPS_HAS_LLSC != 0 && defined(MULTIPROCESSOR) */
+
+
+/*
+ * Set ISA level for the assembler.
+ * XXX Clean up with a macro?  Same code fragment is in mipsX_subr.S too.
+ * XXX Key off build abi instead of processor type?
+ */
+#if defined(MIPS3)
+	.set	mips3
+#endif
+
+#if defined(MIPS32)
+	.set	mips32
+#endif
+
+#if (MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	.set	mips64
+#endif
+
+	.set	noreorder
+	.set	noat
+
+/*
+ * unsigned long atomic_cas_ulong_llsc(volatile unsigned long *val,
+ *     unsigned long old, unsigned long new);
+ */
+STATIC_LEAF(llsc_atomic_cas_ulong)
+1:
+	LONG_LL	t0, (a0)
+	bne	t0, a1, 2f
+	 move t1, a2
+	LONG_SC	t1, (a0)
+	beqz	t1, 1b
+	 nop
+	SYNC
+	j	ra
+	 move	v0, a1
+2:
+	j	ra
+	 move	v0, t0
+END(llsc_atomic_cas_ulong)
+
+/*
+ * unsigned int _atomic_cas_uint_llsc(volatile unsigned int *val,
+ *    unsigned int old, unsigned int new);
+ */
+STATIC_LEAF(llsc_atomic_cas_uint)
+1:
+	INT_LL	t0, (a0)
+	bne	t0, a1, 2f
+	 move	t1, a2
+	INT_SC	t1, (a0)
+	beqz	t1, 1b
+	 nop
+	SYNC
+	j	ra
+	 move	v0, a1
+2:
+	j	ra
+	 move	v0, t0
+END(llsc_atomic_cas_uint)
+
+/*
+ * int llsc_ucas_uint(volatile unsigned int *ptr, unsigned int old,
+ *	unsigned int new, unsigned int *ret)
+ */
+STATIC_LEAF(llsc_ucas_uint)
+	.set at
+	PTR_LA	v0, _C_LABEL(llsc_ucaserr)
+	.set noat
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_S	v0, PCB_ONFAULT(v1)
+	bltz	a0, _C_LABEL(llsc_ucaserr)
+	 nop
+	move	v0, zero
+
+1:	INT_LL	t0, 0(a0)
+	 nop
+	bne	t0, a1, 2f
+	 move	t1, a2
+	INT_SC	t1, 0(a0)
+	beqz	t1, 1b
+	 nop
+	SYNC
+
+2:	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 INT_S	t0, 0(a3)
+END(llsc_ucas_uint)
+
+/*
+ * int ucas_ulong(volatile unsigned long *ptr, unsigned long old,
+ *	unsigned long new, unsigned long *ret)
+ */
+STATIC_LEAF(llsc_ucas_ulong)
+	.set at
+	PTR_LA	v0, _C_LABEL(llsc_ucaserr)
+	.set noat
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_S	v0, PCB_ONFAULT(v1)
+	bltz	a0, _C_LABEL(llsc_ucaserr)
+	 nop
+	move	v0, zero
+
+1:	LONG_LL	t0, 0(a0)
+	 nop
+	bne	t0, a1, 2f
+	 move	t1, a2
+	LONG_SC	t1, 0(a0)
+	beqz	t1, 1b
+	 nop
+	SYNC
+
+2:	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 LONG_S	t0, 0(a3)
+END(llsc_ucas_ulong)
+
+STATIC_LEAF_NOPROFILE(llsc_ucaserr)
+	PTR_S	zero, PCB_ONFAULT(v1)		# reset fault handler
+	j	ra
+	 li	v0, EFAULT			# return EFAULT on error
+END(llsc_ucaserr)
+
+#ifndef LOCKDEBUG
+
+/*
+ * void	mutex_enter(kmutex_t *mtx);
+ */
+STATIC_LEAF(llsc_mutex_enter)
+	PTR_LL	t0, MTX_OWNER(a0)
+	nop
+1:
+	bnez	t0, 2f
+	 move	t2, MIPS_CURLWP
+	PTR_SC	t2, MTX_OWNER(a0)
+	beqz	t2, 1b
+	 PTR_LL	t0, MTX_OWNER(a0)
+	j	ra
+	 BDSYNC
+2:
+	j	_C_LABEL(mutex_vector_enter)
+	 nop
+END(llsc_mutex_enter)
+
+/*
+ * void	mutex_exit(kmutex_t *mtx);
+ */
+STATIC_LEAF(llsc_mutex_exit)
+	PTR_LL	t0, MTX_OWNER(a0)
+	SYNC
+1:
+	bne	t0, MIPS_CURLWP, 2f
+	 move	t2, zero
+	PTR_SC	t2, MTX_OWNER(a0)
+	beqz	t2, 1b
+	 PTR_LL	t0, MTX_OWNER(a0)
+	j	ra
+	 BDSYNC
+2:
+	j	_C_LABEL(mutex_vector_exit)
+	 nop
+END(llsc_mutex_exit)
+
+/*
+ * void	mutex_spin_enter(kmutex_t *mtx);
+ */
+STATIC_NESTED(llsc_mutex_spin_enter, CALLFRAME_SIZ, ra)
+	move	t0, a0
+	PTR_L	t2, L_CPU(MIPS_CURLWP)
+	INT_L	a0, MTX_IPL(t0)
+#ifdef PARANOIA
+	INT_L	ta1, CPU_INFO_CPL(t2)
+#endif
+
+	/*
+	 * We need to raise our IPL.  But it means calling another routine
+	 * but it's written to have little overhead.  call splraise
+	 * (only uses a0-a3 and v0-v1)
+	 */
+	move	t3, ra			# need to save ra
+	jal	_C_LABEL(splraise)
+	 nop
+	move	ra, t3			# move ra back
+#ifdef PARANOIA
+10:	bne	ta1, v0, 10b		# loop forever if v0 != ta1
+	 nop
+#endif /* PARANOIA */
+
+	/*
+	 * If this is the first lock of the mutex, store the previous IPL for
+	 * exit.  Even if an interrupt happens, the mutex count will not change.
+	 */
+1:
+	INT_L	ta2, CPU_INFO_MTX_COUNT(t2)
+	nop
+	INT_ADDU ta3, ta2, -1
+	INT_S	ta3, CPU_INFO_MTX_COUNT(t2)
+	bltz	ta2, 2f
+	 nop
+	INT_S	v0, CPU_INFO_MTX_OLDSPL(t2)	/* returned by splraise */
+2:
+#ifdef PARANOIA
+	INT_L	ta1, CPU_INFO_MTX_OLDSPL(t2)
+	INT_L	ta2, CPU_INFO_CPL(t2)	# get updated CPL
+	nop
+	sltu	v0, ta2, ta0		# v0 = cpl < mtx_ipl
+	sltu	v1, ta2, ta1		# v1 = cpl < oldspl
+	sll	v0, 1
+	or	v0, v1
+12:	bnez	v0, 12b			# loop forever if any are true
+	 nop
+#endif /* PARANOIA */
+#if defined(FULL)
+	INT_LL	t3, MTX_LOCK(t0)
+	nop
+3:
+	bnez	t3, 4f
+	 li	t1, 1
+	INT_SC	t1, MTX_LOCK(t0)
+	beqz	t1, 3b
+	 INT_LL	t3, MTX_LOCK(t0)
+	j	ra
+	 BDSYNC
+4:
+	j	_C_LABEL(mutex_spin_retry)
+	 move	a0, t0
+#else
+	j	ra
+	 nop
+#endif /* FULL */
+END(llsc_mutex_spin_enter)
+
+/*
+ * void	mutex_spin_exit(kmutex_t *mtx);
+ */
+LEAF(llsc_mutex_spin_exit)
+	PTR_L	t2, L_CPU(MIPS_CURLWP)
+#if defined(DIAGNOSTIC)
+	INT_L	t0, MTX_LOCK(a0)
+	nop
+	beqz	t0, 2f
+	 nop
+	INT_S	zero, MTX_LOCK(a0)
+#endif
+
+	/*
+	 * We need to grab this before the mutex count is incremented
+	 * because if we get an interrupt, it may see the count as zero
+	 * and overwrite the oldspl value with a bogus value.
+	 */
+#ifdef PARANOIA
+	INT_L	a2, MTX_IPL(a0)
+	nop
+#endif
+	INT_L	a0, CPU_INFO_MTX_OLDSPL(t2)
+
+	/*
+	 * Increment the mutex count
+	 */
+	INT_L	t0, CPU_INFO_MTX_COUNT(t2)
+	nop
+	INT_ADDU t0, t0, 1
+	INT_S	t0, CPU_INFO_MTX_COUNT(t2)
+
+	/*
+	 * If the IPL doesn't change, nothing to do
+	 */
+	INT_L	a1, CPU_INFO_CPL(t2)
+
+#ifdef PARANOIA
+	sltu	v0, a1, a2		# v0 = cpl < mtx_ipl
+	sltu	v1, a1, a0		# v1 = cpl < oldspl
+	sll	v0, 1
+	or	v0, v1
+12:	bnez	v0, 12b			# loop forever if either is true
+	 nop
+#endif /* PARANOIA */
+
+	beq	a0, a1, 1f		# if oldspl == cpl
+	 nop				#   no reason to drop ipl
+
+	bltz	t0, 1f			# there are still holders
+	 nop				# so don't drop IPL
+
+	/*
+	 * Mutex count is zero so we need to restore the old IPL
+	 */
+#ifdef PARANOIA
+	sltiu	v0, a0, IPL_HIGH+1
+13:	beqz	v0, 13b			# loop forever if ipl > IPL_HIGH
+	 nop
+#endif
+	j	 _C_LABEL(splx)
+	 nop
+1:
+	j	ra
+	 nop
+#if defined(DIAGNOSTIC)
+2:
+	j	_C_LABEL(mutex_vector_exit)
+	 nop
+#endif
+END(llsc_mutex_spin_exit)
+#endif	/* !LOCKDEBUG */
+
+	.rdata
+EXPORT(mips_llsc_locore_atomicvec)
+	PTR_WORD 	llsc_atomic_cas_uint
+	PTR_WORD 	llsc_atomic_cas_ulong
+	PTR_WORD	llsc_ucas_uint
+	PTR_WORD	llsc_ucas_ulong
+#ifdef LOCKDEBUG
+	PTR_WORD	mutex_vector_enter
+	PTR_WORD	mutex_vector_exit
+	PTR_WORD	mutex_vector_enter
+	PTR_WORD	mutex_vector_exit
+#else
+	PTR_WORD	llsc_mutex_enter
+	PTR_WORD	llsc_mutex_exit
+	PTR_WORD	llsc_mutex_spin_enter
+	PTR_WORD	llsc_mutex_spin_exit
+#endif	/* !LOCKDEBUG */
Index: /trunk/src/sys/arch/mips/mips/lock_stubs_ras.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/lock_stubs_ras.S	(revision 152)
+++ /trunk/src/sys/arch/mips/mips/lock_stubs_ras.S	(revision 152)
@@ -0,0 +1,447 @@
+/*	$NetBSD: lock_stubs_ras.S,v 1.2.2.2 2011/04/29 08:26:26 matt Exp $	*/
+
+/*-
+ * Copyright (c) 2007 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Andrew Doran.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *      
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "opt_cputype.h"
+#include "opt_lockdebug.h"
+#include "opt_multiprocessor.h"
+
+#include <sys/errno.h>
+
+#include <machine/asm.h>
+#include <machine/cpu.h>
+
+#include "assym.h"
+
+/*
+ * We rely on mips_vector_init to choose to not use these routines if we are
+ * on a system with multiple CPUs.  We can still use this on a simple CPU
+ * with MULTIPROCESSOR since it might be useful to be using preemption.
+ */
+
+/*
+ * Lock stubs for non-MP kernels.  These are implemented using restartable
+ * sequences, since LL/SC are either not available (MIPS1 and a couple of
+ * oddball MIPS3 CPUs) or not desirable (overhead).
+ *
+ * The order of the generated code is particularly important here.  Some
+ * assumptions:
+ *
+ * o All of the critical sections are 20 bytes in size, and the second
+ *   instruction in each critical section is aligned on a 16 byte boundary
+ *   (see top of _restart_lock_ras() for why).  The entry is defined here as
+ *   the point where a restart occurs if we trap within the section.
+ *
+ * o The entire code block is aligned on a 256 byte boundary, and is
+ *   256 bytes in size.  This is to allow us to do an pessimistic check
+ *   after taking a trap with:
+ *
+ *	if ((addr & ~255) == _lock_ras_start)
+ *		addr = _restart_lock_ras(addr);
+ *
+ *   See definition of MIPS_LOCK_RAS_SIZE in asm.h.
+ *
+ * o In order to keep the size of the block down, the routines are run
+ *   into each other.  Use objdump -d to check alignment after making
+ *   changes.
+ */
+#ifdef _LP64
+	.set	mips3
+#else
+	.set	mips1
+#endif
+	.set	noreorder
+	.set	noat
+
+/*
+ * unsigned long ras_atomic_cas_ulong(volatile unsigned long *val,
+ *     unsigned long old, unsigned long new);
+ */
+	.text
+	.p2align LOG2_MIPS_LOCK_RAS_SIZE
+
+EXPORT(_lock_ras_start)
+STATIC_LEAF(ras_atomic_cas_noupdate)
+	j	ra
+	 move	v0, t0
+END(ras_atomic_cas_noupdate)
+
+	nop
+STATIC_LEAF_NOPROFILE(ras_atomic_cas_ulong)
+	PTR_L	t0, (a0)	/* <- critical section start */
+_atomic_cas_ulong_ras_start:
+	 nop
+	bne	t0, a1, ras_atomic_cas_noupdate
+ 	 nop
+	PTR_S	a2, (a0)	/* <- critical section end */
+_atomic_cas_ulong_ras_end:
+	j	ra
+	 move	v0, a1
+END(ras_atomic_cas_ulong)
+
+/*
+ * unsigned int ras_atomic_cas_uint(volatile unsigned int *val,
+ *     unsigned int old, unsigned int new);
+ */
+	nop
+STATIC_LEAF_NOPROFILE(ras_atomic_cas_uint)
+	INT_L	t0, (a0)	/* <- critical section start */
+_atomic_cas_uint_ras_start:
+	 nop
+	bne	t0, a1, ras_atomic_cas_noupdate
+ 	 nop
+	INT_S	a2, (a0)	/* <- critical section end */
+_atomic_cas_uint_ras_end:
+	j	ra
+	 move	v0, a1
+END(ras_atomic_cas_uint)
+
+/*
+ * int _ucas_ulong_ras(volatile u_long *val, u_long old, u_long new,
+ *     u_long *retp);
+ */
+	nop
+STATIC_LEAF_NOPROFILE(_ucas_ulong_ras)
+	LONG_L	t0, (a0)	/* <- critical section start */
+_ucas_ulong_ras_start:
+	 nop
+	bne	t0, a1, _ucas_ulong_ras_end
+ 	 nop
+	LONG_S	a2, (a0)	/* <- critical section end */
+_ucas_ulong_ras_end:
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 LONG_S	t0, 0(a3)
+END(_ucas_ulong_ras)
+
+/*
+ * int _ucas_uint_ras(volatile u_int *val, u_int old, u_int new, u_int *retp);
+ */
+STATIC_LEAF_NOPROFILE(_ucas_uint_ras)
+	INT_L	t0, (a0)	/* <- critical section start */
+_ucas_uint_ras_start:
+	 nop
+	bne	t0, a1, _ucas_uint_ras_end
+ 	 nop
+	INT_S	a2, (a0)	/* <- critical section end */
+_ucas_uint_ras_end:
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 INT_S	t0, 0(a3)
+END(_ucas_uint_ras)
+
+#ifndef LOCKDEBUG
+/*
+ * void ras_mutex_enter(kmutex_t *mtx);
+ */
+STATIC_LEAF_NOPROFILE(ras_mutex_enter)
+	PTR_L	t0, (a0)	/* <- critical section start */
+_mutex_enter_ras_start:
+	 nop
+	bnez	t0, ras_mutex_vector_enter
+	 nop			
+	PTR_S	MIPS_CURLWP, (a0)/* <- critical section end */
+_mutex_enter_ras_end:
+	j	ra
+	 nop
+END(ras_mutex_enter)
+
+/*
+ * int ras_mutex_exit(kmutex_t *mtx);
+ */
+	nop
+STATIC_LEAF_NOPROFILE(ras_mutex_exit)
+	PTR_L	t0, (a0)	/* <- critical section start */
+_mutex_exit_ras_start:
+	 nop
+	bne	t0, MIPS_CURLWP, ras_mutex_vector_exit
+	 nop			
+	PTR_S	zero, (a0)	/* <- critical section end */
+_mutex_exit_ras_exit:
+	j	ra
+	 nop
+END(ras_mutex_exit)
+
+/*
+ * These could moved out to fit in more RAS sequences.
+ */
+STATIC_LEAF_NOPROFILE(ras_mutex_vector_enter)
+	j	_C_LABEL(mutex_vector_enter)
+	 nop
+END(ras_mutex_vector_enter)
+
+STATIC_LEAF_NOPROFILE(ras_mutex_vector_exit)
+	j	_C_LABEL(mutex_vector_exit)
+	 nop
+END(ras_mutex_vector_exit)
+#endif	/* !LOCKDEBUG */
+
+	.p2align LOG2_MIPS_LOCK_RAS_SIZE	/* Get out of the RAS block */
+
+/*
+ * Patch up the given address.  We arrive here if we might have trapped
+ * within one of the critical sections above.  Do:
+ *
+ *	if ((addr & ~15) == ras)
+ *		return ras - 4;
+ *	... check next ...
+ *	return addr;
+ *
+ * Registers on entry:
+ *
+ *	k1	fault PC
+ *	ra	return address
+ *
+ * On exit:
+ *
+ *	k1	adjusted fault PC
+ *	ra	return address
+ *	t0	clobbered
+ *	t1	clobbered
+ */
+
+#define	RAS_MKMASK(a)	(1 << (((a)-_lock_ras_start) >> 4))
+
+/*
+ * Since each RAS is aligned on a 16 byte boundary, we can use its offset
+ * from _lock_ras_start to construct a bitmask of the valid RAS within.
+ */
+#ifndef LOCKDEBUG
+#define	MUTEX_RAS_MASK	(RAS_MKMASK(_mutex_enter_ras_start) \
+			|RAS_MKMASK(_mutex_exit_ras_start))
+#else
+#define	MUTEX_RAS_MASK	0
+#endif
+
+#define	RAS_MASK	(RAS_MKMASK(_atomic_cas_ulong_ras_start) \
+			|RAS_MKMASK(_atomic_cas_uint_ras_start) \
+			|RAS_MKMASK(_ucas_ulong_ras_start) \
+			|RAS_MKMASK(_ucas_uint_ras_start) \
+			|MUTEX_RAS_MASK)
+
+/*
+ * The caller has already determined that
+ * _lock_ras_start == (k1 & -MIPS_LOCK_RAS_SIZE)
+ */
+LEAF_NOPROFILE(_restart_lock_ras)
+	and	t0, k1, MIPS_LOCK_RAS_SIZE - 1
+				/* look at addr bits in ras region */
+	srl	t0, 4		/* focus on each set of 16 bytes */
+	li	t1, 1		/* need this to make a bitmask */
+	sllv	t1, t1, t0	/* now we have a bitmask of the PC */
+	andi	t1, RAS_MASK	/* was the PC in a RAS? */
+	bnez	t1, 1f		/* yes, adjust PC */
+	 and	t0, k1, 15	/* get offset in RAS */
+	
+	j	ra
+	 nop
+1:
+	addu	t0, 4		/* bias offset by one more instruction */
+	j	ra
+	 PTR_SUBU k1, t0	/* and subtract that from the PC */
+END(_restart_lock_ras)
+
+/*
+ * int ras_ucas_uint(volatile u_int *ptr, u_int old, u_int new, u_int *retp);
+ */
+STATIC_LEAF(ras_ucas_uint)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(ras_ucaserr)
+	PTR_S	v0, PCB_ONFAULT(v1)
+	bltz	a0, _C_LABEL(ras_ucaserr)
+	 nop
+	b	_C_LABEL(_ucas_uint_ras)
+	 move	v0, zero			# assume success
+END(ras_ucas_uint)
+
+/*
+ * int ras_ucas_ulong(volatile u_long *ptr, u_long old, u_long new, u_long *retp);
+ */
+STATIC_LEAF(ras_ucas_ulong)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(ras_ucaserr)
+	PTR_S	v0, PCB_ONFAULT(v1)
+	bltz	a0, _C_LABEL(ras_ucaserr)
+	 nop
+	b	_C_LABEL(_ucas_ulong_ras)
+	 move	v0, zero			# assume success
+END(ras_ucas_ulong)
+
+/*
+ *
+ */
+STATIC_LEAF(ras_ucaserr)
+	PTR_S	zero, PCB_ONFAULT(v1)		# reset fault handler
+	j	ra
+	 li	v0, EFAULT			# return EFAULT on error
+END(ras_ucaserr)
+
+#ifndef LOCKDEBUG
+/*
+ * void	mutex_spin_enter(kmutex_t *mtx);
+ */
+STATIC_NESTED(ras_mutex_spin_enter, CALLFRAME_SIZ, ra)
+	move	t0, a0
+	PTR_L	t2, L_CPU(MIPS_CURLWP)
+	INT_L	a0, MTX_IPL(t0)
+#ifdef PARANOIA
+	INT_L	ta1, CPU_INFO_CPL(t2)		# get current cpl
+#endif
+
+	/*
+	 * We need to raise our IPL.
+	 * call splraise (only uses a0-a3, v0-v1, and ra)
+	 */
+	move	t3, ra
+	jal	_C_LABEL(splraise)
+	 nop
+	move	ra, t3
+
+	/*
+	 * If this is the first lock of the mutex, store the previous IPL
+	 * for exit.
+	 */
+1:
+	INT_L	ta2, CPU_INFO_MTX_COUNT(t2)
+	nop
+	INT_ADDU ta3, ta2, -1
+	INT_S	ta3, CPU_INFO_MTX_COUNT(t2)
+
+	bnez	ta2, 2f
+	 nop
+	INT_S	v0, CPU_INFO_MTX_OLDSPL(t2)	/* returned by splraise */
+2:
+#if defined(DIAGNOSTIC)
+	INT_L	t3, MTX_LOCK(t0)
+	li	t1, 1
+	bnez	t3, 3f
+	 nop
+	j	ra
+	 INT_S	t1, MTX_LOCK(t0)
+3:
+	j	_C_LABEL(mutex_spin_retry)
+	 nop
+#else	/* DIAGNOSTIC */
+	j	ra
+	 nop
+#endif	/* DIAGNOSTIC */
+END(ras_mutex_spin_enter)
+
+/*
+ * void	mutex_spin_exit(kmutex_t *mtx);
+ */
+LEAF(ras_mutex_spin_exit)
+	PTR_L	t2, L_CPU(MIPS_CURLWP)
+	nop
+#if defined(DIAGNOSTIC)
+	INT_L	t0, MTX_LOCK(a0)
+	nop
+	beqz	t0, 2f
+	 nop
+	INT_S	zero, MTX_LOCK(a0)
+#endif
+
+	/*
+	 * We need to grab this before the mutex count is incremented
+	 * because if we get an interrupt, it may see the count as zero
+	 * and overwrite the oldspl value with a bogus value.
+	 */
+#ifdef PARANOIA
+	INT_L	a2, MTX_IPL(a0)
+#endif
+	INT_L	a0, CPU_INFO_MTX_OLDSPL(t2)
+
+	/*
+	 * Increment the mutex count
+	 */
+	INT_L	t0, CPU_INFO_MTX_COUNT(t2)
+	nop
+	INT_ADDU t0, t0, 1
+	INT_S	t0, CPU_INFO_MTX_COUNT(t2)
+
+	/*
+	 * If the IPL doesn't change, nothing to do
+	 */
+	INT_L	a1, CPU_INFO_CPL(t2)
+	nop
+
+#ifdef PARANOIA
+	sltu	v0, a1, a2		# v0 = cpl < mtx_ipl
+	sltu	v1, a1, a0		# v1 = cpl < oldspl
+	sll	v0, 1
+	or	v0, v1
+12:	bnez	v0, 12b			# loop forever if either is true
+	 nop
+#endif /* PARANOIA */
+
+	beq	a0, a1, 1f		# if oldspl == cpl
+	 nop				#   no reason to drop ipl
+
+	bltz	t0, 1f			# there are still holders
+	 nop				# so don't drop IPL
+
+	/*
+	 * Mutex count is zero so we need to restore the old IPL
+	 */
+#ifdef PARANOIA
+	sltiu	v0, a0, IPL_HIGH+1
+13:	beqz	v0, 13b			# loop forever if ipl > IPL_HIGH
+	 nop
+#endif
+	j	 _C_LABEL(splx)
+	 nop
+1:
+	j	ra
+	 nop
+#if defined(DIAGNOSTIC)
+2:
+	j	_C_LABEL(mutex_vector_exit)
+	 nop
+#endif
+END(ras_mutex_spin_exit)
+#endif	/* !LOCKDEBUG */
+
+	.data
+EXPORT(mips_locore_atomicvec)
+	PTR_WORD 	ras_atomic_cas_uint
+	PTR_WORD 	ras_atomic_cas_ulong
+	PTR_WORD	ras_ucas_uint
+	PTR_WORD	ras_ucas_ulong
+#ifdef LOCKDEBUG
+	PTR_WORD	mutex_enter
+	PTR_WORD	mutex_exit
+	PTR_WORD	mutex_spin_enter
+	PTR_WORD	mutex_spin_exit
+#else
+	PTR_WORD	ras_mutex_enter
+	PTR_WORD	ras_mutex_exit
+	PTR_WORD	ras_mutex_spin_enter
+	PTR_WORD	ras_mutex_spin_exit
+#endif	/* !LOCKDEBUG */
Index: /trunk/src/sys/arch/mips/mips/locore.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/locore.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/locore.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: locore.S,v 1.167.38.18 2010/05/16 05:00:12 matt Exp $	*/
+/*	$NetBSD: locore.S,v 1.167.38.23 2011/04/29 08:26:26 matt Exp $	*/
 
 /*
@@ -58,4 +58,5 @@
 
 #include <sys/cdefs.h>
+#include <sys/errno.h>
 
 #include <machine/param.h>
@@ -67,4 +68,10 @@
 
 /* kernel entry point */
+
+#if defined(MIPS1) || defined(MIPS2)
+#define	NOP_L		nop
+#else
+#define	NOP_L		/* nothing */
+#endif
 
 	.set	noreorder
@@ -104,5 +111,5 @@
 #ifdef NOFPU /* No FPU; avoid touching FPU registers */
 #ifdef _LP64
-	li	t0, MIPS_SR_KX			# turn on XKSEG and XKPHYS
+	li	t0, MIPS_SR_KX | MIPS_SR_UX	# turn on XKSEG and XKPHYS
 #else
 	li	t0, 0				# Disable interrupts and
@@ -127,10 +134,6 @@
 	COP0_HAZARD_FPUENABLE
 #endif
-	nop
-	nop
 	mfc0	t0, MIPS_COP_0_PRID		# read product revision ID
-	nop					# XXX r4000 pipeline:
-	nop					# wait for new SR
-	nop					# to be effective
+	COP0_SYNC
 	nop
 #ifdef NOFPU /* No FPU; avoid touching FPU registers */
@@ -143,7 +146,8 @@
 	PTR_LA	MIPS_CURLWP, _C_LABEL(lwp0)	# set curlwp
 	jal	_C_LABEL(mach_init)		# mach_init(a0, a1, a2, a3)
-	nop
+	 nop
 
-	PTR_L	sp, L_ADDR(MIPS_CURLWP)		# switch to lwp0 stack
+	# XXXuvm_lwp_getuarea
+	PTR_L	sp, L_PCB(MIPS_CURLWP)		# switch to lwp0 stack
 	nop
 	PTR_ADDU sp, USPACE - TF_SIZ - CALLFRAME_SIZ
Index: /trunk/src/sys/arch/mips/mips/locore_funcs.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/locore_funcs.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/locore_funcs.S	(revision 152)
@@ -58,4 +58,5 @@
 
 #include <sys/cdefs.h>
+#include <sys/errno.h>
 
 #include <machine/param.h>
@@ -65,4 +66,11 @@
 
 #include "assym.h"
+
+#if defined(MIPS1) || defined(MIPS2)
+#define NOP_L		nop
+#else
+#define NOP_L		/* nothing */
+#endif
+
 
 /* locore misc functions */
@@ -102,22 +110,22 @@
 	beq	a0, zero, 1f
 	 nop
-	PTR_L	a2, L_ADDR(a0)			# a2 = l->l_addr
+	PTR_L	a2, L_PCB(a0)			# a2 = l->l_addr
 	mfc0	t0, MIPS_COP_0_STATUS
 	REG_PROLOGUE
-	REG_S	s0, U_PCB_CONTEXT+SF_REG_S0(a2)
-	REG_S	s1, U_PCB_CONTEXT+SF_REG_S1(a2)
-	REG_S	s2, U_PCB_CONTEXT+SF_REG_S2(a2)
-	REG_S	s3, U_PCB_CONTEXT+SF_REG_S3(a2)
-	REG_S	s4, U_PCB_CONTEXT+SF_REG_S4(a2)
-	REG_S	s5, U_PCB_CONTEXT+SF_REG_S5(a2)
-	REG_S	s6, U_PCB_CONTEXT+SF_REG_S6(a2)
-	REG_S	s7, U_PCB_CONTEXT+SF_REG_S7(a2)
-	REG_S	t8, U_PCB_CONTEXT+SF_REG_T8(a2)
-	REG_S	sp, U_PCB_CONTEXT+SF_REG_SP(a2)
-	REG_S	s8, U_PCB_CONTEXT+SF_REG_S8(a2)
-	REG_S	ra, U_PCB_CONTEXT+SF_REG_RA(a2)
-	REG_S	t0, U_PCB_CONTEXT+SF_REG_SR(a2)
+	REG_S	s0, PCB_CONTEXT+SF_REG_S0(a2)
+	REG_S	s1, PCB_CONTEXT+SF_REG_S1(a2)
+	REG_S	s2, PCB_CONTEXT+SF_REG_S2(a2)
+	REG_S	s3, PCB_CONTEXT+SF_REG_S3(a2)
+	REG_S	s4, PCB_CONTEXT+SF_REG_S4(a2)
+	REG_S	s5, PCB_CONTEXT+SF_REG_S5(a2)
+	REG_S	s6, PCB_CONTEXT+SF_REG_S6(a2)
+	REG_S	s7, PCB_CONTEXT+SF_REG_S7(a2)
+	#REG_S	t8, PCB_CONTEXT+SF_REG_T8(a2)  # no reason to save MIPS_CURLWP
+	REG_S	sp, PCB_CONTEXT+SF_REG_SP(a2)
+	REG_S	s8, PCB_CONTEXT+SF_REG_S8(a2)
+	REG_S	ra, PCB_CONTEXT+SF_REG_RA(a2)
+	REG_S	t0, PCB_CONTEXT+SF_REG_SR(a2)
 #if defined(__mips_n32) || defined(__mips_n64)
-	REG_S	gp, U_PCB_CONTEXT+SF_REG_GP(a2)
+	REG_S	gp, PCB_CONTEXT+SF_REG_GP(a2)
 #endif
 	REG_EPILOGUE
@@ -127,6 +135,5 @@
 	 * Verify interrupt configuration matches IPL_SCHED
 	 */
-	PTR_L	t9, _C_LABEL(mips_splsw) + SPLSW_SPLCHECK
-	jalr	t9
+	jal	_C_LABEL(splcheck)
 	 nop
 #endif /* PARANOIA */
@@ -143,6 +150,4 @@
  * Switch to new context.
  */
-	.globl	_C_LABEL(__cpu_switchto_fixup)
-_C_LABEL(__cpu_switchto_fixup):
 	jal	_C_LABEL(mips_cpu_switch_resume)
 	 move	a0, MIPS_CURLWP
@@ -154,19 +159,20 @@
 	/* Check for restartable atomic sequences (RAS) */
 	PTR_L	a0, L_PROC(MIPS_CURLWP)		# argument to ras_lookup
-	PTR_L	s5, L_ADDR(MIPS_CURLWP)
+	PTR_L	s5, L_PCB(MIPS_CURLWP)
 	PTR_L	v1, P_RASLIST(a0)		# get raslist
+	NOP_L
 	beqz	v1, 1f				#   skip call if empty
 	 nop
 	jal	_C_LABEL(ras_lookup)		# ras_lookup(p, pc)
-	 PTR_L	a1, (USPACE - TF_SIZ + TF_REG_EPC)(s5)
+	 PTR_L	a1, (USPACE - TF_SIZ - CALLFRAME_SIZ + TF_REG_EPC)(s5)
 	PTR_ADDU v1, v0, 1
 	beqz	v1, 1f				# branch if v0 + 1 == 0
 	 nop
-	PTR_S	v0, (USPACE - TF_SIZ + TF_REG_EPC)(s5)
+	PTR_S	v0, (USPACE - TF_SIZ - CALLFRAME_SIZ + TF_REG_EPC)(s5)
 1:
 	/* New context is now active */
-	move	v0, s6				# Save return value
-	REG_PROLOGUE
-	REG_L	t0, U_PCB_CONTEXT+SF_REG_SR(s5)
+	move	v0, s6				# Save return value (old lwp)
+	REG_PROLOGUE
+	REG_L	t0, PCB_CONTEXT+SF_REG_SR(s5)
 #ifdef PARANOID_LOOP
 	and	t1, t0, MIPS_SR_INT_IE
@@ -176,19 +182,19 @@
 	DYNAMIC_STATUS_MASK(t0,ra)
 	move	a0, s5
-	REG_L	ra, U_PCB_CONTEXT+SF_REG_RA(a0)
-	REG_L	s0, U_PCB_CONTEXT+SF_REG_S0(a0)
-	REG_L	s1, U_PCB_CONTEXT+SF_REG_S1(a0)
-	REG_L	s2, U_PCB_CONTEXT+SF_REG_S2(a0)
-	REG_L	s3, U_PCB_CONTEXT+SF_REG_S3(a0)
-	REG_L	s4, U_PCB_CONTEXT+SF_REG_S4(a0)
-	REG_L	s5, U_PCB_CONTEXT+SF_REG_S5(a0)
-	REG_L	s6, U_PCB_CONTEXT+SF_REG_S6(a0)
-	REG_L	s7, U_PCB_CONTEXT+SF_REG_S7(a0)
-	REG_L	t8, U_PCB_CONTEXT+SF_REG_T8(a0)
+	REG_L	ra, PCB_CONTEXT+SF_REG_RA(a0)
+	REG_L	s0, PCB_CONTEXT+SF_REG_S0(a0)
+	REG_L	s1, PCB_CONTEXT+SF_REG_S1(a0)
+	REG_L	s2, PCB_CONTEXT+SF_REG_S2(a0)
+	REG_L	s3, PCB_CONTEXT+SF_REG_S3(a0)
+	REG_L	s4, PCB_CONTEXT+SF_REG_S4(a0)
+	REG_L	s5, PCB_CONTEXT+SF_REG_S5(a0)
+	REG_L	s6, PCB_CONTEXT+SF_REG_S6(a0)
+	REG_L	s7, PCB_CONTEXT+SF_REG_S7(a0)
+#	REG_L	t8, PCB_CONTEXT+SF_REG_T8(a0)	# no reason to load MIPS_CURLWP
 #if defined(__mips_n32) || defined(__mips_n64)
-	REG_L	gp, U_PCB_CONTEXT+SF_REG_GP(a0)
-#endif
-	REG_L	sp, U_PCB_CONTEXT+SF_REG_SP(a0)
-	REG_L	s8, U_PCB_CONTEXT+SF_REG_S8(a0)
+	REG_L	gp, PCB_CONTEXT+SF_REG_GP(a0)
+#endif
+	REG_L	sp, PCB_CONTEXT+SF_REG_SP(a0)
+	REG_L	s8, PCB_CONTEXT+SF_REG_S8(a0)
 	REG_EPILOGUE
 	mtc0	t0, MIPS_COP_0_STATUS
@@ -198,10 +204,9 @@
 	 * Verify interrupt configuration still matches IPL_SCHED
 	 */
-	PTR_L	t9, _C_LABEL(mips_splsw) + SPLSW_SPLCHECK
-	j	t9
+	j	_C_LABEL(splcheck)
+	 nop
 #else
-	j	ra
+	JR_HB_RA
 #endif /* PARANOIA */
-	nop
 END(cpu_switchto)
 
@@ -221,9 +226,12 @@
 #endif /* PARANOIA */
 	PTR_L	t0, L_CPU(MIPS_CURLWP)
+	NOP_L
 	INT_L	t1, CPU_INFO_MTX_COUNT(t0)
+	NOP_L
 	INT_ADDU t1, 1
 	INT_S	t1, CPU_INFO_MTX_COUNT(t0)
 	REG_L	ra, CALLFRAME_RA(sp)
 	REG_L	v0, CALLFRAME_S0(sp)		# get softint lwp
+	NOP_L
 	PTR_S	zero, L_CTXSWITCH(v0)		# clear l_ctxswtch
 #if IPL_SCHED != IPL_HIGH
@@ -244,5 +252,5 @@
 	REG_S	ra, CALLFRAME_RA(sp)		# save return address
 	.mask	0x80000000, -4
-	PTR_L	t0, L_ADDR(MIPS_CURLWP)		# t0 = curlwp->l_addr
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# t0 = curlwp->l_addr
 
 	/*
@@ -258,19 +266,19 @@
 	PTR_LA	t2, softint_cleanup		# if softint blocks, return here
 	REG_PROLOGUE
-	REG_S	s0, U_PCB_CONTEXT+SF_REG_S0(t0)
-	REG_S	s1, U_PCB_CONTEXT+SF_REG_S1(t0)
-	REG_S	s2, U_PCB_CONTEXT+SF_REG_S2(t0)
-	REG_S	s3, U_PCB_CONTEXT+SF_REG_S3(t0)
-	REG_S	s4, U_PCB_CONTEXT+SF_REG_S4(t0)
-	REG_S	s5, U_PCB_CONTEXT+SF_REG_S5(t0)
-	REG_S	s6, U_PCB_CONTEXT+SF_REG_S6(t0)
-	REG_S	s7, U_PCB_CONTEXT+SF_REG_S7(t0)
-	REG_S	t8, U_PCB_CONTEXT+SF_REG_T8(t0) # MIPS_CURLWP
-	REG_S	sp, U_PCB_CONTEXT+SF_REG_SP(t0)
-	REG_S	s8, U_PCB_CONTEXT+SF_REG_S8(t0)
-	REG_S	t2, U_PCB_CONTEXT+SF_REG_RA(t0)
-	REG_S	t1, U_PCB_CONTEXT+SF_REG_SR(t0)
+	REG_S	s0, PCB_CONTEXT+SF_REG_S0(t0)
+	REG_S	s1, PCB_CONTEXT+SF_REG_S1(t0)
+	REG_S	s2, PCB_CONTEXT+SF_REG_S2(t0)
+	REG_S	s3, PCB_CONTEXT+SF_REG_S3(t0)
+	REG_S	s4, PCB_CONTEXT+SF_REG_S4(t0)
+	REG_S	s5, PCB_CONTEXT+SF_REG_S5(t0)
+	REG_S	s6, PCB_CONTEXT+SF_REG_S6(t0)
+	REG_S	s7, PCB_CONTEXT+SF_REG_S7(t0)
+	#REG_S	t8, PCB_CONTEXT+SF_REG_T8(t0) # no reason to save MIPS_CURLWP
+	REG_S	sp, PCB_CONTEXT+SF_REG_SP(t0)
+	REG_S	s8, PCB_CONTEXT+SF_REG_S8(t0)
+	REG_S	t2, PCB_CONTEXT+SF_REG_RA(t0)
+	REG_S	t1, PCB_CONTEXT+SF_REG_SR(t0)
 #if defined(__mips_n32) || defined(__mips_n64)
-	REG_S	gp, U_PCB_CONTEXT+SF_REG_GP(t0)
+	REG_S	gp, PCB_CONTEXT+SF_REG_GP(t0)
 #endif
 	REG_EPILOGUE
@@ -292,5 +300,5 @@
 	move	s3, t0					# remember curpcb
 
-	PTR_L	t2, L_ADDR(MIPS_CURLWP)
+	PTR_L	t2, L_PCB(MIPS_CURLWP)
 	move	a0, s0					# wants the pinned lwp
 	jal	_C_LABEL(softint_dispatch)
@@ -307,8 +315,8 @@
 
 	REG_PROLOGUE
-	REG_L	s0, U_PCB_CONTEXT+SF_REG_S0(s3)		# restore the saved
-	REG_L	s1, U_PCB_CONTEXT+SF_REG_S1(s3)		#    registers that we
-	REG_L	s2, U_PCB_CONTEXT+SF_REG_S2(s3)		#    used
-	REG_L	s3, U_PCB_CONTEXT+SF_REG_S3(s3)
+	REG_L	s0, PCB_CONTEXT+SF_REG_S0(s3)		# restore the saved
+	REG_L	s1, PCB_CONTEXT+SF_REG_S1(s3)		#    registers that we
+	REG_L	s2, PCB_CONTEXT+SF_REG_S2(s3)		#    used
+	REG_L	s3, PCB_CONTEXT+SF_REG_S3(s3)
 	REG_EPILOGUE
 
@@ -322,5 +330,28 @@
 
 /*
- * savectx(struct user *up)
+ * int lwp_oncpu(lwp_t *);
+ */
+LEAF(lwp_oncpu)
+	PTR_L	t0, L_PCB(MIPS_CURLWP)		# get curpcb
+	li	v0, EFAULT			# assume failure
+	PTR_LA	t1, 1f				# load addr of cleanup
+	PTR_S	t1, PCB_ONFAULT(t0)		# save onfault handler
+	PTR_L	t2, L_CPU(a0)			# grab cpu of supplied lwp
+	NOP_L					# load delay
+	PTR_L	t3, CPU_INFO_CURLWP(t2)		# grab curlwp of that cpu
+	li	v0, ESRCH			# assume the lwp isn't curlwp
+	bne	a0, t3, 1f			# branch if true (not equal)
+	 nop
+	PTR_S	t2, 0(a1)			# return the cpu_info
+	li	v0, 0				# load success
+1:
+	PTR_S	zero, PCB_ONFAULT(t0)		# reset fault handler
+	j	ra				# and return.
+	 nop
+END(lwp_oncpu)
+	
+
+/*
+ * savectx(struct pcb *)
  */
 LEAF(savectx)
@@ -332,20 +363,20 @@
 #endif /* PARANOIA */
 	REG_PROLOGUE
-	REG_S	s0, U_PCB_CONTEXT+SF_REG_S0(a0)
-	REG_S	s1, U_PCB_CONTEXT+SF_REG_S1(a0)
-	REG_S	s2, U_PCB_CONTEXT+SF_REG_S2(a0)
-	REG_S	s3, U_PCB_CONTEXT+SF_REG_S3(a0)
-	REG_S	s4, U_PCB_CONTEXT+SF_REG_S4(a0)
-	REG_S	s5, U_PCB_CONTEXT+SF_REG_S5(a0)
-	REG_S	s6, U_PCB_CONTEXT+SF_REG_S6(a0)
-	REG_S	s7, U_PCB_CONTEXT+SF_REG_S7(a0)
-	REG_S	t8, U_PCB_CONTEXT+SF_REG_T8(a0)
+	REG_S	s0, PCB_CONTEXT+SF_REG_S0(a0)
+	REG_S	s1, PCB_CONTEXT+SF_REG_S1(a0)
+	REG_S	s2, PCB_CONTEXT+SF_REG_S2(a0)
+	REG_S	s3, PCB_CONTEXT+SF_REG_S3(a0)
+	REG_S	s4, PCB_CONTEXT+SF_REG_S4(a0)
+	REG_S	s5, PCB_CONTEXT+SF_REG_S5(a0)
+	REG_S	s6, PCB_CONTEXT+SF_REG_S6(a0)
+	REG_S	s7, PCB_CONTEXT+SF_REG_S7(a0)
+	REG_S	t8, PCB_CONTEXT+SF_REG_T8(a0)	# MIPS_CURLWP
 #if defined(__mips_n32) || defined(__mips_n64)
-	REG_S	gp, U_PCB_CONTEXT+SF_REG_GP(a0)
-#endif
-	REG_S	sp, U_PCB_CONTEXT+SF_REG_SP(a0)
-	REG_S	s8, U_PCB_CONTEXT+SF_REG_S8(a0)
-	REG_S	ra, U_PCB_CONTEXT+SF_REG_RA(a0)
-	REG_S	v0, U_PCB_CONTEXT+SF_REG_SR(a0)
+	REG_S	gp, PCB_CONTEXT+SF_REG_GP(a0)
+#endif
+	REG_S	sp, PCB_CONTEXT+SF_REG_SP(a0)
+	REG_S	s8, PCB_CONTEXT+SF_REG_S8(a0)
+	REG_S	ra, PCB_CONTEXT+SF_REG_RA(a0)
+	REG_S	v0, PCB_CONTEXT+SF_REG_SR(a0)
 	REG_EPILOGUE
 	j	ra
@@ -369,5 +400,5 @@
 	REG_S	s6, SF_REG_S6(a0)
 	REG_S	s7, SF_REG_S7(a0)
-	REG_S	t8, SF_REG_T8(a0)
+	#REG_S	t8, SF_REG_T8(a0)	# no reason to save MIPS_CURLWP
 #if defined(__mips_n32) || defined(__mips_n64)
 	REG_S	gp, SF_REG_GP(a0)
@@ -395,5 +426,5 @@
 	REG_L	s6, SF_REG_S6(a0)
 	REG_L	s7, SF_REG_S7(a0)
-	REG_L	t8, SF_REG_T8(a0)
+	#REG_L	t8, SF_REG_T8(a0)		# no reason to load MIPS_CURLWP
 #if defined(__mips_n32) || defined(__mips_n64)
 	REG_L	gp, SF_REG_GP(a0)
@@ -405,10 +436,10 @@
 	COP0_SYNC
 	j	ra
-	li	v0, 1
+	 li	v0, 1
 END(longjmp)
 #endif
 
 /*
- * u_int32_t mips_cp0_cause_read(void)
+ * uint32_t mips_cp0_cause_read(void)
  *
  *	Return the current value of the CP0 Cause register.
@@ -420,9 +451,9 @@
 	mfc0	v0, MIPS_COP_0_CAUSE
 	j	ra
-	nop
+	 nop
 END(mips_cp0_cause_read)
 
 /*
- * void mips_cp0_cause_write(u_int32_t)
+ * void mips_cp0_cause_write(uint32_t)
  *
  *	Set the value of the CP0 Cause register.
@@ -430,14 +461,10 @@
 LEAF(mips_cp0_cause_write)
 	mtc0	a0, MIPS_COP_0_CAUSE
-	COP0_SYNC
-	nop
-	nop
-	j	ra
-	nop
+	JR_HB_RA
 END(mips_cp0_cause_write)
 
 
 /*
- * u_int32_t mips_cp0_status_read(void)
+ * uint32_t mips_cp0_status_read(void)
  *
  *	Return the current value of the CP0 Status register.
@@ -450,5 +477,5 @@
 
 /*
- * void mips_cp0_status_write(u_int32_t)
+ * void mips_cp0_status_write(uint32_t)
  *
  *	Set the value of the CP0 Status register.
@@ -460,9 +487,5 @@
 LEAF(mips_cp0_status_write)
 	mtc0	a0, MIPS_COP_0_STATUS
-	COP0_SYNC
-	nop
-	nop
-	j	ra
-	nop
+	JR_HB_RA
 END(mips_cp0_status_write)
 
@@ -470,21 +493,13 @@
 /*----------------------------------------------------------------------------
  *
- * MachFPInterrupt --
- * MachFPTrap --
+ * mips_fpu_intr --
+ * mips_fpu_trap --
  *
  *	Handle a floating point interrupt (r3k) or trap (r4k).
  *	the handlers are indentical, only the reporting mechanisms differ.
  *
- *	MachFPInterrupt(status, cause, pc, frame)
- *		unsigned status;
- *		unsigned cause;
- *		unsigned pc;
- *		int *frame;
- *
- *	MachFPTrap(status, cause, pc, frame)
- *		unsigned status;
- *		unsigned cause;
- *		unsigned pc;
- *		int *frame;
+ *	mips_fpu_intr(vaddr_t pc, struct trapframe *tf)
+ *
+ *	mips_fpu_trap(vaddr_t pc, struct trapframe *tf)
  *
  * Results:
@@ -496,6 +511,6 @@
  *----------------------------------------------------------------------------
  */
-NESTED(MachFPInterrupt, CALLFRAME_SIZ, ra)
-XNESTED(MachFPTrap)
+NESTED(mips_fpu_intr, CALLFRAME_SIZ, ra)
+XNESTED(mips_fpu_trap)
 	.mask	0x80000000, -4
 	PTR_SUBU	sp, CALLFRAME_SIZ
@@ -506,4 +521,8 @@
 	COP0_HAZARD_FPUENABLE
 
+	REG_PROLOGUE
+	REG_L           a2, TF_REG_CAUSE(a1)
+	REG_EPILOGUE
+
 	cfc1		t0, MIPS_FPU_CSR	# stall til FP done
 	cfc1		t0, MIPS_FPU_CSR	# now get status
@@ -511,29 +530,17 @@
 	sll		t2, t0, (31 - 17)	# unimplemented operation?
 	bgez		t2, 3f			# no, normal trap
-	nop
-/*
- * We got an unimplemented operation trap so
- * We received an unimplemented operation trap.
+	 nop
+/*
+ * We received an unimplemented operation trap so
+ * fetch the instruction and emulate the instruction.
  *
  * We check whether it's an unimplemented FP instruction here rather
- * than invoking MachEmulateInst(), since it is faster.
- *
- * fetch the instruction and emulate the instruction.
- */
-	bgez		a1, 1f			# Check the branch delay bit.
-	nop
-/*
- * The instruction is in the branch delay slot.
- */
-	b		2f
-	lw		a0, 4(a2)		# a0 = coproc instruction
-/*
- * This is not in the branch delay slot so calculate the resulting
- * PC (epc + 4) into v0 and continue to MachEmulateFP().
- */
-1:
-	lw		a0, 4(a2)		# a0 = coproc instruction
-2:
-	move		a2, a1
+ * than invoking mips_emul_inst(), since it is faster.
+ */
+	srl		v1, a2, 31		# move branch delay bit to LSB
+	sll		v1, 2			# shift it left by 2 (mult by 4)
+	PTR_ADDU	a0, v1			# add to a0
+	INT_L		a0, 0(a0)		# a0 = coproc instruction
+	NOP_L					# load delay
 
 /*
@@ -541,24 +548,27 @@
  * instruction.
  */
-	srl		t0, a0, MIPS_OPCODE_SHIFT
-	beq		t0, MIPS_OPCODE_C1, 4f
-	nop
-
-/*
- * Send a floating point exception signal to the current LWP.
- */
-	li		t0, 0xFFFFFF00
-	and		a1, a1, t0
-	ori		a1, a1, T_RES_INST << MIPS_CR_EXC_CODE_SHIFT
-	REG_PROLOGUE
-	REG_S		a1, TF_REG_CAUSE(a3)
-	REG_EPILOGUE
+	srl		t2, a0, MIPS_OPCODE_SHIFT
+	beq		t2, MIPS_OPCODE_C1, 4f
+	 nop
+
+/*
+ * Send an ILL signal to the current LWP if the instruction can't be emulated.
+ */
+	srl		a2, 8
+	sll		a2, 8
+	ori		a2, T_RES_INST << MIPS_CR_EXC_CODE_SHIFT
+	REG_PROLOGUE
+	REG_S		a2, TF_REG_CAUSE(a1)
+	REG_EPILOGUE
+
+	and		t2, t0, ~MIPS_FPU_EXCEPTION_BITS
+	ctc1		t2, MIPS_FPU_CSR
 
 	move		a1, a0				# code = instruction
 	jal		_C_LABEL(mips_fpuillinst)
-	move		a0, MIPS_CURLWP			# get current LWP
+	 move		a0, MIPS_CURLWP			# get current LWP
 
 	b		FPReturn
-	nop
+	 nop
 
 /*
@@ -568,5 +578,5 @@
 3:
 	REG_PROLOGUE
-	REG_S		a1, TF_REG_CAUSE(a3)
+	REG_S		a2, TF_REG_CAUSE(a1)
 	REG_EPILOGUE
 
@@ -576,15 +586,16 @@
 	move		a1, t0			# FPU status
 	jal		_C_LABEL(mips_fpuexcept)
-	move		a0, MIPS_CURLWP		# get current LWP
+	 move		a0, MIPS_CURLWP		# get current LWP
 
 	b		FPReturn
-	nop
-
-/*
- * Finally, we can call MachEmulateFP() where a0 is the instruction to emulate.
+	 nop
+
+/*
+ * Finally, we can call
+ * mips_emul_fp(uint32_t insn, struct trapframe *tf, uint32_t cause).
  */
 4:
-	jal		_C_LABEL(MachEmulateFP)
-	move		a1, a3
+	jal		_C_LABEL(mips_emul_fp)
+	 nop
 
 /*
@@ -594,10 +605,10 @@
 	mfc0		t0, MIPS_COP_0_STATUS
 	REG_L		ra, CALLFRAME_RA(sp)
-	and		t0, t0, ~MIPS_SR_COP_1_BIT
+	and		t0, ~MIPS_SR_COP_1_BIT
 	mtc0		t0, MIPS_COP_0_STATUS
 	COP0_SYNC
 	j		ra
-	PTR_ADDU	sp, CALLFRAME_SIZ
-END(MachFPInterrupt)
+	 PTR_ADDU	sp, CALLFRAME_SIZ
+END(mips_fpu_intr)
 #endif /* !defined(NOFPU) || defined(FPEMUL) */
 
@@ -638,5 +649,5 @@
 /* We can always safely store a 64-bit zero on MIPS3,4,64 */
 	.set	push
-#if !defined(MIPS1) && !defined(MIPS32)
+#if (MIPS1 + MIPS32 + MIPS32R2) == 0
 	.set	mips3
 #endif
Index: /trunk/src/sys/arch/mips/mips/locore_mips1.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/locore_mips1.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/locore_mips1.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: locore_mips1.S,v 1.64.26.1.2.9 2010/02/23 20:33:48 matt Exp $	*/
+/*	$NetBSD: locore_mips1.S,v 1.64.26.1.2.13 2011/04/29 08:26:26 matt Exp $	*/
 
 /*
@@ -9,5 +9,5 @@
  *
  * Redistribution and use in source and binary forms, with or without
- * modification, are permited provided that the following conditions
+ * modification, are permitted provided that the following conditions
  * are met:
  * 1. Redistributions of source code must retain the above copyright
@@ -61,11 +61,26 @@
 #include "assym.h"
 
+#define	_SLLV		sllv
+
+#define	_SLL		sll
+#define	_SRL		srl
+#define	WIRED_SHIFT	2
+
+/*
+ * Use correct-sized m?c0/dm?c0 opcodes.
+ */
+#define	_MFC0	mfc0
+#define	_MTC0	mtc0
+
+
+#define MIPSX(name)	__CONCAT(mips1_,name)
+
 	.set	noreorder
 	.text
 
-EXPORT(mips1_exceptionentry_start)
-
-/*
- * mips1_utlb_miss
+EXPORT(MIPSX(exceptionentry_start))
+
+/*
+ * mipsN_utlb_miss
  *
  * A reference is made (in either kernel or user mode) to a page in
@@ -74,38 +89,41 @@
  * No pc relative jump instruction is allowed.
  */
-VECTOR(mips1_utlb_miss, unknown)
+VECTOR(MIPSX(utlb_miss), unknown)
 	.set	noat
-	mfc0	k0, MIPS_COP_0_BAD_VADDR	# get the virtual address
-	lw	k1, CPUVAR(PMAP_SEGBASE)	# get the current segment table
+	_MFC0	k0, MIPS_COP_0_BAD_VADDR	#00: k0=bad address
+	lui	k1, %hi(CPUVAR(PMAP_SEG0TAB))	#01: k1=hi of seg0tab
 	bltz	k0, 1f				# R3000 chip bug
-	srl	k0, k0, SEGSHIFT		# compute segment table index
-	sll	k0, k0, 2
-	addu	k1, k1, k0
-	mfc0	k0, MIPS_COP_0_BAD_VADDR	# get the virtual address
-	lw	k1, 0(k1)			# get pointer to segment map
-	srl	k0, k0, PGSHIFT - 2		# compute segment map index
-	and	k0, k0, (NPTEPG - 1) << 2
-	beq	k1, zero, 2f			# invalid segment map
-	addu	k1, k1, k0			# index into segment map
-	lw	k0, 0(k1)			# get page PTE
-	nop
-	beq	k0, zero, 2f			# dont load invalid entries
-	mtc0	k0, MIPS_COP_0_TLB_LOW
-	nop
-	tlbwr					# update TLB
+	 PTR_SRL k0, 1*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2)#03: k0=seg offset (almost)
+	PTR_L	k1, %lo(CPUVAR(PMAP_SEG0TAB))(k1) #04: k1=seg0tab 
+	andi	k0, (NBPG-(1<<PTR_SCALESHIFT))	#07: k0=seg offset (mask 0x3)
+	PTR_ADDU k1, k0				#08: k1=seg entry address
+	PTR_L	k1, 0(k1)			#09: k1=seg entry
+	_MFC0	k0, MIPS_COP_0_BAD_VADDR	#0a: k0=bad address (again)
+	beqz	k1, MIPSX(nopagetable)		#0b: ==0 -- no page table
+	 PTR_SRL k0, (PGSHIFT-2)		#0c: k0=VPN (aka va>>10)
+	andi	k0, (NBPG-4)			#0d: k0=page table offset
+	PTR_ADDU k1, k0				#0e: k1=pte address
+	INT_L	k0, 0(k1)			#0f: k0=lo0 pte
+	nop					#10: load delay
+	beqz	k0, MIPSX(invalidpte)		#11: dont load invalid entries
+	 nop					#12  branch delay
+	mtc0	k0, MIPS_COP_0_TLB_LOW		#13: lo0 is loaded
+	nop					#14: load delay
+	tlbwr					#15: update TLB
 1:
-	mfc0	k1, MIPS_COP_0_EXC_PC		# get return address
-	nop
-	j	k1
-	rfe
-2:
-	j	mips1_slowfault			# handle the rest
-	nop
+	_MFC0	k1, MIPS_COP_0_EXC_PC		#16: get return address
+	nop					#17: load delay
+	j	k1				#18: return from
+	 rfe					#19:    exception
+MIPSX(nopagetable):
+MIPSX(invalidpte):
+	j	MIPSX(slowfault)		#1a: handle the rest
+	 nop					#1b: branch delay
 	.set	at
-VECTOR_END(mips1_utlb_miss)
-
-
-/*
- * mips1_exception
+VECTOR_END(MIPSX(utlb_miss))
+
+
+/*
+ * mipsN_exception
  *
  * Handles any exceptions other than reset and UTLB miss.  This routine
@@ -113,51 +131,59 @@
  * instructions.  No pc relative jump instruction is allowed.
  */
-VECTOR(mips1_exception, unknown)
+	.org	MIPSX(utlb_miss) + 0x80
+VECTOR(MIPSX(exception), unknown)
 /*
  * Find out what mode we came from and jump to the proper handler.
  */
 	.set	noat
-	mfc0	k0, MIPS_COP_0_STATUS		# get the status register
-	mfc0	k1, MIPS_COP_0_CAUSE		# get the cause register
-	and	k0, k0, MIPS1_SR_KU_PREV	# test for user mode
-	sll	k0, k0, 4			# shift user bit for cause index
-	and	k1, k1, MIPS1_CR_EXC_CODE	# mask out the cause bits
-	or	k1, k1, k0			# change index to user table
-1:
-	la	k0, mips1_excpt_sw		# get base of the jump table
-	addu	k0, k0, k1			# get the address of the
+	mfc0	k0, MIPS_COP_0_STATUS		#00: get the status register
+	mfc0	k1, MIPS_COP_0_CAUSE		#01: get the cause register
+	and	k0, MIPS1_SR_KU_PREV		#02: test for user mode
+	sll	k0, 4				#03: shift user bit for cause index
+	and	k1, MIPS1_CR_EXC_CODE		#04: mask out the cause bits
+	or	k1, k0				#05: change index to user table
+	PTR_LA	k0, MIPSX(excpt_sw)		#06: get base of the jump table
+	PTR_ADDU k0, k1				#08: get the address of the
 						#  function entry.  Note that
 						#  the cause is already
 						#  shifted left by 2 bits so
-						#  we dont have to shift
-	lw	k0, 0(k0)			# get the function address
-	nop
-	lw	k1, CPUVAR(CURLWP)		# get the current lwp
-	j	k0				# jump to the function
-	nop
+						#  we dont have to shift.
+	PTR_L	k0, 0(k0)			#09: get the function address
+	nop					#0a: load delay
+	j	k0				#0b: jump to the function
+	 nop					#0c
+	nop					#0d
+	nop					#0e
+	nop					#0f
 	.set	at
-VECTOR_END(mips1_exception)
-
-
-/*
- * mips1_SlowFault
- *
- * UTLBMiss handler could not find out a TLB entry for the user process.
- * Dispatch a general case exception handler.
- */
-mips1_slowfault:
+VECTOR_END(MIPSX(exception))
+
+
+/*----------------------------------------------------------------------------
+ *
+ * mipsN_slowfault
+ *
+ * Alternate entry point into the mipsN_user_gen_exception or
+ * mipsN_kern_gen_exception, when the UTLB miss handler couldn't
+ * find a TLB entry.
+ *
+ * Find out what mode we came from and call the appropriate handler.
+ *
+ *----------------------------------------------------------------------------
+ */
+MIPSX(slowfault):
 	.set	noat
-	mfc0	k1, MIPS_COP_0_STATUS
-	la	k0, _C_LABEL(mips1_kern_gen_exception)
-	and	k1, k1, MIPS1_SR_KU_PREV
-	beq	k1, zero, 1f
-	nop
-	la	k0, _C_LABEL(mips1_user_gen_exception)
-1:	j	k0
-	nop
+	mfc0	k0, MIPS_COP_0_STATUS
+	nop
+	and	k0, MIPS1_SR_KU_PREV
+	bnez	k0, _C_LABEL(MIPSX(user_gen_exception))
+	 nop
 	.set	at
-
-/*
- * mips1_kern_gen_exception
+/*
+ * Fall through ...
+ */
+
+/*
+ * mipsN_kern_gen_exception
  *
  * Handle an exception during kernel mode.
@@ -165,19 +191,30 @@
  * call trap() to process the condition.
  *
- * trapframe is now pointed by 5th arg {
+ * trapframe is pointed to by the 5th arg and a dummy sixth argument is used
+ * to avoid alignment problems
+ * {
  *	register_t cf_args[4 + 1];
- *	register_t cf_pad;
+ *	register_t cf_pad;		(for 8 word alignment)
  *	register_t cf_sp;
  *	register_t cf_ra;
- *	mips_reg_t tf_regs[17];		- trapframe begins here
- * 	mips_reg_t tf_sr;		-
- * 	mips_reg_t tf_mullo;		-
- * 	mips_reg_t tf_mulhi;		-
- * 	register_t tf_epc;		- may be changed by trap() call
+ *	struct reg cf_tf;
  * };
  */
-NESTED_NOPROFILE(mips1_kern_gen_exception, KERNFRAME_SIZ, ra)
+NESTED_NOPROFILE(MIPSX(kern_gen_exception), KERNFRAME_SIZ, ra)
 	.set	noat
 	.mask	0x80000000, -4
+#ifdef PARANOIA
+	PTR_L	k0, L_PCB(MIPS_CURLWP)
+	nop
+	slt	k0, k0, sp		# k0 = L_PCB(MIPS_CURLWP) < sp
+1:	beqz	k0, 1b			# loop forever if false
+	 nop
+	PTR_L	k0, L_PCB(MIPS_CURLWP)
+	nop
+	PTR_ADDU k0, USPACE
+	slt	k0, sp, k0		# k0 = sp < L_PCB(MIPS_CURLWP) + USPACE
+2:	beqz	k0, 2b			# loop forever if false
+	 nop
+#endif /* PARANOIA
 /*
  * Save the relevant kernel registers onto the stack.
@@ -185,419 +222,778 @@
  * the compiler does it for us.
  */
-	subu	sp, sp, KERNFRAME_SIZ
-	sw	AT, TF_BASE+TF_REG_AST(sp)
-	sw	v0, TF_BASE+TF_REG_V0(sp)
-	sw	v1, TF_BASE+TF_REG_V1(sp)
+	PTR_SUBU sp, KERNFRAME_SIZ
+	REG_S	AT, TF_BASE+TF_REG_AST(sp)
+	REG_S	v0, TF_BASE+TF_REG_V0(sp)
+	REG_S	v1, TF_BASE+TF_REG_V1(sp)
 	mflo	v0
 	mfhi	v1
-	sw	a0, TF_BASE+TF_REG_A0(sp)
-	sw	a1, TF_BASE+TF_REG_A1(sp)
-	sw	a2, TF_BASE+TF_REG_A2(sp)
-	sw	a3, TF_BASE+TF_REG_A3(sp)
+	REG_S	a0, TF_BASE+TF_REG_A0(sp)
+	REG_S	a1, TF_BASE+TF_REG_A1(sp)
+	REG_S	a2, TF_BASE+TF_REG_A2(sp)
+	REG_S	a3, TF_BASE+TF_REG_A3(sp)
 	mfc0	a0, MIPS_COP_0_STATUS		# 1st arg is STATUS
-	sw	t0, TF_BASE+TF_REG_T0(sp)
-	sw	t1, TF_BASE+TF_REG_T1(sp)
-	sw	t2, TF_BASE+TF_REG_T2(sp)
-	sw	t3, TF_BASE+TF_REG_T3(sp)
+	REG_S	t0, TF_BASE+TF_REG_T0(sp)
+	REG_S	t1, TF_BASE+TF_REG_T1(sp)
+	REG_S	t2, TF_BASE+TF_REG_T2(sp)
+	REG_S	t3, TF_BASE+TF_REG_T3(sp)
 	mfc0	a1, MIPS_COP_0_CAUSE		# 2nd arg is CAUSE
-	sw	t4, TF_BASE+TF_REG_T4(sp)
-	sw	t5, TF_BASE+TF_REG_T5(sp)
-	sw	t6, TF_BASE+TF_REG_T6(sp)
-	sw	t7, TF_BASE+TF_REG_T7(sp)
-	mfc0	a2, MIPS_COP_0_BAD_VADDR	# 3rd arg is fault address
-	sw	t8, TF_BASE+TF_REG_T8(sp)
-	sw	t9, TF_BASE+TF_REG_T9(sp)
-	sw	ra, TF_BASE+TF_REG_RA(sp)
-	sw	a0, TF_BASE+TF_REG_SR(sp)
-	mfc0	a3, MIPS_COP_0_EXC_PC		# 4th arg is exception PC
-	sw	v0, TF_BASE+TF_REG_MULLO(sp)
-	sw	v1, TF_BASE+TF_REG_MULHI(sp)
-	sw	a3, TF_BASE+TF_REG_EPC(sp)
+	REG_S	ta0, TF_BASE+TF_REG_TA0(sp)
+	REG_S	ta1, TF_BASE+TF_REG_TA1(sp)
+	REG_S	ta2, TF_BASE+TF_REG_TA2(sp)
+	REG_S	ta3, TF_BASE+TF_REG_TA3(sp)
+	_MFC0	a2, MIPS_COP_0_BAD_VADDR	# 3rd arg is fault address
+	#REG_S	t8, TF_BASE+TF_REG_T8(sp)	# is MIPS_CURLWP
+	REG_S	t9, TF_BASE+TF_REG_T9(sp)
+	REG_S	ra, TF_BASE+TF_REG_RA(sp)
+	REG_S	a0, TF_BASE+TF_REG_SR(sp)
+	_MFC0	a3, MIPS_COP_0_EXC_PC		# 4th arg is exception PC
+	REG_S	v0, TF_BASE+TF_REG_MULLO(sp)
+	REG_S	v1, TF_BASE+TF_REG_MULHI(sp)
+	REG_S	a3, TF_BASE+TF_REG_EPC(sp)
+	REG_S	a1, TF_BASE+TF_REG_CAUSE(sp)
 #if defined(DDB) || defined(KGDB)
-	sw	s0, TF_BASE+TF_REG_S0(sp)
-	sw	s1, TF_BASE+TF_REG_S1(sp)
-	sw	s2, TF_BASE+TF_REG_S2(sp)
-	sw	s3, TF_BASE+TF_REG_S3(sp)
-	sw	s4, TF_BASE+TF_REG_S4(sp)
-	sw	s5, TF_BASE+TF_REG_S5(sp)
-	sw	s6, TF_BASE+TF_REG_S6(sp)
-	sw	s7, TF_BASE+TF_REG_S7(sp)
-	addu	v0, sp, KERNFRAME_SIZ
-	sw	v0, TF_BASE+TF_REG_SP(sp)
-	sw	s8, TF_BASE+TF_REG_S8(sp)
-	sw	gp, TF_BASE+TF_REG_GP(sp)
+	REG_S	s0, TF_BASE+TF_REG_S0(sp)
+	REG_S	s1, TF_BASE+TF_REG_S1(sp)
+	REG_S	s2, TF_BASE+TF_REG_S2(sp)
+	REG_S	s3, TF_BASE+TF_REG_S3(sp)
+	REG_S	s4, TF_BASE+TF_REG_S4(sp)
+	REG_S	s5, TF_BASE+TF_REG_S5(sp)
+	REG_S	s6, TF_BASE+TF_REG_S6(sp)
+	REG_S	s7, TF_BASE+TF_REG_S7(sp)
+	PTR_ADDU v0, sp, KERNFRAME_SIZ
+	REG_S	v0, TF_BASE+TF_REG_SP(sp)
+	REG_S	s8, TF_BASE+TF_REG_S8(sp)
+	REG_S	gp, TF_BASE+TF_REG_GP(sp)
 #endif
-	addu	v0, sp, TF_BASE
-	sw	v0, KERNFRAME_ARG5(sp)		# 5th arg is p. to trapframe
-/*
- * Call the trap handler.
- */
+	PTR_ADDU v0, sp, TF_BASE
+	REG_S	v0, KERNFRAME_ARG5(sp)		# 5th arg is p. to trapframe
+#ifdef PARANOIA
+	/*
+	 * save PPL in trapframe
+	 */
+	PTR_L	t0, L_CPU(MIPS_CURLWP)
+	nop
+	INT_L	t1, CPU_INFO_CPL(t0)		# get current priority level
+	nop
+	INT_S	t1, TF_BASE+TF_PPL(sp)		# save priority level
+#endif /* PARANOIA */
+
 #if defined(DDB) || defined(DEBUG) || defined(KGDB)
-	addu	v0, sp, KERNFRAME_SIZ
-	sw	v0, KERNFRAME_SP(sp)
+	PTR_ADDU v0, sp, KERNFRAME_SIZ
+	REG_S	v0, KERNFRAME_SP(sp)
 #endif
+
+#ifdef PARANOIA
+	/*
+	 * Verify our existing interrupt level.
+	 */
+	jal	_C_LABEL(splcheck)
+	 nop
+#endif /* PARANOIA */
+
+	/*
+	 * Call the trap handler.
+	 */
 	jal	_C_LABEL(trap)
-	sw	a3,	KERNFRAME_RA(sp)	# for debugging
-/*
- * Restore registers and return from the exception.
- */
-	lw	a0, TF_BASE+TF_REG_SR(sp)
-	lw	t0, TF_BASE+TF_REG_MULLO(sp)
-	lw	t1, TF_BASE+TF_REG_MULHI(sp)
-	mtc0	a0, MIPS_COP_0_STATUS
+	 REG_S	a3, KERNFRAME_RA(sp)		# for debugging
+
+	/*
+	 * Restore registers and return from the exception.
+	 */
+	REG_L	a0, TF_BASE+TF_REG_SR(sp)
+	nop
+	mtc0	a0, MIPS_COP_0_STATUS		# restore the SR, disable intrs
+
+	/*
+	 * Start of common kernel exception return code for both
+	 * mipxN_kern_gen_exception and mipsN_kern_intr.
+	 */
+MIPSX(kern_return):
+	REG_L	t0, TF_BASE+TF_REG_MULLO(sp)
+	REG_L	t1, TF_BASE+TF_REG_MULHI(sp)
+	REG_L	k1, TF_BASE+TF_REG_EPC(sp)	# might be changed inside trap
 	mtlo	t0
 	mthi	t1
-/*
- * Check for kernel restartable atomic sequences.
- */
-	lw	k1, TF_BASE+TF_REG_EPC(sp)	# restore exception PC
-	la	t0, _C_LABEL(_lock_ras_start)
+
+#ifdef PARANOIA
+	INT_L	t2, TF_BASE+TF_PPL(sp)		# get saved priority level
+	PTR_L	t0, L_CPU(MIPS_CURLWP)
+	nop
+	INT_L	t1, CPU_INFO_CPL(t0)		# get current priority level
+	nop
+11:	bne	t2, t1, 11b			# loop forever if unequal
+	 nop
+
+	/*
+	 * Verify our existing interrupt level.
+	 */
+	jal	_C_LABEL(splcheck)
+	 nop
+#endif /* PARANOIA */
+
+	/*
+	 * Check for kernel restartable atomic sequences.
+	 */
+	PTR_LA	t0, _C_LABEL(_lock_ras_start)
 	li	t1, -MIPS_LOCK_RAS_SIZE
-	and	t1, t1, k1
-	bne	t1, t0, 1f
-	nop
-	jal	_C_LABEL(_lock_ras)
+	and	t1, k1
+	bne	t1, t0, 1f			# exception PC in RAS area?
+	 nop
+	jal	_C_LABEL(_restart_lock_ras)	# fix the pc (k1)
+	 nop
 1:
-	lw	AT, TF_BASE+TF_REG_AST(sp)
-	lw	v0, TF_BASE+TF_REG_V0(sp)
-	lw	v1, TF_BASE+TF_REG_V1(sp)
-	lw	a0, TF_BASE+TF_REG_A0(sp)
-	lw	a1, TF_BASE+TF_REG_A1(sp)
-	lw	a2, TF_BASE+TF_REG_A2(sp)
-	lw	a3, TF_BASE+TF_REG_A3(sp)
-	lw	t0, TF_BASE+TF_REG_T0(sp)
-	lw	t1, TF_BASE+TF_REG_T1(sp)
-	lw	t2, TF_BASE+TF_REG_T2(sp)
-	lw	t3, TF_BASE+TF_REG_T3(sp)
-	lw	t4, TF_BASE+TF_REG_T4(sp)
-	lw	t5, TF_BASE+TF_REG_T5(sp)
-	lw	t6, TF_BASE+TF_REG_T6(sp)
-	lw	t7, TF_BASE+TF_REG_T7(sp)
-	lw	t8, TF_BASE+TF_REG_T8(sp)
-	lw	t9, TF_BASE+TF_REG_T9(sp)
-	lw	ra, TF_BASE+TF_REG_RA(sp)
-	addu	sp, sp, KERNFRAME_SIZ
+
+	REG_L	AT, TF_BASE+TF_REG_AST(sp)
+	REG_L	v0, TF_BASE+TF_REG_V0(sp)
+	REG_L	v1, TF_BASE+TF_REG_V1(sp)
+	REG_L	a0, TF_BASE+TF_REG_A0(sp)
+	REG_L	a1, TF_BASE+TF_REG_A1(sp)
+	REG_L	a2, TF_BASE+TF_REG_A2(sp)
+	REG_L	a3, TF_BASE+TF_REG_A3(sp)
+	REG_L	t0, TF_BASE+TF_REG_T0(sp)
+	REG_L	t1, TF_BASE+TF_REG_T1(sp)
+	REG_L	t2, TF_BASE+TF_REG_T2(sp)
+	REG_L	t3, TF_BASE+TF_REG_T3(sp)
+	REG_L	ta0, TF_BASE+TF_REG_TA0(sp)
+	REG_L	ta1, TF_BASE+TF_REG_TA1(sp)
+	REG_L	ta2, TF_BASE+TF_REG_TA2(sp)
+	REG_L	ta3, TF_BASE+TF_REG_TA3(sp)
+	#REG_L	t8, TF_BASE+TF_REG_T8(sp)	# is MIPS_CURLWP
+	REG_L	t9, TF_BASE+TF_REG_T9(sp)
+	REG_L	ra, TF_BASE+TF_REG_RA(sp)
 #ifdef DDBnotyet
-	lw	s0, TF_BASE+TF_REG_S0(sp)
-	lw	s1, TF_BASE+TF_REG_S1(sp)
-	lw	s2, TF_BASE+TF_REG_S2(sp)
-	lw	s3, TF_BASE+TF_REG_S3(sp)
-	lw	s4, TF_BASE+TF_REG_S4(sp)
-	lw	s5, TF_BASE+TF_REG_S5(sp)
-	lw	s6, TF_BASE+TF_REG_S6(sp)
-	lw	s7, TF_BASE+TF_REG_S7(sp)
-	lw	sp, TF_BASE+TF_REG_SP(sp)
-	lw	s8, TF_BASE+TF_REG_S8(sp)
-	lw	gp, TF_BASE+TF_REG_GP(sp)
+	REG_L	s0, TF_BASE+TF_REG_S0(sp)
+	REG_L	s1, TF_BASE+TF_REG_S1(sp)
+	REG_L	s2, TF_BASE+TF_REG_S2(sp)
+	REG_L	s3, TF_BASE+TF_REG_S3(sp)
+	REG_L	s4, TF_BASE+TF_REG_S4(sp)
+	REG_L	s5, TF_BASE+TF_REG_S5(sp)
+	REG_L	s6, TF_BASE+TF_REG_S6(sp)
+	REG_L	s7, TF_BASE+TF_REG_S7(sp)
+	REG_L	s8, TF_BASE+TF_REG_S8(sp)
 #endif
+	PTR_ADDU sp, KERNFRAME_SIZ
 	j	k1				# return to interrupted point
 	rfe
 	.set	at
-END(mips1_kern_gen_exception)
-
-/*
- * mips1_user_gen_exception
+END(MIPSX(kern_gen_exception))
+
+/*
+ * mipsN_kern_intr
+ *
+ * Handle an interrupt from kernel mode.
+ * Build kernframe on stack to hold interrupted kernel context, then
+ * call cpu_intr() to process it.
+ *
+ */
+NESTED_NOPROFILE(MIPSX(kern_intr), KERNFRAME_SIZ, ra)
+	.set	noat
+	.mask	0x80000000, -4
+#ifdef PARANOIA
+	PTR_L	k0, L_PCB(MIPS_CURLWP)
+	nop
+	slt	k0, k0, sp			# k0 = L_PCB(MIPS_CURLWP) < sp
+1:	beqz	k0, 1b				# loop forever if false
+	 nop
+	PTR_L	k0, L_PCB(MIPS_CURLWP)
+	nop
+	PTR_ADDU k0, USPACE
+	slt	k0, sp, k0			# k0 = sp < L_PCB(MIPS_CURLWP) + USPACE
+2:	beqz	k0, 2b				# loop forever if false
+	 nop
+	PTR_L	k0, L_CPU(MIPS_CURLWP)
+	nop
+	INT_L	k0, CPU_INFO_IDEPTH(k0)		# grab interrupt depth
+	nop
+	sltu	k0, k0, 3			# must be < 3
+3:	beqz	k0, 3b				# loop forever if false
+	 nop
+#endif
+	/*
+	 * Save the relevant kernel registers onto the stack.  We don't need
+	 * to save s0 - s8, sp, and gp because the compiler does it for us.
+	 * But we use s0-s2 so need to save them.
+	 */
+	PTR_SUBU sp, KERNFRAME_SIZ
+	REG_S	AT, TF_BASE+TF_REG_AST(sp)
+	REG_S	v0, TF_BASE+TF_REG_V0(sp)
+	REG_S	v1, TF_BASE+TF_REG_V1(sp)
+	mflo	v0
+	mfhi	v1
+	REG_S	a0, TF_BASE+TF_REG_A0(sp)
+	REG_S	a1, TF_BASE+TF_REG_A1(sp)
+	REG_S	a2, TF_BASE+TF_REG_A2(sp)
+	REG_S	a3, TF_BASE+TF_REG_A3(sp)
+	REG_S	t0, TF_BASE+TF_REG_T0(sp)
+	REG_S	t1, TF_BASE+TF_REG_T1(sp)
+	REG_S	t2, TF_BASE+TF_REG_T2(sp)
+	REG_S	t3, TF_BASE+TF_REG_T3(sp)
+	REG_S	ta0, TF_BASE+TF_REG_TA0(sp)
+	REG_S	ta1, TF_BASE+TF_REG_TA1(sp)
+	REG_S	ta2, TF_BASE+TF_REG_TA2(sp)
+	REG_S	ta3, TF_BASE+TF_REG_TA3(sp)
+	REG_S	s0, TF_BASE+TF_REG_S0(sp)	# used for saved ipl/idepth
+	REG_S	s1, TF_BASE+TF_REG_S1(sp)	# used for initial status
+	mfc0	s1, MIPS_COP_0_STATUS
+	REG_S	s2, TF_BASE+TF_REG_S2(sp)	# used for cpu_info
+	#REG_S	t8, TF_BASE+TF_REG_T8(sp)	# already contains MIPS_CURLWP
+	REG_S	t9, TF_BASE+TF_REG_T9(sp)
+	REG_S	ra, TF_BASE+TF_REG_RA(sp)
+	REG_S	s1, TF_BASE+TF_REG_SR(sp)
+	REG_S	v0, TF_BASE+TF_REG_MULLO(sp)
+	REG_S	v1, TF_BASE+TF_REG_MULHI(sp)
+/*
+ * Call the interrupt handler.
+ */
+	_MFC0	ta0, MIPS_COP_0_EXC_PC		# grab exception PC
+	PTR_L	s2, L_CPU(MIPS_CURLWP)		# delay slot
+	REG_S	ta0, TF_BASE+TF_REG_EPC(sp)	# and save it
+
+#if defined(DDB) || defined(DEBUG) || defined(KGDB)
+	REG_S	ta0, KERNFRAME_RA(sp)		# for debugging
+#endif
+
+#ifdef PARANOIA
+	INT_L	s0, CPU_INFO_CPL(s2)
+	nop					# load delay
+	INT_S	s0, TF_BASE+TF_PPL(sp)		# save priority level
+
+	/*
+	 * Verify the current interrupt level
+	 */
+	jal	_C_LABEL(splcheck)
+	 nop
+#endif /* PARANOIA */
+
+	/*
+	 * We first need to get to IPL_HIGH so that interrupts are masked.
+	 */
+	jal	_C_LABEL(splhigh_noprof)
+	 nop
+
+#ifdef PARANOIA
+1:	bne	s0, v0, 1b
+	 nop
+#endif /* PARANOIA */
+
+	sll	s0, v0, 8			# remember previous priority
+						# low 8 bits used for idepth
+
+#ifdef PARANOIA
+	/*
+	 * Interrupts at IPL_HIGH are not allowed.
+	 */
+	li	v1, IPL_HIGH
+	sltu	t0, v0, v1
+2:	beqz	t0, 2b
+	 nop
+#endif /* PARANOIA */
+
+	INT_L	t1, CPU_INFO_IDEPTH(s2)		# we need to inc. intr depth
+	nop					# load delay
+	or	s0, t1				#   save old interrupt depth
+	INT_ADDU t1, 1
+	INT_S	t1, CPU_INFO_IDEPTH(s2)		#   store new interrupt depth
+
+	/*
+	 * Now we can enable interrupts since no interrupts can be delivered
+	 */
+	mfc0	v1, MIPS_COP_0_STATUS
+	nop
+	or	v0, v1, MIPS_SR_INT_IE
+	mtc0	v0, MIPS_COP_0_STATUS		# write new status
+
+	/*
+	 * Now hard interrupts can be processed.
+	 */
+	move	a1, ta0				# 2nd arg is exception PC
+	move	a2, s1				# 3rd arg is status
+	jal	_C_LABEL(cpu_intr)		# cpu_intr(ppl, pc, status)
+	 srl	a0, s0, 8			# 1st arg is previous pri level
+
+	and	t1, s0, 0xff			# get previous interrupt depth
+	INT_S	t1, CPU_INFO_IDEPTH(s2)		# to it previous value
+
+#ifdef PARANOIA
+	mfc0	t0, MIPS_COP_0_STATUS		# verify INT_IE is still set
+	nop
+	and	t0, MIPS_SR_INT_IE
+3:	beqz	t0, 3b
+	 nop
+#endif /* PARANOIA */
+
+#ifdef __HAVE_FAST_SOFTINTS
+	and	a0, s1, MIPS_SOFT_INT_MASK	# were softints enabled?
+	beqz	a0, 4f				#   nope
+	 nop
+	mfc0	v0, MIPS_COP_0_CAUSE		# grab the pending softints
+	nop
+	and	a0, v0				# are softints pending
+	beqz	a0, 4f				#   nope
+	 nop
+
+	jal	_C_LABEL(softint_process)	# softint_process(pending)
+	 nop
+
+#ifdef __HAVE_PREEMPTION
+	srl	v1, s0, 8			# get saved priority level
+	bnez	v1, 4f				# branch if not at IPL_NONE
+	 nop
+	INT_L	t0, CPU_INFO_SOFTINTS(s2)	# get pending softints
+	nop
+	and	v0, t0, 1 << SOFTINT_KPREEMPT	# do we need a kernel preempt?
+	beqz	v0, 4f				#   nope
+	 nop
+	xor	t0, v0				# clear preempt bit
+	INT_S	t0, CPU_INFO_SOFTINTS(s2)	# and save it.
+	jal	_C_LABEL(kpreempt)		# kpreempt(pc)
+	 PTR_L	a0, TF_BASE+TF_REG_EPC(sp)
+#endif /* __HAVE_PREEMPTION */
+4:
+#endif /* __HAVE_FAST_SOFTINT */
+	/*
+	 * Interrupts handled, restore registers and return from the interrupt.
+	 * First, clear interrupt enable
+	 */
+	mtc0	s1, MIPS_COP_0_STATUS		# disable interrupts
+
+	srl	a0, s0, 8			# get previous priority level
+#ifdef PARANOIA
+	INT_L	t0, TF_BASE+TF_PPL(sp)		# get saved priority level
+	nop
+9:	bne	t0, a0, 9b			# should still match
+	 nop
+
+	li	t0, IPL_HIGH
+	sltu	v0, a0, t0
+8:	beqz	v0, 8b
+	 nop
+#endif /* PARANOIA */
+
+	/*
+	 * Restore IPL knowing interrupts are disabled
+	 */
+	jal	_C_LABEL(splx_noprof)		# splx(ppl)
+	 nop
+
+#ifdef PARANOIA
+	mfc0	v0, MIPS_COP_0_STATUS
+	nop
+	or	v0, MIPS_SR_INT_IE
+5:	bne	v0, s1, 5b
+	 nop
+#endif /* PARANOIA */
+
+	/*
+	 * Restore SR
+	 */
+	mtc0	s1, MIPS_COP_0_STATUS
+
+	/*
+	 * Restore s0-s2 and goto common kernel return code.
+	 */
+	REG_L	s0, TF_BASE+TF_REG_S0(sp)
+	REG_L	s1, TF_BASE+TF_REG_S1(sp)
+	b	MIPSX(kern_return)
+	 REG_L	s2, TF_BASE+TF_REG_S2(sp)
+	.set	at
+END(MIPSX(kern_intr))
+
+/*
+ * mipsN_user_gen_exception
  *
  * Handle an exception during user mode.
- * Save user context atop of kernel stack, then call trap() to process
+ * Save user context atop the kernel stack, then call trap() to process
  * the condition.  The context can be manipulated alternatively via
  * curlwp->l_md.md_regs.
  */
-NESTED_NOPROFILE(mips1_user_gen_exception, CALLFRAME_SIZ, ra)
+NESTED_NOPROFILE(MIPSX(user_gen_exception), CALLFRAME_SIZ, ra)
 	.set	noat
 	.mask	0x80000000, -4
-/*
- * Save all the registers but the kernel temporaries onto stack.
- */
-	lw	k1, CPUVAR(CURLWP)
-	nop
-	lw	k1, L_ADDR(k1)
-	nop
-	addu	k1, k1, USPACE - TF_SIZ
-	sw	AT, TF_REG_AST(k1)
-	sw	v0, TF_REG_V0(k1)
-	sw	v1, TF_REG_V1(k1)
+	/*
+	 * Save all the registers except the kernel temporaries onto the stack.
+	 */
+	PTR_L	k1, CPUVAR(CURLWP)
+	nop
+	PTR_L	k0, L_PCB(k1)
+	nop
+	PTR_ADDU k0, USPACE - TF_SIZ - CALLFRAME_SIZ
+	REG_S	AT, CALLFRAME_SIZ+TF_REG_AST(k0)
+	REG_S	v0, CALLFRAME_SIZ+TF_REG_V0(k0)
+	REG_S	v1, CALLFRAME_SIZ+TF_REG_V1(k0)
 	mflo	v0
-	sw	a0, TF_REG_A0(k1)
-	sw	a1, TF_REG_A1(k1)
-	sw	a2, TF_REG_A2(k1)
-	sw	a3, TF_REG_A3(k1)
+	REG_S	a0, CALLFRAME_SIZ+TF_REG_A0(k0)
+	REG_S	a1, CALLFRAME_SIZ+TF_REG_A1(k0)
+	REG_S	a2, CALLFRAME_SIZ+TF_REG_A2(k0)
+	REG_S	a3, CALLFRAME_SIZ+TF_REG_A3(k0)
 	mfhi	v1
-	sw	t0, TF_REG_T0(k1)
-	sw	t1, TF_REG_T1(k1)
-	sw	t2, TF_REG_T2(k1)
-	sw	t3, TF_REG_T3(k1)
+	REG_S	t0, CALLFRAME_SIZ+TF_REG_T0(k0)
+	REG_S	t1, CALLFRAME_SIZ+TF_REG_T1(k0)
+	REG_S	t2, CALLFRAME_SIZ+TF_REG_T2(k0)
+	REG_S	t3, CALLFRAME_SIZ+TF_REG_T3(k0)
 	mfc0	a0, MIPS_COP_0_STATUS		# 1st arg is STATUS
-	sw	t4, TF_REG_T4(k1)
-	sw	t5, TF_REG_T5(k1)
-	sw	t6, TF_REG_T6(k1)
-	sw	t7, TF_REG_T7(k1)
+	REG_S	ta0, CALLFRAME_SIZ+TF_REG_TA0(k0)
+	REG_S	ta1, CALLFRAME_SIZ+TF_REG_TA1(k0)
+	REG_S	ta2, CALLFRAME_SIZ+TF_REG_TA2(k0)
+	REG_S	ta3, CALLFRAME_SIZ+TF_REG_TA3(k0)
 	mfc0	a1, MIPS_COP_0_CAUSE		# 2nd arg is CAUSE
-	sw	s0, TF_REG_S0(k1)
-	sw	s1, TF_REG_S1(k1)
-	sw	s2, TF_REG_S2(k1)
-	sw	s3, TF_REG_S3(k1)
-	mfc0	a2, MIPS_COP_0_BAD_VADDR	# 3rd arg is fault address
-	sw	s4, TF_REG_S4(k1)
-	sw	s5, TF_REG_S5(k1)
-	sw	s6, TF_REG_S6(k1)
-	sw	s7, TF_REG_S7(k1)
-	mfc0	a3, MIPS_COP_0_EXC_PC		# 4th arg is exception PC
-	sw	t8, TF_REG_T8(k1)
-	sw	t9, TF_REG_T9(k1)
-	sw	gp, TF_REG_GP(k1)
-	sw	sp, TF_REG_SP(k1)
-	sw	s8, TF_REG_S8(k1)
-	sw	ra, TF_REG_RA(k1)
-	sw	a0, TF_REG_SR(k1)
-	sw	v0, TF_REG_MULLO(k1)
-	sw	v1, TF_REG_MULHI(k1)
-	sw	a3, TF_REG_EPC(k1)
-	addu	sp, k1, -CALLFRAME_SIZ		# switch to kernel SP
+	REG_S	s0, CALLFRAME_SIZ+TF_REG_S0(k0)
+	REG_S	s1, CALLFRAME_SIZ+TF_REG_S1(k0)
+	REG_S	s2, CALLFRAME_SIZ+TF_REG_S2(k0)
+	REG_S	s3, CALLFRAME_SIZ+TF_REG_S3(k0)
+	_MFC0	a2, MIPS_COP_0_BAD_VADDR	# 3rd arg is fault address
+	REG_S	s4, CALLFRAME_SIZ+TF_REG_S4(k0)
+	REG_S	s5, CALLFRAME_SIZ+TF_REG_S5(k0)
+	REG_S	s6, CALLFRAME_SIZ+TF_REG_S6(k0)
+	REG_S	s7, CALLFRAME_SIZ+TF_REG_S7(k0)
+	_MFC0	a3, MIPS_COP_0_EXC_PC		# 4th arg is exception PC
+	REG_S	t8, CALLFRAME_SIZ+TF_REG_T8(k0)	# will be MIPS_CURLWP
+	REG_S	t9, CALLFRAME_SIZ+TF_REG_T9(k0)
+	REG_S	gp, CALLFRAME_SIZ+TF_REG_GP(k0)
+	REG_S	sp, CALLFRAME_SIZ+TF_REG_SP(k0)
+	REG_S	s8, CALLFRAME_SIZ+TF_REG_S8(k0)
+	REG_S	ra, CALLFRAME_SIZ+TF_REG_RA(k0)
+	REG_S	a0, CALLFRAME_SIZ+TF_REG_SR(k0)
+	REG_S	v0, CALLFRAME_SIZ+TF_REG_MULLO(k0)
+	REG_S	v1, CALLFRAME_SIZ+TF_REG_MULHI(k0)
+	REG_S	a3, CALLFRAME_SIZ+TF_REG_EPC(k0)
 #ifdef __GP_SUPPORT__
-	la	gp, _C_LABEL(_gp)		# switch to kernel GP
+	PTR_LA	gp, _C_LABEL(_gp)		# switch to kernel GP
 #endif
-#ifndef NOFPU
+	move	sp, k0				# switch to kernel SP
+	move	MIPS_CURLWP, k1
+#ifdef NOFPU
+	li	t0, MIPS_SR_INT_IE		# reenable intrs
+#else
 	lui	t0, %hi(MIPS_SR_COP_1_BIT)
 	and	t0, a0
 	or	t0, MIPS_SR_INT_IE		# make sure intrs are still on
-#else
-	li	t0, MIPS_SR_INT_IE		# reenable intrs
 #endif
 	xor	t0, a0				# turn off the FPU & ints on
-#if defined(DDB) || defined(DEBUG) || defined(KGDB)
-	move	ra, a3
-	sw	ra, CALLFRAME_RA(sp)
-#endif
-/*
- * Call the exception handler.
- */
-	lw	MIPS_CURLWP, CPUVAR(CURLWP)
+/*
+ * Call the trap handler.
+ */
+	mtc0	t0, MIPS_COP_0_STATUS
+
 	jal	_C_LABEL(trap)
-	mtc0	t0, MIPS_COP_0_STATUS
+	 REG_S	a3, CALLFRAME_RA(sp)		# for debugging
 /*
  * Check pending asynchronous traps.
  */
-	lw	t0, L_MD_ASTPENDING(MIPS_CURLWP)# any pending ast?
-	nop
-	beq	t0, zero, 1f			# if no, skip ast processing
-	nop
+	INT_L	v0, L_MD_ASTPENDING(MIPS_CURLWP)# any pending ast?
+	nop
+	beqz	v0, MIPSX(user_return)		# if no, skip ast processing
+	 nop
 /*
  * We have pending asynchronous traps; all the state is already saved.
  */
-	jal	_C_LABEL(ast)
-	lw	a0, CALLFRAME_SIZ + TF_REG_EPC(sp)
-1:
-	la	ra, _C_LABEL(mips1_xcpt_return)
-	j	ra				# pretend function return
-	nop
+	lui	ra, %hi(MIPSX(user_return))	# return directly to user return
+	j	_C_LABEL(ast)
+	 PTR_ADDIU ra, %lo(MIPSX(user_return))	# return directly to user return
 	.set	at
-END(mips1_user_gen_exception)
-
-/*
- * mips1_SystemCall
- *
- * Save user context atop of kernel stack, then call syscall() to process
- * the condition.  The context can be manipulated alternatively via
- * curlwp->l_md.md_regs.
- */
-NESTED_NOPROFILE(mips1_systemcall, CALLFRAME_SIZ, ra)
+END(MIPSX(user_gen_exception))
+
+/*----------------------------------------------------------------------------
+ *
+ * mipsN_user_intr
+ *
+ *	Handle an interrupt from user mode.
+ *	We save partial state onto the kernel stack since we know there will
+ *	always a kernel stack and chances are we won't need the registers we
+ *	don't save.  If there is a pending asynchronous system trap, then save
+ *	the remaining state and call ast().
+ *
+ * Results:
+ * 	None.
+ *
+ * Side effects:
+ *	None.
+ *
+ *----------------------------------------------------------------------------
+ */
+NESTED_NOPROFILE(MIPSX(user_intr), CALLFRAME_SIZ, ra)
 	.set	noat
 	.mask	0x80000000, -4
 /*
- * Save all the registers but kernel temporaries onto stack.
- */
-	lw	k1, CPUVAR(CURLWP)
-	nop
-	lw	k1, L_ADDR(k1)
-	nop
-	addu	k1, k1, USPACE - TF_SIZ
-	#sw	AT, TF_REG_AST(k1)
+ * Save the relevant user registers onto the kernel stack.
+ * We don't need to save s0 - s8 because the compiler does it for us.
+ */
+	PTR_L	k1, CPUVAR(CURLWP)
+	nop
+	PTR_L	k0, L_PCB(k1)				# XXXuvm_lwp_getuarea
+	nop
+	PTR_ADDU k0, USPACE - TF_SIZ - CALLFRAME_SIZ
+	REG_S	AT, CALLFRAME_SIZ+TF_REG_AST(k0)	# $1
+	REG_S	v0, CALLFRAME_SIZ+TF_REG_V0(k0)		# $2
+	REG_S	v1, CALLFRAME_SIZ+TF_REG_V1(k0)		# $3
+	mflo	v0
+	REG_S	a0, CALLFRAME_SIZ+TF_REG_A0(k0)		# $4
+	REG_S	a1, CALLFRAME_SIZ+TF_REG_A1(k0)		# $5
+	REG_S	a2, CALLFRAME_SIZ+TF_REG_A2(k0)		# $6
+	REG_S	a3, CALLFRAME_SIZ+TF_REG_A3(k0)		# $7
+	mfhi	v1
+	REG_S	t0, CALLFRAME_SIZ+TF_REG_T0(k0)		# $8
+	REG_S	t1, CALLFRAME_SIZ+TF_REG_T1(k0)		# $9
+	REG_S	t2, CALLFRAME_SIZ+TF_REG_T2(k0)		# $10
+	REG_S	t3, CALLFRAME_SIZ+TF_REG_T3(k0)		# $11
+	mfc0	t0, MIPS_COP_0_CAUSE
+	REG_S	ta0, CALLFRAME_SIZ+TF_REG_TA0(k0)	# $12
+	REG_S	ta1, CALLFRAME_SIZ+TF_REG_TA1(k0)	# $13
+	REG_S	ta2, CALLFRAME_SIZ+TF_REG_TA2(k0)	# $14
+	REG_S	ta3, CALLFRAME_SIZ+TF_REG_TA3(k0)	# $15
+	REG_S	s0, CALLFRAME_SIZ+TF_REG_S0(k0)		# $16
+	REG_S	s1, CALLFRAME_SIZ+TF_REG_S1(k0)		# $17
+	mfc0	s1, MIPS_COP_0_STATUS
+	REG_S	t8, CALLFRAME_SIZ+TF_REG_T8(k0)		# $24 MIPS_CURLWP
+	REG_S	t9, CALLFRAME_SIZ+TF_REG_T9(k0)		# $25
+	REG_S	gp, CALLFRAME_SIZ+TF_REG_GP(k0)		# $28
+	REG_S	sp, CALLFRAME_SIZ+TF_REG_SP(k0)		# $29
+	REG_S	ra, CALLFRAME_SIZ+TF_REG_RA(k0)		# $31
+	REG_S	s1, CALLFRAME_SIZ+TF_REG_SR(k0)
+	_MFC0	ta0, MIPS_COP_0_EXC_PC
+	REG_S	v0, CALLFRAME_SIZ+TF_REG_MULLO(k0)
+	REG_S	v1, CALLFRAME_SIZ+TF_REG_MULHI(k0)
+	REG_S	ta0, CALLFRAME_SIZ+TF_REG_EPC(k0)
+	REG_S	t0, CALLFRAME_SIZ+TF_REG_CAUSE(k0)
+	move	sp, k0				# switch to kernel SP
+	move	MIPS_CURLWP, k1			# set curlwp reg (t8)
+#if defined(DDB) || defined(DEBUG) || defined(KGDB)
+	REG_S	ta0, CALLFRAME_RA(sp)		# for debugging
+#endif
+#ifdef __GP_SUPPORT__
+	PTR_LA	gp, _C_LABEL(_gp)		# switch to kernel GP
+#endif
+
+	/*
+	 * We first need to get to IPL_HIGH so that interrupts are masked.
+	 */
+	jal	_C_LABEL(splhigh_noprof)	# splhigh()
+	 nop
+	move	s0, v0				# remember previous priority
+
+	/*
+	 * Now that we are at IPL_HIGH, we can turn off FPU and turn on
+	 * interrupts since they all masked.
+	 */
+	mfc0	v1, MIPS_COP_0_STATUS
+#ifndef NOFPU
+	lui	v0, %hi(MIPS_SR_COP_1_BIT)
+	and	v0, v1
+	or	v0, MIPS_SR_INT_IE		# make sure intrs are still on
+#else
+	li	v0, MIPS_SR_INT_IE		# reenable intrs
+#endif
+	xor	v0, v1
+	mtc0	v0, MIPS_COP_0_STATUS
+	nop
+
+	/*
+	 * Since we interrupted user mode, the new interrupt depth must be 1.
+	 */
+	PTR_L	t0, L_CPU(MIPS_CURLWP)
+	li	t1, 1
+	INT_S	t1, CPU_INFO_IDEPTH(t0)		# store new interrupt depth (1)
+
+	/*
+	 * Now hard interrupts can be processed.
+	 */
+	move	a1, ta0				# 2nd arg is exception pc
+	move	a2, s1				# 3rd arg is status
+	jal	_C_LABEL(cpu_intr)		# cpu_intr(ppl, pc, status)
+	 move	a0, s0				# 1st arg is previous pri level
+
+	/*
+	 * Interrupt depth is now back to 0.
+	 */
+	PTR_L	t0, L_CPU(MIPS_CURLWP)
+	nop
+	INT_S	zero, CPU_INFO_IDEPTH(t0)
+
+#ifdef __HAVE_FAST_SOFTINTS
+	/*
+	 * This an interrupt from user mode so both softints must be enabled.
+	 * No need to check (unless we're being paranoid).
+	 */
+#ifdef PARANOIA
+	and	a0, s1, MIPS_SOFT_INT_MASK	# get softints enabled bits
+	xor	a0, MIPS_SOFT_INT_MASK		# invert them.
+1:	bnez	a0, 1b				# loop forever if disabled
+	 nop
+#endif
+	mfc0	a0, MIPS_COP_0_CAUSE		# grab the pending softints
+	nop					# load delay
+	and	a0, MIPS_SOFT_INT_MASK		# are there softints pending
+	beqz	a0, 4f				#   nope
+	 nop
+	jal	_C_LABEL(softint_process)	# softint_process(pending)
+	 nop
+4:
+#endif
+	/*
+	 * Disable interrupts
+	 */
+	mfc0	v1, MIPS_COP_0_STATUS
+	nop					# delay slot
+	and	v0, v1, MIPS_SR_INT_IE		# clear interrupt enable
+	xor	v0, v1
+	mtc0	v0, MIPS_COP_0_STATUS		# interrupts are disabled
+
+	/*
+	 * Restore IPL knowing interrupts are off
+	 */
+	jal	_C_LABEL(splx_noprof)
+	 move	a0, s0				# fetch previous priority level
+
+	/*
+	 * Check pending asynchronous traps.
+	 */
+	REG_L	s0, CALLFRAME_SIZ+TF_REG_S0(sp)	# restore
+	REG_L	s1, CALLFRAME_SIZ+TF_REG_S1(sp)	# restore
+	INT_L	v0, L_MD_ASTPENDING(MIPS_CURLWP)# any pending ast?
+	nop
+	beqz	v0, MIPSX(user_intr_return)	# if no, skip ast processing
+	 nop
+
+	/*
+	 * We have a pending asynchronous trap; save remaining user state into
+	 * trapframe.
+	 */
+	#REG_S	s0, CALLFRAME_SIZ+TF_REG_S0(sp)	# $16 (saved above)
+	#REG_S	s1, CALLFRAME_SIZ+TF_REG_S1(sp)	# $17 (saved above)
+	REG_S	s2, CALLFRAME_SIZ+TF_REG_S2(sp)	# $18
+	REG_S	s3, CALLFRAME_SIZ+TF_REG_S3(sp)	# $19
+	REG_S	s4, CALLFRAME_SIZ+TF_REG_S4(sp)	# $20
+	REG_S	s5, CALLFRAME_SIZ+TF_REG_S5(sp)	# $21
+	REG_S	s6, CALLFRAME_SIZ+TF_REG_S6(sp)	# $22
+	REG_S	s7, CALLFRAME_SIZ+TF_REG_S7(sp)	# $23
+	REG_S	s8, CALLFRAME_SIZ+TF_REG_S8(sp)	# $30
+
+	mfc0	t0, MIPS_COP_0_STATUS
+	PTR_LA	ra, MIPSX(user_return)		# load delay
+	or	t0, MIPS_SR_INT_IE		# enable interrupts
+	j	_C_LABEL(ast)			# ast()
+	 mtc0	t0, MIPS_COP_0_STATUS		# enable interrupts (spl0)
 	.set	at
-	sw	v0, TF_REG_V0(k1)		# syscall #
-	sw	v1, TF_REG_V1(k1)		# used by syscall()
+END(MIPSX(user_intr))
+
+/*
+ * mipsN_systemcall
+ *
+ * Save user context atop of kernel stack, then call syscall() to process
+ * a system call.  The context can be manipulated alternatively via
+ * curlwp->l_md.md_utf->tf_regs.
+ */
+NESTED_NOPROFILE(MIPSX(systemcall), CALLFRAME_SIZ, ra)
+	.set	noat
+	.mask	0x80000000, -4
+	/*
+	 * Save all the registers but kernel temporaries onto the stack.
+	 */
+	PTR_L	k1, CPUVAR(CURLWP)
+	nop
+	PTR_L	k0, L_PCB(k1)
+	nop
+	PTR_ADDU k0, USPACE - TF_SIZ - CALLFRAME_SIZ
+	#REG_S	AT, CALLFRAME_SIZ+TF_REG_AST(k0)
+	#.set	at
+	REG_S	v0, CALLFRAME_SIZ+TF_REG_V0(k0)		# syscall #
+	REG_S	v1, CALLFRAME_SIZ+TF_REG_V1(k0)		# used by syscall()
 	mflo	v0
-	sw	a0, TF_REG_A0(k1)
-	sw	a1, TF_REG_A1(k1)
-	sw	a2, TF_REG_A2(k1)
-	sw	a3, TF_REG_A3(k1)
-	lw	a0, CPUVAR(CURLWP)		# 1st arg is curlwp
+	REG_S	a0, CALLFRAME_SIZ+TF_REG_A0(k0)
+	REG_S	a1, CALLFRAME_SIZ+TF_REG_A1(k0)
+	REG_S	a2, CALLFRAME_SIZ+TF_REG_A2(k0)
+	REG_S	a3, CALLFRAME_SIZ+TF_REG_A3(k0)
+	move	a0, k1					# 1st arg is curlwp
 	mfhi	v1
-	#sw	t0, TF_REG_T0(k1)		# no need to save temp regs
-	#sw	t1, TF_REG_T1(k1)
-	#sw	t2, TF_REG_T2(k1)
-	#sw	t3, TF_REG_T3(k1)
-	mfc0	a1, MIPS_COP_0_STATUS		# 2nd arg is STATUS
-	#sw	t4, TF_REG_T4(k1)
-	#sw	t5, TF_REG_T5(k1)
-	#sw	t6, TF_REG_T6(k1)
-	sw	t7, TF_REG_T7(k1)
-	mfc0	a2, MIPS_COP_0_CAUSE		# 3rd arg is CAUSE
-	sw	s0, TF_REG_S0(k1)
-	sw	s1, TF_REG_S1(k1)
-	sw	s2, TF_REG_S2(k1)
-	sw	s3, TF_REG_S3(k1)
-	mfc0	a3, MIPS_COP_0_EXC_PC		# 4th arg is PC
-	sw	s4, TF_REG_S4(k1)
-	sw	s5, TF_REG_S5(k1)
-	sw	s6, TF_REG_S6(k1)
-	sw	s7, TF_REG_S7(k1)
-	#sw	t8, TF_REG_T8(k1)
-	#sw	t9, TF_REG_T9(k1)
-	sw	gp, TF_REG_GP(k1)
-	sw	sp, TF_REG_SP(k1)
-	sw	s8, TF_REG_S8(k1)
-	sw	ra, TF_REG_RA(k1)
-	sw	a1, TF_REG_SR(k1)
-	sw	v0, TF_REG_MULLO(k1)
-	sw	v1, TF_REG_MULHI(k1)
-	sw	a3, TF_REG_EPC(k1)
-	addu	sp, k1, -CALLFRAME_SIZ		# switch to kernel SP
+	mfc0	a1, MIPS_COP_0_STATUS			# 2nd arg is STATUS
+	REG_S	s0, CALLFRAME_SIZ+TF_REG_S0(k0)
+	REG_S	s1, CALLFRAME_SIZ+TF_REG_S1(k0)
+	REG_S	s2, CALLFRAME_SIZ+TF_REG_S2(k0)
+	REG_S	s3, CALLFRAME_SIZ+TF_REG_S3(k0)
+	mfc0	a2, MIPS_COP_0_CAUSE			# 3rd arg is CAUSE
+	REG_S	s4, CALLFRAME_SIZ+TF_REG_S4(k0)
+	REG_S	s5, CALLFRAME_SIZ+TF_REG_S5(k0)
+	REG_S	s6, CALLFRAME_SIZ+TF_REG_S6(k0)
+	REG_S	s7, CALLFRAME_SIZ+TF_REG_S7(k0)
+	_MFC0	a3, MIPS_COP_0_EXC_PC			# 4th arg is PC
+	REG_S	t0, CALLFRAME_SIZ+TF_REG_T0(k0)
+	REG_S	t1, CALLFRAME_SIZ+TF_REG_T1(k0)
+	REG_S	t2, CALLFRAME_SIZ+TF_REG_T2(k0)
+	REG_S	t3, CALLFRAME_SIZ+TF_REG_T3(k0)		# syscall saved gp for fork
+	REG_S	ta0, CALLFRAME_SIZ+TF_REG_TA0(k0)
+	REG_S	ta1, CALLFRAME_SIZ+TF_REG_TA1(k0)
+	REG_S	ta2, CALLFRAME_SIZ+TF_REG_TA2(k0)
+	REG_S	ta3, CALLFRAME_SIZ+TF_REG_TA3(k0)
+	REG_S	t8, CALLFRAME_SIZ+TF_REG_T8(k0)		# will be MIPS_CURLWP
+	REG_S	t9, CALLFRAME_SIZ+TF_REG_T9(k0)
+	REG_S	gp, CALLFRAME_SIZ+TF_REG_GP(k0)
+	REG_S	sp, CALLFRAME_SIZ+TF_REG_SP(k0)
+	REG_S	s8, CALLFRAME_SIZ+TF_REG_S8(k0)
+	REG_S	ra, CALLFRAME_SIZ+TF_REG_RA(k0)
+	REG_S	a1, CALLFRAME_SIZ+TF_REG_SR(k0)
+	REG_S	v0, CALLFRAME_SIZ+TF_REG_MULLO(k0)
+	REG_S	v1, CALLFRAME_SIZ+TF_REG_MULHI(k0)
+	REG_S	a3, CALLFRAME_SIZ+TF_REG_EPC(k0)
+	PTR_L	t0, L_PROC(a0)			# curlwp->l_proc (used below)
+	move	sp, k0				# switch to kernel SP
+	move	MIPS_CURLWP, a0			# set curlwp reg
 #ifdef __GP_SUPPORT__
-	la	gp, _C_LABEL(_gp)		# switch to kernel GP
+	PTR_LA	gp, _C_LABEL(_gp)		# switch to kernel GP
 #endif
 #if defined(DDB) || defined(DEBUG) || defined(KGDB)
 	move	ra, a3
-	sw	ra, CALLFRAME_RA(sp)
+	REG_S	ra, CALLFRAME_RA(sp)
 #endif
-	lw	t0, L_PROC(a0)			# t0 = curlwp->l_proc
-	move	MIPS_CURLWP, a0			# set curlwp reg
-	lw	t1, P_MD_SYSCALL(t0)		# t1 = syscall
-	ori	t0, a1, MIPS_SR_INT_IE		# turn on IEc, enable intr.
-	and	t0, t0, ~MIPS_SR_COP_1_BIT	# turn off FPU
+	/*
+	 * Turn off FPU
+	 */
+	PTR_L	t9, P_MD_SYSCALL(t0)		# t1 = syscall
+#ifdef NOFPU
+	li	t0, MIPS_SR_INT_IE
+#else
+	lui	t0, %hi(MIPS_SR_COP_1_BIT)
+	and	t0, a1
+	ori	t0, MIPS_SR_INT_IE		# turn on IEc, enable intr.
+#endif
+	xor	t0, a1				# turns off the FPU & ints on
+	mtc0	t0, MIPS_COP_0_STATUS		# re-enable interrupts
 /*
  * Call the system call handler.
  */
-	jal	t1
-	mtc0	t0, MIPS_COP_0_STATUS
+	jalr	t9
+	 nop
 /*
  * Check pending asynchronous traps.
  */
-	lw	t0, L_MD_ASTPENDING(MIPS_CURLWP)# any pending ast?
-	nop
-	beq	t0, zero, 1f
-	nop
+	INT_L	v0, L_MD_ASTPENDING(MIPS_CURLWP)# any pending ast?
+	nop
+	beqz	v0, MIPSX(user_return)		# no, skip ast processing
+	 nop
 /*
  * We have pending asynchronous traps; all the state is already saved.
  */
-	jal	_C_LABEL(ast)
-	lw	a0, CALLFRAME_SIZ + TF_REG_EPC(sp)
-1:
-	la	ra, _C_LABEL(mips1_xcpt_return)
-	j	ra				# pretend function return
-	nop
-END(mips1_systemcall)
-
-/*
- * mips1_kernIntr
- *
- * Handle an interrupt from kernel mode.
- * Build kernframe on stack to hold interrupted kernel context, then
- * call cpu_intr() to process it.
- *
- */
-NESTED_NOPROFILE(mips1_kern_intr, KERNFRAME_SIZ, ra)
-	.set	noat
-	.mask	0x80000000, (CALLFRAME_RA - KERNFRAME_SIZ)
-	subu	sp, sp, KERNFRAME_SIZ
-/*
- * Save the relevant kernel registers onto the stack.
- * We don't need to save s0 - s8 and sp because
- * the compiler does it for us.
- */
-	sw	AT, TF_BASE+TF_REG_AST(sp)
-	sw	v0, TF_BASE+TF_REG_V0(sp)
-	sw	v1, TF_BASE+TF_REG_V1(sp)
-	mflo	v0
-	mfhi	v1
-	sw	a0, TF_BASE+TF_REG_A0(sp)
-	sw	a1, TF_BASE+TF_REG_A1(sp)
-	sw	a2, TF_BASE+TF_REG_A2(sp)
-	sw	a3, TF_BASE+TF_REG_A3(sp)
-	mfc0	a0, MIPS_COP_0_STATUS		# 1st arg is STATUS
-	sw	t0, TF_BASE+TF_REG_T0(sp)
-	sw	t1, TF_BASE+TF_REG_T1(sp)
-	sw	t2, TF_BASE+TF_REG_T2(sp)
-	sw	t3, TF_BASE+TF_REG_T3(sp)
-	mfc0	a1, MIPS_COP_0_CAUSE		# 2nd arg is CAUSE
-	sw	t4, TF_BASE+TF_REG_T4(sp)
-	sw	t5, TF_BASE+TF_REG_T5(sp)
-	sw	t6, TF_BASE+TF_REG_T6(sp)
-	sw	t7, TF_BASE+TF_REG_T7(sp)
-	mfc0	a2, MIPS_COP_0_EXC_PC		# 3rd arg is exception PC
-	sw	t8, TF_BASE+TF_REG_T8(sp)
-	sw	t9, TF_BASE+TF_REG_T9(sp)
-	sw	ra, TF_BASE+TF_REG_RA(sp)
-	sw	a0, TF_BASE+TF_REG_SR(sp)
-	and	a3, a0, a1			# 4th is STATUS & CAUSE
-	sw	v0, TF_BASE+TF_REG_MULLO(sp)
-	sw	v1, TF_BASE+TF_REG_MULHI(sp)
-	sw	a2, TF_BASE+TF_REG_EPC(sp)
-#if defined(DDB) || defined(DEBUG) || defined(KGDB)
-	move	ra, a2
-	sw	ra, KERNFRAME_RA(sp)		# for debugging
-#endif
-/*
- * Call the interrupt handler.
- */
-	jal	_C_LABEL(cpu_intr)
-	nop
-/*
- * Restore registers and return from the interrupt.
- */
-	lw	a0, TF_BASE+TF_REG_SR(sp)
-	lw	t0, TF_BASE+TF_REG_MULLO(sp)
-	lw	t1, TF_BASE+TF_REG_MULHI(sp)
-	mtc0	a0, MIPS_COP_0_STATUS		# this should disable interrupts
-	mtlo	t0
-	mthi	t1
-/*
- * Check for kernel restartable atomic sequences.
- */
-	lw	k1, TF_BASE+TF_REG_EPC(sp)	# restore exception PC
-	la	t0, _C_LABEL(_lock_ras_start)
-	li	t1, -MIPS_LOCK_RAS_SIZE
-	and	t1, t1, k1
-	bne	t1, t0, 1f
-	nop
-	jal	_C_LABEL(_lock_ras)
-1:
-	lw	AT, TF_BASE+TF_REG_AST(sp)
-	lw	v0, TF_BASE+TF_REG_V0(sp)
-	lw	v1, TF_BASE+TF_REG_V1(sp)
-	lw	a0, TF_BASE+TF_REG_A0(sp)
-	lw	a1, TF_BASE+TF_REG_A1(sp)
-	lw	a2, TF_BASE+TF_REG_A2(sp)
-	lw	a3, TF_BASE+TF_REG_A3(sp)
-	lw	t0, TF_BASE+TF_REG_T0(sp)
-	lw	t1, TF_BASE+TF_REG_T1(sp)
-	lw	t2, TF_BASE+TF_REG_T2(sp)
-	lw	t3, TF_BASE+TF_REG_T3(sp)
-	lw	t4, TF_BASE+TF_REG_T4(sp)
-	lw	t5, TF_BASE+TF_REG_T5(sp)
-	lw	t6, TF_BASE+TF_REG_T6(sp)
-	lw	t7, TF_BASE+TF_REG_T7(sp)
-	lw	t8, TF_BASE+TF_REG_T8(sp)
-	lw	t9, TF_BASE+TF_REG_T9(sp)
-	lw	ra, TF_BASE+TF_REG_RA(sp)
-	addu	sp, sp, KERNFRAME_SIZ		# restore kernel SP
-	j	k1				# return to interrupted point
-	rfe
+	lui	ra, %hi(MIPSX(user_return))	# return directly to user return
+	j	_C_LABEL(ast)
+	 PTR_ADDIU ra, %lo(MIPSX(user_return))	# return directly to user return
 	.set	at
-END(mips1_kern_intr)
+END(MIPSX(systemcall))
 
 /*----------------------------------------------------------------------------
- * XXX this comment block should be updated XXX
- * mips1_user_intr --
- *
- *	Handle an interrupt from user mode.
- *	Note: we save minimal state in the u.u_pcb struct and use the standard
- *	kernel stack since there has to be a u page if we came from user mode.
- *	If there is a pending software interrupt, then save the remaining state
- *	and call softintr(). This is all because if we call switch() inside
- *	cpu_intr(), not all the user registers have been saved in u.u_pcb.
+ *      
+ *	R3000 TLB exception handlers
+ *      
+ *----------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------
+ *
+ * mipsN_kern_tlb_miss --
+ *
+ *	Handle a TLB miss exception from kernel mode in kernel space.
+ *	The BaddVAddr, Context, and EntryHi registers contain the failed
+ *	virtual address.
  *
  * Results:
- * 	None.
+ *	None.
  *
  * Side effects:
@@ -606,150 +1002,35 @@
  *----------------------------------------------------------------------------
  */
-NESTED_NOPROFILE(mips1_user_intr, CALLFRAME_SIZ, ra)
+LEAF_NOPROFILE(MIPSX(kern_tlb_miss))
 	.set	noat
-	.mask	0x80000000, -4
-/*
- * Save the relevant user registers onto the stack.
- * We don't need to save s0 - s8 because the compiler does it for us.
- */
-	lw	k1, CPUVAR(CURLWP)
-	nop
-	lw	k1, L_ADDR(k1)
-	nop
-	addu	k1, k1, USPACE - TF_SIZ
-	sw	AT, TF_REG_AST(k1)
-	sw	v0, TF_REG_V0(k1)
-	sw	v1, TF_REG_V1(k1)
-	mflo	v0
-	sw	a0, TF_REG_A0(k1)
-	sw	a1, TF_REG_A1(k1)
-	sw	a2, TF_REG_A2(k1)
-	sw	a3, TF_REG_A3(k1)
-	mfhi	v1
-	sw	t0, TF_REG_T0(k1)
-	sw	t1, TF_REG_T1(k1)
-	sw	t2, TF_REG_T2(k1)
-	sw	t3, TF_REG_T3(k1)
-	mfc0	a0, MIPS_COP_0_STATUS		# 1st arg is STATUS
-	sw	t4, TF_REG_T4(k1)
-	sw	t5, TF_REG_T5(k1)
-	sw	t6, TF_REG_T6(k1)
-	sw	t7, TF_REG_T7(k1)
-	mfc0	a1, MIPS_COP_0_CAUSE		# 2nd arg is CAUSE
-	sw	t8, TF_REG_T8(k1)
-	sw	t9, TF_REG_T9(k1)
-	sw	gp, TF_REG_GP(k1)
-	sw	sp, TF_REG_SP(k1)
-	mfc0	a2, MIPS_COP_0_EXC_PC		# 3rd arg is exception PC
-	sw	ra, TF_REG_RA(k1)
-	sw	a0, TF_REG_SR(k1)
-	sw	v0, TF_REG_MULLO(k1)
-	sw	v1, TF_REG_MULHI(k1)
-	and	a3, a0, a1			# 4th is STATUS & CAUSE
-	sw	a2, TF_REG_EPC(k1)
-	addu	sp, k1, -CALLFRAME_SIZ		# switch to kernel SP
-#ifdef __GP_SUPPORT__
-	la	gp, _C_LABEL(_gp)		# switch to kernel GP
-#endif
-	sw	MIPS_CURLWP, TF_MIPS_CURLWP(k1)	# save curlwp reg
-	lw	MIPS_CURLWP, CPUVAR(CURLWP)	# set curlwp reg
-	.set	at
-	and	t0, a0, ~MIPS_SR_COP_1_BIT	# turn off the FPU
-	.set	noat
-#if defined(DDB) || defined(DEBUG) || defined(KGDB)
-	move	ra, a2
-	sw	ra, CALLFRAME_RA(sp)		# for debugging
-#endif
-/*
- * Call the interrupt handler.
- */
-	jal	_C_LABEL(cpu_intr)
-	mtc0	t0, MIPS_COP_0_STATUS
-/*
- * Check pending asynchoronous traps.
- */
-	addu	a1, sp, CALLFRAME_SIZ
-	nop
-	lw	a0, TF_REG_SR(a1)
-	lw	v0, L_MD_ASTPENDING(MIPS_CURLWP)# any pending ast?
-	mtc0	a0, MIPS_COP_0_STATUS		# restore SR, disable intrs
-	beq	v0, zero, 1f			# if no, skip ast processing
-	lw	MIPS_CURLWP, TF_MIPS_CURLWP(a1) # restore curlwp reg
-/*
- * We have pending asynchronous traps; save remaining user state in stack. 
- */
-	sw	s0, TF_REG_S0(a1)
-	sw	s1, TF_REG_S1(a1)
-	sw	s2, TF_REG_S2(a1)
-	sw	s3, TF_REG_S3(a1)
-	sw	s4, TF_REG_S4(a1)
-	sw	s5, TF_REG_S5(a1)
-	sw	s6, TF_REG_S6(a1)
-	sw	s7, TF_REG_S7(a1)
-	sw	s8, TF_REG_S8(a1)
-
-	lw	a0, TF_REG_EPC(a1)		# argument is interrupted PC
-	li	t0, MIPS_HARD_INT_MASK | MIPS_SR_INT_IE
-	lw	MIPS_CURLWP, CPUVAR(CURLWP)	# set curlwp reg
-	jal	_C_LABEL(ast)
-	mtc0	t0, MIPS_COP_0_STATUS		# enable interrupts (spl0)
-
-	addu	a1, sp, CALLFRAME_SIZ
-	lw	a0, TF_REG_SR(a1)
-	lw	s0, TF_REG_S0(a1)
-	mtc0	a0, MIPS_COP_0_STATUS		# this should disable interrupts
-	lw	s1, TF_REG_S1(a1)
-	lw	s2, TF_REG_S2(a1)
-	lw	s3, TF_REG_S3(a1)
-	lw	s4, TF_REG_S4(a1)
-	lw	s5, TF_REG_S5(a1)
-	lw	s6, TF_REG_S6(a1)
-	lw	s7, TF_REG_S7(a1)
-	lw	s8, TF_REG_S8(a1)
-1:
-	lw	v0, TF_REG_MULLO(a1)
-	lw	v1, TF_REG_MULHI(a1)
-	mtlo	v0
-	mthi	v1
-	move	k1, a1
-	lw	k0, TF_REG_EPC(k1)		# exception PC
-	lw	AT, TF_REG_AST(k1)
-	lw	v0, TF_REG_V0(k1)
-	lw	v1, TF_REG_V1(k1)
-	lw	a0, TF_REG_A0(k1)
-	lw	a1, TF_REG_A1(k1)
-	lw	a2, TF_REG_A2(k1)
-	lw	a3, TF_REG_A3(k1)
-	lw	t0, TF_REG_T0(k1)
-	lw	t1, TF_REG_T1(k1)
-	lw	t2, TF_REG_T2(k1)
-	lw	t3, TF_REG_T3(k1)
-	lw	t4, TF_REG_T4(k1)
-	lw	t5, TF_REG_T5(k1)
-	lw	t6, TF_REG_T6(k1)
-	lw	t7, TF_REG_T7(k1)
-	lw	t8, TF_REG_T8(k1)
-	lw	t9, TF_REG_T9(k1)
-	lw	gp, TF_REG_GP(k1)
-	lw	sp, TF_REG_SP(k1)
-	lw	ra, TF_REG_RA(k1)
-	j	k0				# return to interrupted point
+	_MFC0	k0, MIPS_COP_0_BAD_VADDR	# get the fault address
+	li	k1, VM_MIN_KERNEL_ADDRESS	# compute index
+	PTR_SUBU k0, k1
+	INT_L	k1, _C_LABEL(Sysmapsize)	# index within range?
+	PTR_SRL	k0, PGSHIFT
+	sltu	k1, k0, k1
+	/*
+	 * If we are beyond the bounds of Sysmap, let trap panic for us.
+	 */
+	beqz	k1, _C_LABEL(MIPSX(kern_gen_exception))	# full trap processing
+	 nop					# - delay slot -
+	PTR_L	k1, _C_LABEL(Sysmap)
+	PTR_SLL	k0, 2				# compute offset from index
+	PTR_ADDU k1, k0
+	INT_L	k0, 0(k1)			# get PTE entry
+	_MFC0	k1, MIPS_COP_0_EXC_PC		# get return address
+	mtc0	k0, MIPS_COP_0_TLB_LOW		# save PTE entry
+	and	k0, MIPS1_PG_V			# check for valid PTE entry
+	beqz	k0, _C_LABEL(MIPSX(kern_gen_exception)) # PTE invalid
+	 nop
+	tlbwr					# write random TLB
+	j	k1
 	rfe
-	.set	at
-END(mips1_user_intr)
-
-/*
- * Mark where code entreed from exception hander jumptable
- * ends, for stack traceback code.
- */
-
-	.globl	_C_LABEL(mips1_exceptionentry_end)
-_C_LABEL(mips1_exceptionentry_end):
-
+END(MIPSX(kern_tlb_miss))
 
 #if 0
 /*----------------------------------------------------------------------------
  *
- * mips1_tlb_modexception --
+ * mipsN_tlb_invalid_exception --
  *
  *	Handle a TLB modified exception.
@@ -765,5 +1046,5 @@
  *----------------------------------------------------------------------------
  */
-LEAF_NOPROFILE(mips1_tlb_mod_exception)
+LEAF_NOPROFILE(MIPSX(tlb_mod_exception))
 	.set	noat
 	tlbp					# find the TLB entry
@@ -774,13 +1055,13 @@
 	mtc0	k0, MIPS_COP_0_TLB_LOW
 	li	k1, MIPS_KSEG0_START
-	subu	k0, k0, k1
+	PTR_SUBU k0, k1
 	srl	k0, k0, MIPS1_TLB_PHYS_PAGE_SHIFT
-	la	k1, pmap_attributes		# DANGER!  DANGER!
-	addu	k0, k0, k1
+	PTR_L	k1, pmap_attributes		# DANGER!  DANGER!
+	PTR_ADDU k0, k1
 	lbu	k1, 0(k0)			# fetch old value
 	nop
 	or	k1, k1, 1			# set modified bit
 	sb	k1, 0(k0)			# save new value
-	mfc0	k0, MIPS_COP_0_EXC_PC		# get return address
+	_MFC0	k0, MIPS_COP_0_EXC_PC		# get return address
 	nop
 	j	k0
@@ -789,14 +1070,22 @@
 	break	0				# panic
 	.set	at
-END(mips1_TLBModException)
+END(MIPSX(tlb_mod_exception))
 #endif
 
-/*----------------------------------------------------------------------------
- *
- * mips1_tlb_miss_exception --
- *
- *	Handle a TLB miss exception from kernel mode.
- *	The BaddVAddr, Context, and EntryHi registers contain the failed
- *	virtual address.
+/*
+ * Mark where code entreed from exception hander jumptable
+ * ends, for stack traceback code.
+ */
+
+	.globl	_C_LABEL(MIPSX(exceptionentry_end))
+_C_LABEL(MIPSX(exceptionentry_end)):
+
+/*--------------------------------------------------------------------------
+ *
+ * mipsN_tlb_set_asid --
+ *
+ *	Write the given pid into the TLB pid reg.
+ *
+ *	void mipsN_tlb_set_asid(uint32_t pid)
  *
  * Results:
@@ -804,74 +1093,25 @@
  *
  * Side effects:
- *	None.
- *
- *----------------------------------------------------------------------------
- */
-LEAF_NOPROFILE(mips1_tlb_miss_exception)
-	.set	noat
-	mfc0	k0, MIPS_COP_0_BAD_VADDR	# get the fault address
-	li	k1, VM_MIN_KERNEL_ADDRESS	# compute index
-	subu	k0, k0, k1
-	lw	k1, _C_LABEL(Sysmapsize)	# index within range?
-	srl	k0, k0, PGSHIFT
-	sltu	k1, k0, k1
-	beq	k1, zero, outofworld		# No. falling beyond...
-	nop
-	lw	k1, _C_LABEL(Sysmap)
-	sll	k0, k0, 2			# compute offset from index
-	addu	k1, k1, k0
-	lw	k0, 0(k1)			# get PTE entry
-	mfc0	k1, MIPS_COP_0_EXC_PC		# get return address
-	mtc0	k0, MIPS_COP_0_TLB_LOW		# save PTE entry
-	and	k0, k0, MIPS1_PG_V		# check for valid entry
-	beq	k0, zero, _C_LABEL(mips1_kern_gen_exception) # PTE invalid
-	nop
-	tlbwr					# update TLB
-	j	k1
-	rfe
-
-outofworld:
-	/* Ensure we have a valid sp so panic has a chance */
-	move	a1, sp
-	la	sp, start			# set sp to a valid place
-	PANIC("TLB out of universe: ksp was %p")
-	.set	at
-END(mips1_tlb_miss_exception)
-
-
-/*--------------------------------------------------------------------------
- *
- * mips1_tlb_set_asid --
- *
- *	Write the given pid into the TLB pid reg.
- *
- *	void mips1_tlb_set_asid(uint32_t pid)
- *
- * Results:
- *	None.
- *
- * Side effects:
  *	PID set in the entry hi register.
  *
  *--------------------------------------------------------------------------
  */
-LEAF(mips1_tlb_set_asid)
-	sll	a0, a0, MIPS1_TLB_PID_SHIFT	# put PID in right spot
+LEAF(MIPSX(tlb_set_asid))
+	sll	a0, MIPS1_TLB_PID_SHIFT		# put PID in right spot
 	mtc0	a0, MIPS_COP_0_TLB_HI		# Write the hi reg value
 	j	ra
 	nop
-END(mips1_tlb_set_asid)
-
+END(MIPSX(tlb_set_asid))
 
 /*--------------------------------------------------------------------------
  *
- * mips1_TLBUpdate --
- *
- *	Update the TLB if highreg is found; otherwise, enter the data.
- *
- *	mips1_tlb_update(register_t highreg, register_t lowreg)
+ * mipsN_tlb_update --
+ *
+ *	Update the TLB if highreg is found; otherwise, do_nothing
+ *
+ *	int mipsN_tlb_update(vaddr_t va, register_t lowreg)
  *
  * Results:
- *	None.
+ *	< 0 if skipped, >= 0 if updated
  *
  * Side effects:
@@ -880,5 +1120,5 @@
  *--------------------------------------------------------------------------
  */
-LEAF(mips1_tlb_update)
+LEAF(MIPSX(tlb_update))
 	mfc0	v1, MIPS_COP_0_STATUS		# save the status register
 	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
@@ -891,35 +1131,32 @@
 	mfc0	v0, MIPS_COP_0_TLB_INDEX	# see what we got
 	mtc0	a1, MIPS_COP_0_TLB_LOW		# set new entrylo
-	bgez	v0, 2f				# index < 0 => !found
-	 nop
-	b	3f
-	 tlbwr					# add vicitimizing another
+	bltz	v0, 2f				# index < 0 => !found
+	 nop
+	tlbwi					# update slot found
 2:
-	tlbwi					# update the existing one
-3:
 	mtc0	t0, MIPS_COP_0_TLB_HI		# restore current PID
 	j	ra
 	mtc0	v1, MIPS_COP_0_STATUS
-END(mips1_tlb_update)
+END(MIPSX(tlb_update))
 
 /*--------------------------------------------------------------------------
  *
- * mips1_tlb_read_indexed --
+ * mipsN_tlb_read_indexed --
  *
  *	Read the TLB entry.
  *
- *	mips1_tlb_read_indexed(register_t entry, struct mips1_tlb *tlb)
+ *	void mipsN_tlb_read_indexed(register_t entry, struct tlbmask *tlb)
  *
  * Results:
- *	Returns MIPS1 TLB HI/LO in a pair.
+ *	tlb will contain the TLB entry found (tlb_lo1/tlb_mask will be 0).
  *
  *--------------------------------------------------------------------------
  */
-LEAF(mips1_tlb_read_indexed)
+LEAF(MIPSX(tlb_read_indexed))
 	mfc0	v1, MIPS_COP_0_STATUS		# Save the status register.
 	mtc0	zero, MIPS_COP_0_STATUS		# Disable interrupts
 	mfc0	t0, MIPS_COP_0_TLB_HI		# Get current PID
 
-	sll	a0, a0, MIPS1_TLB_INDEX_SHIFT
+	sll	a0, MIPS1_TLB_INDEX_SHIFT
 	mtc0	a0, MIPS_COP_0_TLB_INDEX	# Set the index register
 	nop
@@ -927,16 +1164,435 @@
 	mfc0	t2, MIPS_COP_0_TLB_HI		# fetch the hi entry
 	mfc0	t3, MIPS_COP_0_TLB_LOW		# fetch the low entry
-	sw	t2, TLBMASK_HI(a1)
-	sw	t3, TLBMASK_LO0(a1)
-	sw	zero, TLBMASK_LO1(a1)
-	sw	zero, TLBMASK_MASK(a1)
+
+	mtc0	t0, MIPS_COP_0_TLB_HI		# Restore proper PID
+						# (before touching memory)
+	mtc0	v1, MIPS_COP_0_STATUS		# Restore the status register
+
+	PTR_S	t2, TLBMASK_HI(a1)
+	INT_S	t3, TLBMASK_LO0(a1)
+	INT_S	zero, TLBMASK_LO1(a1)
+	j	ra
+	 INT_S	zero, TLBMASK_MASK(a1)
+END(MIPSX(tlb_read_indexed))
+
+/*--------------------------------------------------------------------------
+ *
+ * mipsX_tlb_write_indexed --
+ *
+ *	Write the TLB entry.
+ *
+ *	void mipsX_tlb_write_indexed(size_t entry, struct tlbmask *tlb)
+ *
+ * Results:
+ *	None.
+ *
+ *--------------------------------------------------------------------------
+ */
+LEAF(MIPSX(tlb_write_indexed))
+	PTR_L	t2, TLBMASK_HI(a1)		# fetch the hi entry
+	INT_L	t3, TLBMASK_LO0(a1)		# fetch the low entry
+	mfc0	v1, MIPS_COP_0_STATUS		# Save the status register.
+	mtc0	zero, MIPS_COP_0_STATUS		# Disable interrupts
+	mfc0	t0, MIPS_COP_0_TLB_HI		# Get current PID
+
+	sll	a0, MIPS1_TLB_INDEX_SHIFT
+	mtc0	a0, MIPS_COP_0_TLB_INDEX	# Set the index register
+	nop
+	mtc0	t2, MIPS_COP_0_TLB_HI		
+	mtc0	t3, MIPS_COP_0_TLB_LOW		
+	
+	tlbwi					# Write to the TLB entry
 
 	mtc0	t0, MIPS_COP_0_TLB_HI		# restore PID
 	j	ra
-	mtc0	v1, MIPS_COP_0_STATUS		# Restore the status register
-END(mips1_tlb_read_indexed)
+	 mtc0	v1, MIPS_COP_0_STATUS		# Restore the status register
+END(MIPSX(tlb_write_indexed))
+
+/*
+ * void mipsN_tlb_invalidate_addr(vaddr_t va)
+ *
+ * Invalidate a TLB entry for given virtual address if found in TLB.
+ */
+LEAF(MIPSX(tlb_invalidate_addr))
+	mfc0	v1, MIPS_COP_0_STATUS		# save status register
+	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
+	mfc0	t0, MIPS_COP_0_TLB_HI		# save current PID
+	nop
+
+	mtc0	a0, MIPS_COP_0_TLB_HI		# look for addr & PID
+	nop
+	tlbp					# probe the entry in question
+	mfc0	a0, MIPS_COP_0_TLB_INDEX	# see what we got
+	li	t1, MIPS_KSEG0_START		# load invalid address
+	bltz	a0, 1f				# index < 0 then skip
+	 nop
+	mtc0	t1, MIPS_COP_0_TLB_HI		# make entryHi invalid
+	mtc0	zero, MIPS_COP_0_TLB_LOW	# zero out entryLo
+	nop
+	tlbwi
+1:
+	mtc0	t0, MIPS_COP_0_TLB_HI		# restore PID
+	j	ra
+	 mtc0	v1, MIPS_COP_0_STATUS		# restore the status register
+END(MIPSX(tlb_invalidate_addr))
+
+/*
+ * void mipsN_tlb_invalidate_asids(uint32_t asid_lo, uint32_t asid_hi)
+ *
+ * Invalidate TLB entries belonging to asids (asid_lo,asid_hi]
+ * leaving entries for kernel space marked global intact.
+ */
+LEAF(MIPSX(tlb_invalidate_asids))
+	mfc0	t3, MIPS_COP_0_TLB_HI		# save EntryHi
+	mfc0	v1, MIPS_COP_0_STATUS		# save status register
+	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
+
+	INT_L	t2, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
+	li	t1, MIPS1_TLB_FIRST_RAND_ENTRY << MIPS1_TLB_INDEX_SHIFT
+	li	v0, MIPS_KSEG0_START		# invalid address
+	sll	t2, MIPS1_TLB_INDEX_SHIFT
+
+	# do {} while (t1 < t2)
+1:
+	mtc0	t1, MIPS_COP_0_TLB_INDEX	# set index
+	nop
+	tlbr					# obtain an entry
+	mfc0	ta0, MIPS_COP_0_TLB_LOW
+	nop
+	and	ta0, ta0, MIPS1_PG_G		# check to see it has G bit
+	bnez	ta0, 2f
+	 nop
+
+	mfc0	ta0, MIPS_COP_0_TLB_HI		# get va and ASID
+	nop
+	and	ta0, ta0, PG_ASID		# mask off ASID
+	sltu	ta1, ta0, a0			# < asid_lo
+	bnez	ta1, 2f				# yes, next tlb entry
+	 nop
+	sltu	ta2, ta0, a1			# < asid_hi
+	beqz	ta2, 2f				# no, next tlb entry
+	 nop
+
+	mtc0	v0, MIPS_COP_0_TLB_HI		# make entryHi invalid
+	mtc0	zero, MIPS_COP_0_TLB_LOW	# zero out entryLo
+	nop
+	tlbwi					# invalidate the TLB entry
+2:
+	addu	t1, t1, 1 << MIPS1_TLB_INDEX_SHIFT	# increment index
+	bne	t1, t2, 1b
+	nop
+
+	mtc0	t3, MIPS_COP_0_TLB_HI		# restore entryHi
+
+	j	ra				# new TLBpid will be set soon
+	 mtc0	v1, MIPS_COP_0_STATUS		# restore status register
+END(MIPSX(tlb_invalidate_asids))
+
+/*
+ * void mipsN_tlb_invalidate_all(void)
+ *
+ * Invalidate TLB entirely.
+ */
+LEAF(MIPSX(tlb_invalidate_all))
+	INT_L	a0, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
+
+	mfc0	v1, MIPS_COP_0_STATUS		# save the status register.
+	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
+
+	li	t1, MIPS_KSEG0_START
+	mtc0	t1, MIPS_COP_0_TLB_HI		# make entryHi invalid
+	mtc0	zero, MIPS_COP_0_TLB_LOW	# zero out entryLo
+
+	move	t1, zero
+	sll	a0, MIPS1_TLB_INDEX_SHIFT
+
+	# do {} while (t1 < a0)
+1:
+	mtc0	t1, MIPS_COP_0_TLB_INDEX	# set TLBindex
+	addu	t1, t1, 1 << MIPS1_TLB_INDEX_SHIFT	# increment index
+	bne	t1, a0, 1b
+	 tlbwi					# invalidate the entry
+
+	j	ra
+	 mtc0	v1, MIPS_COP_0_STATUS		# restore status register
+END(MIPSX(tlb_invalidate_all))
+
+/*
+ * u_int mipsN_tlb_record_asids(u_long *bitmap, uint32_t asid_mask)
+ *
+ * Scan the random part of the TLB looking at non-global entries and
+ * record each ASID in use into the bitmap.  Additionally, return the
+ * number of new unique ASIDs encountered.
+ */
+LEAF(MIPSX(tlb_record_asids))
+	mfc0	ta3, MIPS_COP_0_TLB_HI		# save EntryHi
+	li	ta0, MIPS1_TLB_FIRST_RAND_ENTRY << MIPS1_TLB_INDEX_SHIFT
+	INT_L	ta1, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
+	move	ta2, zero
+	li	ta3, 1
+	sll	ta1, MIPS1_TLB_INDEX_SHIFT
+
+	mfc0	v1, MIPS_COP_0_STATUS		# save status register
+	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
+
+	move	v0, zero			# start at zero ASIDs
+
+	# do {} while (ta0 < ta1)
+1:
+	mtc0	ta0, MIPS_COP_0_TLB_INDEX	# set index
+	nop
+	tlbr					# obtain an entry
+	mfc0	t0, MIPS_COP_0_TLB_LOW
+	nop
+	and	t0, MIPS1_PG_G			# check to see it has G bit
+	bnez	t0, 4f
+	 nop
+
+	mfc0	t0, MIPS_COP_0_TLB_HI		# get va and ASID
+	nop
+	and	t0, PG_ASID			# mask off ASID
+	srl	t0, MIPS1_TLB_INDEX_SHIFT	# shift to low bits
+
+	srl	a2, t0, 3 + LONG_SCALESHIFT	# drop low 5 bits
+	sll	a2, LONG_SCALESHIFT		# make an index for the bitmap
+	sllv	t0, ta3, t0			# t0 is mask (ta3 = 1)
+
+	PTR_ADDU a2, a0				# index into the bitmap
+	beq	a2, ta2, 3f			# is the desired cell loaded?
+	 nop					#   yes, don't reload it
+	beqz	ta2, 2f				# has is ever been loaded?
+	 nop					#   nope, so don't have it
+
+	LONG_S	t2, 0(ta2)			# save the updated value
+2:
+	LONG_L	t2, 0(a2)			# and load it
+	 move	ta2, a2				# remember the new cell's addr
+3:
+	and	t1, t2, t0			# see if this asid was recorded
+	sltu	t1, t1, ta3			# t1 = t1 < 1 (aka t1 == 0)
+	addu	v0, t1				# v0 += t1 
+	or	t2, t0				# or in the new ASID bit
+
+4:
+	addu	ta0, 1 << MIPS1_TLB_INDEX_SHIFT	# increment TLB entry #
+	bne	ta0, ta1, 1b			# keep looking if not at limit
+	 nop
+
+	beqz	ta2, 5f				# do we have a cell to write?
+	 nop					#   nope, nothing.
+
+	LONG_S	t2, 0(ta2)			# save the updated valu.
+5:
+	mtc0	a3, MIPS_COP_0_TLB_HI		# restore entryHi
+
+	j	ra				# new TLBpid will be set soon
+	 mtc0	v1, MIPS_COP_0_STATUS		# restore status register
+END(MIPSX(tlb_record_asids))
+
+/*--------------------------------------------------------------------------
+ *
+ * mipsN_tlb_enter --
+ *
+ *	Entr the 
+ *
+ *	mipsN_tlb_enter(size_t tlb_index, vaddr_t va_asid, uint32_t tlb_lo)
+ *
+ * Results:
+ *	None.
+ *
+ * Side effects:
+ *	None.
+ *
+ *--------------------------------------------------------------------------
+ */
+LEAF(MIPSX(tlb_enter))
+	mfc0	t0, MIPS_COP_0_TLB_HI		# save current PID
+	nop
+	mtc0	a0, MIPS_COP_0_TLB_HI		# set entryhi
+	nop
+	tlbp					# probe the existence
+	mfc0	v0, MIPS_COP_0_TLB_INDEX	# see what we got
+	nop
+	bltz	v0, 2f				# index < 0 => !found
+	 nop
+	beq	v0, a0, 3f
+	 nop
+	li	t1, MIPS_KSEG0_START
+	mtc0	t1, MIPS_COP_0_TLB_HI		# set invalid address
+	nop
+	mtc0	zero, MIPS_COP_0_TLB_LOW	# set invalid entrylo
+	nop
+	tlbwi					# invalidate the old entry
+
+	mtc0	a1, MIPS_COP_0_TLB_HI		# set entryhi
+	nop
+2:
+	mtc0	a0, MIPS_COP_0_TLB_INDEX	# set the new location
+	nop
+3:
+	mtc0	a2, MIPS_COP_0_TLB_LOW		# set new entrylo
+	nop
+	tlbwi					# update the existing one
+3:
+	j	ra
+	 mtc0	t0, MIPS_COP_0_TLB_HI		# restore current PID
+END(MIPSX(tlb_enter))
 
 /*----------------------------------------------------------------------------
  *
+ *	R3000 trampolines and context resume
+ *
+ *----------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------
+ *
+ * mipsN_lwp_trampoline
+ *
+ * Special arrangement for a process about to go user mode right after
+ * fork() system call.  When the first CPU tick is scheduled to run the
+ * forked child, it starts running from here.  Then, a service function
+ * is called with one argument supplied to complete final preparations,
+ * and the process returns to user mode as if the fork() system call is
+ * handled in a normal way.  No need to save any registers although this
+ * calls another.
+ *----------------------------------------------------------------------------
+ */
+LEAF(MIPSX(lwp_trampoline))
+	PTR_ADDU sp, -CALLFRAME_SIZ
+
+	# Call lwp_startup(), with args from cpu_switchto()/cpu_setfunc()
+	move	a0, v0
+	jal	_C_LABEL(lwp_startup)
+	 move	a1, MIPS_CURLWP
+
+	# Call the routine specified by cpu_setfunc()
+	jalr	s0			
+	 move	a0, s1
+
+	# Return to user (won't happen if a kernel thread)
+	.set	noat
+MIPSX(user_return):
+	REG_L	s0, CALLFRAME_SIZ+TF_REG_S0(sp)	# $16
+	REG_L	s1, CALLFRAME_SIZ+TF_REG_S1(sp)	# $16
+	REG_L	s2, CALLFRAME_SIZ+TF_REG_S2(sp)	# $16
+	REG_L	s3, CALLFRAME_SIZ+TF_REG_S3(sp)	# $16
+	REG_L	s4, CALLFRAME_SIZ+TF_REG_S4(sp)	# $16
+	REG_L	s5, CALLFRAME_SIZ+TF_REG_S5(sp)	# $16
+	REG_L	s6, CALLFRAME_SIZ+TF_REG_S6(sp)	# $16
+	REG_L	s7, CALLFRAME_SIZ+TF_REG_S7(sp)	# $16
+	REG_L	s8, CALLFRAME_SIZ+TF_REG_S8(sp)	# $30
+MIPSX(user_intr_return):
+	REG_L	a0, CALLFRAME_SIZ+TF_REG_SR(sp)
+	REG_L	t0, CALLFRAME_SIZ+TF_REG_MULLO(sp)
+	REG_L	t1, CALLFRAME_SIZ+TF_REG_MULHI(sp)
+	mtc0	a0, MIPS_COP_0_STATUS	# this should disable interrupts
+	mtlo	t0
+	mthi	t1
+	move	k1, sp
+	REG_L	AT, TF_BASE+TF_REG_AST(sp)
+	REG_L	k0, CALLFRAME_SIZ+TF_REG_EPC(k1)
+	REG_L	AT, CALLFRAME_SIZ+TF_REG_AST(k1)
+	REG_L	v0, CALLFRAME_SIZ+TF_REG_V0(k1)
+	REG_L	v1, CALLFRAME_SIZ+TF_REG_V1(k1)
+	REG_L	a0, CALLFRAME_SIZ+TF_REG_A0(k1)
+	REG_L	a1, CALLFRAME_SIZ+TF_REG_A1(k1)
+	REG_L	a2, CALLFRAME_SIZ+TF_REG_A2(k1)
+	REG_L	a3, CALLFRAME_SIZ+TF_REG_A3(k1)
+	REG_L	t0, CALLFRAME_SIZ+TF_REG_T0(k1)
+	REG_L	t1, CALLFRAME_SIZ+TF_REG_T1(k1)
+	REG_L	t2, CALLFRAME_SIZ+TF_REG_T2(k1)
+	REG_L	t3, CALLFRAME_SIZ+TF_REG_T3(k1)
+	REG_L	ta0, CALLFRAME_SIZ+TF_REG_TA0(k1)
+	REG_L	ta1, CALLFRAME_SIZ+TF_REG_TA1(k1)
+	REG_L	ta2, CALLFRAME_SIZ+TF_REG_TA2(k1)
+	REG_L	ta3, CALLFRAME_SIZ+TF_REG_TA3(k1)
+	REG_L	t8, CALLFRAME_SIZ+TF_REG_T8(k1)
+	REG_L	t9, CALLFRAME_SIZ+TF_REG_T9(k1)
+	REG_L	gp, CALLFRAME_SIZ+TF_REG_GP(k1)
+	REG_L	ra, CALLFRAME_SIZ+TF_REG_RA(k1)
+	REG_L	sp, CALLFRAME_SIZ+TF_REG_SP(k1)
+	nop
+	j	k0
+	rfe
+	.set	at
+END(MIPSX(lwp_trampoline))
+
+/*
+ * Like lwp_trampoline, but do not call lwp_startup
+ */
+LEAF(MIPSX(setfunc_trampoline))
+	PTR_ADDU sp, -CALLFRAME_SIZ
+
+	# Call the routine specified by cpu_setfunc()
+	PTR_LA	ra, MIPSX(user_return)
+	jr	s0			
+	 move	a0, s1
+END(MIPSX(setfunc_trampoline))
+
+/*
+ * void mipsN_cpu_switch_resume(struct lwp *newlwp)
+ *
+ * Wiredown the USPACE of newproc with TLB entry#0 and #1.  Check
+ * if target USPACE is already refered by any TLB entry before
+ * doing that, and make sure TBIS(them) in the case.
+ */
+LEAF_NOPROFILE(MIPSX(cpu_switch_resume))
+	INT_L	a1, L_MD_UPTE_0(a0)		# a1 = upte[0]
+	INT_L	a2, L_MD_UPTE_1(a0)		# a2 = upte[1]
+	PTR_L	s0, L_PCB(a0)			# va = l->l_addr
+	li	s2, VM_MIN_KERNEL_ADDRESS
+	blt	s0, s2, resume
+	nop
+
+	mtc0	s0, MIPS_COP_0_TLB_HI		# VPN = va
+	nop
+	tlbp					# probe 1st VPN
+	mfc0	s1, MIPS_COP_0_TLB_INDEX
+	nop
+	bltz	s1, entry0set
+	li	s1, MIPS_KSEG0_START		# found, then
+	mtc0	s1, MIPS_COP_0_TLB_HI
+	mtc0	zero, MIPS_COP_0_TLB_LOW
+	nop
+	tlbwi					# TBIS(va)
+	nop
+	mtc0	s0, MIPS_COP_0_TLB_HI		# set 1st VPN again
+entry0set:
+	mtc0	zero, MIPS_COP_0_TLB_INDEX	# TLB index #0
+	ori	a1, a1, MIPS1_PG_G
+	mtc0	a1, MIPS_COP_0_TLB_LOW		# 1st PFN w/ PG_G
+	nop
+	tlbwi					# set TLB entry #0
+
+	addu	s0, s0, PAGE_SIZE
+	mtc0	s0, MIPS_COP_0_TLB_HI		# VPN = va+PAGE_SIZE
+	nop
+	tlbp					# probe 2nd VPN
+	mfc0	s1, MIPS_COP_0_TLB_INDEX
+	nop
+	bltz	s1, entry1set
+	li	s1, MIPS_KSEG0_START		# found, then
+	mtc0	s1, MIPS_COP_0_TLB_HI
+	mtc0	zero, MIPS_COP_0_TLB_LOW
+	nop
+	tlbwi					# TBIS(va+PAGE_SIZE)
+	nop
+	mtc0	s0, MIPS_COP_0_TLB_HI		# set 2nd VPN again
+entry1set:
+	li	s1, 1 << MIPS1_TLB_INDEX_SHIFT
+	mtc0	s1, MIPS_COP_0_TLB_INDEX	# TLB index #1
+	ori	a2, a2, MIPS1_PG_G
+	mtc0	a2, MIPS_COP_0_TLB_LOW		# 2nd PFN w/ PG_G
+	nop
+	tlbwi					# set TLB entry #1
+
+resume:
+	j	ra
+	nop
+END(MIPSX(cpu_switch_resume))
+
+/*----------------------------------------------------------------------------
+ *
  *	R3000 cache sizing and flushing code.
  *
@@ -945,5 +1601,5 @@
 #ifndef ENABLE_MIPS_TX3900
 /*
- * void mips1_wbflush(void)
+ * void mipsN_wbflush(void)
  *
  * Drain processor's write buffer, normally used to ensure any I/O
@@ -959,5 +1615,5 @@
  * differently.
  */
-LEAF(mips1_wbflush)
+LEAF(MIPSX(wbflush))
 	nop
 	nop
@@ -968,5 +1624,5 @@
 	j	ra
 	nop
-END(mips1_wbflush)
+END(MIPSX(wbflush))
 #else /* !ENABLE_MIPS_TX3900 */
 /*
@@ -1008,8 +1664,8 @@
 	mfc0	v0, R3900_COP_0_CONFIG
 	j	ra
-	nop
+	 nop
 END(tx3900_cp0_config_read)
 
-LEAF(mips1_wbflush)
+LEAF(MIPSX(wbflush))
 	.set push
 	.set mips2
@@ -1018,341 +1674,105 @@
 	j	ra
 	nop
-END(mips1_wbflush)
+END(MIPSX(wbflush))
 #endif /* !ENABLE_MIPS_TX3900 */
 
-/*
- * mips1_lwp_trampoline
- *
- * Special arrangement for a process about to go user mode right after
- * fork() system call.  When the first CPU tick is scheduled to the
- * forked child, it starts running from here.  Then, a service function
- * is called with one argument supplied to complete final preparations,
- * and the process returns to user mode as if the fork() system call is
- * handled in a normal way.  No need to save any registers although this
- * calls another.
- */
-LEAF(mips1_lwp_trampoline)
-	addu	sp, sp, -CALLFRAME_SIZ
-
-	# Call lwp_startup(), with args from cpu_switchto()/cpu_setfunc()
-	la	t0, _C_LABEL(lwp_startup)
-	move	a0, v0
-	jal	ra, t0
-	move	a1, MIPS_CURLWP
-
-	# Call the routine specified by cpu_setfunc()
-	jal	ra, s0			
-	move	a0, s1
-
-	# Return to user (won't happen if a kernel thread)
-	.set	noat
-XLEAF(mips1_xcpt_return)
-	addu	a1, sp, CALLFRAME_SIZ	# a1 points exception frame
-	lw	a0, TF_REG_SR(a1)
-	lw	t0, TF_REG_MULLO(a1)
-	lw	t1, TF_REG_MULHI(a1)
-	mtc0	a0, MIPS_COP_0_STATUS	# this should disable interrupts
-	mtlo	t0
-	mthi	t1
-	nop
-	move	k1, a1
-	lw	k0, TF_REG_EPC(k1)
-	lw	AT, TF_REG_AST(k1)
-	lw	v0, TF_REG_V0(k1)
-	lw	v1, TF_REG_V1(k1)
-	lw	a0, TF_REG_A0(k1)
-	lw	a1, TF_REG_A1(k1)
-	lw	a2, TF_REG_A2(k1)
-	lw	a3, TF_REG_A3(k1)
-	lw	t0, TF_REG_T0(k1)
-	lw	t1, TF_REG_T1(k1)
-	lw	t2, TF_REG_T2(k1)
-	lw	t3, TF_REG_T3(k1)
-	lw	t4, TF_REG_T4(k1)
-	lw	t5, TF_REG_T5(k1)
-	lw	t6, TF_REG_T6(k1)
-	lw	t7, TF_REG_T7(k1)
-	lw	s0, TF_REG_S0(k1)
-	lw	s1, TF_REG_S1(k1)
-	lw	s2, TF_REG_S2(k1)
-	lw	s3, TF_REG_S3(k1)
-	lw	s4, TF_REG_S4(k1)
-	lw	s5, TF_REG_S5(k1)
-	lw	s6, TF_REG_S6(k1)
-	lw	s7, TF_REG_S7(k1)
-	lw	t8, TF_REG_T8(k1)
-	lw	t9, TF_REG_T9(k1)
-	lw	gp, TF_REG_GP(k1)
-	lw	s8, TF_REG_S8(k1)
-	lw	ra, TF_REG_RA(k1)
-	lw	sp, TF_REG_SP(k1)
-	nop
-	j	k0
-	rfe
-	.set	at
-END(mips1_lwp_trampoline)
-
-/*
- * Like lwp_trampoline, but do not call lwp_startup
- */
-LEAF(mips1_setfunc_trampoline)
-	addu	sp, sp, -CALLFRAME_SIZ
-
-	# Call the routine specified by cpu_setfunc()
-	jal	ra, s0			
-	move	a0, s1
-
-	j	mips1_xcpt_return
-	nop
-
-END(mips1_setfunc_trampoline)
-
-/*
- * void mips1_cpu_switch_resume(struct lwp *newlwp)
- *
- * Wiredown the USPACE of newproc with TLB entry#0 and #1.  Check
- * if target USPACE is already refered by any TLB entry before
- * doing that, and make sure TBIS(them) in the case.
- */
-LEAF_NOPROFILE(mips1_cpu_switch_resume)
-	lw	a1, L_MD_UPTE_0(a0)		# a1 = upte[0]
-	lw	a2, L_MD_UPTE_1(a0)		# a2 = upte[1]
-	lw	s0, L_ADDR(a0)			# va = l->l_addr
-	li	s2, VM_MIN_KERNEL_ADDRESS
-	blt	s0, s2, resume
-	nop
-
-	mtc0	s0, MIPS_COP_0_TLB_HI		# VPN = va
-	nop
-	tlbp					# probe 1st VPN
-	mfc0	s1, MIPS_COP_0_TLB_INDEX
-	nop
-	bltz	s1, entry0set
-	li	s1, MIPS_KSEG0_START		# found, then
-	mtc0	s1, MIPS_COP_0_TLB_HI
-	mtc0	zero, MIPS_COP_0_TLB_LOW
-	nop
-	tlbwi					# TBIS(va)
-	nop
-	mtc0	s0, MIPS_COP_0_TLB_HI		# set 1st VPN again
-entry0set:
-	mtc0	zero, MIPS_COP_0_TLB_INDEX	# TLB index #0
-	ori	a1, a1, MIPS1_PG_G
-	mtc0	a1, MIPS_COP_0_TLB_LOW		# 1st PFN w/ PG_G
-	nop
-	tlbwi					# set TLB entry #0
-
-	addu	s0, s0, PAGE_SIZE
-	mtc0	s0, MIPS_COP_0_TLB_HI		# VPN = va+PAGE_SIZE
-	nop
-	tlbp					# probe 2nd VPN
-	mfc0	s1, MIPS_COP_0_TLB_INDEX
-	nop
-	bltz	s1, entry1set
-	li	s1, MIPS_KSEG0_START		# found, then
-	mtc0	s1, MIPS_COP_0_TLB_HI
-	mtc0	zero, MIPS_COP_0_TLB_LOW
-	nop
-	tlbwi					# TBIS(va+PAGE_SIZE)
-	nop
-	mtc0	s0, MIPS_COP_0_TLB_HI		# set 2nd VPN again
-entry1set:
-	li	s1, 1 << MIPS1_TLB_INDEX_SHIFT
-	mtc0	s1, MIPS_COP_0_TLB_INDEX	# TLB index #1
-	ori	a2, a2, MIPS1_PG_G
-	mtc0	a2, MIPS_COP_0_TLB_LOW		# 2nd PFN w/ PG_G
-	nop
-	tlbwi					# set TLB entry #1
-
-resume:
-	j	ra
-	nop
-	END(mips1_cpu_switch_resume)
-
-/*
- * void mips1_tlb_invalidate_addr(vaddr_t va)
- *
- * Invalidate a TLB entry for given virtual address if found in TLB.
- */
-LEAF(mips1_tlb_invalidate_addr)
-	mfc0	v1, MIPS_COP_0_STATUS		# save status register
-	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
-	mfc0	t0, MIPS_COP_0_TLB_HI		# save current PID
-	nop
-
-	mtc0	a0, MIPS_COP_0_TLB_HI		# look for addr & PID
-	nop
-	tlbp					# probe the entry in question
-	mfc0	a0, MIPS_COP_0_TLB_INDEX	# see what we got
-	li	t1, MIPS_KSEG0_START		# load invalid address
-	bltz	a0, 1f				# index < 0 then skip
-	mtc0	t1, MIPS_COP_0_TLB_HI		# make entryHi invalid
-	mtc0	zero, MIPS_COP_0_TLB_LOW	# zero out entryLo
-	nop
-	tlbwi
-1:
-	mtc0	t0, MIPS_COP_0_TLB_HI		# restore PID
-	j	ra
-	mtc0	v1, MIPS_COP_0_STATUS		# restore the status register
-END(mips1_tlb_invalidate_addr)
-
-/*
- * void mips1_tlb_invalidate_asids(size_t sizeofTLB, uint32_t asid_lo,
- *	    uint32_t asid_hi)
- *
- * Invalidate TLB entries belonging to asids (asid_lo,asid_hi]
- * leaving entries for kernel space marked global intact.
- */
-LEAF(mips1_tlb_invalidate_asids)
-	mfc0	v1, MIPS_COP_0_STATUS		# save status register
-	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
-
-	li	t1, MIPS1_TLB_FIRST_RAND_ENTRY << MIPS1_TLB_INDEX_SHIFT
-	sll	t2, a0, MIPS1_TLB_INDEX_SHIFT
-	li	v0, MIPS_KSEG0_START		# invalid address
-
-	# do {} while (t1 < t2)
-1:
-	mtc0	t1, MIPS_COP_0_TLB_INDEX	# set index
-	nop
-	tlbr					# obtain an entry
-	mfc0	ta0, MIPS_COP_0_TLB_LOW
-	nop
-	and	ta0, ta0, MIPS1_PG_G		# check to see it has G bit
-	bnez	ta0, 2f
-	 nop
-
-	mfc0	ta0, MIPS_COP_0_TLB_HI		# get va and ASID
-	nop
-	and	ta0, ta0, PG_ASID		# mask off ASID
-	sltu	ta1, ta0, a1			# < asid_lo
-	bnez	ta1, 2f				# yes, next tlb entry
-	 nop
-	sltu	ta2, ta0, a2			# < asid_hi
-	beqz	ta2, 2f				# no, next tlb entry
-	 nop
-
-	mtc0	v0, MIPS_COP_0_TLB_HI		# make entryHi invalid
-	mtc0	zero, MIPS_COP_0_TLB_LOW	# zero out entryLo
-	nop
-	tlbwi					# invalidate the TLB entry
-2:
-	addu	t1, t1, 1 << MIPS1_TLB_INDEX_SHIFT	# increment index
-	bne	t1, t2, 1b
-	nop
-
-	j	ra				# new TLBpid will be set soon
-	mtc0	v1, MIPS_COP_0_STATUS		# restore status register
-END(mips1_tlb_invalidate_asids)
-
-/*
- * void mips1_tlb_invalidate_all(size_t sizeofTLB)
- *
- * Invalidate TLB entirely.
- */
-LEAF(mips1_tlb_invalidate_all)
-	mfc0	v1, MIPS_COP_0_STATUS		# save the status register.
-	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
-
-	li	t1, MIPS_KSEG0_START
-	mtc0	t1, MIPS_COP_0_TLB_HI		# make entryHi invalid
-	mtc0	zero, MIPS_COP_0_TLB_LOW	# zero out entryLo
-
-	move	t1, zero
-	sll	a0, a0, MIPS1_TLB_INDEX_SHIFT
-
-	# do {} while (t1 < a0)
-1:
-	mtc0	t1, MIPS_COP_0_TLB_INDEX	# set TLBindex
-	addu	t1, t1, 1 << MIPS1_TLB_INDEX_SHIFT	# increment index
-	bne	t1, a0, 1b
-	tlbwi					# invalidate the entry
-
-	j	ra
-	mtc0	v1, MIPS_COP_0_STATUS		# restore status register
-END(mips1_tlb_invalidate_all)
-
 	.rdata
 
-	.globl _C_LABEL(mips1_locoresw)
-_C_LABEL(mips1_locoresw):
-	.word _C_LABEL(mips1_cpu_switch_resume)
-	.word _C_LABEL(mips1_lwp_trampoline)
-	.word _C_LABEL(nullop)			# idle
-	.word _C_LABEL(mips1_setfunc_trampoline)
-	.word _C_LABEL(nullop)			# boot secondary processors
-	.word _C_LABEL(nullop)			# send ipi
-	.word _C_LABEL(nullop)			# spare
-	.word _C_LABEL(nullop)			# spare
-
-mips1_excpt_sw:
+	.globl _C_LABEL(MIPSX(locore_vec))
+_C_LABEL(MIPSX(locore_vec)):
+	PTR_WORD _C_LABEL(MIPSX(cpu_switch_resume))
+	PTR_WORD _C_LABEL(MIPSX(lwp_trampoline))
+	PTR_WORD _C_LABEL(MIPSX(setfunc_trampoline))
+	PTR_WORD _C_LABEL(MIPSX(wbflush))		# wbflush
+	PTR_WORD _C_LABEL(MIPSX(tlb_set_asid))
+	PTR_WORD _C_LABEL(MIPSX(tlb_invalidate_asids))
+	PTR_WORD _C_LABEL(MIPSX(tlb_invalidate_addr))
+	PTR_WORD _C_LABEL(nullop)			# tlb_invalidate_globals
+	PTR_WORD _C_LABEL(MIPSX(tlb_invalidate_all))
+	PTR_WORD _C_LABEL(MIPSX(tlb_record_asids))
+	PTR_WORD _C_LABEL(MIPSX(tlb_update))
+	PTR_WORD _C_LABEL(MIPSX(tlb_enter))
+	PTR_WORD _C_LABEL(MIPSX(tlb_read_indexed))
+	PTR_WORD _C_LABEL(MIPSX(tlb_write_indexed))
+
+	.globl _C_LABEL(MIPSX(locoresw))
+_C_LABEL(MIPSX(locoresw)):
+	PTR_WORD _C_LABEL(MIPSX(wbflush))		# lsw_wbflush
+	PTR_WORD _C_LABEL(nullop)			# lsw_cpu_idle
+	PTR_WORD _C_LABEL(nullop)			# lsw_send_ipi
+	PTR_WORD _C_LABEL(nullop)			# lsw_cpu_offline_md
+	PTR_WORD _C_LABEL(nullop)			# lsw_cpu_init
+	PTR_WORD _C_LABEL(nullop)			# lsw_cpu_run
+	PTR_WORD _C_LABEL(nullop)			# lsw_bus_error
+
+MIPSX(excpt_sw):
 	####
 	#### The kernel exception handlers.
 	####
-	.word _C_LABEL(mips1_kern_intr)		# 0 external interrupt
-	.word _C_LABEL(mips1_kern_gen_exception)# 1 TLB modification
-	.word _C_LABEL(mips1_tlb_miss_exception)# 2 TLB miss (LW/I-fetch)
-	.word _C_LABEL(mips1_tlb_miss_exception)# 3 TLB miss (SW)
-	.word _C_LABEL(mips1_kern_gen_exception)# 4 address error (LW/I-fetch)
-	.word _C_LABEL(mips1_kern_gen_exception)# 5 address error (SW)
-	.word _C_LABEL(mips1_kern_gen_exception)# 6 bus error (I-fetch)
-	.word _C_LABEL(mips1_kern_gen_exception)# 7 bus error (load or store)
-	.word _C_LABEL(mips1_kern_gen_exception)# 8 system call
-	.word _C_LABEL(mips1_kern_gen_exception)# 9 breakpoint
-	.word _C_LABEL(mips1_kern_gen_exception)# 10 reserved instruction
-	.word _C_LABEL(mips1_kern_gen_exception)# 11 coprocessor unusable
-	.word _C_LABEL(mips1_kern_gen_exception)# 12 arithmetic overflow
-	.word _C_LABEL(mips1_kern_gen_exception)# 13 r3k reserved
-	.word _C_LABEL(mips1_kern_gen_exception)# 14 r3k reserved
-	.word _C_LABEL(mips1_kern_gen_exception)# 15 r3k reserved
-	.word _C_LABEL(mips1_kern_gen_exception)# 16 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 17 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 18 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 19 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 20 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 21 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 22 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 23 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 24 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 25 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 26 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 27 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 28 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 29 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 30 never happens w/ MIPS1
-	.word _C_LABEL(mips1_kern_gen_exception)# 31 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_intr))	# 0 external interrupt
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 1 TLB modification
+	PTR_WORD _C_LABEL(MIPSX(kern_tlb_miss))	# 2 TLB miss (LW/I-fetch)
+	PTR_WORD _C_LABEL(MIPSX(kern_tlb_miss))	# 3 TLB miss (SW)
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 4 address error (LW/I-fetch)
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 5 address error (SW)
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 6 bus error (I-fetch)
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 7 bus error (load or store)
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 8 system call
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 9 breakpoint
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 10 reserved instruction
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 11 coprocessor unusable
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 12 arithmetic overflow
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 13 r3k reserved
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 14 r3k reserved
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 15 r3k reserved
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 16 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 17 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 18 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 19 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 20 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 21 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 22 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 23 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 24 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 25 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 26 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 27 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 28 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 29 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 30 never happens w/ MIPS1
+	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))# 31 never happens w/ MIPS1
 	#####
 	##### The user exception handlers.
 	#####
-	.word _C_LABEL(mips1_user_intr)		#  0
-	.word _C_LABEL(mips1_user_gen_exception)#  1
-	.word _C_LABEL(mips1_user_gen_exception)#  2
-	.word _C_LABEL(mips1_user_gen_exception)#  3
-	.word _C_LABEL(mips1_user_gen_exception)#  4
-	.word _C_LABEL(mips1_user_gen_exception)#  5
-	.word _C_LABEL(mips1_user_gen_exception)#  6
-	.word _C_LABEL(mips1_user_gen_exception)#  7
-	.word _C_LABEL(mips1_systemcall)	#  8
-	.word _C_LABEL(mips1_user_gen_exception)#  9
-	.word _C_LABEL(mips1_user_gen_exception)# 10
-	.word _C_LABEL(mips1_user_gen_exception)# 11
-	.word _C_LABEL(mips1_user_gen_exception)# 12
-	.word _C_LABEL(mips1_user_gen_exception)# 13
-	.word _C_LABEL(mips1_user_gen_exception)# 14
-	.word _C_LABEL(mips1_user_gen_exception)# 15
-	.word _C_LABEL(mips1_user_gen_exception)# 16
-	.word _C_LABEL(mips1_user_gen_exception)# 17
-	.word _C_LABEL(mips1_user_gen_exception)# 18
-	.word _C_LABEL(mips1_user_gen_exception)# 19
-	.word _C_LABEL(mips1_user_gen_exception)# 20
-	.word _C_LABEL(mips1_user_gen_exception)# 21
-	.word _C_LABEL(mips1_user_gen_exception)# 22
-	.word _C_LABEL(mips1_user_gen_exception)# 23
-	.word _C_LABEL(mips1_user_gen_exception)# 24
-	.word _C_LABEL(mips1_user_gen_exception)# 25
-	.word _C_LABEL(mips1_user_gen_exception)# 26
-	.word _C_LABEL(mips1_user_gen_exception)# 27
-	.word _C_LABEL(mips1_user_gen_exception)# 28
-	.word _C_LABEL(mips1_user_gen_exception)# 29
-	.word _C_LABEL(mips1_user_gen_exception)# 20
-	.word _C_LABEL(mips1_user_gen_exception)# 31
+	PTR_WORD _C_LABEL(MIPSX(user_intr))	#  0
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))#  1
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))#  2
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))#  3
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))#  4
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))#  5
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))#  6
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))#  7
+	PTR_WORD _C_LABEL(MIPSX(systemcall))	#  8
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))#  9
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 10
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 11
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 12
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 13
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 14
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 15
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 16
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 17
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 18
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 19
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 20
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 21
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 22
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 23
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 24
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 25
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 26
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 27
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 28
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 29
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 20
+	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))# 31
Index: /trunk/src/sys/arch/mips/mips/locore_mips3.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/locore_mips3.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/locore_mips3.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: locore_mips3.S,v 1.93.38.9 2010/05/14 22:26:00 matt Exp $	*/
+/*	locore_mips3.S,v 1.93.38.12 2011/04/29 08:26:26 matt Exp	*/
 
 /*
@@ -111,9 +111,4 @@
  *	tlbp		-- one integer op afterwards
  * Obvious solution is to take least common denominator.
- *
- * For the Toshiba R5900, TX79:
- *	mtc0		following sync.p
- *	tlbw[ri], tlbp	following sync.p or eret
- * for those CPU, define COP0_SYNC as sync.p
  */
 
@@ -130,4 +125,12 @@
 	.set	mips3
 
+#ifdef _LP64
+#define	_MFC0	dmfc0
+#define	_MTC0	dmtc0
+#else
+#define	_MFC0	mfc0
+#define	_MTC0	mtc0
+#endif
+
 	.text
 
@@ -149,16 +152,17 @@
  */
 LEAF(mips3_wbflush)
-XLEAF(mips5900_wbflush)
 XLEAF(mips32_wbflush)
+XLEAF(mips32r2_wbflush)
 XLEAF(mips64_wbflush)
+XLEAF(mips64r2_wbflush)
+XLEAF(mips64_rmixl_wbflush)
+XLEAF(mips64r2_rmixl_wbflush)
 	nop
 	sync
 	j	ra
-	nop
+	 nop
 END(mips3_wbflush)
 
 
-/* XXX simonb: ugg, another ugly #ifdef check... */
-#if (defined(MIPS3) && !defined(MIPS3_5900)) || defined(MIPS32) || defined(MIPS64)
 /*
  * mips_wait_idle:
@@ -171,10 +175,11 @@
 	andi	v1, v0, MIPS_SR_INT_IE
 	beqz	v1, 1f
-	nop
+	 nop
 	andi	v1, v0, MIPS_INT_MASK
 	bnez	v1, 2f
-	nop
+	 nop
 1:
-	PANIC("mips_wait_idle: interrupts disabled")
+	move	a1, v0
+	PANIC("mips_wait_idle: interrupts disabled status=%#x")
 
 2:	wait
@@ -183,7 +188,6 @@
 	nop
 	j	ra
-	nop
+	 nop
 END(mips_wait_idle)
-#endif /* (MIPS3 && !MIPS3_5900) || MIPS32 || MIPS64 */
 
 /*
@@ -195,5 +199,5 @@
 	mfc0	v0, MIPS_COP_0_COMPARE
 	j	ra
-	nop
+	 nop
 END(mips3_cp0_compare_read)
 
@@ -205,9 +209,5 @@
 LEAF(mips3_cp0_compare_write)
 	mtc0	a0, MIPS_COP_0_COMPARE
-	COP0_SYNC
-	nop
-	nop
-	j	ra
-	nop
+	JR_HB_RA
 END(mips3_cp0_compare_write)
 
@@ -220,5 +220,5 @@
 	mfc0	v0, MIPS_COP_0_CONFIG
 	j	ra
-	nop
+	 nop
 END(mips3_cp0_config_read)
 
@@ -230,12 +230,14 @@
 LEAF(mips3_cp0_config_write)
 	mtc0	a0, MIPS_COP_0_CONFIG
-	COP0_SYNC
-	nop
-	nop
-	j	ra
-	nop
+	JR_HB_RA
 END(mips3_cp0_config_write)
 
-#if defined(MIPS32) || defined(MIPS64)
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	.set push
+#ifdef _LP64
+	.set mips64
+#else
+	.set mips32
+#endif
 /*
  * uint32_t mipsNN_cp0_config1_read(void)
@@ -244,10 +246,7 @@
  */
 LEAF(mipsNN_cp0_config1_read)
-	.set push
-	.set mips32
 	mfc0	v0, MIPS_COP_0_CONFIG, 1
 	j	ra
-	nop
-	.set pop
+	 nop
 END(mipsNN_cp0_config1_read)
 
@@ -255,14 +254,9 @@
  * uint32_t mipsNN_cp0_config1_write(uint32_t)
  *
- *	Return the current value of the CP0 Config (Select 1) register.
+ *	Set the current value of the CP0 Config (Select 1) register.
  */
 LEAF(mipsNN_cp0_config1_write)
-	.set push
-	.set mips32
 	mtc0	v0, MIPS_COP_0_CONFIG, 1
-	nop
-	j	ra
-	nop
-	.set pop
+	JR_HB_RA
 END(mipsNN_cp0_config1_write)
 
@@ -273,10 +267,7 @@
  */
 LEAF(mipsNN_cp0_config2_read)
-	.set push
-	.set mips32
 	mfc0	v0, MIPS_COP_0_CONFIG, 2
 	j	ra
-	nop
-	.set pop
+	 nop
 END(mipsNN_cp0_config2_read)
 
@@ -287,12 +278,150 @@
  */
 LEAF(mipsNN_cp0_config3_read)
-	.set push
-	.set mips32
 	mfc0	v0, MIPS_COP_0_CONFIG, 3
 	j	ra
-	nop
-	.set pop
+	 nop
 END(mipsNN_cp0_config3_read)
-#endif /* MIPS32 || MIPS64 */
+
+/*
+ * uintptr_t mipsNN_cp0_watchlo_read(u_int sel)
+ *
+ *	Return the current value of the selected CP0 Watchlo register.
+ */
+LEAF(mipsNN_cp0_watchlo_read)
+	sll	a0, 2
+	PTR_LA	t9, 1f
+	PTR_ADDU t9, a0
+	jr	t9
+	 nop
+1:
+	jr	ra
+	 _MFC0	v0, MIPS_COP_0_WATCH_LO, 0
+	jr	ra
+	 _MFC0	v0, MIPS_COP_0_WATCH_LO, 1
+	jr	ra
+	 _MFC0	v0, MIPS_COP_0_WATCH_LO, 2
+	jr	ra
+	 _MFC0	v0, MIPS_COP_0_WATCH_LO, 3
+	jr	ra
+	 _MFC0	v0, MIPS_COP_0_WATCH_LO, 4
+	jr	ra
+	 _MFC0	v0, MIPS_COP_0_WATCH_LO, 5
+	jr	ra
+	 _MFC0	v0, MIPS_COP_0_WATCH_LO, 6
+	jr	ra
+	 _MFC0	v0, MIPS_COP_0_WATCH_LO, 7
+END(mipsNN_cp0_watchlo_read)
+
+/*
+ * void mipsNN_cp0_watchlo_write(u_int sel, uintptr_t val)
+ *
+ *	Set the current value of the selected CP0 WatchLo register.
+ */
+LEAF(mipsNN_cp0_watchlo_write)
+	sll	a0, 2
+	PTR_LA	t9, 1f
+	PTR_ADDU t9, a0
+	jr	t9
+	 nop
+1:
+	jr	ra
+	 _MTC0	a1, MIPS_COP_0_WATCH_LO, 0
+	jr	ra
+	 _MTC0	a1, MIPS_COP_0_WATCH_LO, 1
+	jr	ra
+	 _MTC0	a1, MIPS_COP_0_WATCH_LO, 2
+	jr	ra
+	 _MTC0	a1, MIPS_COP_0_WATCH_LO, 3
+	jr	ra
+	 _MTC0	a1, MIPS_COP_0_WATCH_LO, 4
+	jr	ra
+	 _MTC0	a1, MIPS_COP_0_WATCH_LO, 5
+	jr	ra
+	 _MTC0	a1, MIPS_COP_0_WATCH_LO, 6
+	jr	ra
+	 _MTC0	a1, MIPS_COP_0_WATCH_LO, 7
+END(mipsNN_cp0_watchlo_write)
+
+/*
+ * uint32_t mipsNN_cp0_watchhi_read(u_int sel)
+ *
+ *	Return the current value of the selected CP0 WatchHi register.
+ */
+LEAF(mipsNN_cp0_watchhi_read)
+	sll	a0, 2
+	PTR_LA	t9, 1f
+	PTR_ADDU t9, a0
+	jr	t9
+	 nop
+1:
+	jr	ra
+	 mfc0	v0, MIPS_COP_0_WATCH_HI, 0
+	jr	ra
+	 mfc0	v0, MIPS_COP_0_WATCH_HI, 1
+	jr	ra
+	 mfc0	v0, MIPS_COP_0_WATCH_HI, 2
+	jr	ra
+	 mfc0	v0, MIPS_COP_0_WATCH_HI, 3
+	jr	ra
+	 mfc0	v0, MIPS_COP_0_WATCH_HI, 4
+	jr	ra
+	 mfc0	v0, MIPS_COP_0_WATCH_HI, 5
+	jr	ra
+	 mfc0	v0, MIPS_COP_0_WATCH_HI, 6
+	jr	ra
+	 mfc0	v0, MIPS_COP_0_WATCH_HI, 7
+END(mipsNN_cp0_watchhi_read)
+
+/*
+ * void mipsNN_cp0_watchhi_write(u_int sel, uint32_t val)
+ *
+ *	Set the current value of the selected CP0 WatchHi register.
+ */
+LEAF(mipsNN_cp0_watchhi_write)
+	sll	a0, 2
+	PTR_LA	t9, 1f
+	PTR_ADDU t9, a0
+	jr	t9
+	 nop
+1:
+	jr	ra
+	 mtc0	a1, MIPS_COP_0_WATCH_HI, 0
+	jr	ra
+	 mtc0	a1, MIPS_COP_0_WATCH_HI, 1
+	jr	ra
+	 mtc0	a1, MIPS_COP_0_WATCH_HI, 2
+	jr	ra
+	 mtc0	a1, MIPS_COP_0_WATCH_HI, 3
+	jr	ra
+	 mtc0	a1, MIPS_COP_0_WATCH_HI, 4
+	jr	ra
+	 mtc0	a1, MIPS_COP_0_WATCH_HI, 5
+	jr	ra
+	 mtc0	a1, MIPS_COP_0_WATCH_HI, 6
+	jr	ra
+	 mtc0	a1, MIPS_COP_0_WATCH_HI, 7
+END(mipsNN_cp0_watchhi_write)
+
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+/*
+ * void mipsNN_cp0_userlocal_write(void *);
+ *	Set the value of the CP0 USERLOCAL (TLB_CONTEXT, select 2) register.
+ */
+LEAF(mipsNN_cp0_hwrena_write)
+	j	ra
+	 mtc0	a0, MIPS_COP_0_HWRENA
+END(mipsNN_cp0_hwrena_write)
+
+/*
+ * void mipsNN_cp0_userlocal_write(void *);
+ *	Set the value of the CP0 USERLOCAL (TLB_CONTEXT, select 2) register.
+ */
+LEAF(mipsNN_cp0_userlocal_write)
+	j	ra
+	 _MTC0	a0, MIPS_COP_0_TLB_CONTEXT, 2
+END(mipsNN_cp0_userlocal_write)
+#endif /* (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0 */
+	.set	pop
+#endif /* (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0 */
 
 /*
@@ -304,5 +433,5 @@
 	mfc0	v0, MIPS_COP_0_COUNT
 	j	ra
-	nop
+	 nop
 END(mips3_cp0_count_read)
 WEAK_ALIAS(cpu_counter32, mips3_cp0_count_read)
@@ -315,9 +444,5 @@
 LEAF(mips3_cp0_count_write)
 	mtc0	a0, MIPS_COP_0_COUNT
-	COP0_SYNC
-	nop
-	nop
-	j	ra
-	nop
+	JR_HB_RA
 END(mips3_cp0_count_write)
 
@@ -330,5 +455,5 @@
 	mfc0	v0, MIPS_COP_0_TLB_WIRED
 	j	ra
-	nop
+	 nop
 END(mips3_cp0_wired_read)
 
@@ -340,9 +465,5 @@
 LEAF(mips3_cp0_wired_write)
 	mtc0	a0, MIPS_COP_0_TLB_WIRED
-	COP0_SYNC
-	nop
-	nop
-	j	ra
-	nop
+	JR_HB_RA
 END(mips3_cp0_wired_write)
 
@@ -354,9 +475,5 @@
 LEAF(mips3_cp0_pg_mask_write)
 	mtc0	a0, MIPS_COP_0_TLB_PG_MASK
-	COP0_SYNC
-	nop
-	nop
-	j	ra
-	nop
+	JR_HB_RA
 END(mips3_cp0_pg_mask_write)
 
@@ -367,7 +484,4 @@
 	mtc0	t1, MIPS_COP_0_STATUS
 	COP0_SYNC
-	nop
-	nop
-	nop
 
 	ld	v0, 0(a0)
@@ -388,12 +502,10 @@
 
 	mtc0	t0, MIPS_COP_0_STATUS		# restore intr status.
-	COP0_SYNC
-	nop
+	JR_HB_RA
 #else /* !__mips_o32 */
 	ld	v0, 0(a0)
+	jr	ra
+	 nop
 #endif /* !__mips_o32 */
-
-	jr	ra
-	nop
 END(mips3_ld)
 
@@ -404,7 +516,4 @@
 	mtc0	t1, MIPS_COP_0_STATUS
 	COP0_SYNC
-	nop
-	nop
-	nop
 
 #if defined(_MIPS_BSD_API) && \
@@ -428,12 +537,11 @@
 
 	mtc0	t0, MIPS_COP_0_STATUS		# restore intr status.
-	COP0_SYNC
-	nop
+	JR_HB_RA
 #else /* !__mips_o32 */
 	sd	a1, 0(a0)
+	jr	ra
+	 nop
 #endif /* !__mips_o32 */
 
-	jr	ra
-	nop
 END(mips3_sd)
 
@@ -444,5 +552,5 @@
  */
 LEAF(badaddr64)
-	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	PTR_LA	v0, _C_LABEL(baderr64)
 
@@ -472,17 +580,17 @@
 
 	bne	a1, 1, 2f
-	PTR_S	v0, U_PCB_ONFAULT(v1)
+	 PTR_S	v0, PCB_ONFAULT(v1)
 	b	9f
-	lbu	v0, (a0)
+	 lbu	v0, (a0)
 2:
 	bne	a1, 2, 4f
-	nop
+	 nop
 	b	9f
-	lhu	v0, (a0)
+	 lhu	v0, (a0)
 4:
 	bne	a1, 4, 8f
-	nop
+	 nop
 	b	9f
-	INT_L	v0, (a0)
+	 INT_L	v0, (a0)
 8:
 	REG_L	v0, (a0)
@@ -491,9 +599,7 @@
 	mtc0	t0, MIPS_COP_0_STATUS           # Restore KX
 	COP0_SYNC
-	nop
-	nop
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	move	v0, zero			# made it w/o errors
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 move	v0, zero			# made it w/o errors
 END(badaddr64)
 
@@ -501,7 +607,7 @@
 	mtc0	t0, MIPS_COP_0_STATUS		# Restore KX
 	COP0_SYNC
-	PTR_S	zero, U_PCB_ONFAULT(v1)
-	j	ra
-	li	v0, -1
+	PTR_S	zero, PCB_ONFAULT(v1)
+	j	ra
+	 li	v0, -1
 END(baderr64)
 
@@ -519,6 +625,4 @@
 	dmtc0	v0, MIPS_COP_0_TLB_HI
 	COP0_SYNC
-	nop
-	nop
 	dmfc0	v0, MIPS_COP_0_TLB_HI
 	dmtc0	t0, MIPS_COP_0_TLB_HI
@@ -551,12 +655,8 @@
 	dmtc0	v0, MIPS_COP_0_TLB_LO0
 	COP0_SYNC
-	nop
-	nop
 	dmfc0	v0, MIPS_COP_0_TLB_LO0
 	dmtc0	t0, MIPS_COP_0_TLB_LO0
 	COP0_SYNC
-	nop
 #ifdef __mips_o32
-	nop
 #if BYTE_ORDER == BIG_ENDIAN
 	srl	v1, v0, 0
@@ -584,12 +684,7 @@
 	mtc0	v0, MIPS_COP_0_TLB_PG_MASK
 	COP0_SYNC
-	nop
-	nop
 	mfc0	v0, MIPS_COP_0_TLB_PG_MASK
 	mtc0	t0, MIPS_COP_0_TLB_PG_MASK
-	COP0_SYNC
-	nop
-	j	ra
-	 nop
+	JR_HB_RA
 END(mips3_cp0_tlb_page_mask_probe)
 
@@ -614,5 +709,5 @@
 
 #ifdef _LP64
-	li	v0, MIPS_SR_KX			# allow 64bit addressing
+	li	v0, MIPS_SR_KX | MIPS_SR_UX	# allow 64bit addressing
 #else
 	li	v0, 0
Index: /trunk/src/sys/arch/mips/mips/mem.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/mem.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mem.c	(revision 152)
@@ -1,5 +1,6 @@
-/*	$NetBSD: mem.c,v 1.35.38.5 2010/01/26 21:19:25 matt Exp $	*/
+/*	$NetBSD: mem.c,v 1.35.38.6 2011/04/29 08:26:27 matt Exp $	*/
 
 /*
+ * Copyright (c) 1988 University of Utah.
  * Copyright (c) 1982, 1986, 1990, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -35,41 +36,4 @@
  *	@(#)mem.c	8.3 (Berkeley) 1/12/94
  */
-/*
- * Copyright (c) 1988 University of Utah.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *	@(#)mem.c	8.3 (Berkeley) 1/12/94
- */
 
 /*
@@ -81,5 +45,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mem.c,v 1.35.38.5 2010/01/26 21:19:25 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mem.c,v 1.35.38.6 2011/04/29 08:26:27 matt Exp $");
 
 #include <sys/param.h>
@@ -120,8 +84,5 @@
 /*ARGSUSED*/
 int
-mmrw(dev, uio, flags)
-	dev_t dev;
-	struct uio *uio;
-	int flags;
+mmrw(dev_t dev, struct uio *uio, int flags)
 {
 	vaddr_t v;
@@ -164,5 +125,20 @@
 			v = uio->uio_offset;
 			c = min(iov->iov_len, MAXPHYS);
-			if (v < MIPS_KSEG0_START)
+#ifdef _LP64
+			if (v < MIPS_XKPHYS_START) {
+				return (EFAULT);
+			} else if (MIPS_XKPHYS_P(v)
+			    && v > MIPS_PHYS_TO_XKPHYS_CACHED(mips_avail_end +
+					mips_round_page(MSGBUFSIZE) - c)) {
+				return (EFAULT);
+			} else if (MIPS_XKSEG_P(v)
+			    && v < MIPS_KSEG0_START
+			    && !uvm_kernacc((void *)v, c,
+			    uio->uio_rw == UIO_READ ? B_READ : B_WRITE)) {
+				return (EFAULT);
+			} else if (MIPS_KSEG1_P(v) || MIPS_KSEG2_P(v)) {
+				return (EFAULT);
+			}
+#else
 			if (v < MIPS_KSEG0_START)
 				return (EFAULT);
@@ -173,4 +149,5 @@
 			    uio->uio_rw == UIO_READ ? B_READ : B_WRITE)))
 				return (EFAULT);
+#endif
 			error = uiomove((void *)v, c, uio);
 #if defined(MIPS3_PLUS) && !defined(TSAR)
Index: /trunk/src/sys/arch/mips/mips/mips32_subr.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips32_subr.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips32_subr.S	(revision 152)
@@ -1,14 +1,13 @@
-/*	$NetBSD: mips32_subr.S,v 1.3.96.1 2010/01/16 20:56:33 matt Exp $	*/
+/*	mips32_subr.S,v 1.3.96.2 2011/04/29 08:26:27 matt Exp	*/
 
 #undef MIPS1
 #undef MIPS3
 /* #undef MIPS32 */
+#undef MIPS32R2
 #undef MIPS64
+#undef MIPS64R2
 #undef MIPS64_SB1
-#undef MIPS64_XLP
-#undef MIPS64_XLR
-#undef MIPS64_XLS
-
-#undef MIPS3_5900
+#undef MIPS64R2_RMIXL
+#undef MIPS64_RMIXL
 
 #include <mips/mips/mipsX_subr.S>
Index: /trunk/src/sys/arch/mips/mips/mips32r2_subr.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips32r2_subr.S	(revision 152)
+++ /trunk/src/sys/arch/mips/mips/mips32r2_subr.S	(revision 152)
@@ -0,0 +1,13 @@
+/*	mips32r2_subr.S,v 1.1.4.2 2011/04/29 08:26:27 matt Exp	*/
+
+#undef MIPS1
+#undef MIPS3
+#undef MIPS32
+/* #undef MIPS32R2 */
+#undef MIPS64
+#undef MIPS64R2
+#undef MIPS64_SB1
+#undef MIPS64R2_RMIXL
+#undef MIPS64_RMIXL
+
+#include <mips/mips/mipsX_subr.S>
Index: /trunk/src/sys/arch/mips/mips/mips3_clock.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips3_clock.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips3_clock.c	(revision 152)
@@ -1,5 +1,6 @@
-/*	$NetBSD: mips3_clock.c,v 1.10.28.1 2010/01/20 06:58:36 matt Exp $	*/
+/*	$NetBSD: mips3_clock.c,v 1.10.28.3 2011/04/29 08:26:27 matt Exp $	*/
 
 /*
+ * Copyright (c) 1988 University of Utah.
  * Copyright (c) 1992, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -37,47 +38,8 @@
  *	@(#)clock.c	8.1 (Berkeley) 6/10/93
  */
-/*
- * Copyright (c) 1988 University of Utah.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Utah Hdr: clock.c 1.18 91/01/21
- *
- *	@(#)clock.c	8.1 (Berkeley) 6/10/93
- */
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: mips3_clock.c,v 1.10.28.1 2010/01/20 06:58:36 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips3_clock.c,v 1.10.28.3 2011/04/29 08:26:27 matt Exp $");
 
 #include <sys/param.h>
Index: /trunk/src/sys/arch/mips/mips/mips3_clockintr.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips3_clockintr.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips3_clockintr.c	(revision 152)
@@ -1,5 +1,6 @@
-/*	$NetBSD: mips3_clockintr.c,v 1.8.12.2 2010/03/21 18:45:53 cliff Exp $	*/
+/*	$NetBSD: mips3_clockintr.c,v 1.8.12.3 2011/04/29 08:26:27 matt Exp $	*/
 
 /*
+ * Copyright (c) 1988 University of Utah.
  * Copyright (c) 1992, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -37,47 +38,7 @@
  *	@(#)clock.c	8.1 (Berkeley) 6/10/93
  */
-/*
- * Copyright (c) 1988 University of Utah.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Utah Hdr: clock.c 1.18 91/01/21
- *
- *	@(#)clock.c	8.1 (Berkeley) 6/10/93
- */
 
-#include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-
-__KERNEL_RCSID(0, "$NetBSD: mips3_clockintr.c,v 1.8.12.2 2010/03/21 18:45:53 cliff Exp $");
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: mips3_clockintr.c,v 1.8.12.3 2011/04/29 08:26:27 matt Exp $");
 
 #include <sys/param.h>
@@ -104,5 +65,5 @@
 	uint32_t new_cnt;
 
-	ci->ci_count_compare_evcnt.ev_count++;
+	ci->ci_ev_count_compare.ev_count++;
 
 	KASSERT((ci->ci_cycles_per_hz & ~(0xffffffff)) == 0);
@@ -121,5 +82,5 @@
 		ci->ci_next_cp0_clk_intr = new_cnt + curcpu()->ci_cycles_per_hz;
 		mips3_cp0_compare_write(ci->ci_next_cp0_clk_intr);
-		curcpu()->ci_count_compare_missed_evcnt.ev_count++;
+		curcpu()->ci_ev_count_compare_missed.ev_count++;
 	}
 
Index: /trunk/src/sys/arch/mips/mips/mips3_subr.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips3_subr.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips3_subr.S	(revision 152)
@@ -1,14 +1,13 @@
-/*	$NetBSD: mips3_subr.S,v 1.3.96.1 2010/01/16 20:56:33 matt Exp $	*/
+/*	mips3_subr.S,v 1.3.96.2 2011/04/29 08:26:27 matt Exp	*/
 
 #undef MIPS1
 /* #undef MIPS3 */
 #undef MIPS32
+#undef MIPS32R2
 #undef MIPS64
+#undef MIPS64R2
 #undef MIPS64_SB1
-#undef MIPS64_XLP
-#undef MIPS64_XLR
-#undef MIPS64_XLS
-
-#undef MIPS3_5900
+#undef MIPS64R2_RMIXL
+#undef MIPS64_RMIXL
 
 #include <mips/mips/mipsX_subr.S>
Index: unk/src/sys/arch/mips/mips/mips5900_subr.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips5900_subr.S	(revision 151)
+++ 	(revision )
@@ -1,52 +1,0 @@
-/*	$NetBSD: mips5900_subr.S,v 1.4.96.1 2010/01/16 20:56:33 matt Exp $	*/
-
-#undef MIPS1
-/* #undef MIPS3 */
-#undef MIPS32
-#undef MIPS64
-#undef MIPS64_SB1
-#undef MIPS64_XLP
-#undef MIPS64_XLR
-#undef MIPS64_XLS
-
-/* #undef MIPS3_5900 */
-
-#include <mips/mips/mipsX_subr.S>
-
-
-/* Toshiba R5900 specific functions */
-
-#include <mips/asm.h>
-#include <mips/cpuregs.h>
-
-	.set	noreorder       
-	.set	mips3
-	.text
-	.align 6	/* align cache line size (64B) */
-
-/*
- * _intr_resume, _intr_suspend:        
- *	Fast interrupt locking functions.
- */    
-LEAF_NOPROFILE(_intr_resume)
-	beqz	a0, 1f
-	nop
-	ei
-1:     
-	j	ra
-	nop
-END(_intr_resume)
-
-LEAF_NOPROFILE(_intr_suspend)
-	mfc0	v0, MIPS_COP_0_STATUS       
-	lui	t0, 0x1		/* EIE bit */
-	and	v0, v0, t0
-1:	di
-	sync.p
-	mfc0	t1, MIPS_COP_0_STATUS
-	and	t2, t0, t1
-	beq	t2, t0, 1b
-	nop
-	j	ra
-	nop
-END(_intr_suspend)
Index: /trunk/src/sys/arch/mips/mips/mips64_rmixl_subr.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips64_rmixl_subr.S	(revision 152)
+++ /trunk/src/sys/arch/mips/mips/mips64_rmixl_subr.S	(revision 152)
@@ -0,0 +1,13 @@
+/*	mips64_subr.S,v 1.3.96.2 2011/04/29 08:26:27 matt Exp	*/
+
+#undef MIPS1
+#undef MIPS3
+#undef MIPS32
+#undef MIPS32R2
+#undef MIPS64
+#undef MIPS64R2
+#undef MIPS64_SB1
+/* #define MIPS64_RMIXL */
+#undef MIPS64R2_RMIXL
+
+#include <mips/mips/mipsX_subr.S>
Index: /trunk/src/sys/arch/mips/mips/mips64_subr.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips64_subr.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips64_subr.S	(revision 152)
@@ -1,14 +1,13 @@
-/*	$NetBSD: mips64_subr.S,v 1.3.96.1 2010/01/16 20:56:33 matt Exp $	*/
+/*	mips64_subr.S,v 1.3.96.2 2011/04/29 08:26:27 matt Exp	*/
 
 #undef MIPS1
 #undef MIPS3
 #undef MIPS32
+#undef MIPS32R2
 /* #undef MIPS64 */
+#undef MIPS64R2
 #undef MIPS64_SB1
-#undef MIPS64_XLP
-#undef MIPS64_XLR
-#undef MIPS64_XLS
-
-#undef MIPS3_5900
+#undef MIPS64R2_RMIXL
+#undef MIPS64_RMIXL
 
 #include <mips/mips/mipsX_subr.S>
Index: /trunk/src/sys/arch/mips/mips/mips64r2_rmixl_subr.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips64r2_rmixl_subr.S	(revision 152)
+++ /trunk/src/sys/arch/mips/mips/mips64r2_rmixl_subr.S	(revision 152)
@@ -0,0 +1,13 @@
+/*	mips64_subr.S,v 1.3.96.2 2011/04/29 08:26:27 matt Exp	*/
+
+#undef MIPS1
+#undef MIPS3
+#undef MIPS32
+#undef MIPS32R2
+#undef MIPS64
+#undef MIPS64R2
+#undef MIPS64_SB1
+#undef MIPS64_RMIXL
+/* #define MIPS64R2_RMIXL */
+
+#include <mips/mips/mipsX_subr.S>
Index: /trunk/src/sys/arch/mips/mips/mips64r2_subr.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips64r2_subr.S	(revision 152)
+++ /trunk/src/sys/arch/mips/mips/mips64r2_subr.S	(revision 152)
@@ -0,0 +1,13 @@
+/*	mips64r2_subr.S,v 1.1.4.2 2011/04/29 08:26:28 matt Exp	*/
+
+#undef MIPS1
+#undef MIPS3
+#undef MIPS32
+#undef MIPS32R2
+#undef MIPS64
+/* #undef MIPS64R2 */
+#undef MIPS64_SB1
+#undef MIPS64R2_RMIXL
+#undef MIPS64_RMIXL
+
+#include <mips/mips/mipsX_subr.S>
Index: /trunk/src/sys/arch/mips/mips/mipsX_subr.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/mipsX_subr.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mipsX_subr.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mipsX_subr.S,v 1.26.36.1.2.31 2010/04/28 03:14:45 matt Exp $	*/
+/*	$NetBSD: mipsX_subr.S,v 1.26.36.1.2.44 2011/05/28 02:20:13 matt Exp $	*/
 
 /*
@@ -120,4 +120,5 @@
 #include "opt_kgdb.h"
 #include "opt_mips3_wired.h"
+#include "opt_multiprocessor.h"
 #include "opt_vmswap.h"
 
@@ -126,5 +127,5 @@
 #include <mips/asm.h>
 #include <mips/cpuregs.h>
-#if defined(MIPS3) && !defined(MIPS3_5900)
+#if defined(MIPS3)
 #include <mips/cache_r4k.h>
 #endif
@@ -148,14 +149,10 @@
 #endif
 
-/*
- * XXX MIPS3_5900 is still "special" for much of this code.
- */
-
 #if MIPS1
 #error This file can not be compiled with MIPS1 defined
 #endif
 
-#if MIPS3 + MIPS32 + MIPS64 != 1
-# error  Only one of MIPS{3,32,64} can be defined
+#if (MIPS3 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) != 1
+# error  Only one of MIPS{3,32,32R2,64,64R2} can be defined
 #endif
 
@@ -163,21 +160,15 @@
  * Use 64bit cp0 instructions?
  */
-#if defined(MIPS3)
+#if (MIPS3 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 #define	USE_64BIT_INSTRUCTIONS
-#if defined(MIPS3_5900)		/* the 5900 has mips32-like mmu registers */
-#undef	USE_64BIT_CP0_FUNCTIONS
-#else
 #define	USE_64BIT_CP0_FUNCTIONS
-#endif
-#endif
-
-#if defined(MIPS32)
+#elif (MIPS32 + MIPS32R2) > 0
+#ifdef _LP64
+#error	MIPS32 and MIPS32R2 can't run 64-bit kernels.
+#endif
 #undef	USE_64BIT_INSTRUCTIONS
 #undef	USE_64BIT_CP0_FUNCTIONS
-#endif
-
-#if defined(MIPS64)
-#define	USE_64BIT_INSTRUCTIONS
-#define	USE_64BIT_CP0_FUNCTIONS
+#else
+#error	One of MIPS{3,32,32R2,64{,_RMIXL},64R2{,_RMIXL}} must be defined
 #endif
 
@@ -191,9 +182,15 @@
 #define	_SLL		dsll
 #define	_SRL		dsrl
+#define	_EXT		dext
+#define	_INS		dins
 #define	WIRED_SHIFT	34
+#define	WIRED_POS	30
 #else
 #define	_SLL		sll
 #define	_SRL		srl
+#define	_EXT		ext
+#define	_INS		ins
 #define	WIRED_SHIFT	2
+#define	WIRED_POS	30
 #endif
 
@@ -221,8 +218,19 @@
 #endif
 
+#if defined(MIPS32R2)
+	.set	mips32r2
+#endif
+
 #if defined(MIPS64)
 	.set	mips64
 #endif
 
+#if defined(MIPS64R2)
+	.set	mips64r2
+#endif
+
+#if defined(MIPS64_RMIXL) || defined(MIPS64R2_RMIXL)
+	.set	arch=xlr
+#endif
 
 /*
@@ -231,34 +239,29 @@
 
 #if defined(MIPS3)
-#ifdef __STDC__
-#define	MIPSX(name)	mips3_ ## name
-#else
-#define	MIPSX(name)	mips3_/**/name
-#endif
-#endif
-
-#if defined(MIPS3_5900)
-#undef MIPSX
-#ifdef __STDC__
-#define	MIPSX(name)	mips5900_ ## name
-#else
-#define	MIPSX(name)	mips5900_/**/name
-#endif
-#endif
-	
+#define	MIPSX(name)	__CONCAT(mips3_,name)
+#endif
+
 #if defined(MIPS32)
-#ifdef __STDC__
-#define	MIPSX(name)	mips32_ ## name
-#else
-#define	MIPSX(name)	mips32_/**/name
-#endif
+#define	MIPSX(name)	__CONCAT(mips32_,name)
+#endif
+
+#if defined(MIPS32R2)
+#define	MIPSX(name)	__CONCAT(mips32r2_,name)
 #endif
 
 #if defined(MIPS64)
-#ifdef __STDC__
-#define	MIPSX(name)	mips64_ ## name
-#else
-#define	MIPSX(name)	mips64_/**/name
-#endif
+#define	MIPSX(name)	__CONCAT(mips64_,name)
+#endif
+
+#if defined(MIPS64R2)
+#define	MIPSX(name)	__CONCAT(mips64r2_,name)
+#endif
+
+#if defined(MIPS64_RMIXL)
+#define	MIPSX(name)	__CONCAT(mips64_rmixl_,name)
+#endif
+
+#if defined(MIPS64R2_RMIXL)
+#define	MIPSX(name)	__CONCAT(mips64r2_rmixl_,name)
 #endif
 
@@ -280,9 +283,4 @@
  *	tlbp		-- one integer op afterwards
  * Obvious solution is to take least common denominator.
- *
- * For the Toshiba R5900, TX79:
- *	mtc0		following sync.p
- *	tlbw[ri], tlbp	following sync.p or eret
- * for those CPU, define COP0_SYNC as sync.p
  */
 
@@ -300,5 +298,5 @@
 
 /*
- * TLB handling data.   'CPUVAR(PMAP_SEGBASE)' points to the base of the segment
+ * TLB handling data.   'CPUVAR(PMAP_SEG0TAB)' points to the base of the segment
  * table.   this is read and written by C code in mips_machdep.c.
  *
@@ -333,5 +331,5 @@
  *----------------------------------------------------------------------------
  *
- * mips3_tlb_miss --
+ * mipsN_tlb_miss --
  *
  *	Vector code for the TLB-miss exception vector 0x80000000
@@ -348,41 +346,79 @@
 VECTOR(MIPSX(tlb_miss), unknown)
 	.set	noat
-	_MFC0	k0, MIPS_COP_0_BAD_VADDR	#00: k0=bad address
-	lui	k1, %hi(CPUVAR(PMAP_SEGBASE))	#01: k1=hi of segbase
-	bltz	k0, MIPSX(kernelfault)		#02: k0<0 -> 4f (kernel fault)
-	 PTR_SRL k0, (2*PGSHIFT-2-PTR_SCALESHIFT)#03: k0=seg offset (almost)
-	PTR_L	k1, %lo(CPUVAR(PMAP_SEGBASE))(k1)#04: k1=segment tab base
-	andi	k0, (NBPG-(1<<PTR_SCALESHIFT))	#05: k0=seg offset (mask 0x3)
-	PTR_ADDU k1, k0				#06: k1=seg entry address
-	PTR_L	k1, 0(k1)			#07: k1=seg entry
-	_MFC0	k0, MIPS_COP_0_BAD_VADDR	#08: k0=bad address (again)
-	beqz	k1, MIPSX(nopagetable)		#09: ==0 -- no page table
-	 PTR_SRL k0, (PGSHIFT-2)		#0a: k0=VPN (aka va>>10)
-	andi	k0, (NBPG-8)			#0b: k0=page tab offset
-	PTR_ADDU k1, k0				#0c: k1=pte address
-	INT_L	k0, 0(k1)			#0d: k0=lo0 pte
-	INT_L	k1, 4(k1)			#0e: k1=lo1 pte
-	_SLL	k0, WIRED_SHIFT			#0f: chop top 2 bits (part 1a)
-	_SRL	k0, WIRED_SHIFT			#10: chop top 2 bits (part 1b)
-#ifdef MIPS3_5900
-	_MTC0	k0, MIPS_COP_0_TLB_LO0		#11: lo0 is loaded
-	sync.p					#12: R5900 cop0 hazard
-	_SLL	k1, WIRED_SHIFT			#13: chop top 2 bits (part 2a)
-	_SRL	k1, WIRED_SHIFT			#14: chop top 2 bits (part 2b)
+#if defined(MULTIPROCESSOR) && (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	_MFC0	k1, MIPS_COP_0_OSSCRATCH, 2	#00: get tlbinfo lock addr
+	li	k0, __SIMPLELOCK_LOCKED		#01: lock value
+	swapw	k0, k1				#02: swap it in place
+	bnez	k0, MIPSX(tlblocked)		#03: a lie
+						# lui in delay slot
+#endif
+	lui	k1, %hi(CPUVAR(PMAP_SEG0TAB))	#00: k1=hi of seg0tab
+	_MFC0	k0, MIPS_COP_0_BAD_VADDR	#01: k0=bad address
+	bltz	k0, MIPSX(kernelfault)		#02: k0<0 -> kernel fault
+	 PTR_SRL k0, 1*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2)#03: k0=seg offset (almost)
+	PTR_L	k1, %lo(CPUVAR(PMAP_SEG0TAB))(k1)#04: k1=seg0tab
+MIPSX(tlb_miss_common):
+#ifdef _LP64
+	beqz	k1, MIPSX(nopagetable)		#05: is there a pagetable?
+	 nop					#06
+#endif
+	andi	k0, (NBPG-(1<<PTR_SCALESHIFT))	#07: k0=seg offset (mask 0x3)
+	PTR_ADDU k1, k0				#08: k1=seg entry address
+	PTR_L	k1, 0(k1)			#09: k1=seg entry
+	_MFC0	k0, MIPS_COP_0_BAD_VADDR	#0a: k0=bad address (again)
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+	beqz	k1, MIPSX(nopagetable)		#0b: ==0 -- no page table
+	 _EXT	k0, k0, PGSHIFT+1, PGSHIFT-3	#0c: k0=VA[13:21]
+	_INS	k1, k0, 3, PGSHIFT-3		#0d: k0=page table index
+						#0d: k1=pte address
+#else
+	beqz	k1, MIPSX(nopagetable)		#0b: ==0 -- no page table
+	 PTR_SRL k0, (PGSHIFT-2)		#0c: k0=VPN (aka va>>10)
+	andi	k0, (NBPG-8)			#0d: k0=page table offset
+	PTR_ADDU k1, k0				#0e: k1=pte address
+#endif
+#if (MIPS64R2 + MIPS64R2_RMIXL) > 0
+	REG_L	k0, 0(k1)			#0f: load PTEs
+	_EXT	k1, k0, 32*_QUAD_HIGHWORD, WIRED_POS #10: extract lo1 pte
+	_EXT	k0, k0, 32*_QUAD_LOWWORD,  WIRED_POS #11: extract lo0 pte
+#elif (MIPS3 + MIPS64 + MIPS64_RMIXL) > 0
+	REG_L	k0, 0(k1)			#0f: load PTEs
+	_SLL	k1, k0, WIRED_SHIFT - 32*_QUAD_HIGHWORD #10: get lo1 pte
+	_SLL	k0, k0, WIRED_SHIFT - 32*_QUAD_LOWWORD  #11: get lo0 pte
+	_SRL	k0, WIRED_SHIFT			#12: chopped top 2 bits
+	_SRL	k1, WIRED_SHIFT			#13: chopped top 2 bits
+#elif (MIPS32 + MIPS32R2) > 0
+	INT_L	k0, 0(k1)			#0f: k0=lo0 pte
+	INT_L	k1, 4(k1)			#10: k1=lo1 pte
+#if (MIPS32R2) > 0
+	_EXT	k0, k0, 0, WIRED_POS		#11: chop top 2 bits
+	_EXT	k1, k1, 0, WIRED_POS		#12: chop top 2 bits
+#else
+	_SLL	k0, WIRED_SHIFT			#11: chop top 2 bits (part 1a)
+	_SLL	k1, WIRED_SHIFT			#11: chop top 2 bits (part 1a)
+	_SRL	k0, WIRED_SHIFT			#12: chop top 2 bits (part 1b)
+	_SRL	k1, WIRED_SHIFT			#13: chop top 2 bits (part 1b)
+#endif
+#else
+#error this shouldn't have happened
+#endif
+	_MTC0	k0, MIPS_COP_0_TLB_LO0		#14: lo0 is loaded
 	_MTC0	k1, MIPS_COP_0_TLB_LO1		#15: lo1 is loaded
-	sync.p					#16: R5900 cop0 hazard
-#else /* MIPS3_5900 */
-	_MTC0	k0, MIPS_COP_0_TLB_LO0		#11: lo0 is loaded
-	_SLL	k1, WIRED_SHIFT			#12: chop top 2 bits (part 2a)
-	_SRL	k1, WIRED_SHIFT			#13: chop top 2 bits (part 2b)
-	_MTC0	k1, MIPS_COP_0_TLB_LO1		#14: lo1 is loaded
-	nop					#15: standard nop
-	nop					#16: extra nop for QED5230
-#endif /* MIPS3_5900 */
-	tlbwr					#17: write to tlb
-	nop					#18: standard nop
-	nop					#19: needed by R4000/4400
-	nop					#1a: needed by R4000/4400
-	eret					#1b: return from exception
+	sll	$0, $0, 3			#16: standard nop (ehb)
+#ifdef MIPS3
+	nop					#17: extra nop for QED5230
+#endif
+	tlbwr					#18: write to tlb
+	sll	$0, $0, 3			#19: standard nop (ehb)
+#if defined(MULTIPROCESSOR) && (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	_MFC0	k1, MIPS_COP_0_OSSCRATCH, 2	#1a get tlbinfo lock addr
+	INT_S	zero, 0(k1)			#1b clear lock
+#elif (MIPS3 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	lui	k1, %hi(CPUVAR(EV_TLBMISSES))	#1a: k1=hi of tlbmisses
+	REG_L	k0, %lo(CPUVAR(EV_TLBMISSES))(k1) #1b
+	REG_ADDU k0, 1				#1c
+	REG_S	k0, %lo(CPUVAR(EV_TLBMISSES))(k1) #1d
+#endif
+	eret					#1e: return from exception
 	.set	at
 _VECTOR_END(MIPSX(tlb_miss))
@@ -390,5 +426,5 @@
 #if defined(USE_64BIT_CP0_FUNCTIONS)
 /*
- * mips3_xtlb_miss routine
+ * mipsN_xtlb_miss routine
  *
  *	Vector code for the XTLB-miss exception vector 0x80000080 on an r4000.
@@ -406,32 +442,39 @@
 VECTOR(MIPSX(xtlb_miss), unknown)
 	.set	noat
+#if defined(MULTIPROCESSOR) && (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	_MFC0	k1, MIPS_COP_0_OSSCRATCH, 2	# get tlbinfo lock addr
+	li	k0, __SIMPLELOCK_LOCKED		# try to lock it
+	swapw	k0, k1
+	bnez	k0, MIPSX(tlblocked)		# a lie
+	 nop
+#endif
 	dmfc0	k0, MIPS_COP_0_BAD_VADDR	#00: k0=bad address
-	lui	k1, %hi(CPUVAR(PMAP_SEGBASE))	#01: k1=hi of segbase
-	bltz	k0, MIPSX(kernelfault)		#02: k0<0 -> 4f (kernel fault)
-	 PTR_SRL k0, 2*PGSHIFT-2-PTR_SCALESHIFT	#03: k0=seg offset (almost)
-	PTR_L	k1, %lo(CPUVAR(PMAP_SEGBASE))(k1)#04: k1=segment tab base
-	andi	k0, NBPG-(1<<PTR_SCALESHIFT)	#05: k0=seg offset (mask 0x3)
-	PTR_ADDU k1, k0				#06: k1=seg entry address
-	PTR_L	k1, 0(k1)			#07: k1=seg entry
-	dmfc0	k0, MIPS_COP_0_BAD_VADDR	#08: k0=bad address (again)
-	beqz	k1, MIPSX(nopagetable)		#09: ==0 -- no page table
-	 PTR_SRL k0, (PGSHIFT-2)		#0a: k0=VPN (aka va>>10)
-	andi	k0, (NBPG-8)			#0b: k0=page tab offset
-	PTR_ADDU k1, k0				#0c: k1=pte address
-	INT_L	k0, 0(k1)			#0d: k0=lo0 pte
-	INT_L	k1, 4(k1)			#0e: k1=lo1 pte
-	_SLL	k0, WIRED_SHIFT			#0f: chop top 2 bits (part 1a)
-	_SRL	k0, WIRED_SHIFT			#10: chop top 2 bits (part 1b)
-	_MTC0	k0, MIPS_COP_0_TLB_LO0		#11: lo0 is loaded
-	_SLL	k1, WIRED_SHIFT			#12: chop top 2 bits (part 2a)
-	_SRL	k1, WIRED_SHIFT			#13: chop top 2 bits (part 2b)
-	_MTC0	k1, MIPS_COP_0_TLB_LO1		#14: lo1 is loaded
-	nop					#15: standard nop
-	nop					#16: extra nop for QED5230
-	tlbwr					#17: write to tlb
-	nop					#18: standard nop
-	nop					#19: needed by R4000/4400
-	nop					#1a: needed by R4000/4400
-	eret					#1b: return from exception
+#ifdef _LP64
+#ifdef MIPS3
+	nop					#01: nop
+#endif
+	bltz	k0, MIPSX(kernelfault)		#02: k0<0 -> kernel fault
+	 PTR_SRL k1,k0,2*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2)+PGSHIFT #03: clear valid bits
+	bnez	k1, MIPSX(nopagetable)		#04: not legal address
+	 PTR_SRL k0, 2*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2) #05: k0=seg offset (almost)
+	lui	k1, %hi(CPUVAR(PMAP_SEGTAB))	#06: k1=hi of segtab
+	andi	k0, NBPG-(1<<PTR_SCALESHIFT)	#07: k0=seg offset (mask 0x3)
+	PTR_L	k1, %lo(CPUVAR(PMAP_SEGTAB))(k1)#08: k1=segment tab
+	PTR_ADDU k1, k0				#09: k1=seg entry address
+	PTR_L	k1, 0(k1)			#0a: k1=seg entry
+#else
+	lui	k1, %hi(CPUVAR(PMAP_SEG0TAB))	#01: k1=hi of seg0tab
+	bltz	k0, MIPSX(kernelfault)		#02: k0<0 -> kernel fault
+	 dsrl	k0, 31				#03: clear low 31 bits
+	bnez	k0, MIPSX(nopagetable)		#04: not legal address
+	 nop
+	PTR_L	k1, %lo(CPUVAR(PMAP_SEG0TAB))(k1)#05: k1=segment tab base
+#endif /* _LP64 */
+	dmfc0	k0, MIPS_COP_0_BAD_VADDR	#0b: k0=bad address (again)
+#ifdef MIPS3
+	nop					#0c
+#endif
+	b	MIPSX(tlb_miss_common)		#0d
+	 PTR_SRL k0, 1*(PGSHIFT-PTR_SCALESHIFT)+(PGSHIFT-2) #0e: k0=seg offset (almost)
 	.set	at
 _VECTOR_END(MIPSX(xtlb_miss))
@@ -458,5 +501,5 @@
  *----------------------------------------------------------------------------
  *
- * mipsN_exception --
+ * mipsN_exception
  *
  *	Vector code for the general exception vector 0x80000180
@@ -486,10 +529,9 @@
 	PTR_LA	k0, MIPSX(excpt_sw)		#06: get base of the jump table
 	PTR_ADDU k0, k1				#08: get the address of the
-						#     function entry.  Note that
-						#     the cause is already
-						#     shifted left by 2 bits so
-						#     we dont have to shift.
+						#  function entry.  Note that
+						#  the cause is already
+						#  shifted left by 2 bits so
+						#  we dont have to shift.
 	PTR_L	k0, 0(k0)			#09: get the function address
-	#nop					#    -slip-
 #ifdef TSAR
 	mfc0	k1, MIPS_COP_0_TCCONTEXT, 5
@@ -510,13 +552,23 @@
 	.p2align 4
 MIPSX(kernelfault):
-	j	_C_LABEL(MIPSX(kernel_tlb_miss)) #10: kernel exception
+	j	_C_LABEL(MIPSX(kern_tlb_miss))	#10: kernel exception
 	 nop					#11: branch delay slot
 	nop
 	nop
 MIPSX(nopagetable):
-	lui	k1, %hi(CPUVAR(CURLWP))		#14: k1=hi of curlwp
-	j	MIPSX(slowfault)		#15: no page table present
-	 PTR_L	k1, %lo(CPUVAR(CURLWP))(k1)	#16: k1=lo of curlwp
-	nop					#17: branch delay slot
+#if defined(MULTIPROCESSOR) && (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	_MFC0	k1, MIPS_COP_0_OSSCRATCH, 2	#14: get tlbinfo lock addr
+	 INT_S	zero, 0(k1)			#15: clear lock
+#endif
+	lui	k1, %hi(CPUVAR(CURLWP))		#16: k1=hi of curlwp
+	j	MIPSX(slowfault)		#17: no page table present
+	 PTR_L	k1, %lo(CPUVAR(CURLWP))(k1)	#18: k1=lo of curlwp
+	nop					#19: branch delay slot
+#if defined(MULTIPROCESSOR) && (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+MIPSX(tlblocked):
+	_MFC0	k1, MIPS_COP_0_OSSCRATCH, 0	#1a: k1=hi of curlwp
+	j	MIPSX(slowfault)		#1b: no page table present
+	 PTR_L	k1, CPU_INFO_CURLWP(k1)		#1c: k1=lo of curlwp
+#endif
 #endif
 	.set	at
@@ -551,8 +603,8 @@
 /*----------------------------------------------------------------------------
  *
- * MIPSX(slowfault) --
- *
- * Alternate entry point into the mips3_user_gen_exception or
- * mips3_kern_gen_exception, when the ULTB miss handler couldn't
+ * mipsN_slowfault
+ *
+ * Alternate entry point into the mipsN_user_gen_exception or
+ * mipsN_kern_gen_exception, when the UTLB miss handler couldn't
  * find a TLB entry.
  *
@@ -560,9 +612,4 @@
  *
  *----------------------------------------------------------------------------
- */
-
-/*
- * We couldn't find a TLB entry.
- * Find out what mode we came from and call the appropriate handler.
  */
 	.org	((. + 31) & ~31) + 12
@@ -571,22 +618,22 @@
 	mfc0	k0, MIPS_COP_0_STATUS
 	nop
-	and	k0, k0, MIPS3_SR_KSU_USER
+	and	k0, MIPS3_SR_KSU_USER
 	bnez	k0, _C_LABEL(MIPSX(user_gen_exception))
-	nop
+	 nop
 	.set	at
 /*
- * Fall though ...
- */
-
-/*
- * mips3_kern_gen_exception
- *
- * Handle an exception from kernel mode.
+ * Fall through ...
+ */
+
+/*
+ * mipsN_kern_gen_exception
+ *
+ * Handle an exception during kernel mode.
  * Build trapframe on stack to hold interrupted kernel context, then
  * call trap() to process the condition.
  *
- * trapframe is pointed to by the 5th arg
- * and a dummy sixth argument is used to avoid alignment problems
- *	{
+ * trapframe is pointed to by the 5th arg and a dummy sixth argument is used
+ * to avoid alignment problems
+ * {
  *	register_t cf_args[4 + 1];
  *	register_t cf_pad;		(for 8 word alignment)
@@ -600,11 +647,11 @@
 	.mask	0x80000000, -4
 #ifdef PARANOIA
-	PTR_L	k0, L_ADDR(k1)
-	slt	k0, k0, sp		# k0 = L_ADDR(k1) < sp
+	PTR_L	k0, L_PCB(MIPS_CURLWP)
+	slt	k0, k0, sp		# k0 = L_PCB(MIPS_CURLWP) < sp
 1:	beqz	k0, 1b			# loop forever if false
 	 nop
-	PTR_L	k0, L_ADDR(k1)
+	PTR_L	k0, L_PCB(MIPS_CURLWP)
 	PTR_ADDU k0, USPACE
-	slt	k0, sp, k0		# k0 = sp < L_ADDP(k1) + USPACE
+	slt	k0, sp, k0		# k0 = sp < L_PCB(MIPS_CURLWP) + USPACE
 2:	beqz	k0, 2b			# loop forever if false
 	 nop
@@ -615,5 +662,5 @@
  * the compiler does it for us.
  */
-	PTR_SUBU sp, sp, KERNFRAME_SIZ
+	PTR_SUBU sp, KERNFRAME_SIZ
 	REG_S	AT, TF_BASE+TF_REG_AST(sp)
 	REG_S	v0, TF_BASE+TF_REG_V0(sp)
@@ -636,5 +683,7 @@
 	REG_S	ta3, TF_BASE+TF_REG_TA3(sp)
 	_MFC0	a2, MIPS_COP_0_BAD_VADDR	# 3rd arg is fault address
-	REG_S	t8, TF_BASE+TF_REG_T8(sp)	# will be MIPS_CURLWP
+#ifdef DDB
+	REG_S	t8, TF_BASE+TF_REG_T8(sp)	# is MIPS_CURLWP
+#endif
 	REG_S	t9, TF_BASE+TF_REG_T9(sp)
 	REG_S	ra, TF_BASE+TF_REG_RA(sp)
@@ -644,4 +693,5 @@
 	REG_S	v1, TF_BASE+TF_REG_MULHI(sp)
 	REG_S	a3, TF_BASE+TF_REG_EPC(sp)
+	REG_S	a1, TF_BASE+TF_REG_CAUSE(sp)
 #if defined(DDB) || defined(KGDB)
 	REG_S	s0, TF_BASE+TF_REG_S0(sp)
@@ -683,6 +733,5 @@
 	 * Verify our existing interrupt level.
 	 */
-	PTR_L	t9, _C_LABEL(mips_splsw) + SPLSW_SPLCHECK
-	jalr	t9
+	jal	_C_LABEL(splcheck)
 	 nop
 #endif /* PARANOIA */
@@ -692,6 +741,6 @@
 	 * turn off interrupts in addition to clearing the exception level.
 	 */
-	li	v1, 1 << T_BREAK		# make a mask of T_BREAK
-	sll	t0, a1, MIPS_CR_EXC_CODE_SHIFT	# shift exc code to low 5 bits
+	li	v1, MIPS_SR_INT_IE << T_BREAK	# make a mask of T_BREAK
+	srl	t0, a1, MIPS_CR_EXC_CODE_SHIFT	# shift exc code to low 5 bits
 	srl	v1, t0				# shift break mask using it
 	and	v1, MIPS_SR_INT_IE		# restrict to IE bit
@@ -701,7 +750,5 @@
 	mtc0	v0, MIPS_COP_0_STATUS		# update.
 	COP0_SYNC
-	nop
-	nop
-	nop
+
 #ifdef TSAR
 	/* disable kernel preemption until we got data from the vcache */
@@ -712,37 +759,27 @@
 	 * Call the trap handler.
 	 */
-	jal	_C_LABEL(trap)			#
-	REG_S	a3, KERNFRAME_RA(sp)		# for debugging
-
-/*
- * Restore registers and return from the exception.
- */
+	jal	_C_LABEL(trap)
+	 REG_S	a3, KERNFRAME_RA(sp)		# for debugging
+
+	/*
+	 * Restore registers and return from the exception.
+	 */
 	RESET_EXCEPTION_LEVEL_DISABLE_INTERRUPTS(v0)
 	COP0_SYNC
-	nop					# 3 nop delay
-	nop
-	nop
+
 	REG_L	a0, TF_BASE+TF_REG_SR(sp)	# get SR with EXL set
+	mtc0	a0, MIPS_COP_0_STATUS		# restore the SR, disable intrs
+	COP0_SYNC
+
+	/*
+	 * Start of common kernel exception return code for both
+	 * mipxN_kern_gen_exception and mipsN_kern_intr.
+	 */
+MIPSX(kern_return):
 	REG_L	t0, TF_BASE+TF_REG_MULLO(sp)
 	REG_L	t1, TF_BASE+TF_REG_MULHI(sp)
 	REG_L	k1, TF_BASE+TF_REG_EPC(sp)	# might be changed inside trap
-	mtc0	a0, MIPS_COP_0_STATUS		# restore the SR, disable intrs
-	COP0_SYNC
 	mtlo	t0
 	mthi	t1
-
-#ifdef notyet
-	/* Check for restartable sequences. */
-	lui	t0, %hi(_C_LABEL(_lock_ras_start))
-	ori	t0, zero, %lo(_C_LABEL(_lock_ras_start))
-	li	t1, -MIPS_LOCK_RAS_SIZE
-	and	t1, t1, k1
-	bne	t1, t0, 3f
-	jal	_C_LABEL(_lock_ras)
-	nop
-#endif
-
-3:	_MTC0	k1, MIPS_COP_0_EXC_PC		# set return address
-	COP0_SYNC
 
 #ifdef PARANOIA
@@ -756,8 +793,22 @@
 	 * Verify our existing interrupt level.
 	 */
-	PTR_L	t9, _C_LABEL(mips_splsw) + SPLSW_SPLCHECK
-	jalr	t9
+	jal	_C_LABEL(splcheck)
 	 nop
 #endif /* PARANOIA */
+
+	/*
+	 * Check for kernel restartable atomic sequences.
+	 */
+	PTR_LA	t0, _C_LABEL(_lock_ras_start)
+	li	t1, -MIPS_LOCK_RAS_SIZE
+	and	t1, k1
+	bne	t1, t0, 1f			# exception PC in RAS area?
+	 nop
+	jal	_C_LABEL(_restart_lock_ras)	# fix the pc (k1)
+	 nop
+1:
+
+	_MTC0	k1, MIPS_COP_0_EXC_PC		# set return address
+	COP0_SYNC
 
 	REG_L	AT, TF_BASE+TF_REG_AST(sp)
@@ -776,5 +827,5 @@
 	REG_L	ta2, TF_BASE+TF_REG_TA2(sp)
 	REG_L	ta3, TF_BASE+TF_REG_TA3(sp)
-	REG_L	t8, TF_BASE+TF_REG_T8(sp)	# was MIPS_CURLWP
+	#REG_L	t8, TF_BASE+TF_REG_T8(sp)	# is MIPS_CURLWP
 	REG_L	t9, TF_BASE+TF_REG_T9(sp)
 	REG_L	ra, TF_BASE+TF_REG_RA(sp)
@@ -790,5 +841,5 @@
 	REG_L	s8, TF_BASE+TF_REG_S8(sp)
 #endif
-	PTR_ADDU sp, sp, KERNFRAME_SIZ
+	PTR_ADDU sp, KERNFRAME_SIZ
 	eret					# return to interrupted point
 	.set	at
@@ -796,7 +847,285 @@
 
 /*
+ * mipsN_kern_intr
+ *
+ * Handle an interrupt from kernel mode.
+ * Build kernframe on stack to hold interrupted kernel context, then
+ * call cpu_intr() to process it.
+ *
+ */
+	.p2align 5
+NESTED_NOPROFILE(MIPSX(kern_intr), KERNFRAME_SIZ, ra)
+	.set	noat
+	.mask	0x80000000, -4
+#ifdef PARANOIA
+	PTR_L	k0, L_PCB(MIPS_CURLWP)
+	slt	k0, k0, sp			# k0 = L_PCB(MIPS_CURLWP) < sp
+1:	beqz	k0, 1b				# loop forever if false
+	 nop
+	PTR_L	k0, L_PCB(MIPS_CURLWP)
+	PTR_ADDU k0, USPACE
+	slt	k0, sp, k0			# k0 = sp < L_PCB(MIPS_CURLWP) + USPACE
+2:	beqz	k0, 2b				# loop forever if false
+	 nop
+	PTR_L	k0, L_CPU(MIPS_CURLWP)
+	INT_L	k0, CPU_INFO_IDEPTH(k0)		# grab interrupt depth
+	sltu	k0, k0, 3			# must be < 3
+3:	beqz	k0, 3b				# loop forever if false
+	 nop
+#endif
+	/*
+	 * Save the relevant kernel registers onto the stack.  We don't need
+	 * to save s0 - s8, sp, and gp because the compiler does it for us.
+	 * But we use s0-s2 so need to save them.
+	 */
+	PTR_SUBU sp, KERNFRAME_SIZ
+	REG_S	AT, TF_BASE+TF_REG_AST(sp)
+	REG_S	v0, TF_BASE+TF_REG_V0(sp)
+	REG_S	v1, TF_BASE+TF_REG_V1(sp)
+	mflo	v0
+	mfhi	v1
+	REG_S	a0, TF_BASE+TF_REG_A0(sp)
+	REG_S	a1, TF_BASE+TF_REG_A1(sp)
+	REG_S	a2, TF_BASE+TF_REG_A2(sp)
+	REG_S	a3, TF_BASE+TF_REG_A3(sp)
+	REG_S	t0, TF_BASE+TF_REG_T0(sp)
+	REG_S	t1, TF_BASE+TF_REG_T1(sp)
+	REG_S	t2, TF_BASE+TF_REG_T2(sp)
+	REG_S	t3, TF_BASE+TF_REG_T3(sp)
+	REG_S	ta0, TF_BASE+TF_REG_TA0(sp)
+	REG_S	ta1, TF_BASE+TF_REG_TA1(sp)
+	REG_S	ta2, TF_BASE+TF_REG_TA2(sp)
+	REG_S	ta3, TF_BASE+TF_REG_TA3(sp)
+	REG_S	s0, TF_BASE+TF_REG_S0(sp)	# used for saved ipl/idepth
+	REG_S	s1, TF_BASE+TF_REG_S1(sp)	# used for initial status
+	mfc0	s1, MIPS_COP_0_STATUS
+	REG_S	s2, TF_BASE+TF_REG_S2(sp)	# used for cpu_info
+#ifdef DDB
+	REG_S	t8, TF_BASE+TF_REG_T8(sp)	# already contains MIPS_CURLWP
+#endif
+	REG_S	t9, TF_BASE+TF_REG_T9(sp)
+	REG_S	ra, TF_BASE+TF_REG_RA(sp)
+	REG_S	s1, TF_BASE+TF_REG_SR(sp)
+	REG_S	v0, TF_BASE+TF_REG_MULLO(sp)
+	REG_S	v1, TF_BASE+TF_REG_MULHI(sp)
+/*
+ * Call the interrupt handler.
+ */
+	_MFC0	ta0, MIPS_COP_0_EXC_PC		# grab exception PC
+	PTR_L	s2, L_CPU(MIPS_CURLWP)		# delay slot
+	REG_S	ta0, TF_BASE+TF_REG_EPC(sp)	# and save it
+
+#if defined(DDB) || defined(DEBUG) || defined(KGDB)
+	REG_S	ta0, KERNFRAME_RA(sp)		# for debugging
+#endif
+
+#ifdef PARANOIA
+	INT_L	s0, CPU_INFO_CPL(s2)
+	INT_S	s0, TF_BASE+TF_PPL(sp)		# save priority level
+
+	/*
+	 * Verify the current interrupt level
+	 */
+	jal	_C_LABEL(splcheck)
+	 nop
+#endif /* PARANOIA */
+
+	/*
+	 * We first need to get to IPL_HIGH so that interrupts are masked.
+	 */
+	jal	_C_LABEL(splhigh_noprof)
+	 nop
+
+#ifdef PARANOIA
+1:	bne	s0, v0, 1b
+	 nop
+#endif /* PARANOIA */
+
+	sll	s0, v0, 8			# remember previous priority
+						# low 8 bits used for idepth
+
+#ifdef PARANOIA
+	/*
+	 * Interrupts at IPL_HIGH are not allowed.
+	 */
+	li	v1, IPL_HIGH
+	sltu	t0, v0, v1
+2:	beqz	t0, 2b
+	 nop
+#endif /* PARANOIA */
+
+	INT_L	t1, CPU_INFO_IDEPTH(s2)		# we need to inc. intr depth
+	or	s0, t1				#   save old interrupt depth
+	INT_ADDU t1, 1
+	INT_S	t1, CPU_INFO_IDEPTH(s2)		#   store new interrupt depth
+
+	/*
+	 * Now we can clear exception level since no interrupts can be delivered
+	 */
+	mfc0	v1, MIPS_COP_0_STATUS
+	and	v0, v1, MIPS_SR_EXL		# grab exception level bit
+	xor	v0, v1				# clear it
+	mtc0	v0, MIPS_COP_0_STATUS		# write new status
+	COP0_SYNC
+
+	/*
+	 * Now hard interrupts can be processed.
+	 */
+	move	a1, ta0				# 2nd arg is exception PC
+	move	a2, s1				# 3rd arg is status
+	jal	_C_LABEL(cpu_intr)		# cpu_intr(ppl, pc, status)
+	 srl	a0, s0, 8			# 1st arg is previous pri level
+
+	and	t1, s0, 0xff			# get previous interrupt depth
+	INT_S	t1, CPU_INFO_IDEPTH(s2)		# to it previous value
+
+#ifdef PARANOIA
+	mfc0	t0, MIPS_COP_0_STATUS		# verify INT_IE is still set
+	and	t0, MIPS_SR_INT_IE
+3:	beqz	t0, 3b
+	 nop
+#endif /* PARANOIA */
+
+#ifdef __HAVE_FAST_SOFTINTS
+	and	a0, s1, MIPS_SOFT_INT_MASK	# were softints enabled?
+	beqz	a0, 4f				#   nope
+	 nop
+	mfc0	v0, MIPS_COP_0_CAUSE		# grab the pending softints
+	and	a0, v0				# are softints pending
+	beqz	a0, 4f				#   nope
+	 nop
+
+	jal	_C_LABEL(softint_process)	# softint_process(pending)
+	 nop
+
+#ifdef __HAVE_PREEMPTION
+	srl	v1, s0, 8			# get saved priority level
+	bnez	v1, 4f				# branch if not at IPL_NONE
+	 nop
+	INT_L	t0, CPU_INFO_SOFTINTS(s2)	# get pending softints
+	and	v0, t0, 1 << SOFTINT_KPREEMPT	# do we need a kernel preempt?
+	beqz	v0, 4f				#   nope
+	 nop
+	xor	t0, v0				# clear preempt bit
+	INT_S	t0, CPU_INFO_SOFTINTS(s2)	# and save it.
+
+	jal	_C_LABEL(splx_noprof)		# drop to IPL_SCHED
+	 li	a0, IPL_SCHED
+
+	jal	_C_LABEL(kpreempt)		# kpreempt(pc)
+	 li	a0, -2
+#endif /* __HAVE_PREEMPTION */
+4:
+#endif /* __HAVE_FAST_SOFTINT */
+	/*
+	 * Interrupts handled, restore registers and return from the interrupt.
+	 * First, clear interrupt enable
+	 */
+	mfc0	v0, MIPS_COP_0_STATUS		# read it 
+	xor	v0, MIPS_SR_INT_IE		# disable interrupts
+	mtc0	v0, MIPS_COP_0_STATUS		# write it
+	COP0_SYNC
+
+	or	v0, MIPS_SR_EXL			# set exception mode
+	mtc0	v0, MIPS_COP_0_STATUS		# write it
+	COP0_SYNC
+
+	srl	a0, s0, 8			# get previous priority level
+#ifdef PARANOIA
+	INT_L	t0, TF_BASE+TF_PPL(sp)		# get saved priority level
+9:	bne	t0, a0, 9b			# should still match
+	 nop
+
+	li	t0, IPL_HIGH
+	sltu	v0, a0, t0
+8:	beqz	v0, 8b
+	 nop
+#endif /* PARANOIA */
+
+	/*
+	 * Restore IPL knowing interrupts are disabled
+	 */
+	jal	_C_LABEL(splx_noprof)		# splx(ppl)
+	 nop
+
+#ifdef PARANOIA
+	mfc0	v0, MIPS_COP_0_STATUS
+	or	v0, MIPS_SR_INT_IE
+5:	bne	v0, s1, 5b
+	 nop
+#endif /* PARANOIA */
+
+	/*
+	 * Restore SR
+	 */
+	mtc0	s1, MIPS_COP_0_STATUS
+	COP0_SYNC
+
+	/*
+	 * Restore s0-s2 and goto common kernel return code.
+	 */
+	REG_L	s0, TF_BASE+TF_REG_S0(sp)
+	REG_L	s1, TF_BASE+TF_REG_S1(sp)
+	b	MIPSX(kern_return)
+	 REG_L	s2, TF_BASE+TF_REG_S2(sp)
+	.set	at
+END(MIPSX(kern_intr))
+
+/*
+ *
+ */
+	.p2align 5
+NESTED_NOPROFILE(MIPSX(user_reserved_insn), CALLFRAME_SIZ, ra)
+	.set	noat
+	.mask	0x80000000, -4
+	/*
+	 * Save a minimum of registers to see if this is rdhwr $3,$29
+	 */
+	/* K1 already has CURLWP */
+	PTR_L	k0, L_PCB(k1)			# XXXuvm_lwp_getuarea
+	PTR_ADDU k0, USPACE - TF_SIZ - CALLFRAME_SIZ
+
+	/* Need two working registers */
+	REG_S	AT, CALLFRAME_SIZ+TF_REG_AST(k0)
+	REG_S	v0, CALLFRAME_SIZ+TF_REG_V0(k0)
+
+	/* If this was in a branch delay slot, take the slow path. */
+	mfc0	v0, MIPS_COP_0_CAUSE
+	bltz	v0, MIPSX(user_gen_exception_common)
+	 nop
+
+	/*
+	 * Get exception PC and fetch the instruction.  We know we can do
+	 * this since the instruction actually got read.
+	 */
+	_MFC0	v0, MIPS_COP_0_EXC_PC
+	INT_L	AT, 0(v0)
+
+	/*
+	 * Was this rdhwr $3,$29?
+	 */
+	lui	v0, %hi(0x7c03e83b)
+	addiu	v0, %lo(0x7c03e83b)
+	bne	AT, v0, MIPSX(user_gen_exception_common)
+	 nop
+
+	/*
+	 * Advance the PC (don't want to restart at the rdhwr).
+	 */
+	_MFC0	v0, MIPS_COP_0_EXC_PC
+	PTR_ADDIU v0, 4
+	_MTC0	v0, MIPS_COP_0_EXC_PC
+
+	PTR_L	v1, L_PRIVATE(k1)		# rdhwr $3,$29 updates v1
+	REG_L	AT, CALLFRAME_SIZ+TF_REG_AST(k0)# restore reg
+	REG_L	v0, CALLFRAME_SIZ+TF_REG_V0(k0) # restore reg
+	sll	$0,$0,3				# just in case
+	eret
+END(MIPSX(user_reserved_insn))
+
+/*
  * mipsN_user_gen_exception
  *
- * Handle an exception from user mode.
+ * Handle an exception during user mode.
  * Save user context atop the kernel stack, then call trap() to process
  * the condition.  The context can be manipulated alternatively via
@@ -807,12 +1136,13 @@
 	.set	noat
 	.mask	0x80000000, -4
-/*
- * Save all of the registers except for the kernel temporaries in u_pcb.
- */
+	/*
+	 * Save all the registers except the kernel temporaries onto the stack.
+	 */
 	/* K1 already has CURLWP */
-	PTR_L	k0, L_ADDR(k1)
-	PTR_ADDU k0, k0, USPACE - TF_SIZ - CALLFRAME_SIZ
+	PTR_L	k0, L_PCB(k1)			# XXXuvm_lwp_getuarea
+	PTR_ADDU k0, USPACE - TF_SIZ - CALLFRAME_SIZ
 	REG_S	AT, CALLFRAME_SIZ+TF_REG_AST(k0)
 	REG_S	v0, CALLFRAME_SIZ+TF_REG_V0(k0)
+MIPSX(user_gen_exception_common):
 	REG_S	v1, CALLFRAME_SIZ+TF_REG_V1(k0)
 	mflo	v0
@@ -855,10 +1185,10 @@
 	PTR_LA	gp, _C_LABEL(_gp)		# switch to kernel GP
 #endif
-	move	sp, k0
+	move	sp, k0				# switch to kernel SP
 	move	MIPS_CURLWP, k1
 #ifdef TSAR
 	/* disable kernel preemption until we got data from the vcache */
 	jal	_C_LABEL(kpreempt_disable)
-	nop
+	 nop
 #endif
 #ifdef NOFPU
@@ -873,5 +1203,5 @@
 	 */
 	lui	t0, %hi(~(MIPS_SR_COP_1_BIT|MIPS_SR_EXL|MIPS_SR_KSU_MASK))
-	ori	t0, %lo(~(MIPS_SR_COP_1_BIT|MIPS_SR_EXL|MIPS_SR_KSU_MASK))
+	addiu	t0, %lo(~(MIPS_SR_COP_1_BIT|MIPS_SR_EXL|MIPS_SR_KSU_MASK))
 	and	t0, a0
 #endif
@@ -887,464 +1217,25 @@
  * Check pending asynchronous traps.
  */
-	INT_L	t0, L_MD_ASTPENDING(MIPS_CURLWP)
-	beqz	t0, MIPSX(user_return)
+	INT_L	v0, L_MD_ASTPENDING(MIPS_CURLWP)# any pending ast?
+	beqz	v0, MIPSX(user_return)		# if no, skip ast processing
 	 nop
 /*
  * We have pending asynchronous traps; all the state is already saved.
  */
-	PTR_LA	ra, MIPSX(user_return)
+	lui	ra, %hi(MIPSX(user_return))	# return directly to user return
 	j	_C_LABEL(ast)
-	 nop
+	 PTR_ADDIU ra, %lo(MIPSX(user_return))	# return directly to user return
 	.set	at
 END(MIPSX(user_gen_exception))
 
-/*
- * mipsN_systemcall
- *
- * Save user context in u_pcb, then call syscall() to process a system call.
- * The context can be manipulated alternatively via curlwp->p_md.md_regs;
- */
-	.p2align 5
-NESTED_NOPROFILE(MIPSX(systemcall), CALLFRAME_SIZ, ra)
-	.set	noat
-	.mask	0x80000000, -4
-	/* k1 already cpulwp */
-	PTR_L	k0, L_ADDR(k1)
-	#nop					# -slip-
-	PTR_ADDU k0, k0, USPACE - TF_SIZ - CALLFRAME_SIZ
-	REG_S	AT, CALLFRAME_SIZ+TF_REG_AST(k0)
-	REG_S	v0, CALLFRAME_SIZ+TF_REG_V0(k0)		# syscall #
-	REG_S	v1, CALLFRAME_SIZ+TF_REG_V1(k0)		# used by syscall()
-	mflo	v0
-	REG_S	a0, CALLFRAME_SIZ+TF_REG_A0(k0)
-	REG_S	a1, CALLFRAME_SIZ+TF_REG_A1(k0)
-	REG_S	a2, CALLFRAME_SIZ+TF_REG_A2(k0)
-	REG_S	a3, CALLFRAME_SIZ+TF_REG_A3(k0)
-	move	a0, k1				# 1st arg is curlwp
-	mfhi	v1
-	mfc0	a2, MIPS_COP_0_CAUSE		# 3rd arg is CAUSE
-	REG_S	s0, CALLFRAME_SIZ+TF_REG_S0(k0)
-	REG_S	s1, CALLFRAME_SIZ+TF_REG_S1(k0)
-	REG_S	s2, CALLFRAME_SIZ+TF_REG_S2(k0)
-	REG_S	s3, CALLFRAME_SIZ+TF_REG_S3(k0)
-	_MFC0	a3, MIPS_COP_0_EXC_PC		# 4th arg is PC
-	REG_S	s4, CALLFRAME_SIZ+TF_REG_S4(k0)
-	REG_S	s5, CALLFRAME_SIZ+TF_REG_S5(k0)
-	REG_S	s6, CALLFRAME_SIZ+TF_REG_S6(k0)
-	REG_S	s7, CALLFRAME_SIZ+TF_REG_S7(k0)
-	REG_S	t0, CALLFRAME_SIZ+TF_REG_T0(k0)
-	REG_S	t1, CALLFRAME_SIZ+TF_REG_T1(k0)
-	REG_S	t2, CALLFRAME_SIZ+TF_REG_T2(k0)
-	REG_S	t3, CALLFRAME_SIZ+TF_REG_T3(k0)		# syscall saved gp for fork
-	mfc0	a1, MIPS_COP_0_STATUS		# 2nd arg is STATUS
-#if defined(__mips_n32) || defined(__mips_n64)
-	REG_S	a4, CALLFRAME_SIZ+TF_REG_A4(k0)
-	REG_S	a5, CALLFRAME_SIZ+TF_REG_A5(k0)
-	REG_S	a6, CALLFRAME_SIZ+TF_REG_A6(k0)
-	REG_S	a7, CALLFRAME_SIZ+TF_REG_A7(k0)
-#else
-	REG_S	ta0, CALLFRAME_SIZ+TF_REG_TA0(k0)
-	REG_S	ta1, CALLFRAME_SIZ+TF_REG_TA1(k0)
-	REG_S	ta2, CALLFRAME_SIZ+TF_REG_TA2(k0)
-	REG_S	ta3, CALLFRAME_SIZ+TF_REG_TA3(k0)
-#endif
-	REG_S	t8, CALLFRAME_SIZ+TF_REG_T8(k0)	# was MIPS_CURLWP
-	REG_S	t9, CALLFRAME_SIZ+TF_REG_T9(k0)
-	REG_S	gp, CALLFRAME_SIZ+TF_REG_GP(k0)
-	REG_S	sp, CALLFRAME_SIZ+TF_REG_SP(k0)
-	REG_S	s8, CALLFRAME_SIZ+TF_REG_S8(k0)
-	REG_S	ra, CALLFRAME_SIZ+TF_REG_RA(k0)
-	REG_S	a1, CALLFRAME_SIZ+TF_REG_SR(k0)
-	REG_S	v0, CALLFRAME_SIZ+TF_REG_MULLO(k0)
-	REG_S	v1, CALLFRAME_SIZ+TF_REG_MULHI(k0)
-	REG_S	a3, CALLFRAME_SIZ+TF_REG_EPC(k0)
-	PTR_L	t0, L_PROC(a0)			# curlwp->l_proc (used below)
-	move	sp, k0
-	move	MIPS_CURLWP, a0			# set curlwp reg
-#ifdef __GP_SUPPORT__
-	PTR_LA	gp, _C_LABEL(_gp)		# switch to kernel GP
-#endif
-#if defined(DDB) || defined(DEBUG) || defined(KGDB)
-	move	ra, a3
-	REG_S	ra, CALLFRAME_RA(sp)
-#endif
-/*
- * Turn off fpu and enter kernel mode
- */
-	PTR_L	t9, P_MD_SYSCALL(t0)		# t1 = syscall
-#ifdef NOFPU
-	and	t0, a1, MIPS_SR_EXL|MIPS_SR_KSU_MASK
-	xor	t0, a1
-#else
-	lui	t0, %hi(~(MIPS_SR_COP_1_BIT|MIPS_SR_EXL|MIPS_SR_KSU_MASK))
-	ori	t0, %lo(~(MIPS_SR_COP_1_BIT|MIPS_SR_EXL|MIPS_SR_KSU_MASK))
-	and	t0, a1
-#endif
-	mtc0	t0, MIPS_COP_0_STATUS		# re-enable interrupts
-	COP0_SYNC
-/*
- * Call the system call handler.
- */
-	jal	t9
-	nop
-/*
- * Check pending asynchronous traps.
- */
-	INT_L	t0, L_MD_ASTPENDING(MIPS_CURLWP)
-	beqz	t0, MIPSX(user_return)
-	 nop
-/*
- * We have pending asynchronous traps; all the state is already saved.
- */
-	PTR_LA	ra, MIPSX(user_return)
-	j	_C_LABEL(ast)
-	 nop
-	.set	at
-END(MIPSX(systemcall))
-
-/*
- * Panic on cache errors.  A lot more could be done to recover
- * from some types of errors but it is tricky.
- */
-	.p2align 5
-NESTED_NOPROFILE(MIPSX(cache_exception), KERNFRAME_SIZ, ra)
-	.set	noat
-	.mask	0x80000000, -4
-#ifdef sbmips	/* XXX!  SB-1 needs a real cache error handler */
-	eret
-	nop
-#endif
-	PTR_LA	k0, panic			# return to panic
-	PTR_LA	a0, 9f				# panicstr
-	_MFC0	a1, MIPS_COP_0_ERROR_PC
-#if defined(MIPS64_XLS)
-	li	k1, 0x309	/* L1D_CACHE_ERROR_LOG */
-	mfcr	a2, k1
-	li	k1, 0x30b	/* L1D_CACHE_INTERRUPT */
-	mfcr	a3, k1
-#if defined(__mips_o32)
-#error O32 not supported.
-#endif
-	mfc0	a4, MIPS_COP_0_STATUS
-	mfc0	a5, MIPS_COP_0_CAUSE
-#else
-	mfc0	a2, MIPS_COP_0_ECC
-	mfc0	a3, MIPS_COP_0_CACHE_ERR
-#endif
-
-	_MTC0	k0, MIPS_COP_0_ERROR_PC		# set return address
-	COP0_SYNC
-
-	mfc0	k0, MIPS_COP_0_STATUS		# restore status
-	li	k1, MIPS3_SR_DIAG_PE		# ignore further errors
-	or	k0, k1
-	mtc0	k0, MIPS_COP_0_STATUS		# restore status
-	COP0_SYNC
-	nop
-	nop
-	nop
-
-	eret
-
-#if defined(MIPS64_XLS)
-	MSG("cache error @ EPC %#lx\nL1D_CACHE_ERROR_LOG %#lx\nL1D_CACHE_INTERRUPT %#lx\nstatus %#x, cause %#x");
-#else
-	MSG("cache error @ EPC 0x%x ErrCtl 0x%x CacheErr 0x%x");
-#endif
-	.set	at
-END(MIPSX(cache_exception))
-
-/*
- * mipsX_kern_intr
- *
- * Handle an interrupt from kernel mode.
- * Build intrframe on stack to hold interrupted kernel context, then
- * call cpu_intr() to process it.
- *
- */
-	.p2align 5
-NESTED_NOPROFILE(MIPSX(kern_intr), KERNFRAME_SIZ, ra)
-	.set	noat
-	.mask	0x80000000, -4
-#ifdef PARANOIA
-	PTR_L	k0, L_ADDR(k1)
-	slt	k0, k0, sp			# k0 = L_ADDR(k1) < sp
-1:	beqz	k0, 1b				# loop forever if false
-	 nop
-	PTR_L	k0, L_ADDR(k1)
-	PTR_ADDU k0, USPACE
-	slt	k0, sp, k0			# k0 = sp < L_ADDR(k1) + USPACE
-2:	beqz	k0, 2b				# loop forever if false
-	 nop
-	PTR_L	k0, L_CPU(k1)
-	INT_L	k0, CPU_INFO_IDEPTH(k0)		# grab interrupt depth
-	sltu	k0, k0, 3			# must be < 3
-3:	beqz	k0, 3b				# loop forever if false
-	 nop
-#endif
-/*
- * Save the relevant kernel registers onto the stack.
- * We don't need to save s0 - s8, sp and gp because
- * the compiler does it for us.
- */
-	PTR_SUBU sp, sp, KERNFRAME_SIZ
-	REG_S	AT, TF_BASE+TF_REG_AST(sp)
-	REG_S	v0, TF_BASE+TF_REG_V0(sp)
-	REG_S	v1, TF_BASE+TF_REG_V1(sp)
-	mflo	v0
-	mfhi	v1
-	REG_S	a0, TF_BASE+TF_REG_A0(sp)
-	REG_S	a1, TF_BASE+TF_REG_A1(sp)
-	REG_S	a2, TF_BASE+TF_REG_A2(sp)
-	REG_S	a3, TF_BASE+TF_REG_A3(sp)
-	REG_S	t0, TF_BASE+TF_REG_T0(sp)
-	REG_S	t1, TF_BASE+TF_REG_T1(sp)
-	REG_S	t2, TF_BASE+TF_REG_T2(sp)
-	REG_S	t3, TF_BASE+TF_REG_T3(sp)
-	REG_S	ta0, TF_BASE+TF_REG_TA0(sp)
-	REG_S	ta1, TF_BASE+TF_REG_TA1(sp)
-	REG_S	ta2, TF_BASE+TF_REG_TA2(sp)
-	REG_S	ta3, TF_BASE+TF_REG_TA3(sp)
-	REG_S	s0, TF_BASE+TF_REG_S0(sp)	# s0 is used for saved ipl
-	REG_S	s1, TF_BASE+TF_REG_S1(sp)	# s1 is used for initial status
-	mfc0	s1, MIPS_COP_0_STATUS
-	REG_S	s2, TF_BASE+TF_REG_S2(sp)	# s2 is used for cpu_info
-	REG_S	t8, TF_BASE+TF_REG_T8(sp)	# MIPS_CURLWP
-	REG_S	t9, TF_BASE+TF_REG_T9(sp)
-	REG_S	ra, TF_BASE+TF_REG_RA(sp)
-	REG_S	a0, TF_BASE+TF_REG_SR(sp)
-	REG_S	v0, TF_BASE+TF_REG_MULLO(sp)
-	REG_S	v1, TF_BASE+TF_REG_MULHI(sp)
-/*
- * Call the interrupt handler.
- */
-	_MFC0	ra, MIPS_COP_0_EXC_PC		# grab exception PC
-	REG_S	ra, TF_BASE+TF_REG_EPC(sp)	# and save it
-
-#if defined(DDB) || defined(DEBUG) || defined(KGDB)
-	REG_S	ra, KERNFRAME_RA(sp)		# for debugging
-#endif
-
-	PTR_L	s2, L_CPU(MIPS_CURLWP)
-#ifdef PARANOIA
-	INT_L	s0, CPU_INFO_CPL(s2)
-	INT_S	s0, TF_BASE+TF_PPL(sp)		# save priority level
-
-	/*
-	 * Verify the current interrupt level
-	 */
-	PTR_L	t9, _C_LABEL(mips_splsw) + SPLSW_SPLCHECK
-	jalr	t9
-	 nop
-#endif /* PARANOIA */
-
-	/*
-	 * We first need to get to IPL_HIGH so that interrupts are masked.
-	 */
-	jal	_C_LABEL(splhigh_noprof)
-	 nop
-
-#ifdef PARANOIA
-1:	bne	s0, v0, 1b
-	 nop
-#endif /* PARANOIA */
-
-	sll	s0, v0, 8			# remember previous priority
-						# low 8 bits used for idepth
-
-#ifdef PARANOIA
-	/*
-	 * Interrupts at IPL_HIGH are not allowed.
-	 */
-	li	v1, IPL_HIGH
-	sltu	t0, v0, v1
-2:	beqz	t0, 2b
-	 nop
-#endif /* PARANOIA */
-
-	INT_L	t1, CPU_INFO_IDEPTH(s2)		# we need to inc. intr depth
-	or	s0, t1				#   save old interrupt depth
-	INT_ADDU t1, 1
-	INT_S	t1, CPU_INFO_IDEPTH(s2)		#   store new interrupt depth
-
-	/*
-	 * Now we can clear exception level since no interrupts can be delivered
-	 */
-	mfc0	v1, MIPS_COP_0_STATUS
-	and	v0, v1, MIPS_SR_EXL		# grab exception level bit
-	xor	v0, v1				# clear it
-	mtc0	v0, MIPS_COP_0_STATUS		# write new status
-	COP0_SYNC
-
-	/*
-	 * Now hard interrupts can be processed.
-	 */
-	REG_L	ra, TF_BASE+TF_REG_EPC(sp)
-	move	a1, ra				# 2nd arg is exception pc
-	move	a2, s1				# 3rd arg is status
-	jal	_C_LABEL(cpu_intr)		# cpu_intr(ppl, pc, status)
-	 srl	a0, s0, 8			# 1st arg is previous pri level
-
-	and	t1, s0, 0xff			# get previous interrupt depth
-	INT_S	t1, CPU_INFO_IDEPTH(s2)		# to it previous value
-
-#ifdef PARANOIA
-	mfc0	t0, MIPS_COP_0_STATUS		# verify INT_IE is still set
-	and	t0, MIPS_SR_INT_IE
-3:	beqz	t0, 3b
-	 nop
-#endif /* PARANOIA */
-
-#ifdef __HAVE_FAST_SOFTINTS
-	and	a0, s1, MIPS_SOFT_INT_MASK	# were softints enabled?
-	beqz	a0, 4f				#   nope
-	 nop
-	mfc0	v0, MIPS_COP_0_CAUSE		# grab the pending softints
-	and	a0, v0				# are softints pending
-	beqz	a0, 4f				#   nope
-	 nop
-
-	jal	_C_LABEL(softint_process)	# softint_process(pending)
-	 nop
-
-#ifdef __HAVE_PREEMPTION
-	srl	v1, s0, 8			# get saved priority level
-	bnez	v1, 4f				# branch if not at IPL_NONE
-	 nop
-	INT_L	t0, CPU_INFO_SOFTINTS(s2)	# get pending softints
-	and	v0, t0, 1 << SOFTINT_KPREEMPT	# do we need a kernel preempt?
-	beqz	v0, 4f				#   nop
-	 nop
-	xor	t0, v0				# clear preempt bit
-	INT_S	t0, CPU_INFO_SOFTINTS(s2)	# and save it.
-	jal	_C_LABEL(kpreempt)		# kpreempt(pc)
-	 PTR_L	a0, TF_BASE+TF_REG_EPC(sp)
-#endif /* __HAVE_PREEMPTION */
-4:
-#endif /* __HAVE_FAST_SOFTINT */
-/*
- * Restore registers and return from the interrupt.
- */
-	/*
-	 * Clear interrupt enable
-	 */
-	mfc0	v0, MIPS_COP_0_STATUS		# read it 
-	xor	v0, MIPS_SR_INT_IE		# disable interrupts
-	mtc0	v0, MIPS_COP_0_STATUS		# write it
-	COP0_SYNC
-	nop
-	nop
-	nop
-
-	or	v0, MIPS_SR_EXL			# set exception mode
-	mtc0	v0, MIPS_COP_0_STATUS		# write it
-	COP0_SYNC
-	nop
-	nop
-	nop
-
-	srl	a0, s0, 8			# get previous priority level
-#ifdef PARANOIA
-	INT_L	t0, TF_BASE+TF_PPL(sp)		# get saved priority level
-9:	bne	t0, a0, 9b			# should still match
-	 nop
-
-	li	t0, IPL_HIGH
-	sltu	v0, a0, t0
-8:	beqz	v0, 8b
-	 nop
-#endif /* PARANOIA */
-
-	/*
-	 * Restore IPL knowing interrupts are disabled
-	 */
-	jal	_C_LABEL(splx_noprof)		# splx(ppl)
-	 nop
-
-#ifdef PARANOIA
-	mfc0	v0, MIPS_COP_0_STATUS
-	or	v0, MIPS_SR_INT_IE
-5:	bne	v0, s1, 5b
-	 nop
-#endif /* PARANOIA */
-
-	/*
-	 * Restore SR
-	 */
-	mtc0	s1, MIPS_COP_0_STATUS
-	COP0_SYNC
-	nop
-	nop
-	nop
-
-	REG_L	t0, TF_BASE+TF_REG_MULLO(sp)
-	REG_L	t1, TF_BASE+TF_REG_MULHI(sp)
-	REG_L	v0, TF_BASE+TF_REG_EPC(sp)
-	mtlo	t0
-	mthi	t1
-
-#ifdef notyet
-	/* Check for restartable sequences. */
-	lui	t0, %hi(_C_LABEL(_lock_ras_start))
-	ori	t0, zero, %lo(_C_LABEL(_lock_ras_start))
-	li	t1, -MIPS_LOCK_RAS_SIZE
-	and	t1, t1, v0
-	bne	t1, t0, 10f
-	move	k1, v0
-	jal	_C_LABEL(_lock_ras)
-	nop
-	mov	v0, k1
-#endif
-
-10:	_MTC0	v0, MIPS_COP_0_EXC_PC		# set return address
-	COP0_SYNC
-
-#ifdef PARANOIA
-	INT_L	t2, TF_BASE+TF_PPL(sp)		# get saved priority level
-	INT_L	t1, CPU_INFO_CPL(s2)		# get current priority level
-11:	bne	t2, t1, 11b			# loop forever is unequal
-	 nop
-
-	PTR_L	t9, _C_LABEL(mips_splsw) + SPLSW_SPLCHECK
-	jalr	t9
-	 nop
-#endif /* PARANOIA */
-
-	REG_L	AT, TF_BASE+TF_REG_AST(sp)
-	REG_L	v0, TF_BASE+TF_REG_V0(sp)
-	REG_L	v1, TF_BASE+TF_REG_V1(sp)
-	REG_L	a0, TF_BASE+TF_REG_A0(sp)
-	REG_L	a1, TF_BASE+TF_REG_A1(sp)
-	REG_L	a2, TF_BASE+TF_REG_A2(sp)
-	REG_L	a3, TF_BASE+TF_REG_A3(sp)
-	REG_L	t0, TF_BASE+TF_REG_T0(sp)
-	REG_L	t1, TF_BASE+TF_REG_T1(sp)
-	REG_L	t2, TF_BASE+TF_REG_T2(sp)
-	REG_L	t3, TF_BASE+TF_REG_T3(sp)
-	REG_L	ta0, TF_BASE+TF_REG_TA0(sp)
-	REG_L	ta1, TF_BASE+TF_REG_TA1(sp)
-	REG_L	ta2, TF_BASE+TF_REG_TA2(sp)
-	REG_L	ta3, TF_BASE+TF_REG_TA3(sp)
-	REG_L	s0, TF_BASE+TF_REG_S0(sp)
-	REG_L	s1, TF_BASE+TF_REG_S1(sp)
-	REG_L	s2, TF_BASE+TF_REG_S2(sp)
-	REG_L	t8, TF_BASE+TF_REG_T8(sp)	# MIPS_CURLWP
-	REG_L	t9, TF_BASE+TF_REG_T9(sp)
-	REG_L	ra, TF_BASE+TF_REG_RA(sp)
-	PTR_ADDU sp, sp, KERNFRAME_SIZ		# restore kernel SP
-	eret					# return to interrupted point
-	.set	at
-END(MIPSX(kern_intr))
-
 /*----------------------------------------------------------------------------
- * XXX this comment block should be updated XXX
- * mipsN_user_intr --
+ *
+ * mipsN_user_intr
  *
  *	Handle an interrupt from user mode.
- *	Note: we save minimal state in the u.u_pcb struct and use the standard
- *	kernel stack since there has to be a u page if we came from user mode.
- *	If there is a pending software interrupt, then save the remaining state
- *	and call softintr(). This is all because if we call switch() inside
- *	cpu_intr(), not all the user registers have been saved in u.u_pcb.
+ *	We save partial state onto the kernel stack since we know there will
+ *	always a kernel stack and chances are we won't need the registers we
+ *	don't save.  If there is a pending asynchronous system trap, then save
+ *	the remaining state and call ast().
  *
  * Results:
@@ -1361,10 +1252,10 @@
 	.mask	0x80000000, -4
 /*
- * Save the relevant user registers into the u_pcb.
+ * Save the relevant user registers onto the kernel stack.
  * We don't need to save s0 - s8 because the compiler does it for us.
  */
 	/* k1 contains curlwp */
-	PTR_L	k0, L_ADDR(k1)
-	PTR_ADDU k0, k0, USPACE - TF_SIZ - CALLFRAME_SIZ
+	PTR_L	k0, L_PCB(k1)			# XXXuvm_lwp_getuarea
+	PTR_ADDU k0, USPACE - TF_SIZ - CALLFRAME_SIZ
 	REG_S	AT, CALLFRAME_SIZ+TF_REG_AST(k0)	# $1
 	REG_S	v0, CALLFRAME_SIZ+TF_REG_V0(k0)		# $2
@@ -1377,8 +1268,8 @@
 	mfhi	v1
 	REG_S	t0, CALLFRAME_SIZ+TF_REG_T0(k0)		# $12
-	mfc0	t0, MIPS_COP_0_CAUSE
 	REG_S	t1, CALLFRAME_SIZ+TF_REG_T1(k0)		# $13
 	REG_S	t2, CALLFRAME_SIZ+TF_REG_T2(k0)		# $14
 	REG_S	t3, CALLFRAME_SIZ+TF_REG_T3(k0)		# $15
+	mfc0	t0, MIPS_COP_0_CAUSE
 	REG_S	ta0, CALLFRAME_SIZ+TF_REG_TA0(k0)	# $8
 	REG_S	ta1, CALLFRAME_SIZ+TF_REG_TA1(k0)	# $9
@@ -1394,13 +1285,13 @@
 	REG_S	ra, CALLFRAME_SIZ+TF_REG_RA(k0)		# $31
 	REG_S	s1, CALLFRAME_SIZ+TF_REG_SR(k0)
-	_MFC0	ra, MIPS_COP_0_EXC_PC
+	_MFC0	ta0, MIPS_COP_0_EXC_PC
 	REG_S	v0, CALLFRAME_SIZ+TF_REG_MULLO(k0)
 	REG_S	v1, CALLFRAME_SIZ+TF_REG_MULHI(k0)
-	REG_S	ra, CALLFRAME_SIZ+TF_REG_EPC(k0)
+	REG_S	ta0, CALLFRAME_SIZ+TF_REG_EPC(k0)
 	REG_S	t0, CALLFRAME_SIZ+TF_REG_CAUSE(k0)
-	move	sp, k0
+	move	sp, k0				# switch to kernel SP
 	move	MIPS_CURLWP, k1			# set curlwp reg (t8)
 #if defined(DDB) || defined(DEBUG) || defined(KGDB)
-	REG_S	ra, CALLFRAME_RA(sp)
+	REG_S	ta0, CALLFRAME_RA(sp)		# for debugging
 #endif
 #ifdef __GP_SUPPORT__
@@ -1425,5 +1316,5 @@
 #else
 	lui	v0, %hi(~(MIPS_SR_COP_1_BIT|MIPS_SR_EXL|MIPS_SR_KSU_MASK))
-	ori	v0, %lo(~(MIPS_SR_COP_1_BIT|MIPS_SR_EXL|MIPS_SR_KSU_MASK))
+	addiu	v0, %lo(~(MIPS_SR_COP_1_BIT|MIPS_SR_EXL|MIPS_SR_KSU_MASK))
 	and	v0, v1 
 #endif
@@ -1441,6 +1332,5 @@
 	 * Now hard interrupts can be processed.
 	 */
-	REG_L	ra, CALLFRAME_SIZ+TF_REG_EPC(sp)
-	move	a1, ra				# 2nd arg is exception pc
+	move	a1, ta0				# 2nd arg is exception pc
 	move	a2, s1				# 3rd arg is status
 	jal	_C_LABEL(cpu_intr)		# cpu_intr(ppl, pc, status)
@@ -1480,7 +1370,4 @@
 	mtc0	v0, MIPS_COP_0_STATUS		# interrupts are disabled
 	COP0_SYNC
-	nop
-	nop
-	nop
 
 	/*
@@ -1490,7 +1377,7 @@
 	 move	a0, s0				# fetch previous priority level
 
-/*
- * Check pending asynchronous traps.
- */
+	/*
+	 * Check pending asynchronous traps.
+	 */
 	REG_L	s0, CALLFRAME_SIZ+TF_REG_S0(sp)	# restore
 	REG_L	s1, CALLFRAME_SIZ+TF_REG_S1(sp)	# restore
@@ -1498,9 +1385,11 @@
 	beqz	v0, MIPSX(user_intr_return)	# if no, skip ast processing
 	 nop
-/*
- * We have pending asynchronous traps; save remaining user state in u_pcb.
- */
-	#REG_S	s0, CALLFRAME_SIZ+TF_REG_S0(sp)	# $16 saved above
-	#REG_S	s1, CALLFRAME_SIZ+TF_REG_S1(sp)	# $17 saved above
+
+	/*
+	 * We have a pending asynchronous trap; save remaining user state into
+	 * trapframe.
+	 */
+	#REG_S	s0, CALLFRAME_SIZ+TF_REG_S0(sp)	# $16 (saved above)
+	#REG_S	s1, CALLFRAME_SIZ+TF_REG_S1(sp)	# $17 (saved above)
 	REG_S	s2, CALLFRAME_SIZ+TF_REG_S2(sp)	# $18
 	REG_S	s3, CALLFRAME_SIZ+TF_REG_S3(sp)	# $19
@@ -1515,25 +1404,264 @@
 	mtc0	t0, MIPS_COP_0_STATUS		# enable interrupts (spl0)
 	COP0_SYNC
+
+	PTR_LA	ra, MIPSX(user_return)
+	j	_C_LABEL(ast)			# ast()
+	 nop
+	.set	at
+END(MIPSX(user_intr))
+
+/*
+ * mipsN_systemcall
+ *
+ * Save user context atop of kernel stack, then call syscall() to process
+ * a system call.  The context can be manipulated alternatively via
+ * curlwp->l_md.md_utf->tf_regs.
+ */
+	.p2align 5
+NESTED_NOPROFILE(MIPSX(systemcall), CALLFRAME_SIZ, ra)
+	.set	noat
+	.mask	0x80000000, -4
+	/*
+	 * Save all the registers but kernel temporaries onto the stack.
+	 */
+	/* k1 already contains cpulwp */
+	PTR_L	k0, L_PCB(k1)			# XXXuvm_lwp_getuarea
+	PTR_ADDU k0, USPACE - TF_SIZ - CALLFRAME_SIZ
+	#REG_S	AT, CALLFRAME_SIZ+TF_REG_AST(k0)
+	#.set	at
+	REG_S	v0, CALLFRAME_SIZ+TF_REG_V0(k0)		# syscall #
+	REG_S	v1, CALLFRAME_SIZ+TF_REG_V1(k0)		# used by syscall()
+	mflo	v0
+	REG_S	a0, CALLFRAME_SIZ+TF_REG_A0(k0)
+	REG_S	a1, CALLFRAME_SIZ+TF_REG_A1(k0)
+	REG_S	a2, CALLFRAME_SIZ+TF_REG_A2(k0)
+	REG_S	a3, CALLFRAME_SIZ+TF_REG_A3(k0)
+	mfhi	v1
+	mfc0	a1, MIPS_COP_0_STATUS			# 2nd arg is STATUS
+	REG_S	s0, CALLFRAME_SIZ+TF_REG_S0(k0)
+	REG_S	s1, CALLFRAME_SIZ+TF_REG_S1(k0)
+	REG_S	s2, CALLFRAME_SIZ+TF_REG_S2(k0)
+	REG_S	s3, CALLFRAME_SIZ+TF_REG_S3(k0)
+	mfc0	a2, MIPS_COP_0_CAUSE			# 3rd arg is CAUSE
+	REG_S	s4, CALLFRAME_SIZ+TF_REG_S4(k0)
+	REG_S	s5, CALLFRAME_SIZ+TF_REG_S5(k0)
+	REG_S	s6, CALLFRAME_SIZ+TF_REG_S6(k0)
+	REG_S	s7, CALLFRAME_SIZ+TF_REG_S7(k0)
+	_MFC0	a3, MIPS_COP_0_EXC_PC			# 4th arg is PC
+	REG_S	t0, CALLFRAME_SIZ+TF_REG_T0(k0)
+	REG_S	t1, CALLFRAME_SIZ+TF_REG_T1(k0)
+	REG_S	t2, CALLFRAME_SIZ+TF_REG_T2(k0)
+	REG_S	t3, CALLFRAME_SIZ+TF_REG_T3(k0)		# syscall saved gp for fork
+#if defined(__mips_n32) || defined(__mips_n64)
+	REG_S	a4, CALLFRAME_SIZ+TF_REG_A4(k0)
+	REG_S	a5, CALLFRAME_SIZ+TF_REG_A5(k0)
+	REG_S	a6, CALLFRAME_SIZ+TF_REG_A6(k0)
+	REG_S	a7, CALLFRAME_SIZ+TF_REG_A7(k0)
+#else
+	REG_S	ta0, CALLFRAME_SIZ+TF_REG_TA0(k0)
+	REG_S	ta1, CALLFRAME_SIZ+TF_REG_TA1(k0)
+	REG_S	ta2, CALLFRAME_SIZ+TF_REG_TA2(k0)
+	REG_S	ta3, CALLFRAME_SIZ+TF_REG_TA3(k0)
+#endif
+	REG_S	t8, CALLFRAME_SIZ+TF_REG_T8(k0)		# will be MIPS_CURLWP
+	REG_S	t9, CALLFRAME_SIZ+TF_REG_T9(k0)
+	REG_S	gp, CALLFRAME_SIZ+TF_REG_GP(k0)
+	REG_S	sp, CALLFRAME_SIZ+TF_REG_SP(k0)
+	REG_S	s8, CALLFRAME_SIZ+TF_REG_S8(k0)
+	REG_S	ra, CALLFRAME_SIZ+TF_REG_RA(k0)
+	REG_S	a1, CALLFRAME_SIZ+TF_REG_SR(k0)
+	REG_S	v0, CALLFRAME_SIZ+TF_REG_MULLO(k0)
+	REG_S	v1, CALLFRAME_SIZ+TF_REG_MULHI(k0)
+	REG_S	a3, CALLFRAME_SIZ+TF_REG_EPC(k0)
+	move	MIPS_CURLWP, k1			# set curlwp reg
+	move	sp, k0				# switch to kernel SP
+#ifdef __GP_SUPPORT__
+	PTR_LA	gp, _C_LABEL(_gp)		# switch to kernel GP
+#endif
+#if defined(DDB) || defined(DEBUG) || defined(KGDB)
+	move	ra, a3
+	REG_S	ra, CALLFRAME_RA(sp)
+#endif
+	PTR_L	s0, L_PROC(MIPS_CURLWP)		# curlwp->l_proc
+	PTR_L	t9, P_MD_SYSCALL(s0)		# t9 = syscall
+	/*
+	 * Turn off FPU and enter kernel mode
+	 */
+#ifdef NOFPU
+	lui	t0, %hi(~(MIPS_SR_COP_1_BIT|MIPS_SR_EXL|MIPS_SR_KSU_MASK))
+	addiu	t0, %lo(~(MIPS_SR_COP_1_BIT|MIPS_SR_EXL|MIPS_SR_KSU_MASK))
+	and	t0, a1
+#else
+	and	t0, a1, MIPS_SR_EXL|MIPS_SR_KSU_MASK
+	xor	t0, a1				# turns off the FPU & ints on
+#endif
+	mtc0	t0, MIPS_COP_0_STATUS		# re-enable interrupts
+	COP0_SYNC
+/*
+ * Call the system call handler.
+ */
+	jalr	t9
+	 move	a0, MIPS_CURLWP			# 1st arg is curlwp
+
+/*
+ * Check pending asynchronous traps.
+ */
+	INT_L	v0, L_MD_ASTPENDING(MIPS_CURLWP)# any pending ast?
+	beqz	v0, MIPSX(user_return)		# no, skip ast processing
+	 nop
+/*
+ * We have pending asynchronous traps; all the state is already saved.
+ */
+	lui	ra, %hi(MIPSX(user_return))	# return directly to user return
+	j	_C_LABEL(ast)
+	 PTR_ADDIU ra, %lo(MIPSX(user_return))	# return directly to user return
+	.set	at
+END(MIPSX(systemcall))
+
+/*
+ * Panic on cache errors.  A lot more could be done to recover
+ * from some types of errors but it is tricky.
+ */
+	.p2align 5
+NESTED_NOPROFILE(MIPSX(cache_exception), KERNFRAME_SIZ, ra)
+	.set	noat
+	.mask	0x80000000, -4
+#ifdef sbmips	/* XXX!  SB-1 needs a real cache error handler */
+	eret
+	nop
+#endif
+	PTR_LA	k0, panic			# return to panic
+	PTR_LA	a0, 9f				# panicstr
+	_MFC0	a1, MIPS_COP_0_ERROR_PC
+#if (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	.set	push
+	.set	arch=xlr
+	li	k1, 0x309	/* L1D_CACHE_ERROR_LOG */
+	mfcr	a2, k1
+	li	k1, 0x30b	/* L1D_CACHE_INTERRUPT */
+	mfcr	a3, k1
+	.set	pop
+#if defined(__mips_o32)
+#error O32 not supported.
+#endif
+	mfc0	a4, MIPS_COP_0_STATUS
+	mfc0	a5, MIPS_COP_0_CAUSE
+#else
+	mfc0	a2, MIPS_COP_0_ECC
+	mfc0	a3, MIPS_COP_0_CACHE_ERR
+#endif
+
+	_MTC0	k0, MIPS_COP_0_ERROR_PC		# set return address
+	COP0_SYNC
+
+	mfc0	k0, MIPS_COP_0_STATUS		# restore status
+	li	k1, MIPS3_SR_DIAG_PE		# ignore further errors
+	or	k0, k1
+	mtc0	k0, MIPS_COP_0_STATUS		# restore status
+	COP0_SYNC
+
+	eret
+
+#if defined(MIPS64_XLS)
+	MSG("cache error @ EPC %#lx\nL1D_CACHE_ERROR_LOG %#lx\nL1D_CACHE_INTERRUPT %#lx\nstatus %#x, cause %#x");
+#else
+	MSG("cache error @ EPC 0x%x ErrCtl 0x%x CacheErr 0x%x");
+#endif
+	.set	at
+END(MIPSX(cache_exception))
+
+
+/*----------------------------------------------------------------------------
+ *
+ *	R4000 TLB exception handlers
+ *
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef TSAR
+/*----------------------------------------------------------------------------
+ *
+ * mipsN_kern_tlb_miss --
+ *
+ *	Handle a TLB miss exception from kernel mode in kernel space.
+ *	The BaddVAddr, Context, and EntryHi registers contain the failed
+ *	virtual address.
+ *
+ * Results:
+ *	None.
+ *
+ * Side effects:
+ *	None.
+ *
+ *----------------------------------------------------------------------------
+ */
+LEAF_NOPROFILE(MIPSX(kern_tlb_miss))
+	.set	noat
+	_MFC0	k0, MIPS_COP_0_BAD_VADDR	# get the fault address
+#if VM_MIN_KERNEL_ADDRESS == MIPS_KSEG2_START
+	li	k1, VM_MIN_KERNEL_ADDRESS	# compute index
+#else
+	li	k1, VM_MIN_KERNEL_ADDRESS>>32	# compute index
+	dsll32	k1, k1, 0
+#endif
+	PTR_SUBU k0, k1
+	INT_L	k1, _C_LABEL(Sysmapsize)	# index within range?
+	PTR_SRL	k0, PGSHIFT
+	sltu	k1, k0, k1
+#ifdef newsmips
+	/* news5000 has ROM work area at 0xfff00000. */
+	bnez	k1, 1f
+	 nop
+	j	checkromwork
+	 nop					# - delay slot -
+1:
+#elif defined(MULTIPROCESSOR) && (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	beqz	k1, _C_LABEL(MIPSX(tlbunlock_kern_gen_exception)) # full trap processing
+	 nop
+#else
+	/*
+	 * If we are beyond the bounds of Sysmap, let trap panic for us.
+	 */
+	beqz	k1, _C_LABEL(MIPSX(kern_gen_exception)) # full trap processing
+	 nop					# - delay slot -
+#endif
+	PTR_L	k1, _C_LABEL(Sysmap)
+	PTR_SRL	k0, 1
+	PTR_SLL	k0, 3				# compute offset from index
+	PTR_ADDU k1, k0
+	INT_L	k0, 0(k1)			# get PTE entry
+	INT_L	k1, 4(k1)			# get odd PTE entry
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+	_EXT	k0, k0, 0, WIRED_POS
+#else
+	_SLL	k0, k0, WIRED_SHIFT		# get rid of "wired" bit
+	_SRL	k0, k0, WIRED_SHIFT
+#endif
+	_MTC0	k0, MIPS_COP_0_TLB_LO0		# load PTE entry
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+	_EXT	k1, k1, 0, WIRED_POS
+#else
+	_SLL	k1, k1, WIRED_SHIFT
+	_SRL	k1, k1, WIRED_SHIFT
+#endif
+	_MTC0	k1, MIPS_COP_0_TLB_LO1		# load PTE entry
+	COP0_SYNC
+	tlbwr					# write random TLB
+	COP0_SYNC
+#ifdef MIPS3
 	nop
 	nop
-	nop
-	PTR_LA	ra, MIPSX(user_return)
-	j	_C_LABEL(ast)			# ast()
-	 nop
+#endif
+#if defined(MULTIPROCESSOR) && (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	_MFC0	k1, MIPS_COP_0_OSSCRATCH, 2	# get tlbinfo lock addr
+	INT_S	zero, 0(k1)			# clear lock
+#endif
+	eret
 	.set	at
-END(MIPSX(user_intr))
-
+END(MIPSX(kern_tlb_miss))
 
 /*----------------------------------------------------------------------------
  *
- *	R4000 TLB exception handlers
- *
- *----------------------------------------------------------------------------
- */
-
-#ifndef TSAR
-/*----------------------------------------------------------------------------
- *
- * mips3_tlb_invalid_exception --
+ * mipsN_tlb_invalid_exception --
  *
  *	Handle a TLB invalid exception from kernel mode in kernel space.
@@ -1559,4 +1687,14 @@
 LEAF_NOPROFILE(MIPSX(tlb_invalid_exception))
 	.set	noat
+#if defined(MULTIPROCESSOR) && (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+#define	TLB_INVALID_EXCEPTION_EXIT	_C_LABEL(MIPSX(tlbunlock_kern_gen_exception))
+	_MFC0	k1, MIPS_COP_0_OSSCRATCH, 2	# get tlblock addr
+	li	k0, __SIMPLELOCK_LOCKED
+1:	swapw	k0, k1				# set it to locked
+	bnez	k1, 1b				# was it locked?
+	 nop					#  if it was, try again
+#else
+#define	TLB_INVALID_EXCEPTION_EXIT	_C_LABEL(MIPSX(kern_gen_exception))
+#endif
 	_MFC0	k0, MIPS_COP_0_BAD_VADDR	# get the fault address
 #if VM_MIN_KERNEL_ADDRESS == MIPS_KSEG2_START
@@ -1566,98 +1704,133 @@
 	dsll32	k1, k1, 0
 #endif
-	bgez	k0, _C_LABEL(MIPSX(kern_gen_exception))	# full trap processing
-	 move	k1, MIPS_CURLWP
-	PTR_SUBU k0, k0, k1
+	bgez	k0, TLB_INVALID_EXCEPTION_EXIT	# full trap processing
+	 nop					# - delay slot -
+	PTR_SUBU k0, k1
 	INT_L	k1, _C_LABEL(Sysmapsize)	# index within range?
-	PTR_SRL	k0, k0, PGSHIFT
+	PTR_SRL	k0, PGSHIFT
 	sltu	k1, k0, k1
-	beqz	k1, _C_LABEL(MIPSX(kern_gen_exception))	# No. Failing beyond...
-	 move	k1, MIPS_CURLWP			# - delay slot -
+	beqz	k1, TLB_INVALID_EXCEPTION_EXIT	# No. Failing beyond...
+	 nop					# - delay slot -
 	PTR_L	k1, _C_LABEL(Sysmap)
-
-	PTR_SLL	k0, k0, 2			# compute offset from index
-	PTR_ADDU k1, k1, k0
+	PTR_SLL	k0, 2				# compute offset from index
+	PTR_ADDU k1, k0
 	tlbp					# Probe the invalid entry
 	COP0_SYNC
-	and	k0, k0, 4			# check even/odd page
+
+	mfc0	k0, MIPS_COP_0_TLB_INDEX
+#ifdef MIPS3
+	nop
+#endif
+	bltz	k0, TLB_INVALID_EXCEPTION_EXIT	# ASSERT(TLB entry exists)
+	 nop					# - delay slot -
+
+	and	k0, k1, 4			# check even/odd page
+#ifdef MIPS3
 	nop					# required for QED 5230
+#endif
 	bnez	k0, MIPSX(kern_tlbi_odd)
-	nop
-
-	mfc0	k0, MIPS_COP_0_TLB_INDEX
-	nop
-	bltz	k0, _C_LABEL(MIPSX(kern_gen_exception)) # ASSERT(TLB entry exists)
-	 move	k1, MIPS_CURLWP
+	 nop
+
 	INT_L	k0, 0(k1)			# get PTE entry
-
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+	_EXT	k0, k0, 0, WIRED_POS
+#else
 	_SLL	k0, k0, WIRED_SHIFT		# get rid of "wired" bit
 	_SRL	k0, k0, WIRED_SHIFT
+#endif
 	_MTC0	k0, MIPS_COP_0_TLB_LO0		# load PTE entry
 	COP0_SYNC
 	and	k0, k0, MIPS3_PG_V		# check for valid entry
+#ifdef MIPS3
 	nop					# required for QED5230
-	beqz	k0, _C_LABEL(MIPSX(kern_gen_exception))	# PTE invalid
-	 move	k1, MIPS_CURLWP
+#endif
+	beqz	k0, TLB_INVALID_EXCEPTION_EXIT	# PTE invalid
+	 nop					# - delay slot -
+
 	INT_L	k0, 4(k1)			# get odd PTE entry
+	mfc0	k1, MIPS_COP_0_TLB_INDEX
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+	_EXT	k0, k0, 0, WIRED_POS
+#else
 	_SLL	k0, k0, WIRED_SHIFT
-	mfc0	k1, MIPS_COP_0_TLB_INDEX
 	_SRL	k0, k0, WIRED_SHIFT
+#endif
 	sltiu	k1, k1, MIPS3_TLB_WIRED_UPAGES	# Luckily this is MIPS3_PG_G
 	or	k1, k1, k0
 	_MTC0	k0, MIPS_COP_0_TLB_LO1		# load PTE entry
 	COP0_SYNC
-	nop
-	nop					# required for QED5230
 	tlbwi					# write TLB
 	COP0_SYNC
+#ifdef MIPS3
 	nop
 	nop
-	nop
-	nop
-	nop
+#endif
 	eret
 
 MIPSX(kern_tlbi_odd):
-	mfc0	k0, MIPS_COP_0_TLB_INDEX
-	nop
-	bltz	k0, _C_LABEL(MIPSX(kern_gen_exception))	# assert(TLB Entry exists)
-	 move	k1, MIPS_CURLWP
 	INT_L	k0, 0(k1)			# get PTE entry
-
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+	_EXT	k0, k0, 0, WIRED_POS
+#else
 	_SLL	k0, k0, WIRED_SHIFT		# get rid of wired bit
 	_SRL	k0, k0, WIRED_SHIFT
+#endif
 	_MTC0	k0, MIPS_COP_0_TLB_LO1		# save PTE entry
 	COP0_SYNC
 	and	k0, k0, MIPS3_PG_V		# check for valid entry
+#ifdef MIPS3
 	nop					# required for QED5230
-	beqz	k0, _C_LABEL(MIPSX(kern_gen_exception))	# PTE invalid
-	 move	k1, MIPS_CURLWP
+#endif
+	beqz	k0, TLB_INVALID_EXCEPTION_EXIT	# PTE invalid
+	 nop					# - delay slot -
+
 	INT_L	k0, -4(k1)			# get even PTE entry
+	mfc0	k1, MIPS_COP_0_TLB_INDEX
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+	_EXT	k0, k0, 0, WIRED_POS
+#else
 	_SLL	k0, k0, WIRED_SHIFT
-	mfc0	k1, MIPS_COP_0_TLB_INDEX
 	_SRL	k0, k0, WIRED_SHIFT
+#endif
 	sltiu	k1, k1, MIPS3_TLB_WIRED_UPAGES	# Luckily this is MIPS3_PG_G
 	or	k1, k1, k0
 	_MTC0	k0, MIPS_COP_0_TLB_LO0		# save PTE entry
 	COP0_SYNC
-	nop
-	nop					# required for QED5230
 	tlbwi					# update TLB
 	COP0_SYNC
+#ifdef MIPS3
 	nop
 	nop
-	nop
-	nop
-	nop
+#endif
 	eret
+
+#if defined(MULTIPROCESSOR) && (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+/*
+ * Before entering kern_gen_exception we need to clear the tlb lock that
+ * we locked.
+ */
+MIPSX(tlbunlock_kern_gen_exception):
+	_MFC0	k1, MIPS_COP_0_OSSCRATCH, 2	# get tlblock addr
+	b	_C_LABEL(MIPSX(kern_gen_exception))
+	 INT_S	zero, 0(k1)			# clear lock
+#endif
+
 END(MIPSX(tlb_invalid_exception))
 
-/*----------------------------------------------------------------------------
- *
- * mipsN_kernel_tlb_miss --
- *
- *	Handle a TLB miss exception from kernel mode in kernel space.
- *	The BaddVAddr, Context, and EntryHi registers contain the failed
- *	virtual address.
+/*
+ * Mark where code entered from exception hander jumptable
+ * ends, for stack traceback code.
+ */
+
+	.globl	_C_LABEL(MIPSX(exceptionentry_end))
+_C_LABEL(MIPSX(exceptionentry_end)):
+
+/*--------------------------------------------------------------------------
+ *
+ * mipsN_tlb_set_asid --
+ *
+ *	Write the given pid into the TLB pid reg.
+ *
+ *	void mipsN_tlb_set_asid(uint32_t pid)
  *
  * Results:
@@ -1665,85 +1838,4 @@
  *
  * Side effects:
- *	None.
- *
- *----------------------------------------------------------------------------
- */
-LEAF_NOPROFILE(MIPSX(kernel_tlb_miss))
-	.set	noat
-	_MFC0	k0, MIPS_COP_0_BAD_VADDR	# get the fault address
-#if VM_MIN_KERNEL_ADDRESS == MIPS_KSEG2_START
-	li	k1, VM_MIN_KERNEL_ADDRESS	# compute index
-#else
-	li	k1, VM_MIN_KERNEL_ADDRESS>>32	# compute index
-	dsll32	k1, k1, 0
-#endif
-	PTR_SUBU k0, k0, k1
-	INT_L	k1, _C_LABEL(Sysmapsize)	# index within range?
-	PTR_SRL	k0, k0, PGSHIFT
-	sltu	k1, k0, k1
-#ifdef newsmips
-	/* news5000 has ROM work area at 0xfff00000. */
-	bnez	k1, 1f
-	 nop
-	j	checkromwork
-	 nop					# - delay slot -
-1:
-#else
-	/*
-	 * If we are beyond the bounds of Sysmap, let trap panic for us.
-	 */
-	beqz	k1, _C_LABEL(MIPSX(kern_gen_exception)) # No. Failing beyond. . .
-	 move	k1, MIPS_CURLWP			# - delay slot -
-#endif
-	PTR_L	k1, _C_LABEL(Sysmap)
-	PTR_SRL	k0, k0, 1
-	PTR_SLL	k0, k0, 3			# compute offset from index
-	PTR_ADDU k1, k1, k0
-	INT_L	k0, 0(k1)			# get PTE entry
-	INT_L	k1, 4(k1)			# get odd PTE entry
-	_SLL	k0, k0, WIRED_SHIFT		# get rid of "wired" bit
-	_SRL	k0, k0, WIRED_SHIFT
-	_MTC0	k0, MIPS_COP_0_TLB_LO0		# load PTE entry
-	COP0_SYNC
-	_SLL	k1, k1, WIRED_SHIFT
-	_SRL	k1, k1, WIRED_SHIFT
-	_MTC0	k1, MIPS_COP_0_TLB_LO1		# load PTE entry
-	COP0_SYNC
-	nop
-	nop					# required for QED5230
-	tlbwr					# write TLB
-	COP0_SYNC
-	nop
-	nop
-	nop
-	nop
-	nop
-	eret
-	.set	at
-END(MIPSX(kernel_tlb_miss))
-
-	MSG("TLB out of universe: ksp %p epc %p vaddr %p")
-
-/*
- * Mark where code entered from exception hander jumptable
- * ends, for stack traceback code.
- */
-
-	.globl	_C_LABEL(MIPSX(exceptionentry_end))
-_C_LABEL(MIPSX(exceptionentry_end)):
-
-/*--------------------------------------------------------------------------
- *
- * mipsN_tlb_set_asid --
- *
- *	Write the given pid into the TLB pid reg.
- *
- *	mips3_tlb_set_asid(uint32_t pid)
- *		int pid;
- *
- * Results:
- *	None.
- *
- * Side effects:
  *	PID set in the entry hi register.
  *
@@ -1752,81 +1844,14 @@
 LEAF(MIPSX(tlb_set_asid))
 	_MTC0	a0, MIPS_COP_0_TLB_HI		# Write the hi reg value
-	COP0_SYNC
-	/* XXX simonb: lose these nops for mips32/64? */
-	nop					# required for QED5230
-	nop					# required for QED5230
-	j	ra
-	nop
+	JR_HB_RA
 END(MIPSX(tlb_set_asid))
 
-#if defined(ENABLE_MIPS3_WIRED_MAP)
 /*--------------------------------------------------------------------------
  *
- * mipsN_TLBWriteIndexedVPS --
- *
- *      Write the given entry into the TLB at the given index.
- *      Pass full R4000 style TLB info including variable page size mask.
- *
- *      mipsN_tlb_write_indexed(size_t tlb_index, const struct tlbmask *tlb)
- *
- * Results:
- *      None.
- *
- * Side effects:
- *      TLB entry set.
- *
- *--------------------------------------------------------------------------
- */
-LEAF(MIPSX(tlb_write_indexed_VPS))
-	mfc0	v1, MIPS_COP_0_STATUS		# Save the status register.
-	RESET_EXCEPTION_LEVEL_DISABLE_INTERRUPTS(v0)
-	COP0_SYNC
-	nop
-	INT_L	a2, TLBMASK_LO0(a1)		# fetch tlb->tlb_lo0
-	INT_L	a3, TLBMASK_LO1(a1)		# fetch tlb->tlb_lo1
-	mfc0	v0, MIPS_COP_0_TLB_PG_MASK	# Save current page mask.
-	_MFC0	t0, MIPS_COP_0_TLB_HI		# Save the current PID.
-
-	_MTC0	a2, MIPS_COP_0_TLB_LO0		# Set up entry low0.
-	COP0_SYNC
-	_MTC0	a3, MIPS_COP_0_TLB_LO1		# Set up entry low1.
-	COP0_SYNC
-	nop
-	INT_L	a2, TLBMASK_MASK(a1)		# fetch tlb->tlb_mask
-	PTR_L	a3, TLBMASK_HI(a1)		# fetch tlb->tlb_hi
-	nop
-	mtc0	a0, MIPS_COP_0_TLB_INDEX	# Set the index.
-	COP0_SYNC
-	mtc0	a2, MIPS_COP_0_TLB_PG_MASK	# Set up entry pagemask.
-	COP0_SYNC
-	_MTC0	a3, MIPS_COP_0_TLB_HI		# Set up entry high.
-	COP0_SYNC
-	nop
-	nop
-	tlbwi					# Write the TLB
-	COP0_SYNC
-	nop
-	nop
-	nop					# Delay for effect
-	nop
-
-	_MTC0	t0, MIPS_COP_0_TLB_HI		# Restore the PID.
-	COP0_SYNC
-	mtc0	v0, MIPS_COP_0_TLB_PG_MASK	# Restore page mask.
-	COP0_SYNC
-	nop
-	nop
-	j       ra
-	mtc0	v1, MIPS_COP_0_STATUS		# Restore the status register
-END(MIPSX(tlb_write_indexed_VPS))
-#endif /* ENABLE_MIPS3_WIRED_MAP */
-	
-/*--------------------------------------------------------------------------
- *
- * mipsN_tlb_update --
+ * mipsN_tlb_update_addr --
  *
  *	Update the TLB if highreg is found; otherwise do nothing.
  *
- *	long mipsN_tlb_update(vaddr_t va, register_t lowreg)
+ *	int mipsN_tlb_update_addr(vaddr_t va, register_t lowreg)
  *
  * Results:
@@ -1838,5 +1863,5 @@
  *--------------------------------------------------------------------------
  */
-LEAF(MIPSX(tlb_update))
+LEAF(MIPSX(tlb_update_addr))
 	mfc0	v1, MIPS_COP_0_STATUS	# Save the status register.
 	mtc0	zero, MIPS_COP_0_STATUS	# Disable interrupts
@@ -1849,67 +1874,54 @@
 	COP0_SYNC
 	and	a2, a1, MIPS3_PG_G		# Copy global bit
-	nop
-	nop
 	tlbp					# Probe for the entry.
 	COP0_SYNC
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+	_EXT	a1, a1, 0, WIRED_POS
+#else
 	_SLL	a1, a1, WIRED_SHIFT		# Clear top 34 bits of EntryLo
 	_SRL	a1, a1, WIRED_SHIFT
+#endif
+	mfc0	v0, MIPS_COP_0_TLB_INDEX	# See what we got
 	bnez	t1, 1f				# Decide even odd
-	mfc0	v0, MIPS_COP_0_TLB_INDEX	# See what we got
+	 nop
 # EVEN
-	nop
 	bltz	v0, 1f				# index < 0 => !found
-	nop
+	 nop
+#ifdef MIPS3
 	nop					# required for QED5230
-
+#endif
 	tlbr					# update, read entry first
 	COP0_SYNC
-	nop
-	nop
-	nop
 	_MTC0	a1, MIPS_COP_0_TLB_LO0		# init low reg0.
 	COP0_SYNC
-	nop
-	nop					# required for QED5230
 	tlbwi					# update slot found
 	COP0_SYNC
-	nop					# required for QED5230
-	nop					# required for QED5230
 	b	4f
-	nop
+	 nop
 1:
 # ODD
-	nop
 	bltz	v0, 4f				# index < 0 => !found
-	nop
+	 nop
+#ifdef MIPS3
 	nop					# required for QED5230
-
+#endif
 	tlbr					# read the entry first
 	COP0_SYNC
-	nop
-	nop
-	nop
 	_MTC0	a1, MIPS_COP_0_TLB_LO1		# init low reg1.
 	COP0_SYNC
-	nop
-	nop					# required for QED5230
 	tlbwi					# update slot found
 	COP0_SYNC
-	nop					# required for QED5230
-	nop					# required for QED5230
-	nop
 4:
+#ifdef MIPS3
 	nop					# Make sure pipeline
 	nop					# advances before we
 	nop					# use the TLB.
 	nop
+#endif
 	_MTC0	t0, MIPS_COP_0_TLB_HI		# restore PID
 	COP0_SYNC
-	nop					# required for QED5230
-	nop					# required for QED5230
-	j	ra
 	mtc0	v1, MIPS_COP_0_STATUS		# Restore the status register
-	COP0_SYNC				# XXXX - not executed!!
-END(MIPSX(tlb_update))
+	JR_HB_RA
+END(MIPSX(tlb_update_addr))
 
 /*--------------------------------------------------------------------------
@@ -1933,18 +1945,14 @@
 	mtc0	zero, MIPS_COP_0_STATUS		# Disable interrupts
 	COP0_SYNC
+	mfc0	ta2, MIPS_COP_0_TLB_PG_MASK	# save current pgMask
+#ifdef MIPS3
 	nop
-	mfc0	ta2, MIPS_COP_0_TLB_PG_MASK	# save current pgMask
-	nop
+#endif
 	_MFC0	t0, MIPS_COP_0_TLB_HI		# Get current PID
 
 	mtc0	a0, MIPS_COP_0_TLB_INDEX	# Set the index register
 	COP0_SYNC
-	nop
-	nop					# required for QED5230
 	tlbr					# Read from the TLB
 	COP0_SYNC
-	nop
-	nop
-	nop
 	mfc0	t2, MIPS_COP_0_TLB_PG_MASK	# fetch the pgMask
 	_MFC0	t3, MIPS_COP_0_TLB_HI		# fetch the hi entry
@@ -1952,112 +1960,363 @@
 	_MFC0	ta1, MIPS_COP_0_TLB_LO1		# See what we got
 	_MTC0	t0, MIPS_COP_0_TLB_HI		# restore PID
-	COP0_SYNC
 	mtc0	ta2, MIPS_COP_0_TLB_PG_MASK	# restore pgMask
 	COP0_SYNC
-	nop
-	nop
-	nop					# wait for PID active
 	mtc0	v1, MIPS_COP_0_STATUS		# Restore the status register
 	COP0_SYNC
-	nop
 	PTR_S	t3, TLBMASK_HI(a1)
 	INT_S	ta0, TLBMASK_LO0(a1)
 	INT_S	ta1, TLBMASK_LO1(a1)
 	j	ra
-	INT_S	t2, TLBMASK_MASK(a1)
+	 INT_S	t2, TLBMASK_MASK(a1)
 END(MIPSX(tlb_read_indexed))
 
-#if defined(MIPS3) && !defined(MIPS3_5900)
-/*----------------------------------------------------------------------------
- *
- * mipsN_VCED --
- *
- *	Handle virtual coherency exceptions.
- *	Called directly from the mips3 exception-table code.
- *	only k0, k1 are available on entry
- *
- * Results:
- *	None.
- *
- * Side effects:
- *	Remaps the conflicting address as uncached and returns
- *	from the exception.
- *
- *	NB: cannot be profiled, all registers are user registers on entry.
- *
- *----------------------------------------------------------------------------
- */
-LEAF_NOPROFILE(MIPSX(VCED))
+
+/*--------------------------------------------------------------------------
+ * Invalidate a TLB entry which has the given vaddr and ASID if found.
+ * void mipsN_tlb_invalidate_addr(vaddr_t va)
+ *
+ * Invalidate a TLB entry which has the given vaddr and ASID if found.
+ *--------------------------------------------------------------------------
+ */
+LEAF_NOPROFILE(MIPSX(tlb_invalidate_addr))
+	mfc0	v1, MIPS_COP_0_STATUS		# save status register
+	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
+	COP0_SYNC
+
+	li	v0, (MIPS3_PG_HVPN | MIPS3_PG_ASID)
+	_MFC0	t0, MIPS_COP_0_TLB_HI		# save current ASID
+	mfc0	t3, MIPS_COP_0_TLB_PG_MASK	# save current pgMask
+	and	a0, v0				# make sure valid entryHi
+	_MTC0	a0, MIPS_COP_0_TLB_HI		# look for the vaddr & ASID
+	COP0_SYNC
+	tlbp					# probe the entry in question
+	COP0_SYNC
+	mfc0	v0, MIPS_COP_0_TLB_INDEX	# see what we got
+	bltz	v0, 1f				# index < 0 then skip
+	 li	t1, MIPS_KSEG0_START		# invalid address
+	PTR_SLL	v0, PGSHIFT + 1			# PAGE_SHIFT + 1
+	PTR_ADDU t1, v0
+	_MTC0	t1, MIPS_COP_0_TLB_HI		# make entryHi invalid
+	_MTC0	zero, MIPS_COP_0_TLB_LO0	# zero out entryLo0
+	_MTC0	zero, MIPS_COP_0_TLB_LO1	# zero out entryLo1
+#if 0
+	mtc0	zero, MIPS_COP_0_TLB_PG_MASK	# zero out pageMask
+#endif
+	COP0_SYNC
+
+	tlbwi
+	COP0_SYNC
+1:
+	_MTC0	t0, MIPS_COP_0_TLB_HI		# restore current ASID
+	mtc0	t3, MIPS_COP_0_TLB_PG_MASK	# restore pgMask
+	COP0_SYNC
+	mtc0	v1, MIPS_COP_0_STATUS		# restore status register
+	JR_HB_RA
+END(MIPSX(tlb_invalidate_addr))
+
+/*
+ * void mipsN_tlb_invalidate_asids(uint32_t base, uint32_t limit);
+ *
+ * Invalidate TLB entries belong to per process user spaces with
+ * base <= ASIDs < limit while leaving entries for kernel space
+ * marked global intact.
+ */
+LEAF_NOPROFILE(MIPSX(tlb_invalidate_asids))
+	mfc0	v1, MIPS_COP_0_STATUS		# save status register
+	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
+	COP0_SYNC
+
+	_MFC0	t0, MIPS_COP_0_TLB_HI		# Save the current PID.
+	mfc0	t1, MIPS_COP_0_TLB_WIRED
+	li	v0, MIPS_KSEG0_START		# invalid address
+	INT_L	t2, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
+	mfc0	t3, MIPS_COP_0_TLB_PG_MASK	# save current pgMask
+
+	# do {} while (t1 < t2)
+1:
+	mtc0	t1, MIPS_COP_0_TLB_INDEX	# set index
+	COP0_SYNC
+	sll	ta0, t1, PGSHIFT + 1		# PAGE_SHIFT + 1
+	tlbr					# obtain an entry
+	COP0_SYNC
+	_MFC0	a0, MIPS_COP_0_TLB_LO1
+	and	a0, MIPS3_PG_G			# check to see it has G bit
+	bnez	a0, 2f				# yep, skip this one.
+	 nop
+	_MFC0	a0, MIPS_COP_0_TLB_HI		# get VA and ASID
+	and	a0, MIPS3_PG_ASID		# focus on ASID
+	sltu	a3, a0, a1			# asid < base?
+	bnez	a3, 2f				# yes, skip this entry.
+	 nop
+	sltu	a3, a0, a2			# asid < limit
+	beqz	a3, 2f				# nope, skip this entry.
+	 nop
+	PTR_ADDU ta0, v0
+
+	_MTC0	ta0, MIPS_COP_0_TLB_HI		# make entryHi invalid
+	_MTC0	zero, MIPS_COP_0_TLB_LO0	# zero out entryLo0
+	_MTC0	zero, MIPS_COP_0_TLB_LO1	# zero out entryLo1
+	mtc0	zero, MIPS_COP_0_TLB_PG_MASK	# zero out mask entry
+	COP0_SYNC
+	tlbwi					# invalidate the TLB entry
+	COP0_SYNC
+2:
+	addu	t1, 1
+	bne	t1, t2, 1b
+	 nop
+
+	_MFC0	t0, MIPS_COP_0_TLB_HI		# restore PID.
+	mtc0	t3, MIPS_COP_0_TLB_PG_MASK	# restore pgMask
+	COP0_SYNC
+	mtc0	v1, MIPS_COP_0_STATUS		# restore status register
+	JR_HB_RA				# new ASID will be set soon
+END(MIPSX(tlb_invalidate_asids))
+
+/*
+ * void mipsN_tlb_invalidate_globals(void);
+ *
+ * Invalidate the non-wired TLB entries belonging to kernel space while
+ * leaving entries for user space (not marked global) intact.
+ */
+LEAF_NOPROFILE(MIPSX(tlb_invalidate_globals))
+	mfc0	v1, MIPS_COP_0_STATUS		# save status register
+	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
+	COP0_SYNC
+
+	_MFC0	t0, MIPS_COP_0_TLB_HI		# save current ASID
+	mfc0	t1, MIPS_COP_0_TLB_WIRED
+	li	v0, MIPS_KSEG0_START		# invalid address
+	INT_L	t2, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
+	mfc0	t3, MIPS_COP_0_TLB_PG_MASK	# save current pgMask
+
+	# do {} while (t1 < t2)
+1:
+	mtc0	t1, MIPS_COP_0_TLB_INDEX	# set index
+	COP0_SYNC
+	sll	ta0, t1, PGSHIFT + 1		# PAGE_SHIFT + 1
+	tlbr					# obtain an entry
+	COP0_SYNC
+	_MFC0	a0, MIPS_COP_0_TLB_LO1
+	and	a0, MIPS3_PG_G			# check to see it has G bit
+	beqz	a0, 2f				# no, skip this entry
+	 nop
+	PTR_ADDU ta0, v0
+
+	_MTC0	ta0, MIPS_COP_0_TLB_HI		# make entryHi invalid
+	_MTC0	zero, MIPS_COP_0_TLB_LO0	# zero out entryLo0
+	_MTC0	zero, MIPS_COP_0_TLB_LO1	# zero out entryLo1
+	mtc0	zero, MIPS_COP_0_TLB_PG_MASK	# zero out mask entry
+	COP0_SYNC
+	tlbwi					# invalidate the TLB entry
+	COP0_SYNC
+2:
+	addu	t1, 1
+	bne	t1, t2, 1b
+	 nop
+
+	_MTC0	t0, MIPS_COP_0_TLB_HI		# restore current ASID
+	mtc0	t3, MIPS_COP_0_TLB_PG_MASK	# restore pgMask
+	COP0_SYNC
+	mtc0	v1, MIPS_COP_0_STATUS		# restore status register
+	JR_HB_RA
+END(MIPSX(tlb_invalidate_globals))
+
+/*
+ * void mipsN_tlb_invalidate_all(void);
+ *
+ * Invalidate all of non-wired TLB entries.
+ */
+LEAF_NOPROFILE(MIPSX(tlb_invalidate_all))
+	mfc0	v1, MIPS_COP_0_STATUS		# save status register
+	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
+	COP0_SYNC
+
+	INT_L	a0, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
+
+	li	v0, MIPS_KSEG0_START		# invalid address
+	_MFC0	t0, MIPS_COP_0_TLB_HI		# save current ASID
+	mfc0	t1, MIPS_COP_0_TLB_WIRED
+	mfc0	t2, MIPS_COP_0_TLB_PG_MASK	# save current pgMask
+
+	_MTC0	zero, MIPS_COP_0_TLB_LO0	# zero out entryLo0
+	_MTC0	zero, MIPS_COP_0_TLB_LO1	# zero out entryLo1
+	mtc0	zero, MIPS_COP_0_TLB_PG_MASK	# zero out pageMask
+
+	# do {} while (t1 < a0)
+1:
+	mtc0	t1, MIPS_COP_0_TLB_INDEX	# set TLBindex
+	COP0_SYNC
+	sll	ta0, t1, PGSHIFT + 1		# PAGE_SHIFT + 1
+	PTR_ADDU ta0, v0
+	_MTC0	ta0, MIPS_COP_0_TLB_HI		# make entryHi invalid
+	COP0_SYNC
+	tlbwi					# clear the entry
+	COP0_SYNC
+	addu	t1, 1				# increment index
+	bne	t1, a0, 1b
+	 nop
+
+	_MTC0	t0, MIPS_COP_0_TLB_HI		# restore ASID
+	mtc0	t2, MIPS_COP_0_TLB_PG_MASK	# restore pgMask
+	COP0_SYNC
+	mtc0	v1, MIPS_COP_0_STATUS		# restore status register
+	JR_HB_RA
+END(MIPSX(tlb_invalidate_all))
+
+/*
+ * u_int mipsN_tlb_record_asids(u_long *bitmap, uint32_t asid_mask);
+ *
+ * Record all the ASIDs in use in the TLB and return the number of different
+ * ASIDs present.
+ */
+LEAF_NOPROFILE(MIPSX(tlb_record_asids))
+
+	_MFC0	a3, MIPS_COP_0_TLB_HI		# Save the current PID.
+	mfc0	ta0, MIPS_COP_0_TLB_WIRED
+	INT_L	ta1, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
+	move	ta2, zero
+	li	ta3, 1
+	move	v0, zero
+
+	mfc0	v1, MIPS_COP_0_STATUS		# save status register
+#ifdef _LP64
+	and	t0, v1, MIPS_SR_INT_IE
+	xor	t0, v1
+	mtc0	t0, MIPS_COP_0_STATUS		# disable interrupts
+#else
+	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
+#endif
+	COP0_SYNC
+
+	# do {} while (ta0 < ta1)
+1:
+	mtc0	ta0, MIPS_COP_0_TLB_INDEX	# set index
+	COP0_SYNC
+	tlbr					# obtain an entry
+	COP0_SYNC
+	_MFC0	t0, MIPS_COP_0_TLB_LO1
+	and	t0, MIPS3_PG_G			# check to see it has G bit
+	bnez	t0, 4f				# yep, skip this one.
+	 nop
+	_MFC0	t0, MIPS_COP_0_TLB_HI		# get VA and ASID
+	and	t0, a1				# focus on ASID
+
+	srl	a2, t0, 3 + LONG_SCALESHIFT	# drop low 5 or 6 bits
+	sll	a2, LONG_SCALESHIFT		# make an index for the bitmap
+	_SLLV	t0, ta3, t0			# t0 is mask (ta3 == 1)
+
+	PTR_ADDU a2, a0				# index into the bitmap 
+	beq	a2, ta2, 3f			# is the desired cell loaded?
+	 nop					#    yes, don't reload it
+	beqz	ta2, 2f				# have we ever loaded it?
+	 nop					#   nope, so don't save it.
+
+	LONG_S	t2, 0(ta2)			# save the updated value.
+2:
+	move	ta2, a2				# remember the new cell's addr
+	LONG_L	t2, 0(ta2)			# and load it
+3:
+	and	t1, t2, t0			# t1 = t2 & t0
+	sltu	t1, t1, ta3			# t1 = t1 < 1 (aka t1 == 0)
+	addu	v0, t1				# v0 += t1
+	or	t2, t0				# or in the new ASID bits
+4:
+	addu	ta0, 1				# increment TLB entry #
+	bne	ta0, ta1, 1b			# keep lookup if not limit
+	 nop
+
+	beqz	ta2, 5f				# do we have a cell to write?
+	 nop					#   nope.  nothing
+
+	LONG_S	t2, 0(ta2)			# save the updated value.
+5:
+	_MTC0	a3, MIPS_COP_0_TLB_HI		# restore ASID
+	COP0_SYNC
+
+	mtc0	v1, MIPS_COP_0_STATUS		# restore status register
+	JR_HB_RA
+END(MIPSX(tlb_record_asids))
+
+/*
+ * mipsN_tlb_enter(size_t tlb_index, vaddr_t va, uint32_t pte);
+ */
+LEAF(MIPSX(tlb_enter))
 	.set	noat
-	_MFC0	k0, MIPS_COP_0_BAD_VADDR	# fault addr.
-	li	k1, -16
-	and	k0, k1
-	cache	(CACHE_R4K_SD | CACHEOP_R4K_HIT_WB_INV), 0(k0)
-	cache	(CACHE_R4K_D | CACHEOP_R4K_HIT_INV), 0(k0)
-#ifdef DEBUG
-	_MFC0	k0, MIPS_COP_0_BAD_VADDR
-	PTR_LA	k1, VCED_vaddr
-	PTR_S	k0, 0(k1)
-	_MFC0	k0, MIPS_COP_0_EXC_PC
-	PTR_LA	k1, VCED_epc
-	PTR_S	k0, 0(k1)
-	PTR_LA	k1, VCED_count		# count number of exceptions
-	PTR_SRL	k0, k0, 26		# position upper 4 bits of VA
-	and	k0, k0, 0x3c		# mask it off
-	PTR_ADDU k1, k0			# get address of count table
-	LONG_L	k0, 0(k1)
-	LONG_ADDU k0, 1
-	LONG_S	k0, 0(k1)
-#endif
-	eret
+	_MFC0	ta0, MIPS_COP_0_TLB_HI		# save EntryHi
+
+	and	a3, a1, MIPS3_PG_ODDPG		# select odd page bit
+	xor	a3, a1				# clear it.
+	_MTC0	a3, MIPS_COP_0_TLB_HI		# set the VA for tlbp
+	COP0_SYNC
+
+	and	t2, a2, MIPS3_PG_G		# make prototype tlb_lo0
+	and	t3, a2, MIPS3_PG_G		# make prototype tlb_lo1
+
+	tlbp					# is va in TLB?
+	COP0_SYNC
+
+	mfc0	v0, MIPS_COP_0_TLB_INDEX	# was it in the TLB?
+	bltz	v0, 1f				# nope
+	 nop
+
+	/*
+	 * Get the existing tlb_lo's because we need to replace one of them.
+	 */
+	mfc0	t2, MIPS_COP_0_TLB_LO0		# save for update
+	mfc0	t3, MIPS_COP_0_TLB_LO1		# save for update
+
+	/*
+	 * If it's already where we want, no reason to invalidate it.
+	 */
+	beq	v0, a0, 2f			# already where we want it?
+	 nop					
+
+	/*
+	 * Make an
+	 */
+	sll	t1, 1 + PGSHIFT			# make a fake addr for the entry
+	lui	v1, %hi(MIPS_KSEG0_START)
+	or	t1, v1
+	_MTC0	t1, MIPS_COP_0_TLB_HI
+	COP0_SYNC
+
+	and	t0, a2, MIPS3_PG_G		# make prototype tlb_lo
+	mtc0	t0, MIPS_COP_0_TLB_LO0		# use an invalid tlb_lo0
+	mtc0	t0, MIPS_COP_0_TLB_LO1		# use an invalid tlb_lo1
+	COP0_SYNC
+
+	tlbwi					# now write the invalid TLB
+	COP0_SYNC
+
+	_MTC0	a3, MIPS_COP_0_TLB_HI		# restore the addr for new TLB
+	COP0_SYNC
+1:
+	mtc0	a0, MIPS_COP_0_TLB_INDEX	# set the index
+	COP0_SYNC
+
+2:
+	and	v1, a1, MIPS3_PG_ODDPG		# odd or even page
+	sll	v1, 31 - PGSHIFT		# move to MSB
+	sra	v1, 31				# v1 a mask (0/~0 = even/odd)
+	not	v0, v1				# v0 a mask (~0/0 = even/odd)
+
+	and	ta2, t2, v1
+	and	ta3, a2, v0
+	or	t2, ta2, ta3			# t2 = (v1 & t2) | (~v1 & a2)
+	and	ta2, t3, v0
+	and	ta3, a2, v1
+	or	t3, ta2, ta3			# t3 = (~v1 & t3) | (v1 & a2)
+
+	mtc0	t2, MIPS_COP_0_TLB_LO0		# set tlb_lo0 (even)
+	mtc0	t3, MIPS_COP_0_TLB_LO1		# set tlb_lo1 (odd)
+	COP0_SYNC
+
+	tlbwi					# enter it into the TLB
+	COP0_SYNC
+
+	_MTC0	ta1, MIPS_COP_0_TLB_HI		# restore EntryHi
+	JR_HB_RA
 	.set	at
-
-#ifdef DEBUG
-	.data
-	.globl	_C_LABEL(VCED_count)
-_C_LABEL(VCED_count):
-	LONG_WORD	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-	.globl	_C_LABEL(VCED_epc)
-_C_LABEL(VCED_epc):
-	PTR_WORD	0
-	.globl	_C_LABEL(VCED_vaddr)
-_C_LABEL(VCED_vaddr):
-	PTR_WORD	0
-	.text
-#endif
-END(MIPSX(VCED))
-
-LEAF_NOPROFILE(MIPSX(VCEI))
-	.set	noat
-	_MFC0	k0, MIPS_COP_0_BAD_VADDR	# fault addr.
-	cache	(CACHE_R4K_SD | CACHEOP_R4K_HIT_WB_INV), 0(k0)
-	cache	(CACHE_R4K_I | CACHEOP_R4K_HIT_INV), 0(k0)
-#ifdef DEBUG
-	_MFC0	k0, MIPS_COP_0_BAD_VADDR
-	PTR_LA	k1, VCEI_vaddr
-	PTR_S	k0, 0(k1)
-	PTR_LA	k1, VCEI_count		# count number of exceptions
-	PTR_SRL	k0, k0, 26		# position upper 4 bits of VA
-	and	k0, k0, 0x3c		# mask it off
-	PTR_ADDU k1, k0			# get address of count table
-	LONG_L	k0, 0(k1)
-	PTR_ADDU k0, 1
-	LONG_S	k0, 0(k1)
-#endif
-	eret
-	.set	at
-
-#ifdef DEBUG
-	.data
-	.globl	_C_LABEL(VCEI_count)
-_C_LABEL(VCEI_count):
-	LONG_WORD	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-	.globl	_C_LABEL(VCEI_vaddr)
-_C_LABEL(VCEI_vaddr):
-	PTR_WORD	0
-	.text
-#endif
-END(MIPSX(VCEI))
-#endif /* MIPS3 && !MIPS3_5900 */
+END(MIPSX(tlb_enter))
 #endif /* !TSAR */
 
@@ -2070,5 +2329,5 @@
  */
 LEAF(MIPSX(lwp_trampoline))
-	PTR_ADDU sp, sp, -CALLFRAME_SIZ
+	PTR_ADDU sp, -CALLFRAME_SIZ
 
 	# Call lwp_startup(), with args from cpu_switchto()/cpu_setfunc()
@@ -2078,5 +2337,5 @@
 
 	# Call the routine specified by cpu_setfunc()
-	jal	s0			
+	jalr	s0			
 	 move	a0, s1
 
@@ -2109,11 +2368,6 @@
 	RESET_EXCEPTION_LEVEL_DISABLE_INTERRUPTS(v0)
 	COP0_SYNC
-	nop					# 3 op delay
-	nop
-	nop
 	SET_EXCEPTION_LEVEL(v0)			# set exception level
 	COP0_SYNC
-	nop
-	nop
 	REG_L	t0, CALLFRAME_SIZ+TF_REG_MULLO(sp)
 	REG_L	t1, CALLFRAME_SIZ+TF_REG_MULHI(sp)
@@ -2123,5 +2377,4 @@
 	_MTC0	v0, MIPS_COP_0_EXC_PC
 	COP0_SYNC
-	nop
 	move	k1, sp
 	REG_L	AT, CALLFRAME_SIZ+TF_REG_AST(k1)	# $1
@@ -2149,6 +2402,4 @@
 	mtc0	k0, MIPS_COP_0_STATUS
 	COP0_SYNC
-	nop
-	nop
 	eret
 	.set	at
@@ -2159,5 +2410,5 @@
  */
 LEAF(MIPSX(setfunc_trampoline))
-	PTR_ADDU sp, sp, -CALLFRAME_SIZ
+	PTR_ADDU sp, -CALLFRAME_SIZ
 
 	# Call the routine specified by cpu_setfunc()
@@ -2181,5 +2432,5 @@
 	INT_L	a1, L_MD_UPTE_0(a0)		# a1 = upte[0]
 	INT_L	a2, L_MD_UPTE_1(a0)		# a2 = upte[1]
-	PTR_L	v0, L_ADDR(a0)			# va = l->l_addr
+	PTR_L	v0, L_PCB(a0)			# va = l->l_addr
 #if VM_MIN_KERNEL_ADDRESS == MIPS_KSEG2_START
 	li	t0, VM_MIN_KERNEL_ADDRESS	# compute index
@@ -2196,4 +2447,15 @@
 #endif
 
+#if defined(MULTIPROCESSOR) && (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	/*
+	 * Grab the TLB lock (we could use LL/SC but this is shorter)
+	 */
+	_MFC0	a3, MIPS_COP_0_OSSCRATCH, 2
+	li	v1, __SIMPLELOCK_LOCKED
+1:	swapw	v1, a3
+	bnez	v1, 1b
+	 nop
+#endif
+
 	and	t0, v0, MIPS3_PG_ODDPG
 	beqz	t0, MIPSX(entry0)
@@ -2203,29 +2465,22 @@
 
 MIPSX(entry0):
+	_MFC0	t3, MIPS_COP_0_TLB_HI		# save TLB_HI
 	_MTC0	v0, MIPS_COP_0_TLB_HI		# VPN = va
 	COP0_SYNC
+	tlbp					# probe VPN
+	COP0_SYNC
+	mfc0	t0, MIPS_COP_0_TLB_INDEX
+#ifdef MIPS3
 	nop
-	nop
-	tlbp					# probe VPN
-	COP0_SYNC
-	nop
-	nop
-	mfc0	t0, MIPS_COP_0_TLB_INDEX
-	nop
+#endif
 	bltz	t0, MIPSX(entry0set)
 	sll	t0, t0, PGSHIFT + 1		# PAGE_SHIFT + 1
 	PTR_LA	t0, MIPS_KSEG0_START(t0)
 	_MTC0	t0, MIPS_COP_0_TLB_HI
-	COP0_SYNC
 	_MTC0	zero, MIPS_COP_0_TLB_LO0
-	COP0_SYNC
 	_MTC0	zero, MIPS_COP_0_TLB_LO1
 	COP0_SYNC
-	nop
-	nop
 	tlbwi
 	COP0_SYNC
-	nop
-	nop
 	_MTC0	v0, MIPS_COP_0_TLB_HI		# set VPN again
 	COP0_SYNC
@@ -2241,451 +2496,161 @@
 	or	a1, MIPS3_PG_G
 	_MTC0	a1, MIPS_COP_0_TLB_LO0		# upte[0] | PG_G
-	COP0_SYNC
 	or	a2, MIPS3_PG_G
 	_MTC0	a2, MIPS_COP_0_TLB_LO1		# upte[1] | PG_G
 	COP0_SYNC
-	nop
-	nop
 	tlbwi					# set TLB entry #0
 	COP0_SYNC
-	nop
-	nop
-
+	_MTC0	t3, MIPS_COP_0_TLB_HI		# restore TLB_HI
+	COP0_SYNC
+#if defined(MULTIPROCESSOR) && (MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	INT_S	zero, 0(a3)			# clear tlb lock
+#endif
 MIPSX(resume):
 #endif /* !ENABLE_MIPS_16KB_PAGE || VMSWAP_UAREA */
+#if (MIPS32R2 + MIPS64R2 + MIPS64R2_RMIXL) > 0
+	PTR_L	v0, L_PRIVATE(a0)		# get lwp private
+	_MTC0	v0, MIPS_COP_0_TLB_CONTEXT, 4	# make available for rdhwr
+#endif
 	j	ra
-	nop
+	 nop
 END(MIPSX(cpu_switch_resume))
 
-/*
- * void mipsN_tlb_invalidate_addr(vaddr_t va)
- *
- * Invalidate a TLB entry which has the given vaddr and ASID if found.
- */
-LEAF_NOPROFILE(MIPSX(tlb_invalidate_addr))
-	mfc0	v1, MIPS_COP_0_STATUS		# save status register
-	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
-	COP0_SYNC
-
-	li	v0, (MIPS3_PG_HVPN | MIPS3_PG_ASID)
-	_MFC0	t0, MIPS_COP_0_TLB_HI		# save current ASID
-	mfc0	t3, MIPS_COP_0_TLB_PG_MASK	# save current pgMask
-	and	a0, v0				# make sure valid entryHi
-	_MTC0	a0, MIPS_COP_0_TLB_HI		# look for the vaddr & ASID
-	COP0_SYNC
-	nop
-	nop
-	tlbp					# probe the entry in question
-	COP0_SYNC
-	nop
-	nop
-	mfc0	v0, MIPS_COP_0_TLB_INDEX	# see what we got
-	#nop					# -slip-
-	#nop					# -slip-
-	bltz	v0, 1f				# index < 0 then skip
-	 li	t1, MIPS_KSEG0_START		# invalid address
-	PTR_SLL	v0, PGSHIFT + 1			# PAGE_SHIFT + 1
-	PTR_ADDU t1, v0
-	_MTC0	t1, MIPS_COP_0_TLB_HI		# make entryHi invalid
-	COP0_SYNC
-	_MTC0	zero, MIPS_COP_0_TLB_LO0	# zero out entryLo0
-	COP0_SYNC
-	_MTC0	zero, MIPS_COP_0_TLB_LO1	# zero out entryLo1
-	COP0_SYNC
-#if 1
-	nop
-#else
-	mtc0	zero, MIPS_COP_0_TLB_PG_MASK	# zero out pageMask
-#endif
-	COP0_SYNC
-	nop
-	nop
-
-	tlbwi
-	COP0_SYNC
-	nop
-	nop
-1:
-	_MTC0	t0, MIPS_COP_0_TLB_HI		# restore current ASID
-	COP0_SYNC
-	mtc0	t3, MIPS_COP_0_TLB_PG_MASK	# restore pgMask
-	COP0_SYNC
-	nop
-	nop
-	j	ra
-	mtc0	v1, MIPS_COP_0_STATUS		# restore status register
-	COP0_SYNC				# XXXX - not executed!!
-END(MIPSX(tlb_invalidate_addr))
-
-/*
- * void mipsN_tlb_invalidate_asids(uint32_t base, uint32_t limit);
- *
- * Invalidate TLB entries belong to per process user spaces with
- * base <= ASIDs < limit while leaving entries for kernel space
- * marked global intact.
- */
-LEAF_NOPROFILE(MIPSX(tlb_invalidate_asids))
-	mfc0	v1, MIPS_COP_0_STATUS		# save status register
-	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
-	COP0_SYNC
-
+/*--------------------------------------------------------------------------
+ *
+ * mipsN_tlb_write_indexed --
+ *
+ *      Write the given entry into the TLB at the given index.
+ *      Pass full R4000 style TLB info including variable page size mask.
+ *
+ *      mipsN_tlb_write_indexed(size_t tlb_index, const struct tlbmask *tlb)
+ *
+ * Results:
+ *      None.
+ *
+ * Side effects:
+ *      TLB entry set.
+ *
+ *--------------------------------------------------------------------------
+ */
+LEAF(MIPSX(tlb_write_indexed))
+	mfc0	v1, MIPS_COP_0_STATUS		# Save the status register.
+	RESET_EXCEPTION_LEVEL_DISABLE_INTERRUPTS(v0)
+	COP0_SYNC
+	INT_L	a2, TLBMASK_LO0(a1)		# fetch tlb->tlb_lo0
+	INT_L	a3, TLBMASK_LO1(a1)		# fetch tlb->tlb_lo1
+	mfc0	v0, MIPS_COP_0_TLB_PG_MASK	# Save current page mask.
 	_MFC0	t0, MIPS_COP_0_TLB_HI		# Save the current PID.
-	mfc0	t1, MIPS_COP_0_TLB_WIRED
-	li	v0, MIPS_KSEG0_START		# invalid address
-	INT_L	t2, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
-	mfc0	t3, MIPS_COP_0_TLB_PG_MASK	# save current pgMask
-
-	# do {} while (t1 < t2)
-1:
-	mtc0	t1, MIPS_COP_0_TLB_INDEX	# set index
-	COP0_SYNC
-	sll	ta0, t1, PGSHIFT + 1		# PAGE_SHIFT + 1
-	nop
-	/* XXX simonb: lose this nop for mips32/64? */
-	nop
-	tlbr					# obtain an entry
-	COP0_SYNC
-	/* XXX simonb: lose these nops for mips32/64? */
-	nop
-	nop
-	nop
-	_MFC0	a0, MIPS_COP_0_TLB_LO1
-	and	a0, MIPS3_PG_G			# check to see it has G bit
-	bnez	a0, 2f				# yep, skip this one.
-	 nop
-	_MFC0	a0, MIPS_COP_0_TLB_HI		# get VA and ASID
-	and	a0, MIPS3_PG_ASID		# focus on ASID
-	sltu	a3, a0, a1			# asid < base?
-	bnez	a3, 2f				# yes, skip this entry.
-	 nop
-	sltu	a3, a0, a2			# asid < limit
-	beqz	a3, 2f				# nope, skip this entry.
-	 nop
-	PTR_ADDU ta0, v0
-
-	_MTC0	ta0, MIPS_COP_0_TLB_HI		# make entryHi invalid
-	COP0_SYNC
-	_MTC0	zero, MIPS_COP_0_TLB_LO0	# zero out entryLo0
-	COP0_SYNC
-	_MTC0	zero, MIPS_COP_0_TLB_LO1	# zero out entryLo1
-	COP0_SYNC
-	mtc0	zero, MIPS_COP_0_TLB_PG_MASK	# zero out mask entry
-	COP0_SYNC
-	/* XXX simonb: lose these nops for mips32/64? */
-	nop
-	nop
-	tlbwi					# invalidate the TLB entry
-	COP0_SYNC
-2:
-	addu	t1, 1
-	bne	t1, t2, 1b
-	 nop
-
-	_MFC0	t0, MIPS_COP_0_TLB_HI		# restore PID.
-	COP0_SYNC
-	mtc0	t3, MIPS_COP_0_TLB_PG_MASK	# restore pgMask
-	COP0_SYNC
-	/* XXX simonb: lose these nops for mips32/64? */
-	nop
-	nop
-	j	ra				# new ASID will be set soon
-	 mtc0	v1, MIPS_COP_0_STATUS		# restore status register
-	COP0_SYNC				# XXXX - not executed!!
-END(MIPSX(tlb_invalidate_asids))
-
-/*
- * u_int mipsN_tlb_record_asids(u_long *bitmap, uint32_t asid_mask);
- *
- * Record all the ASIDs in use in the TLB and return the number of different
- * ASIDs present.
- */
-LEAF_NOPROFILE(MIPSX(tlb_record_asids))
-
-	_MFC0	a3, MIPS_COP_0_TLB_HI		# Save the current PID.
-	mfc0	ta0, MIPS_COP_0_TLB_WIRED
-	INT_L	ta1, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
-	move	ta2, zero
-	li	ta3, 1
-	move	v0, zero
-
-	mfc0	v1, MIPS_COP_0_STATUS		# save status register
-#ifdef _LP64
-	and	t0, v1, MIPS_SR_INT_IE
-	xor	t0, v1
-	mtc0	t0, MIPS_COP_0_STATUS		# disable interrupts
-#else
-	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
-#endif
-	COP0_SYNC
-
-	# do {} while (ta0 < ta1)
-1:
-	mtc0	ta0, MIPS_COP_0_TLB_INDEX	# set index
-	COP0_SYNC
-	nop
-	nop
-	/* XXX simonb: lose this nop for mips32/64? */
-	nop
-	tlbr					# obtain an entry
-	COP0_SYNC
-	/* XXX simonb: lose these nops for mips32/64? */
-	nop
-	nop
-	nop
-	_MFC0	t0, MIPS_COP_0_TLB_LO1
-	and	t0, MIPS3_PG_G			# check to see it has G bit
-	bnez	t0, 4f				# yep, skip this one.
-	 nop
-	_MFC0	t0, MIPS_COP_0_TLB_HI		# get VA and ASID
-	and	t0, a1				# focus on ASID
-
-	srl	a2, t0, 3 + LONG_SCALESHIFT	# drop low 5 or 6 bits
-	sll	a2, LONG_SCALESHIFT		# make an index for the bitmap
-	_SLLV	t0, ta3, t0			# t0 is mask (ta3 == 1)
-
-	PTR_ADDU a2, a0				# index into the bitmap 
-	beq	a2, ta2, 3f			# is the desired cell loaded?
-	 nop					#    yes, don't reload it
-	beqz	ta2, 2f				# have we ever loaded it?
-	 nop					#   nope, so don't save it.
-
-	LONG_S	t2, 0(ta2)			# save the updated value.
-2:
-	move	ta2, a2				# remember the new cell's addr
-	LONG_L	t2, 0(ta2)			# and load it
-3:
-	and	t1, t2, t0			# t1 = t2 & t0
-	sltu	t1, t1, ta3			# t1 = t1 < 1 (aka t1 == 0)
-	addu	v0, t1				# v0 += t1
-	or	t2, t0				# or in the new ASID bits
-4:
-	addu	ta0, 1				# increment TLB entry #
-	bne	ta0, ta1, 1b			# keep lookup if not limit
-	 nop
-
-	beqz	ta2, 5f				# do we have a cell to write?
-	 nop					#   nope.  nothing
-
-	LONG_S	t2, 0(ta2)			# save the updated value.
-5:
-	_MTC0	a3, MIPS_COP_0_TLB_HI		# restore ASID
-	COP0_SYNC
-
-	mtc0	v1, MIPS_COP_0_STATUS		# restore status register
-	j	ra
-	 COP0_SYNC				# XXXX - not executed!!
-END(MIPSX(tlb_record_asids))
-
-/*
- * void mipsN_tlb_invalidate_globals(void);
- *
- * Invalidate the non-wired TLB entries belonging to kernel space while
- * leaving entries for user space (not marked global) intact.
- */
-LEAF_NOPROFILE(MIPSX(tlb_invalidate_globals))
-	mfc0	v1, MIPS_COP_0_STATUS		# save status register
-	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
-	COP0_SYNC
-
-	mfc0	t1, MIPS_COP_0_TLB_WIRED
-	li	v0, MIPS_KSEG0_START		# invalid address
-	INT_L	t2, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
-	mfc0	t3, MIPS_COP_0_TLB_PG_MASK	# save current pgMask
-
-	# do {} while (t1 < t2)
-1:
-	mtc0	t1, MIPS_COP_0_TLB_INDEX	# set index
-	COP0_SYNC
-	sll	ta0, t1, PGSHIFT + 1		# PAGE_SHIFT + 1
-	nop
-	/* XXX simonb: lose this nop for mips32/64? */
-	nop
-	tlbr					# obtain an entry
-	COP0_SYNC
-	/* XXX simonb: lose these nops for mips32/64? */
-	nop
-	nop
-	nop
-	_MFC0	a0, MIPS_COP_0_TLB_LO1
-	and	a0, MIPS3_PG_G			# check to see it has G bit
-	beqz	a0, 2f				# no, skip this entry
-	 nop
-	PTR_ADDU ta0, v0
-
-	_MTC0	ta0, MIPS_COP_0_TLB_HI		# make entryHi invalid
-	COP0_SYNC
-	_MTC0	zero, MIPS_COP_0_TLB_LO0	# zero out entryLo0
-	COP0_SYNC
-	_MTC0	zero, MIPS_COP_0_TLB_LO1	# zero out entryLo1
-	COP0_SYNC
-	mtc0	zero, MIPS_COP_0_TLB_PG_MASK	# zero out mask entry
-	COP0_SYNC
-	/* XXX simonb: lose these nops for mips32/64? */
-	nop
-	nop
-	tlbwi					# invalidate the TLB entry
-	COP0_SYNC
-2:
-	addu	t1, 1
-	bne	t1, t2, 1b
-	nop
-
-	mtc0	t3, MIPS_COP_0_TLB_PG_MASK	# restore pgMask
-	COP0_SYNC
-	/* XXX simonb: lose these nops for mips32/64? */
-	nop
-	nop
-	j	ra				# new ASID will be set soon
-	 mtc0	v1, MIPS_COP_0_STATUS		# restore status register
-	COP0_SYNC				# XXXX - not executed!!
-END(MIPSX(tlb_invalidate_globals))
-
-/*
- * void mipsN_tlb_invalidate_all(void);
- *
- * Invalidate all of non-wired TLB entries.
- */
-LEAF_NOPROFILE(MIPSX(tlb_invalidate_all))
-	mfc0	v1, MIPS_COP_0_STATUS		# save status register
-	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
-	COP0_SYNC
-
-	INT_L	a0, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
-
-	li	v0, MIPS_KSEG0_START		# invalid address
-	_MFC0	t0, MIPS_COP_0_TLB_HI		# save current ASID
-	mfc0	t1, MIPS_COP_0_TLB_WIRED
-	mfc0	t2, MIPS_COP_0_TLB_PG_MASK	# save current pgMask
-
-	_MTC0	zero, MIPS_COP_0_TLB_LO0	# zero out entryLo0
-	COP0_SYNC
-	_MTC0	zero, MIPS_COP_0_TLB_LO1	# zero out entryLo1
-	COP0_SYNC
-	mtc0	zero, MIPS_COP_0_TLB_PG_MASK	# zero out pageMask
-	COP0_SYNC
-
-	# do {} while (t1 < a0)
-1:
-	mtc0	t1, MIPS_COP_0_TLB_INDEX	# set TLBindex
-	COP0_SYNC
-	sll	ta0, t1, PGSHIFT + 1		# PAGE_SHIFT + 1
-	PTR_ADDU ta0, v0
-	_MTC0	ta0, MIPS_COP_0_TLB_HI		# make entryHi invalid
-	COP0_SYNC
-	nop
-	nop
-	tlbwi					# clear the entry
-	COP0_SYNC
-	addu	t1, 1				# increment index
-	bne	t1, a0, 1b
-	 nop
-
-	_MTC0	t0, MIPS_COP_0_TLB_HI		# restore ASID
-	COP0_SYNC
-	mtc0	t2, MIPS_COP_0_TLB_PG_MASK	# restore pgMask
-	COP0_SYNC
-	nop
-	nop
-	j	ra
-	 mtc0	v1, MIPS_COP_0_STATUS		# restore status register
-	COP0_SYNC				# XXXX - not executed!!
-END(MIPSX(tlb_invalidate_all))
-
-/*
- * mipsX_tlb_enter(size_t tlb_index, vaddr_t va, uint32_t pte);
- */
-LEAF(MIPSX(tlb_enter))
+
+	_MTC0	a2, MIPS_COP_0_TLB_LO0		# Set up entry low0.
+	_MTC0	a3, MIPS_COP_0_TLB_LO1		# Set up entry low1.
+	COP0_SYNC
+	INT_L	a2, TLBMASK_MASK(a1)		# fetch tlb->tlb_mask
+	PTR_L	a3, TLBMASK_HI(a1)		# fetch tlb->tlb_hi
+	mtc0	a0, MIPS_COP_0_TLB_INDEX	# Set the index.
+	mtc0	a2, MIPS_COP_0_TLB_PG_MASK	# Set up entry pagemask.
+	_MTC0	a3, MIPS_COP_0_TLB_HI		# Set up entry high.
+	COP0_SYNC
+	tlbwi					# Write the TLB
+	COP0_SYNC
+
+	_MTC0	t0, MIPS_COP_0_TLB_HI		# Restore the PID.
+	mtc0	v0, MIPS_COP_0_TLB_PG_MASK	# Restore page mask.
+	COP0_SYNC
+	mtc0	v1, MIPS_COP_0_STATUS		# Restore the status register
+	JR_HB_RA
+END(MIPSX(tlb_write_indexed))
+
+#if defined(MIPS3)
+/*----------------------------------------------------------------------------
+ *
+ * mipsN_VCED --
+ *
+ *	Handle virtual coherency exceptions.
+ *	Called directly from the mips3 exception-table code.
+ *	only k0, k1 are available on entry
+ *
+ * Results:
+ *	None.
+ *
+ * Side effects:
+ *	Remaps the conflicting address as uncached and returns
+ *	from the exception.
+ *
+ *	NB: cannot be profiled, all registers are user registers on entry.
+ *
+ *----------------------------------------------------------------------------
+ */
+LEAF_NOPROFILE(MIPSX(VCED))
 	.set	noat
-	mfc0	ta0, MIPS_COP_0_TLB_HI		# save EntryHi
-
-	and	a3, a1, MIPS3_PG_ODDPG		# select odd page bit
-	xor	a3, a1				# clear it.
-	mtc0	a3, MIPS_COP_0_TLB_HI		# set the VA for tlbp
-	COP0_SYNC
-	nop
-	nop
-
-	and	t2, a2, MIPS3_PG_G		# make prototype tlb_lo0
-	and	t3, a2, MIPS3_PG_G		# make prototype tlb_lo1
-
-	tlbp					# is va in TLB?
-	nop
-	nop
-	nop
-
-	mfc0	v0, MIPS_COP_0_TLB_INDEX	# was it in the TLB?
-	bltz	v0, 1f				# nope
-	 nop
-
-	/*
-	 * Get the existing tlb_lo's because we need to replace one of them.
-	 */
-	mfc0	t2, MIPS_COP_0_TLB_LO0		# save for update
-	mfc0	t3, MIPS_COP_0_TLB_LO1		# save for update
-
-	/*
-	 * If it's already where we want, no reason to invalidate it.
-	 */
-	beq	v0, a0, 2f			# already where we want it?
-	 nop					
-
-	/*
-	 * Make an
-	 */
-	sll	t1, 1 + PGSHIFT			# make a fake addr for the entry
-	lui	v1, %hi(MIPS_KSEG0_START)
-	or	t1, v1
-	mtc0	t1, MIPS_COP_0_TLB_HI
-	COP0_SYNC
-	nop
-	nop
-
-	and	t0, a2, MIPS3_PG_G		# make prototype tlb_lo
-	mtc0	t0, MIPS_COP_0_TLB_LO0		# use an invalid tlb_lo
-	COP0_SYNC
-	mtc0	t0, MIPS_COP_0_TLB_LO1		# use an invalid tlb_lo
-	COP0_SYNC
-
-	tlbwi					# now write the invalid TLB
-	COP0_SYNC
-
-	mtc0	a3, MIPS_COP_0_TLB_HI		# restore the addr for new TLB
-	COP0_SYNC
-	nop
-	nop
-1:
-	mtc0	a0, MIPS_COP_0_TLB_INDEX	# set the index
-	COP0_SYNC
-
-2:
-	and	v1, a1, MIPS3_PG_ODDPG		# odd or even page
-	sll	v1, 31 - PGSHIFT		# move to MSB
-	sra	v1, 31				# v1 a mask (0/~0 = even/odd)
-	not	v0, v1				# v0 a mask (~0/0 = even/odd)
-
-	and	ta2, t2, v1
-	and	ta3, a2, v0
-	or	t2, ta2, ta3			# t2 = (v1 & t2) | (~v1 & a2)
-	and	ta2, t3, v0
-	and	ta3, a2, v1
-	or	t3, ta2, ta3			# t3 = (~v1 & t3) | (v1 & a2)
-
-	mtc0	t2, MIPS_COP_0_TLB_LO0		# set tlb_lo0 (even)
-	COP0_SYNC
-	mtc0	t3, MIPS_COP_0_TLB_LO1		# set tlb_lo1 (odd)
-	COP0_SYNC
-
-	tlbwi					# enter it into the TLB
-	nop
-	nop
-	nop
-
-	mtc0	ta1, MIPS_COP_0_TLB_HI		# restore EntryHi
-	COP0_SYNC
-
-	j	ra
-	 nop
+	_MFC0	k0, MIPS_COP_0_BAD_VADDR	# fault addr.
+	li	k1, -16
+	and	k0, k1
+	cache	(CACHE_R4K_SD | CACHEOP_R4K_HIT_WB_INV), 0(k0)
+	cache	(CACHE_R4K_D | CACHEOP_R4K_HIT_INV), 0(k0)
+#ifdef DEBUG
+	_MFC0	k0, MIPS_COP_0_BAD_VADDR
+	PTR_LA	k1, VCED_vaddr
+	PTR_S	k0, 0(k1)
+	_MFC0	k0, MIPS_COP_0_EXC_PC
+	PTR_LA	k1, VCED_epc
+	PTR_S	k0, 0(k1)
+	PTR_LA	k1, VCED_count		# count number of exceptions
+	PTR_SRL	k0, k0, 26		# position upper 4 bits of VA
+	and	k0, k0, 0x3c		# mask it off
+	PTR_ADDU k1, k0			# get address of count table
+	LONG_L	k0, 0(k1)
+	LONG_ADDU k0, 1
+	LONG_S	k0, 0(k1)
+#endif
+	eret
 	.set	at
-END(MIPSX(tlb_enter))
+
+#ifdef DEBUG
+	.data
+	.globl	_C_LABEL(VCED_count)
+_C_LABEL(VCED_count):
+	LONG_WORD	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+	.globl	_C_LABEL(VCED_epc)
+_C_LABEL(VCED_epc):
+	PTR_WORD	0
+	.globl	_C_LABEL(VCED_vaddr)
+_C_LABEL(VCED_vaddr):
+	PTR_WORD	0
+	.text
+#endif
+END(MIPSX(VCED))
+
+LEAF_NOPROFILE(MIPSX(VCEI))
+	.set	noat
+	_MFC0	k0, MIPS_COP_0_BAD_VADDR	# fault addr.
+	cache	(CACHE_R4K_SD | CACHEOP_R4K_HIT_WB_INV), 0(k0)
+	cache	(CACHE_R4K_I | CACHEOP_R4K_HIT_INV), 0(k0)
+#ifdef DEBUG
+	_MFC0	k0, MIPS_COP_0_BAD_VADDR
+	PTR_LA	k1, VCEI_vaddr
+	PTR_S	k0, 0(k1)
+	PTR_LA	k1, VCEI_count		# count number of exceptions
+	PTR_SRL	k0, k0, 26		# position upper 4 bits of VA
+	and	k0, k0, 0x3c		# mask it off
+	PTR_ADDU k1, k0			# get address of count table
+	LONG_L	k0, 0(k1)
+	PTR_ADDU k0, 1
+	LONG_S	k0, 0(k1)
+#endif
+	eret
+	.set	at
+
+#ifdef DEBUG
+	.data
+	.globl	_C_LABEL(VCEI_count)
+_C_LABEL(VCEI_count):
+	LONG_WORD	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+	.globl	_C_LABEL(VCEI_vaddr)
+_C_LABEL(VCEI_vaddr):
+	PTR_WORD	0
+	.text
+#endif
+END(MIPSX(VCEI))
+#endif /* MIPS3 */
 #endif /* !TSAR */
 
@@ -2716,4 +2681,8 @@
 _C_LABEL(MIPSX(locore_vec)):
 #ifndef TSAR
+	PTR_WORD _C_LABEL(MIPSX(cpu_switch_resume))
+	PTR_WORD _C_LABEL(MIPSX(lwp_trampoline))
+	PTR_WORD _C_LABEL(MIPSX(setfunc_trampoline))
+	PTR_WORD _C_LABEL(MIPSX(wbflush)) # wbflush
 	PTR_WORD _C_LABEL(MIPSX(tlb_set_asid))
 	PTR_WORD _C_LABEL(MIPSX(tlb_invalidate_asids))
@@ -2722,8 +2691,13 @@
 	PTR_WORD _C_LABEL(MIPSX(tlb_invalidate_all))
 	PTR_WORD _C_LABEL(MIPSX(tlb_record_asids))
-	PTR_WORD _C_LABEL(MIPSX(tlb_update))
+	PTR_WORD _C_LABEL(MIPSX(tlb_update_addr))
 	PTR_WORD _C_LABEL(MIPSX(tlb_enter))
 	PTR_WORD _C_LABEL(MIPSX(tlb_read_indexed))
-#else
+	PTR_WORD _C_LABEL(MIPSX(tlb_write_indexed))
+#else
+	PTR_WORD _C_LABEL(nullop)
+	PTR_WORD _C_LABEL(MIPSX(lwp_trampoline))
+	PTR_WORD _C_LABEL(MIPSX(setfunc_trampoline))
+	PTR_WORD _C_LABEL(MIPSX(wbflush)) # wbflush
 	PTR_WORD 0
 	PTR_WORD 0
@@ -2735,21 +2709,16 @@
 	PTR_WORD 0
 	PTR_WORD 0
-#endif
-	PTR_WORD _C_LABEL(MIPSX(wbflush))
+	PTR_WORD 0
+#endif
 
 	.globl _C_LABEL(MIPSX(locoresw))
 _C_LABEL(MIPSX(locoresw)):
-#ifdef TSAR
-	PTR_WORD _C_LABEL(nullop)
-#else
-	PTR_WORD _C_LABEL(MIPSX(cpu_switch_resume))
-#endif
-	PTR_WORD _C_LABEL(MIPSX(lwp_trampoline))
-	PTR_WORD _C_LABEL(nullop)	# cpu_idle
-	PTR_WORD _C_LABEL(MIPSX(setfunc_trampoline))
-	PTR_WORD _C_LABEL(nullop)	# send ipi
-	PTR_WORD _C_LABEL(nullop)	# cpu_offline_md
-	PTR_WORD _C_LABEL(nullop)	# spare
-	PTR_WORD _C_LABEL(nullop)	# spare
+	PTR_WORD _C_LABEL(MIPSX(wbflush))	# lsw_wbflush
+	PTR_WORD _C_LABEL(nullop)		# lsw_cpu_idle
+	PTR_WORD _C_LABEL(nullop)		# lsw_send_ipi
+	PTR_WORD _C_LABEL(nullop)		# lsw_cpu_offline_md
+	PTR_WORD _C_LABEL(nullop)		# lsw_cpu_init
+	PTR_WORD _C_LABEL(nullop)		# lsw_cpu_run
+	PTR_WORD _C_LABEL(nullop)		# lsw_bus_error
 
 MIPSX(excpt_sw):
@@ -2776,6 +2745,6 @@
 	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))	# 12 arithmetic overflow
 	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))	# 13 r4k trap exception
-#if defined(MIPS3) && !defined(MIPS3_5900) && !defined(TSAR)
-	PTR_WORD _C_LABEL(mips3_VCEI)			# 14 r4k virt coherence
+#if defined(MIPS3) && !defined(TSAR)
+	PTR_WORD _C_LABEL(MIPSX(VCEI))			# 14 r4k virt coherence
 #else
 	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))	# 14 reserved
@@ -2797,6 +2766,6 @@
 	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))	# 29 reserved
 	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))	# 30 reserved
-#if defined(MIPS3) && !defined(MIPS3_5900) && !defined(TSAR)
-	PTR_WORD _C_LABEL(mips3_VCED)		# 31 v. coherence exception data
+#if defined(MIPS3) && !defined(TSAR)
+	PTR_WORD _C_LABEL(MIPSX(VCED))			# 31 v. coherence exception data
 #else
 	PTR_WORD _C_LABEL(MIPSX(kern_gen_exception))	# 31 reserved
@@ -2815,10 +2784,10 @@
 	PTR_WORD _C_LABEL(MIPSX(systemcall))		#  8
 	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))	#  9
-	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))	# 10
+	PTR_WORD _C_LABEL(MIPSX(user_reserved_insn))	# 10
 	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))	# 11
 	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))	# 12
 	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))	# 13
-#if defined(MIPS3) && !defined(MIPS3_5900) && !defined(TSAR)
-	PTR_WORD _C_LABEL(mips3_VCEI)			# 14
+#if defined(MIPS3) && !defined(TSAR)
+	PTR_WORD _C_LABEL(MIPSX(VCEI))			# 14
 #else
 	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))	# 14
@@ -2840,6 +2809,6 @@
 	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))	# 29
 	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))	# 30
-#if defined(MIPS3) && !defined(MIPS3_5900) && !defined(TSAR)
-	PTR_WORD _C_LABEL(mips3_VCED)			# 31 v. coherence exception data
+#if defined(MIPS3) && !defined(TSAR)
+	PTR_WORD _C_LABEL(MIPSX(VCED))			# 31 v. coherence exception data
 #else
 	PTR_WORD _C_LABEL(MIPSX(user_gen_exception))	# 31
Index: /trunk/src/sys/arch/mips/mips/mips_emul.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips_emul.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips_emul.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mips_emul.c,v 1.14.78.10 2010/05/15 20:27:48 matt Exp $ */
+/*	$NetBSD: mips_emul.c,v 1.14.78.13 2011/04/29 08:26:28 matt Exp $ */
 
 /*
@@ -28,62 +28,23 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mips_emul.c,v 1.14.78.10 2010/05/15 20:27:48 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips_emul.c,v 1.14.78.13 2011/04/29 08:26:28 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/cpu.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 
 #include <mips/locore.h>
 #include <mips/mips_opcode.h>
 
-#include <machine/cpu.h>
 #include <mips/reg.h>
 #include <mips/regnum.h>			/* symbolic register indices */
+#include <machine/pcb.h>
 #include <machine/vmparam.h>			/* for VM_MAX_ADDRESS */
 #include <mips/trap.h>
-
-#if !defined(NOFPU) || defined(FPEMUL)
-void MachEmulateFP(uint32_t, struct reg *, uint32_t);
-#endif
 
 static inline void	send_sigsegv(intptr_t, uint32_t, struct trapframe *,
 			    uint32_t);
 static inline void	update_pc(struct trapframe *, uint32_t);
-
-vaddr_t MachEmulateBranch(struct trapframe *, vaddr_t, unsigned, int);
-void	MachEmulateInst(uint32_t, uint32_t, vaddr_t, struct trapframe *);
-
-void	MachEmulateLWC0(uint32_t, struct trapframe *, uint32_t);
-void	MachEmulateSWC0(uint32_t, struct trapframe *, uint32_t);
-void	MachEmulateSpecial(uint32_t, struct trapframe *, uint32_t);
-void	MachEmulateSpecial3(uint32_t, struct trapframe *, uint32_t);
-void	MachEmulateLWC1(uint32_t, struct trapframe *, uint32_t);
-void	MachEmulateLDC1(uint32_t, struct trapframe *, uint32_t);
-void	MachEmulateSWC1(uint32_t, struct trapframe *, uint32_t);
-void	MachEmulateSDC1(uint32_t, struct trapframe *, uint32_t);
-
-void	bcemul_lb(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_lbu(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_lh(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_lhu(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_lw(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_lwl(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_lwr(uint32_t, struct trapframe *, uint32_t);
-#if defined(__mips_n32) || defined(__mips_n64) || defined(__mips_o64)
-void	bcemul_ld(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_ldl(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_ldr(uint32_t, struct trapframe *, uint32_t);
-#endif
-void	bcemul_sb(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_sh(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_sw(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_swl(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_swr(uint32_t, struct trapframe *, uint32_t);
-#if defined(__mips_n32) || defined(__mips_n64) || defined(__mips_o64)
-void	bcemul_sd(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_sdl(uint32_t, struct trapframe *, uint32_t);
-void	bcemul_sdr(uint32_t, struct trapframe *, uint32_t);
-#endif
 
 /*
@@ -100,6 +61,6 @@
  */
 vaddr_t
-MachEmulateBranch(struct trapframe *tf, vaddr_t instpc, unsigned fpuCSR,
-    int allowNonBranch)
+mips_emul_branch(struct trapframe *tf, vaddr_t instpc, uint32_t fpuCSR,
+    bool allowNonBranch)
 {
 #define	BRANCHTARGET(pc, i) (4 + (pc) + ((short)(i).IType.imm << 2))
@@ -110,5 +71,5 @@
 		inst.word = ufetch_uint32((void *)instpc);
 	else
-		inst.word = *(unsigned *)instpc;
+		inst.word = *(uint32_t *)instpc;
 
 	switch ((int)inst.JType.op) {
@@ -154,5 +115,5 @@
 	case OP_JAL:
 		nextpc = (inst.JType.target << 2) |
-			((unsigned)instpc & 0xF0000000);
+			((intptr_t)instpc & 0xF0000000);
 		break;
 
@@ -221,5 +182,5 @@
  */
 void
-MachEmulateInst(uint32_t status, uint32_t cause, vaddr_t opc,
+mips_emul_inst(uint32_t status, uint32_t cause, vaddr_t opc,
     struct trapframe *tf)
 {
@@ -238,38 +199,38 @@
 	switch (((InstFmt)inst).FRType.op) {
 	case OP_LWC0:
-		MachEmulateLWC0(inst, tf, cause);
+		mips_emul_lwc0(inst, tf, cause);
 		break;
 	case OP_SWC0:
-		MachEmulateSWC0(inst, tf, cause);
+		mips_emul_swc0(inst, tf, cause);
 		break;
 	case OP_SPECIAL:
-		MachEmulateSpecial(inst, tf, cause);
+		mips_emul_special(inst, tf, cause);
 		break;
 	case OP_SPECIAL3:
-		MachEmulateSpecial3(inst, tf, cause);
+		mips_emul_special3(inst, tf, cause);
 		break;
 	case OP_COP1:
 #if defined(FPEMUL)
-		MachEmulateFP(inst, &tf->tf_registers, cause);
+		mips_emul_fp(inst, tf, cause);
 		break;
 #endif
 	case OP_LWC1:
 #if defined(FPEMUL)
-		MachEmulateLWC1(inst, tf, cause);
+		mips_emul_lwc1(inst, tf, cause);
 		break;
 #endif
 	case OP_LDC1:
 #if defined(FPEMUL)
-		MachEmulateLDC1(inst, tf, cause);
+		mips_emul_ldc1(inst, tf, cause);
 		break;
 #endif
 	case OP_SWC1:
 #if defined(FPEMUL)
-		MachEmulateSWC1(inst, tf, cause);
+		mips_emul_swc1(inst, tf, cause);
 		break;
 #endif
 	case OP_SDC1:
 #if defined(FPEMUL)
-		MachEmulateSDC1(inst, tf, cause);
+		mips_emul_sdc1(inst, tf, cause);
 		break;
 #else
@@ -279,5 +240,5 @@
 	default:
 #if 1 /* def DEBUG */
-		printf("pid %d (%s): trap: bad insn %#"PRIxVADDR" cause %#x insn %#x\n", curproc->p_pid, curproc->p_comm, opc, cause, inst);
+		printf("pid %d (%s): trap: bad insn @ %#"PRIxVADDR" cause %#x insn %#x code %d\n", curproc->p_pid, curproc->p_comm, opc, cause, inst, code);
 #endif
 		tf->tf_regs[_R_CAUSE] = cause;
@@ -298,5 +259,5 @@
 {
 	ksiginfo_t ksi;
-	cause = (cause & 0xFFFFFF00) | (exccode << MIPS_CR_EXC_CODE_SHIFT);
+	cause = (cause & ~0xFF) | (exccode << MIPS_CR_EXC_CODE_SHIFT);
 	tf->tf_regs[_R_CAUSE] = cause;
 	tf->tf_regs[_R_BADVADDR] = vaddr;
@@ -315,5 +276,5 @@
 	if (cause & MIPS_CR_BR_DELAY)
 		tf->tf_regs[_R_PC] = 
-		    MachEmulateBranch(tf, tf->tf_regs[_R_PC],
+		    mips_emul_branch(tf, tf->tf_regs[_R_PC],
 			PCB_FSR(curpcb), 0);
 	else
@@ -325,5 +286,5 @@
  */
 void
-MachEmulateLWC0(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_lwc0(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -358,5 +319,5 @@
  */
 void
-MachEmulateSWC0(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_swc0(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -409,8 +370,10 @@
 
 void
-MachEmulateSpecial(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_special(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	ksiginfo_t ksi;
-	switch (((InstFmt)inst).RType.func) {
+	const InstFmt instfmt = { .word = inst };
+
+	switch (instfmt.RType.func) {
 	case OP_SYNC:
 		/* nothing */
@@ -432,13 +395,14 @@
 
 void
-MachEmulateSpecial3(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_special3(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	ksiginfo_t ksi;
-	switch (((InstFmt)inst).RType.func) {
+	const InstFmt instfmt = { .word = inst };
+	switch (instfmt.RType.func) {
 	case OP_RDHWR:
-		switch (((InstFmt)inst).RType.rd) {
+		switch (instfmt.RType.rd) {
 		case 29:
-			tf->tf_regs[((InstFmt)inst).RType.rt] =
-			    curlwp->l_md.md_tinfo;
+			tf->tf_regs[instfmt.RType.rt] =
+			    (mips_reg_t)(intptr_t)curlwp->l_private;
 			break;
 		}
@@ -453,5 +417,5 @@
 		ksi.ksi_addr = (void *)(intptr_t)tf->tf_regs[_R_PC];
 		(*curproc->p_emul->e_trapsignal)(curlwp, &ksi);
-		break;
+		return;
 	}
 
@@ -464,5 +428,5 @@
 
 void
-MachEmulateLWC1(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_lwc1(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -527,5 +491,5 @@
 
 void
-MachEmulateLDC1(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_ldc1(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -554,5 +518,5 @@
 
 void
-MachEmulateSWC1(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_swc1(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -617,5 +581,5 @@
 
 void
-MachEmulateSDC1(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_sdc1(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -644,5 +608,5 @@
 
 void
-bcemul_lb(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_lb(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -664,15 +628,15 @@
 	}
 
-	tf->tf_regs[(inst>>16)&0x1F] = (int32_t)x;
-
-	update_pc(tf, cause);
-}
-
-void
-bcemul_lbu(uint32_t inst, struct trapframe *tf, uint32_t cause)
-{
-	intptr_t	vaddr;
-	int16_t		offset;
-	uint8_t	x;
+	tf->tf_regs[(inst>>16)&0x1F] = x;
+
+	update_pc(tf, cause);
+}
+
+void
+mips_emul_lbu(uint32_t inst, struct trapframe *tf, uint32_t cause)
+{
+	intptr_t	vaddr;
+	int16_t		offset;
+	uint8_t		x;
 
 	offset = inst & 0xFFFF;
@@ -690,4 +654,56 @@
 	}
 
+	tf->tf_regs[(inst>>16)&0x1F] = x;
+
+	update_pc(tf, cause);
+}
+
+void
+mips_emul_lh(uint32_t inst, struct trapframe *tf, uint32_t cause)
+{
+	intptr_t	vaddr;
+	int16_t		offset;
+	int16_t		x;
+
+	offset = inst & 0xFFFF;
+	vaddr = tf->tf_regs[(inst>>21)&0x1F] + offset;
+
+	/* segment and alignment check */
+	if (vaddr > VM_MAXUSER_ADDRESS || (vaddr & 1)) {
+		send_sigsegv(vaddr, T_ADDR_ERR_LD, tf, cause);
+		return;
+	}
+
+	if (copyin((void *)vaddr, &x, 2) != 0) {
+		send_sigsegv(vaddr, T_TLB_LD_MISS, tf, cause);
+		return;
+	}
+
+	tf->tf_regs[(inst>>16)&0x1F] = x;
+
+	update_pc(tf, cause);
+}
+
+void
+mips_emul_lhu(uint32_t inst, struct trapframe *tf, uint32_t cause)
+{
+	intptr_t	vaddr;
+	int16_t		offset;
+	uint16_t	x;
+
+	offset = inst & 0xFFFF;
+	vaddr = tf->tf_regs[(inst>>21)&0x1F] + offset;
+
+	/* segment and alignment check */
+	if (vaddr > VM_MAXUSER_ADDRESS || (vaddr & 1)) {
+		send_sigsegv(vaddr, T_ADDR_ERR_LD, tf, cause);
+		return;
+	}
+
+	if (copyin((void *)vaddr, &x, 2) != 0) {
+		send_sigsegv(vaddr, T_TLB_LD_MISS, tf, cause);
+		return;
+	}
+
 	tf->tf_regs[(inst>>16)&0x1F] = (mips_ureg_t)x;
 
@@ -696,20 +712,20 @@
 
 void
-bcemul_lh(uint32_t inst, struct trapframe *tf, uint32_t cause)
-{
-	intptr_t	vaddr;
-	int16_t		offset;
-	int16_t		x;
-
-	offset = inst & 0xFFFF;
-	vaddr = tf->tf_regs[(inst>>21)&0x1F] + offset;
-
-	/* segment and alignment check */
-	if (vaddr > VM_MAXUSER_ADDRESS || (vaddr & 1)) {
-		send_sigsegv(vaddr, T_ADDR_ERR_LD, tf, cause);
-		return;
-	}
-
-	if (copyin((void *)vaddr, &x, 2) != 0) {
+mips_emul_lw(uint32_t inst, struct trapframe *tf, uint32_t cause)
+{
+	intptr_t	vaddr;
+	int16_t		offset;
+	int32_t		x;
+
+	offset = inst & 0xFFFF;
+	vaddr = tf->tf_regs[(inst>>21)&0x1F] + offset;
+
+	/* segment and alignment check */
+	if (vaddr > VM_MAXUSER_ADDRESS || (vaddr & 3)) {
+		send_sigsegv(vaddr, T_ADDR_ERR_LD, tf, cause);
+		return;
+	}
+
+	if (copyin((void *)vaddr, &x, 4) != 0) {
 		send_sigsegv(vaddr, T_TLB_LD_MISS, tf, cause);
 		return;
@@ -722,54 +738,5 @@
 
 void
-bcemul_lhu(uint32_t inst, struct trapframe *tf, uint32_t cause)
-{
-	intptr_t	vaddr;
-	int16_t		offset;
-	u_int16_t	x;
-
-	offset = inst & 0xFFFF;
-	vaddr = tf->tf_regs[(inst>>21)&0x1F] + offset;
-
-	/* segment and alignment check */
-	if (vaddr > VM_MAXUSER_ADDRESS || (vaddr & 1)) {
-		send_sigsegv(vaddr, T_ADDR_ERR_LD, tf, cause);
-		return;
-	}
-
-	if (copyin((void *)vaddr, &x, 2) != 0) {
-		send_sigsegv(vaddr, T_TLB_LD_MISS, tf, cause);
-		return;
-	}
-
-	tf->tf_regs[(inst>>16)&0x1F] = (mips_ureg_t)x;
-
-	update_pc(tf, cause);
-}
-
-void
-bcemul_lw(uint32_t inst, struct trapframe *tf, uint32_t cause)
-{
-	intptr_t	vaddr;
-	int16_t		offset;
-
-	offset = inst & 0xFFFF;
-	vaddr = tf->tf_regs[(inst>>21)&0x1F] + offset;
-
-	/* segment and alignment check */
-	if (vaddr > VM_MAXUSER_ADDRESS || (vaddr & 3)) {
-		send_sigsegv(vaddr, T_ADDR_ERR_LD, tf, cause);
-		return;
-	}
-
-	if (copyin((void *)vaddr, &(tf->tf_regs[(inst>>16)&0x1F]), 4) != 0) {
-		send_sigsegv(vaddr, T_TLB_LD_MISS, tf, cause);
-		return;
-	}
-
-	update_pc(tf, cause);
-}
-
-void
-bcemul_lwl(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_lwl(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -804,7 +771,7 @@
 
 void
-bcemul_lwr(uint32_t inst, struct trapframe *tf, uint32_t cause)
-{
-	intptr_t		vaddr;
+mips_emul_lwr(uint32_t inst, struct trapframe *tf, uint32_t cause)
+{
+	intptr_t	vaddr;
 	uint32_t	a, x, shift;
 	int16_t		offset;
@@ -838,5 +805,31 @@
 #if defined(__mips_n32) || defined(__mips_n64) || defined(__mips_o64)
 void
-bcemul_ld(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_lwu(uint32_t inst, struct trapframe *tf, uint32_t cause)
+{
+	intptr_t	vaddr;
+	int16_t		offset;
+	uint32_t	x;
+
+	offset = inst & 0xFFFF;
+	vaddr = tf->tf_regs[(inst>>21)&0x1F] + offset;
+
+	/* segment and alignment check */
+	if (vaddr > VM_MAX_ADDRESS || vaddr & 0x3) {
+		send_sigsegv(vaddr, T_ADDR_ERR_LD, tf, cause);
+		return;
+	}
+
+	if (copyin((void *)vaddr, &x, 4) != 0) {
+		send_sigsegv(vaddr, T_TLB_LD_MISS, tf, cause);
+		return;
+	}
+
+	tf->tf_regs[(inst>>16)&0x1F] = x;
+
+	update_pc(tf, cause);
+}
+
+void
+mips_emul_ld(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -861,5 +854,5 @@
 
 void
-bcemul_ldl(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_ldl(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -895,5 +888,5 @@
 
 void
-bcemul_ldr(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_ldr(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -930,5 +923,5 @@
 
 void
-bcemul_sb(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_sb(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -953,5 +946,5 @@
 
 void
-bcemul_sh(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_sh(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -976,5 +969,5 @@
 
 void
-bcemul_sw(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_sw(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -999,5 +992,5 @@
 
 void
-bcemul_swl(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_swl(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -1035,5 +1028,5 @@
 
 void
-bcemul_swr(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_swr(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -1072,5 +1065,5 @@
 #if defined(__mips_n32) || defined(__mips_n64) || defined(__mips_o64)
 void
-bcemul_sd(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_sd(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -1095,5 +1088,5 @@
 
 void
-bcemul_sdl(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_sdl(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
@@ -1132,5 +1125,5 @@
 
 void
-bcemul_sdr(uint32_t inst, struct trapframe *tf, uint32_t cause)
+mips_emul_sdr(uint32_t inst, struct trapframe *tf, uint32_t cause)
 {
 	intptr_t	vaddr;
Index: /trunk/src/sys/arch/mips/mips/mips_fixup.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips_fixup.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips_fixup.c	(revision 152)
@@ -29,7 +29,8 @@
 
 #include <sys/cdefs.h>
-
-__KERNEL_RCSID(0, "$NetBSD: mips_fixup.c,v 1.1.2.5 2010/03/01 19:26:01 matt Exp $");
-
+__KERNEL_RCSID(0, "mips_fixup.c,v 1.1.2.10 2011/04/29 08:26:28 matt Exp");
+
+#include "opt_mips3_wired.h"
+#include "opt_multiprocessor.h"
 #include "opt_cputype.h"
 #include <sys/param.h>
@@ -40,10 +41,14 @@
 #include <mips/cache.h>
 #include <mips/mips3_pte.h>
+#include <mips/regnum.h>
 
 #define	INSN_LUI_P(insn)	(((insn) >> 26) == 017)
 #define	INSN_LW_P(insn)		(((insn) >> 26) == 043)
+#define	INSN_SW_P(insn)		(((insn) >> 26) == 053)
 #define	INSN_LD_P(insn)		(((insn) >> 26) == 067)
+#define	INSN_SD_P(insn)		(((insn) >> 26) == 077)
 
 #define INSN_LOAD_P(insn)	(INSN_LD_P(insn) || INSN_LW_P(insn))
+#define INSN_STORE_P(insn)	(INSN_SD_P(insn) || INSN_SW_P(insn))
 
 bool
@@ -64,8 +69,9 @@
 	 * the value.
 	 */
-	const int32_t upper_addr = (addr & ~0xffff) + ((addr << 1) & 0x10000);
+	const int32_t upper_addr = (addr + 32768) & ~0xffff;
 
 	KASSERT((addr & ~0xfff) == ((addr + size - 1) & ~0xfff));
 
+	uint32_t lui_insn = 0;
 	for (uint32_t *insnp = start; insnp < end; insnp++) {
 		const uint32_t insn = *insnp;
@@ -78,6 +84,8 @@
 			    insn, lui_reg, offset);
 #endif
+			KASSERT(lui_reg == _R_K0 || lui_reg == _R_K1);
 			if (upper_addr == offset) {
 				lui_insnp = insnp;
+				lui_insn = insn;
 #ifdef DEBUG_VERBOSE
 				printf(" (maybe)");
@@ -85,31 +93,42 @@
 			} else {
 				lui_insnp = NULL;
+				lui_insn = 0;
 			}
 #ifdef DEBUG_VERBOSE
 			printf("\n");
 #endif
-		} else if (lui_insnp != NULL && INSN_LOAD_P(insn)) {
+		} else if (lui_insn != 0
+			   && (INSN_LOAD_P(insn) || INSN_STORE_P(insn))) {
 			size_t base = (insn >> 21) & 31;
+#if defined(DIAGNOSTIC) || defined(DEBUG_VERBOSE)
 			size_t rt = (insn >> 16) & 31;
+#endif
 			int32_t load_addr = upper_addr + (int16_t)insn;
 			if (addr <= load_addr
 			    && load_addr < addr + size
-			    && base == lui_reg
-			    && rt == lui_reg) {
+			    && base == lui_reg) {
+				KASSERT(rt == _R_K0 || rt == _R_K1);
 #ifdef DEBUG_VERBOSE
 				printf("%s: %#x: insn %08x: %s r%zu, %%lo(%08x)(r%zu)\n",
 				    __func__, (int32_t)(intptr_t)insnp,
-				    insn, INSN_LW_P(insn) ? "lw" : "ld",
+				    insn,
+				    INSN_LOAD_P(insn)
+					? INSN_LW_P(insn) ? "lw" : "ld"
+					: INSN_SW_P(insn) ? "sw" : "sd",
 				    rt, load_addr, base);
 #endif
-				new_insns[0] = *lui_insnp;
+				new_insns[0] = lui_insn;
 				new_insns[1] = *insnp;
 				if ((callback)(load_addr, new_insns)) {
-					*lui_insnp = new_insns[0];
-					*insnp = new_insns[1];
+					if (lui_insnp) {
+						*lui_insnp = new_insns[0];
+						*insnp = new_insns[1];
+					} else if (new_insns[1] == 0) {
+						*insnp = new_insns[0];
+					} else {
+						*insnp = new_insns[1];
+					}
 					fixed = true;
 				}
-				lui_insnp = NULL;
-			} else if (rt == lui_reg) {
 				lui_insnp = NULL;
 			}
@@ -124,4 +143,5 @@
 
 #ifndef TSAR
+#ifdef MIPS3_PLUS
 bool
 mips_fixup_zero_relative(int32_t load_addr, uint32_t new_insns[2])
@@ -149,5 +169,7 @@
 	printf("%s: %08x: insn#1 %08x: %s r%u, %d(r%u)\n",
 	    __func__, (int32_t)load_addr, new_insns[0],
-	    INSN_LW_P(new_insns[0]) ? "lw" : "ld",
+	    INSN_LOAD_P(new_insns[0])
+		? INSN_LW_P(new_insns[0]) ? "lw" : "ld"
+		: INSN_LW_P(new_insns[0]) ? "sw" : "sd",
 	    (new_insns[0] >> 16) & 31,
 	    (int16_t)new_insns[0],
@@ -167,5 +189,6 @@
 	if (ci->ci_tlb_slot < 0) {
 		ci->ci_tlb_slot = ti->ti_wired++;
-		mips3_cp0_wired_write(ti->ti_wired);
+		if (MIPS_HAS_R4K_MMU)
+			mips3_cp0_wired_write(ti->ti_wired);
 		tlb_enter(ci->ci_tlb_slot, -PAGE_SIZE, tlb_lo);
 	}
@@ -174,4 +197,5 @@
 	return true;
 }
+#endif /* MIPS3_PLUS */
 #endif /* !TSAR */
 
@@ -206,24 +230,25 @@
 
 void
-mips_fixup_stubs(uint32_t *start, uint32_t *end,
-	const struct mips_jump_fixup_info *fixups,
-	size_t nfixups)
-{
-	const uint32_t min_offset = fixups[0].jfi_stub;
-	const uint32_t max_offset = fixups[nfixups-1].jfi_stub;
+mips_fixup_stubs(uint32_t *start, uint32_t *end)
+{
 #ifdef DEBUG
 	size_t fixups_done = 0;
-	uint32_t cycles = (CPUISMIPS3 ? mips3_cp0_count_read() : 0);
-#endif
-
-#ifdef DIAGNOGSTIC
-	/*
-	 * Verify the fixup list is sorted from low stub to high stub.
-	 */
-	for (const struct mips_jump_fixup_info *jfi = fixups + 1;
-	     jfi < fixups + nfixups; jfi++) {
-		KASSERT(jfi[-1].jfi_stub < jfi[0].jfi_stub);
-	}
-#endif
+	uint32_t cycles =
+#if (MIPS3 + MIPS4 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+	    (CPUISMIPS3 ? mips3_cp0_count_read() : 0);
+#else
+	    0;
+#endif
+#endif
+	extern uint32_t __stub_start[], __stub_end[];
+
+#ifndef TSAR
+	KASSERT(MIPS_KSEG0_P(start));
+	KASSERT(MIPS_KSEG0_P(end));
+	KASSERT(MIPS_KSEG0_START == (((intptr_t)start >> 28) << 28));
+#endif
+
+	if (end > __stub_start)
+		end = __stub_start;
 
 	for (uint32_t *insnp = start; insnp < end; insnp++) {
@@ -231,4 +256,6 @@
 		uint32_t offset = insn & 0x03ffffff;
 		uint32_t opcode = insn >> 26;
+		const uint32_t * const stubp =
+		    &((uint32_t *)(((intptr_t)insnp >> 28) << 28))[offset];
 
 		/*
@@ -237,34 +264,69 @@
 		 */
 		if ((opcode != OPCODE_J && opcode != OPCODE_JAL)
-		    || offset < min_offset || max_offset < offset)
+		    || stubp < __stub_start || __stub_end <= stubp)
 			continue;
 
 		/*
-		 * We know it's a jump, but does it match one we want to
-		 * fixup?
+		 * Stubs typically look like:
+		 *	lui	v0, %hi(sym)
+		 *	lX	t9, %lo(sym)(v0)
+		 *	[nop]
+		 *	jr	t9
+		 *	nop
 		 */
-		for (const struct mips_jump_fixup_info *jfi = fixups;
-		     jfi < fixups + nfixups; jfi++) {
-			/*
-			 * The caller has sorted the fixup list from lowest
-			 * stub to highest stub so if the current offset is
-			 * less than the this fixup's stub offset, we know
-			 * can't match anything else in the fixup list.
-			 */
-			if (jfi->jfi_stub > offset)
-				break;
-
-			if (jfi->jfi_stub == offset) {
-				/*
-				 * Yes, we need to fix it up.  Replace the old
-				 * displacement with the real displacement.
-				 */
-				fixup_mips_jump(insnp, jfi);
+		const uint32_t lui_insn = stubp[0];
+		const uint32_t load_insn = stubp[1];
+#ifdef DIAGNOSTIC
+		if (stubp[2] == 0) {
+			KASSERT(stubp[3] == 0x03200008);	/* jr t9 */
+			KASSERT(stubp[4] == 0);			/* nop */
+		} else {
+			KASSERT(stubp[2] == 0x03200008);	/* jr t9 */
+			KASSERT(stubp[3] == 0);			/* nop */
+		}
+
+		KASSERT(INSN_LUI_P(lui_insn));
+#ifdef _LP64
+		KASSERT(INSN_LD_P(load_insn));
+#else
+		KASSERT(INSN_LW_P(load_insn));
+#endif
+		const u_int lui_reg = (lui_insn >> 16) & 31;
+		const u_int load_reg = (load_insn >> 16) & 31;
+#endif
+		KASSERT(((load_insn >> 21) & 31) == lui_reg);
+		KASSERT(load_reg == _R_T9);
+
+		intptr_t load_addr = ((int16_t)lui_insn << 16) + (int16_t) load_insn;
+#ifdef _LP64
+		const intptr_t real_addr = *(int64_t *)load_addr;
+#else
+		const intptr_t real_addr = *(int32_t *)load_addr;
+#endif
+		/*
+		 * If the real_addr has been set yet, don't fix up.
+		 */
+		if (real_addr == 0) {
+			continue;
+		}
+		/*
+		 * Verify the real destination is in the same 256MB
+		 * as the location of the jump instruction.
+		 */
+		KASSERT((real_addr >> 28) == ((intptr_t)insnp >> 28));
+
+		/*
+		 * Now fix it up.  Replace the old displacement to the stub
+		 * with the real displacement.
+		 */
+		struct mips_jump_fixup_info fixup = {
+		    .jfi_stub = fixup_addr2offset(stubp),
+		    .jfi_real = fixup_addr2offset(real_addr),
+		};
+
+		fixup_mips_jump(insnp, &fixup);
 #ifdef DEBUG
-				fixups_done++;
-#endif
-				break;
-			}
-		}
+		fixups_done++;
+#endif
 	}
 
@@ -278,6 +340,8 @@
 
 #ifdef DEBUG
+#if (MIPS3 + MIPS4 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 	if (CPUISMIPS3)
 		cycles = mips3_cp0_count_read() - cycles;
+#endif
 	printf("%s: %zu fixup%s done in %u cycles\n", __func__,
 	    fixups_done, fixups_done == 1 ? "" : "s",
@@ -286,22 +350,188 @@
 }
 
-void mips_cpu_switch_resume(struct lwp *l) __section(".stub");
+#define	__stub		__section(".stub")
+
+void	mips_cpu_switch_resume(struct lwp *)		__stub;
+void	tlb_set_asid(uint32_t)				__stub;
+void	tlb_invalidate_all(void)			__stub;
+void	tlb_invalidate_globals(void)			__stub;
+void	tlb_invalidate_asids(uint32_t, uint32_t)	__stub;
+void	tlb_invalidate_addr(vaddr_t)			__stub;
+u_int	tlb_record_asids(u_long *, uint32_t)		__stub;
+int	tlb_update(vaddr_t, uint32_t)			__stub;
+void	tlb_enter(size_t, vaddr_t, uint32_t)		__stub;
+void	tlb_read_indexed(size_t, struct tlbmask *)	__stub;
+void	tlb_write_indexed(size_t, const struct tlbmask *) __stub;
+
+/*
+ * wbflush isn't a stub since it gets overridden quite late
+ * (after mips_vector_init returns).
+ */
+void	wbflush(void)					/*__stub*/;
 
 void
 mips_cpu_switch_resume(struct lwp *l)
 {
-	(*mips_locoresw.lsw_cpu_switch_resume)(l);
-}
-
-void
-fixup_mips_cpu_switch_resume(void)
-{
-	extern uint32_t __cpu_switchto_fixup[];
-
-	struct mips_jump_fixup_info fixup = {
-		fixup_addr2offset(mips_cpu_switch_resume),
-		fixup_addr2offset(mips_locoresw.lsw_cpu_switch_resume)
-	};
-
-	fixup_mips_jump(__cpu_switchto_fixup, &fixup);
-}
+	(*mips_locore_jumpvec.ljv_cpu_switch_resume)(l);
+}
+
+#ifndef TSAR
+void
+tlb_set_asid(uint32_t asid)
+{
+        (*mips_locore_jumpvec.ljv_tlb_set_asid)(asid);  
+}
+
+void
+tlb_invalidate_all(void)
+{
+        (*mips_locore_jumpvec.ljv_tlb_invalidate_all)();
+}
+
+void
+tlb_invalidate_addr(vaddr_t va)
+{
+        (*mips_locore_jumpvec.ljv_tlb_invalidate_addr)(va);
+}
+
+void
+tlb_invalidate_globals(void)
+{
+        (*mips_locore_jumpvec.ljv_tlb_invalidate_globals)();
+}
+
+void
+tlb_invalidate_asids(uint32_t asid_lo, uint32_t asid_hi)
+{
+        (*mips_locore_jumpvec.ljv_tlb_invalidate_asids)(asid_lo, asid_hi);
+}
+
+u_int
+tlb_record_asids(u_long *bitmap, uint32_t asid_max)
+{
+        return (*mips_locore_jumpvec.ljv_tlb_record_asids)(bitmap, asid_max);
+}
+
+int
+tlb_update(vaddr_t va, uint32_t pte)
+{
+        return (*mips_locore_jumpvec.ljv_tlb_update)(va, pte);
+}
+
+void
+tlb_enter(size_t tlbno, vaddr_t va, uint32_t pte)
+{
+        (*mips_locore_jumpvec.ljv_tlb_enter)(tlbno, va, pte);
+}
+
+void
+tlb_read_indexed(size_t tlbno, struct tlbmask *tlb)
+{
+        (*mips_locore_jumpvec.ljv_tlb_read_indexed)(tlbno, tlb);
+}
+
+void
+tlb_write_indexed(size_t tlbno, const struct tlbmask *tlb)
+{
+        (*mips_locore_jumpvec.ljv_tlb_write_indexed)(tlbno, tlb);
+}
+#endif /* !TSAR */
+
+void
+wbflush(void)
+{
+        (*mips_locoresw.lsw_wbflush)();
+}
+
+#ifndef LOCKDEBUG
+void mutex_enter(kmutex_t *mtx)				__stub;
+void mutex_exit(kmutex_t *mtx)				__stub;
+void mutex_spin_enter(kmutex_t *mtx)			__stub;
+void mutex_spin_exit(kmutex_t *mtx)			__stub;
+
+void
+mutex_enter(kmutex_t *mtx)
+{
+
+	(*mips_locore_atomicvec.lav_mutex_enter)(mtx);
+}
+
+void
+mutex_exit(kmutex_t *mtx)
+{
+
+	(*mips_locore_atomicvec.lav_mutex_exit)(mtx);
+}
+
+void
+mutex_spin_enter(kmutex_t *mtx)
+{
+
+	(*mips_locore_atomicvec.lav_mutex_spin_enter)(mtx);
+}
+
+void
+mutex_spin_exit(kmutex_t *mtx)
+{
+
+	(*mips_locore_atomicvec.lav_mutex_spin_exit)(mtx);
+}
+#endif	/* !LOCKDEBUG */
+
+u_int _atomic_cas_uint(volatile u_int *, u_int, u_int)		__stub;
+u_long _atomic_cas_ulong(volatile u_long *, u_long, u_long)	__stub;
+
+u_int
+_atomic_cas_uint(volatile u_int *ptr, u_int old, u_int new)
+{
+
+	return (*mips_locore_atomicvec.lav_atomic_cas_uint)(ptr, old, new);
+}
+
+u_long
+_atomic_cas_ulong(volatile u_long *ptr, u_long old, u_long new)
+{
+
+	return (*mips_locore_atomicvec.lav_atomic_cas_ulong)(ptr, old, new);
+}
+
+__strong_alias(atomic_cas_uint, _atomic_cas_uint)
+__strong_alias(atomic_cas_uint_ni, _atomic_cas_uint)
+__strong_alias(_atomic_cas_32, _atomic_cas_uint)
+__strong_alias(_atomic_cas_32_ni, _atomic_cas_uint)
+__strong_alias(atomic_cas_32, _atomic_cas_uint)
+__strong_alias(atomic_cas_32_ni, _atomic_cas_uint)
+__strong_alias(atomic_cas_ptr, _atomic_cas_ulong)
+__strong_alias(atomic_cas_ptr_ni, _atomic_cas_ulong)
+__strong_alias(atomic_cas_ulong, _atomic_cas_ulong)
+__strong_alias(atomic_cas_ulong_ni, _atomic_cas_ulong)
+#ifdef _LP64
+__strong_alias(atomic_cas_64, _atomic_cas_ulong)
+__strong_alias(atomic_cas_64_ni, _atomic_cas_ulong)
+__strong_alias(_atomic_cas_64, _atomic_cas_ulong)
+__strong_alias(_atomic_cas_64_ni, _atomic_cas_ulong)
+#endif
+
+int	ucas_uint(volatile u_int *, u_int, u_int, u_int *)	__stub;
+int	ucas_ulong(volatile u_long *, u_long, u_long, u_long *)	__stub;
+
+int
+ucas_uint(volatile u_int *ptr, u_int old, u_int new, u_int *retp)
+{
+
+	return (*mips_locore_atomicvec.lav_ucas_uint)(ptr, old, new, retp);
+}
+__strong_alias(ucas_32, ucas_uint);
+__strong_alias(ucas_int, ucas_uint);
+
+int
+ucas_ulong(volatile u_long *ptr, u_long old, u_long new, u_long *retp)
+{
+
+	return (*mips_locore_atomicvec.lav_ucas_ulong)(ptr, old, new, retp);
+}
+__strong_alias(ucas_ptr, ucas_ulong);
+__strong_alias(ucas_long, ucas_ulong);
+#ifdef _LP64
+__strong_alias(ucas_64, ucas_ulong);
+#endif
Index: /trunk/src/sys/arch/mips/mips/mips_fpu.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips_fpu.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips_fpu.c	(revision 152)
@@ -30,5 +30,7 @@
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: mips_fpu.c,v 1.1.2.3 2010/05/15 20:13:43 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips_fpu.c,v 1.1.2.5 2011/04/29 08:26:28 matt Exp $");
+
+#include "opt_multiprocessor.h"
 
 #include <sys/param.h>
@@ -40,13 +42,13 @@
 #endif
 #include <sys/lwp.h>
-#include <sys/user.h>
 
 #include <mips/locore.h>
 #include <mips/regnum.h>
-#ifdef DIAGNOSTIC
-#include <mips/cpu.h>
-#endif
-
-#ifndef NOFPU
+#include <mips/pcb.h>
+
+#ifndef NOFPU
+static void mips_fpu_state_save(lwp_t *, bool);
+static void mips_fpu_state_load(lwp_t *, bool);
+
 static struct {
 	kmutex_t fpx_mutex;
@@ -78,13 +80,8 @@
 fp_lock(void)
 {
-	struct lwp * const l = curlwp;
 	mutex_enter(&fp_mutex);
-
-	if ((l->l_flag & (LW_SINTR | LW_SYSTEM)) == 0) {
-		KASSERT((l->l_pflag & LP_BOUND) == 0);
-		l->l_pflag |= LP_BOUND;
-	}
-
-	return l->l_cpu;
+	kpreempt_disable();
+
+	return curcpu();
 }
 
@@ -92,16 +89,13 @@
 fp_unlock(void)
 {
-	struct lwp * const l = curlwp;
-	if ((l->l_flag & (LW_SINTR | LW_SYSTEM)) == 0) {
-		KASSERT(l->l_pflag & LP_BOUND);
-		l->l_pflag ^= LP_BOUND;
-	}
 	mutex_exit(&fp_mutex);
+	kpreempt_enable();
 }
 
 static void
-fpcpu_acquire(struct lwp *l)
+fpcpu_acquire(lwp_t *l)
 {
 	struct cpu_info * const ci = curcpu();
+	KASSERT(kpreempt_disabled());
 	KASSERT(mutex_owned(&fp_mutex));
 	KASSERT(l == curlwp);
@@ -123,4 +117,5 @@
 fpcpu_release(struct cpu_info *ci)
 {
+	KASSERT(kpreempt_disabled());
 	KASSERT(mutex_owned(&fp_mutex));
 	KASSERT(ci->ci_data.cpu_idlelwp->l_fpcpu == NULL);
@@ -136,15 +131,158 @@
 #endif
 }
-
-static void
-fpusave(struct lwp *l)
-{
+#endif /* !NOFPU */
+
+void
+fpu_discard(void)
+{
+#ifndef NOFPU
+	lwp_t * const l = curlwp;
+	if (l->l_fpcpu != NULL) {
+		fp_lock();
+		if (__predict_true(l->l_fpcpu != NULL)) {
+			KASSERT(l->l_fpcpu->ci_fpcurlwp == l);
+			l->l_md.md_utf->tf_regs[_R_SR] &= ~MIPS_SR_COP_1_BIT;
+			fpcpu_release(l->l_fpcpu);
+		}
+		fp_unlock();
+	}
+#endif
+}
+
+void
+fpu_load(void)
+{
+#ifndef NOFPU
+	lwp_t * const l = curlwp;
 	struct trapframe * const tf = l->l_md.md_utf;
-	mips_fpreg_t * const fp = l->l_addr->u_pcb.pcb_fpregs.r_regs;
+	struct cpu_info *ci;
+
+	KASSERT(l == curlwp);
+
+	ci = fp_lock();
+
+	/*
+	 * Does this CPU already have our FPU state loaded?
+	 */
+	if (l->l_fpcpu == ci) {
+		KASSERT(ci->ci_fpcurlwp == l);
+		tf->tf_regs[_R_SR] |= MIPS_SR_COP_1_BIT;
+		fp_unlock();
+		return;
+	}
+#ifdef MULTIPROCESSOR
+	/*
+	 * While another CPU has our FPU state, keep asking for it to free it.
+	 */
+	if (l->l_cpu != NULL) {
+		kpreempt_enable();
+		while (l->l_fpcpu != NULL) {
+			cpu_send_ipi(l->l_fpcpu, IPI_FPSAVE);
+			cv_wait(&fp_cv, &fp_mutex);
+		}
+		kpreempt_disable();
+		ci = curcpu();
+	}
+#endif /* MULTIPROCESSOR */
+	KASSERT(ci->ci_fpcurlwp != l);
+
+	/*
+	 * Save the current FPU state, if any.
+	 */
+	if (ci->ci_fpcurlwp->l_fpcpu == ci) {
+		mips_fpu_state_save(ci->ci_fpcurlwp, true);
+	}
+
+	/*
+	 * Now acquire this CPU's FPU for this lwp.
+	 */
+	fpcpu_acquire(l);
+
+	/*
+	 * Now load the FPU
+	 */
+	mips_fpu_state_load(l, fpu_used_p(l));
+
+	fp_unlock();
+#endif /* !NOFPU */
+}
+
+void
+fpu_save(void)
+{
+#ifndef NOFPU
+	fpu_save_lwp(curlwp);
+#endif
+}
+
+void
+fpu_save_lwp(lwp_t *l)
+{
+#ifndef NOFPU
+	if (!fpu_used_p(l) || l->l_fpcpu == NULL)
+		return;
+
+	struct cpu_info *ci = fp_lock();
+
+	/*
+	 * If the FPU state is on this CPU, save it to the PCB.  However
+	 * we leave the FPU attached to this LWP since this might just be
+	 * an inquiry.
+	 */
+	if (l->l_fpcpu == ci) {
+		KASSERT(ci->ci_fpcurlwp == l);
+		mips_fpu_state_save(l, false);
+		fp_unlock();
+		return;
+	}
+
+#ifdef MULTIPROCESSOR
+	/*
+	 * Our FP state is on another CPU so we need send it an IPI
+	 * to get it to save it.  That CPU will broadcast when it has
+	 * saved the FP state and released the FPU.
+	 */
+	kpreempt_enable();
+	while (l->l_fpcpu != NULL) {
+		cpu_send_ipi(l->l_fpcpu, IPI_FPSAVE);
+		cv_wait(&fp_cv, &fp_mutex);
+	}
+	kpreempt_disable();
+#endif /* MULTIPROCESSOR */
+
+	fp_unlock();
+#endif /* !NOFPU */
+}
+
+void
+fpusave_cpu(struct cpu_info *ci)
+{
+#ifndef NOFPU
+	fp_lock();
+
+	/*
+	 * If the current FPU is dirty, save it.
+	 */
+	if (ci->ci_fpcurlwp->l_fpcpu == ci) {
+		mips_fpu_state_save(ci->ci_fpcurlwp, true);
+
+		/*
+		 * Release the FPU
+		 */
+		fpcpu_release(ci);
+	}
+
+	fp_unlock();
+#endif /* !NOFPU */
+}
+
+#ifndef NOFPU
+void
+mips_fpu_state_save(lwp_t *l, bool release)
+{
+	struct trapframe * const tf = l->l_md.md_utf;
+	struct pcb * const pcb = lwp_getpcb(l);
+	mips_fpreg_t * const fp = pcb->pcb_fpregs.r_regs;
 	uint32_t status, fpcsr;
-
-#ifdef LOCKDEBUG
-	KASSERT(mutex_locked(&fp_mutex));
-#endif
 
 	/*
@@ -154,10 +292,5 @@
 		return;
 
-	/*
-	 * this thread yielded the FPA.
-	 */
-	KASSERT(l->l_fpcpu == curcpu());
-	KASSERT(l->l_fpcpu->ci_fpcurlwp == l);
-	KASSERT(tf->tf_regs[_R_SR] & MIPS_SR_COP_1_BIT);	/* it should be on */
+	l->l_cpu->ci_ev_fpu_saves.ev_count++;
 
 	/*
@@ -174,5 +307,5 @@
 		"cfc1	%1, $31"	"\n\t"
 		".set reorder"		"\n\t"
-		".set at" 
+		".set at"
 	    :	"=&r" (status), "=r"(fpcsr)
 	    :	"r"(tf->tf_regs[_R_SR] & (MIPS_SR_COP_1_BIT|MIPS3_SR_FR|MIPS_SR_KX|MIPS_SR_INT_IE)),
@@ -182,5 +315,7 @@
 	 * Make sure we don't reenable FP when we return to userspace.
 	 */
-	tf->tf_regs[_R_SR] ^= MIPS_SR_COP_1_BIT;
+	if (release) {
+		tf->tf_regs[_R_SR] ^= MIPS_SR_COP_1_BIT;
+	}
 
 	/*
@@ -272,47 +407,22 @@
 	__asm volatile ("mtc0 %0, $%1" :: "r"(status), "n"(MIPS_COP_0_STATUS));
 }
-#endif /* !NOFPU */
-
-void
-fpuload_lwp(struct lwp *l)
-{
-#ifndef NOFPU
+
+void
+mips_fpu_state_load(lwp_t *l, bool used)
+{
 	struct trapframe * const tf = l->l_md.md_utf;
-	mips_fpreg_t * const fp = l->l_addr->u_pcb.pcb_fpregs.r_regs;
+	struct pcb * const pcb = lwp_getpcb(l);
+	mips_fpreg_t * const fp = pcb->pcb_fpregs.r_regs;
 	uint32_t status;
 	uint32_t fpcsr;
 
-	KASSERT(l == curlwp);
-
-	struct cpu_info * const ci = fp_lock();
-	/*
-	 * Does this CPU already have our FPU state loaded?
-	 */
-	if (l->l_fpcpu == ci) {
-		KASSERT(ci->ci_fpcurlwp == l);
-		tf->tf_regs[_R_SR] |= MIPS_SR_COP_1_BIT;
-		fp_unlock();
-		return;
-	}
-#ifdef MULTIPROCESSOR
-	/*
-	 * While another CPU has our FPU state, keep asking for it to free it.
-	 */
-	while (l->l_fpcpu != NULL) {
-		cpu_send_ipi(l->l_fpcpu, IPI_FPSAVE);
-		cv_wait(&fp_cv, &fp_mutex);
-	}
-#endif /* MULTIPROCESSOR */
-	KASSERT(ci->ci_fpcurlwp != l);
-	/*
-	 * Save the current FPU state, if any.
-	 */
-	if (ci->ci_fpcurlwp->l_fpcpu == ci)
-		fpusave(ci->ci_fpcurlwp);
-
-	/*
-	 * Now acquire this CPU's FPU for this lwp.
-	 */
-	fpcpu_acquire(l);
+	l->l_cpu->ci_ev_fpu_loads.ev_count++;
+
+	/*
+	 * If this is the first time the state is being loaded, zero it first.
+	 */
+	if (__predict_false(!used)) {
+		memset(&pcb->pcb_fpregs, 0, sizeof(pcb->pcb_fpregs));
+	}
 
 	/*
@@ -433,81 +543,4 @@
 	    ::	"r"(fpcsr &~ MIPS_FPU_EXCEPTION_BITS), "r"(status),
 		"n"(MIPS_COP_0_STATUS));
-
-	fp_unlock();
-#endif /* !NOFPU */
-}
-
-void
-fpudiscard_lwp(struct lwp *l)
-{
-#ifndef NOFPU
-	if (l->l_fpcpu != NULL) {
-		fp_lock();
-		KASSERT(l->l_fpcpu->ci_fpcurlwp == l);
-		l->l_md.md_utf->tf_regs[_R_SR] &= ~MIPS_SR_COP_1_BIT;
-		fpcpu_release(l->l_fpcpu);
-		fp_unlock();
-	}
-#endif
-}
-
-void
-fpusave_lwp(struct lwp *l)
-{
-#ifndef NOFPU
-	struct cpu_info *ci;
-
-	if (l->l_fpcpu == NULL)
-		return;
-
-	ci = fp_lock();
-
-	/*
-	 * If the FPU state is on this CPU, save it to the PCB.  However
-	 * we leave the FPU attached to this LWP since this might just be
-	 * an inquiry.
-	 */
-	if (l->l_fpcpu == ci) {
-		KASSERT(ci->ci_fpcurlwp == l);
-		fpusave(l);
-		fp_unlock();
-		return;
-	}
-
-#ifdef MULTIPROCESSOR
-	/*
-	 * Our FP state is on another CPU so we need send it an IPI
-	 * to get it to save it.  That CPU will broadcast when it has
-	 * saved the FP state and released the FPU.
-	 */
-	do {
-		cpu_send_ipi(l->l_fpcpu, IPI_FPSAVE);
-		cv_wait(&fp_cv, &fp_mutex);
-	} while (l->l_fpcpu != NULL);
-#endif /* MULTIPROCESSOR */
-
-	fp_unlock();
-#endif /* !NOFPU */
-}
-
-void
-fpusave_cpu(struct cpu_info *ci)
-{
-#ifndef NOFPU
-	fp_lock();
-
-	/*
-	 * If the current FPU is dirty, save it.
-	 */
-	if (ci->ci_fpcurlwp->l_fpcpu == ci) {
-		fpusave(ci->ci_fpcurlwp);
-
-		/*
-		 * Release the FPU
-		 */
-		fpcpu_release(ci);
-	}
-
-	fp_unlock();
-#endif /* !NOFPU */
-}
+}
+#endif /* !NOFPU */
Index: /trunk/src/sys/arch/mips/mips/mips_fputrap.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips_fputrap.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips_fputrap.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: mips_fputrap.c,v 1.5.66.5 2010/02/23 20:33:48 matt Exp $ */
+/* $NetBSD: mips_fputrap.c,v 1.5.66.7 2011/04/29 08:26:29 matt Exp $ */
 
 /*
@@ -38,12 +38,17 @@
 
 #if defined(FPEMUL) || !defined(NOFPU)
-void mips_fpuexcept(struct lwp *, unsigned int);
-void mips_fpuillinst(struct lwp *, unsigned int, unsigned long);
-static int fpustat2sicode(unsigned int);
+void mips_fpuexcept(struct lwp *, uint32_t);
+void mips_fpuillinst(struct lwp *, uint32_t);
+static int fpustat2sicode(uint32_t);
 
 void
-mips_fpuexcept(struct lwp *l, unsigned int fpustat)
+mips_fpuexcept(struct lwp *l, uint32_t fpustat)
 {
 	ksiginfo_t ksi;
+
+#ifdef FPEMUL_DEBUG
+	printf("%s(%x,%#"PRIxREGISTER")\n",
+	   __func__, fpustat, l->l_md.md_utf->tf_regs[_R_PC]);
+#endif
 
 	KSI_INIT_TRAP(&ksi);
@@ -55,7 +60,12 @@
 
 void
-mips_fpuillinst(struct lwp *l, unsigned int opcode, unsigned long vaddr)
+mips_fpuillinst(struct lwp *l, uint32_t opcode)
 {
 	ksiginfo_t ksi;
+
+#ifdef FPEMUL_DEBUG
+	printf("%s(%x,%#"PRIxREGISTER")\n",
+	   __func__, opcode, l->l_md.md_utf->tf_regs[_R_PC]);
+#endif
 
 	KSI_INIT_TRAP(&ksi);
@@ -63,9 +73,9 @@
 	ksi.ksi_code = ILL_ILLOPC;
 	ksi.ksi_trap = opcode;
-	ksi.ksi_addr = (void *)vaddr;
+	ksi.ksi_addr = (void *)(uintptr_t)l->l_md.md_utf->tf_regs[_R_PC];
 	(*l->l_proc->p_emul->e_trapsignal)(l, &ksi);
 }
 
-static struct {
+static const struct {
 	unsigned int bit;
 	int code;
@@ -80,31 +90,12 @@
 
 static int
-fpustat2sicode(unsigned int fpustat)
+fpustat2sicode(uint32_t fpustat)
 {
-	int i;
+	for (size_t i = 0; i < __arraycount(fpecodes); i++) {
+		if (fpustat & fpecodes[i].bit)
+			return fpecodes[i].code;
+	}
 
-	for (i = 0; i < 6; i++)
-		if (fpustat & fpecodes[i].bit)
-			return (fpecodes[i].code);
-	return (FPE_FLTINV);
+	return FPE_FLTINV;
 }
 #endif /* FPEMUL || !NOFPU */
-
-void fpemul_trapsignal(struct lwp *, unsigned int, unsigned int);
-
-void
-fpemul_trapsignal(struct lwp *l, unsigned int sig, unsigned int code)
-{
-	ksiginfo_t ksi;
-
-#if DEBUG
-	printf("fpemul_trapsignal(%x,%x,%#"PRIxREGISTER")\n",
-	   sig, code, l->l_md.md_utf->tf_regs[_R_PC]);
-#endif
-
-	KSI_INIT_TRAP(&ksi);
-	ksi.ksi_signo = sig;
-	ksi.ksi_code = 1; /* XXX */
-	ksi.ksi_trap = code;
-	(*l->l_proc->p_emul->e_trapsignal)(l, &ksi);
-}
Index: /trunk/src/sys/arch/mips/mips/mips_machdep.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips_machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.45 2010/05/06 19:51:20 cliff Exp $	*/
+/*	mips_machdep.c,v 1.205.4.1.2.1.2.52 2011/04/29 08:26:29 matt Exp	*/
 
 /*
@@ -113,8 +113,7 @@
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.45 2010/05/06 19:51:20 cliff Exp $");
-
-#define	__INTR_PRIVATE
-
+__KERNEL_RCSID(0, "mips_machdep.c,v 1.205.4.1.2.1.2.52 2011/04/29 08:26:29 matt Exp");
+
+#define __INTR_PRIVATE
 #include "opt_cputype.h"
 #include "opt_compat_netbsd32.h"
@@ -123,4 +122,5 @@
 #include <sys/systm.h>
 #include <sys/proc.h>
+#include <sys/intr.h>
 #include <sys/exec.h>
 #include <sys/reboot.h>
@@ -128,5 +128,4 @@
 #include <sys/lwp.h>
 #include <sys/sysctl.h>
-#include <sys/user.h>
 #include <sys/msgbuf.h>
 #include <sys/conf.h>
@@ -149,11 +148,13 @@
 #endif
 
-#include <uvm/uvm_extern.h>
+#include <uvm/uvm.h>
 
 #include <dev/cons.h>
 
+#include <mips/pcb.h>
 #include <mips/cache.h>
 #include <mips/frame.h>
 #include <mips/regnum.h>
+#include <mips/mips_opcode.h>
 
 #include <machine/cpu.h>
@@ -167,6 +168,18 @@
 #endif
 
-#if defined(MIPS32) || defined(MIPS64)
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 #include <mips/mipsNN.h>		/* MIPS32/MIPS64 registers */
+
+#define	_MKINSN(a,b,c,d,e) ((uint32_t)(((a) << 26)|((b) << 21)|((c) << 16)|((d) << 11)|(e)))
+
+#ifdef _LP64
+#define	_LOAD_V0_L_PRIVATE_A0	_MKINSN(OP_LD, _R_A0, _R_V0, 0, offsetof(lwp_t, l_private))
+#define	_MTC0_V0_USERLOCAL	_MKINSN(OP_COP0, OP_DMT, _R_V0, MIPS_COP_0_TLB_CONTEXT, 2)
+#else
+#define	_LOAD_V0_L_PRIVATE_A0	_MKINSN(OP_LW, _R_A0, _R_V0, 0, offsetof(lwp_t, l_private))
+#define	_MTC0_V0_USERLOCAL	_MKINSN(OP_COP0, OP_MT, _R_V0, MIPS_COP_0_TLB_CONTEXT, 2)
+#endif
+#define	JR_RA			_MKINSN(OP_SPECIAL, _R_RA, 0, 0, OP_JR)
+
 #endif
 
@@ -176,4 +189,8 @@
 int	cpu_dump(void);
 
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+static void mips_watchpoint_init(void);
+#endif
+
 #if defined(MIPS3_PLUS)
 uint32_t mips3_cp0_tlb_page_mask_probe(void);
@@ -184,17 +201,21 @@
 #endif
 
+/*
+ * safepri is a safe priority for sleepq to set for a spin-wait during
+ * autoconfiguration or after a panic which will allows interrupts to
+ * be delivered.  Used as an argument to splx().
+ */
+int safepri = IPL_SOFTSERIAL;
+
 #if defined(MIPS1)
 static void	mips1_vector_init(const struct splsw *);
 extern const struct locoresw mips1_locoresw;
+extern const mips_locore_jumpvec_t mips1_locore_vec;
 #endif
 
 #if defined(MIPS3)
-#if defined(MIPS3_5900)
-static void	r5900_vector_init(const struct splsw *);
-extern const struct locoresw mips5900_locoresw;
-#else
 static void	mips3_vector_init(const struct splsw *);
 extern const struct locoresw mips3_locoresw;
-#endif
+extern const mips_locore_jumpvec_t mips3_locore_vec;
 #endif
 
@@ -202,4 +223,11 @@
 static void	mips32_vector_init(const struct splsw *);
 extern const struct locoresw mips32_locoresw;
+extern const mips_locore_jumpvec_t mips32_locore_vec;
+#endif
+
+#if defined(MIPS32R2)
+static void	mips32r2_vector_init(const struct splsw *);
+extern const struct locoresw mips32r2_locoresw;
+extern const mips_locore_jumpvec_t mips32r2_locore_vec;
 #endif
 
@@ -207,4 +235,23 @@
 static void	mips64_vector_init(const struct splsw *);
 extern const struct locoresw mips64_locoresw;
+extern const mips_locore_jumpvec_t mips64_locore_vec;
+#endif
+
+#if defined(MIPS64R2)
+static void	mips64r2_vector_init(const struct splsw *);
+extern const struct locoresw mips64r2_locoresw;
+extern const mips_locore_jumpvec_t mips64r2_locore_vec;
+#endif
+
+#if defined(MIPS64_RMIXL)
+static void	mips64_rmixl_vector_init(const struct splsw *);
+extern const struct locoresw mips64_rmixl_locoresw;
+extern const mips_locore_jumpvec_t mips64_rmixl_locore_vec;
+#endif
+
+#if defined(MIPS64R2_RMIXL)
+static void	mips64r2_rmixl_vector_init(const struct splsw *);
+extern const struct locoresw mips64r2_rmixl_locoresw;
+extern const mips_locore_jumpvec_t mips64r2_rmixl_locore_vec;
 #endif
 
@@ -216,4 +263,5 @@
 
 struct locoresw mips_locoresw;
+//mips_locore_atomicvec_t mips_locore_atomicvec;
 
 extern const struct splsw std_splsw;
@@ -378,4 +426,5 @@
 	  CPU_MIPS_R4K_MMU | CPU_MIPS_DOUBLE_COUNT, 0, 0,
 						"Toshiba TX4927 CPU"	},
+
 	{ 0, MIPS_TX4900, -1, -1,		CPU_ARCH_MIPS3, 48,
 	  CPU_MIPS_R4K_MMU | CPU_MIPS_DOUBLE_COUNT, 0, 0,
@@ -402,11 +451,38 @@
 	  MIPS64_FLAGS,				0, 0, "20Kc"		},
 	{ MIPS_PRID_CID_MTI, MIPS_24K, -1, -1,	-1, 0,
-	  MIPS64_FLAGS | CPU_MIPS_DOUBLE_COUNT, 0, 0, "24K"		},
+	  MIPS32_FLAGS | CPU_MIPS_DOUBLE_COUNT,
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EBASE | MIPS_CP0FL_USERLOCAL | MIPS_CP0FL_HWRENA |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG2 |
+	  MIPS_CP0FL_CONFIG3 | MIPS_CP0FL_CONFIG7,
+	  0, "24K" },
 	{ MIPS_PRID_CID_MTI, MIPS_24KE, -1, -1,	-1, 0,
-	  MIPS64_FLAGS | CPU_MIPS_DOUBLE_COUNT, 0, 0, "24KE"		},
+	  MIPS32_FLAGS | CPU_MIPS_DOUBLE_COUNT,
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EBASE | MIPS_CP0FL_USERLOCAL | MIPS_CP0FL_HWRENA |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG2 |
+	  MIPS_CP0FL_CONFIG3 | MIPS_CP0FL_CONFIG7,
+	  0, "24KE" },
 	{ MIPS_PRID_CID_MTI, MIPS_34K, -1, -1,	-1, 0,
-	  MIPS64_FLAGS | CPU_MIPS_DOUBLE_COUNT, 0, 0, "34K"		},
+	  MIPS32_FLAGS | CPU_MIPS_DOUBLE_COUNT,
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EBASE | MIPS_CP0FL_USERLOCAL | MIPS_CP0FL_HWRENA |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG2 |
+	  MIPS_CP0FL_CONFIG3 | MIPS_CP0FL_CONFIG7,
+	  0, "34K" },
 	{ MIPS_PRID_CID_MTI, MIPS_74K, -1, -1,	-1, 0,
-	  MIPS64_FLAGS | CPU_MIPS_DOUBLE_COUNT, 0, 0, "74K"		},
+	  MIPS32_FLAGS | CPU_MIPS_DOUBLE_COUNT,
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EBASE | MIPS_CP0FL_USERLOCAL | MIPS_CP0FL_HWRENA |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG2 |
+	  MIPS_CP0FL_CONFIG3 | MIPS_CP0FL_CONFIG6 | MIPS_CP0FL_CONFIG7,
+	  0, "74K" },
+	{ MIPS_PRID_CID_MTI, MIPS_1004K, -1, -1,	-1, 0,
+	  MIPS32_FLAGS | CPU_MIPS_DOUBLE_COUNT,
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EBASE | MIPS_CP0FL_USERLOCAL | MIPS_CP0FL_HWRENA |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG2 |
+	  MIPS_CP0FL_CONFIG3 | MIPS_CP0FL_CONFIG6 | MIPS_CP0FL_CONFIG7,
+	  0, "1004K" },
 
 	{ MIPS_PRID_CID_ALCHEMY, MIPS_AU_REV1, -1, MIPS_AU1000, -1, 0,
@@ -444,6 +520,7 @@
 	  MIPS64_FLAGS | CPU_MIPS_D_CACHE_COHERENT | CPU_MIPS_NO_LLADDR |
 	  CPU_MIPS_I_D_CACHE_COHERENT | CPU_MIPS_HAVE_MxCR,
-	  MIPS_CP0FL_USE |MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
-	  MIPS_CP0FL_CONFIGn(0) | MIPS_CP0FL_CONFIGn(1) | MIPS_CP0FL_CONFIGn(7),
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG7,
 	  CIDFL_RMI_TYPE_XLR|MIPS_CIDFL_RMI_CPUS(8,4)|MIPS_CIDFL_RMI_L2(2MB),
 	  "XLR732B"		},
@@ -452,6 +529,7 @@
 	  MIPS64_FLAGS | CPU_MIPS_D_CACHE_COHERENT | CPU_MIPS_NO_LLADDR |
 	  CPU_MIPS_I_D_CACHE_COHERENT | CPU_MIPS_HAVE_MxCR,
-	  MIPS_CP0FL_USE |MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
-	  MIPS_CP0FL_CONFIGn(0) | MIPS_CP0FL_CONFIGn(1) | MIPS_CP0FL_CONFIGn(7),
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG7,
 	  CIDFL_RMI_TYPE_XLR|MIPS_CIDFL_RMI_CPUS(8,4)|MIPS_CIDFL_RMI_L2(2MB),
 	  "XLR732C"		},
@@ -460,6 +538,7 @@
 	  MIPS64_FLAGS | CPU_MIPS_D_CACHE_COHERENT | CPU_MIPS_NO_LLADDR |
 	  CPU_MIPS_I_D_CACHE_COHERENT | CPU_MIPS_HAVE_MxCR,
-	  MIPS_CP0FL_USE |MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
-	  MIPS_CP0FL_CONFIGn(0) | MIPS_CP0FL_CONFIGn(1) | MIPS_CP0FL_CONFIGn(7),
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG7,
 	  CIDFL_RMI_TYPE_XLS|MIPS_CIDFL_RMI_CPUS(4,4)|MIPS_CIDFL_RMI_L2(1MB),
 	  "XLS616"		},
@@ -468,6 +547,7 @@
 	  MIPS64_FLAGS | CPU_MIPS_D_CACHE_COHERENT | CPU_MIPS_NO_LLADDR |
 	  CPU_MIPS_I_D_CACHE_COHERENT | CPU_MIPS_HAVE_MxCR,
-	  MIPS_CP0FL_USE |MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
-	  MIPS_CP0FL_CONFIGn(0) | MIPS_CP0FL_CONFIGn(1) | MIPS_CP0FL_CONFIGn(7),
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG7,
 	  CIDFL_RMI_TYPE_XLS|MIPS_CIDFL_RMI_CPUS(4,4)|MIPS_CIDFL_RMI_L2(1MB),
 	  "XLS416"		},
@@ -476,6 +556,7 @@
 	  MIPS64_FLAGS | CPU_MIPS_D_CACHE_COHERENT | CPU_MIPS_NO_LLADDR |
 	  CPU_MIPS_I_D_CACHE_COHERENT | CPU_MIPS_HAVE_MxCR,
-	  MIPS_CP0FL_USE |MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
-	  MIPS_CP0FL_CONFIGn(0) | MIPS_CP0FL_CONFIGn(1) | MIPS_CP0FL_CONFIGn(7),
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG7,
 	  CIDFL_RMI_TYPE_XLS|MIPS_CIDFL_RMI_CPUS(2,4)|MIPS_CIDFL_RMI_L2(1MB),
 	  "XLS408"		},
@@ -484,6 +565,7 @@
 	  MIPS64_FLAGS | CPU_MIPS_D_CACHE_COHERENT | CPU_MIPS_NO_LLADDR |
 	  CPU_MIPS_I_D_CACHE_COHERENT | CPU_MIPS_HAVE_MxCR,
-	  MIPS_CP0FL_USE |MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
-	  MIPS_CP0FL_CONFIGn(0) | MIPS_CP0FL_CONFIGn(1) | MIPS_CP0FL_CONFIGn(7),
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG7,
 	  CIDFL_RMI_TYPE_XLS|MIPS_CIDFL_RMI_CPUS(2,4)|MIPS_CIDFL_RMI_L2(1MB),
 	  "XLS408lite"		},
@@ -492,6 +574,7 @@
 	  MIPS64_FLAGS | CPU_MIPS_D_CACHE_COHERENT | CPU_MIPS_NO_LLADDR |
 	  CPU_MIPS_I_D_CACHE_COHERENT | CPU_MIPS_HAVE_MxCR,
-	  MIPS_CP0FL_USE |MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
-	  MIPS_CP0FL_CONFIGn(0) | MIPS_CP0FL_CONFIGn(1) | MIPS_CP0FL_CONFIGn(7),
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG7,
 	  CIDFL_RMI_TYPE_XLS|MIPS_CIDFL_RMI_CPUS(1,4)|MIPS_CIDFL_RMI_L2(512KB),
 	  "XLS404lite"		},
@@ -500,6 +583,7 @@
 	  MIPS64_FLAGS | CPU_MIPS_D_CACHE_COHERENT | CPU_MIPS_NO_LLADDR |
 	  CPU_MIPS_I_D_CACHE_COHERENT | CPU_MIPS_HAVE_MxCR,
-	  MIPS_CP0FL_USE |MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
-	  MIPS_CP0FL_CONFIGn(0) | MIPS_CP0FL_CONFIGn(1) | MIPS_CP0FL_CONFIGn(7),
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG7,
 	  CIDFL_RMI_TYPE_XLS|MIPS_CIDFL_RMI_CPUS(2,4)|MIPS_CIDFL_RMI_L2(512KB),
 	  "XLS208"		},
@@ -508,6 +592,7 @@
 	  MIPS64_FLAGS | CPU_MIPS_D_CACHE_COHERENT | CPU_MIPS_NO_LLADDR |
 	  CPU_MIPS_I_D_CACHE_COHERENT | CPU_MIPS_HAVE_MxCR,
-	  MIPS_CP0FL_USE |MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
-	  MIPS_CP0FL_CONFIGn(0) | MIPS_CP0FL_CONFIGn(1) | MIPS_CP0FL_CONFIGn(7),
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG7,
 	  CIDFL_RMI_TYPE_XLS|MIPS_CIDFL_RMI_CPUS(1,4)|MIPS_CIDFL_RMI_L2(256KB),
 	  "XLS204"		},
@@ -516,6 +601,7 @@
 	  MIPS64_FLAGS | CPU_MIPS_D_CACHE_COHERENT | CPU_MIPS_NO_LLADDR |
 	  CPU_MIPS_I_D_CACHE_COHERENT | CPU_MIPS_HAVE_MxCR,
-	  MIPS_CP0FL_USE |MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
-	  MIPS_CP0FL_CONFIGn(0) | MIPS_CP0FL_CONFIGn(1) | MIPS_CP0FL_CONFIGn(7),
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG7,
 	  CIDFL_RMI_TYPE_XLS|MIPS_CIDFL_RMI_CPUS(2,4)|MIPS_CIDFL_RMI_L2(512KB),
 	  "XLS108"		},
@@ -524,6 +610,7 @@
 	  MIPS64_FLAGS | CPU_MIPS_D_CACHE_COHERENT | CPU_MIPS_NO_LLADDR |
 	  CPU_MIPS_I_D_CACHE_COHERENT | CPU_MIPS_HAVE_MxCR,
-	  MIPS_CP0FL_USE |MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
-	  MIPS_CP0FL_CONFIGn(0) | MIPS_CP0FL_CONFIGn(1) | MIPS_CP0FL_CONFIGn(7),
+	  MIPS_CP0FL_USE |
+	  MIPS_CP0FL_EIRR | MIPS_CP0FL_EIMR | MIPS_CP0FL_EBASE |
+	  MIPS_CP0FL_CONFIG | MIPS_CP0FL_CONFIG1 | MIPS_CP0FL_CONFIG7,
 	  CIDFL_RMI_TYPE_XLS|MIPS_CIDFL_RMI_CPUS(1,4)|MIPS_CIDFL_RMI_L2(256KB),
 	  "XLS104"		},
@@ -561,5 +648,5 @@
 	"RMI",
 };
-#define	ncidnames (sizeof(cidnames) / sizeof(cidnames[0]))
+#define	ncidnames __arraycount(cidnames)
 
 #if defined(MIPS1)
@@ -571,5 +658,4 @@
 mips1_vector_init(const struct splsw *splsw)
 {
-	extern const mips_locore_jumpvec_t mips1_locore_vec;
 	extern char mips1_utlb_miss[], mips1_utlb_miss_end[];
 	extern char mips1_exception[], mips1_exception_end[];
@@ -580,11 +666,8 @@
 	if (mips1_utlb_miss_end - mips1_utlb_miss > 0x80)
 		panic("startup: UTLB vector code too large");
-	memcpy((void *)MIPS_UTLB_MISS_EXC_VEC, mips1_utlb_miss,
-		mips1_utlb_miss_end - mips1_utlb_miss);
-
 	if (mips1_exception_end - mips1_exception > 0x80)
 		panic("startup: general exception vector code too large");
-	memcpy((void *)MIPS1_GEN_EXC_VEC, mips1_exception,
-		mips1_exception_end - mips1_exception);
+	memcpy((void *)MIPS_UTLB_MISS_EXC_VEC, mips1_utlb_miss,
+		mips1_exception_end - mips1_utlb_miss);
 
 	/*
@@ -605,5 +688,4 @@
 mips3_vector_init(const struct splsw *splsw)
 {
-	extern const mips_locore_jumpvec_t mips3_locore_vec;
 	/* r4000 exception handler address and end */
 	extern char mips3_exception[], mips3_exception_end[];
@@ -649,47 +731,8 @@
 #endif /* MIPS3 */
 
-#if defined(MIPS3_5900)	/* XXX */
-static void
-r5900_vector_init(const struct splsw *splsw)
-{
-	extern const mips_locore_jumpvec_t r5900_locore_vec;
-	extern char mips5900_exception[], mips5900_exception_end[];
-	extern char mips5900_tlb_miss[], mips5900_tlb_miss_end[];
-	size_t esz = mips5900_exception_end - mips5900_exception;
-	size_t tsz = mips5900_tlb_miss_end - mips5900_tlb_miss;
-
-	KDASSERT(tsz <= 0x80);
-	KDASSERT(esz <= 0x80);
-
-	if (tsz > 0x80)
-		panic("startup: UTLB vector code too large");
-	if (esz > 0x80)
-		panic("startup: General exception vector code too large");
-
-	memcpy((void *)MIPS_UTLB_MISS_EXC_VEC, mips5900_tlb_miss, tsz);
-	memcpy((void *)MIPS_R5900_COUNTER_EXC_VEC, mips5900_exception, esz);
-	memcpy((void *)MIPS_R5900_DEBUG_EXC_VEC, mips5900_exception, esz);
-	memcpy((void *)MIPS3_GEN_EXC_VEC, mips5900_exception, esz);
-	memcpy((void *)MIPS3_INTR_EXC_VEC, mips5900_exception, esz);
-
-	mips_locore_jumpvec = r5900_locore_vec;
-
-	mips_config_cache();
-
-	mips_icache_sync_all();
-	mips_dcache_wbinv_all();
-
-	/* Clear BEV in SR so we start handling our own exceptions */
-	mips_cp0_status_write(mips_cp0_status_read() & ~MIPS_SR_BEV);
-}
-#endif /* MIPS3_5900 */
-
 #if defined(MIPS32)
 static void
 mips32_vector_init(const struct splsw *splsw)
 {
-	/* MIPS32 locore function vector */
-	extern const mips_locore_jumpvec_t mips32_locore_vec;
-
 	/* r4000 exception handler address */
 	extern char mips32_exception[];
@@ -734,6 +777,75 @@
 	/* Clear BEV in SR so we start handling our own exceptions */
 	mips_cp0_status_write(mips_cp0_status_read() & ~MIPS_SR_BEV);
+
+	mips_watchpoint_init();
 }
 #endif /* MIPS32 */
+
+#if defined(MIPS32R2)
+static void
+mips32r2_vector_init(const struct splsw *splsw)
+{
+	/* r4000 exception handler address */
+	extern char mips32r2_exception[];
+
+	/* TLB miss handler addresses */
+	extern char mips32r2_tlb_miss[];
+
+	/* Cache error handler */
+	extern char mips32r2_cache[];
+
+	/* MIPS32 interrupt exception handler */
+	extern char mips32r2_intr[], mips32r2_intr_end[];
+
+	/*
+	 * Copy down exception vector code.
+	 */
+	if (mips32r2_cache - mips32r2_tlb_miss != 0x100)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "UTLB");
+	if (mips32r2_exception - mips32r2_cache != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "Cache error");
+	if (mips32r2_intr - mips32r2_exception != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "General exception");
+	if (mips32r2_intr_end - mips32r2_intr > 0x80)
+		panic("startup: %s vector code too large",
+		    "interrupt exception");
+
+	memcpy((void *)MIPS_UTLB_MISS_EXC_VEC, mips32r2_tlb_miss,
+	      mips32r2_intr_end - mips32r2_tlb_miss);
+
+	/*
+	 * If this CPU doesn't have a COP0 USERLOCAL register, at the end
+	 * of cpu_switch resume overwrite the instructions which update it.
+	 */
+	if (!(mips_options.mips_cpu->cpu_cp0flags & MIPS_CP0FL_USERLOCAL)) {
+		extern uint32_t mips32r2_cpu_switch_resume[];
+		for (uint32_t *insnp = mips32r2_cpu_switch_resume;; insnp++) {
+			KASSERT(insnp[0] != JR_RA);
+			if (insnp[0] == _LOAD_V0_L_PRIVATE_A0
+			    && insnp[1] == _MTC0_V0_USERLOCAL) {
+				insnp[0] = JR_RA;
+				insnp[1] = 0;		/* NOP */
+				break;
+			}
+		}
+	}
+
+	/*
+	 * Copy locore-function vector.
+	 */
+	mips_locore_jumpvec = mips32r2_locore_vec;
+
+	mips_icache_sync_all();
+	mips_dcache_wbinv_all();
+
+	/* Clear BEV in SR so we start handling our own exceptions */
+	mips_cp0_status_write(mips_cp0_status_read() & ~MIPS_SR_BEV);
+
+	mips_watchpoint_init();
+}
+#endif /* MIPS32R2 */
 
 #if defined(MIPS64)
@@ -741,7 +853,4 @@
 mips64_vector_init(const struct splsw *splsw)
 {
-	/* MIPS64 locore function vector */
-	extern const mips_locore_jumpvec_t mips64_locore_vec;
-
 	/* r4000 exception handler address */
 	extern char mips64_exception[];
@@ -790,6 +899,207 @@
 	/* Clear BEV in SR so we start handling our own exceptions */
 	mips_cp0_status_write(mips_cp0_status_read() & ~MIPS_SR_BEV);
+
+	mips_watchpoint_init();
 }
 #endif /* MIPS64 */
+
+#if defined(MIPS64R2)
+static void
+mips64r2_vector_init(const struct splsw *splsw)
+{
+	/* r4000 exception handler address */
+	extern char mips64r2_exception[];
+
+	/* TLB miss handler addresses */
+	extern char mips64r2_tlb_miss[];
+	extern char mips64r2_xtlb_miss[];
+
+	/* Cache error handler */
+	extern char mips64r2_cache[];
+
+	/* MIPS64 interrupt exception handler */
+	extern char mips64r2_intr[], mips64r2_intr_end[];
+
+	/*
+	 * Copy down exception vector code.
+	 */
+
+	if (mips64r2_xtlb_miss - mips64r2_tlb_miss != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "UTLB");
+	if (mips64r2_cache - mips64r2_xtlb_miss != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "XTLB");
+	if (mips64r2_exception - mips64r2_cache != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "Cache error");
+	if (mips64r2_intr - mips64r2_exception != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "General exception");
+	if (mips64r2_intr_end - mips64r2_intr > 0x80)
+		panic("startup: %s vector code too large",
+		    "interrupt exception");
+
+	memcpy((void *)MIPS_UTLB_MISS_EXC_VEC, mips64r2_tlb_miss,
+	      mips64r2_intr_end - mips64r2_tlb_miss);
+
+	/*
+	 * If this CPU doesn't have a COP0 USERLOCAL register, at the end
+	 * of cpu_switch resume overwrite the instructions which update it.
+	 */
+	if (!(mips_options.mips_cpu->cpu_cp0flags & MIPS_CP0FL_USERLOCAL)) {
+		extern uint32_t mips64r2_cpu_switch_resume[];
+		for (uint32_t *insnp = mips64r2_cpu_switch_resume;; insnp++) {
+			KASSERT(insnp[0] != JR_RA);
+			if (insnp[0] == _LOAD_V0_L_PRIVATE_A0
+			    && insnp[1] == _MTC0_V0_USERLOCAL) {
+				insnp[0] = JR_RA;
+				insnp[1] = 0;		/* NOP */
+				break;
+			}
+		}
+	}
+
+	/*
+	 * Copy locore-function vector.
+	 */
+	mips_locore_jumpvec = mips64r2_locore_vec;
+
+	mips_icache_sync_all();
+	mips_dcache_wbinv_all();
+
+	/* Clear BEV in SR so we start handling our own exceptions */
+	mips_cp0_status_write(mips_cp0_status_read() & ~MIPS_SR_BEV);
+
+	mips_watchpoint_init();
+}
+#endif /* MIPS64R2 */
+
+#if defined(MIPS64_RMIXL)
+static void
+mips64_rmixl_vector_init(const struct splsw *splsw)
+{
+	/* r4000 exception handler address */
+	extern char mips64_rmixl_exception[];
+
+	/* TLB miss handler addresses */
+	extern char mips64_rmixl_tlb_miss[];
+	extern char mips64_rmixl_xtlb_miss[];
+
+	/* Cache error handler */
+	extern char mips64_rmixl_cache[];
+
+	/* MIPS64 interrupt exception handler */
+	extern char mips64_rmixl_intr[], mips64_rmixl_intr_end[];
+
+	/*
+	 * Copy down exception vector code.
+	 */
+
+	if (mips64_rmixl_xtlb_miss - mips64_rmixl_tlb_miss != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "UTLB");
+	if (mips64_rmixl_cache - mips64_rmixl_xtlb_miss != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "XTLB");
+	if (mips64_rmixl_exception - mips64_rmixl_cache != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "Cache error");
+	if (mips64_rmixl_intr - mips64_rmixl_exception != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "General exception");
+	if (mips64_rmixl_intr_end - mips64_rmixl_intr > 0x80)
+		panic("startup: %s vector code too large",
+		    "interrupt exception");
+
+	memcpy((void *)MIPS_UTLB_MISS_EXC_VEC, mips64_rmixl_tlb_miss,
+	      mips64_rmixl_intr_end - mips64_rmixl_tlb_miss);
+
+	/*
+	 * Copy locore-function vector.
+	 */
+	mips_locore_jumpvec = mips64_rmixl_locore_vec;
+
+	mips_icache_sync_all();
+	mips_dcache_wbinv_all();
+
+	/* Clear BEV in SR so we start handling our own exceptions */
+	mips_cp0_status_write(mips_cp0_status_read() & ~MIPS_SR_BEV);
+
+	mips_watchpoint_init();
+}
+#endif /* MIPS64_RMIXL */
+
+#if defined(MIPS64R2_RMIXL)
+static void
+mips64r2_rmixl_vector_init(const struct splsw *splsw)
+{
+	/* r4000 exception handler address */
+	extern char mips64r2_rmixl_exception[];
+
+	/* TLB miss handler addresses */
+	extern char mips64r2_rmixl_tlb_miss[];
+	extern char mips64r2_rmixl_xtlb_miss[];
+
+	/* Cache error handler */
+	extern char mips64r2_rmixl_cache[];
+
+	/* MIPS64 interrupt exception handler */
+	extern char mips64r2_rmixl_intr[], mips64r2_rmixl_intr_end[];
+
+	/*
+	 * Copy down exception vector code.
+	 */
+
+	if (mips64r2_rmixl_xtlb_miss - mips64r2_rmixl_tlb_miss != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "UTLB");
+	if (mips64r2_rmixl_cache - mips64r2_rmixl_xtlb_miss != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "XTLB");
+	if (mips64r2_rmixl_exception - mips64r2_rmixl_cache != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "Cache error");
+	if (mips64r2_rmixl_intr - mips64r2_rmixl_exception != 0x80)
+		panic("startup: %s vector code not 128 bytes in length",
+		    "General exception");
+	if (mips64r2_rmixl_intr_end - mips64r2_rmixl_intr > 0x80)
+		panic("startup: %s vector code too large",
+		    "interrupt exception");
+
+	memcpy((void *)MIPS_UTLB_MISS_EXC_VEC, mips64r2_rmixl_tlb_miss,
+	      mips64r2_rmixl_intr_end - mips64r2_rmixl_tlb_miss);
+
+	/*
+	 * If this CPU doesn't have a COP0 USERLOCAL register, at the end
+	 * of cpu_switch resume overwrite the instructions which update it.
+	 */
+	if (!(mips_options.mips_cpu->cpu_cp0flags & MIPS_CP0FL_USERLOCAL)) {
+		extern uint32_t mips64r2_rmixl_cpu_switch_resume[];
+		for (uint32_t *insnp = mips64r2_rmixl_cpu_switch_resume;; insnp++) {
+			KASSERT(insnp[0] != JR_RA);
+			if (insnp[0] == _LOAD_V0_L_PRIVATE_A0
+			    && insnp[1] == _MTC0_V0_USERLOCAL) {
+				insnp[0] = JR_RA;
+				insnp[1] = 0;		/* NOP */
+				break;
+			}
+		}
+	}
+
+	/*
+	 * Copy locore-function vector.
+	 */
+	mips_locore_jumpvec = mips64r2_rmixl_locore_vec;
+
+	mips_icache_sync_all();
+	mips_dcache_wbinv_all();
+
+	/* Clear BEV in SR so we start handling our own exceptions */
+	mips_cp0_status_write(mips_cp0_status_read() & ~MIPS_SR_BEV);
+
+	mips_watchpoint_init();
+}
+#endif /* MIPS64R2_RMIXL */
 
 /*
@@ -814,5 +1124,5 @@
  */
 void
-mips_vector_init(const struct splsw *splsw)
+mips_vector_init(const struct splsw *splsw, bool multicpu_p)
 {
 	struct mips_options * const opts = &mips_options;
@@ -840,5 +1150,5 @@
 		panic("CPU type (0x%x) not supported", cpu_id);
 
-#if defined(MIPS32) || defined(MIPS64)
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 	if (MIPS_PRID_CID(cpu_id) != 0) {
 		/* MIPS32/MIPS64, use coprocessor 0 config registers */
@@ -864,5 +1174,7 @@
 		switch (MIPSNN_GET(CFG_AR, cfg)) {
 		case MIPSNN_CFG_AR_REV1:
+			break;
 		case MIPSNN_CFG_AR_REV2:
+			opts->mips_cpu_arch += CPU_ARCH_MIPS32R2 - CPU_ARCH_MIPS32;
 			break;
 		default:
@@ -885,5 +1197,5 @@
 		}
 	}
-#endif /* defined(MIPS32) || defined(MIPS64) */
+#endif /* (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0 */
 
 	if (opts->mips_cpu_arch < 1)
@@ -945,4 +1257,16 @@
 
 	/*
+	 * Default to RAS atomic ops since they are the lowest overhead.
+	 */
+#ifdef MULTIPROCESSOR
+	if (multicpu_p) {
+		/*
+		 * If we could have multiple CPUs active,
+		 * use the ll/sc variants.
+		 */
+		mips_locore_atomicvec = mips_llsc_locore_atomicvec;
+	}
+#endif
+	/*
 	 * Now initialize our ISA-dependent function vector.
 	 */
@@ -950,5 +1274,5 @@
 #if defined(MIPS1)
 	case CPU_ARCH_MIPS1:
-		mips1_tlb_invalidate_all();
+		(*mips1_locore_vec.ljv_tlb_invalidate_all)();
 		mips1_vector_init(splsw);
 		mips_locoresw = mips1_locoresw;
@@ -959,24 +1283,15 @@
 	case CPU_ARCH_MIPS4:
 		mips3_tlb_probe();
-#if defined(MIPS3_5900)	/* XXX */
-		mips3_cp0_pg_mask_write(MIPS3_PG_SIZE_4K);
-		mips3_cp0_wired_write(0);
-		mips5900_tlb_invalidate_all();
-		mips3_cp0_wired_write(pmap_tlb0_info.ti_wired);
-		r5900_vector_init(splsw);
-		mips_locoresw = mips5900_locoresw;
-#else /* MIPS3_5900 */
 #if defined(MIPS3_4100)
 		if (MIPS_PRID_IMPL(cpu_id) == MIPS_R4100)
-			mips3_cp0_pg_mask_write(MIPS4100_PG_SIZE_4K);
+			mips3_cp0_pg_mask_write(MIPS4100_PG_SIZE_TO_MASK(PAGE_SIZE));
 		else
 #endif
-		mips3_cp0_pg_mask_write(MIPS3_PG_SIZE_4K);
+		mips3_cp0_pg_mask_write(MIPS3_PG_SIZE_TO_MASK(PAGE_SIZE));
 		mips3_cp0_wired_write(0);
-		mips3_tlb_invalidate_all();
+		(*mips3_locore_vec.ljv_tlb_invalidate_all)();
 		mips3_cp0_wired_write(pmap_tlb0_info.ti_wired);
 		mips3_vector_init(splsw);
 		mips_locoresw = mips3_locoresw;
-#endif /* MIPS3_5900 */
 		break;
 #endif
@@ -984,7 +1299,7 @@
 	case CPU_ARCH_MIPS32:
 		mips3_tlb_probe();
-		mips3_cp0_pg_mask_write(MIPS3_PG_SIZE_4K);
+		mips3_cp0_pg_mask_write(MIPS3_PG_SIZE_TO_MASK(PAGE_SIZE));
 		mips3_cp0_wired_write(0);
-		mips32_tlb_invalidate_all();
+		(*mips32_locore_vec.ljv_tlb_invalidate_all)();
 		mips3_cp0_wired_write(pmap_tlb0_info.ti_wired);
 		mips32_vector_init(splsw);
@@ -992,13 +1307,68 @@
 		break;
 #endif
-#if defined(MIPS64)
+#if defined(MIPS32R2)
+	case CPU_ARCH_MIPS32R2:
+		mips3_tlb_probe();
+		mips3_cp0_pg_mask_write(MIPS3_PG_SIZE_TO_MASK(PAGE_SIZE));
+		mips3_cp0_wired_write(0);
+		(*mips32r2_locore_vec.ljv_tlb_invalidate_all)();
+		mips3_cp0_wired_write(pmap_tlb0_info.ti_wired);
+		mips32r2_vector_init(splsw);
+		mips_locoresw = mips32r2_locoresw;
+		break;
+#endif
+#if defined(MIPS64) || defined(MIPS64_RMIXL)
 	case CPU_ARCH_MIPS64: {
 		mips3_tlb_probe();
-		mips3_cp0_pg_mask_write(MIPS3_PG_SIZE_4K);
+		mips3_cp0_pg_mask_write(MIPS3_PG_SIZE_TO_MASK(PAGE_SIZE));
 		mips3_cp0_wired_write(0);
-		mips64_tlb_invalidate_all();
+#if defined(MIPS64)
+		(*mips64_locore_vec.ljv_tlb_invalidate_all)();
+#else
+		(*mips64_rmixl_locore_vec.ljv_tlb_invalidate_all)();
+#endif
 		mips3_cp0_wired_write(pmap_tlb0_info.ti_wired);
+#ifdef MIPS64_RMIXL
+		if (ct->cpu_cid == MIPS_PRID_CID_RMI) {
+			mips64_rmixl_vector_init(splsw);
+			mips_locoresw = mips64_rmixl_locoresw;
+			break;
+		}
+#endif
+#ifdef MIPS64
 		mips64_vector_init(splsw);
 		mips_locoresw = mips64_locoresw;
+#else
+		printf("cpu_arch 0x%x: not supported\n", opts->mips_cpu_arch);
+		cpu_reboot(RB_HALT, NULL);
+#endif
+		break;
+	}
+#endif
+#if defined(MIPS64R2) || defined(MIPS64R2_RMIXL)
+	case CPU_ARCH_MIPS64R2: {
+		mips3_tlb_probe();
+		mips3_cp0_pg_mask_write(MIPS3_PG_SIZE_TO_MASK(PAGE_SIZE));
+		mips3_cp0_wired_write(0);
+#ifdef MIPS64R2
+		(*mips64r2_locore_vec.ljv_tlb_invalidate_all)();
+#else
+		(*mips64r2_rmixl_locore_vec.ljv_tlb_invalidate_all)();
+#endif
+		mips3_cp0_wired_write(pmap_tlb0_info.ti_wired);
+#ifdef MIPS64R2_RMIXL
+		if (ct->cpu_cid == MIPS_PRID_CID_RMI) {
+			mips64r2_vector_init(splsw);
+			mips_locoresw = mips64r2_locoresw;
+			break;
+		}
+#endif
+#ifdef MIPS64R2
+		mips64r2_vector_init(splsw);
+		mips_locoresw = mips64r2_locoresw;
+#else
+		printf("cpu_arch 0x%x: not supported\n", opts->mips_cpu_arch);
+		cpu_reboot(RB_HALT, NULL);
+#endif
 		break;
 	}
@@ -1011,11 +1381,11 @@
 	/*
 	 * Now that the splsw and locoresw have been filled in, fixup the
-	 * jumps to their stubs to instead jump to the real routines.
-	 */
-	fixup_mips_cpu_switch_resume();
-	fixup_splcalls();
-
-/* XXX simonb: ugg, another ugly #ifdef check... */
-#if (defined(MIPS3) && !defined(MIPS3_5900)) || defined(MIPS32) || defined(MIPS64)
+	 * jumps to any stubs to actually jump to the real routines.
+	 */
+	extern uint32_t _ftext[];
+	extern uint32_t _etext[];
+	mips_fixup_stubs(_ftext, _etext);
+
+#if (MIPS3 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 	/*
 	 * Install power-saving idle routines.
@@ -1024,5 +1394,5 @@
 	    !(opts->mips_cpu_flags & CPU_MIPS_NO_WAIT))
 		mips_locoresw.lsw_cpu_idle = mips_wait_idle;
-#endif /* (MIPS3 && !MIPS3_5900) || MIPS32 || MIPS64 */
+#endif /* (MIPS3 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0 */
 }
 
@@ -1030,6 +1400,5 @@
 mips_set_wbflush(void (*flush_fn)(void))
 {
-#undef wbflush
-	mips_locore_jumpvec.ljv_wbflush = flush_fn;
+	mips_locoresw.lsw_wbflush = flush_fn;
 	(*flush_fn)();
 }
@@ -1157,9 +1526,11 @@
 		break;
 #endif /* MIPS1 */
-#if defined(MIPS3) || defined(MIPS32) || defined(MIPS64)
+#if (MIPS3 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
 	case CPU_ARCH_MIPS3:
 	case CPU_ARCH_MIPS4:
 	case CPU_ARCH_MIPS32:
-	case CPU_ARCH_MIPS64: {
+	case CPU_ARCH_MIPS32R2:
+	case CPU_ARCH_MIPS64:
+	case CPU_ARCH_MIPS64R2: {
 		const char *sufx = "KMGTPE";
 		uint32_t pg_mask;
@@ -1212,5 +1583,5 @@
 		break;
 	}
-#endif /* MIPS3 */
+#endif /* (MIPS3 + MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0 */
 	default:
 		panic("cpu_identify: impossible");
@@ -1228,10 +1599,12 @@
 setregs(struct lwp *l, struct exec_package *pack, u_long stack)
 {
-	struct trapframe *tf = l->l_md.md_utf;
+	struct trapframe * const tf = l->l_md.md_utf;
+	struct pcb * const pcb = lwp_getpcb(l);
+	struct proc * const p = l->l_proc;
 
 	memset(tf, 0, sizeof(struct trapframe));
-	tf->tf_regs[_R_SP] = (int)stack;
-	tf->tf_regs[_R_PC] = (int)pack->ep_entry & ~3;
-	tf->tf_regs[_R_T9] = (int)pack->ep_entry & ~3; /* abicall requirement */
+	tf->tf_regs[_R_SP] = (intptr_t)stack;
+	tf->tf_regs[_R_PC] = (intptr_t)pack->ep_entry & ~3;
+	tf->tf_regs[_R_T9] = (intptr_t)pack->ep_entry & ~3; /* abicall requirement */
 	tf->tf_regs[_R_SR] = PSL_USERSET;
 #if !defined(__mips_o32)
@@ -1239,8 +1612,24 @@
 	 * allow 64bit ops in userland for non-O32 ABIs
 	 */
-	if (l->l_proc->p_md.md_abi != _MIPS_BSD_API_O32)
+	if (p->p_md.md_abi == _MIPS_BSD_API_N32
+	    && (CPUISMIPS64 || CPUISMIPS64R2)) {
+		tf->tf_regs[_R_SR] |= MIPS_SR_PX;
+	} else if (p->p_md.md_abi != _MIPS_BSD_API_O32) {
 		tf->tf_regs[_R_SR] |= MIPS_SR_UX;
-	if (_MIPS_SIM_NEWABI_P(l->l_proc->p_md.md_abi))
+	}
+	if (_MIPS_SIM_NEWABI_P(p->p_md.md_abi))
 		tf->tf_regs[_R_SR] |= MIPS3_SR_FR;
+#endif
+#ifdef _LP64
+	/*
+	 * If we are using a 32-bit ABI on a 64-bit kernel, mark the process
+	 * that way.  If we aren't, clear it.
+	 */
+	if (p->p_md.md_abi == _MIPS_BSD_API_N32
+	    || p->p_md.md_abi == _MIPS_BSD_API_O32) {
+		p->p_flag |= PK_32;
+	} else {
+		p->p_flag &= ~PK_32;
+	}
 #endif
 	/*
@@ -1256,9 +1645,8 @@
 	tf->tf_regs[_R_A1] = 0;
 	tf->tf_regs[_R_A2] = 0;
-	tf->tf_regs[_R_A3] = (intptr_t)l->l_proc->p_psstr;
-
-	if (l->l_md.md_flags & MDP_FPUSED)
-		fpudiscard_lwp(l);
-	memset(&l->l_addr->u_pcb.pcb_fpregs, 0, sizeof(struct fpreg));
+	tf->tf_regs[_R_A3] = (intptr_t)p->p_psstr;
+
+	fpu_discard();
+	memset(&pcb->pcb_fpregs, 0, sizeof(struct fpreg));
 	l->l_md.md_flags &= ~MDP_FPUSED;
 	l->l_md.md_ss_addr = 0;
@@ -1334,5 +1722,5 @@
 
 #if 0
-struct user dumppcb;		/* Actually, struct pcb would do. */
+struct pcb dumppcb;
 #endif
 
@@ -1604,7 +1992,7 @@
 	vsize_t sz = (vsize_t)round_page(MSGBUFSIZE);
 	vsize_t reqsz = sz;
-	struct vm_physseg *vps;
-
-	vps = &vm_physmem[vm_nphysseg - 1];
+	u_int bank = vm_nphysseg - 1;
+	struct vm_physseg *vps = VM_PHYSMEM_PTR(bank);
+
 #ifndef _LP64
 	/*
@@ -1632,7 +2020,7 @@
 	/* Remove the [last] segment if it now has no pages. */
 	if (vps->start == vps->end) {
-		for (; vps != &vm_physmem[vm_nphysseg - 1]; vps++)
-			vps[0] = vps[1];
-		vm_nphysseg--;
+		for (vm_nphysseg--; bank < vm_nphysseg - 1; bank++) {
+			VM_PHYSMEM_PTR_SWAP(bank, bank + 1);
+		}
 	}
 
@@ -1646,7 +2034,7 @@
 mips_init_lwp0_uarea(void)
 {
-	struct lwp *l = curlwp;
+	struct lwp * const l = &lwp0;
 	vaddr_t v;
-	KASSERT(l == &lwp0);
+
 	if (l->l_addr == NULL) {
 		v = uvm_pageboot_alloc(USPACE);
@@ -1656,10 +2044,18 @@
 		proc0paddr = l->l_addr;
 	}
-	lwp0.l_md.md_utf = (struct trapframe *)(v + USPACE) - 1;
+
+	l->l_md.md_utf = (struct trapframe *)(v + USPACE) - 1;
+	struct pcb * const pcb = lwp_getpcb(l);
+	/*
+	 * Now zero out the only two areas of the uarea that we care about.
+	 */
+	memset(l->l_md.md_utf, 0, sizeof(*l->l_md.md_utf));
+	memset(pcb, 0, sizeof(*pcb));
+
+	pcb->pcb_context.val[_L_SR] = MIPS_SR_INT_IE
+	    | (ipl_sr_map.sr_bits[IPL_SCHED] ^ MIPS_INT_MASK);
 #ifdef _LP64
-	lwp0.l_md.md_utf->tf_regs[_R_SR] = MIPS_SR_KX;
-	lwp0.l_addr->u_pcb.pcb_context.val[_L_SR] = MIPS_SR_KX | MIPS_SR_INT_IE;
-#else
-	lwp0.l_addr->u_pcb.pcb_context.val[_L_SR] = MIPS_SR_INT_IE;
+	pcb->pcb_context.val[_L_SR] |= MIPS_SR_KX | MIPS_SR_UX;
+	l->l_md.md_utf->tf_regs[_R_SR] = MIPS_SR_KX | MIPS_SR_UX;
 #endif
 }
@@ -1830,16 +2226,13 @@
 startlwp(void *arg)
 {
-	ucontext_t *uc = arg;
-	int err;
-
-	err = cpu_setmcontext(curlwp, &uc->uc_mcontext, uc->uc_flags);
-#if DIAGNOSTIC
-	if (err) {
-		printf("%s: Error %d from cpu_setmcontext", __func__, err);
-	}
-#endif
+	ucontext_t * const uc = arg;
+	lwp_t * const l = curlwp;
+	int error;
+
+	error = cpu_setmcontext(l, &uc->uc_mcontext, uc->uc_flags);
+	KASSERT(error == 0);
+
 	pool_put(&lwp_uc_pool, uc);
-
-	userret(curlwp);
+	userret(l);
 }
 
@@ -1851,16 +2244,14 @@
 startlwp32(void *arg)
 {
-	ucontext32_t *uc = arg;
-	int err;
-
-	err = cpu_setmcontext32(curlwp, &uc->uc_mcontext, uc->uc_flags);
-#if DIAGNOSTIC
-	if (err) {
-		printf("%s: Error %d from cpu_setmcontext32", __func__, err);
-	}
-#endif
+	ucontext32_t * const uc = arg;
+	lwp_t * const l = curlwp;
+	int error;
+
+	error = cpu_setmcontext32(l, &uc->uc_mcontext, uc->uc_flags);
+	KASSERT(error == 0);
+
+	/* Note: we are freeing ucontext_t, not ucontext32_t. */
 	pool_put(&lwp_uc_pool, uc);
-
-	userret(curlwp);
+	userret(l);
 }
 #endif /* COMPAT_NETBSD32 */
@@ -1966,2 +2357,13 @@
 }
 #endif /* PARANOIA */
+
+#if (MIPS32 + MIPS32R2 + MIPS64 + MIPS64R2 + MIPS64_RMIXL + MIPS64R2_RMIXL) > 0
+static void
+mips_watchpoint_init(void)
+{
+	/*
+	 * determine number of CPU watchpoints
+	 */
+	curcpu()->ci_cpuwatch_count = cpuwatch_discover();
+}
+#endif
Index: /trunk/src/sys/arch/mips/mips/mips_mcclock.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips_mcclock.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips_mcclock.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: mips_mcclock.c,v 1.16.28.1 2010/01/20 09:04:35 matt Exp $ */
+/* $NetBSD: mips_mcclock.c,v 1.16.28.2 2011/04/29 08:26:29 matt Exp $ */
 
 /*
@@ -35,5 +35,5 @@
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: mips_mcclock.c,v 1.16.28.1 2010/01/20 09:04:35 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips_mcclock.c,v 1.16.28.2 2011/04/29 08:26:29 matt Exp $");
 
 #include <sys/param.h>
@@ -61,7 +61,5 @@
  */
 unsigned
-mc_cpuspeed(mcclock_addr, cpuintmask)
-	vaddr_t mcclock_addr;
-    	int cpuintmask;
+mc_cpuspeed(vaddr_t mcclock_addr, int cpuintmask)
 {
 	return mips_mc_cpuspeed((void *)mcclock_addr, cpuintmask,
@@ -80,8 +78,5 @@
  */
 unsigned
-mips_mc_cpuspeed(mcclock_addr, clockmask, tickpollfn)
-	void *mcclock_addr;
-	int clockmask;
-	int (*tickpollfn)(void *mcclock_addr, int clockmask);
+mips_mc_cpuspeed(void *mcclock_addr, int clockmask, int (*tickpollfn)(void *mcclock_addr, int clockmask))
 {
 	int s;
@@ -144,7 +139,5 @@
 
 int
-mips_mcclock_tickloop(mcclock_addr, clockmask)
-	void *mcclock_addr;
-	int clockmask;
+mips_mcclock_tickloop(void *mcclock_addr, int clockmask)
 {
 	int iters;
Index: /trunk/src/sys/arch/mips/mips/mips_mcclock_loop.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips_mcclock_loop.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips_mcclock_loop.S	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: mips_mcclock_loop.S,v 1.3.18.1 2009/08/21 17:50:35 matt Exp $ */
+/* $NetBSD: mips_mcclock_loop.S,v 1.3.18.2 2011/04/29 08:26:29 matt Exp $ */
 
 /*
@@ -65,5 +65,5 @@
 	 move		v0, s0			# return iters
 	REG_L		ra, CALLFRAME_RA(sp)
-	REG_S		s0, CALLFRAME_S0(sp)
+	REG_L		s0, CALLFRAME_S0(sp)
 	j		ra
 	 PTR_ADDU	sp, CALLFRAME_SIZ
Index: /trunk/src/sys/arch/mips/mips/mips_softint.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/mips_softint.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/mips_softint.c	(revision 152)
@@ -28,12 +28,11 @@
  */
 
-#include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-
-__KERNEL_RCSID(0, "$NetBSD: mips_softint.c,v 1.1.2.6 2010/02/22 20:17:09 matt Exp $");
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: mips_softint.c,v 1.1.2.8 2011/04/29 08:26:29 matt Exp $");
 
 #include <sys/param.h>
+#include <sys/cpu.h>
 #include <sys/proc.h>
 #include <sys/lwp.h>
-#include <sys/user.h>
 #include <sys/intr.h>
 #include <sys/atomic.h>
@@ -105,5 +104,5 @@
 		    IPL_SOFT##level); \
 		KASSERT(ci->ci_softlwps[SOFTINT_##level]->l_ctxswtch == 0); \
-		KASSERTMSG(ci->ci_cpl != IPL_HIGH, ("cpl (%d) != HIGH", ci->ci_cpl)); \
+		KASSERTMSG(ci->ci_cpl == IPL_HIGH, ("cpl (%d) != HIGH", ci->ci_cpl)); \
 		continue; \
 	}
@@ -118,5 +117,7 @@
 	KASSERT((ipending & ~MIPS_SOFT_INT_MASK) == 0);
 	KASSERT(ci->ci_cpl == IPL_HIGH);
-	KASSERT(ci->ci_mtx_count == 0);
+	KASSERTMSG(ci->ci_mtx_count == 0,
+	    ("%s: cpu%u (%p): ci_mtx_count (%d) != 0",
+	     __func__, cpu_index(ci), ci, ci->ci_mtx_count));
 
 	if (ipending & MIPS_SOFT_INT_MASK_0) {
Index: /trunk/src/sys/arch/mips/mips/netbsd32_machdep.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/netbsd32_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/netbsd32_machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: netbsd32_machdep.c,v 1.1.2.5 2010/04/30 16:11:53 matt Exp $	*/
+/*	$NetBSD: netbsd32_machdep.c,v 1.1.2.6 2011/04/29 08:26:29 matt Exp $	*/
 
 /*-
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.1.2.5 2010/04/30 16:11:53 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.1.2.6 2011/04/29 08:26:29 matt Exp $");
 
 #include "opt_compat_netbsd.h"
@@ -41,4 +41,5 @@
 #include <sys/ioctl.h>
 #include <sys/exec.h>
+#include <sys/cpu.h>
 #include <sys/core.h>
 #include <sys/file.h>
@@ -51,5 +52,4 @@
 #include <sys/signalvar.h>
 #include <sys/mount.h>
-#include <sys/user.h>
 #include <sys/syscallargs.h>
 
@@ -58,5 +58,4 @@
 #include <compat/netbsd32/netbsd32_syscallargs.h>
 
-#include <mips/cpu.h>
 #include <mips/cache.h>
 #include <mips/sysarch.h>
@@ -65,10 +64,10 @@
 #include <mips/frame.h>
 #include <mips/regnum.h>
-#include <mips/reg.h>
+#include <mips/pcb.h>
 
 #include <uvm/uvm_extern.h>
 
-char machine32[] = MACHINE;
-char machine_arch32[] = MACHINE32_ARCH;
+const char machine32[] = MACHINE;
+const char machine_arch32[] = MACHINE32_ARCH;
 
 #if 0
@@ -264,4 +263,6 @@
 		memcpy(&mco32->__fpregs, &mc.__fpregs,
 		    sizeof(struct fpreg_oabi));
+	mco32->_mc_tlsbase = mc._mc_tlsbase;
+	*flagsp |= _UC_TLSBASE;
 }
 
@@ -281,4 +282,5 @@
 		memcpy(&mc.__fpregs, &mco32->__fpregs,
 		    sizeof(struct fpreg_oabi));
+	mc._mc_tlsbase = mco32->_mc_tlsbase;
 	return cpu_setmcontext(l, &mc, flags);
 }
@@ -307,9 +309,9 @@
 	}
 
-	if (l->l_md.md_flags & MDP_FPUSED)
-		fpusave_lwp(l);
-
+	fpu_save_lwp(l);
+
+	struct pcb * const pcb = lwp_getpcb(l);
 	cpustate.frame = *l->l_md.md_utf;
-	cpustate.fpregs = l->l_addr->u_pcb.pcb_fpregs;
+	cpustate.fpregs = pcb->pcb_fpregs;
 
 	CORE_SETMAGIC(cseg, CORESEGMAGIC, MID_MACHINE, CORE_CPU);
Index: /trunk/src/sys/arch/mips/mips/pmap.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/pmap.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/pmap.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: pmap.c,v 1.179.16.24 2010/05/04 17:15:36 matt Exp $	*/
+/*	pmap.c,v 1.179.16.28 2011/04/29 08:26:29 matt Exp	*/
 
 /*-
@@ -68,5 +68,5 @@
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.179.16.24 2010/05/04 17:15:36 matt Exp $");
+__KERNEL_RCSID(0, "pmap.c,v 1.179.16.28 2011/04/29 08:26:29 matt Exp");
 
 /*
@@ -124,6 +124,6 @@
 #include <sys/systm.h>
 #include <sys/proc.h>
+#include <sys/cpu.h>
 #include <sys/malloc.h>
-#include <sys/user.h>
 #include <sys/buf.h>
 #include <sys/pool.h>
@@ -337,7 +337,7 @@
 
 static inline bool
-pmap_clear_page_attributes(struct vm_page *pg, u_int clear_attributes)
-{
-	volatile u_int * const attrp = &pg->mdpage.pvh_attrs;
+pmap_clear_mdpage_attributes(struct vm_page_md *md, u_int clear_attributes)
+{
+	volatile u_int * const attrp = &md->pvh_attrs;
 #ifdef MULTIPROCESSOR
 	for (;;) {
@@ -359,10 +359,10 @@
 
 static inline void
-pmap_set_page_attributes(struct vm_page *pg, u_int set_attributes)
+pmap_set_mdpage_attributes(struct vm_page_md *md, u_int set_attributes)
 {
 #ifdef MULTIPROCESSOR
-	atomic_or_uint(&pg->mdpage.pvh_attrs, set_attributes);
+	atomic_or_uint(&md->pvh_attrs, set_attributes);
 #else
-	pg->mdpage.pvh_attrs |= set_attributes;
+	md->pvh_attrs |= set_attributes;
 #endif
 }
@@ -371,8 +371,9 @@
 pmap_page_syncicache(struct vm_page *pg)
 {
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
 #ifdef MULTIPROCESSOR
-	pv_entry_t pv = &pg->mdpage.pvh_first;
+	pv_entry_t pv = &md->pvh_first;
 	uint32_t onproc = 0;
-	(void)VM_PAGE_PVLIST_LOCK(pg, false);
+	(void)PG_MD_PVLIST_LOCK(md, false);
 	if (pv->pv_pmap != NULL) {
 		for (; pv != NULL; pv = pv->pv_next) {
@@ -382,13 +383,13 @@
 		}
 	}
-	VM_PAGE_PVLIST_UNLOCK(pg);
+	PG_MD_PVLIST_UNLOCK(md);
 	kpreempt_disable();
-	pmap_tlb_syncicache(pg->mdpage.pvh_first.pv_va, onproc);
+	pmap_tlb_syncicache(md->pvh_first.pv_va, onproc);
 	kpreempt_enable();
 #else
 	if (MIPS_HAS_R4K_MMU) {
-		if (PG_MD_CACHED_P(pg)) {
+		if (PG_MD_CACHED_P(md)) {
 			mips_icache_sync_range_index(
-			    pg->mdpage.pvh_first.pv_va, PAGE_SIZE);
+			    md->pvh_first.pv_va, PAGE_SIZE);
 		}
 	} else {
@@ -403,5 +404,6 @@
 {
 	const paddr_t pa = VM_PAGE_TO_PHYS(pg);
-	pv_entry_t pv = &pg->mdpage.pvh_first;
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
+	pv_entry_t pv = &md->pvh_first;
 
 #ifdef _LP64
@@ -431,11 +433,11 @@
 		 * page from the cache so we will copy the correct contents.
 		 */
-		(void)VM_PAGE_PVLIST_LOCK(pg, false);
-		if (PG_MD_CACHED_P(pg)
+		(void)PG_MD_PVLIST_LOCK(md, false);
+		if (PG_MD_CACHED_P(md)
 		    && mips_cache_badalias(pv->pv_va, va))
 			mips_dcache_wbinv_range_index(pv->pv_va, PAGE_SIZE);
 		if (pv->pv_pmap == NULL)
 			pv->pv_va = va;
-		VM_PAGE_PVLIST_UNLOCK(pg);
+		PG_MD_PVLIST_UNLOCK(md);
 	}
 
@@ -447,9 +449,10 @@
 	pt_entry_t old_pt_entry)
 {
-	pv_entry_t pv = &pg->mdpage.pvh_first;
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
+	pv_entry_t pv = &md->pvh_first;
 	
-	(void)VM_PAGE_PVLIST_LOCK(pg, false);
+	(void)PG_MD_PVLIST_LOCK(md, false);
 	if (MIPS_CACHE_VIRTUAL_ALIAS
-	    && (PG_MD_UNCACHED_P(pg)
+	    && (PG_MD_UNCACHED_P(md)
 		|| (pv->pv_pmap != NULL
 		    && mips_cache_badalias(pv->pv_va, va)))) {
@@ -461,5 +464,5 @@
 		mips_dcache_wbinv_range(va, PAGE_SIZE);
 	}
-	VM_PAGE_PVLIST_UNLOCK(pg);
+	PG_MD_PVLIST_UNLOCK(md);
 #ifndef _LP64
 	/*
@@ -487,4 +490,6 @@
 	vsize_t bufsz;
 
+	pmap_page_colormask = (uvmexp.ncolors -1) << PAGE_SHIFT;
+
 	pmap_tlb_info_init(&pmap_tlb0_info);		/* init the lock */
 
@@ -518,6 +523,16 @@
 	Sysmapsize += poolpage.size;
 #endif
+#ifdef _LP64
+	/*
+	 * If we are using tmpfs, then we might want to use a great deal of
+	 * our memory with it.  Make sure we have enough VM to do that.
+	 */
+	Sysmapsize += physmem;
+#else
 	/* XXX: else runs out of space on 256MB sbmips!! */
 	Sysmapsize += 20000;
+#endif
+	/* Rounup to a even number of pte page tables */
+	Sysmapsize = (Sysmapsize + NPTEPG - 1) & -NPTEPG;
 
 	/*
@@ -527,7 +542,8 @@
 	 * can be called.
 	 */
-	mips_avail_start = vm_physmem[0].start << PGSHIFT;
-	mips_avail_end = vm_physmem[vm_nphysseg - 1].end << PGSHIFT;
-	mips_virtual_end = VM_MIN_KERNEL_ADDRESS + Sysmapsize * NBPG;
+	mips_avail_start = ptoa(VM_PHYSMEM_PTR(0)->start);
+	mips_avail_end = ptoa(VM_PHYSMEM_PTR(vm_nphysseg - 1)->end);
+	mips_virtual_end = VM_MIN_KERNEL_ADDRESS + (vaddr_t)Sysmapsize * NBPG;
+
 #ifndef _LP64
 	if (mips_virtual_end > VM_MAX_KERNEL_ADDRESS) {
@@ -547,7 +563,7 @@
 
 #ifdef PMAP_POOLPAGE_DEBUG
-	mips_virtual_end -= poolpage.limit;
+	mips_virtual_end -= poolpage.size;
 	poolpage.base = mips_virtual_end;
-	poolpage.sysmap += Sysmap + atop(poolpage.size);
+	poolpage.sysmap = Sysmap + atop(poolpage.size);
 #endif
 	/*
@@ -615,40 +631,83 @@
 	paddr_t pa;
 	vaddr_t va;
+	struct vm_physseg *maybe_seg = NULL;
+	u_int maybe_bank = vm_nphysseg;
 
 	size = round_page(size);
 	npgs = atop(size);
 
+	aprint_debug("%s: need %u pages\n", __func__, npgs);
+
 	for (u_int bank = 0; bank < vm_nphysseg; bank++) {
+		struct vm_physseg * const seg = VM_PHYSMEM_PTR(bank);
 		if (uvm.page_init_done == true)
 			panic("pmap_steal_memory: called _after_ bootstrap");
 
-		if (vm_physmem[bank].avail_start != vm_physmem[bank].start ||
-		    vm_physmem[bank].avail_start >= vm_physmem[bank].avail_end)
+		aprint_debug("%s: seg %u: %#"PRIxPADDR" %#"PRIxPADDR" %#"PRIxPADDR" %#"PRIxPADDR"\n",
+		    __func__, bank,
+		    seg->avail_start, seg->start,
+		    seg->avail_end, seg->end);
+
+		if (seg->avail_start != seg->start
+		    || seg->avail_start >= seg->avail_end) {
+			aprint_debug("%s: seg %u: bad start\n", __func__, bank);
 			continue;
-
-		if ((vm_physmem[bank].avail_end - vm_physmem[bank].avail_start)
-		    < npgs)
+		}
+
+		if (seg->avail_end - seg->avail_start < npgs) {
+			aprint_debug("%s: seg %u: too small for %u pages\n",
+			    __func__, bank, npgs);
 			continue;
+		}
+
+#ifndef _LP64
+		if (seg->avail_start + npgs > MIPS_PHYS_MASK + 1) {
+			aprint_debug("%s: seg %u: not enough in KSEG0 for %u pages\n",
+			    __func__, bank, npgs);
+			continue;
+		}
+#endif
+
+		/*
+		 * Always try to allocate from the segment with the least
+		 * amount of space left.
+		 */
+#define VM_PHYSMEM_SPACE(s)	((s)->avail_end - (s)->avail_start)
+		if (maybe_seg == NULL 
+		    || VM_PHYSMEM_SPACE(seg) < VM_PHYSMEM_SPACE(maybe_seg)) {
+			maybe_seg = seg;
+			maybe_bank = bank;
+		}
+	}
+
+	if (maybe_seg) {
+		struct vm_physseg * const seg = maybe_seg;
+		u_int bank = maybe_bank;
 
 		/*
 		 * There are enough pages here; steal them!
 		 */
-		pa = ptoa(vm_physmem[bank].avail_start);
-		vm_physmem[bank].avail_start += npgs;
-		vm_physmem[bank].start += npgs;
+		pa = ptoa(seg->avail_start);
+		seg->avail_start += npgs;
+		seg->start += npgs;
 
 		/*
 		 * Have we used up this segment?
 		 */
-		if (vm_physmem[bank].avail_start == vm_physmem[bank].end) {
+		if (seg->avail_start == seg->end) {
 			if (vm_nphysseg == 1)
 				panic("pmap_steal_memory: out of memory!");
 
+			aprint_debug("%s: seg %u: %u pages stolen (removed)\n",
+			    __func__, bank, npgs);
 			/* Remove this segment from the list. */
 			vm_nphysseg--;
 			for (u_int x = bank; x < vm_nphysseg; x++) {
 				/* structure copy */
-				vm_physmem[x] = vm_physmem[x + 1];
+				VM_PHYSMEM_PTR_SWAP(x, x + 1);
 			}
+		} else {
+			aprint_debug("%s: seg %u: %u pages stolen (%#"PRIxPADDR" left)\n",
+			    __func__, bank, npgs, VM_PHYSMEM_SPACE(seg));
 		}
 
@@ -714,13 +773,15 @@
 	if (mips_avail_end > MIPS_KSEG1_START - MIPS_KSEG0_START) {
 		curcpu()->ci_pmap_dstbase = uvm_km_alloc(kernel_map,
-		    uvmexp.ncolors * PAGE_SIZE, 0, UVM_KMF_VAONLY);
+		    uvmexp.ncolors * PAGE_SIZE, 0,
+		    UVM_KMF_COLORMATCH | UVM_KMF_VAONLY);
 		KASSERT(curcpu()->ci_pmap_dstbase);
 		curcpu()->ci_pmap_srcbase = uvm_km_alloc(kernel_map,
-		    uvmexp.ncolors * PAGE_SIZE, 0, UVM_KMF_VAONLY);
+		    uvmexp.ncolors * PAGE_SIZE, 0,
+		    UVM_KMF_COLORMATCH | UVM_KMF_VAONLY);
 		KASSERT(curcpu()->ci_pmap_srcbase);
 	}
 #endif
 
-#ifdef MIPS3
+#if defined(MIPS3) && 0
 	if (MIPS_HAS_R4K_MMU) {
 		/*
@@ -729,9 +790,9 @@
 		 * on MIPS3 CPUs to avoid possible virtual cache aliases
 		 * and uncached mappings in pmap_enter_pv().
-		 * 
+		 *
 		 * Ideally, read only shared mapping won't cause aliases
 		 * so pmap_enter_pv() should handle any shared read only
 		 * mappings without uncached ops like ARM pmap.
-		 * 
+		 *
 		 * On the other hand, R4000 and R4400 have the virtual
 		 * coherency exceptions which will happen even on read only
@@ -772,5 +833,5 @@
 	pmap->pm_count = 1;
 
-	pmap_segtab_alloc(pmap);
+	pmap_segtab_init(pmap);
 
 	return pmap;
@@ -798,5 +859,5 @@
 	kpreempt_disable();
 	pmap_tlb_asid_release_all(pmap);
-	pmap_segtab_free(pmap);
+	pmap_segtab_destroy(pmap);
 
 	pool_put(&pmap_pmap_pool, pmap);
@@ -848,5 +909,11 @@
 
 	kpreempt_disable();
-	curcpu()->ci_pmap_segbase = (void *)(MIPS_KSEG2_START + 0x1eadbeef);
+	KASSERT(l == curlwp || l->l_cpu == curlwp->l_cpu);
+#ifdef _LP64
+	curcpu()->ci_pmap_segtab = (void *)(MIPS_KSEG2_START + 0x1eadbeef);
+	curcpu()->ci_pmap_seg0tab = NULL;
+#else
+	curcpu()->ci_pmap_seg0tab = (void *)(MIPS_KSEG2_START + 0x1eadbeef);
+#endif
 	pmap_tlb_asid_deactivate(l->l_proc->p_vmspace->vm_map.pmap);
 	kpreempt_enable();
@@ -979,4 +1046,9 @@
 	}
 #endif
+#ifdef PMAP_FAULTINFO
+	curpcb->pcb_faultinfo.pfi_faultaddr = 0;
+	curpcb->pcb_faultinfo.pfi_repeats = 0;
+	curpcb->pcb_faultinfo.pfi_faultpte = NULL;
+#endif
 	pmap_pte_process(pmap, sva, eva, pmap_pte_remove, 0);
 	kpreempt_enable();
@@ -991,4 +1063,5 @@
 pmap_page_protect(struct vm_page *pg, vm_prot_t prot)
 {
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
 	pv_entry_t pv;
 	vaddr_t va;
@@ -1009,6 +1082,6 @@
 	case VM_PROT_READ:
 	case VM_PROT_READ|VM_PROT_EXECUTE:
-		(void)VM_PAGE_PVLIST_LOCK(pg, false);
-		pv = &pg->mdpage.pvh_first;
+		(void)PG_MD_PVLIST_LOCK(md, false);
+		pv = &md->pvh_first;
 		/*
 		 * Loop over all current mappings setting/clearing as apropos.
@@ -1017,12 +1090,12 @@
 			while (pv != NULL) {
 				const pmap_t pmap = pv->pv_pmap;
-				const uint16_t gen = VM_PAGE_PVLIST_GEN(pg);
+				const uint16_t gen = PG_MD_PVLIST_GEN(md);
 				va = pv->pv_va;
-				VM_PAGE_PVLIST_UNLOCK(pg);
+				PG_MD_PVLIST_UNLOCK(md);
 				pmap_protect(pmap, va, va + PAGE_SIZE, prot);
 				KASSERT(pv->pv_pmap == pmap);
 				pmap_update(pmap);
-				if (gen != VM_PAGE_PVLIST_LOCK(pg, false)) {
-					pv = &pg->mdpage.pvh_first;
+				if (gen != PG_MD_PVLIST_LOCK(md, false)) {
+					pv = &md->pvh_first;
 				} else {
 					pv = pv->pv_next;
@@ -1030,5 +1103,5 @@
 			}
 		}
-		VM_PAGE_PVLIST_UNLOCK(pg);
+		PG_MD_PVLIST_UNLOCK(md);
 		break;
 
@@ -1039,18 +1112,18 @@
 		 * won't try to sync the icache.
 		 */
-		if (pmap_clear_page_attributes(pg, PG_MD_EXECPAGE)) {
+		if (pmap_clear_mdpage_attributes(md, PG_MD_EXECPAGE)) {
 			PMAP_COUNT(exec_uncached_page_protect);
 		}
-		(void)VM_PAGE_PVLIST_LOCK(pg, false);
-		pv = &pg->mdpage.pvh_first;
+		(void)PG_MD_PVLIST_LOCK(md, false);
+		pv = &md->pvh_first;
 		while (pv->pv_pmap != NULL) {
 			const pmap_t pmap = pv->pv_pmap;
 			va = pv->pv_va;
-			VM_PAGE_PVLIST_UNLOCK(pg);
+			PG_MD_PVLIST_UNLOCK(md);
 			pmap_remove(pmap, va, va + PAGE_SIZE);
 			pmap_update(pmap);
-			(void)VM_PAGE_PVLIST_LOCK(pg, false);
-		}
-		VM_PAGE_PVLIST_UNLOCK(pg);
+			(void)PG_MD_PVLIST_LOCK(md, false);
+		}
+		PG_MD_PVLIST_UNLOCK(md);
 	}
 }
@@ -1073,11 +1146,12 @@
 		pg = PHYS_TO_VM_PAGE(mips_tlbpfn_to_paddr(pt_entry));
 		if (pg && (pt_entry & mips_pg_m_bit())) {
+			struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
 			if (MIPS_HAS_R4K_MMU
 			    && MIPS_CACHE_VIRTUAL_ALIAS
-			    && PG_MD_CACHED_P(pg))
+			    && PG_MD_CACHED_P(md))
 				mips_dcache_wbinv_range_index(sva, PAGE_SIZE);
-			if (PG_MD_EXECPAGE_P(pg)) {
-				KASSERT(pg->mdpage.pvh_first.pv_pmap != NULL);
-				if (PG_MD_CACHED_P(pg)) {
+			if (PG_MD_EXECPAGE_P(md)) {
+				KASSERT(md->pvh_first.pv_pmap != NULL);
+				if (PG_MD_CACHED_P(md)) {
 					pmap_page_syncicache(pg);
 					PMAP_COUNT(exec_synced_protect);
@@ -1244,4 +1318,5 @@
 pmap_page_cache(struct vm_page *pg, bool cached)
 {
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
 	const uint32_t newmode = cached ? MIPS3_PG_CACHED : MIPS3_PG_UNCACHED;
 
@@ -1251,16 +1326,16 @@
 		printf("pmap_page_uncache(%#"PRIxPADDR")\n", VM_PAGE_TO_PHYS(pg));
 #endif
-	
+
 	if (cached) {
-		pmap_clear_page_attributes(pg, PG_MD_UNCACHED);
+		pmap_clear_mdpage_attributes(md, PG_MD_UNCACHED);
 		PMAP_COUNT(page_cache_restorations);
 	} else {
-		pmap_set_page_attributes(pg, PG_MD_UNCACHED);
+		pmap_set_mdpage_attributes(md, PG_MD_UNCACHED);
 		PMAP_COUNT(page_cache_evictions);
 	}
 
-	KASSERT(VM_PAGE_PVLIST_LOCKED_P(pg));
+	KASSERT(PG_MD_PVLIST_LOCKED_P(md));
 	KASSERT(kpreempt_disabled());
-	for (pv_entry_t pv = &pg->mdpage.pvh_first;
+	for (pv_entry_t pv = &md->pvh_first;
 	     pv != NULL;
 	     pv = pv->pv_next) {
@@ -1322,7 +1397,10 @@
 	if (pmapdebug & (PDB_FOLLOW|PDB_ENTER))
 		printf("pmap_enter(%p, %#"PRIxVADDR", %#"PRIxPADDR", %x, %x)\n",
-		    pmap, va, pa, prot, wired);
+		    pmap, va, pa, prot, flags);
 #endif
 	const bool good_color = PMAP_PAGE_COLOROK_P(pa, va);
+	KASSERTMSG(good_color,
+	    ("%s(%p, %#"PRIxVADDR", %#"PRIxPADDR", %x, %x): color mismatch\n",
+	     __func__, pmap, va, pa, prot, flags));
 	if (pmap == pmap_kernel()) {
 		PMAP_COUNT(kernel_mappings);
@@ -1361,9 +1439,11 @@
 
 	if (pg) {
+		struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
+
 		/* Set page referenced/modified status based on flags */
 		if (flags & VM_PROT_WRITE)
-			pmap_set_page_attributes(pg, PG_MD_MODIFIED|PG_MD_REFERENCED);
+			pmap_set_mdpage_attributes(md, PG_MD_MODIFIED|PG_MD_REFERENCED);
 		else if (flags & VM_PROT_ALL)
-			pmap_set_page_attributes(pg, PG_MD_REFERENCED);
+			pmap_set_mdpage_attributes(md, PG_MD_REFERENCED);
 		if (!(prot & VM_PROT_WRITE))
 			/*
@@ -1378,5 +1458,5 @@
 #if defined(_MIPS_PADDR_T_64BIT) || defined(_LP64)
 			if (cached == false) {
-				if (PG_MD_MODIFIED_P(pg)) {
+				if (PG_MD_MODIFIED_P(md)) {
 					npte = mips_pg_rwncpage_bit();
 				} else {
@@ -1386,5 +1466,5 @@
 			} else {
 #endif
-				if (PG_MD_MODIFIED_P(pg)) {
+				if (PG_MD_MODIFIED_P(md)) {
 					npte = mips_pg_rwpage_bit();
 				} else {
@@ -1429,9 +1509,10 @@
 	    && pg != NULL
 	    && prot == (VM_PROT_READ | VM_PROT_EXECUTE)) {
+		struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
 		PMAP_COUNT(enter_exec_mapping);
-		if (!PG_MD_EXECPAGE_P(pg)) {
+		if (!PG_MD_EXECPAGE_P(md)) {
 			mips_icache_sync_range(MIPS_PHYS_TO_KSEG0(pa),
 			    PAGE_SIZE);
-			pmap_set_page_attributes(pg, PG_MD_EXECPAGE);
+			pmap_set_mdpage_attributes(md, PG_MD_EXECPAGE);
 			PMAP_COUNT(exec_syncicache_entry);
 		}
@@ -1523,11 +1604,26 @@
 	if (mips_pg_v(pte->pt_entry) &&
 	    mips_tlbpfn_to_paddr(pte->pt_entry) != pa) {
+#ifdef PMAP_FAULTINFO
+		struct pcb_faultinfo tmp_fi = curpcb->pcb_faultinfo;
+#endif
 		pmap_remove(pmap, va, va + NBPG);
+#ifdef PMAP_FAULTINFO
+		curpcb->pcb_faultinfo = tmp_fi;
+#endif
 		PMAP_COUNT(user_mappings_changed);
 	}
 
+	KASSERT(mips_pg_v(npte));
 	bool resident = mips_pg_v(pte->pt_entry);
 	if (!resident)
 		pmap->pm_stats.resident_count++;
+#ifdef PMAP_FAULTINFO
+	if (curpcb->pcb_faultinfo.pfi_faultpte == pte
+	    && curpcb->pcb_faultinfo.pfi_repeats > 1) {
+		printf("%s(%#"PRIxVADDR", %#"PRIxPADDR"): changing pte@%p from %#x to %#x\n",
+		    __func__, va, pa, pte, pte->pt_entry, npte);
+		cpu_Debugger();
+	}
+#endif
 	pte->pt_entry = npte;
 
@@ -1536,4 +1632,5 @@
 
 	if (pg != NULL && (prot == (VM_PROT_READ | VM_PROT_EXECUTE))) {
+		struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
 #ifdef DEBUG
 		if (pmapdebug & PDB_ENTER)
@@ -1542,7 +1639,7 @@
 #endif
 		PMAP_COUNT(exec_mappings);
-		if (!PG_MD_EXECPAGE_P(pg) && PG_MD_CACHED_P(pg)) {
+		if (!PG_MD_EXECPAGE_P(md) && PG_MD_CACHED_P(md)) {
 			pmap_page_syncicache(pg);
-			pmap_set_page_attributes(pg, PG_MD_EXECPAGE);
+			pmap_set_mdpage_attributes(md, PG_MD_EXECPAGE);
 			PMAP_COUNT(exec_synced_mappings);
 		}
@@ -1564,6 +1661,10 @@
 #endif
 	PMAP_COUNT(kenter_pa);
-	if (!PMAP_PAGE_COLOROK_P(pa, va) && managed)
+	KASSERTMSG(!managed || PMAP_PAGE_COLOROK_P(pa, va),
+	    ("%s(%#"PRIxVADDR", %#"PRIxPADDR", %x): color mismatch\n",
+	     __func__, va, pa, prot));
+	if (!PMAP_PAGE_COLOROK_P(pa, va) && managed) {
 		PMAP_COUNT(kenter_pa_bad);
+	}
 
 	if (!managed)
@@ -1610,16 +1711,17 @@
 		PMAP_COUNT(kremove_pages);
 		if (MIPS_HAS_R4K_MMU && MIPS_CACHE_VIRTUAL_ALIAS) {
-			struct vm_page *pg =
+			struct vm_page * const pg =
 			    PHYS_TO_VM_PAGE(mips_tlbpfn_to_paddr(pt_entry));
 			if (pg != NULL) {
-				(void)VM_PAGE_PVLIST_LOCK(pg, false);
-				pv_entry_t pv = &pg->mdpage.pvh_first;
+				struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
+				(void)PG_MD_PVLIST_LOCK(md, false);
+				pv_entry_t pv = &md->pvh_first;
 				if (pv->pv_pmap == NULL) {
-					pv->pv_va = va; 
-				} else if (PG_MD_CACHED_P(pg)
+					pv->pv_va = va;
+				} else if (PG_MD_CACHED_P(md)
 				    && mips_cache_badalias(pv->pv_va, va)) {
 					mips_dcache_wbinv_range(va, PAGE_SIZE);
 				}
-				VM_PAGE_PVLIST_UNLOCK(pg);
+				PG_MD_PVLIST_UNLOCK(md);
 			}
 		}
@@ -1641,7 +1743,18 @@
 	 * tlb_invalidate_addrs().
 	 */
-	pmap_tlb_asid_deactivate(pmap);
+#ifdef MULTIPROCESSOR
+	const uint32_t cpu_mask = 1 << cpu_index(curcpu());
+	KASSERT((pmap->pm_onproc & ~cpu_mask) == 0);
+	if (pmap->pm_onproc & cpu_mask)
+		pmap_tlb_asid_deactivate(pmap);
+#endif
 	pmap_tlb_asid_release_all(pmap);
 	pmap->pm_flags |= PMAP_DEFERRED_ACTIVATE;
+
+#ifdef PMAP_FAULTINFO
+	curpcb->pcb_faultinfo.pfi_faultaddr = 0;
+	curpcb->pcb_faultinfo.pfi_repeats = 0;
+	curpcb->pcb_faultinfo.pfi_faultpte = NULL;
+#endif
 	kpreempt_enable();
 }
@@ -1869,4 +1982,5 @@
 pmap_clear_reference(struct vm_page *pg)
 {
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
 #ifdef DEBUG
 	if (pmapdebug & PDB_FOLLOW)
@@ -1874,5 +1988,5 @@
 		    VM_PAGE_TO_PHYS(pg));
 #endif
-	return pmap_clear_page_attributes(pg, PG_MD_REFERENCED);
+	return pmap_clear_mdpage_attributes(md, PG_MD_REFERENCED);
 }
 
@@ -1886,6 +2000,7 @@
 pmap_is_referenced(struct vm_page *pg)
 {
-
-	return PG_MD_REFERENCED_P(pg);
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
+
+	return PG_MD_REFERENCED_P(md);
 }
 
@@ -1896,5 +2011,6 @@
 pmap_clear_modify(struct vm_page *pg)
 {
-	pv_entry_t pv = &pg->mdpage.pvh_first;
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
+	pv_entry_t pv = &md->pvh_first;
 	pv_entry_t pv_next;
 	uint16_t gen;
@@ -1905,7 +2021,7 @@
 		printf("pmap_clear_modify(%#"PRIxPADDR")\n", VM_PAGE_TO_PHYS(pg));
 #endif
-	if (PG_MD_EXECPAGE_P(pg)) {
+	if (PG_MD_EXECPAGE_P(md)) {
 		if (pv->pv_pmap == NULL) {
-			pmap_clear_page_attributes(pg, PG_MD_EXECPAGE);
+			pmap_clear_mdpage_attributes(md, PG_MD_EXECPAGE);
 			PMAP_COUNT(exec_uncached_clear_modify);
 		} else {
@@ -1914,5 +2030,5 @@
 		}
 	}
-	if (!pmap_clear_page_attributes(pg, PG_MD_MODIFIED))
+	if (!pmap_clear_mdpage_attributes(md, PG_MD_MODIFIED))
 		return false;
 	if (pv->pv_pmap == NULL) {
@@ -1926,5 +2042,5 @@
 	 */
 	kpreempt_disable();
-	gen = VM_PAGE_PVLIST_LOCK(pg, false);
+	gen = PG_MD_PVLIST_LOCK(md, false);
 	for (; pv != NULL; pv = pv_next) {
 		pmap_t pmap = pv->pv_pmap;
@@ -1955,15 +2071,15 @@
 		}
 		pte->pt_entry = pt_entry;
-		VM_PAGE_PVLIST_UNLOCK(pg);
+		PG_MD_PVLIST_UNLOCK(md);
 		pmap_tlb_invalidate_addr(pmap, va);
 		pmap_update(pmap);
-		if (__predict_false(gen != VM_PAGE_PVLIST_LOCK(pg, false))) {
+		if (__predict_false(gen != PG_MD_PVLIST_LOCK(md, false))) {
 			/*
 			 * The list changed!  So restart from the beginning.
 			 */
-			pv_next = &pg->mdpage.pvh_first;
-		}
-	}
-	VM_PAGE_PVLIST_UNLOCK(pg);
+			pv_next = &md->pvh_first;
+		}
+	}
+	PG_MD_PVLIST_UNLOCK(md);
 	kpreempt_enable();
 	return true;
@@ -1979,6 +2095,7 @@
 pmap_is_modified(struct vm_page *pg)
 {
-
-	return PG_MD_MODIFIED_P(pg);
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
+
+	return PG_MD_MODIFIED_P(md);
 }
 
@@ -1991,6 +2108,7 @@
 pmap_set_modified(paddr_t pa)
 {
-	struct vm_page *pg = PHYS_TO_VM_PAGE(pa);
-	pmap_set_page_attributes(pg, PG_MD_MODIFIED | PG_MD_REFERENCED);
+	struct vm_page * const pg = PHYS_TO_VM_PAGE(pa);
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
+	pmap_set_mdpage_attributes(md, PG_MD_MODIFIED | PG_MD_REFERENCED);
 }
 
@@ -1998,8 +2116,8 @@
 
 static void
-pmap_check_pvlist(struct vm_page *pg)
+pmap_check_pvlist(struct vm_page_md *md)
 {
 #ifdef PARANOIADIAG
-	pt_entry_t pv = &pg->mdpage.pvh_first;
+	pt_entry_t pv = &md->pvh_first;
 	if (pv->pv_pmap != NULL) {
 		for (; pv != NULL; pv = pv->pv_next) {
@@ -2010,5 +2128,5 @@
 #endif
 		}
-		pv = &pg->mdpage.pvh_first;
+		pv = &md->pvh_first;
 	}
 #endif /* PARANOIADIAG */
@@ -2022,4 +2140,5 @@
 pmap_enter_pv(pmap_t pmap, vaddr_t va, struct vm_page *pg, u_int *npte)
 {
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
 	pv_entry_t pv, npv, apv;
 	int16_t gen;
@@ -2033,5 +2152,5 @@
 
 	apv = NULL;
-	pv = &pg->mdpage.pvh_first;
+	pv = &md->pvh_first;
 #ifdef DEBUG
 	if (pmapdebug & PDB_ENTER)
@@ -2039,6 +2158,6 @@
 		    pv, pv->pv_va, pv->pv_pmap, pv->pv_next);
 #endif
-	gen = VM_PAGE_PVLIST_LOCK(pg, true);
-	pmap_check_pvlist(pg);
+	gen = PG_MD_PVLIST_LOCK(md, true);
+	pmap_check_pvlist(md);
 #if defined(MIPS3_NO_PV_UNCACHED) || defined(MULTIPROCESSOR)
 again:
@@ -2051,10 +2170,10 @@
 #ifdef DEBUG
 		if (pmapdebug & PDB_PVENTRY)
-			printf("pmap_enter: first pv: pmap %p va %#"PRIxVADDR"\n",
+			printf("pmap_enter_pv: first pv: pmap %p va %#"PRIxVADDR"\n",
 			    pmap, va);
 #endif
 		PMAP_COUNT(primary_mappings);
 		PMAP_COUNT(mappings);
-		pmap_clear_page_attributes(pg, PG_MD_UNCACHED);
+		pmap_clear_mdpage_attributes(md, PG_MD_UNCACHED);
 		pv->pv_pmap = pmap;
 		pv->pv_va = va;
@@ -2086,5 +2205,5 @@
 			}
 #else	/* !MIPS3_NO_PV_UNCACHED */
-			if (PG_MD_CACHED_P(pg)) {
+			if (PG_MD_CACHED_P(md)) {
 				/*
 				 * If this page is cached, then all mappings
@@ -2143,10 +2262,10 @@
 				    VM_PAGE_TO_PHYS(pg))
 					printf(
-		"pmap_enter: found va %#"PRIxVADDR" pa %#"PRIxPADDR" in pv_table but != %x\n",
+		"pmap_enter_pv: found va %#"PRIxVADDR" pa %#"PRIxPADDR" in pv_table but != %x\n",
 					    va, VM_PAGE_TO_PHYS(pg),
 					    pt_entry);
 #endif
 				PMAP_COUNT(remappings);
-				VM_PAGE_PVLIST_UNLOCK(pg);
+				PG_MD_PVLIST_UNLOCK(md);
 				if (__predict_false(apv != NULL))
 					pmap_pv_free(apv);
@@ -2156,19 +2275,20 @@
 #ifdef DEBUG
 		if (pmapdebug & PDB_PVENTRY)
-			printf("pmap_enter: new pv: pmap %p va %#"PRIxVADDR"\n",
+			printf("pmap_enter_pv: new pv: pmap %p va %#"PRIxVADDR"\n",
 			    pmap, va);
 #endif
 		if (__predict_true(apv == NULL)) {
-#ifdef MULTIPROCESSOR
+#if defined(MULTIPROCESSOR) || !defined(_LP64) || defined(PMAP_POOLPAGE_DEBUG) || defined(LOCKDEBUG)
 			/*
 			 * To allocate a PV, we have to release the PVLIST lock
 			 * so get the page generation.  We allocate the PV, and
-			 * then reacquire the lock.  
+			 * then reacquire the lock.
 			 */
-			VM_PAGE_PVLIST_UNLOCK(pg);
+			PG_MD_PVLIST_UNLOCK(md);
 #endif
 			apv = (pv_entry_t)pmap_pv_alloc();
 			if (apv == NULL)
 				panic("pmap_enter_pv: pmap_pv_alloc() failed");
+#if defined(MULTIPROCESSOR) || !defined(_LP64) || defined(PMAP_POOLPAGE_DEBUG) || defined(LOCKDEBUG)
 #ifdef MULTIPROCESSOR
 			/*
@@ -2178,7 +2298,10 @@
 			 */
 			uint16_t oldgen = gen;
-			gen = VM_PAGE_PVLIST_LOCK(pg, true);
+#endif
+			gen = PG_MD_PVLIST_LOCK(md, true);
+#ifdef MULTIPROCESSOR
 			if (gen != oldgen)
 				goto again;
+#endif
 #endif
 		}
@@ -2191,6 +2314,6 @@
 		PMAP_COUNT(mappings);
 	}
-	pmap_check_pvlist(pg);
-	VM_PAGE_PVLIST_UNLOCK(pg);
+	pmap_check_pvlist(md);
+	PG_MD_PVLIST_UNLOCK(md);
 	if (__predict_false(apv != NULL))
 		pmap_pv_free(apv);
@@ -2207,4 +2330,5 @@
 pmap_remove_pv(pmap_t pmap, vaddr_t va, struct vm_page *pg, bool dirty)
 {
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
 	pv_entry_t pv, npv;
 	bool last;
@@ -2216,8 +2340,8 @@
 #endif
 	KASSERT(kpreempt_disabled());
-	pv = &pg->mdpage.pvh_first;
-
-	(void)VM_PAGE_PVLIST_LOCK(pg, true);
-	pmap_check_pvlist(pg);
+	pv = &md->pvh_first;
+
+	(void)PG_MD_PVLIST_LOCK(md, true);
+	pmap_check_pvlist(md);
 
 	/*
@@ -2235,5 +2359,5 @@
 			KASSERT(pv->pv_pmap != NULL);
 		} else {
-			pmap_clear_page_attributes(pg, PG_MD_UNCACHED);
+			pmap_clear_mdpage_attributes(md, PG_MD_UNCACHED);
 			pv->pv_pmap = NULL;
 			last = true;	/* Last mapping removed */
@@ -2252,10 +2376,10 @@
 #ifdef MIPS3_PLUS	/* XXX mmu XXX */
 #ifndef MIPS3_NO_PV_UNCACHED
-	if (MIPS_HAS_R4K_MMU && PG_MD_UNCACHED_P(pg)) {
+	if (MIPS_HAS_R4K_MMU && PG_MD_UNCACHED_P(md)) {
 		/*
 		 * Page is currently uncached, check if alias mapping has been
 		 * removed.  If it was, then reenable caching.
 		 */
-		pv = &pg->mdpage.pvh_first;
+		pv = &md->pvh_first;
 		for (pv_entry_t pv0 = pv->pv_next; pv0; pv0 = pv0->pv_next) {
 			if (mips_cache_badalias(pv->pv_va, pv0->pv_va))
@@ -2267,6 +2391,6 @@
 #endif
 
-	pmap_check_pvlist(pg);
-	VM_PAGE_PVLIST_UNLOCK(pg);
+	pmap_check_pvlist(md);
+	PG_MD_PVLIST_UNLOCK(md);
 
 	/*
@@ -2275,5 +2399,5 @@
 	if (npv)
 		pmap_pv_free(npv);
-	if (PG_MD_EXECPAGE_P(pg) && dirty) {
+	if (PG_MD_EXECPAGE_P(md) && dirty) {
 		if (last) {
 			/*
@@ -2281,5 +2405,5 @@
 			 * care about its execness.
 			 */
-			pmap_clear_page_attributes(pg, PG_MD_EXECPAGE);
+			pmap_clear_mdpage_attributes(md, PG_MD_EXECPAGE);
 			PMAP_COUNT(exec_uncached_remove);
 		} else {
@@ -2329,8 +2453,8 @@
 
 uint16_t
-pmap_pvlist_lock(struct vm_page *pg, bool list_change)
+pmap_pvlist_lock(struct vm_page_md *md, bool list_change)
 {
 	struct pmap_pvlist_info * const pli = &pmap_pvlist_info;
-	kmutex_t *lock = pg->mdpage.pvh_lock;
+	kmutex_t *lock = md->pvh_lock;
 	int16_t gen;
 
@@ -2347,5 +2471,5 @@
 		 * the one they assigned.
 		 */
-		lock = atomic_cas_ptr(&pg->mdpage.pvh_lock, NULL, new_lock);
+		lock = atomic_cas_ptr(&md->pvh_lock, NULL, new_lock);
 		if (lock == NULL) {
 			lock = new_lock;
@@ -2363,7 +2487,7 @@
 	 * of attrs so we use that as a generation number.
 	 */
-	gen = VM_PAGE_PVLIST_GEN(pg);		/* get old value */
+	gen = PG_MD_PVLIST_GEN(md);		/* get old value */
 	if (list_change)
-		atomic_add_int(&pg->mdpage.pvh_attrs, 0x10000);
+		atomic_add_int(&md->pvh_attrs, 0x10000);
 
 	/*
@@ -2388,5 +2512,5 @@
 pmap_pv_page_alloc(struct pool *pp, int flags)
 {
-	struct vm_page *pg = PMAP_ALLOC_POOLPAGE(UVM_PGA_USERESERVE);
+	struct vm_page * const pg = PMAP_ALLOC_POOLPAGE(UVM_PGA_USERESERVE);
 	if (pg == NULL)
 		return NULL;
@@ -2417,6 +2541,7 @@
 		mips_dcache_inv_range(va, PAGE_SIZE);
 #endif
-	struct vm_page *pg = PHYS_TO_VM_PAGE(pa);
-	pmap_clear_page_attributes(pg, PG_MD_POOLPAGE);
+	struct vm_page * const pg = PHYS_TO_VM_PAGE(pa);
+	KASSERT(pg != NULL);
+	pmap_clear_mdpage_attributes(VM_PAGE_TO_MD(pg), PG_MD_POOLPAGE);
 	uvm_pagefree(pg);
 }
@@ -2490,7 +2615,8 @@
 	vaddr_t va;
 
-	struct vm_page *pg = PHYS_TO_VM_PAGE(pa);
+	struct vm_page * const pg = PHYS_TO_VM_PAGE(pa);
 	KASSERT(pg);
-	pmap_set_page_attributes(pg, PG_MD_POOLPAGE);
+	struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
+	pmap_set_mdpage_attributes(md, PG_MD_POOLPAGE);
 
 #ifdef PMAP_POOLPAGE_DEBUG
@@ -2536,12 +2662,12 @@
 		 * cause aliases, flush the page from the cache.
 		 */
-		(void)VM_PAGE_PVLIST_LOCK(pg, false);
-		pv_entry_t pv = &pg->mdpage.pvh_first;
+		(void)PG_MD_PVLIST_LOCK(md, false);
+		pv_entry_t pv = &md->pvh_first;
 		vaddr_t last_va = pv->pv_va;
 		KASSERT(pv->pv_pmap == NULL);
 		pv->pv_va = va;
-		if (PG_MD_CACHED_P(pg) && mips_cache_badalias(last_va, va))
-			mips_dcache_wbinv_range_index(last_va, PAGE_SIZE); 
-		VM_PAGE_PVLIST_UNLOCK(pg);
+		if (PG_MD_CACHED_P(md) && mips_cache_badalias(last_va, va))
+			mips_dcache_wbinv_range_index(last_va, PAGE_SIZE);
+		PG_MD_PVLIST_UNLOCK(md);
 	}
 #endif
@@ -2554,5 +2680,5 @@
 	paddr_t pa;
 #ifdef PMAP_POOLPAGE_DEBUG
-	KASSERT(poolpage.start <= va && va < poolpage.start + poolpage.size);
+	KASSERT(poolpage.base <= va && va < poolpage.base + poolpage.size);
 	pa = mips_tlbpfn_to_paddr(kvtopte(va)->pt_entry);
 #elif defined(_LP64)
@@ -2565,5 +2691,5 @@
 	struct vm_page *pg = PHYS_TO_VM_PAGE(pa);
 	KASSERT(pg);
-	pmap_clear_page_attributes(pg, PG_MD_POOLPAGE);
+	pmap_clear_mdpage_attributes(VM_PAGE_TO_MD(pg), PG_MD_POOLPAGE);
 #if defined(MIPS3_PLUS)
 	if (MIPS_CACHE_VIRTUAL_ALIAS) {
Index: /trunk/src/sys/arch/mips/mips/pmap_segtab.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/pmap_segtab.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/pmap_segtab.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: pmap_segtab.c,v 1.1.2.7 2010/05/04 17:14:47 matt Exp $	*/
+/*	$NetBSD: pmap_segtab.c,v 1.1.2.10 2011/04/29 08:26:29 matt Exp $	*/
 
 /*-
@@ -68,5 +68,5 @@
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.1.2.7 2010/05/04 17:14:47 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap_segtab.c,v 1.1.2.10 2011/04/29 08:26:29 matt Exp $");
 
 /*
@@ -115,10 +115,9 @@
 #include "opt_cputype.h"
 #include "opt_mips_cache.h"
+#include "opt_multiprocessor.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
-#include <sys/user.h>
-#include <sys/buf.h>
 #include <sys/pool.h>
 #include <sys/mutex.h>
@@ -136,7 +135,7 @@
 #include <mips/pte.h>
 
-CTASSERT(NBPG >= sizeof(struct segtab));
-
-struct segtab * volatile free_segtab;		/* free list kept locally */
+CTASSERT(NBPG >= sizeof(union segtab));
+
+union segtab * volatile free_segtab;		/* free list kept locally */
 #ifdef DEBUG
 uint32_t nget_segtab;
@@ -157,11 +156,15 @@
 pmap_segmap(struct pmap *pmap, vaddr_t va)
 {
-	struct segtab *stp = pmap->pm_segtab;
+	union segtab *stp = pmap->pm_segtab;
 	KASSERT(!MIPS_KSEG0_P(va));
 	KASSERT(!MIPS_KSEG1_P(va));
 #ifdef _LP64
 	KASSERT(!MIPS_XKPHYS_P(va));
-#endif
-	return stp->seg_tab[va >> SEGSHIFT];
+	stp = stp->seg_seg[(va >> XSEGSHIFT) & (NSEGPG - 1)];
+	if (stp == NULL)
+		return NULL;
+#endif
+	
+	return stp->seg_tab[(va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1)];
 }
 
@@ -174,4 +177,73 @@
 
 	return pte + ((va >> PGSHIFT) & (NPTEPG - 1));
+}
+
+static void
+pmap_segtab_free(union segtab *stp)
+{
+	/*
+	 * Insert the the segtab into the segtab freelist.
+	 */
+	for (;;) {
+		void *tmp = free_segtab;
+		stp->seg_tab[0] = tmp;
+		if (tmp == atomic_cas_ptr(&free_segtab, tmp, stp)) {
+			SEGTAB_ADD(nput, 1);
+			break;
+		}
+	}
+}
+
+static void
+pmap_segtab_release(union segtab *stp, u_int level)
+{
+
+	for (size_t i = 0; i < PMAP_SEGTABSIZE; i++) {
+		paddr_t pa;
+#ifdef _LP64
+		if (level > 0) {
+			if (stp->seg_seg[i] != NULL) {
+				pmap_segtab_release(stp->seg_seg[i], level - 1);
+				stp->seg_seg[i] = NULL;
+			}
+			continue;
+		}
+#endif
+
+		/* get pointer to segment map */
+		pt_entry_t *pte = stp->seg_tab[i];
+		if (pte == NULL)
+			continue;
+#ifdef PARANOIADIAG
+		for (size_t j = 0; j < NPTEPG; j++) {
+			if ((pte + j)->pt_entry)
+				panic("pmap_destroy: segmap not empty");
+		}
+#endif
+
+#ifdef MIPS3_PLUS	/* XXX mmu XXX */
+		/*
+		 * The pica pmap.c flushed the segmap pages here.  I'm
+		 * not sure why, but I suspect it's because the page(s)
+		 * were being accessed by KSEG0 (cached) addresses and
+		 * may cause cache coherency problems when the page
+		 * is reused with KSEG2 (mapped) addresses.  This may
+		 * cause problems on machines without VCED/VCEI.
+		 */
+		if (MIPS_CACHE_VIRTUAL_ALIAS)
+			mips_dcache_inv_range((vaddr_t)pte, PAGE_SIZE);
+#endif	/* MIPS3_PLUS */
+#ifdef _LP64
+		KASSERT(MIPS_XKPHYS_P(pte));
+		pa = MIPS_XKPHYS_TO_PHYS(pte);
+#else
+		pa = MIPS_KSEG0_TO_PHYS(pte);
+#endif
+		uvm_pagefree(PHYS_TO_VM_PAGE(pa));
+
+		stp->seg_tab[i] = NULL;
+	}
+
+	pmap_segtab_free(stp);
 }
 
@@ -188,14 +260,14 @@
  *	is bounded by that size.
  */
-void
-pmap_segtab_alloc(pmap_t pmap)
-{
-	struct segtab *stp;
+static union segtab *
+pmap_segtab_alloc(void)
+{
+	union segtab *stp;
  again:
 	stp = NULL;
 	while (__predict_true(free_segtab != NULL)) {
-		struct segtab *next_stp;
+		union segtab *next_stp;
 		stp = free_segtab;
-		next_stp = (struct segtab *)stp->seg_tab[0];
+		next_stp = (union segtab *)stp->seg_tab[0];
 		if (stp == atomic_cas_ptr(&free_segtab, stp, next_stp)) {
 			SEGTAB_ADD(nget, 1);
@@ -221,9 +293,9 @@
 #ifdef _LP64
 		KASSERT(mips_options.mips3_xkphys_cached);
-		stp = (struct segtab *)MIPS_PHYS_TO_XKPHYS_CACHED(stp_pa);
-#else
-		stp = (struct segtab *)MIPS_PHYS_TO_KSEG0(stp_pa);
-#endif
-		const size_t n = NBPG / sizeof(struct segtab);
+		stp = (union segtab *)MIPS_PHYS_TO_XKPHYS_CACHED(stp_pa);
+#else
+		stp = (union segtab *)MIPS_PHYS_TO_KSEG0(stp_pa);
+#endif
+		const size_t n = NBPG / sizeof(union segtab);
 		if (n > 1) {
 			/*
@@ -252,6 +324,15 @@
 	}
 #endif
-
-	pmap->pm_segtab = stp;
+	return stp;
+}
+
+/*
+ * Allocate the top segment table for the pmap.
+ */
+void
+pmap_segtab_init(pmap_t pmap)
+{
+
+	pmap->pm_segtab = pmap_segtab_alloc();
 }
 
@@ -262,58 +343,16 @@
  */
 void
-pmap_segtab_free(pmap_t pmap)
-{
-	struct segtab *stp = pmap->pm_segtab;
+pmap_segtab_destroy(pmap_t pmap)
+{
+	union segtab *stp = pmap->pm_segtab;
 
 	if (stp == NULL)
 		return;
 
-	for (size_t i = 0; i < PMAP_SEGTABSIZE; i++) {
-		paddr_t pa;
-		/* get pointer to segment map */
-		pt_entry_t *pte = stp->seg_tab[i];
-		if (pte == NULL)
-			continue;
-#ifdef PARANOIADIAG
-		for (size_t j = 0; j < NPTEPG; j++) {
-			if ((pte + j)->pt_entry)
-				panic("pmap_destroy: segmap not empty");
-		}
-#endif
-
-#ifdef MIPS3_PLUS	/* XXX mmu XXX */
-		/*
-		 * The pica pmap.c flushed the segmap pages here.  I'm
-		 * not sure why, but I suspect it's because the page(s)
-		 * were being accessed by KSEG0 (cached) addresses and
-		 * may cause cache coherency problems when the page
-		 * is reused with KSEG2 (mapped) addresses.  This may
-		 * cause problems on machines without VCED/VCEI.
-		 */
-		if (MIPS_CACHE_VIRTUAL_ALIAS)
-			mips_dcache_inv_range((vaddr_t)pte, PAGE_SIZE);
-#endif	/* MIPS3_PLUS */
-#ifdef _LP64
-		KASSERT(MIPS_XKPHYS_P(pte));
-		pa = MIPS_XKPHYS_TO_PHYS(pte);
-#else
-		pa = MIPS_KSEG0_TO_PHYS(pte);
-#endif
-		uvm_pagefree(PHYS_TO_VM_PAGE(pa));
-
-		stp->seg_tab[i] = NULL;
-	}
-
-	/*
-	 * Insert the the segtab into the segtab freelist.
-	 */
-	for (;;) {
-		void *tmp = free_segtab;
-		stp->seg_tab[0] = tmp;
-		if (tmp == atomic_cas_ptr(&free_segtab, tmp, stp)) {
-			SEGTAB_ADD(nput, 1);
-			break;
-		}
-	}
+#ifdef _LP64
+	pmap_segtab_release(stp, 1);
+#else
+	pmap_segtab_release(stp, 0);
+#endif
 }
 
@@ -326,5 +365,14 @@
 	if (l == curlwp) {
 		KASSERT(pm == l->l_proc->p_vmspace->vm_map.pmap);
-		l->l_cpu->ci_pmap_segbase = pm->pm_segtab;
+#ifdef _LP64
+		l->l_cpu->ci_pmap_segtab = pm->pm_segtab;
+		if (pm != pmap_kernel()) {
+			l->l_cpu->ci_pmap_seg0tab = pm->pm_segtab->seg_seg[0];
+		} else {
+			l->l_cpu->ci_pmap_seg0tab = NULL;
+		}
+#else
+		l->l_cpu->ci_pmap_seg0tab = pm->pm_segtab;
+#endif
 	}
 }
@@ -376,9 +424,27 @@
 pmap_pte_reserve(pmap_t pmap, vaddr_t va, int flags)
 {
-	struct segtab *stp = pmap->pm_segtab;
+	union segtab *stp = pmap->pm_segtab;
 	pt_entry_t *pte;
 
 	pte = pmap_pte_lookup(pmap, va);
 	if (__predict_false(pte == NULL)) {
+#ifdef _LP64
+		union segtab ** const stp_p =
+		    &stp->seg_seg[(va >> XSEGSHIFT) & (NSEGPG - 1)];
+		if (__predict_false((stp = *stp_p) == NULL)) {
+			union segtab *nstp = pmap_segtab_alloc();
+#ifdef MULTIPROCESSOR
+			union segtab *ostp = atomic_cas_ptr(stp_p, NULL, nstp);
+			if (__predict_false(ostp != NULL)) {
+				pmap_segtab_free(nstp);
+				stp = ostp;
+			}
+#else
+			*stp_p = nstp;
+#endif /* MULTIPROCESSOR */
+			stp = nstp;
+		}
+		KASSERT(stp == pmap->pm_segtab->seg_seg[(va >> XSEGSHIFT) & (NSEGPG - 1)]);
+#endif /* _LP64 */
 		struct vm_page * const pg = pmap_pte_pagealloc();
 		if (pg == NULL) {
@@ -396,7 +462,8 @@
 		pte = (pt_entry_t *)MIPS_PHYS_TO_KSEG0(pa);
 #endif
+		pt_entry_t ** const pte_p =
+		    &stp->seg_tab[(va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1)];
 #ifdef MULTIPROCESSOR
-		pt_entry_t *opte = atomic_cas_ptr(
-		    &stp->seg_tab[va >> SEGSHIFT], NULL, pte);
+		pt_entry_t *opte = atomic_cas_ptr(pte_p, NULL, pte);
 		/*
 		 * If another thread allocated the segtab needed for this va
@@ -408,6 +475,7 @@
 		}
 #else
-		stp->seg_tab[va >> SEGSHIFT] = pte;
-#endif
+		*pte_p = pte;
+#endif
+		KASSERT(pte == stp->seg_tab[(va >> SEGSHIFT) & (PMAP_SEGTABSIZE - 1)]);
 
 		pte += (va >> PGSHIFT) & (NPTEPG - 1);
Index: /trunk/src/sys/arch/mips/mips/pmap_tlb.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/pmap_tlb.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/pmap_tlb.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: pmap_tlb.c,v 1.1.2.11 2010/05/04 17:14:17 matt Exp $	*/
+/*	$NetBSD: pmap_tlb.c,v 1.1.2.18 2011/05/13 17:36:39 matt Exp $	*/
 
 /*-
@@ -32,5 +32,5 @@
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.1.2.11 2010/05/04 17:14:17 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap_tlb.c,v 1.1.2.18 2011/05/13 17:36:39 matt Exp $");
 
 /*
@@ -82,5 +82,5 @@
  * we are updating a PTE and that PTE previously was invalid and therefore
  * couldn't support an active mapping, there's no need for an IPI since there
- * can be no TLB entry to invalidate.  The other case is when we change a PTE
+ * can't be a TLB entry to invalidate.  The other case is when we change a PTE
  * to be modified we just update the local TLB.  If another TLB has a stale
  * entry, a TLB MOD exception will be raised and that will cause the local TLB
@@ -123,7 +123,9 @@
  */
 
+#include "opt_multiprocessor.h"
 #include "opt_sysv.h"
 #include "opt_cputype.h"
 #include "opt_mips_cache.h"
+#include "opt_multiprocessor.h"
 
 #include <sys/param.h>
@@ -147,7 +149,7 @@
 	.ti_name = "tlb0",
 	.ti_asid_hint = 1,
-	.ti_asid_mask = MIPS_TLB_NUM_PIDS - 1,
-	.ti_asid_max = MIPS_TLB_NUM_PIDS - 1,
-	.ti_asids_free = MIPS_TLB_NUM_PIDS - 1,
+	.ti_asid_mask = __builtin_constant_p(MIPS_TLB_NUM_PIDS) ? MIPS_TLB_NUM_PIDS - 1 : 0,
+	.ti_asid_max = __builtin_constant_p(MIPS_TLB_NUM_PIDS) ? MIPS_TLB_NUM_PIDS - 1 : 0,
+	.ti_asids_free = __builtin_constant_p(MIPS_TLB_NUM_PIDS) ? MIPS_TLB_NUM_PIDS - 1 : 0,
 	.ti_asid_bitmap[0] = 1,
 	.ti_wired = MIPS3_TLB_WIRED_UPAGES,
@@ -215,6 +217,6 @@
 }
 
-static void
-pmap_tlb_attach_evcnt(struct pmap_tlb_info *ti)
+void
+pmap_tlb_info_evcnt_attach(struct pmap_tlb_info *ti)
 {
 #ifdef MULTIPROCESSOR
@@ -227,5 +229,5 @@
 	evcnt_attach_dynamic(&ti->ti_evcnt_synci_all,
 	    EVCNT_TYPE_MISC, &ti->ti_evcnt_synci_asts,
-	    ti->ti_name, "iacche full syncs");
+	    ti->ti_name, "icache full syncs");
 	evcnt_attach_dynamic(&ti->ti_evcnt_synci_pages,
 	    EVCNT_TYPE_MISC, &ti->ti_evcnt_synci_asts,
@@ -238,4 +240,7 @@
 	    ti->ti_name, "icache pages deferred");
 #endif /* MULTIPROCESSOR */
+	evcnt_attach_dynamic(&ti->ti_evcnt_asid_reinits,
+	    EVCNT_TYPE_MISC, NULL,
+	    ti->ti_name, "asid pool reinit");
 }
 
@@ -248,5 +253,5 @@
 		KASSERT(ti == &pmap_tlb0_info);
 		mutex_init(ti->ti_lock, MUTEX_DEFAULT, IPL_SCHED);
-		if (!CPUISMIPSNN) {
+		if (!CPUISMIPSNN || !__builtin_constant_p(MIPS_TLB_NUM_PIDS)) {
 			ti->ti_asid_max = mips_options.mips_num_tlb_entries - 1;
 			ti->ti_asids_free = ti->ti_asid_max;
@@ -262,13 +267,12 @@
 #ifdef MULTIPROCESSOR
 		const u_int icache_way_pages =
-			mips_cache_info.mci_picache_way_size >> PGSHIFT; 
+			mips_cache_info.mci_picache_way_size >> PGSHIFT;
 		KASSERT(icache_way_pages <= 8*sizeof(pmap_tlb_synci_page_mask));
 		pmap_tlb_synci_page_mask = icache_way_pages - 1;
 		pmap_tlb_synci_map_mask = ~(~0 << icache_way_pages);
-		printf("tlb0: synci page mask %#x and map mask %#x used for %u pages\n", 
+		printf("tlb0: synci page mask %#x and map mask %#x used for %u pages\n",
 		    pmap_tlb_synci_page_mask, pmap_tlb_synci_map_mask,
 		    icache_way_pages);
 #endif
-		pmap_tlb_attach_evcnt(ti);
 		return;
 #ifdef MULTIPROCESSOR
@@ -289,5 +293,6 @@
 	snprintf(ti->ti_name, sizeof(ti->ti_name), "tlb%u", ti->ti_index);
 
-	pmap_tlb_attach_evcnt(ti);
+	KASSERT(ti != &pmap_tlb0_info);
+	pmap_tlb_info_evcnt_attach(ti);
 
 	/*
@@ -372,6 +377,8 @@
 		 * allocate a new ASID.
 		 */
+		pmap_tlb_asid_check();
 		const u_int asids_found = tlb_record_asids(ti->ti_asid_bitmap,
 		    ti->ti_asid_mask);
+		pmap_tlb_asid_check();
 		KASSERT(asids_found == pmap_tlb_asid_count(ti));
 		if (__predict_false(asids_found >= ti->ti_asid_max / 2)) {
@@ -432,4 +439,8 @@
 #endif
 
+	KASSERT(cpu_intr_p());
+	KASSERTMSG(ci->ci_cpl >= IPL_SCHED,
+	    ("%s: cpl (%d) < IPL_SCHED (%d)",
+	    __func__, ci->ci_cpl, IPL_SCHED));
 	TLBINFO_LOCK(ti);
 
@@ -447,5 +458,7 @@
 			 */
 			KASSERT(pai->pai_asid != 0);
+			pmap_tlb_asid_check();
 			tlb_invalidate_asids(pai->pai_asid, pai->pai_asid + 1);
+			pmap_tlb_asid_check();
 		} else if (pai->pai_asid) {
 			/*
@@ -470,5 +483,7 @@
 		 * We need to invalidate all global TLB entries.
 		 */
+		pmap_tlb_asid_check();
 		tlb_invalidate_globals();
+		pmap_tlb_asid_check();
 		break;
 	case TLBINV_ALL:
@@ -610,5 +625,7 @@
 	if (pm == pmap_kernel() || PMAP_PAI_ASIDVALID_P(pai, ti)) {
 		va |= pai->pai_asid << MIPS_TLB_PID_SHIFT;
+		pmap_tlb_asid_check();
 		rv = tlb_update(va, pt_entry);
+		pmap_tlb_asid_check();
 	}
 #ifdef MULTIPROCESSOR
@@ -631,5 +648,7 @@
 	if (pm == pmap_kernel() || PMAP_PAI_ASIDVALID_P(pai, ti)) {
 		va |= pai->pai_asid << MIPS_TLB_PID_SHIFT;
+		pmap_tlb_asid_check();
 		tlb_invalidate_addr(va);
+		pmap_tlb_asid_check();
 	}
 #ifdef MULTIPROCESSOR
@@ -763,5 +782,9 @@
 		atomic_or_ulong(&ci->ci_flags, CPUF_USERPMAP);
 #endif /* MULTIPROCESSOR */
+		ci->ci_pmap_asid_cur = pai->pai_asid;
 		tlb_set_asid(pai->pai_asid);
+		pmap_tlb_asid_check();
+	} else {
+		printf("%s: l (%p) != curlwp %p\n", __func__, l, curlwp);
 	}
 	TLBINFO_UNLOCK(ti);
@@ -769,5 +792,5 @@
 #ifdef DEBUGXX
 	if (pmapdebug & (PDB_FOLLOW|PDB_TLBPID)) {
-		printf("pmap_tlb_asid_alloc: curlwp %d.%d '%s' ",
+		printf("%s: curlwp %d.%d '%s' ", __func__,
 		    curlwp->l_proc->p_pid, curlwp->l_lid,
 		    curlwp->l_proc->p_comm);
@@ -784,20 +807,27 @@
 	/*
 	 * The kernel pmap is aways onproc and active and must never have
-	 * those bits cleared.
-	 */
-	if (pm != pmap_kernel()) {
+	 * those bits cleared.  If pmap_remove_all was called, it has already
+	 * deactivated the pmap and thusly onproc will be 0 so there's nothing
+	 * to do.
+	 */
+	if (pm != pmap_kernel() && pm->pm_onproc != 0) {
 		struct cpu_info * const ci = curcpu();
-		struct pmap_tlb_info * const ti = ci->ci_tlb_info;
-		TLBINFO_LOCK(ti);
-		/*
-		 * The bits in pm_onproc belonging to this TLB can only
-		 * be changed while this TLBs lock is held.
-		 */
-		atomic_and_32(&pm->pm_onproc, ~(1 << cpu_index(ci)));
-		TLBINFO_UNLOCK(ti);
+		const uint32_t cpu_mask = 1 << cpu_index(ci);
+		KASSERT(!cpu_intr_p());
+		KASSERTMSG(pm->pm_onproc & cpu_mask,
+		    ("%s: pmap %p onproc %#x doesn't include cpu %d (%p)",
+		    __func__, pm, pm->pm_onproc, cpu_index(ci), ci));
+		/*
+		 * The bits in pm_onproc that belong to this TLB can
+		 * be changed while this TLBs lock is not held as long
+		 * as we use atomic ops.
+		 */
+		atomic_and_32(&pm->pm_onproc, ~cpu_mask);
 		atomic_and_ulong(&ci->ci_flags, ~CPUF_USERPMAP);
 	}
 #elif defined(DEBUG)
+	curcpu()->ci_pmap_asid_cur = 0;
 	tlb_set_asid(0);
+	pmap_tlb_asid_check();
 #endif
 }
@@ -807,4 +837,5 @@
 {
 	KASSERT(pm != pmap_kernel());
+	KASSERT(kpreempt_disabled());
 #ifdef MULTIPROCESSOR
 	KASSERT(pm->pm_onproc == 0);
@@ -988,2 +1019,17 @@
 }
 #endif /* MULTIPROCESSOR */
+
+void
+pmap_tlb_asid_check(void)
+{
+#ifdef DEBUG
+	kpreempt_disable();
+	uint32_t tlb_hi;
+	__asm("mfc0 %0,$%1" : "=r"(tlb_hi) : "n"(MIPS_COP_0_TLB_HI));
+	uint32_t asid = (tlb_hi & MIPS_TLB_PID) >> MIPS_TLB_PID_SHIFT;
+	KDASSERTMSG(asid == curcpu()->ci_pmap_asid_cur,
+	   ("tlb_hi (%#x) asid (%#x) != current asid (%#x)",
+	    tlb_hi, asid, curcpu()->ci_pmap_asid_cur));
+	kpreempt_enable();
+#endif
+}
Index: /trunk/src/sys/arch/mips/mips/process_machdep.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/process_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/process_machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: process_machdep.c,v 1.29.62.5 2010/02/28 23:45:06 matt Exp $	*/
+/*	$NetBSD: process_machdep.c,v 1.29.62.6 2011/04/29 08:26:30 matt Exp $	*/
 
 /*
@@ -77,5 +77,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.29.62.5 2010/02/28 23:45:06 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.29.62.6 2011/04/29 08:26:30 matt Exp $");
 
 /*
@@ -104,8 +104,7 @@
 #include <sys/systm.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/ptrace.h>
 
-#include <mips/reg.h>
+#include <mips/pcb.h>
 #include <mips/regnum.h>			/* symbolic register indices */
 #include <mips/locore.h>
@@ -138,4 +137,5 @@
 process_read_xfpregs(struct lwp *l, struct fpreg *regs, size_t *regslen_p)
 {
+	struct pcb * const pcb = lwp_getpcb(l);
 	KASSERT(*regslen_p == sizeof(struct fpreg));
 
@@ -145,7 +145,6 @@
 #endif
 
-	if (l->l_md.md_flags & MDP_FPUSED)
-		fpusave_lwp(l);
-	memcpy(regs, &l->l_addr->u_pcb.pcb_fpregs, *regslen_p);
+	fpu_save_lwp(l);
+	memcpy(regs, &pcb->pcb_fpregs, sizeof(*regs));
 	return 0;
 }
@@ -154,10 +153,10 @@
 process_write_xfpregs(struct lwp *l, const struct fpreg *regs, size_t regslen)
 {
+	struct pcb * const pcb = lwp_getpcb(l);
 	KASSERT(regslen <= sizeof(struct fpreg));
 
 #ifndef NOFPU
 	/* to load FPA contents next time when FP insn is executed */
-	if (l->l_md.md_flags & MDP_FPUSED)
-		fpudiscard_lwp(l);
+	fpu_discard();
 #endif /* !NOFPU */
 
@@ -167,5 +166,5 @@
 	KASSERT(regslen == sizeof(struct fpreg));
 #endif
-	memcpy(&l->l_addr->u_pcb.pcb_fpregs, regs, regslen);
+	memcpy(&pcb->pcb_fpregs, regs, regslen);
 	return 0;
 }
Index: /trunk/src/sys/arch/mips/mips/sig_machdep.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/sig_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/sig_machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sig_machdep.c,v 1.16.14.4 2010/02/22 20:17:09 matt Exp $	*/
+/*	$NetBSD: sig_machdep.c,v 1.16.14.5 2011/04/29 08:26:30 matt Exp $	*/
 
 /*-
@@ -32,5 +32,5 @@
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 	
-__KERNEL_RCSID(0, "$NetBSD: sig_machdep.c,v 1.16.14.4 2010/02/22 20:17:09 matt Exp $"); 
+__KERNEL_RCSID(0, "$NetBSD: sig_machdep.c,v 1.16.14.5 2011/04/29 08:26:30 matt Exp $"); 
 
 #include "opt_cputype.h"
@@ -41,5 +41,4 @@
 #include <sys/kernel.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/signal.h>
 #include <sys/signalvar.h>
@@ -56,6 +55,6 @@
 getframe(struct lwp *l, int sig, int *onstack)
 {
-	struct proc *p = l->l_proc;
-	struct trapframe *tf = l->l_md.md_utf;
+	struct proc * const p = l->l_proc;
+	struct trapframe * const tf = l->l_md.md_utf;
  
 	/* Do we need to jump onto the signal stack? */
@@ -64,7 +63,6 @@
 	if (*onstack)
 		return (char *)l->l_sigstk.ss_sp + l->l_sigstk.ss_size;
-	else
-		return (void *)(intptr_t)tf->tf_regs[_R_SP];
-}		
+	return (void *)(intptr_t)tf->tf_regs[_R_SP];
+}
 
 struct sigframe_siginfo {
@@ -79,42 +77,27 @@
 sendsig_siginfo(const ksiginfo_t *ksi, const sigset_t *mask)
 {
-	struct lwp *l = curlwp;
-	struct proc *p = l->l_proc;
-	struct sigacts *ps = p->p_sigacts;
-	struct trapframe *tf = l->l_md.md_utf;
+	struct lwp * const l = curlwp;
+	struct proc * const p = l->l_proc;
+	struct sigacts * const sa = p->p_sigacts;
+	struct trapframe * const tf = l->l_md.md_utf;
 	int onstack, error;
-	int sig = ksi->ksi_signo;
-	struct sigframe_siginfo *fp = getframe(l, sig, &onstack);
-	ucontext_t uc;
-	size_t ucsz;
-	sig_t catcher = SIGACTION(p, sig).sa_handler;
+	const int signo = ksi->ksi_signo;
+	struct sigframe_siginfo *sf = getframe(l, signo, &onstack);
+	struct sigframe_siginfo ksf;
+	const sig_t catcher = SIGACTION(p, signo).sa_handler;
 
-	fp--;
+	sf--;
 
-        /* Build stack frame for signal trampoline. */
-        switch (ps->sa_sigdesc[sig].sd_vers) {
-        case 0:         /* handled by sendsig_sigcontext */
-        case 1:         /* handled by sendsig_sigcontext */
-        default:        /* unknown version */
-                printf("sendsig_siginfo: bad version %d\n",
-                    ps->sa_sigdesc[sig].sd_vers);
-                sigexit(l, SIGILL);
-        case 2:
-                break;
-        }
+	ksf.sf_si._info = ksi->ksi_info;
+	ksf.sf_uc.uc_flags = _UC_SIGMASK
+	    | (l->l_sigstk.ss_flags & SS_ONSTACK ? _UC_SETSTACK : _UC_CLRSTACK);
+	ksf.sf_uc.uc_sigmask = *mask;
+	ksf.sf_uc.uc_link = l->l_ctxlink;
+	memset(&ksf.sf_uc.uc_stack, 0, sizeof(ksf.sf_uc.uc_stack));
+	sendsig_reset(l, signo);
 
-        uc.uc_flags = _UC_SIGMASK
-            | ((l->l_sigstk.ss_flags & SS_ONSTACK)
-            ? _UC_SETSTACK : _UC_CLRSTACK);
-        uc.uc_sigmask = *mask;
-        uc.uc_link = l->l_ctxlink;
-        memset(&uc.uc_stack, 0, sizeof(uc.uc_stack));
-        ucsz = (char *)&uc.__uc_pad - (char *)&uc;
-        sendsig_reset(l, sig);
-        mutex_exit(p->p_lock);
-        cpu_getmcontext(l, &uc.uc_mcontext, &uc.uc_flags);
-	error = copyout(&ksi->ksi_info, &fp->sf_si, sizeof(ksi->ksi_info));
-	if (error == 0)
-		error = copyout(&uc, &fp->sf_uc, ucsz);
+	mutex_exit(p->p_lock);
+	cpu_getmcontext(l, &ksf.sf_uc.uc_mcontext, &ksf.sf_uc.uc_flags);
+	error = copyout(&ksf, sf, sizeof(ksf));
 	mutex_enter(p->p_lock);
 
@@ -133,12 +116,12 @@
 	 * to the signal trampoline to bounce us back.
 	 */
-	tf->tf_regs[_R_A0] = sig;
-	tf->tf_regs[_R_A1] = (intptr_t)&fp->sf_si;
-	tf->tf_regs[_R_A2] = (intptr_t)&fp->sf_uc;
+	tf->tf_regs[_R_A0] = signo;
+	tf->tf_regs[_R_A1] = (intptr_t)&sf->sf_si;
+	tf->tf_regs[_R_A2] = (intptr_t)&sf->sf_uc;
 
 	tf->tf_regs[_R_PC] = (intptr_t)catcher;
 	tf->tf_regs[_R_T9] = (intptr_t)catcher;
-	tf->tf_regs[_R_SP] = (intptr_t)fp;
-	tf->tf_regs[_R_RA] = (intptr_t)ps->sa_sigdesc[sig].sd_tramp;
+	tf->tf_regs[_R_SP] = (intptr_t)sf;
+	tf->tf_regs[_R_RA] = (intptr_t)sa->sa_sigdesc[signo].sd_tramp;
 
 	/* Remember that we're now on the signal stack. */
@@ -150,9 +133,21 @@
 sendsig(const ksiginfo_t *ksi, const sigset_t *mask)
 {               
+	struct sigacts * const sa = curproc->p_sigacts;
+
+        /* Build stack frame for signal trampoline. */
+        switch (sa->sa_sigdesc[ksi->ksi_signo].sd_vers) {
 #ifdef COMPAT_16    
-	if (curproc->p_sigacts->sa_sigdesc[ksi->ksi_signo].sd_vers < 2)
+        case 0:         /* handled by sendsig_sigcontext */
+        case 1:         /* handled by sendsig_sigcontext */
 		sendsig_sigcontext(ksi, mask);
-	else    
-#endif  
+		break;
+#endif
+        case 2:
 		sendsig_siginfo(ksi, mask);
+                break;
+        default:        /* unknown version */
+                printf("%s: bad version %d\n", __func__,
+                    sa->sa_sigdesc[ksi->ksi_signo].sd_vers);
+                sigexit(curlwp, SIGILL);
+        }
 }       
Index: unk/src/sys/arch/mips/mips/softintr.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/softintr.c	(revision 151)
+++ 	(revision )
@@ -1,82 +1,0 @@
-/*	$NetBSD: softintr.c,v 1.7 2008/04/28 20:23:28 martin Exp $	*/
-
-/*
- * Copyright (c) 2001, 2007 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Jason R. Thorpe.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: softintr.c,v 1.7 2008/04/28 20:23:28 martin Exp $");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/intr.h>
-
-#ifdef notyet	/* __HAVE_FAST_SOFTINTS stuff */
-void
-softint_init_md(lwp_t *l, u_int level, uintptr_t *machdep)
-{
-
-	switch (level) {
-	case SOFTINT_BIO:
-		*machdep = mips_ipl_si_to_sr[IPL_SOFTBIO];
-		break;
-	case SOFTINT_NET:
-		*machdep = mips_ipl_si_to_sr[IPL_SOFTNET];
-		break;
-	case SOFTINT_SERIAL:
-		*machdep = mips_ipl_si_to_sr[IPL_SOFTSERIAL];
-		break;
-	case SOFTINT_CLOCK:
-		*machdep = mips_ipl_si_to_sr[IPL_SOFTCLOCK];
-		break;
-	default:
-		panic("softint_init_md");
-	}
-}
-
-void
-mips_softintr_dispatch(u_int32_t ipending)
-{
-	int i;
-
-	for (i = SI_NQUEUES - 1; i >= 0; i--) {
-		if ((ipending & mips_ipl_si_to_sr[i]) == 0)
-			continue;
-		/*
-		 * XXX
-		 * splhigh
-		 * save s0-s9 in curlwp's PCB
-		 * switch stack
-		 * switch curlwp
-		 * -> softint_dispatch
-		 * back to old stack
-		 * restore curlwp
-		 */
-	}
-}
-#endif
Index: /trunk/src/sys/arch/mips/mips/spl.S
===================================================================
--- /trunk/src/sys/arch/mips/mips/spl.S	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/spl.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: spl.S,v 1.1.2.6 2010/05/16 00:34:45 matt Exp $	*/
+/*	$NetBSD: spl.S,v 1.1.2.11 2011/04/29 08:26:30 matt Exp $	*/
 
 /*-
@@ -30,4 +30,5 @@
  */
 
+#include "opt_multiprocessor.h"	/* MP kernel? */
 #include "opt_cputype.h"	/* which mips CPU levels do we support? */
 
@@ -38,7 +39,13 @@
 #include <mips/cpuregs.h>
 
-RCSID("$NetBSD: spl.S,v 1.1.2.6 2010/05/16 00:34:45 matt Exp $")
+RCSID("$NetBSD: spl.S,v 1.1.2.11 2011/04/29 08:26:30 matt Exp $")
 
 #include "assym.h"
+
+#if (MIPS1 + MIPS2) > 0
+#define	NOP_L	nop
+#else
+#define	NOP_L	/* nothing */
+#endif
 
 	.data
@@ -56,4 +63,5 @@
 
 	.text
+	.set	noreorder
 /*
  * MIPS processor interrupt control
@@ -67,40 +75,51 @@
 	 * Can only use a0-a3 and v0-v1
 	 */
-	/*
-	 * disable interrupt before messing with spl, or we could be
-	 * preempted and moved to a different CPU
-	 */
+	PTR_L	a3, L_CPU(MIPS_CURLWP)
+	NOP_L					# load delay
+	INT_L	v0, CPU_INFO_CPL(a3)		# get current IPL from cpu_info
+	NOP_L					# load delay
+	sltu	v1, a1, v0			# newipl < curipl
+	bnez	v1, 1f				# yes, don't change.
+	 nop					#  branch delay
 	mfc0	v1, MIPS_COP_0_STATUS		# fetch status register
-	mtc0	zero, MIPS_COP_0_STATUS		## disable interrupts
-	COP0_SYNC
-	PTR_L	a3, L_CPU(MIPS_CURLWP)
-	INT_L	v0, CPU_INFO_CPL(a3)		# get current IPL from cpu_info
-	sltu	a2, a1, v0			# newipl < curipl
-	bnez	a2, 1f				# yes, don't change.
-	nop
+	NOP_L					# load delay
 	or	v1, MIPS_INT_MASK		# enable all interrupts
 	xor	a0, v1				# disable ipl's masked bits
-	DYNAMIC_STATUS_MASK(a0,a2)		# machine dependent masking
+	DYNAMIC_STATUS_MASK(a0,v0)		# machine dependent masking
+	mtc0	zero, MIPS_COP_0_STATUS		## disable interrupts
+	COP0_SYNC
+#ifdef MULTIPROCESSOR
+	PTR_L	a3, L_CPU(MIPS_CURLWP)		## make sure curcpu is correct
+	NOP_L					## load delay
+#endif
 	INT_S	a1, CPU_INFO_CPL(a3)		## save IPL in cpu_info
 	mtc0	a0, MIPS_COP_0_STATUS		## store back
 	COP0_SYNC
-	j	ra
-	 nop
+#ifdef PARANOIA
+	jr	ra
+	 nop					#  branch delay
+#endif /* PARANOIA */
 1:
-	mtc0	v1, MIPS_COP_0_STATUS		# restore status
-	COP0_SYNC
 #ifdef PARANOIA
 	mfc0	v1, MIPS_COP_0_STATUS
-	and	a0, v1				# a0 contains bit that MBZ
+	NOP_L					# load delay
+	and	a0, v1				# a1 contains bit that MBZ
 3:	bnez	a0, 3b				# loop forever
-	 nop
-#endif /* PARANOIA */
-	j	ra
-	 nop
+	 nop					#  branch delay
+#endif /* PARANOIA */
+	jr	ra
+	 nop					#  branch delay
 
 STATIC_LEAF(_splsw_splx)
 STATIC_XLEAF(_splsw_splx_noprof)		# does not get mcount hooks
+#ifdef PARANOIA
+	sltiu	v0, a0, IPL_HIGH+1		# v0 = a0 <= IPL_HIGH
+98:	beqz	v0, 98b
+	 nop
+#endif
 	PTR_L	a3, L_CPU(MIPS_CURLWP)		# get cpu_info
+	NOP_L					# load delay
 	INT_L	a2, CPU_INFO_CPL(a3)		# get IPL from cpu_info
+	NOP_L					# load delay
 	beq	a0, a2, 2f			# if same, nothing to do
 	 sync
@@ -108,8 +127,6 @@
 	sltu	v0, a0, a2			# v0 = a0 < a2
 99:	beqz	v0, 99b				# loop forever if false
-	 nop
-#endif /* PARANOIA */
-	#move	a1, zero			# avoid lookup on splx(IPL_NONE)
-	#beq	a0, zero, 1f			# skip fetch
+	 nop					#  branch delay
+#endif /* PARANOIA */
 	PTR_LA	v1, _C_LABEL(ipl_sr_map)	# get address of table
 	sll	a2, a0, INT_SCALESHIFT		# convert IPL to array offset
@@ -118,4 +135,5 @@
 1:
 	mfc0	v1, MIPS_COP_0_STATUS		# fetch status register
+	NOP_L					# load delay
 	or	v1, MIPS_INT_MASK		# set all INT bits
 	xor	v1, a1				# clear any bits for this IPL
@@ -127,6 +145,6 @@
 	COP0_SYNC
 #ifdef PARANOIA
-	j	ra
-	 nop
+	jr	ra
+	 nop					#  branch delay
 #endif /* PARANOIA */
 2:
@@ -140,20 +158,19 @@
 	xor	a1, MIPS_INT_MASK
 3:	bne	a1, v1, 3b
-	 nop
-#endif /* PARANOIA */
-	j	ra
-	 nop
+	 nop					#  branch delay
+#endif /* PARANOIA */
+	jr	ra
+	 nop					#  branch delay
 END(_splsw_splx)
 
 STATIC_LEAF(_splsw_spl0)
 	INT_L	v1, _C_LABEL(ipl_sr_map) + 4*IPL_NONE
+	PTR_L	a3, L_CPU(MIPS_CURLWP)
 	xor	v1, MIPS_INT_MASK | MIPS_SR_INT_IE # invert and or in IE
-	PTR_L	a3, L_CPU(MIPS_CURLWP)
 	mtc0	zero, MIPS_COP_0_CAUSE		# clear SOFT_INT bits
 	COP0_SYNC
-	mfc0	v0, MIPS_COP_0_STATUS
-	nop
-	nop
-	or	v0, v1
+	mfc0	a0, MIPS_COP_0_STATUS
+	NOP_L					# load delay
+	or	v0, a0, v1
 	DYNAMIC_STATUS_MASK(v0,t0)		# machine dependent masking
 	mtc0	zero, MIPS_COP_0_STATUS		## disable interrupts
@@ -165,7 +182,5 @@
 #endif
 	mtc0	v0, MIPS_COP_0_STATUS		## enable all sources
-	COP0_SYNC
-	j	ra
-	nop
+	JR_HB_RA				# return (clear hazards)
 END(_splsw_spl0)
 
@@ -174,15 +189,11 @@
 	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts (2 cycles)
 	COP0_SYNC
-	nop
-	nop
 	mfc0	v0, MIPS_COP_0_CAUSE		# fetch cause register
-	nop
+	NOP_L					# load delay
 	or	v0, v0, a0			# set soft intr. bits
 	mtc0	v0, MIPS_COP_0_CAUSE		# store back
 	COP0_SYNC
 	mtc0	v1, MIPS_COP_0_STATUS		# enable interrupts
-	COP0_SYNC
-	j	ra
-	nop
+	JR_HB_RA				# return (clear hazards)
 END(_splsw_setsoftintr)
 
@@ -191,6 +202,4 @@
 	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts (2 cycles)
 	COP0_SYNC
-	nop
-	nop
 	mfc0	v0, MIPS_COP_0_CAUSE		# fetch cause register
 	nor	a0, zero, a0			# bitwise inverse of A0
@@ -199,7 +208,5 @@
 	COP0_SYNC
 	mtc0	v1, MIPS_COP_0_STATUS		# enable interrupts
-	COP0_SYNC
-	j	ra
-	nop
+	JR_HB_RA				# return (clear hazards)
 END(_splsw_clrsoftintr)
 
@@ -209,89 +216,106 @@
 	sll	a2, a0, INT_SCALESHIFT
 	PTR_ADDU v1, a2
-	INT_L	a0, (v1)
-	b	_splraise
-	 nop
+	b	_splraise
+	 INT_L	a0, (v1)
 END(_splsw_splraise)
 
 STATIC_LEAF(_splsw_splhigh)
 STATIC_XLEAF(_splsw_splhigh_noprof)
-	/*
-	 * disable interrupt before messing with spl, or we could be
-	 * preempted and moved to a different CPU
-	 */
+	PTR_L	a3, L_CPU(MIPS_CURLWP)
+	NOP_L					# load delay
+	INT_L	v0, CPU_INFO_CPL(a3)		# get current IPL from cpu_info
+	li	a1, IPL_HIGH			# 
+	beq	v0, a1, 1f			# don't do anything if IPL_HIGH
+	 nop					# branch delay
 	mfc0	v1, MIPS_COP_0_STATUS		# fetch status register
+	NOP_L					# load delay
 	and	a0, v1, MIPS_INT_MASK		# select all interrupts
 	xor	a0, v1				# clear all interrupts
-	DYNAMIC_STATUS_MASK(a0,a1)		# machine dependent masking
+	DYNAMIC_STATUS_MASK(a0,a2)		# machine dependent masking
 	mtc0	a0, MIPS_COP_0_STATUS		## store back
 	COP0_SYNC
-	PTR_L	a3, L_CPU(MIPS_CURLWP)
-	INT_L	v0, CPU_INFO_CPL(a3)		# get current IPL from cpu_info
-	li	a1, IPL_HIGH			# 
+#ifdef MULTIPROCESSOR
+	PTR_L	a3, L_CPU(MIPS_CURLWP)		## make sure curcpu is correct
+	NOP_L					## load delay
+#endif
 	INT_S	a1, CPU_INFO_CPL(a3)		## save IPL in cpu_info
-	j	ra				## return
-	 nop
+#ifdef PARANOIA
+	jr	ra				## return
+	 nop					#  branch delay
+#endif /* PARANOIA */
+1:
+#ifdef PARANOIA
+	mfc0	v1, MIPS_COP_0_STATUS		# fetch status register
+	and	v1, MIPS_INT_MASK		# any int bits set?
+2:	bnez	v1, 2b				# loop forever.
+	 nop					# branch delay
+#endif /* PARANOIA */
+	jr	ra				## return
+	 nop					# branch delay
 END(_splsw_splhigh)
 
+	.p2align 4
 STATIC_LEAF(_splsw_splddb)
 	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_DDB
-	li	a1, IPL_DDB
-	b	_splraise
-	 nop
+	b	_splraise
+	 li	a1, IPL_DDB
+	nop
 END(_splsw_splddb)
 
 STATIC_LEAF(_splsw_splsched)
 	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_SCHED
-	li	a1, IPL_SCHED
-	b	_splraise
-	 nop
+	b	_splraise
+	 li	a1, IPL_SCHED
+	nop
 END(_splsw_splsched)
 
 STATIC_LEAF(_splsw_splvm)
 	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_VM
-	li	a1, IPL_VM
-	b	_splraise
+	b	_splraise
+	 li	a1, IPL_VM
+	nop
 END(_splsw_splvm)
 
 STATIC_LEAF(_splsw_splsoftserial)
 	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_SOFTSERIAL
-	li	a1, IPL_SOFTSERIAL
-	b	_splraise
-	 nop
+	b	_splraise
+	 li	a1, IPL_SOFTSERIAL
+	nop
 END(_splsw_splsoftserial)
 
 STATIC_LEAF(_splsw_splsoftnet)
 	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_SOFTNET
-	li	a1, IPL_SOFTNET
-	b	_splraise
-	 nop
+	b	_splraise
+	 li	a1, IPL_SOFTNET
+	nop
 END(_splsw_splsoftnet)
 
 STATIC_LEAF(_splsw_splsoftbio)
 	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_SOFTBIO
-	li	a1, IPL_SOFTBIO
-	b	_splraise
-	 nop
+	b	_splraise
+	 li	a1, IPL_SOFTBIO
+	nop
 END(_splsw_splsoftbio)
 
 STATIC_LEAF(_splsw_splsoftclock)
 	INT_L	a0, _C_LABEL(ipl_sr_map) + 4*IPL_SOFTCLOCK
-	li	a1, IPL_SOFTCLOCK
-	b	_splraise
-	 nop
+	b	_splraise
+	 li	a1, IPL_SOFTCLOCK
+	nop
 END(_splsw_splsoftclock)
 
 STATIC_LEAF(_splsw_splintr)
 	mfc0	ta1, MIPS_COP_0_CAUSE		# get active interrupts
-
+	NOP_L					# load delay
 						# restrict to hard int bits
 	and	v1, ta1, MIPS_HARD_INT_MASK	# now have pending interrupts
 	li	v0, IPL_NONE			#  return IPL_NONE
 	beq	v1, zero, 2f			# quick exit if nothing pending
-	 nop
+	 nop					#  branch delay
 
 	li	v0, IPL_VM			# start at IPL_VM
 	PTR_LA	ta3, _C_LABEL(ipl_sr_map) + 4*IPL_VM
 	INT_L	ta2, -4(ta3)			# load mask for IPL_SOFTSERIAL
+	NOP_L					# load delay
 	xor	ta2, MIPS_INT_MASK		# invert
 	and	v1, ta2				# apply to pending bits
@@ -299,17 +323,18 @@
 1:
 	INT_L	ta2, (ta3)			# get SR bits for ipl in v0
+	NOP_L					# load delay
 	xor	ta2, MIPS_INT_MASK		# invert
 	and	ta2, v1				# any match to pending intrs?
 	beq	ta2, zero, 2f			#  no, return ipl
+	 nop					#  branch delay
 
 	PTR_ADDU ta3, 1 << INT_SCALESHIFT	# point to next entry
 	addiu	v0, 1				#  increase ipl by 1
-	move	v1, ta2				# whittle down pending intrs
 	b	1b				# and check it
+	 move	v1, ta2				# whittle down pending intrs
 
 2:
-	INT_S	v1, (a0)			# return a new pending mask
-	j	ra
-	#nop
+	jr	ra
+	 INT_S	v1, (a0)			# return a new pending mask
 END(_splsw_splintr)
 
@@ -317,4 +342,5 @@
 #ifdef PARANOIA
 	PTR_L	t0, L_CPU(MIPS_CURLWP)
+	NOP_L					# load delay
 	INT_L	t1, CPU_INFO_CPL(t0)		# get current priority level
 
@@ -326,10 +352,11 @@
 	PTR_ADDU t2, t1
 	INT_L	t3, (t2)			# load value
+	NOP_L					# load delay
 	xor	t3, MIPS_INT_MASK		# invert
 1:	bne	t0, t3, 1b			# loop forever if not equal
-	 nop
-#endif /* PARANOIA */
-	j	ra
-	 nop
+	 nop					#  branch delay
+#endif /* PARANOIA */
+	jr	ra
+	 nop					#  branch delay
 END(_splsw_splcheck)
 
Index: /trunk/src/sys/arch/mips/mips/spl_stubs.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/spl_stubs.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/spl_stubs.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: spl_stubs.c,v 1.1.2.2 2010/03/01 19:26:01 matt Exp $ */
+/* $NetBSD: spl_stubs.c,v 1.1.2.3 2010/12/22 06:13:36 matt Exp $ */
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -31,5 +31,5 @@
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: spl_stubs.c,v 1.1.2.2 2010/03/01 19:26:01 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spl_stubs.c,v 1.1.2.3 2010/12/22 06:13:36 matt Exp $");
 
 #define __INTR_PRIVATE
@@ -153,45 +153,2 @@
 	(*mips_splsw.splsw_splcheck)();
 }
-
-void
-fixup_splcalls(void)
-{
-	extern uint32_t _ftext[];
-	extern uint32_t _etext[];
-
-#define	splfixupinfo(x)	{ fixup_addr2offset(x), \
-			  fixup_addr2offset(mips_splsw.splsw_##x) }
-	struct mips_jump_fixup_info fixups[] = {
-		splfixupinfo(splhigh),
-		splfixupinfo(splhigh_noprof),
-		splfixupinfo(splsched),
-		splfixupinfo(splvm),
-		splfixupinfo(splsoftserial),
-		splfixupinfo(splsoftnet),
-		splfixupinfo(splsoftbio),
-		splfixupinfo(splsoftclock),
-		splfixupinfo(spl0),
-		splfixupinfo(splx),
-		splfixupinfo(splx_noprof),
-		splfixupinfo(splraise),
-		splfixupinfo(splintr),
-		splfixupinfo(_setsoftintr),
-		splfixupinfo(_clrsoftintr),
-		splfixupinfo(splcheck),
-	};
-
-	/*
-	 * [bubble] sort fixups from lowest stub to highest stub.
-	 */
-	for (size_t i = 0; i < __arraycount(fixups) - 1; i++) {
-		for (size_t j = i + 1; j < __arraycount(fixups); j++) {
-			if (fixups[i].jfi_stub > fixups[j].jfi_stub) {
-				struct mips_jump_fixup_info tmp = fixups[i];
-				fixups[i] = fixups[j];
-				fixups[j] = tmp;
-			}
-		}
-	}
-
-	mips_fixup_stubs(_ftext, _etext, fixups, __arraycount(fixups));
-}
Index: /trunk/src/sys/arch/mips/mips/svr4_machdep.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/svr4_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/svr4_machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: svr4_machdep.c,v 1.11 2008/04/28 20:23:28 martin Exp $ */
+/*	$NetBSD: svr4_machdep.c,v 1.11.14.1 2011/04/29 08:26:30 matt Exp $ */
 
 /*-
@@ -37,5 +37,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_machdep.c,v 1.11 2008/04/28 20:23:28 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_machdep.c,v 1.11.14.1 2011/04/29 08:26:30 matt Exp $");
 
 #include <sys/param.h>
@@ -43,5 +43,4 @@
 #include <sys/proc.h>
 #include <sys/exec.h>
-#include <sys/user.h>
 #include <sys/kernel.h>
 #include <sys/signal.h>
@@ -71,8 +70,5 @@
  */
 int
-svr4_setmcontext(l, mc, flags)
-	struct lwp *l;
-	svr4_mcontext_t *mc;
-	unsigned long flags;
+svr4_setmcontext(struct lwp *l, svr4_mcontext_t *mc, unsigned long flags)
 {
 	printf("Warning: svr4_setmcontext() called\n");
Index: /trunk/src/sys/arch/mips/mips/sys_machdep.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/sys_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/sys_machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sys_machdep.c,v 1.33.28.1 2010/05/15 20:27:48 matt Exp $	*/
+/*	$NetBSD: sys_machdep.c,v 1.33.28.2 2011/04/29 08:26:30 matt Exp $	*/
 
 /*
@@ -36,5 +36,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.33.28.1 2010/05/15 20:27:48 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_machdep.c,v 1.33.28.2 2011/04/29 08:26:30 matt Exp $");
 
 #include <sys/param.h>
@@ -85,8 +85,4 @@
 			return (error);
 		error = mips_user_cachectl(p, ccua.va, ccua.nbytes, ccua.ctl);
-		break;
-	}
-	case MIPS_TINFOSET: {
-		curlwp->l_md.md_tinfo = (intptr_t)SCARG(uap, parms);
 		break;
 	}
Index: /trunk/src/sys/arch/mips/mips/syscall.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/syscall.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/syscall.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: syscall.c,v 1.37.12.12 2010/02/22 20:17:09 matt Exp $	*/
+/*	$NetBSD: syscall.c,v 1.37.12.15 2011/04/29 08:26:30 matt Exp $	*/
 
 /*-
@@ -31,4 +31,5 @@
 
 /*
+ * Copyright (c) 1988 University of Utah.
  * Copyright (c) 1992, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -66,47 +67,8 @@
  *	@(#)trap.c	8.5 (Berkeley) 1/11/94
  */
-/*
- * Copyright (c) 1988 University of Utah.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Utah Hdr: trap.c 1.32 91/04/06
- *
- *	@(#)trap.c	8.5 (Berkeley) 1/11/94
- */
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.37.12.12 2010/02/22 20:17:09 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.37.12.15 2011/04/29 08:26:30 matt Exp $");
 
 #if defined(_KERNEL_OPT)
@@ -118,5 +80,4 @@
 #include <sys/endian.h>
 #include <sys/proc.h>
-#include <sys/user.h>
 #include <sys/signal.h>
 #include <sys/syscall.h>
@@ -145,6 +106,4 @@
 static void EMULNAME(syscall)(struct lwp *, uint32_t, uint32_t, vaddr_t);
 
-register_t MachEmulateBranch(struct trapframe *, register_t, u_int, int);
-
 void
 EMULNAME(syscall_intern)(struct proc *p)
@@ -163,5 +122,5 @@
 
 void
-EMULNAME(syscall)(struct lwp *l, u_int status, u_int cause, vaddr_t opc)
+EMULNAME(syscall)(struct lwp *l, u_int status, u_int cause, vaddr_t pc)
 {
 	struct proc *p = l->l_proc;
@@ -178,5 +137,7 @@
 #if defined(__mips_o32)
 	const int abi = _MIPS_BSD_API_O32;
-	KASSERTMSG(p->p_md.md_abi != abi, ("pid %d(%p): md_abi(%d) != abi(%d)", p->p_pid, p, p->p_md.md_abi, abi));
+	KASSERTMSG(p->p_md.md_abi == abi,
+	    ("pid %d(%p): md_abi(%d) != abi(%d)",
+	    p->p_pid, p, p->p_md.md_abi, abi));
 	size_t nregs = 4;
 #else
@@ -191,7 +152,7 @@
 
 	if (cause & MIPS_CR_BR_DELAY)
-		reg->r_regs[_R_PC] = MachEmulateBranch(tf, opc, 0, 0);
+		reg->r_regs[_R_PC] = mips_emul_branch(tf, pc, 0, false);
 	else
-		reg->r_regs[_R_PC] = opc + sizeof(uint32_t);
+		reg->r_regs[_R_PC] = pc + sizeof(uint32_t);
 
 	callp = p->p_emul->e_sysent;
@@ -401,5 +362,5 @@
 	case ERESTART:
 		reg->r_regs[_R_V0] = saved_v0; /* restore syscall code */
-		reg->r_regs[_R_PC] = opc;
+		reg->r_regs[_R_PC] = pc;
 		break;
 	case EJUSTRETURN:
@@ -424,4 +385,7 @@
 		trace_exit(code, &reg->r_regs[_R_V0], error);
 
+	KASSERT(l->l_blcnt == 0);
+	KASSERT(curcpu()->ci_biglock_count == 0);
+
 	userret(l);
 }
Index: /trunk/src/sys/arch/mips/mips/trap.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/trap.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/trap.c	(revision 152)
@@ -1,5 +1,6 @@
-/*	$NetBSD: trap.c,v 1.217.12.26 2010/05/06 05:31:49 matt Exp $	*/
+/*	trap.c,v 1.217.12.35 2011/04/29 08:26:30 matt Exp	*/
 
 /*
+ * Copyright (c) 1988 University of Utah.
  * Copyright (c) 1992, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -37,60 +38,22 @@
  *	@(#)trap.c	8.5 (Berkeley) 1/11/94
  */
-/*
- * Copyright (c) 1988 University of Utah.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- 
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Utah Hdr: trap.c 1.32 91/04/06
- *
- *	@(#)trap.c	8.5 (Berkeley) 1/11/94
- */
-
-#include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.217.12.26 2010/05/06 05:31:49 matt Exp $");
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "trap.c,v 1.217.12.35 2011/04/29 08:26:30 matt Exp");
 
 #include "opt_cputype.h"	/* which mips CPU levels do we support? */
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
+#include "opt_multiprocessor.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
+#include <sys/cpu.h>
 #include <sys/proc.h>
+#include <sys/user.h>
 #include <sys/ras.h>
 #include <sys/signalvar.h>
 #include <sys/syscall.h>
-#include <sys/user.h>
 #include <sys/buf.h>
 #include <sys/ktrace.h>
@@ -105,10 +68,10 @@
 #include <mips/mips_opcode.h>
 
-#include <uvm/uvm_extern.h>
-
-#include <machine/cpu.h>
+#include <uvm/uvm.h>
+
 #include <mips/trap.h>
 #include <mips/reg.h>
 #include <mips/regnum.h>			/* symbolic register indices */
+#include <mips/pcb.h>
 #include <machine/pte.h>
 #include <mips/psl.h>
@@ -131,5 +94,5 @@
 //#define TRAP_DEBUG_ALL
 
-const char * const trap_type[] = {
+const char * const trap_names[] = {
 	"external interrupt",
 	"TLB modification",
@@ -166,10 +129,6 @@
 };
 
-void trap(unsigned int, unsigned int, vaddr_t, vaddr_t, struct trapframe *);
+void trap(uint32_t, uint32_t, vaddr_t, vaddr_t, struct trapframe *);
 void ast(void);
-
-vaddr_t MachEmulateBranch(struct trapframe *, vaddr_t, unsigned int, int);	/* XXX */
-void MachEmulateInst(uint32_t, uint32_t, vaddr_t, struct trapframe *);	/* XXX */
-void MachFPTrap(uint32_t, uint32_t, vaddr_t, struct trapframe *);	/* XXX */
 
 /*
@@ -203,5 +162,5 @@
  */
 void
-trap(unsigned int status, unsigned int cause, vaddr_t vaddr, vaddr_t opc,
+trap(uint32_t status, uint32_t cause, vaddr_t vaddr, vaddr_t pc,
     struct trapframe *tf)
 {
@@ -210,7 +169,10 @@
 	struct proc * const p = curproc;
 	struct trapframe * const utf = l->l_md.md_utf;
+	struct pcb * const pcb = lwp_getpcb(l);
 	vm_prot_t ftype;
 	ksiginfo_t ksi;
 	extern void fswintrberr(void);
+	void *onfault;
+	int rv;
 #if 0
 	struct cpu_info *ci;
@@ -263,10 +225,24 @@
 	dopanic:
 		(void)splhigh();
-		printf("pid %d(%s): ", p->p_pid, p->p_comm);
-		printf("trap: %s in %s mode\n",
-			trap_type[TRAPTYPE(cause)],
+
+		/*
+		 * use snprintf to allow a single, idempotent, readable printf
+		 */
+		char strbuf[256], *str = strbuf;
+		int n, sz = sizeof(strbuf);
+
+		n = snprintf(str, sz, "pid %d(%s): ", p->p_pid, p->p_comm);
+		sz -= n; 
+		str += n;
+		n = snprintf(str, sz, "trap: cpu%d, %s in %s mode\n",
+			cpu_number(), trap_names[TRAPTYPE(cause)],
 			USERMODE(status) ? "user" : "kernel");
-		printf("status=0x%x, cause=0x%x, epc=%#" PRIxVADDR
-			", vaddr=%#" PRIxVADDR, status, cause, opc, vaddr);
+		sz -= n; 
+		str += n;
+		n = snprintf(str, sz, "status=0x%x, cause=0x%x, epc=%#"
+			PRIxVADDR ", vaddr=%#" PRIxVADDR "\n",
+			status, cause, pc, vaddr);
+		sz -= n; 
+		str += n;
 #ifdef TSAR
 		if (vcache_ptype) {
@@ -277,12 +253,22 @@
 		if (USERMODE(status)) {
 			KASSERT(tf == utf);
-			printf(" frame=%p usp=%#" PRIxREGISTER
+			n = snprintf(str, sz, "frame=%p usp=%#" PRIxREGISTER
 			    " ra=%#" PRIxREGISTER "\n",
-			   tf, tf->tf_regs[_R_SP], tf->tf_regs[_R_RA]);
+			    tf, tf->tf_regs[_R_SP], tf->tf_regs[_R_RA]);
+			sz -= n; 
+			str += n;
 		} else {
-			printf(" tf=%p ksp=%p ra=%#" PRIxREGISTER "\n",
-			   tf, tf+1, tf->tf_regs[_R_RA]);
-		}
-			
+			n = snprintf(str, sz, "tf=%p ksp=%p ra=%#"
+			    PRIxREGISTER " ppl=%#x\n",
+			    tf, tf+1, tf->tf_regs[_R_RA],
+			    tf->tf_ppl);
+			sz -= n; 
+			str += n;
+		}
+		printf("%s", strbuf);
+
+		if ((TRAPTYPE(cause) == 6) || (TRAPTYPE(cause) == 7))
+			(void)(*mips_locoresw.lsw_bus_error)(cause);
+
 #if defined(DDB)
 		kdb_trap(type, &tf->tf_registers);
@@ -354,6 +340,5 @@
 		}
 		/*FALLTHROUGH*/
-	case T_TLB_MOD+T_USER:
-	    {
+	case T_TLB_MOD+T_USER: {
 		pt_entry_t *pte;
 		uint32_t pt_entry;
@@ -396,5 +381,5 @@
 			userret(l);
 		return; /* GEN */
-	    }
+	}
 	case T_TLB_LD_MISS:
 	case T_TLB_ST_MISS:
@@ -406,9 +391,10 @@
 		 * through the copyin/copyout routines.
 		 */
-		if (l->l_addr->u_pcb.pcb_onfault == NULL)
+		if (pcb->pcb_onfault == NULL) {
 			goto dopanic;
+		}
 		/* check for fuswintr() or suswintr() getting a page fault */
-		if (l->l_addr->u_pcb.pcb_onfault == (void *)fswintrberr) {
-			tf->tf_regs[_R_PC] = (intptr_t)l->l_addr->u_pcb.pcb_onfault;
+		if (pcb->pcb_onfault == (void *)fswintrberr) {
+			tf->tf_regs[_R_PC] = (intptr_t)pcb->pcb_onfault;
 			return; /* KERN */
 		}
@@ -576,14 +562,60 @@
 		}
 #endif /* TSAR */
-	pagefault:
-	    {
-		vaddr_t va;
-		struct vmspace *vm;
-		struct vm_map *map;
-		int rv;
-
-		vm = p->p_vmspace;
-		map = &vm->vm_map;
-		va = trunc_page(vaddr);
+	pagefault: {
+		const vaddr_t va = trunc_page(vaddr);
+		struct vmspace * const vm = p->p_vmspace;
+		struct vm_map * const map = &vm->vm_map;
+#ifdef PMAP_FAULTINFO
+		struct pcb_faultinfo * const pfi = &pcb->pcb_faultinfo;
+#endif
+
+#ifndef TSAR
+		kpreempt_disable();
+#ifdef _LP64
+		/*
+		 * If the pmap has been activated and we allocated the segtab
+		 * for the low 4GB, seg0tab may still be NULL.  We can't
+		 * really fix this in pmap_enter (we can only update the local
+		 * cpu's cpu_info but not other cpu's) so we need to detect
+		 * and fix this here.
+		 */
+		struct cpu_info * const ci = curcpu();
+		if ((va >> XSEGSHIFT) == 0 &&
+		    __predict_false(ci->ci_pmap_seg0tab == NULL
+				&& ci->ci_pmap_segtab->seg_seg[0] != NULL)) {
+			ci->ci_pmap_seg0tab = ci->ci_pmap_segtab->seg_seg[0];
+			kpreempt_enable();
+			if (type & T_USER) {
+				userret(l);
+			}
+			return; /* GEN */
+		}
+#endif
+		KASSERT(va < 0 || curcpu()->ci_pmap_asid_cur != 0);
+		pmap_tlb_asid_check();
+		kpreempt_enable();
+#endif /* !TSAR */
+
+#ifdef PMAP_FAULTINFO
+		if (p->p_pid == pfi->pfi_lastpid && va == pfi->pfi_faultaddr) {
+			if (++pfi->pfi_repeats > 1) {
+				register_t tlb_hi;
+				pt_entry_t *pte = pfi->pfi_faultpte;
+				__asm("dmfc0 %0,$%1" : "=r"(tlb_hi) : "n"(MIPS_COP_0_TLB_HI));
+				printf("trap: fault #%u (%s/%s) for %#"PRIxVADDR" (%#"PRIxVADDR") at pc %#"PRIxVADDR" curpid=%u/%u pte@%p=%#x)\n", pfi->pfi_repeats, trap_names[TRAPTYPE(cause)], trap_names[pfi->pfi_faulttype], va, vaddr, pc, map->pmap->pm_pai[0].pai_asid, (uint8_t)tlb_hi, pte, pte ? pte->pt_entry : 0);
+				if (pfi->pfi_repeats >= 4) {
+					cpu_Debugger();
+				} else {
+					pfi->pfi_faulttype = TRAPTYPE(cause);       
+				}
+			}
+		} else {
+			pfi->pfi_lastpid = p->p_pid;
+			pfi->pfi_faultaddr = va;
+			pfi->pfi_repeats = 0;
+			pfi->pfi_faultpte = NULL;
+			pfi->pfi_faulttype = TRAPTYPE(cause);
+		}
+#endif /* PMAP_FAULTINFO */
 
 		if ((l->l_flag & LW_SA) && (~l->l_pflag & LP_SA_NOBLOCK)) {
@@ -595,13 +627,17 @@
 		printf("uvm_fault(%p)\n", map);
 #endif
+		onfault = pcb->pcb_onfault;
+		pcb->pcb_onfault = NULL;
 		if (p->p_emul->e_fault)
 			rv = (*p->p_emul->e_fault)(p, va, ftype);
 		else
 			rv = uvm_fault(map, va, ftype);
+		pcb->pcb_onfault = onfault;
+
 #ifdef VMFAULT_TRACE
 		printf(
 		    "uvm_fault(%p (pmap %p), %#"PRIxVADDR
 		    " (%"PRIxVADDR"), %d) -> %d at pc %#"PRIxVADDR"\n",
-		    map, vm->vm_map.pmap, va, vaddr, ftype, rv, opc);
+		    map, vm->vm_map.pmap, va, vaddr, ftype, rv, pc);
 #endif
 		/*
@@ -620,4 +656,11 @@
 		l->l_pflag &= ~LP_SA_PAGEFAULT;
 		if (rv == 0) {
+#ifdef PMAP_FAULTINFO
+			if (pfi->pfi_repeats == 0) {
+				pfi->pfi_faultpte =
+				    pmap_pte_lookup(map->pmap, va);
+			}
+			KASSERT(((pt_entry_t *)(pfi->pfi_faultpte))->pt_entry);
+#endif
 			if (type & T_USER) {
 				userret(l);
@@ -646,20 +689,19 @@
 		ksi.ksi_addr = (void *)vaddr;
 		break; /* SIGNAL */
-	    }
-	kernelfault: ;
-	    {
-		vaddr_t va;
-		int rv;
-
-		va = trunc_page(vaddr);
+	}
+	kernelfault: {
+		onfault = pcb->pcb_onfault;
+
 #ifdef TRAP_DEBUG
 		printf("uvm_fault(kernel_map) on %p\n",
 		    l->l_addr->u_pcb.pcb_onfault);
 #endif
-		rv = uvm_fault(kernel_map, va, ftype);
+		pcb->pcb_onfault = NULL;
+		rv = uvm_fault(kernel_map, trunc_page(vaddr), ftype);
+		pcb->pcb_onfault = onfault;
 		if (rv == 0)
 			return; /* KERN */
-		/*FALLTHROUGH*/
-	    }
+		goto copyfault;
+	}
 	case T_ADDR_ERR_LD:	/* misaligned access */
 	case T_ADDR_ERR_ST:	/* misaligned access */
@@ -667,8 +709,12 @@
 	case T_BUS_ERR_LD_ST:	/* BERR asserted to CPU */
 #endif
+		onfault = pcb->pcb_onfault;
+		rv = EFAULT;
 	copyfault:
-		if (l == NULL || l->l_addr->u_pcb.pcb_onfault == NULL)
+		if (onfault == NULL) {
 			goto dopanic;
-		tf->tf_regs[_R_PC] = (intptr_t)l->l_addr->u_pcb.pcb_onfault;
+		}
+		tf->tf_regs[_R_PC] = (intptr_t)onfault;
+		tf->tf_regs[_R_V0] = rv;
 		return; /* KERN */
 
@@ -697,4 +743,5 @@
 		break; /* SIGNAL */
 
+	case T_WATCH:
 	case T_BREAK:
 #if defined(DDB)
@@ -720,5 +767,5 @@
 			if (!kgdb_trap(type, regs))
 				printf("kgdb: ignored %s\n",
-				       trap_type[TRAPTYPE(cause)]);
+				       trap_names[TRAPTYPE(cause)]);
 			else
 				tf->tf_regs[_R_PC] = regs->r_regs[_R_PC];
@@ -729,15 +776,12 @@
 		goto dopanic;
 #endif
-	case T_BREAK+T_USER:
-	    {
-		vaddr_t va;
+	case T_BREAK+T_USER: {
 		uint32_t instr;
-		int rv;
 
 		/* compute address of break instruction */
-		va = (cause & MIPS_CR_BR_DELAY) ? opc + sizeof(int) : opc;
+		vaddr_t va = pc + (cause & MIPS_CR_BR_DELAY ? sizeof(int) : 0);
 
 		/* read break instruction */
-		instr = fuiword((void *)va);
+		instr = ufetch_uint32((void *)va);
 
 		if (l->l_md.md_ss_addr != va || instr != MIPS_BREAK_SSTEP) {
@@ -777,15 +821,15 @@
 		ksi.ksi_code = TRAP_BRKPT;
 		break; /* SIGNAL */
-	    }
+	}
 	case T_RES_INST+T_USER:
 	case T_COP_UNUSABLE+T_USER:
 #if !defined(FPEMUL) && !defined(NOFPU)
 		if ((cause & MIPS_CR_COP_ERR) == 0x10000000) {
-			fpuload_lwp(l);          	/* load FPA */
+			fpu_load();          	/* load FPA */
 			l->l_md.md_flags |= MDP_FPUSED;
 		} else
 #endif
 		{
-			MachEmulateInst(status, cause, opc, utf);
+			mips_emul_inst(status, cause, pc, utf);
 		}
 		userret(l);
@@ -793,7 +837,8 @@
 	case T_FPE+T_USER:
 #if defined(FPEMUL)
-		MachEmulateInst(status, cause, opc, utf);
+		mips_emul_inst(status, cause, pc, utf);
 #elif !defined(NOFPU)
-		MachFPTrap(status, cause, opc, utf);
+		utf->tf_regs[_R_CAUSE] = cause;
+		mips_fpu_trap(pc, utf);
 #endif
 		userret(l);
@@ -803,5 +848,5 @@
 		ksi.ksi_trap = type & ~T_USER;
 		ksi.ksi_signo = SIGFPE;
-		ksi.ksi_addr = (void *)(intptr_t)opc /*utf->tf_regs[_R_PC]*/;
+		ksi.ksi_addr = (void *)(intptr_t)pc /*utf->tf_regs[_R_PC]*/;
 		ksi.ksi_code = FPE_FLTOVF; /* XXX */
 		break; /* SIGNAL */
@@ -810,7 +855,7 @@
 	utf->tf_regs[_R_BADVADDR] = vaddr;
 #if defined(DEBUG)
-	printf("trap: pid %d(%s): sig %d: cause=%#x epc=%#"PRIxREGISTER
+	printf("trap: cpu%d, pid %d(%s): sig %d: cause=%#x epc=%#"PRIxREGISTER
 	    " va=%#"PRIxVADDR"\n",
-	    p->p_pid, p->p_comm, ksi.ksi_signo, cause,
+	    cpu_number(), p->p_pid, p->p_comm, ksi.ksi_signo, cause,
 	    utf->tf_regs[_R_PC], vaddr);
 	printf("registers:\n");
@@ -843,16 +888,19 @@
 {
 	struct lwp * const l = curlwp;
-	struct cpu_info * const ci = l->l_cpu;
 	u_int astpending;
 
 	while ((astpending = l->l_md.md_astpending) != 0) {
-		uvmexp.softs++;
+		//uvmexp.softs++;
 		l->l_md.md_astpending = 0;
 
 #ifdef MULTIPROCESSOR
 #ifndef TSAR
-		if (ci->ci_tlb_info->ti_synci_page_bitmap != 0)
-			pmap_tlb_syncicache_ast(ci);
-		KASSERT(ci->ci_tlb_info->ti_synci_page_bitmap == 0 || l->l_md.md_astpending);
+		{
+			kpreempt_disable();
+			struct cpu_info * const ci = l->l_cpu;
+			if (ci->ci_tlb_info->ti_synci_page_bitmap != 0)
+				pmap_tlb_syncicache_ast(ci);
+			kpreempt_enable();
+		}
 #endif
 #endif
@@ -865,5 +913,5 @@
 		userret(l);
 
-		if (ci->ci_want_resched) {
+		if (l->l_cpu->ci_want_resched) {
 			/*
 			 * We are being preempted.
@@ -894,8 +942,10 @@
 	}
 	pc = (vaddr_t)tf->tf_regs[_R_PC];
-	if (ufetch_uint32((void *)pc) != 0) /* not a NOP instruction */
-		va = MachEmulateBranch(tf, pc, PCB_FSR(&l->l_addr->u_pcb), 1);
-	else
+	if (ufetch_uint32((void *)pc) != 0) { /* not a NOP instruction */
+		struct pcb * const pcb = lwp_getpcb(l);
+		va = mips_emul_branch(tf, pc, PCB_FSR(pcb), true);
+	} else {
 		va = pc + sizeof(int);
+	}
 
 	/*
@@ -909,5 +959,5 @@
 
 	l->l_md.md_ss_addr = va;
-	l->l_md.md_ss_instr = fuiword((void *)va);
+	l->l_md.md_ss_instr = ufetch_uint32((void *)va);
 	rv = ustore_uint32_isync((void *)va, MIPS_BREAK_SSTEP);
 	if (rv < 0) {
@@ -993,11 +1043,4 @@
 extern char mips3_systemcall[];
 #endif
-#ifdef MIPS3_5900
-extern char mips3_5900_kern_gen_exception[];
-extern char mips3_5900_user_gen_exception[];
-extern char mips3_5900_kern_intr[];
-extern char mips3_5900_user_intr[];
-extern char mips3_5900_systemcall[];
-#endif
 #ifdef MIPS32
 extern char mips32_kern_gen_exception[];
@@ -1007,4 +1050,11 @@
 extern char mips32_systemcall[];
 #endif
+#ifdef MIPS32R2
+extern char mips32r2_kern_gen_exception[];
+extern char mips32r2_user_gen_exception[];
+extern char mips32r2_kern_intr[];
+extern char mips32r2_user_intr[];
+extern char mips32r2_systemcall[];
+#endif
 #ifdef MIPS64
 extern char mips64_kern_gen_exception[];
@@ -1013,4 +1063,25 @@
 extern char mips64_user_intr[];
 extern char mips64_systemcall[];
+#endif
+#ifdef MIPS64R2
+extern char mips64r2_kern_gen_exception[];
+extern char mips64r2_user_gen_exception[];
+extern char mips64r2_kern_intr[];
+extern char mips64r2_user_intr[];
+extern char mips64r2_systemcall[];
+#endif
+#ifdef MIPS64_RMIXL
+extern char mips64_rmixl_kern_gen_exception[];
+extern char mips64_rmixl_user_gen_exception[];
+extern char mips64_rmixl_kern_intr[];
+extern char mips64_rmixl_user_intr[];
+extern char mips64_rmixl_systemcall[];
+#endif
+#ifdef MIPS64R2_RMIXL
+extern char mips64r2_rmixl_kern_gen_exception[];
+extern char mips64r2_rmixl_user_gen_exception[];
+extern char mips64r2_rmixl_kern_intr[];
+extern char mips64r2_rmixl_user_intr[];
+extern char mips64r2_rmixl_systemcall[];
 #endif
 
@@ -1046,4 +1117,9 @@
 	unsigned int frames =  0;
 	int foundframesize = 0;
+	mips_reg_t regs[32] = {
+		[_R_ZERO] = 0,
+		[_R_A0] = a0, [_R_A1] = a1, [_R_A2] = a2, [_R_A3] = a3,
+		[_R_RA] = ra,
+	};
 #ifdef DDB
 	db_expr_t diff;
@@ -1055,4 +1131,5 @@
 	stksize = 0;
 	subr = 0;
+	mask = 1;
 	if (frames++ > 100) {
 		(*printfn)("\nstackframe count exceeded\n");
@@ -1062,5 +1139,5 @@
 
 	/* check for bad SP: could foul up next frame */
-	if (sp & 3 || (intptr_t)sp >= 0) {
+	if ((sp & (sizeof(sp)-1)) || (intptr_t)sp >= 0) {
 		(*printfn)("SP 0x%x: not in kernel\n", sp);
 		ra = 0;
@@ -1130,5 +1207,5 @@
 	stksize = 0;
 	more = 3;
-	mask = 0;
+	mask &= 0x40ff0001;	/* if s0-s8 are valid, leave then as valid */
 	foundframesize = 0;
 	for (va = subr; more; va += sizeof(int),
@@ -1147,8 +1224,25 @@
 				break;
 
+			case OP_ADD:
+			case OP_ADDU:
+			case OP_DADD:
+			case OP_DADDU:
+				if (!(mask & (1 << i.RType.rd))
+				    || !(mask & (1 << i.RType.rt)))
+					break;
+				if (i.RType.rd != _R_ZERO)
+					break;
+				mask |= (1 << i.RType.rs);
+				regs[i.RType.rs] = regs[i.RType.rt];
+				if (i.RType.func >= OP_DADD)
+					break;
+				regs[i.RType.rs] = (int32_t)regs[i.RType.rs];
+				break;
+
 			case OP_SYSCALL:
 			case OP_BREAK:
 				more = 1; /* stop now */
-			};
+				break;
+			}
 			break;
 
@@ -1182,33 +1276,25 @@
 
 			/* look for saved registers on the stack */
-			if (i.IType.rs != 29)
+			if (i.IType.rs != _R_SP)
 				break;
-			/* only restore the first one */
-			if (mask & (1 << i.IType.rt))
+			switch (i.IType.rt) {
+			case _R_A0: /* a0 */
+			case _R_A1: /* a1 */
+			case _R_A2: /* a2 */
+			case _R_A3: /* a3 */
+			case _R_S0: /* s0 */
+			case _R_S1: /* s1 */
+			case _R_S2: /* s2 */
+			case _R_S3: /* s3 */
+			case _R_S4: /* s4 */
+			case _R_S5: /* s5 */
+			case _R_S6: /* s6 */
+			case _R_S7: /* s7 */
+			case _R_S8: /* s8 */
+			case _R_RA: /* ra */
+				regs[i.IType.rt] =
+				    kdbrpeek(sp + (int16_t)i.IType.imm, size);
+				mask |= (1 << i.IType.rt);
 				break;
-			mask |= (1 << i.IType.rt);
-			switch (i.IType.rt) {
-			case 4: /* a0 */
-				a0 = kdbrpeek(sp + (short)i.IType.imm, size);
-				break;
-
-			case 5: /* a1 */
-				a1 = kdbrpeek(sp + (short)i.IType.imm, size);
-				break;
-
-			case 6: /* a2 */
-				a2 = kdbrpeek(sp + (short)i.IType.imm, size);
-				break;
-
-			case 7: /* a3 */
-				a3 = kdbrpeek(sp + (short)i.IType.imm, size);
-				break;
-
-			case 30: /* fp */
-				fp = kdbrpeek(sp + (short)i.IType.imm, size);
-				break;
-
-			case 31: /* ra */
-				ra = kdbrpeek(sp + (short)i.IType.imm, size);
 			}
 			break;
@@ -1222,5 +1308,5 @@
 #endif
 			/* look for stack pointer adjustment */
-			if (i.IType.rs != 29 || i.IType.rt != 29)
+			if (i.IType.rs != _R_SP || i.IType.rt != _R_SP)
 				break;
 			/* don't count pops for mcount */
@@ -1229,9 +1315,14 @@
 				foundframesize = 1;
 			}
+			break;
 		}
 	}
 done:
-	(*printfn)("%s+%"PRIxVADDR" (%"PRIxREGISTER",%"PRIxREGISTER",%"PRIxREGISTER",%"PRIxREGISTER") ra %"PRIxVADDR" sz %d\n",
-		fn_name(subr), pc - subr, a0, a1, a2, a3, ra, stksize);
+	if (mask & (1 << _R_RA))
+		ra = regs[_R_RA];
+	(*printfn)("%#"PRIxVADDR": %s+%"PRIxVADDR" (%"PRIxREGISTER",%"PRIxREGISTER",%"PRIxREGISTER",%"PRIxREGISTER") ra %"PRIxVADDR" sz %d\n",
+		sp, fn_name(subr), pc - subr,
+		regs[_R_A0], regs[_R_A1], regs[_R_A2], regs[_R_A3],
+		ra, stksize);
 
 	if (ra) {
@@ -1246,9 +1337,6 @@
 	} else {
 finish:
-		if (curlwp)
-			(*printfn)("User-level: pid %d.%d\n", 
-			    curlwp->l_proc->p_pid, curlwp->l_lid);
-		else
-			(*printfn)("User-level: curlwp NULL\n");
+		(*printfn)("User-level: pid %d.%d\n", 
+		    curlwp->l_proc->p_pid, curlwp->l_lid);
 	}
 }
@@ -1257,9 +1345,5 @@
  * Functions ``special'' enough to print by name
  */
-#ifdef __STDC__
 #define Name(_fn)  { (void*)_fn, # _fn }
-#else
-#define Name(_fn) { _fn, "_fn"}
-#endif
 const static struct { void *addr; const char *name;} names[] = {
 	Name(stacktrace),
@@ -1284,12 +1368,4 @@
 #endif	/* MIPS3 */
 
-#if defined(MIPS3_5900)			/* r5900 family (mips-III CPU) */
-	Name(mips5900_kern_gen_exception),
-	Name(mips5900_user_gen_exception),
-	Name(mips5900_systemcall),
-	Name(mips5900_kern_intr),
-	Name(mips5900_user_intr),
-#endif	/* MIPS3_5900 */
-
 #if defined(MIPS32)			/* MIPS32 family (mips-III CPU) */
 	Name(mips32_kern_gen_exception),
@@ -1300,4 +1376,12 @@
 #endif	/* MIPS32 */
 
+#if defined(MIPS32R2)			/* MIPS32R2 family (mips-III CPU) */
+	Name(mips32r2_kern_gen_exception),
+	Name(mips32r2_user_gen_exception),
+	Name(mips32r2_systemcall),
+	Name(mips32r2_kern_intr),
+	Name(mips32r2_user_intr),
+#endif	/* MIPS32R2 */
+
 #if defined(MIPS64)			/* MIPS64 family (mips-III CPU) */
 	Name(mips64_kern_gen_exception),
@@ -1307,4 +1391,28 @@
 	Name(mips64_user_intr),
 #endif	/* MIPS64 */
+
+#if defined(MIPS64R2)			/* MIPS64R2 family (mips-III CPU) */
+	Name(mips64r2_kern_gen_exception),
+	Name(mips64r2_user_gen_exception),
+	Name(mips64r2_systemcall),
+	Name(mips64r2_kern_intr),
+	Name(mips64r2_user_intr),
+#endif	/* MIPS64R2 */
+
+#if defined(MIPS64_RMIXL)		/* RMI MIPS64 family (mips-III CPU) */
+	Name(mips64_rmixl_kern_gen_exception),
+	Name(mips64_rmixl_user_gen_exception),
+	Name(mips64_rmixl_systemcall),
+	Name(mips64_rmixl_kern_intr),
+	Name(mips64_rmixl_user_intr),
+#endif	/* MIPS64_RMIXL */
+
+#if defined(MIPS64R2_RMIXL)		/* RMI MIPS64R2 family (mips-III CPU) */
+	Name(mips64r2_rmixl_kern_gen_exception),
+	Name(mips64r2_rmixl_user_gen_exception),
+	Name(mips64r2_rmixl_systemcall),
+	Name(mips64r2_rmixl_kern_intr),
+	Name(mips64r2_rmixl_user_intr),
+#endif	/* MIPS64R2_RMIXL */
 
 	Name(cpu_idle),
Index: /trunk/src/sys/arch/mips/mips/vm_machdep.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/vm_machdep.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/vm_machdep.c	(revision 152)
@@ -1,5 +1,6 @@
-/*	$NetBSD: vm_machdep.c,v 1.121.6.1.2.14 2010/03/01 19:27:21 matt Exp $	*/
-
-/*
+/*	vm_machdep.c,v 1.121.6.1.2.19 2011/04/29 08:26:31 matt Exp	*/
+
+/*
+ * Copyright (c) 1988 University of Utah.
  * Copyright (c) 1992, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -37,49 +38,10 @@
  *	@(#)vm_machdep.c	8.3 (Berkeley) 1/4/94
  */
-/*
- * Copyright (c) 1988 University of Utah.
- *
- * This code is derived from software contributed to Berkeley by
- * the Systems Programming Group of the University of Utah Computer
- * Science Department and Ralph Campbell.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by the University of
- *	California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: Utah Hdr: vm_machdep.c 1.21 91/04/06
- *
- *	@(#)vm_machdep.c	8.3 (Berkeley) 1/4/94
- */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "vm_machdep.c,v 1.121.6.1.2.19 2011/04/29 08:26:31 matt Exp");
 
 #include "opt_ddb.h"
 #include "opt_coredump.h"
-
-#include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.121.6.1.2.14 2010/03/01 19:27:21 matt Exp $");
 
 #include <sys/param.h>
@@ -88,6 +50,6 @@
 #include <sys/malloc.h>
 #include <sys/buf.h>
+#include <sys/cpu.h>
 #include <sys/vnode.h>
-#include <sys/user.h>
 #include <sys/core.h>
 #include <sys/exec.h>
@@ -95,32 +57,31 @@
 #include <sys/savar.h>
 
-#include <uvm/uvm_extern.h>
+#include <uvm/uvm.h>
 
 #include <mips/cache.h>
+#include <mips/pcb.h>
 #include <mips/regnum.h>
 #include <mips/locore.h>
 #include <mips/pte.h>
 #include <mips/psl.h>
-#include <machine/cpu.h>
 
 paddr_t kvtophys(vaddr_t);	/* XXX */
 
 /*
- * Finish a fork operation, with lwp l2 nearly set up.
+ * cpu_lwp_fork: Finish a fork operation, with lwp l2 nearly set up.
  * Copy and update the pcb and trapframe, making the child ready to run.
  *
- * Rig the child's kernel stack so that it will start out in
- * lwp_trampoline() and call child_return() with l2 as an
- * argument. This causes the newly-created child process to go
- * directly to user level with an apparent return value of 0 from
- * fork(), while the parent process returns normally.
- *
- * l1 is the process being forked; if l1 == &lwp0, we are creating
- * a kernel thread, and the return path and argument are specified with
- * `func' and `arg'.
+ * First LWP (l1) is the lwp being forked.  If it is &lwp0, then we are
+ * creating a kthread, where return path and argument are specified
+ * with `func' and `arg'.
+ *
+ * Rig the child's kernel stack so that it will start out in lwp_trampoline()
+ * and call child_return() with l2 as an argument. This causes the
+ * newly-created child process to go directly to user level with an apparent
+ * return value of 0 from fork(), while the parent process returns normally.
  *
  * If an alternate user-level stack is requested (with non-zero values
- * in both the stack and stacksize args), set up the user stack pointer
- * accordingly.
+ * in both the stack and stacksize arguments), then set up the user stack
+ * pointer accordingly.
  */
 void
@@ -128,10 +89,8 @@
     void (*func)(void *), void *arg)
 {
-	struct pcb *pcb;
+	struct pcb * const pcb1 = lwp_getpcb(l1);
+	struct pcb * const pcb2 = lwp_getpcb(l2);
 	struct trapframe *tf;
-#ifndef TSAR
-	pt_entry_t *pte;
-	int i, x;
-#endif
+	KASSERT(l1 == curlwp || l1 == &lwp0);
 
 	l2->l_md.md_ss_addr = 0;
@@ -139,28 +98,21 @@
 	l2->l_md.md_astpending = 0;
 
-#ifdef DIAGNOSTIC
-	/*
-	 * If l1 != curlwp && l1 == &lwp0, we're creating a kernel thread.
-	 */
-	if (l1 != curlwp && l1 != &lwp0)
-		panic("cpu_lwp_fork: curlwp");
-#endif
 #ifndef NOFPU
-	if (l1->l_md.md_flags & MDP_FPUSED)
-		fpusave_lwp(l1);
-#endif
-
-	/*
-	 * Copy pcb from lwp l1 to l2.
-	 * Copy l1 trapframe atop on l2 stack space, so return to user mode
+	/* If parent LWP was using FPU, then save the FPU h/w state. */
+	fpu_save_lwp(l1);
+#endif
+
+	/* Copy the PCB from parent. */
+	*pcb2 = *pcb1;
+
+	/*
+	 * Copy the trapframe from parent, so that return to userspace
 	 * will be to right address, with correct registers.
 	 */
-	l2->l_addr->u_pcb = l1->l_addr->u_pcb;
-	tf = (struct trapframe *)((char *)l2->l_addr + USPACE) - 1;
+	vaddr_t ua2 = (vaddr_t)l2->l_addr;
+	tf = (struct trapframe *)(ua2 + USPACE) - 1;
 	*tf = *l1->l_md.md_utf;
 
-	/*
-	 * If specified, give the child a different stack.
-	 */
+	/* If specified, set a different user stack for a child. */
 	if (stack != NULL)
 		tf->tf_regs[_R_SP] = (intptr_t)stack + stacksize;
@@ -173,35 +125,37 @@
 
 #ifndef TSAR
-	x = (MIPS_HAS_R4K_MMU) ?
-	    (MIPS3_PG_G | MIPS3_PG_RO | MIPS3_PG_WIRED) :
-	    MIPS1_PG_G;
-	pte = kvtopte(l2->l_addr);
-	for (i = 0; i < UPAGES; i++)
-		l2->l_md.md_upte[i] = pte[i].pt_entry &~ x;
-#endif
-
-	pcb = &l2->l_addr->u_pcb;
-	pcb->pcb_context.val[_L_S0] = (intptr_t)func;			/* S0 */
-	pcb->pcb_context.val[_L_S1] = (intptr_t)arg;			/* S1 */
-	pcb->pcb_context.val[MIPS_CURLWP_LABEL] = (intptr_t)l2;		/* T8 */
-	pcb->pcb_context.val[_L_SP] = (intptr_t)tf;			/* SP */
-	pcb->pcb_context.val[_L_RA] = (intptr_t)lwp_trampoline;		/* RA */
+	bool direct_mapped_p = MIPS_KSEG0_P(ua2);
 #ifdef _LP64
-	KASSERT(pcb->pcb_context.val[_L_SR] & MIPS_SR_KX);
-#endif
-	KASSERT(pcb->pcb_context.val[_L_SR] & MIPS_SR_INT_IE);
-}
-
-/*
- * Set the given LWP to start at the given function via the
- * lwp_trampoline.
- */
+	direct_mapped_p = direct_mapped_p || MIPS_XKPHYS_P(ua2);
+#endif
+	if (!direct_mapped_p) {
+		pt_entry_t * const pte = kvtopte(ua2);
+		const uint32_t x = (MIPS_HAS_R4K_MMU) ?
+		    (MIPS3_PG_G | MIPS3_PG_RO | MIPS3_PG_WIRED) : MIPS1_PG_G;
+
+		for (u_int i = 0; i < UPAGES; i++) {
+			l2->l_md.md_upte[i] = pte[i].pt_entry &~ x;
+		}
+	}
+#endif /* !TSAR */
+
+	cpu_setfunc(l2, func, arg);
+}
+
 void
 cpu_setfunc(struct lwp *l, void (*func)(void *), void *arg)
 {
-	struct pcb *pcb = &l->l_addr->u_pcb;
-	struct trapframe *tf = l->l_md.md_utf;
+	struct pcb * const pcb = lwp_getpcb(l);
+	struct trapframe * const tf = l->l_md.md_utf;
 
 	KASSERT(tf == (struct trapframe *)((char *)l->l_addr + USPACE) - 1);
+
+	/*
+	 * Rig kernel stack so that it would start out in lwp_trampoline()
+	 * and call child_return() with l as an argument.  This causes the
+	 * newly-created child process to go directly to user level with a
+	 * parent return value of 0 from fork(), while the parent process
+	 * returns normally.
+	 */
 
 	pcb->pcb_context.val[_L_S0] = (intptr_t)func;			/* S0 */
@@ -209,9 +163,20 @@
 	pcb->pcb_context.val[MIPS_CURLWP_LABEL] = (intptr_t)l;		/* T8 */
 	pcb->pcb_context.val[_L_SP] = (intptr_t)tf;			/* SP */
-	pcb->pcb_context.val[_L_RA] = (intptr_t)setfunc_trampoline;	/* RA */
+	pcb->pcb_context.val[_L_RA] =
+	   mips_locore_jumpvec.ljv_lwp_trampoline;			/* RA */
 #ifdef _LP64
 	KASSERT(pcb->pcb_context.val[_L_SR] & MIPS_SR_KX);
 #endif
 	KASSERT(pcb->pcb_context.val[_L_SR] & MIPS_SR_INT_IE);
+}
+
+/*
+ * Routine to copy MD stuff from proc to proc on a fork.
+ * For mips, this is the ABI and "32 bit process on a 64 bit kernel" flag.
+ */
+void
+cpu_proc_fork(struct proc *p1, struct proc *p2)
+{
+	p2->p_md.md_abi = p1->p_md.md_abi;
 }
 
@@ -230,4 +195,5 @@
 	vaddr_t va;
 	paddr_t pa;
+	struct pcb *pcb = lwp_getpcb(l);
 
 	/*
@@ -256,5 +222,9 @@
 	uarea_ok = uarea_ok && (pa + USPACE - 1 <= MIPS_PHYS_MASK);
 #endif
-	KASSERT((vaddr_t)l->l_addr->u_pcb.pcb_context.val[_L_SP] == (vaddr_t)l->l_md.md_utf);
+	KASSERTMSG(pcb->pcb_context.val[_L_SP] == (intptr_t)l->l_md.md_utf,
+	    ("%s: %s (%#"PRIxREGISTER") != %s (%p)",
+	     __func__,
+	     "pcb->pcb_context.val[_L_SP]", pcb->pcb_context.val[_L_SP],
+	     "(intptr_t)l->l_md.md_utf", l->l_md.md_utf));
 
 	if (!uarea_ok) {
@@ -274,5 +244,5 @@
 		    USPACE_ALIGN, 0, &pglist, 1, 1);
 		if (error)
-			panic("softint_init_md: uvm_pglistalloc failed: %d",
+			panic("%s: uvm_pglistalloc failed: %d", __func__,
 			    error);
 
@@ -298,5 +268,5 @@
 		 */
 		((struct trapframe *)(va + USPACE))[-1] = *l->l_md.md_utf;
-		((struct user *)va)->u_pcb = l->l_addr->u_pcb;
+		*(struct pcb *)va = *pcb;
 		/*
 		 * Discard the old uarea.
@@ -308,5 +278,6 @@
 	l->l_addr = (struct user *)va;
 	l->l_md.md_utf = (struct trapframe *)(va + USPACE) - 1;
-	l->l_addr->u_pcb.pcb_context.val[_L_SP] = (vaddr_t)l->l_md.md_utf;
+	pcb = lwp_getpcb(l);
+	pcb->pcb_context.val[_L_SP] = (vaddr_t)l->l_md.md_utf;
 	uarea_remapped.ev_count++;
 #endif /* !TSAR */
@@ -342,12 +313,18 @@
 cpu_lwp_free(struct lwp *l, int proc)
 {
-
-	if (l->l_md.md_flags & MDP_FPUSED)
-		fpudiscard_lwp(l);
+	KASSERT(l == curlwp);
 
 #ifndef NOFPU
+	fpu_discard();
+
 	KASSERT(l->l_fpcpu == NULL);
 	KASSERT(curcpu()->ci_fpcurlwp != l);
 #endif
+}
+
+vaddr_t
+cpu_lwp_pc(struct lwp *l)
+{
+	return l->l_md.md_utf->tf_regs[_R_PC];
 }
 
@@ -382,9 +359,9 @@
 	}
 
-	if (l->l_md.md_flags & MDP_FPUSED)
-		fpusave_lwp(l);
-
+	fpu_save_lwp(l);
+
+	struct pcb * const pcb = lwp_getpcb(l);
 	cpustate.frame = *l->l_md.md_utf;
-	cpustate.fpregs = l->l_addr->u_pcb.pcb_fpregs;
+	cpustate.fpregs = pcb->pcb_fpregs;
 
 	CORE_SETMAGIC(cseg, CORESEGMAGIC, MID_MACHINE, CORE_CPU);
@@ -401,10 +378,4 @@
 }
 #endif
-
-static struct evcnt evcnt_vmapbuf =
-    EVCNT_INITIALIZER(EVCNT_TYPE_MISC, NULL, "vmapbuf", "calls");
-static struct evcnt evcnt_vmapbuf_adjustments =
-    EVCNT_INITIALIZER(EVCNT_TYPE_MISC, &evcnt_vmapbuf,
-	"vmapbuf", "adjustments");
 
 /*
@@ -419,19 +390,13 @@
 	paddr_t pa;	/* physical address */
 	vsize_t off;
-	vsize_t coloroff;
 
 	if ((bp->b_flags & B_PHYS) == 0)
 		panic("vmapbuf");
 
-	evcnt_vmapbuf.ev_count++;
 	uva = mips_trunc_page(bp->b_saveaddr = bp->b_data);
-	coloroff = uva & ptoa(uvmexp.colormask);
-	if (coloroff)
-		evcnt_vmapbuf_adjustments.ev_count++;
 	off = (vaddr_t)bp->b_data - uva;
 	len = mips_round_page(off + len);
-	kva = uvm_km_alloc(phys_map, len + coloroff, ptoa(uvmexp.ncolors),
-	    UVM_KMF_VAONLY | UVM_KMF_WAITVA);
-	kva += coloroff;
+	kva = uvm_km_alloc(phys_map, len, atop(uva) & uvmexp.colormask,
+	    UVM_FLAG_COLORMATCH | UVM_KMF_VAONLY | UVM_KMF_WAITVA);
 	bp->b_data = (void *)(kva + off);
 	upmap = vm_map_pmap(&bp->b_proc->p_vmspace->vm_map);
@@ -456,5 +421,4 @@
 	vaddr_t kva;
 	vsize_t off;
-	vsize_t coloroff;
 
 	if ((bp->b_flags & B_PHYS) == 0)
@@ -462,10 +426,9 @@
 
 	kva = mips_trunc_page(bp->b_data);
-	coloroff = kva & ptoa(uvmexp.colormask);
 	off = (vaddr_t)bp->b_data - kva;
 	len = mips_round_page(off + len);
 	pmap_remove(vm_map_pmap(phys_map), kva, kva + len);
 	pmap_update(pmap_kernel());
-	uvm_km_free(phys_map, kva - coloroff, len + coloroff, UVM_KMF_VAONLY);
+	uvm_km_free(phys_map, kva, len, UVM_KMF_VAONLY);
 	bp->b_data = bp->b_saveaddr;
 	bp->b_saveaddr = NULL;
Index: /trunk/src/sys/arch/mips/mips/wired_map.c
===================================================================
--- /trunk/src/sys/arch/mips/mips/wired_map.c	(revision 151)
+++ /trunk/src/sys/arch/mips/mips/wired_map.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: wired_map.c,v 1.4.62.1 2010/01/15 06:47:00 matt Exp $	*/
+/*	$NetBSD: wired_map.c,v 1.4.62.2 2010/12/29 00:42:21 matt Exp $	*/
 
 /*-
@@ -64,5 +64,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wired_map.c,v 1.4.62.1 2010/01/15 06:47:00 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wired_map.c,v 1.4.62.2 2010/12/29 00:42:21 matt Exp $");
 
 #include <sys/param.h>
@@ -158,5 +158,5 @@
 		    MIPS3_PG_IOPAGE(
 			    PMAP_CCA_FOR_PA(mips3_wired_map[index].pa1));
-	tlb_write_indexed_VPS(MIPS3_TLB_WIRED_UPAGES + index, &tlb);
+	tlb_write_indexed(MIPS3_TLB_WIRED_UPAGES + index, &tlb);
 	return true;
 }
Index: /trunk/src/sys/arch/mips/rmi/rmixl_com.c
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_com.c	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_com.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $Id: rmixl_com.c,v 1.1.2.12 2010/04/12 22:42:07 cliff Exp $ */
+/* $Id: rmixl_com.c,v 1.1.2.15 2011/05/11 00:37:20 cliff Exp $ */
 /*-
  * Copyright (c) 2006 Urbana-Champaign Independent Media Center.
@@ -102,5 +102,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixl_com.c,v 1.1.2.12 2010/04/12 22:42:07 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rmixl_com.c,v 1.1.2.15 2011/05/11 00:37:20 cliff Exp $");
 
 #include <sys/param.h>
@@ -126,4 +126,16 @@
 
 #include "opt_com.h"
+
+/* span of UART regs in bytes */
+#define RMIXL_IO_DEV_UART_SIZE	(COM_NPORTS * sizeof(uint32_t))
+
+#define RMIXL_COM_INIT_REGS(regs, bst, ioh, addr) 		\
+	do {							\
+		memset(&regs, 0, sizeof(regs));			\
+		COM_INIT_REGS(regs, bst, ioh, addr);		\
+		regs.cr_nports = RMIXL_IO_DEV_UART_SIZE;	\
+		rmixl_com_initmap(&regs);			\
+	} while (0)
+
 
 struct rmixl_com_softc {
@@ -227,4 +239,5 @@
 	struct obio_attach_args *obio = aux;
 	bus_space_tag_t bst;
+	bus_space_handle_t ioh;
 	bus_addr_t addr;
 	bus_size_t size;
@@ -234,21 +247,17 @@
 	bst = obio->obio_eb_bst;
 	addr = obio->obio_addr;
-	size = obio->obio_size;
+	size = (bus_size_t)RMIXL_IO_DEV_UART_SIZE;
 
 	if (com_is_console(bst, addr, &regs.cr_ioh))
 		return 1;
 
-	if (bus_space_map(bst, addr, size, 0, &regs.cr_ioh))
+	if (bus_space_map(bst, addr, size, 0, &ioh))
 		return 0;		/* FAIL */
 
-	memset(&regs, 0, sizeof(regs));
-	regs.cr_iot = bst;
-	regs.cr_iobase = addr;
-	regs.cr_nports = size;
-	rmixl_com_initmap(&regs);
+	RMIXL_COM_INIT_REGS(regs, bst, ioh, addr);
 
 	rv = com_probe_subr(&regs);
 
-	bus_space_unmap(bst, regs.cr_ioh, size);
+	bus_space_unmap(bst, ioh, size);
 
 	return rv;
@@ -271,5 +280,5 @@
 	bst = obio->obio_eb_bst;
 	addr = obio->obio_addr;
-	size = obio->obio_size;
+	size = (bus_size_t)RMIXL_IO_DEV_UART_SIZE;
 
 	if (!com_is_console(bst, addr, &ioh)
@@ -279,13 +288,10 @@
 	}
 
-	memset(&sc->sc_regs, 0, sizeof(sc->sc_regs));
-	COM_INIT_REGS(sc->sc_regs, bst, ioh, addr);
-	sc->sc_regs.cr_nports = size;
-	rmixl_com_initmap(&sc->sc_regs);
+	RMIXL_COM_INIT_REGS(sc->sc_regs, bst, ioh, addr);
 
 	com_attach_subr(sc);
 
 	rmixl_intr_establish(obio->obio_intr, obio->obio_tmsk,
-		IPL_SERIAL, RMIXL_TRIG_LEVEL, RMIXL_POLR_HIGH,
+		IPL_VM, RMIXL_TRIG_LEVEL, RMIXL_POLR_HIGH,
 		comintr, sc, true);
 
@@ -295,12 +301,8 @@
 rmixl_com_initmap(struct com_regs *regsp)
 {
-	int i;
-	int sz;
-
 	/*
 	 * map the 4 byte register stride
 	 */
-	sz = sizeof(regsp->cr_map) / sizeof(regsp->cr_map[0]);
-	for (i = 0; i < 16; i++)
+	for (int i = 0; i < __arraycount(regsp->cr_map); i++)
 		regsp->cr_map[i] = com_std_map[i] * 4;
 }
@@ -311,15 +313,9 @@
 {
 	bus_space_tag_t bst;
-	bus_size_t sz;
 	struct com_regs	regs;
 
 	bst = (bus_space_tag_t)&rmixl_configuration.rc_obio_eb_memt;
-	sz = COM_NPORTS * sizeof(uint32_t);	/* span of UART regs in bytes */
-
-	memset(&regs, 0, sizeof(regs));
-	rmixl_com_initmap(&regs);
-	regs.cr_iot = bst;
-	regs.cr_iobase = addr;
-	regs.cr_nports = sz;
+
+	RMIXL_COM_INIT_REGS(regs, bst, 0, addr);
 
 	comcnattach1(&regs, speed, freq, type, mode);
Index: /trunk/src/sys/arch/mips/rmi/rmixl_cpu.c
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_cpu.c	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_cpu.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_cpu.c,v 1.1.2.11 2010/05/01 06:10:04 cliff Exp $	*/
+/*	rmixl_cpu.c,v 1.1.2.21 2011/04/29 08:26:31 matt Exp	*/
 
 /*
@@ -39,5 +39,10 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixl_cpu.c,v 1.1.2.11 2010/05/01 06:10:04 cliff Exp $");
+__KERNEL_RCSID(0, "rmixl_cpu.c,v 1.1.2.21 2011/04/29 08:26:31 matt Exp");
+
+#include "opt_multiprocessor.h"
+#include "opt_ddb.h"
+
+#define __MUTEX_PRIVATE
 
 #include <sys/param.h>
@@ -48,5 +53,4 @@
 #include <sys/lwp.h>
 #include <sys/cpu.h>
-#include <sys/user.h>
 #include <sys/malloc.h>
 #include <uvm/uvm_pglist.h>
@@ -61,9 +65,12 @@
 #include <mips/rmi/rmixl_intr.h>
 #include <mips/rmi/rmixl_fmnvar.h>
+#ifdef DDB
+#include <mips/db_machdep.h>
+#endif
 
 
 static int	cpu_rmixl_match(device_t, cfdata_t, void *);
 static void	cpu_rmixl_attach(device_t, device_t, void *);
-static void	cpu_rmixl_attach_once(struct rmixl_cpu_softc * const);
+static void	cpu_rmixl_attach_primary(struct rmixl_cpu_softc * const);
 #ifdef NOTYET
 static int	cpu_fmn_intr(void *, rmixl_fmn_rxmsg_t *);
@@ -72,4 +79,5 @@
 #ifdef MULTIPROCESSOR
 void		cpu_rmixl_hatch(struct cpu_info *);
+void		cpu_rmixl_run(struct cpu_info *);
 #if 0
 static void	cpu_setup_trampoline_ipi(struct device *, struct cpu_info *);
@@ -77,10 +85,11 @@
 static int	cpu_setup_trampoline_common(struct cpu_info *, struct rmixl_cpu_trampoline_args *);
 static void	cpu_setup_trampoline_callback(struct cpu_info *);
+#endif	/* MULTIPROCESSOR */
+
 #ifdef DEBUG
 void		rmixl_cpu_data_print(struct cpu_data *);
 struct cpu_info *
-		rmixl_cpuinfo_print(cpuid_t);
+		rmixl_cpuinfo_print(u_int);
 #endif	/* DEBUG */
-#endif	/* MULTIPROCESSOR */
 
 CFATTACH_DECL_NEW(cpu_rmixl, sizeof(struct rmixl_cpu_softc),
@@ -90,4 +99,59 @@
 static struct rmixl_cpu_trampoline_args rmixl_cpu_trampoline_args;
 #endif
+
+#if defined(DDB)
+/*
+ * cpu_rmixl_watchpoint_init - initialize COP0 watchpoint stuff
+ *
+ * clear IEU_DEFEATURE[DBE] to ensure T_WATCH on watchpoint exception
+ * set COP0 watchhi and watchlo
+ *
+ * disable all watchpoints
+ */
+static void
+cpu_rmixl_watchpoint_init(void)
+{
+	uint32_t r;
+
+	r = rmixl_mfcr(RMIXL_PCR_IEU_DEFEATURE);
+	r &= ~__BIT(7);		/* DBE */
+	rmixl_mtcr(RMIXL_PCR_IEU_DEFEATURE, r);
+
+	cpuwatch_clr_all();
+}
+#endif	/* DDB */
+
+/*
+ * cpu_xls616_erratum
+ *
+ * on the XLS616, COUNT/COMPARE clock regs seem to interact between
+ * threads on a core 
+ *
+ * the symptom of the error is retarded clock interrupts
+ * and very slow apparent system performance
+ *
+ * other XLS chips may have the same problem.
+ * we may need to add other PID checks.
+ */
+static inline bool
+cpu_xls616_erratum(device_t parent, struct cpucore_attach_args *ca)
+{
+#if 0
+	if (mips_options.mips_cpu->cpu_pid == MIPS_XLS616) {
+		if (ca->ca_thread > 0) {
+			aprint_error_dev(parent, "XLS616 CLOCK ERRATUM: "
+				"deconfigure cpu%d\n", ca->ca_thread);
+			return true;
+		}
+	}
+#endif
+	return false;
+}
+
+static bool
+cpu_rmixl_erratum(device_t parent, struct cpucore_attach_args *ca)
+{
+	return cpu_xls616_erratum(parent, ca);
+}
 
 static int
@@ -104,5 +168,6 @@
 	    && ca->ca_thread == 0
 #endif
-	    && (thread == CPUCORECF_THREAD_DEFAULT || thread == ca->ca_thread))
+	    && (thread == CPUCORECF_THREAD_DEFAULT || thread == ca->ca_thread)
+	    && (!cpu_rmixl_erratum(parent, ca)))
 			return 1;
 
@@ -114,8 +179,11 @@
 {
 	struct rmixl_cpu_softc * const sc = device_private(self);
-	struct cpucore_attach_args *ca = aux;
 	struct cpu_info *ci = NULL;
-
-	if (ca->ca_thread == 0 && ca->ca_core == 0) {
+	static bool once = false;
+	extern void rmixl_spl_init_cpu(void);
+	
+	if (once == false) {
+		/* first attach is the primary cpu */
+		once = true;
 		ci = curcpu();
 		sc->sc_dev = self;
@@ -123,21 +191,24 @@
 		ci->ci_softc = (void *)sc;
 
-		cpu_rmixl_attach_once(sc);
+		rmixl_spl_init_cpu();	/* spl initialization for CPU#0 */
+		cpu_rmixl_attach_primary(sc);
 
 #ifdef MULTIPROCESSOR
 		mips_locoresw.lsw_cpu_init = cpu_rmixl_hatch;
+		mips_locoresw.lsw_cpu_run = cpu_rmixl_run;
 	} else {
+		struct cpucore_attach_args * const ca = aux;
 		struct cpucore_softc * const ccsc = device_private(parent);
 		rmixlfw_psb_type_t psb_type = rmixl_configuration.rc_psb_type;
 		cpuid_t cpuid;
-		int s;
-
-		s = splhigh();
 
 		KASSERT(ca->ca_core < 8);
 		KASSERT(ca->ca_thread < 4);
 		cpuid = (ca->ca_core << 2) | ca->ca_thread;
-		ci = cpu_info_alloc(ccsc->sc_tlbinfo, cpuid);
+		ci = cpu_info_alloc(ccsc->sc_tlbinfo, cpuid,
+		    /* XXX */ 0, ca->ca_core, ca->ca_thread);
 		KASSERT(ci != NULL);
+		if (ccsc->sc_tlbinfo == NULL)
+			ccsc->sc_tlbinfo = ci->ci_tlb_info;
 		sc->sc_dev = self;
 		sc->sc_ci = ci;
@@ -165,7 +236,4 @@
 			return;
 		}
-
-		splx(s);
-
 #endif	/* MULTIPROCESSOR */
 	}
@@ -181,19 +249,30 @@
 }
 
+/*
+ * attach the primary processor
+ */
 static void
-cpu_rmixl_attach_once(struct rmixl_cpu_softc * const sc)
-{
-	static bool once = false;
-
-	KASSERT("once != true");
-	if (once == true)
-		return;
-	once = true;
+cpu_rmixl_attach_primary(struct rmixl_cpu_softc * const sc)
+{
+	struct cpu_info *ci = sc->sc_ci;
+	uint32_t ebase;
+
+	KASSERT(CPU_IS_PRIMARY(ci));
+
+	/*
+	 * obtain and set cpuid of the primary processor
+	 */
+	asm volatile("dmfc0 %0, $15, 1;" : "=r"(ebase));
+	ci->ci_cpuid = ebase & __BITS(9,0);
+
+#if defined(DDB)
+	cpu_rmixl_watchpoint_init();
+#endif
 
 	rmixl_fmn_init();
 
-	sc->sc_ih_clk = rmixl_intr_init_clk();
+	rmixl_intr_init_clk();
 #ifdef MULTIPROCESSOR
-	sc->sc_ih_ipi = rmixl_intr_init_ipi();
+	rmixl_intr_init_ipi();
 #endif
 
@@ -206,5 +285,4 @@
 	sc->sc_ih_fmn = ih;
 #endif
-
 }
 
@@ -213,6 +291,6 @@
 cpu_fmn_intr(void *arg, rmixl_fmn_rxmsg_t *rxmsg)
 {
-	if (cpu_number() == 0) {
-		printf("%s: cpu %ld: rxsid=%#x, code=%d, size=%d\n",
+	if (CPU_IS_PRIMARY(curcpu())) {
+		printf("%s: cpu%ld: rxsid=%#x, code=%d, size=%d\n",
 			__func__, cpu_number(),
 			rxmsg->rxsid, rxmsg->code, rxmsg->size);
@@ -227,4 +305,16 @@
 #ifdef MULTIPROCESSOR
 /*
+ * cpu_rmixl_run
+ *
+ * - chip-specific post-running code called from cpu_hatch via lsw_cpu_run
+ */
+void
+cpu_rmixl_run(struct cpu_info *ci)
+{
+	struct rmixl_cpu_softc * const sc = (void *)ci->ci_softc;
+	cpucore_rmixl_run(device_parent(sc->sc_dev));
+}
+
+/*
  * cpu_rmixl_hatch
  *
@@ -234,15 +324,22 @@
 cpu_rmixl_hatch(struct cpu_info *ci)
 {
+	struct rmixl_cpu_softc * const sc = (void *)ci->ci_softc;
+	extern void rmixl_spl_init_cpu(void);
+
+	rmixl_spl_init_cpu();	/* spl initialization for this CPU */
+
 	(void)splhigh();
 
 #ifdef DEBUG
 	uint32_t ebase;
-	asm volatile("dmfc0 %0, $15, 1;" : "=r"(ebase));
+	__asm volatile("dmfc0 %0, $15, 1;" : "=r"(ebase));
 	KASSERT((ebase & __BITS(9,0)) == ci->ci_cpuid);
 	KASSERT(curcpu() == ci);
 #endif
-
-	if (RMIXL_CPU_THREAD(ci->ci_cpuid) == 0)
-		rmixl_fmn_init_core();
+	cpucore_rmixl_hatch(device_parent(sc->sc_dev));
+
+#if defined(DDB)
+	cpu_rmixl_watchpoint_init();
+#endif
 }
 
@@ -283,6 +380,6 @@
 	 *   to rmixl_cpu_trampoline (the upper half is clear)
 	 *   so rmixl_cpu_trampoline must reconstruct the missing upper half
-	 *   rmixl_cpu_trampoline "knows" to use MIPS_KSEG0_START
-	 *   to reconstruct upper half of 'ta'.
+	 *   rmixl_cpu_trampoline "knows" 'ta' is a KSEG0 address
+	 *   and sign-extends to make an LP64 KSEG0 address.
 	 */
 	KASSERT(MIPS_KSEG0_P(ta));
@@ -293,6 +390,5 @@
 	 * forces sign extension of 32 bit pointers
 	 */
-	stacktop = (uintptr_t)l->l_addr + USPACE
-			 - sizeof(struct trapframe) - CALLFRAME_SIZ;
+	stacktop = (uintptr_t)l->l_md.md_utf - CALLFRAME_SIZ;
 	ta->ta_sp = (uint64_t)(intptr_t)stacktop;
 	ta->ta_lwp = (uint64_t)(intptr_t)l;
@@ -322,4 +418,5 @@
 		(uint64_t)1 << ci->ci_cpuid, wakeup_cpu);
 }
+#endif	/* MULTIPROCESSOR */
 
 
@@ -362,7 +459,7 @@
 
 struct cpu_info *
-rmixl_cpuinfo_print(cpuid_t cpuid)
-{
-	struct cpu_info * const ci = cpu_lookup(cpuid);
+rmixl_cpuinfo_print(u_int cpuindex)
+{
+	struct cpu_info * const ci = cpu_lookup(cpuindex);
 
 	if (ci != NULL) {
@@ -386,8 +483,13 @@
 			printf("ci_softlwps[%d] %p\n", i, ci->ci_softlwps[i]);
 		printf("ci_tlb_slot %d\n", ci->ci_tlb_slot);
+		printf("ci_pmap_asid_cur %d\n", ci->ci_pmap_asid_cur);
 		printf("ci_tlb_info %p\n", ci->ci_tlb_info);
-		printf("ci_pmap_segbase %p\n", ci->ci_pmap_segbase);
+		printf("ci_pmap_seg0tab %p\n", ci->ci_pmap_seg0tab);
+#ifdef _LP64
+		printf("ci_pmap_segtab %p\n", ci->ci_pmap_segtab);
+#else
 		printf("ci_pmap_srcbase %#"PRIxVADDR"\n", ci->ci_pmap_srcbase);
 		printf("ci_pmap_dstbase %#"PRIxVADDR"\n", ci->ci_pmap_dstbase);
+#endif
 #ifdef MULTIPROCESSOR
 		printf("ci_flags %#lx\n", ci->ci_flags);
@@ -401,5 +503,3 @@
 	return ci;
 }
-
 #endif	/* DEBUG */
-#endif	/* MULTIPROCESSOR */
Index: /trunk/src/sys/arch/mips/rmi/rmixl_cpucore.c
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_cpucore.c	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_cpucore.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_cpucore.c,v 1.1.2.6 2010/03/21 21:24:19 cliff Exp $	*/
+/*	$NetBSD: rmixl_cpucore.c,v 1.1.2.11 2011/04/29 08:26:31 matt Exp $	*/
 
 /*
@@ -39,5 +39,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixl_cpucore.c,v 1.1.2.6 2010/03/21 21:24:19 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rmixl_cpucore.c,v 1.1.2.11 2011/04/29 08:26:31 matt Exp $");
+
+#include "opt_multiprocessor.h"
 
 #include <sys/param.h>
@@ -51,4 +53,5 @@
 #include <mips/rmi/rmixl_cpunodevar.h>
 #include <mips/rmi/rmixl_cpucorevar.h>
+#include <mips/rmi/rmixl_fmnvar.h>
 
 static int	cpucore_rmixl_match(device_t, cfdata_t, void *);
@@ -85,8 +88,11 @@
 	struct cpucore_attach_args ca;
 	u_int nthreads;
+	struct rmixl_config *rcp = &rmixl_configuration;
 
 	sc->sc_dev = self;
 	sc->sc_core = na->na_core;
-
+	KASSERT(sc->sc_hatched == false);
+
+#if 0
 #ifdef MULTIPROCESSOR
 	/*
@@ -112,4 +118,5 @@
 	}
 #endif
+#endif
 
 	aprint_normal("\n");
@@ -129,11 +136,51 @@
 	/*
 	 * Attach CPU (RMI thread contexts) devices
+	 * according to userapp_cpu_map bitmask.
 	 */
-	for (int i=0; i < nthreads; i++) {
+	u_int thread_mask = (1 << nthreads) - 1;
+	u_int core_shft = sc->sc_core * nthreads;
+	u_int threads_enb =
+		(u_int)(rcp->rc_psb_info.userapp_cpu_map >> core_shft) & thread_mask;
+	u_int threads_dis = (~threads_enb) & thread_mask;
+
+	sc->sc_threads_dis = threads_dis;
+	if (threads_dis != 0) {
+		aprint_normal_dev(self, "threads");
+		u_int d = threads_dis;
+		while (d != 0) {
+			const u_int t = ffs(d) - 1;
+			d ^= (1 << t);
+			aprint_normal(" %d%s", t, (d==0) ? "" : ",");
+		}
+		aprint_normal(" offline (disabled by firmware)\n");
+	}
+
+	u_int threads_try_attach = threads_enb;
+	while (threads_try_attach != 0) {
+		const u_int t = ffs(threads_try_attach) - 1;
+		const u_int bit = 1 << t;
+		threads_try_attach ^= bit;
 		ca.ca_name = "cpu";
-		ca.ca_thread = i;
+		ca.ca_thread = t;
 		ca.ca_core = sc->sc_core;
-		config_found(self, &ca, cpucore_rmixl_print);
-	}
+		if (config_found(self, &ca, cpucore_rmixl_print) == NULL) {
+			/*
+			 * thread did not attach, e.g. not configured
+			 * arrange to have it disabled in THREADEN PCR
+			 */
+			threads_enb ^= bit;
+			threads_dis |= bit;
+		}
+	}
+
+	sc->sc_threads_enb = threads_enb;
+	sc->sc_threads_dis = threads_dis;
+
+	/*
+	 * when attaching the core of the primary cpu,
+	 * do the post-running initialization here
+	 */
+	if (sc->sc_core == RMIXL_CPU_CORE((curcpu()->ci_cpuid)))
+		cpucore_rmixl_run(self);
 }
 
@@ -149,2 +196,43 @@
 	return (UNCONF);
 }
+
+/*
+ * cpucore_rmixl_run
+ *	called from cpucore_rmixl_attach for primary core
+ *	and called from cpu_rmixl_run for each hatched cpu
+ *	the first call for each cpucore causes init of per-core features:
+ *	- disable unused threads
+ *	- set Fine-grained (Round Robin) thread scheduling mode
+ */
+void
+cpucore_rmixl_run(device_t self)
+{
+	struct cpucore_softc * const sc = device_private(self);
+
+	if (sc->sc_running == false) {
+		sc->sc_running = true;
+		rmixl_mtcr(RMIXL_PCR_THREADEN, sc->sc_threads_enb);
+		rmixl_mtcr(RMIXL_PCR_SCHEDULING, 0);
+	}
+}
+
+#ifdef MULTIPROCESSOR
+/*
+ * cpucore_rmixl_hatch
+ *	called from cpu_rmixl_hatch for each cpu
+ *	the first call for each cpucore causes init of per-core features
+ */
+void
+cpucore_rmixl_hatch(device_t self)
+{
+	struct cpucore_softc * const sc = device_private(self);
+
+	if (sc->sc_hatched == false) {
+		/* PCRs for core#0 are set up in mach_init() */
+		if (sc->sc_core != 0)
+			rmixl_pcr_init_core();
+		rmixl_fmn_init_core();
+		sc->sc_hatched = true;
+	}
+}
+#endif	/* MULTIPROCESSOR */
Index: /trunk/src/sys/arch/mips/rmi/rmixl_cpucorevar.h
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_cpucorevar.h	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_cpucorevar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_cpucorevar.h,v 1.1.2.3 2010/04/13 18:15:16 cliff Exp $	*/
+/*	$NetBSD: rmixl_cpucorevar.h,v 1.1.2.7 2011/04/29 08:26:31 matt Exp $	*/
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -32,11 +32,18 @@
 #define _ARCH_MIPS_RMI_RMIXL_CPUCOREVAR_H_
 
+#ifdef _KERNEL_OPT
+#include "opt_multiprocessor.h"
+#endif
+
 struct cpucore_softc {
 	device_t	sc_dev;
+	u_int		sc_core;
+	u_int		sc_threads_enb;
+	u_int		sc_threads_dis;
 	bool		sc_attached;
-	u_int		sc_core;
+	bool		sc_running;
+	bool		sc_hatched;
 #ifdef MULTIPROCESSOR
 	struct pmap_tlb_info *sc_tlbinfo;
-	struct pmap_tlb_info sc_tlbinfo0;
 #endif
 };
@@ -48,3 +55,8 @@
 };
 
+#ifdef _KERNEL
+void cpucore_rmixl_hatch(device_t);
+void cpucore_rmixl_run(device_t);
+#endif
+
 #endif	/* _ARCH_MIPS_RMI_RMIXL_CPUCOREVAR_H_ */
Index: /trunk/src/sys/arch/mips/rmi/rmixl_cpuvar.h
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_cpuvar.h	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_cpuvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_cpuvar.h,v 1.1.2.2 2010/04/13 18:15:16 cliff Exp $	*/
+/*	$NetBSD: rmixl_cpuvar.h,v 1.1.2.3 2011/02/08 19:50:22 cliff Exp $	*/
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -41,7 +41,4 @@
 	device_t sc_dev;
 	struct cpu_info *sc_ci;
-	void *sc_ih_clk;
-	void *sc_ih_fmn;
-	void *sc_ih_ipi;
 	struct evcnt sc_vec_evcnts[64];
 };
Index: /trunk/src/sys/arch/mips/rmi/rmixl_ehci.c
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_ehci.c	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_ehci.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_ehci.c,v 1.1.2.4 2010/03/21 21:24:48 cliff Exp $	*/
+/*	$NetBSD: rmixl_ehci.c,v 1.1.2.5 2011/04/29 08:26:32 matt Exp $	*/
 
 /*-
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixl_ehci.c,v 1.1.2.4 2010/03/21 21:24:48 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rmixl_ehci.c,v 1.1.2.5 2011/04/29 08:26:32 matt Exp $");
 
 #include "locators.h"
@@ -77,6 +77,7 @@
 rmixl_ehci_attach(device_t parent, device_t self, void *aux)
 {
-	ehci_softc_t *sc = device_private(self);
-	struct rmixl_usbi_attach_args *usbi = aux;
+	ehci_softc_t * const sc = device_private(self);
+	rmixl_usbi_softc_t * const psc = device_private(parent);
+	struct rmixl_usbi_attach_args * const usbi = aux;
 	void *ih = NULL;
 	uint32_t r;
@@ -97,4 +98,16 @@
 	sc->sc_bus.dmatag = usbi->usbi_dmat;
 	sc->sc_bus.usbrev = USBREV_1_0;
+
+	/*
+	 * Grab the companion OHCI devices from our parent.
+	 */
+	if (psc->sc_ohci_devs[1] != NULL) {
+		sc->sc_comps[0] = psc->sc_ohci_devs[0];
+		sc->sc_comps[1] = psc->sc_ohci_devs[1];
+		sc->sc_ncomp = 2;
+	} else {
+		sc->sc_comps[0] = psc->sc_ohci_devs[0];
+		sc->sc_ncomp = 1;
+	}
 
 	if (bus_space_map(sc->iot, usbi->usbi_addr, sc->sc_size, 0, &sc->ioh)) {
Index: /trunk/src/sys/arch/mips/rmi/rmixl_fmn.c
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_fmn.c	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_fmn.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_fmn.c,v 1.1.2.4 2010/04/13 18:15:16 cliff Exp $	*/
+/*	$NetBSD: rmixl_fmn.c,v 1.1.2.7 2011/04/29 08:26:32 matt Exp $	*/
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -33,4 +33,5 @@
 #include <sys/cdefs.h>
 #include <sys/param.h>
+#include <sys/systm.h>
 #include <sys/cpu.h>
 #include <mips/cpuregs.h>
@@ -405,6 +406,7 @@
 	static bool once=false;
 
-	KASSERT(cpu_number() == 0);
-	fmnp = fmn_lookup(cpu_number());
+	KASSERTMSG((CPU_IS_PRIMARY(curcpu())), ("ci=%p, index=%d\n",
+		curcpu(), cpu_index(curcpu())));
+	fmnp = fmn_lookup(curcpu()->ci_cpuid);
 
 	if (once == true)
@@ -481,8 +483,8 @@
 	kmutex_t *lk;
 
-	fmnp = fmn_lookup(cpu_number());
+	fmnp = fmn_lookup(curcpu()->ci_cpuid);
 	KASSERT(fmnp != NULL);
-	KASSERT(fmnp->fmn_core == RMIXL_CPU_CORE(cpu_number()));
-	KASSERT(fmnp->fmn_thread == RMIXL_CPU_THREAD(cpu_number()));
+	KASSERT(fmnp->fmn_core == RMIXL_CPU_CORE(curcpu()->ci_cpuid));
+	KASSERT(fmnp->fmn_thread == RMIXL_CPU_THREAD(curcpu()->ci_cpuid));
 
 	lk = mutex_obj_alloc(MUTEX_DEFAULT, RMIXL_FMN_INTR_IPL);
@@ -634,5 +636,5 @@
 	fmn_t *fmnp;
 
-	fmnp = fmn_lookup(cpu_number());
+	fmnp = fmn_lookup(curcpu()->ci_cpuid);
 	mutex_enter(fmnp->fmn_lock);
 
@@ -645,8 +647,13 @@
 	 * establish dispatcher for FMN interrupt
 	 */
-	void *ih = rmixl_vec_establish(RMIXL_INTRVEC_FMN, -1, RMIXL_FMN_INTR_IPL,
+	extern kmutex_t rmixl_intr_lock;
+	void *ih;
+
+	mutex_enter(&rmixl_intr_lock);
+	ih = rmixl_vec_establish(RMIXL_INTRVEC_FMN, -1, RMIXL_FMN_INTR_IPL,
 		rmixl_fmn_intr_dispatch, fmnp, "fmn");
 	if (ih == NULL)
 		panic("%s: rmixl_vec_establish failed", __func__);
+	mutex_exit(&rmixl_intr_lock);
 	fmnp->fmn_ih = ih;
 #endif
@@ -661,5 +668,5 @@
 	fmn_intrhand_t *ih;
 
-	fmnp = fmn_lookup(cpu_number());
+	fmnp = fmn_lookup(curcpu()->ci_cpuid);
 
 	mutex_enter(fmnp->fmn_lock);
@@ -688,5 +695,5 @@
 	fmn_intrhand_t *ih = cookie;
 
-	fmnp = fmn_lookup(cpu_number());
+	fmnp = fmn_lookup(curcpu()->ci_cpuid);
 	mutex_enter(fmnp->fmn_lock);
 
@@ -782,5 +789,5 @@
 	KASSERT(dest_id <= 0xff);
 
-	fmnp = fmn_lookup(cpu_number());
+	fmnp = fmn_lookup(curcpu()->ci_cpuid);
 	mutex_enter(fmnp->fmn_lock);
         cp0_status = rmixl_cp2_enable();
@@ -817,5 +824,5 @@
 		DELAY(10);		/* XXX ??? */
 	}
-	DIAG_PRF(("%s: cpu=%ld, msg %p, dst_id=%d, sts=%#x: can't send\n",
+	DIAG_PRF(("%s: cpu%u, msg %p, dst_id=%d, sts=%#x: can't send\n",
 		__func__, cpu_number(), msg, dest_id, msg_status));
 	rv = -1;
@@ -823,5 +830,5 @@
  send:
 	desc = RMIXL_MSGSND_DESC(size, code, dest_id);
-	DPRINTF(("%s: cpu %ld, desc %#x\n", __func__, cpu_number(), desc));
+	DPRINTF(("%s: cpu%u, desc %#x\n", __func__, cpu_number(), desc));
 	for (int try=16; try--; ) {
 		rmixl_msgsnd(desc);
@@ -849,5 +856,5 @@
 		}
 		DIAG_PRF(("%s: src=%ld, dst=%d, sts=%#x, %#x: send error, try %d\n",
-			__func__, cpu_number(), dest_id, msg_status, msg_status1, try));
+			__func__, curcpu()->ci_cpuid, dest_id, msg_status, msg_status1, try));
 		DELAY(10);
 	}
@@ -872,5 +879,5 @@
 	int rv;
 
-	fmnp = fmn_lookup(cpu_number());
+	fmnp = fmn_lookup(curcpu()->ci_cpuid);
 	mutex_enter(fmnp->fmn_lock);
 	rv = rmixl_fmn_msg_recv_subr(bucket, rxmsg);
@@ -893,5 +900,5 @@
 	int rv;
 
-	fmnp = fmn_lookup(cpu_number());
+	fmnp = fmn_lookup(curcpu()->ci_cpuid);
 	KASSERT(mutex_owned(fmnp->fmn_lock) != 0);
 
@@ -901,5 +908,5 @@
 			goto recv;
 	}
-	DIAG_PRF(("%s: cpu=%ld, bucket=%d, sts=%#x: Load Pending Fail\n",
+	DIAG_PRF(("%s: cpu%u, bucket=%d, sts=%#x: Load Pending Fail\n",
 		__func__, cpu_number(), bucket, msg_status));
 	rv = -1;
@@ -908,5 +915,5 @@
 	rmixl_msgld(bucket);
 	RMIXL_MFC2(RMIXL_COP_2_MSG_STS, 0, msg_status);
-	DPRINTF(("%s: cpu=%ld, bucket=%d, sts=%#x\n",
+	DPRINTF(("%s: cpu%u, bucket=%d, sts=%#x\n",
 		__func__, cpu_number(), bucket, msg_status));
 	rv = msg_status & (RMIXL_MSG_STS0_LEF|RMIXL_MSG_STS0_LPF);
@@ -1142,5 +1149,5 @@
 	FMN_CP2_4SEL_READ(RMIXL_COP_2_CREDITS+3, 4, &cc[3][4]);
 
-	printf("%s: cpu %ld\n", __func__, cpu_number());
+	printf("%s: cpu%u\n", __func__, cpu_number());
 	for (int i=0; i < 4; i++) {
 		for (int j=0; j < 8; j++)
Index: /trunk/src/sys/arch/mips/rmi/rmixl_fmnvar.h
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_fmnvar.h	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_fmnvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$Id: rmixl_fmnvar.h,v 1.1.2.3 2010/04/13 18:15:16 cliff Exp $	*/
+/*	$Id: rmixl_fmnvar.h,v 1.1.2.4 2011/04/29 08:26:32 matt Exp $	*/
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -151,5 +151,5 @@
 		".set push"		"\n\t"
 		".set noreorder"	"\n\t"
-		".set mips64"		"\n\t"
+		".set arch=xlr"		"\n\t"
 		"sync"			"\n\t"
 		"msgsnd %0"		"\n\t"
@@ -164,5 +164,5 @@
 		".set push"		"\n\t"
 		".set noreorder"	"\n\t"
-		".set mips64"		"\n\t"
+		".set arch=xlr"		"\n\t"
 		"msgld %0"		"\n\t"
 		".set pop"		"\n\t"
@@ -180,5 +180,5 @@
 		".set push"		"\n\t"
 		".set noreorder"	"\n\t"
-		".set mips64"		"\n\t"
+		".set arch=xlr"		"\n\t"
 		"addu %0,%0,0"		"\n\t"
 		"msgwait %0"		"\n\t"
Index: /trunk/src/sys/arch/mips/rmi/rmixl_intr.c
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_intr.c	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_intr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_intr.c,v 1.1.2.19 2010/05/06 20:48:39 cliff Exp $	*/
+/*	$NetBSD: rmixl_intr.c,v 1.1.2.30 2011/04/29 08:26:32 matt Exp $	*/
 
 /*-
@@ -65,7 +65,8 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixl_intr.c,v 1.1.2.19 2010/05/06 20:48:39 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rmixl_intr.c,v 1.1.2.30 2011/04/29 08:26:32 matt Exp $");
 
 #include "opt_ddb.h"
+#include "opt_multiprocessor.h"
 #define	__INTR_PRIVATE
 
@@ -77,4 +78,5 @@
 #include <sys/kernel.h>
 #include <sys/atomic.h>
+#include <sys/mutex.h>
 #include <sys/cpu.h>
 
@@ -83,4 +85,5 @@
 
 #include <mips/cpu.h>
+#include <mips/cpuset.h>
 #include <mips/locore.h>
 
@@ -94,5 +97,5 @@
 #include <dev/pci/pcivar.h>
 
-// #define IOINTR_DEBUG	1
+//#define IOINTR_DEBUG 1
 #ifdef IOINTR_DEBUG
 int iointr_debug = IOINTR_DEBUG;
@@ -117,5 +120,5 @@
  * IRT assignments depends on the RMI chip family
  * (XLS1xx vs. XLS2xx vs. XLS3xx vs. XLS6xx)
- * use the right irq (and display string table) for the CPU that's running.
+ * use the right display string table for the CPU that's running.
  */
 
@@ -125,36 +128,36 @@
  */
 static const char * const rmixl_irtnames_xlrxxx[NIRTS] = {
-	"int 0 (watchdog)",	/*  0 */
-	"int 1 (timer0)",	/*  1 */
-	"int 2 (timer1)",	/*  2 */
-	"int 3 (timer2)",	/*  3 */
-	"int 4 (timer3)",	/*  4 */
-	"int 5 (timer4)",	/*  5 */
-	"int 6 (timer5)",	/*  6 */
-	"int 7 (timer6)",	/*  7 */
-	"int 8 (timer7)",	/*  8 */
-	"int 9 (uart0)",	/*  9 */
-	"int 10 (uart1)",	/* 10 */
-	"int 11 (i2c0)",	/* 11 */
-	"int 12 (i2c1)",	/* 12 */
-	"int 13 (pcmcia)",	/* 13 */
-	"int 14 (gpio)",	/* 14 */
-	"int 15 (hyper)",	/* 15 */
-	"int 16 (pcix)",	/* 16 */
-	"int 17 (gmac0)",	/* 17 */
-	"int 18 (gmac1)",	/* 18 */
-	"int 19 (gmac2)",	/* 19 */
-	"int 20 (gmac3)",	/* 20 */
-	"int 21 (xgs0)",	/* 21 */
-	"int 22 (xgs1)",	/* 22 */
-	"int 23 (irq23)",	/* 23 */
-	"int 24 (hyper_fatal)",	/* 24 */
-	"int 25 (bridge_aerr)",	/* 25 */
-	"int 26 (bridge_berr)",	/* 26 */
-	"int 27 (bridge_tb)",	/* 27 */
-	"int 28 (bridge_nmi)",	/* 28 */
-	"int 29 (bridge_sram_derr)",	/* 29 */
-	"int 30 (gpio_fatal)",	/* 30 */
-	"int 31 (reserved)",	/* 31 */
+	"pic int 0 (watchdog)",		/*  0 */
+	"pic int 1 (timer0)",		/*  1 */
+	"pic int 2 (timer1)",		/*  2 */
+	"pic int 3 (timer2)",		/*  3 */
+	"pic int 4 (timer3)",		/*  4 */
+	"pic int 5 (timer4)",		/*  5 */
+	"pic int 6 (timer5)",		/*  6 */
+	"pic int 7 (timer6)",		/*  7 */
+	"pic int 8 (timer7)",		/*  8 */
+	"pic int 9 (uart0)",		/*  9 */
+	"pic int 10 (uart1)",		/* 10 */
+	"pic int 11 (i2c0)",		/* 11 */
+	"pic int 12 (i2c1)",		/* 12 */
+	"pic int 13 (pcmcia)",		/* 13 */
+	"pic int 14 (gpio)",		/* 14 */
+	"pic int 15 (hyper)",		/* 15 */
+	"pic int 16 (pcix)",		/* 16 */
+	"pic int 17 (gmac0)",		/* 17 */
+	"pic int 18 (gmac1)",		/* 18 */
+	"pic int 19 (gmac2)",		/* 19 */
+	"pic int 20 (gmac3)",		/* 20 */
+	"pic int 21 (xgs0)",		/* 21 */
+	"pic int 22 (xgs1)",		/* 22 */
+	"pic int 23 (irq23)",		/* 23 */
+	"pic int 24 (hyper_fatal)",	/* 24 */
+	"pic int 25 (bridge_aerr)",	/* 25 */
+	"pic int 26 (bridge_berr)",	/* 26 */
+	"pic int 27 (bridge_tb)",	/* 27 */
+	"pic int 28 (bridge_nmi)",	/* 28 */
+	"pic int 29 (bridge_sram_derr)",/* 29 */
+	"pic int 30 (gpio_fatal)",	/* 30 */
+	"pic int 31 (reserved)",	/* 31 */
 };
 
@@ -164,36 +167,36 @@
  */
 static const char * const rmixl_irtnames_xls2xx[NIRTS] = {
-	"int 0 (watchdog)",	/*  0 */
-	"int 1 (timer0)",	/*  1 */
-	"int 2 (timer1)",	/*  2 */
-	"int 3 (timer2)",	/*  3 */
-	"int 4 (timer3)",	/*  4 */
-	"int 5 (timer4)",	/*  5 */
-	"int 6 (timer5)",	/*  6 */
-	"int 7 (timer6)",	/*  7 */
-	"int 8 (timer7)",	/*  8 */
-	"int 9 (uart0)",	/*  9 */
-	"int 10 (uart1)",	/* 10 */
-	"int 11 (i2c0)",	/* 11 */
-	"int 12 (i2c1)",	/* 12 */
-	"int 13 (pcmcia)",	/* 13 */
-	"int 14 (gpio_a)",	/* 14 */
-	"int 15 (irq15)",	/* 15 */
-	"int 16 (bridge_tb)",	/* 16 */
-	"int 17 (gmac0)",	/* 17 */
-	"int 18 (gmac1)",	/* 18 */
-	"int 19 (gmac2)",	/* 19 */
-	"int 20 (gmac3)",	/* 20 */
-	"int 21 (irq21)",	/* 21 */
-	"int 22 (irq22)",	/* 22 */
-	"int 23 (pcie_link2)",	/* 23 */
-	"int 24 (pcie_link3)",	/* 24 */
-	"int 25 (bridge_err)",	/* 25 */
-	"int 26 (pcie_link0)",	/* 26 */
-	"int 27 (pcie_link1)",	/* 27 */
-	"int 28 (irq28)",	/* 28 */
-	"int 29 (pcie_err)",	/* 29 */
-	"int 30 (gpio_b)",	/* 30 */
-	"int 31 (usb)",		/* 31 */
+	"pic int 0 (watchdog)",		/*  0 */
+	"pic int 1 (timer0)",		/*  1 */
+	"pic int 2 (timer1)",		/*  2 */
+	"pic int 3 (timer2)",		/*  3 */
+	"pic int 4 (timer3)",		/*  4 */
+	"pic int 5 (timer4)",		/*  5 */
+	"pic int 6 (timer5)",		/*  6 */
+	"pic int 7 (timer6)",		/*  7 */
+	"pic int 8 (timer7)",		/*  8 */
+	"pic int 9 (uart0)",		/*  9 */
+	"pic int 10 (uart1)",		/* 10 */
+	"pic int 11 (i2c0)",		/* 11 */
+	"pic int 12 (i2c1)",		/* 12 */
+	"pic int 13 (pcmcia)",		/* 13 */
+	"pic int 14 (gpio_a)",		/* 14 */
+	"pic int 15 (irq15)",		/* 15 */
+	"pic int 16 (bridge_tb)",	/* 16 */
+	"pic int 17 (gmac0)",		/* 17 */
+	"pic int 18 (gmac1)",		/* 18 */
+	"pic int 19 (gmac2)",		/* 19 */
+	"pic int 20 (gmac3)",		/* 20 */
+	"pic int 21 (irq21)",		/* 21 */
+	"pic int 22 (irq22)",		/* 22 */
+	"pic int 23 (pcie_link2)",	/* 23 */
+	"pic int 24 (pcie_link3)",	/* 24 */
+	"pic int 25 (bridge_err)",	/* 25 */
+	"pic int 26 (pcie_link0)",	/* 26 */
+	"pic int 27 (pcie_link1)",	/* 27 */
+	"pic int 28 (irq28)",		/* 28 */
+	"pic int 29 (pcie_err)",	/* 29 */
+	"pic int 30 (gpio_b)",		/* 30 */
+	"pic int 31 (usb)",		/* 31 */
 };
 
@@ -203,36 +206,36 @@
  */
 static const char * const rmixl_irtnames_xls1xx[NIRTS] = {
-	"int 0 (watchdog)",	/*  0 */
-	"int 1 (timer0)",	/*  1 */
-	"int 2 (timer1)",	/*  2 */
-	"int 3 (timer2)",	/*  3 */
-	"int 4 (timer3)",	/*  4 */
-	"int 5 (timer4)",	/*  5 */
-	"int 6 (timer5)",	/*  6 */
-	"int 7 (timer6)",	/*  7 */
-	"int 8 (timer7)",	/*  8 */
-	"int 9 (uart0)",	/*  9 */
-	"int 10 (uart1)",	/* 10 */
-	"int 11 (i2c0)",	/* 11 */
-	"int 12 (i2c1)",	/* 12 */
-	"int 13 (pcmcia)",	/* 13 */
-	"int 14 (gpio_a)",	/* 14 */
-	"int 15 (irq15)",	/* 15 */
-	"int 16 (bridge_tb)",	/* 16 */
-	"int 17 (gmac0)",	/* 17 */
-	"int 18 (gmac1)",	/* 18 */
-	"int 19 (gmac2)",	/* 19 */
-	"int 20 (gmac3)",	/* 20 */
-	"int 21 (irq21)",	/* 21 */
-	"int 22 (irq22)",	/* 22 */
-	"int 23 (irq23)",	/* 23 */
-	"int 24 (irq24)",	/* 24 */
-	"int 25 (bridge_err)",	/* 25 */
-	"int 26 (pcie_link0)",	/* 26 */
-	"int 27 (pcie_link1)",	/* 27 */
-	"int 28 (irq28)",	/* 28 */
-	"int 29 (pcie_err)",	/* 29 */
-	"int 30 (gpio_b)",	/* 30 */
-	"int 31 (usb)",		/* 31 */
+	"pic int 0 (watchdog)",		/*  0 */
+	"pic int 1 (timer0)",		/*  1 */
+	"pic int 2 (timer1)",		/*  2 */
+	"pic int 3 (timer2)",		/*  3 */
+	"pic int 4 (timer3)",		/*  4 */
+	"pic int 5 (timer4)",		/*  5 */
+	"pic int 6 (timer5)",		/*  6 */
+	"pic int 7 (timer6)",		/*  7 */
+	"pic int 8 (timer7)",		/*  8 */
+	"pic int 9 (uart0)",		/*  9 */
+	"pic int 10 (uart1)",		/* 10 */
+	"pic int 11 (i2c0)",		/* 11 */
+	"pic int 12 (i2c1)",		/* 12 */
+	"pic int 13 (pcmcia)",		/* 13 */
+	"pic int 14 (gpio_a)",		/* 14 */
+	"pic int 15 (irq15)",		/* 15 */
+	"pic int 16 (bridge_tb)",	/* 16 */
+	"pic int 17 (gmac0)",		/* 17 */
+	"pic int 18 (gmac1)",		/* 18 */
+	"pic int 19 (gmac2)",		/* 19 */
+	"pic int 20 (gmac3)",		/* 20 */
+	"pic int 21 (irq21)",		/* 21 */
+	"pic int 22 (irq22)",		/* 22 */
+	"pic int 23 (irq23)",		/* 23 */
+	"pic int 24 (irq24)",		/* 24 */
+	"pic int 25 (bridge_err)",	/* 25 */
+	"pic int 26 (pcie_link0)",	/* 26 */
+	"pic int 27 (pcie_link1)",	/* 27 */
+	"pic int 28 (irq28)",		/* 28 */
+	"pic int 29 (pcie_err)",	/* 29 */
+	"pic int 30 (gpio_b)",		/* 30 */
+	"pic int 31 (usb)",		/* 31 */
 };
 
@@ -242,36 +245,36 @@
  */
 static const char * const rmixl_irtnames_xls4xx[NIRTS] = {
-	"int 0 (watchdog)",	/*  0 */
-	"int 1 (timer0)",	/*  1 */
-	"int 2 (timer1)",	/*  2 */
-	"int 3 (timer2)",	/*  3 */
-	"int 4 (timer3)",	/*  4 */
-	"int 5 (timer4)",	/*  5 */
-	"int 6 (timer5)",	/*  6 */
-	"int 7 (timer6)",	/*  7 */
-	"int 8 (timer7)",	/*  8 */
-	"int 9 (uart0)",	/*  9 */
-	"int 10 (uart1)",	/* 10 */
-	"int 11 (i2c0)",	/* 11 */
-	"int 12 (i2c1)",	/* 12 */
-	"int 13 (pcmcia)",	/* 13 */
-	"int 14 (gpio_a)",	/* 14 */
-	"int 15 (irq15)",	/* 15 */
-	"int 16 (bridge_tb)",	/* 16 */
-	"int 17 (gmac0)",	/* 17 */
-	"int 18 (gmac1)",	/* 18 */
-	"int 19 (gmac2)",	/* 19 */
-	"int 20 (gmac3)",	/* 20 */
-	"int 21 (irq21)",	/* 21 */
-	"int 22 (irq22)",	/* 22 */
-	"int 23 (irq23)",	/* 23 */
-	"int 24 (irq24)",	/* 24 */
-	"int 25 (bridge_err)",	/* 25 */
-	"int 26 (pcie_link0)",	/* 26 */
-	"int 27 (pcie_link1)",	/* 27 */
-	"int 28 (pcie_link2)",	/* 28 */
-	"int 29 (pcie_link3)",	/* 29 */
-	"int 30 (gpio_b)",	/* 30 */
-	"int 31 (usb)",		/* 31 */
+	"pic int 0 (watchdog)",		/*  0 */
+	"pic int 1 (timer0)",		/*  1 */
+	"pic int 2 (timer1)",		/*  2 */
+	"pic int 3 (timer2)",		/*  3 */
+	"pic int 4 (timer3)",		/*  4 */
+	"pic int 5 (timer4)",		/*  5 */
+	"pic int 6 (timer5)",		/*  6 */
+	"pic int 7 (timer6)",		/*  7 */
+	"pic int 8 (timer7)",		/*  8 */
+	"pic int 9 (uart0)",		/*  9 */
+	"pic int 10 (uart1)",		/* 10 */
+	"pic int 11 (i2c0)",		/* 11 */
+	"pic int 12 (i2c1)",		/* 12 */
+	"pic int 13 (pcmcia)",		/* 13 */
+	"pic int 14 (gpio_a)",		/* 14 */
+	"pic int 15 (irq15)",		/* 15 */
+	"pic int 16 (bridge_tb)",	/* 16 */
+	"pic int 17 (gmac0)",		/* 17 */
+	"pic int 18 (gmac1)",		/* 18 */
+	"pic int 19 (gmac2)",		/* 19 */
+	"pic int 20 (gmac3)",		/* 20 */
+	"pic int 21 (irq21)",		/* 21 */
+	"pic int 22 (irq22)",		/* 22 */
+	"pic int 23 (irq23)",		/* 23 */
+	"pic int 24 (irq24)",		/* 24 */
+	"pic int 25 (bridge_err)",	/* 25 */
+	"pic int 26 (pcie_link0)",	/* 26 */
+	"pic int 27 (pcie_link1)",	/* 27 */
+	"pic int 28 (pcie_link2)",	/* 28 */
+	"pic int 29 (pcie_link3)",	/* 29 */
+	"pic int 30 (gpio_b)",		/* 30 */
+	"pic int 31 (usb)",		/* 31 */
 };
 
@@ -282,68 +285,68 @@
  */
 static const char * const rmixl_vecnames_common[NINTRVECS] = {
-	"int 0",	/*  0 */
-	"int 1",	/*  1 */
-	"int 2",	/*  2 */
-	"int 3",	/*  3 */
-	"int 4",	/*  4 */
-	"int 5",	/*  5 */
-	"int 6",	/*  6 */
-	"int 7",	/*  7 */
-	"int 8",	/*  8 */
-	"int 9",	/*  9 */
-	"int 10",	/* 10 */
-	"int 11",	/* 11 */
-	"int 12",	/* 12 */
-	"int 13",	/* 13 */
-	"int 14",	/* 14 */
-	"int 15",	/* 15 */
-	"int 16",	/* 16 */
-	"int 17",	/* 17 */
-	"int 18",	/* 18 */
-	"int 19",	/* 19 */
-	"int 20",	/* 20 */
-	"int 21",	/* 21 */
-	"int 22",	/* 22 */
-	"int 23",	/* 23 */
-	"int 24",	/* 24 */
-	"int 25",	/* 25 */
-	"int 26",	/* 26 */
-	"int 27",	/* 27 */
-	"int 28",	/* 28 */
-	"int 29",	/* 29 */
-	"int 30",	/* 30 */
-	"int 31",	/* 31 */
-	"int 32 (ipi)",	/* 32 */
-	"int 33 (fmn)",	/* 33 */
-	"int 34",	/* 34 */
-	"int 35",	/* 35 */
-	"int 36",	/* 36 */
-	"int 37",	/* 37 */
-	"int 38",	/* 38 */
-	"int 39",	/* 39 */
-	"int 40",	/* 40 */
-	"int 41",	/* 41 */
-	"int 42",	/* 42 */
-	"int 43",	/* 43 */
-	"int 44",	/* 44 */
-	"int 45",	/* 45 */
-	"int 46",	/* 46 */
-	"int 47",	/* 47 */
-	"int 48",	/* 48 */
-	"int 49",	/* 49 */
-	"int 50",	/* 50 */
-	"int 51",	/* 51 */
-	"int 52",	/* 52 */
-	"int 53",	/* 53 */
-	"int 54",	/* 54 */
-	"int 55",	/* 55 */
-	"int 56",	/* 56 */
-	"int 57",	/* 57 */
-	"int 58",	/* 58 */
-	"int 59",	/* 59 */
-	"int 60",	/* 60 */
-	"int 61",	/* 61 */
-	"int 62",	/* 63 */
-	"int 63",	/* 63 */
+	"vec 0",		/*  0 */
+	"vec 1",		/*  1 */
+	"vec 2",		/*  2 */
+	"vec 3",		/*  3 */
+	"vec 4",		/*  4 */
+	"vec 5",		/*  5 */
+	"vec 6",		/*  6 */
+	"vec 7",		/*  7 */
+	"vec 8 (ipi 0)",	/*  8 */
+	"vec 9 (ipi 1)",	/*  9 */
+	"vec 10 (ipi 2)",	/* 10 */
+	"vec 11 (ipi 3)",	/* 11 */
+	"vec 12 (ipi 4)",	/* 12 */
+	"vec 13 (ipi 5)",	/* 13 */
+	"vec 14 (ipi 6)",	/* 14 */
+	"vec 15 (fmn)",		/* 15 */
+	"vec 16",		/* 16 */
+	"vec 17",		/* 17 */
+	"vec 18",		/* 18 */
+	"vec 19",		/* 19 */
+	"vec 20",		/* 20 */
+	"vec 21",		/* 21 */
+	"vec 22",		/* 22 */
+	"vec 23",		/* 23 */
+	"vec 24",		/* 24 */
+	"vec 25",		/* 25 */
+	"vec 26",		/* 26 */
+	"vec 27",		/* 27 */
+	"vec 28",		/* 28 */
+	"vec 29",		/* 29 */
+	"vec 30",		/* 30 */
+	"vec 31",		/* 31 */
+	"vec 32",		/* 32 */
+	"vec 33",		/* 33 */
+	"vec 34",		/* 34 */
+	"vec 35",		/* 35 */
+	"vec 36",		/* 36 */
+	"vec 37",		/* 37 */
+	"vec 38",		/* 38 */
+	"vec 39",		/* 39 */
+	"vec 40",		/* 40 */
+	"vec 41",		/* 41 */
+	"vec 42",		/* 42 */
+	"vec 43",		/* 43 */
+	"vec 44",		/* 44 */
+	"vec 45",		/* 45 */
+	"vec 46",		/* 46 */
+	"vec 47",		/* 47 */
+	"vec 48",		/* 48 */
+	"vec 49",		/* 49 */
+	"vec 50",		/* 50 */
+	"vec 51",		/* 51 */
+	"vec 52",		/* 52 */
+	"vec 53",		/* 53 */
+	"vec 54",		/* 54 */
+	"vec 55",		/* 55 */
+	"vec 56",		/* 56 */
+	"vec 57",		/* 57 */
+	"vec 58",		/* 58 */
+	"vec 59",		/* 59 */
+	"vec 60",		/* 60 */
+	"vec 61",		/* 61 */
+	"vec 62",		/* 63 */
+	"vec 63",		/* 63 */
 };
 
@@ -354,4 +357,6 @@
 static uint32_t cpu_present_mask;
 
+kmutex_t *rmixl_ipi_lock;  /* covers RMIXL_PIC_IPIBASE */
+kmutex_t *rmixl_intr_lock; /* covers rest of PIC, and rmixl_intrhand[] */
 rmixl_intrhand_t rmixl_intrhand[NINTRVECS];
 
@@ -366,5 +371,5 @@
 static void rmixl_irt_init(int);
 static void rmixl_irt_disestablish(int);
-static void rmixl_irt_establish(int, int,
+static void rmixl_irt_establish(int, int, int,
 		rmixl_intr_trigger_t, rmixl_intr_polarity_t);
 
@@ -374,8 +379,9 @@
 #endif
 
-#if defined(IOINTR_DEBUG) || defined(DIAGNOSTIC)
-int rmixl_intrhand_print_subr(int);
-int rmixl_intrhand_print(void);
-int rmixl_irt_print(void);
+#if defined(DIAGNOSTIC) || defined(IOINTR_DEBUG) || defined(DDB)
+int  rmixl_intrhand_print_subr(int);
+int  rmixl_intrhand_print(void);
+int  rmixl_irt_print(void);
+void rmixl_ipl_eimr_map_print(void);
 #endif
 
@@ -392,18 +398,4 @@
 }
 
-static inline void
-rmixl_irt_entry_print(u_int irq)
-{
-#if defined(IOINTR_DEBUG) || defined(DDB)
-	uint32_t c0, c1;
-
-	if ((irq < 0) || (irq > NIRTS))
-		return;
-	c0 = RMIXL_PICREG_READ(RMIXL_PIC_IRTENTRYC0(irq));
-	c1 = RMIXL_PICREG_READ(RMIXL_PIC_IRTENTRYC1(irq));
-	printf("irt[%d]: %#x, %#x\n", irq, c0, c1);
-#endif
-}
-
 void
 evbmips_intr_init(void)
@@ -414,18 +406,4 @@
 	     || cpu_rmixls(mips_options.mips_cpu));
 
-#ifdef IOINTR_DEBUG
-	printf("IPL_NONE=%d, mask %#"PRIx64"\n",
-		IPL_NONE, ipl_eimr_map[IPL_NONE]);
-	printf("IPL_SOFTCLOCK=%d, mask %#"PRIx64"\n",
-		IPL_SOFTCLOCK, ipl_eimr_map[IPL_SOFTCLOCK]);
-	printf("IPL_SOFTNET=%d, mask %#"PRIx64"\n",
-		IPL_SOFTNET, ipl_eimr_map[IPL_SOFTNET]);
-	printf("IPL_VM=%d, mask %#"PRIx64"\n",
-		IPL_VM, ipl_eimr_map[IPL_VM]);
-	printf("IPL_SCHED=%d, mask %#"PRIx64"\n",
-		IPL_SCHED, ipl_eimr_map[IPL_HIGH]);
-	printf("IPL_HIGH=%d, mask %#"PRIx64"\n",
-		IPL_HIGH, ipl_eimr_map[IPL_NONE]);
-#endif
 
 #ifdef DIAGNOSTIC
@@ -435,9 +413,15 @@
 #endif
 
+	rmixl_ipi_lock  = mutex_obj_alloc(MUTEX_DEFAULT, IPL_HIGH);
+	rmixl_intr_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_HIGH);
+
+	mutex_enter(rmixl_intr_lock);
+
 	/*
 	 * initialize (zero) all IRT Entries in the PIC
 	 */
-	for (int i=0; i < NIRTS; i++)
+	for (u_int i = 0; i < NIRTS; i++) {
 		rmixl_irt_init(i);
+	}
 
 	/*
@@ -455,4 +439,5 @@
 	rmixl_pic_init_done = 1;
 #endif
+	mutex_exit(rmixl_intr_lock);
 
 }
@@ -464,13 +449,16 @@
  * note the 'mpsafe' arg here is a placeholder only
  */
-void *
+void
 rmixl_intr_init_clk(void)
 {
-	int vec = ffs(MIPS_INT_MASK_5 >> 8) - 1;
+	const int vec = ffs(MIPS_INT_MASK_5 >> MIPS_INT_MASK_SHIFT) - 1;
+
+	mutex_enter(rmixl_intr_lock);
+
 	void *ih = rmixl_vec_establish(vec, 0, IPL_SCHED, NULL, NULL, false);
 	if (ih == NULL)
 		panic("%s: establish vec %d failed", __func__, vec);
-	
-	return ih;
+
+	mutex_exit(rmixl_intr_lock);
 }
 
@@ -479,16 +467,21 @@
  * establish IPI interrupt and send function
  */
-void *
+void
 rmixl_intr_init_ipi(void)
 {
-	void *ih = rmixl_vec_establish(RMIXL_INTRVEC_IPI, -1, IPL_SCHED,
-		rmixl_ipi_intr, NULL, false);
-	if (ih == NULL)
-		panic("%s: establish vec %d failed",
-			__func__, RMIXL_INTRVEC_IPI);
+	mutex_enter(rmixl_intr_lock);
+
+	for (u_int ipi = 0; ipi < NIPIS; ipi++) {
+		const u_int vec = RMIXL_INTRVEC_IPI + ipi;
+		void * const ih = rmixl_vec_establish(vec, -1, IPL_SCHED,
+			rmixl_ipi_intr, (void *)(uintptr_t)ipi, true);
+		if (ih == NULL)
+			panic("%s: establish ipi %d at vec %d failed",
+				__func__, ipi, vec);
+	}
 
 	mips_locoresw.lsw_send_ipi = rmixl_send_ipi;
 
-	return ih;
+	mutex_exit(rmixl_intr_lock);
 }
 #endif 	/* MULTIPROCESSOR */
@@ -502,9 +495,6 @@
 {
 	struct rmixl_cpu_softc *sc = (void *)ci->ci_softc;
+
 	KASSERT(sc != NULL);
-
-	/* zero the EIRR ? */
-	uint64_t eirr = 0;
-	asm volatile("dmtc0 %0, $9, 6;" :: "r"(eirr));
 
 	for (int vec=0; vec < NINTRVECS; vec++)
@@ -514,6 +504,6 @@
 			rmixl_intr_string(vec));
 
-	KASSERT(ci->ci_cpuid < (sizeof(cpu_present_mask) * 8));
-	cpu_present_mask |= 1 << ci->ci_cpuid;
+	KASSERT(cpu_index(ci) < (sizeof(cpu_present_mask) * 8));
+	atomic_or_32((volatile uint32_t *)&cpu_present_mask, 1 << cpu_index(ci));
 }
 
@@ -522,18 +512,21 @@
  */
 const char *
-rmixl_intr_string(int irq)
-{
-	if (irq < 0 || irq >= NINTRVECS)
-		panic("%s: irq index %d out of range, max %d",
-			__func__, irq, NIRTS - 1);
-
-	if (irq >= NIRTS)
-		return rmixl_vecnames_common[irq];
-
+rmixl_intr_string(int vec)
+{
+	int irt;
+
+	if (vec < 0 || vec >= NINTRVECS)
+		panic("%s: vec index %d out of range, max %d",
+			__func__, vec, NINTRVECS - 1);
+
+	if (! RMIXL_VECTOR_IS_IRT(vec))
+		return rmixl_vecnames_common[vec];
+
+	irt = RMIXL_VECTOR_IRT(vec);
 	switch(cpu_rmixl_chip_type(mips_options.mips_cpu)) {
 	case CIDFL_RMI_TYPE_XLR:
-		return rmixl_intr_string_xlr(irq);
+		return rmixl_intr_string_xlr(irt);
 	case CIDFL_RMI_TYPE_XLS:
-		return rmixl_intr_string_xls(irq);
+		return rmixl_intr_string_xls(irt);
 	case CIDFL_RMI_TYPE_XLP:
 		panic("%s: RMI XLP not yet supported", __func__);
@@ -544,11 +537,11 @@
 
 static const char *
-rmixl_intr_string_xlr(int irq)
-{
-	return rmixl_irtnames_xlrxxx[irq];
+rmixl_intr_string_xlr(int irt)
+{
+	return rmixl_irtnames_xlrxxx[irt];
 }
 
 static const char *
-rmixl_intr_string_xls(int irq)
+rmixl_intr_string_xls(int irt)
 {
 	const char *name;
@@ -559,9 +552,9 @@
 	case MIPS_XLS404LITE:
 	case MIPS_XLS408LITE:
-		name = rmixl_irtnames_xls1xx[irq];
+		name = rmixl_irtnames_xls1xx[irt];
 		break;
 	case MIPS_XLS204:
 	case MIPS_XLS208:
-		name = rmixl_irtnames_xls2xx[irq];
+		name = rmixl_irtnames_xls2xx[irt];
 		break;
 	case MIPS_XLS404:
@@ -570,8 +563,8 @@
 	case MIPS_XLS608:
 	case MIPS_XLS616:
-		name = rmixl_irtnames_xls4xx[irq];
+		name = rmixl_irtnames_xls4xx[irt];
 		break;
 	default:
-		name = rmixl_vecnames_common[irq];
+		name = rmixl_vecnames_common[RMIXL_IRT_VECTOR(irt)];
 		break;
 	}
@@ -633,36 +626,45 @@
 /*
  * rmixl_irt_init
- * - invalidate IRT Entry for irq
+ * - initialize IRT Entry for given index
  * - unmask Thread#0 in low word (assume we only have 1 thread)
  */
 static void
-rmixl_irt_init(int irq)
-{
-	RMIXL_PICREG_WRITE(RMIXL_PIC_IRTENTRYC1(irq), 0);	/* high word */
-	RMIXL_PICREG_WRITE(RMIXL_PIC_IRTENTRYC0(irq), 0);	/* low  word */
+rmixl_irt_init(int irt)
+{
+	KASSERT(irt < NIRTS);
+	RMIXL_PICREG_WRITE(RMIXL_PIC_IRTENTRYC1(irt), 0);	/* high word */
+	RMIXL_PICREG_WRITE(RMIXL_PIC_IRTENTRYC0(irt), 0);	/* low  word */
 }
 
 /*
  * rmixl_irt_disestablish
- * - invalidate IRT Entry for irq
- * - writes to IRTENTRYC1 only; leave IRTENTRYC0 as-is
+ * - invalidate IRT Entry for given index
  */
 static void
-rmixl_irt_disestablish(int irq)
-{
-	DPRINTF(("%s: irq %d, irtc1 %#x\n", __func__, irq, 0));
-	rmixl_irt_init(irq);
+rmixl_irt_disestablish(int irt)
+{
+	KASSERT(mutex_owned(rmixl_intr_lock));
+	DPRINTF(("%s: irt %d, irtc1 %#x\n", __func__, irt, 0));
+	rmixl_irt_init(irt);
 }
 
 /*
  * rmixl_irt_establish
- * - construct an IRT Entry for irq and write to PIC
+ * - construct an IRT Entry for irt and write to PIC
  */
 static void
-rmixl_irt_establish(int irq, int cpumask, rmixl_intr_trigger_t trigger,
+rmixl_irt_establish(int irt, int vec, int cpumask, rmixl_intr_trigger_t trigger,
 	rmixl_intr_polarity_t polarity)
 {
 	uint32_t irtc1;
 	uint32_t irtc0;
+
+	KASSERT(mutex_owned(rmixl_intr_lock));
+
+	if (irt >= NIRTS)
+		panic("%s: bad irt %d\n", __func__, irt);
+
+	if (! RMIXL_VECTOR_IS_IRT(vec))
+		panic("%s: bad vec %d\n", __func__, vec);
 
 	switch (trigger) {
@@ -687,6 +689,6 @@
 	 * XXX IRT entries are not shared
 	 */
-	KASSERT(RMIXL_PICREG_READ(RMIXL_PIC_IRTENTRYC0(irq)) == 0);
-	KASSERT(RMIXL_PICREG_READ(RMIXL_PIC_IRTENTRYC1(irq)) == 0);
+	KASSERT(RMIXL_PICREG_READ(RMIXL_PIC_IRTENTRYC0(irt)) == 0);
+	KASSERT(RMIXL_PICREG_READ(RMIXL_PIC_IRTENTRYC1(irt)) == 0);
 
 	irtc0 = rmixl_irt_thread_mask(cpumask);
@@ -694,20 +696,24 @@
 	irtc1  = RMIXL_PIC_IRTENTRYC1_VALID;
 	irtc1 |= RMIXL_PIC_IRTENTRYC1_GL;	/* local */
+	KASSERT((irtc1 & RMIXL_PIC_IRTENTRYC1_NMI) == 0);
 
 	if (trigger == RMIXL_TRIG_LEVEL)
 		irtc1 |= RMIXL_PIC_IRTENTRYC1_TRG;
+	KASSERT((irtc1 & RMIXL_PIC_IRTENTRYC1_NMI) == 0);
 
 	if ((polarity == RMIXL_POLR_FALLING) || (polarity == RMIXL_POLR_LOW))
 		irtc1 |= RMIXL_PIC_IRTENTRYC1_P;
-
-	irtc1 |= irq;	/* route to vector 'irq' */
+	KASSERT((irtc1 & RMIXL_PIC_IRTENTRYC1_NMI) == 0);
+
+	irtc1 |= vec;			/* vector in EIRR */
+	KASSERT((irtc1 & RMIXL_PIC_IRTENTRYC1_NMI) == 0);
 
 	/*
 	 * write IRT Entry to PIC
 	 */
-	DPRINTF(("%s: irq %d, irtc0 %#x, irtc1 %#x\n",
-		__func__, irq, irtc0, irtc1));
-	RMIXL_PICREG_WRITE(RMIXL_PIC_IRTENTRYC0(irq), irtc0);	/* low  word */
-	RMIXL_PICREG_WRITE(RMIXL_PIC_IRTENTRYC1(irq), irtc1);	/* high word */
+	DPRINTF(("%s: vec %d (%#x), irt %d, irtc0 %#x, irtc1 %#x\n",
+		__func__, vec, vec, irt, irtc0, irtc1));
+	RMIXL_PICREG_WRITE(RMIXL_PIC_IRTENTRYC0(irt), irtc0);	/* low  word */
+	RMIXL_PICREG_WRITE(RMIXL_PIC_IRTENTRYC1(irt), irtc1);	/* high word */
 }
 
@@ -717,9 +723,11 @@
 {
 	rmixl_intrhand_t *ih;
+	uint64_t eimr_bit;
 	int s;
 
-	DPRINTF(("%s: vec %d, cpumask %#x, ipl %d, func %p, arg %p, "
-		"vec %d\n",
-			__func__, vec, cpumask, ipl, func, arg, vec));
+	KASSERT(mutex_owned(rmixl_intr_lock));
+
+	DPRINTF(("%s: vec %d cpumask %#x ipl %d func %p arg %p mpsafe %d\n",
+			__func__, vec, cpumask, ipl, func, arg, mpsafe));
 #ifdef DIAGNOSTIC
 	if (rmixl_pic_init_done == 0)
@@ -740,12 +748,26 @@
 
 	ih = &rmixl_intrhand[vec];
-
-	ih->ih_func = func;
+	if (ih->ih_func != NULL) {
+#ifdef DIAGNOSTIC
+		printf("%s: intrhand[%d] busy\n", __func__, vec);
+#endif
+		splx(s);
+		return NULL;
+	}
+
 	ih->ih_arg = arg;
 	ih->ih_mpsafe = mpsafe;
-	ih->ih_irq = vec;
+	ih->ih_vec = vec;
 	ih->ih_ipl = ipl;
 	ih->ih_cpumask = cpumask;
 
+	eimr_bit = (uint64_t)1 << vec;
+	for (int i=ih->ih_ipl; --i >= 0; ) {
+		KASSERT((ipl_eimr_map[i] & eimr_bit) == 0);
+		ipl_eimr_map[i] |= eimr_bit;
+	}
+
+	ih->ih_func = func;	/* do this last */
+
 	splx(s);
 
@@ -753,11 +775,15 @@
 }
 
+/*
+ * rmixl_intr_establish
+ * - used to establish an IRT-based interrupt only
+ */
 void *
-rmixl_intr_establish(int irq, int cpumask, int ipl,
+rmixl_intr_establish(int irt, int cpumask, int ipl,
 	rmixl_intr_trigger_t trigger, rmixl_intr_polarity_t polarity,
 	int (*func)(void *), void *arg, bool mpsafe)
 {
 	rmixl_intrhand_t *ih;
-	int s;
+	int vec;
 
 #ifdef DIAGNOSTIC
@@ -769,27 +795,28 @@
 	 * check args
 	 */
-	if (irq < 0 || irq >= NINTRVECS)
-		panic("%s: irq %d out of range, max %d",
-			__func__, irq, NIRTS - 1);
+	if (irt < 0 || irt >= NIRTS)
+		panic("%s: irt %d out of range, max %d",
+			__func__, irt, NIRTS - 1);
 	if (ipl <= 0 || ipl >= _IPL_N)
 		panic("%s: ipl %d out of range, min %d, max %d",
 			__func__, ipl, 1, _IPL_N - 1);
 
-	DPRINTF(("%s: irq %d, ipl %d\n", __func__, irq, ipl));
-
-	s = splhigh();
+	vec = RMIXL_IRT_VECTOR(irt);
+
+	DPRINTF(("%s: irt %d, vec %d, ipl %d\n", __func__, irt, vec, ipl));
+
+	mutex_enter(rmixl_intr_lock);
 
 	/*
 	 * establish vector
 	 */
-	ih = rmixl_vec_establish(irq, cpumask, ipl, func, arg, mpsafe);
+	ih = rmixl_vec_establish(vec, cpumask, ipl, func, arg, mpsafe);
 
 	/*
 	 * establish IRT Entry
 	 */
-	if (irq < 32)
-		rmixl_irt_establish(irq, cpumask, trigger, polarity);
-
-	splx(s);
+	rmixl_irt_establish(irt, vec, cpumask, trigger, polarity);
+
+	mutex_exit(rmixl_intr_lock);
 
 	return ih;
@@ -800,13 +827,17 @@
 {
 	rmixl_intrhand_t *ih = cookie;
-	int s;
-
-	KASSERT(ih = &rmixl_intrhand[ih->ih_irq]);
-
-	s = splhigh();
-
-	ih->ih_func = NULL;	/* XXX race */
-
-	splx(s);
+	uint64_t eimr_bit;
+
+	KASSERT(mutex_owned(rmixl_intr_lock));
+	KASSERT(ih->ih_vec < NINTRVECS);
+	KASSERT(ih == &rmixl_intrhand[ih->ih_vec]);
+
+	ih->ih_func = NULL;	/* do this first */
+
+	eimr_bit = (uint64_t)1 << ih->ih_vec;
+	for (int i=ih->ih_ipl; --i >= 0; ) {
+		KASSERT((ipl_eimr_map[i] & eimr_bit) != 0);
+		ipl_eimr_map[i] ^= eimr_bit;
+	}
 }
 
@@ -815,17 +846,15 @@
 {
 	rmixl_intrhand_t *ih = cookie;
-	int vec;
-	int s;
-
-	vec = ih->ih_irq;
-
-	KASSERT(ih = &rmixl_intrhand[vec]);
-
-	s = splhigh();
+	const int vec = ih->ih_vec;
+
+	KASSERT(vec < NINTRVECS);
+	KASSERT(ih == &rmixl_intrhand[vec]);
+
+	mutex_enter(rmixl_intr_lock);
 
 	/*
 	 * disable/invalidate the IRT Entry if needed
 	 */
-	if (vec < 32)
+	if (RMIXL_VECTOR_IS_IRT(vec))
 		rmixl_irt_disestablish(vec);
 
@@ -835,5 +864,5 @@
 	rmixl_vec_disestablish(cookie);
 
-	splx(s);
+	mutex_exit(rmixl_intr_lock);
 }
 
@@ -843,5 +872,5 @@
 	struct rmixl_cpu_softc *sc = (void *)curcpu()->ci_softc;
 
-	DPRINTF(("%s: cpu%ld: ipl %d, pc %#"PRIxVADDR", pending %#x\n",
+	DPRINTF(("%s: cpu%u: ipl %d, pc %#"PRIxVADDR", pending %#x\n",
 		__func__, cpu_number(), ipl, pc, pending));
 
@@ -860,13 +889,20 @@
 
 		asm volatile("dmfc0 %0, $9, 6;" : "=r"(eirr));
+		asm volatile("dmfc0 %0, $9, 7;" : "=r"(eimr));
 
 #ifdef IOINTR_DEBUG
-		asm volatile("dmfc0 %0, $9, 7;" : "=r"(eimr));
-		printf("%s: eirr %#"PRIx64", eimr %#"PRIx64", mask %#"PRIx64"\n",
-			__func__, eirr, eimr, ipl_eimr_map[ipl-1]);
+		printf("%s: cpu%u: eirr %#"PRIx64", eimr %#"PRIx64", mask %#"PRIx64"\n",
+			__func__, cpu_number(), eirr, eimr, ipl_eimr_map[ipl-1]);
 #endif	/* IOINTR_DEBUG */
 
+		/*
+		 * reduce eirr to
+		 * - ints that are enabled at or below this ipl
+		 * - exclude count/compare clock and soft ints
+		 *   they are handled elsewhere
+		 */
 		eirr &= ipl_eimr_map[ipl-1];
-		eirr &= ~(MIPS_SOFT_INT_MASK >> 8);	/* mask off soft ints */
+		eirr &= ~ipl_eimr_map[ipl];
+		eirr &= ~((MIPS_INT_MASK_5 | MIPS_SOFT_INT_MASK) >> 8);
 		if (eirr == 0)
 			break;
@@ -874,19 +910,17 @@
 		vec = 63 - dclz(eirr);
 		ih = &rmixl_intrhand[vec];
-
-		asm volatile("dmfc0 %0, $9, 7;" : "=r"(eimr));
-		asm volatile("dmtc0 $0, $9, 7;");
 		vecbit = 1ULL << vec;
+		KASSERT (ih->ih_ipl == ipl);
 		KASSERT ((vecbit & eimr) == 0);
 		KASSERT ((vecbit & RMIXL_EIRR_PRESERVE_MASK) == 0);
-		asm volatile("dmfc0 %0, $9, 6;" : "=r"(eirr));
-		eirr &= RMIXL_EIRR_PRESERVE_MASK;
-		eirr |= vecbit;
-		asm volatile("dmtc0 %0, $9, 6;" :: "r"(eirr));
-		asm volatile("dmtc0 %0, $9, 7;" :: "r"(eimr));
-
-		if (vec < 32)
+
+		/*
+		 * ack in EIRR, and in PIC if needed,
+		 * the irq we are about to handle
+		 */
+		rmixl_eirr_ack(eimr, vecbit, RMIXL_EIRR_PRESERVE_MASK);
+		if (RMIXL_VECTOR_IS_IRT(vec))
 			RMIXL_PICREG_WRITE(RMIXL_PIC_INTRACK,
-				(uint32_t)vecbit);
+				1 << RMIXL_VECTOR_IRT(vec));
 
 		if (ih->ih_func != NULL) {
@@ -895,4 +929,8 @@
 				(void)(*ih->ih_func)(ih->ih_arg);
 			} else {
+				KASSERTMSG(ipl == IPL_VM,
+				    ("%s: %s: ipl (%d) != IPL_VM for KERNEL_LOCK",
+				    __func__, sc->sc_vec_evcnts[vec].ev_name,
+				    ipl));
 				KERNEL_LOCK(1, NULL);
 				(void)(*ih->ih_func)(ih->ih_arg);
@@ -903,5 +941,9 @@
 #endif /* MULTIPROCESSOR */
 		}
-
+		KASSERT(ipl == ih->ih_ipl);
+		KASSERTMSG(curcpu()->ci_cpl >= ipl,
+		    ("%s: after %s: cpl (%d) < ipl %d",
+		    __func__, sc->sc_vec_evcnts[vec].ev_name,
+		    ipl, curcpu()->ci_cpl));
 		sc->sc_vec_evcnts[vec].ev_count++;
 	}
@@ -912,23 +954,23 @@
 rmixl_send_ipi(struct cpu_info *ci, int tag)
 {
-	const cpuid_t cpu = ci->ci_cpuid;
-	uint32_t core = (uint32_t)(cpu >> 2);
-	uint32_t thread = (uint32_t)(cpu & __BITS(1,0));
+	const cpuid_t cpuid = ci->ci_cpuid;
+	uint32_t core = (uint32_t)(cpuid >> 2);
+	uint32_t thread = (uint32_t)(cpuid & __BITS(1,0));
 	uint64_t req = 1 << tag;
 	uint32_t r;
-	extern volatile u_long cpus_running;
-
-	if ((cpus_running & 1 << ci->ci_cpuid) == 0)
+
+	if (! CPUSET_HAS_P(cpus_running, cpu_index(ci)))
 		return -1;
 
-	KASSERT(tag < NIPIS);
+	KASSERT((tag >= 0) && (tag < NIPIS));
 
 	r = (thread << RMIXL_PIC_IPIBASE_ID_THREAD_SHIFT)
 	  | (core << RMIXL_PIC_IPIBASE_ID_CORE_SHIFT)
-	  | RMIXL_INTRVEC_IPI;
-
+	  | (RMIXL_INTRVEC_IPI + tag);
+
+	mutex_enter(rmixl_ipi_lock);
 	atomic_or_64(&ci->ci_request_ipis, req);
-
 	RMIXL_PICREG_WRITE(RMIXL_PIC_IPIBASE, r);
+	mutex_exit(rmixl_ipi_lock);
 
 	return 0;
@@ -939,23 +981,31 @@
 {
 	struct cpu_info * const ci = curcpu();
-	uint64_t ipi_mask;
-
-	ipi_mask = atomic_swap_64(&ci->ci_request_ipis, 0);
-	if (ipi_mask == 0)
+	const uint64_t ipi_mask = 1 << (uintptr_t)arg;
+
+	KASSERT(ci->ci_cpl >= IPL_SCHED);
+	KASSERT((uintptr_t)arg < NIPIS);
+
+	/* if the request is clear, it was previously processed */
+	if ((ci->ci_request_ipis & ipi_mask) == 0)
 		return 0;
 
+	atomic_or_64(&ci->ci_active_ipis, ipi_mask);
+	atomic_and_64(&ci->ci_request_ipis, ~ipi_mask);
+
 	ipi_process(ci, ipi_mask);
 
+	atomic_and_64(&ci->ci_active_ipis, ~ipi_mask);
+
 	return 1;
 }
 #endif	/* MULTIPROCESSOR */
 
-#if defined(DIAGNOSTIC) || defined(IOINTR_DEBUG)
+#if defined(DIAGNOSTIC) || defined(IOINTR_DEBUG) || defined(DDB)
 int
 rmixl_intrhand_print_subr(int vec)
 {
 	rmixl_intrhand_t *ih = &rmixl_intrhand[vec];
-	printf("vec %d: func %p, arg %p, irq %d, ipl %d, mask %#x\n",
-		vec, ih->ih_func, ih->ih_arg, ih->ih_irq, ih->ih_ipl,
+	printf("vec %d: func %p, arg %p, vec %d, ipl %d, mask %#x\n",
+		vec, ih->ih_func, ih->ih_arg, ih->ih_vec, ih->ih_ipl,
 		ih->ih_cpumask);
 	return 0;
@@ -968,4 +1018,17 @@
 	return 0;
 }
+
+static inline void
+rmixl_irt_entry_print(u_int irt)
+{
+	uint32_t c0, c1;
+
+	if ((irt < 0) || (irt > NIRTS))
+		return;
+	c0 = RMIXL_PICREG_READ(RMIXL_PIC_IRTENTRYC0(irt));
+	c1 = RMIXL_PICREG_READ(RMIXL_PIC_IRTENTRYC1(irt));
+	printf("irt[%d]: %#x, %#x\n", irt, c0, c1);
+}
+
 int
 rmixl_irt_print(void)
@@ -976,3 +1039,23 @@
 	return 0;
 }
+
+void
+rmixl_ipl_eimr_map_print(void)
+{
+	printf("IPL_NONE=%d, mask %#"PRIx64"\n",
+		IPL_NONE, ipl_eimr_map[IPL_NONE]);
+	printf("IPL_SOFTCLOCK=%d, mask %#"PRIx64"\n",
+		IPL_SOFTCLOCK, ipl_eimr_map[IPL_SOFTCLOCK]);
+	printf("IPL_SOFTNET=%d, mask %#"PRIx64"\n",
+		IPL_SOFTNET, ipl_eimr_map[IPL_SOFTNET]);
+	printf("IPL_VM=%d, mask %#"PRIx64"\n",
+		IPL_VM, ipl_eimr_map[IPL_VM]);
+	printf("IPL_SCHED=%d, mask %#"PRIx64"\n",
+		IPL_SCHED, ipl_eimr_map[IPL_SCHED]);
+	printf("IPL_DDB=%d, mask %#"PRIx64"\n",
+		IPL_DDB, ipl_eimr_map[IPL_DDB]);
+	printf("IPL_HIGH=%d, mask %#"PRIx64"\n",
+		IPL_HIGH, ipl_eimr_map[IPL_HIGH]);
+}
+
 #endif
Index: /trunk/src/sys/arch/mips/rmi/rmixl_intr.h
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_intr.h	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_intr.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_intr.h,v 1.1.2.3 2010/04/13 18:15:16 cliff Exp $	*/
+/*	$NetBSD: rmixl_intr.h,v 1.1.2.8 2011/04/29 08:26:32 matt Exp $	*/
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -32,10 +32,15 @@
 #define _MIPS_RMI_RMIXL_INTR_H_
 
+#ifdef _KERNEL_OPT
+#include "opt_multiprocessor.h"
+#endif
+
 /*
- * An 'irq' is an EIRR bit numbers or 'vector' as used in the PRM
- * - PIC-based irqs are in the range 0..31 and index into the IRT
- * - IRT entry <n> always routes to vector <n>
- * - non-PIC-based irqs are in the range 32..63
- * - only 1 intrhand_t per irq/vector
+ * A 'vector' is bit number in EIRR/EIMR
+ * - non-IRT-based interrupts use vectors 0..31
+ * - IRT-based interrupts use vectors 32..63 
+ * - RMIXL_VECTOR_IRT(vec) is used to index into the IRT
+ * - IRT entry n always routes to vector RMIXL_IRT_VECTOR(n)
+ * - only 1 intrhand_t per vector
  */
 #define	NINTRVECS	64	/* bit width of the EIRR */
@@ -43,8 +48,21 @@
 
 /*
- * reserved vectors >=32
+ * mapping between IRT index and vector number
  */
-#define RMIXL_INTRVEC_IPI	32
-#define RMIXL_INTRVEC_FMN	33
+#define RMIXL_VECTOR_IS_IRT(vec)	((vec) >= 32)
+#define RMIXL_IRT_VECTOR(irt)		((irt) + 32)
+#define RMIXL_VECTOR_IRT(vec)		((vec) - 32)
+
+/*
+ * vectors (0 <= vec < 8)  are CAUSE[8..15] (including softintrs and count/compare)
+ * vectors (8 <= vec < 31) are for other non-IRT based interrupts
+ * we use one for FMN, and each IPI currently gets own vector;
+ * if NIPIS >= (32 - 8 - 1), then redesign so IPIs share vector(s)
+ */
+#if NIPIS >= 23
+# error too many IPIs
+#endif
+#define RMIXL_INTRVEC_IPI	8
+#define RMIXL_INTRVEC_FMN	(RMIXL_INTRVEC_IPI + NIPIS)
 
 typedef enum {
@@ -70,5 +88,5 @@
         void *ih_arg; 
         int ih_mpsafe; 			/* true if does not need kernel lock */
-        int ih_irq;			/* >=32 if not-PIC-based */
+        int ih_vec;			/* vector is bit number in EIRR/EIMR */
         int ih_ipl; 			/* interrupt priority */
         int ih_cpumask; 		/* CPUs which may handle this irpt */
@@ -90,7 +108,7 @@
 extern const char *rmixl_intr_string(int);
 extern void rmixl_intr_init_cpu(struct cpu_info *);
-extern void *rmixl_intr_init_clk(void);
+extern void rmixl_intr_init_clk(void);
 #ifdef MULTIPROCESSOR
-extern void *rmixl_intr_init_ipi(void);
+extern void rmixl_intr_init_ipi(void);
 #endif
 
Index: /trunk/src/sys/arch/mips/rmi/rmixl_ohci.c
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_ohci.c	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_ohci.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_ohci.c,v 1.1.2.4 2010/03/21 21:24:48 cliff Exp $	*/
+/*	$NetBSD: rmixl_ohci.c,v 1.1.2.5 2011/04/29 08:26:33 matt Exp $	*/
 
 /*-
@@ -33,5 +33,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixl_ohci.c,v 1.1.2.4 2010/03/21 21:24:48 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rmixl_ohci.c,v 1.1.2.5 2011/04/29 08:26:33 matt Exp $");
 
 #include <sys/param.h>
@@ -78,6 +78,7 @@
 rmixl_ohci_attach(device_t parent, device_t self, void *aux)
 {
-	ohci_softc_t *sc = device_private(self);
-	struct rmixl_usbi_attach_args *usbi = aux;
+	ohci_softc_t * const sc = device_private(self);
+	rmixl_usbi_softc_t * const psc = device_private(parent);
+	struct rmixl_usbi_attach_args * const usbi = aux;
 	void *ih = NULL;
 	uint32_t r;
@@ -127,6 +128,13 @@
 	}
 
+	if (psc->sc_ohci_devs[0] == NULL) {
+		psc->sc_ohci_devs[0] = self;
+	} else if (psc->sc_ohci_devs[1] == NULL) {
+		psc->sc_ohci_devs[1] = self;
+	} else {
+		panic("%s: too many ohci devices", __func__);
+	}
+
 	/* Attach USB device */
 	sc->sc_child = config_found(self, &sc->sc_bus, usbctlprint);
 }
-
Index: /trunk/src/sys/arch/mips/rmi/rmixl_pcie.c
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_pcie.c	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_pcie.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_pcie.c,v 1.1.2.14 2010/05/08 18:08:34 matt Exp $	*/
+/*	$NetBSD: rmixl_pcie.c,v 1.1.2.17 2011/04/29 08:26:33 matt Exp $	*/
 
 /*
@@ -41,5 +41,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixl_pcie.c,v 1.1.2.14 2010/05/08 18:08:34 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rmixl_pcie.c,v 1.1.2.17 2011/04/29 08:26:33 matt Exp $");
 
 #include "opt_pci.h"
@@ -53,4 +53,6 @@
 #include <sys/extent.h>
 #include <sys/malloc.h>
+#include <sys/kernel.h>		/* for 'hz' */
+#include <sys/cpu.h>
 
 #include <uvm/uvm_extern.h>
@@ -158,4 +160,7 @@
 		((((uint64_t)RMIXL_PCIE_LINK_STATUS1_ERRORS) << 32) |	\
 		   (uint64_t)RMIXL_PCIE_LINK_STATUS0_ERRORS)
+
+#define RMIXL_PCIE_EVCNT(sc, link, bitno, cpu)	\
+		&(sc)->sc_evcnts[link][(bitno) * (ncpu) + (cpu)]
 
 static int	rmixl_pcie_match(device_t, cfdata_t, void *);
@@ -196,4 +201,8 @@
 static void	*rmixl_pcie_intr_establish(void *, pci_intr_handle_t,
 		    int, int (*)(void *), void *);
+static rmixl_pcie_link_intr_t *
+		rmixl_pcie_lip_add_1(rmixl_pcie_softc_t *, u_int, int, int);
+static void	rmixl_pcie_lip_free_callout(rmixl_pcie_link_intr_t *);
+static void	rmixl_pcie_lip_free(void *);
 static int	rmixl_pcie_intr(void *);
 static void	rmixl_pcie_link_error_intr(u_int, uint32_t, uint32_t);
@@ -203,10 +212,4 @@
 static int	_rmixl_pcie_error_check(void *);
 static int	rmixl_pcie_error_intr(void *);
-
-/*
- * XXX use locks
- */
-#define	PCI_CONF_LOCK(s)	(s) = splhigh()
-#define	PCI_CONF_UNLOCK(s)	splx((s))
 
 
@@ -289,4 +292,6 @@
 	aprint_normal(" RMI XLS PCIe Interface\n");
 
+	mutex_init(&sc->sc_mutex, MUTEX_DEFAULT, IPL_HIGH);
+
 	rmixl_pcie_lnkcfg(sc);
 
@@ -547,6 +552,7 @@
 rmixl_pcie_intcfg(struct rmixl_pcie_softc *sc)
 {
-	rmixl_pcie_link_intr_t *lip;
 	int link;
+	size_t size;
+	rmixl_pcie_evcnt_t *ev;
 
 	DPRINTF(("%s: disable all link interrupts\n", __func__));
@@ -557,9 +563,23 @@
 			RMIXL_PCIE_LINK_STATUS1_ERRORS); 
 		RMIXL_IOREG_WRITE(RMIXL_IO_DEV_PCIE_LE + msi_enb_offset[link], 0); 
-		lip = &sc->sc_link_intr[link];
-		LIST_INIT(&lip->dispatch);
-		lip->ih = NULL;
-		lip->link = link;
-		lip->enabled = false;
+		sc->sc_link_intr[link] = NULL;
+
+		/*
+		 * allocate per-cpu, per-pin interrupt event counters
+		 */
+		size = ncpu * PCI_INTERRUPT_PIN_MAX * sizeof(rmixl_pcie_evcnt_t);
+		ev = malloc(size, M_DEVBUF, M_NOWAIT);
+		if (ev == NULL)
+			panic("%s: cannot malloc evcnts\n", __func__);
+		sc->sc_evcnts[link] = ev;
+		for (int pin=PCI_INTERRUPT_PIN_A; pin <= PCI_INTERRUPT_PIN_MAX; pin++) {
+			for (int cpu=0; cpu < ncpu; cpu++) {
+				ev = RMIXL_PCIE_EVCNT(sc, link, pin - 1, cpu);
+				snprintf(ev->name, sizeof(ev->name),
+					"cpu%d, link %d, pin %d", cpu, link, pin);
+				evcnt_attach_dynamic(&ev->evcnt, EVCNT_TYPE_INTR,
+					NULL, "rmixl_pcie", ev->name);
+			}
+		}
 	}
 }
@@ -957,7 +977,6 @@
 	pcireg_t rv;
 	uint64_t cfg0;
-	u_int s;
-
-	PCI_CONF_LOCK(s);
+
+	mutex_enter(&sc->sc_mutex);
 
 	if (rmixl_pcie_conf_setup(sc, tag, &offset, &bst, &bsh) == 0) {
@@ -979,5 +998,6 @@
 	}
 
-	PCI_CONF_UNLOCK(s);
+	mutex_exit(&sc->sc_mutex);
+
 	return rv;
 }
@@ -990,7 +1010,6 @@
 	bus_space_tag_t bst;
 	uint64_t cfg0;
-	u_int s;
-
-	PCI_CONF_LOCK(s);
+
+	mutex_enter(&sc->sc_mutex);
 
 	if (rmixl_pcie_conf_setup(sc, tag, &offset, &bst, &bsh) == 0) {
@@ -1009,5 +1028,5 @@
 	}
 
-	PCI_CONF_UNLOCK(s);
+	mutex_exit(&sc->sc_mutex);
 }
 
@@ -1094,5 +1113,5 @@
 		case 26:
 		case 27:
-			name = rmixl_intr_string(irq);
+			name = rmixl_intr_string(RMIXL_IRT_VECTOR(irq));
 			break;
 		}
@@ -1105,5 +1124,5 @@
 		case 26:
 		case 27:
-			name = rmixl_intr_string(irq);
+			name = rmixl_intr_string(RMIXL_IRT_VECTOR(irq));
 			break;
 		}
@@ -1119,5 +1138,5 @@
 		case 28:
 		case 29:
-			name = rmixl_intr_string(irq);
+			name = rmixl_intr_string(RMIXL_IRT_VECTOR(irq));
 			break;
 		}
@@ -1170,47 +1189,70 @@
 	rmixl_pcie_softc_t *sc = v;
 	rmixl_pcie_link_dispatch_t *dip = ih;
-	rmixl_pcie_link_intr_t *lip = &sc->sc_link_intr[dip->link];;
+	rmixl_pcie_link_intr_t *lip = sc->sc_link_intr[dip->link];
 	uint32_t r;
 	uint32_t bit;
 	u_int offset;
 	u_int other;
+	bool busy;
 
 	DPRINTF(("%s: link=%d pin=%d irq=%d\n",
 		__func__, dip->link, dip->bitno + 1, dip->irq));
-	LIST_REMOVE(dip, next);
-
-	rmixl_intr_disestablish(lip->ih);
-
-	if (dip->bitno < 32) {
-		bit = 1 << dip->bitno;
-		offset = int_enb_offset[dip->link].r0;
-		other  = int_enb_offset[dip->link].r1;
-	} else {
-		bit = 1 << (dip->bitno - 32);
-		offset = int_enb_offset[dip->link].r1;
-		other  = int_enb_offset[dip->link].r0;
-	}
-
-	/* disable this interrupt in the PCIe bridge */
-	r = RMIXL_IOREG_READ(RMIXL_IO_DEV_PCIE_LE + offset);
-	r &= ~bit;
-	RMIXL_IOREG_WRITE(RMIXL_IO_DEV_PCIE_LE + offset, r);
-
-	/*
-	 * if both STATUS0 and STATUS1 are 0
-	 * mark the link interrupt disabled
+
+	mutex_enter(&sc->sc_mutex);
+
+	dip->func = NULL;	/* mark unused, prevent further dispatch */
+
+	/*
+	 * if no other dispatch handle is using this interrupt,
+	 * we can disable it
 	 */
-	if (r == 0) {
-		/* check the other reg */
-		if (RMIXL_IOREG_READ(RMIXL_IO_DEV_PCIE_LE + other) == 0) {
-			lip->enabled = false;
-			DPRINTF(("%s: disabled link %d\n", __func__, lip->link));
-		}
-	}
-
-	evcnt_detach(&dip->count);
-
-	free(dip, M_DEVBUF);
-
+	busy = false;
+	for (int i=0; i < lip->dispatch_count; i++) {
+		rmixl_pcie_link_dispatch_t *d = &lip->dispatch_data[i];
+		if (d == dip)
+			continue;
+		if (d->bitno == dip->bitno) {
+			busy = true;
+			break;
+		}
+	}
+	if (! busy) {
+		if (dip->bitno < 32) {
+			bit = 1 << dip->bitno;
+			offset = int_enb_offset[dip->link].r0;
+			other  = int_enb_offset[dip->link].r1;
+		} else {
+			bit = 1 << (dip->bitno - 32);
+			offset = int_enb_offset[dip->link].r1;
+			other  = int_enb_offset[dip->link].r0;
+		}
+
+		/* disable this interrupt in the PCIe bridge */
+		r = RMIXL_IOREG_READ(RMIXL_IO_DEV_PCIE_LE + offset);
+		r &= ~bit;
+		RMIXL_IOREG_WRITE(RMIXL_IO_DEV_PCIE_LE + offset, r);
+
+		/*
+		 * if both ENABLE0 and ENABLE1 are 0
+		 * disable the link interrupt
+		 */
+		if (r == 0) {
+			/* check the other reg */
+			if (RMIXL_IOREG_READ(RMIXL_IO_DEV_PCIE_LE + other) == 0) {
+				DPRINTF(("%s: disable link %d\n", __func__, lip->link));
+
+				/* tear down interrupt on this link */
+				rmixl_intr_disestablish(lip->ih);
+
+				/* commit NULL interrupt set */
+				sc->sc_link_intr[dip->link] = NULL;
+
+				/* schedule delayed free of the old link interrupt set */
+				rmixl_pcie_lip_free_callout(lip);
+			}
+		}
+	}
+
+	mutex_exit(&sc->sc_mutex);
 }
 
@@ -1223,8 +1265,7 @@
 	uint32_t r;
 	rmixl_pcie_link_intr_t *lip;
-	rmixl_pcie_link_dispatch_t *dip;
+	rmixl_pcie_link_dispatch_t *dip = NULL;
 	uint32_t bit;
 	u_int offset;
-	int s;
 
 	if (pih == ~0) {
@@ -1235,44 +1276,17 @@
 
 	rmixl_pcie_decompose_pih(pih, &link, &bitno, &irq);
-	DPRINTF(("%s: link=%d pin=%d irq=%d\n", __func__, link, bitno + 1, irq));
-
-	lip = &sc->sc_link_intr[link];
-
-	s = splhigh();
-
-#ifdef DEBUG
-	LIST_FOREACH(dip, &lip->dispatch, next) {
-		if (dip->bitno == bitno)
-			panic("%s: pin %d alread on dispatch list",
-				__func__, bitno + 1);
-	}
-#endif
-
-	/*
-	 * all intrs on a link get same ipl and sc
-	 * first intr established sets the standard
+	DPRINTF(("%s: link=%d pin=%d irq=%d\n",
+		__func__, link, bitno + 1, irq));
+
+	mutex_enter(&sc->sc_mutex);
+
+	lip = rmixl_pcie_lip_add_1(sc, link, irq, ipl);
+	if (lip == NULL)
+		return NULL;
+
+	/*
+	 * initializae our new interrupt, the last element in dispatch_data[]
 	 */
-	if (lip->enabled == true) {
-		KASSERT(sc == lip->sc);
-		if (sc != lip->sc) {
-			printf("%s: sc %p mismatch\n", __func__, sc); 
-			goto out;
-		}
-		KASSERT(ipl == lip->ipl);
-		if (ipl != lip->ipl) {
-			printf("%s: ipl %d mismatch\n", __func__, ipl); 
-			goto out;
-		}
-	}
-
-	/*
-	 * allocate and initialize a dispatch handle
-	 */
-	dip = malloc(sizeof(*dip), M_DEVBUF, M_NOWAIT);
-	if (dip == NULL) {
-		printf("%s: cannot malloc dispatch handle\n", __func__);
-		goto out;
-	}
-
+	dip = &lip->dispatch_data[lip->dispatch_count - 1];
 	dip->link = link;
 	dip->bitno = bitno;
@@ -1280,8 +1294,5 @@
 	dip->func = func;
 	dip->arg = arg;
-	snprintf(dip->count_name, sizeof(dip->count_name),
-		"link %d, pin %d", link, bitno + 1);
-	evcnt_attach_dynamic(&dip->count, EVCNT_TYPE_INTR, NULL,
-		"rmixl_pcie", dip->count_name);
+	dip->counts = RMIXL_PCIE_EVCNT(sc, link, bitno, 0);
 
 	if (bitno < 32) {
@@ -1293,4 +1304,7 @@
 	}
 
+	/* commit the new link interrupt set */
+	sc->sc_link_intr[link] = lip;
+
 	/* enable this interrupt in the PCIe bridge */
 	r = RMIXL_IOREG_READ(RMIXL_IO_DEV_PCIE_LE + offset); 
@@ -1298,21 +1312,113 @@
 	RMIXL_IOREG_WRITE(RMIXL_IO_DEV_PCIE_LE + offset, r); 
 
-	if (lip->enabled == false) {
-		lip->ih = rmixl_intr_establish(irq, sc->sc_tmsk,
+	mutex_exit(&sc->sc_mutex);
+	return dip;
+}
+
+rmixl_pcie_link_intr_t *
+rmixl_pcie_lip_add_1(rmixl_pcie_softc_t *sc, u_int link, int irq, int ipl)
+{
+	rmixl_pcie_link_intr_t *lip_old = sc->sc_link_intr[link];
+	rmixl_pcie_link_intr_t *lip_new;
+	u_int dispatch_count;
+	size_t size;
+
+	dispatch_count = 1;
+	size = sizeof(rmixl_pcie_link_intr_t);
+	if (lip_old != NULL) {
+		/*
+		 * count only those dispatch elements still in use
+		 * unused ones will be pruned during copy
+		 * i.e. we are "lazy" there is no rmixl_pcie_lip_sub_1
+                 */     
+		for (int i=0; i < lip_old->dispatch_count; i++) {
+			if (lip_old->dispatch_data[i].func != NULL) {
+				dispatch_count++;
+				size += sizeof(rmixl_pcie_link_intr_t);
+			}
+		}
+	}
+
+	/*
+	 * allocate and initialize link intr struct
+	 * with one or more dispatch handles
+	 */
+	lip_new = malloc(size, M_DEVBUF, M_NOWAIT);
+	if (lip_new == NULL) {
+#ifdef DIAGNOSTIC
+		printf("%s: cannot malloc\n", __func__);
+#endif
+		return NULL;
+	}
+
+	if (lip_old == NULL) {
+		/* initialize the link interrupt struct */
+		lip_new->sc = sc;
+		lip_new->link = link;
+		lip_new->ipl = ipl;
+		lip_new->ih = rmixl_intr_establish(irq, sc->sc_tmsk,
 			ipl, RMIXL_TRIG_LEVEL, RMIXL_POLR_HIGH,
-			rmixl_pcie_intr, lip, false);
-		if (lip->ih == NULL)
+			rmixl_pcie_intr, lip_new, false);
+		if (lip_new->ih == NULL)
 			panic("%s: cannot establish irq %d", __func__, irq);
-
-		lip->sc = sc;
-		lip->ipl = ipl;
-		lip->enabled = true;
-		DPRINTF(("%s: enabled link %d\n", __func__, link));
-	}
-	LIST_INSERT_HEAD(&lip->dispatch, dip, next);
-
- out:
-	splx(s);
-	return dip;
+	} else {
+		/*
+		 * all intrs on a link get same ipl and sc
+		 * first intr established sets the standard
+		 */
+		KASSERT(sc == lip_old->sc);
+		if (sc != lip_old->sc) {
+			printf("%s: sc %p mismatch\n", __func__, sc); 
+			free(lip_new, M_DEVBUF);
+			return NULL;
+		}
+		KASSERT (ipl == lip_old->ipl);
+		if (ipl != lip_old->ipl) {
+			printf("%s: ipl %d mismatch\n", __func__, ipl); 
+			free(lip_new, M_DEVBUF);
+			return NULL;
+		}
+		/*
+		 * copy lip_old to lip_new, skipping unused dispatch elemets
+		 */
+		memcpy(lip_new, lip_old, sizeof(rmixl_pcie_link_intr_t));
+		for (int j=0, i=0; i < lip_old->dispatch_count; i++) {
+			if (lip_old->dispatch_data[i].func != NULL) {
+				memcpy(&lip_new->dispatch_data[j],
+					&lip_old->dispatch_data[i],
+					sizeof(rmixl_pcie_link_dispatch_t));
+				j++;
+			}
+		}
+
+		/*
+		 * schedule delayed free of old link interrupt set
+		 */
+		rmixl_pcie_lip_free_callout(lip_old);
+	}
+	lip_new->dispatch_count = dispatch_count;
+
+	return lip_new;
+}
+
+/*
+ * delay free of the old link interrupt set
+ * to allow anyone still using it to do so safely
+ * XXX 2 seconds should be plenty?
+ */
+static void
+rmixl_pcie_lip_free_callout(rmixl_pcie_link_intr_t *lip)
+{
+	callout_init(&lip->callout, 0);
+	callout_reset(&lip->callout, 2 * hz, rmixl_pcie_lip_free, lip);
+}
+
+static void
+rmixl_pcie_lip_free(void *arg)
+{
+	rmixl_pcie_link_intr_t *lip = arg;
+	
+	callout_destroy(&lip->callout);
+	free(lip, M_DEVBUF);
 }
 
@@ -1335,10 +1441,14 @@
 			rmixl_pcie_link_error_intr(link, status0, status1);
 
-		LIST_FOREACH(dip, &lip->dispatch, next) {
-			uint64_t bit = 1 << dip->bitno;
-			if ((status & bit) != 0) {
-				(void)(*dip->func)(dip->arg);
-				dip->count.ev_count++;
-				rv = 1;
+		for (u_int i=0; i < lip->dispatch_count; i++) {
+			dip = &lip->dispatch_data[i];
+			int (*func)(void *) = dip->func;
+			if (func != NULL) {
+				uint64_t bit = 1 << dip->bitno;
+				if ((status & bit) != 0) {
+					(void)(*func)(dip->arg);
+					dip->counts[cpu_index(curcpu())].evcnt.ev_count++;
+					rv = 1;
+				}
 			}
 		}
Index: /trunk/src/sys/arch/mips/rmi/rmixl_pcievar.h
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_pcievar.h	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_pcievar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*      $NetBSD: rmixl_pcievar.h,v 1.1.2.7 2010/04/13 18:15:16 cliff Exp $	*/
+/*      $NetBSD: rmixl_pcievar.h,v 1.1.2.8 2010/09/20 19:42:31 cliff Exp $	*/
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -51,6 +51,10 @@
 } rmixl_pcie_lnktab_t;
 
+typedef struct rmixl_pcie_evcnt {
+	struct evcnt evcnt;
+	char name[32];
+} rmixl_pcie_evcnt_t;
+
 typedef struct rmixl_pcie_link_dispatch {
-	LIST_ENTRY(rmixl_pcie_link_dispatch) next;
 	int (*func)(void *);
 	void *arg;
@@ -58,6 +62,5 @@
 	u_int bitno;
 	u_int irq;
-	struct evcnt count;
-	char count_name[32];
+	rmixl_pcie_evcnt_t *counts;	/* index by cpu */
 } rmixl_pcie_link_dispatch_t;
 
@@ -66,9 +69,11 @@
 typedef struct rmixl_pcie_link_intr {
 	struct rmixl_pcie_softc *sc;
-	LIST_HEAD(, rmixl_pcie_link_dispatch) dispatch;
 	u_int link;
 	u_int ipl;
-	bool enabled;
 	void *ih;			/* mips interrupt handle */
+	callout_t callout;		/* for delayed free of this struct */
+	u_int dispatch_count;
+	rmixl_pcie_link_dispatch_t  dispatch_data[1];
+					/* variable length */
 } rmixl_pcie_link_intr_t;
 
@@ -84,7 +89,9 @@
 	bus_dma_tag_t			sc_64bit_dmat;
 	rmixl_pcie_lnktab_t		sc_pcie_lnktab;
+	kmutex_t			sc_mutex;
 	int				sc_tmsk;
 	void 			       *sc_fatal_ih;
-	rmixl_pcie_link_intr_t		sc_link_intr[RMIXL_PCIE_NLINKS_MAX];
+	rmixl_pcie_evcnt_t	       *sc_evcnts[RMIXL_PCIE_NLINKS_MAX];
+	rmixl_pcie_link_intr_t	       *sc_link_intr[RMIXL_PCIE_NLINKS_MAX];
 } rmixl_pcie_softc_t;
 
Index: /trunk/src/sys/arch/mips/rmi/rmixl_pcix.c
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_pcix.c	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_pcix.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_pcix.c,v 1.1.2.5 2010/04/17 07:34:08 cliff Exp $	*/
+/*	$NetBSD: rmixl_pcix.c,v 1.1.2.9 2011/04/29 08:26:33 matt Exp $	*/
 
 /*
@@ -41,5 +41,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixl_pcix.c,v 1.1.2.5 2010/04/17 07:34:08 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rmixl_pcix.c,v 1.1.2.9 2011/04/29 08:26:33 matt Exp $");
 
 #include "opt_pci.h"
@@ -53,4 +53,6 @@
 #include <sys/extent.h>
 #include <sys/malloc.h>
+#include <sys/kernel.h>		/* for 'hz' */
+#include <sys/cpu.h>
 
 #include <uvm/uvm_extern.h>
@@ -190,10 +192,4 @@
 #define RMIXL_PCIXREG_WRITE(o,v)  *RMIXL_PCIXREG_VADDR(o) = (v)
 
-/*
- * XXX use locks
- */
-#define	PCI_CONF_LOCK(s)	(s) = splhigh()
-#define	PCI_CONF_UNLOCK(s)	splx((s))
-
 
 #define RMIXL_PCIX_CONCAT3(a,b,c) a ## b ## c
@@ -223,4 +219,9 @@
 }
 
+
+#define RMIXL_PCIX_EVCNT(sc, intrpin, cpu)	\
+	&(sc)->sc_evcnts[(intrpin) * (ncpu) + (cpu)]
+
+
 static int	rmixl_pcix_match(device_t, cfdata_t, void *);
 static void	rmixl_pcix_attach(device_t, device_t, void *);
@@ -254,4 +255,8 @@
 static void	*rmixl_pcix_intr_establish(void *, pci_intr_handle_t,
 		    int, int (*)(void *), void *);
+static rmixl_pcix_intr_t *
+                rmixl_pcix_pip_add_1(rmixl_pcix_softc_t *, int, int);
+static void     rmixl_pcix_pip_free_callout(rmixl_pcix_intr_t *);
+static void     rmixl_pcix_pip_free(void *);
 static int	rmixl_pcix_intr(void *);
 static int	rmixl_pcix_error_intr(void *);
@@ -263,8 +268,4 @@
 
 static int rmixl_pcix_found;
-
-#if defined(DIAGNOSTIC) || defined(DEBUG) || defined(DDB)
-static rmixl_pcix_softc_t *rmixl_pcix_sc;
-#endif
 
 
@@ -308,7 +309,4 @@
 
 	rmixl_pcix_found = 1;
-#ifdef DIAGNOSTIC
-	rmixl_pcix_sc = sc;
-#endif
 	sc->sc_dev = self;
 	sc->sc_29bit_dmat = obio->obio_29bit_dmat;
@@ -318,4 +316,6 @@
 
 	aprint_normal(": RMI XLR PCI-X Interface\n");
+
+	mutex_init(&sc->sc_mutex, MUTEX_DEFAULT, IPL_HIGH);
 
 	rmixl_pcix_intcfg(sc);
@@ -483,4 +483,7 @@
 rmixl_pcix_intcfg(rmixl_pcix_softc_t *sc)
 {
+	size_t size;
+	rmixl_pcix_evcnt_t *ev;
+
 	DPRINTF(("%s\n", __func__));
 
@@ -496,19 +499,28 @@
 	(void)RMIXL_PCIXREG_READ(RMIXL_PCIX_ECFG_INTR_ERR_STATUS); 
 
-	/* initialize the dispatch handles */
-	for (int i=0; i < RMIXL_PCIX_NINTR; i++) {
-		rmixl_pcix_intr_t *ih = &sc->sc_intr[i];
-		LIST_INIT(&ih->dispatch);
-		ih->ih = NULL;
-		ih->intrpin = i;
-		ih->enabled = false;
-	}
-
-	sc->sc_ih = rmixl_intr_establish(16, sc->sc_tmsk,
-		IPL_VM, RMIXL_TRIG_LEVEL, RMIXL_POLR_HIGH,
-		rmixl_pcix_intr, sc, false);
-	if (sc->sc_ih == NULL)
-		panic("%s: cannot establish irq %d", __func__, 16);
-
+	/* initialize the (non-error interrupt) dispatch handles */
+	sc->sc_intr = NULL;
+
+	/*
+	 * allocate per-cpu, per-pin interrupt event counters
+	 */
+	size = ncpu * PCI_INTERRUPT_PIN_MAX * sizeof(rmixl_pcix_evcnt_t);
+	ev = malloc(size, M_DEVBUF, M_NOWAIT);
+	if (ev == NULL)
+		panic("%s: cannot malloc evcnts\n", __func__);
+	sc->sc_evcnts = ev;
+	for (int pin=PCI_INTERRUPT_PIN_A; pin <= PCI_INTERRUPT_PIN_MAX; pin++) {
+		for (int cpu=0; cpu < ncpu; cpu++) {
+			ev = RMIXL_PCIX_EVCNT(sc, pin - 1, cpu);
+			snprintf(ev->name, sizeof(ev->name),
+				"cpu%d, pin %d", cpu, pin);
+			evcnt_attach_dynamic(&ev->evcnt, EVCNT_TYPE_INTR,
+				NULL, "rmixl_pcix", ev->name);
+		}
+	}
+
+	/*
+	 * establish PCIX error interrupt handler
+	 */
 	sc->sc_fatal_ih = rmixl_intr_establish(24, sc->sc_tmsk,
 		IPL_VM, RMIXL_TRIG_LEVEL, RMIXL_POLR_HIGH,
@@ -516,6 +528,4 @@
 	if (sc->sc_fatal_ih == NULL)
 		panic("%s: cannot establish irq %d", __func__, 24);
-
-	sc->sc_intr_init_done = true;
 }
 
@@ -703,7 +713,6 @@
 	pcireg_t rv;
 	uint64_t cfg0;
-	u_int s;
-
-	PCI_CONF_LOCK(s);
+
+	mutex_enter(&sc->sc_mutex);
 
 	if (rmixl_pcix_conf_setup(sc, tag, &offset, &bst, &bsh) == 0) {
@@ -725,5 +734,6 @@
 	}
 
-	PCI_CONF_UNLOCK(s);
+	mutex_exit(&sc->sc_mutex);
+
 	return rv;
 }
@@ -736,7 +746,6 @@
 	bus_space_tag_t bst;
 	uint64_t cfg0;
-	u_int s;
-
-	PCI_CONF_LOCK(s);
+
+	mutex_enter(&sc->sc_mutex);
 
 	if (rmixl_pcix_conf_setup(sc, tag, &offset, &bst, &bsh) == 0) {
@@ -755,5 +764,5 @@
 	}
 
-	PCI_CONF_UNLOCK(s);
+	mutex_exit(&sc->sc_mutex);
 }
 
@@ -789,5 +798,5 @@
 			__func__, mips_options.mips_cpu_id);
 
-	return rmixl_intr_string(irq);
+	return rmixl_intr_string(RMIXL_IRT_VECTOR(irq));
 }
 
@@ -827,5 +836,6 @@
 	rmixl_pcix_softc_t *sc = v;
 	rmixl_pcix_dispatch_t *dip = ih;
-	rmixl_pcix_intr_t *pip = &sc->sc_intr[dip->bitno];;
+	rmixl_pcix_intr_t *pip = sc->sc_intr;
+	bool busy;
 
 	DPRINTF(("%s: pin=%d irq=%d\n",
@@ -833,9 +843,23 @@
 	KASSERT(dip->bitno < RMIXL_PCIX_NINTR);
 
-	LIST_REMOVE(dip, next);
-	evcnt_detach(&dip->count);
-	free(dip, M_DEVBUF);
-
-	if (LIST_EMPTY(&pip->dispatch)) {
+	mutex_enter(&sc->sc_mutex);
+
+	dip->func = NULL;	/* prevent further dispatch */
+
+	/*
+	 * if no other dispatch handle is using this interrupt,
+	 * we can disable it
+	 */
+	busy = false;
+	for (int i=0; i < pip->dispatch_count; i++) {
+		rmixl_pcix_dispatch_t *d = &pip->dispatch_data[i];
+		if (d == dip)
+			continue;
+		if (d->bitno == dip->bitno) {
+			busy = true;
+			break;
+		}
+	}
+	if (! busy) {
 		uint32_t bit = 1 << (dip->bitno + 2);
 		uint32_t r;
@@ -846,6 +870,19 @@
 		DPRINTF(("%s: disabled pin %d\n", __func__, dip->bitno + 1));
 
-		pip->enabled = false;
-	}
+		pip->intenb &= ~(1 << dip->bitno);
+
+		if ((r & PCIX_INTR_CONTROL_MASK_ALL) == 0) {
+			/* tear down interrupt for this pcix */
+			rmixl_intr_disestablish(pip->ih);
+
+			/* commit NULL interrupt set */
+			sc->sc_intr = NULL;
+
+			/* schedule delayed free of the old interrupt set */
+			rmixl_pcix_pip_free_callout(pip);
+		}
+	}
+
+	mutex_exit(&sc->sc_mutex);
 }
 
@@ -857,6 +894,5 @@
 	u_int bitno, irq;
 	rmixl_pcix_intr_t *pip;
-	rmixl_pcix_dispatch_t *dip;
-	int s;
+	rmixl_pcix_dispatch_t *dip = NULL;
 
 	if (pih == ~0) {
@@ -870,33 +906,37 @@
 
 	KASSERT(bitno < RMIXL_PCIX_NINTR);
-	pip = &sc->sc_intr[bitno];
-
-	s = splhigh();
-
-	/*
-	 * all PCI-X device intrs get same ipl and sc
-	 */
-	KASSERT(sc == rmixl_pcix_sc);
+
+	/*
+	 * all PCI-X device intrs get same ipl
+	 */
 	KASSERT(ipl == IPL_VM);
 
-	/*
-	 * allocate and initialize a dispatch handle
-	 */
-	dip = malloc(sizeof(*dip), M_DEVBUF, M_NOWAIT);
-	if (dip == NULL) {
-		printf("%s: cannot malloc dispatch handle\n", __func__);
-		goto out;
-	}
-
+	mutex_enter(&sc->sc_mutex);
+
+	pip = rmixl_pcix_pip_add_1(sc, irq, ipl); 
+	if (pip == NULL)
+		return NULL;
+
+	/*
+	 * initializae our new interrupt, the last element in dispatch_data[] 
+	 */
+	dip = &pip->dispatch_data[pip->dispatch_count - 1];
 	dip->bitno = bitno;
 	dip->irq = irq;
 	dip->func = func;
 	dip->arg = arg;
+	dip->counts = RMIXL_PCIX_EVCNT(sc, bitno, 0);
+#if NEVER
 	snprintf(dip->count_name, sizeof(dip->count_name),
 		"pin %d", bitno + 1);
 	evcnt_attach_dynamic(&dip->count, EVCNT_TYPE_INTR, NULL,
 		"rmixl_pcix", dip->count_name);
-
-	if (pip->enabled == false) {
+#endif
+
+	/* commit the new interrupt set */
+	sc->sc_intr = pip;
+
+	/* enable this interrupt in the PCIX controller, if necessary */
+	if ((pip->intenb & (1 << bitno)) == 0) {
 		uint32_t bit = 1 << (bitno + 2);
 		uint32_t r;
@@ -908,13 +948,116 @@
 		pip->sc = sc;
 		pip->ipl = ipl;
-		pip->enabled = true;
+		pip->intenb |= 1 << bitno;
 		DPRINTF(("%s: enabled pin %d\n", __func__, bitno + 1));
 	}
 
-	LIST_INSERT_HEAD(&pip->dispatch, dip, next);
-
- out:
-	splx(s);
+	mutex_exit(&sc->sc_mutex);
 	return dip;
+}
+
+rmixl_pcix_intr_t *
+rmixl_pcix_pip_add_1(rmixl_pcix_softc_t *sc, int irq, int ipl)
+{
+	rmixl_pcix_intr_t *pip_old = sc->sc_intr;
+	rmixl_pcix_intr_t *pip_new;
+	u_int dispatch_count;
+	size_t size;
+
+	dispatch_count = 1;
+	size = sizeof(rmixl_pcix_intr_t);
+	if (pip_old != NULL) {
+		/*
+		 * count only those dispatch elements still in use
+		 * unused ones will be pruned during copy
+		 * i.e. we are "lazy" there is no rmixl_pcix_pip_sub_1
+		 */
+		for (int i=0; i < pip_old->dispatch_count; i++) {
+			if (pip_old->dispatch_data[i].func != NULL) {
+				dispatch_count++;
+				size += sizeof(rmixl_pcix_intr_t);
+			}
+		}
+	}
+
+	/*
+	 * allocate and initialize softc intr struct
+	 * with one or more dispatch handles
+	 */
+	pip_new = malloc(size, M_DEVBUF, M_NOWAIT|M_ZERO);
+	if (pip_new == NULL) {
+#ifdef DIAGNOSTIC
+		printf("%s: cannot malloc\n", __func__);
+#endif
+		return NULL;
+	}
+
+	if (pip_old == NULL) {
+		/* initialize the interrupt struct */
+		pip_new->sc = sc;
+		pip_new->ipl = ipl;
+		pip_new->ih = rmixl_intr_establish(irq, sc->sc_tmsk,
+			ipl, RMIXL_TRIG_LEVEL, RMIXL_POLR_HIGH,
+			rmixl_pcix_intr, pip_new, false);
+		if (pip_new->ih == NULL)
+			panic("%s: cannot establish irq %d", __func__, irq);
+	} else {
+		/*
+		 * all intrs on a softc get same ipl and sc
+		 * first intr established sets the standard
+		 */
+		KASSERT(sc == pip_old->sc);
+		if (sc != pip_old->sc) {
+			printf("%s: sc %p mismatch\n", __func__, sc); 
+			free(pip_new, M_DEVBUF);
+			return NULL;
+		}
+		KASSERT (ipl == pip_old->ipl);
+		if (ipl != pip_old->ipl) {
+			printf("%s: ipl %d mismatch\n", __func__, ipl); 
+			free(pip_new, M_DEVBUF);
+			return NULL;
+		}
+		/*
+		 * copy pip_old to pip_new, skipping unused dispatch elemets
+		 */
+		memcpy(pip_new, pip_old, sizeof(rmixl_pcix_intr_t));
+		for (int j=0, i=0; i < pip_old->dispatch_count; i++) {
+			if (pip_old->dispatch_data[i].func != NULL) {
+				memcpy(&pip_new->dispatch_data[j],
+					&pip_old->dispatch_data[i],
+					sizeof(rmixl_pcix_dispatch_t));
+				j++;
+			}
+		}
+
+		/*
+		 * schedule delayed free of old interrupt set
+		 */
+		rmixl_pcix_pip_free_callout(pip_old);
+	}
+	pip_new->dispatch_count = dispatch_count;
+
+	return pip_new;
+}
+
+/*
+ * delay free of the old interrupt set
+ * to allow anyone still using it to do so safely
+ * XXX 2 seconds should be plenty?
+ */
+static void
+rmixl_pcix_pip_free_callout(rmixl_pcix_intr_t *pip)
+{
+	callout_init(&pip->callout, 0);
+	callout_reset(&pip->callout, 2 * hz, rmixl_pcix_pip_free, pip);
+}       
+        
+static void
+rmixl_pcix_pip_free(void *arg)
+{       
+	rmixl_pcix_intr_t *pip = arg;
+
+	callout_destroy(&pip->callout);
+	free(pip, M_DEVBUF);
 }
 
@@ -922,5 +1065,5 @@
 rmixl_pcix_intr(void *arg)
 {
-	rmixl_pcix_softc_t *sc = arg;
+	rmixl_pcix_intr_t *pip = arg;
 	int rv = 0;
 
@@ -929,14 +1072,12 @@
 
 	if (status != 0) {
-		for (int i=0; i < RMIXL_PCIX_NINTR; i++) {
-			uint32_t bit = 1 << i;
-			if ((status & bit) != 0) {
-				rmixl_pcix_intr_t *pip = &sc->sc_intr[i];
-				rmixl_pcix_dispatch_t *dip;
-				LIST_FOREACH(dip, &pip->dispatch, next) {
-					(void)(*dip->func)(dip->arg);
-					dip->count.ev_count++;
-					rv = 1;
-				}
+		for (int i=0; i < pip->dispatch_count; i++) {
+			rmixl_pcix_dispatch_t *dip = &pip->dispatch_data[i];
+			uint32_t bit = 1 << dip->bitno;
+			int (*func)(void *) = dip->func;
+			if ((func != NULL) && (status & bit) != 0) {
+				(void)(*func)(dip->arg);
+				dip->counts[cpu_index(curcpu())].evcnt.ev_count++;
+				rv = 1;
 			}
 		}
Index: /trunk/src/sys/arch/mips/rmi/rmixl_pcixvar.h
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_pcixvar.h	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_pcixvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*      $NetBSD: rmixl_pcixvar.h,v 1.1.2.2 2010/04/13 18:15:16 cliff Exp $	*/
+/*      $NetBSD: rmixl_pcixvar.h,v 1.1.2.3 2010/09/20 19:42:31 cliff Exp $	*/
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -34,12 +34,15 @@
 #include <dev/pci/pcivar.h>
 
+typedef struct rmixl_pcix_evcnt {
+	struct evcnt evcnt;
+	char name[32];
+} rmixl_pcix_evcnt_t;
+
 typedef struct rmixl_pcix_dispatch {
-	LIST_ENTRY(rmixl_pcix_dispatch) next;
 	int (*func)(void *);
 	void *arg;
 	u_int bitno;
 	u_int irq;
-	struct evcnt count;
-	char count_name[32];
+	rmixl_pcix_evcnt_t *counts;	/* index by cpu */
 } rmixl_pcix_dispatch_t;
 
@@ -48,9 +51,12 @@
 typedef struct rmixl_pcix_intr {
 	struct rmixl_pcix_softc *sc;
-	LIST_HEAD(, rmixl_pcix_dispatch) dispatch;
 	u_int intrpin;
 	u_int ipl;
-	bool enabled;
 	void *ih;			/* mips interrupt handle */
+	callout_t callout;		/* for delayed free of this struct */
+	u_int intenb;			/* enabled flags for INT[ABCD] */
+	u_int dispatch_count;
+	rmixl_pcix_dispatch_t dispatch_data[1];
+					/* variable length */
 } rmixl_pcix_intr_t;
 
@@ -65,9 +71,9 @@
 	bus_dma_tag_t			sc_32bit_dmat;
 	bus_dma_tag_t			sc_64bit_dmat;
+	kmutex_t			sc_mutex;
 	int				sc_tmsk;
 	void 			       *sc_fatal_ih;
-	void 			       *sc_ih;
-	rmixl_pcix_intr_t		sc_intr[RMIXL_PCIX_NINTR];
-	bool				sc_intr_init_done;	
+        rmixl_pcix_evcnt_t             *sc_evcnts;
+	rmixl_pcix_intr_t	       *sc_intr;
 } rmixl_pcix_softc_t;
 
Index: /trunk/src/sys/arch/mips/rmi/rmixl_spl.S
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_spl.S	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_spl.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_spl.S,v 1.1.2.2 2010/04/14 01:23:15 cliff Exp $	*/
+/*	$NetBSD: rmixl_spl.S,v 1.1.2.6 2011/04/29 08:26:33 matt Exp $	*/
 
 /*-
@@ -38,13 +38,13 @@
 #include <mips/cpuregs.h>
 
-RCSID("$NetBSD: rmixl_spl.S,v 1.1.2.2 2010/04/14 01:23:15 cliff Exp $");
+RCSID("$NetBSD: rmixl_spl.S,v 1.1.2.6 2011/04/29 08:26:33 matt Exp $");
 
 #include "assym.h"
 
-#define PARANOIA	/* XXX TMP FIXME */
-
 #define MAP_SCALESHIFT		3
-#define RMIXL_SOFT_INT_MASK_0	(MIPS_SOFT_INT_MASK_1 >> 8)
+#define RMIXL_SOFT_INT_MASK_1	(MIPS_SOFT_INT_MASK_1 >> 8)
 #define RMIXL_SOFT_INT_MASK	(MIPS_SOFT_INT_MASK >> 8)
+#define RMIXL_INT_MASK_5	(MIPS_INT_MASK_5 >> 8)
+#define RMIXL_EIRR_PRESERVE	(RMIXL_INT_MASK_5 | RMIXL_SOFT_INT_MASK)
 #define RMIXL_INT_MASK_1	(MIPS_INT_MASK_1 >> 8)
 #define RMIXL_INT_MASK_5	(MIPS_INT_MASK_5 >> 8)
@@ -52,24 +52,51 @@
 #define RMIXL_COP_0_EIMR	_(9), 7
 
+	.set noreorder
 
 /* 
  * Array of mask of bits to set in the EIMR when we go to a
  * given hardware interrupt priority level.
+ * The softint bits in [IPL_NONE] and [IPL_SOFTCLOCK] should stay constant
+ * Hard intr bits are managed by rmixl_vec_establish and rmixl_vec_disestablish.
  */
-	.rdata
+	.data
 	.globl	_C_LABEL(ipl_eimr_map)
 	.type	_C_LABEL(ipl_eimr_map),@object
 	.p2align MAP_SCALESHIFT
 _C_LABEL(ipl_eimr_map):
-	.dword	~0			/* IPL_NONE */
-	.dword	~RMIXL_SOFT_INT_MASK_0	/* IPL_SOFT{CLOCK,BIO} */
-	.dword	~RMIXL_SOFT_INT_MASK	/* IPL_SOFT{NET,SERIAL} */
-	.dword	RMIXL_INT_MASK_5	/* IPL_VM */
+	.dword	RMIXL_SOFT_INT_MASK	/* IPL_NONE */
+	.dword	RMIXL_SOFT_INT_MASK_1	/* IPL_SOFT{CLOCK,BIO} */
+	.dword	0			/* IPL_SOFT{NET,SERIAL} */
+	.dword	0			/* IPL_VM */
 	.dword	0			/* IPL_SCHED */
-#if IPL_SCHED != IPL_HIGH
+	.dword	0			/* IPL_DDB */
 	.dword	0			/* IPL_HIGH */
-#endif
 
 	.text
+
+/*
+ * initialize cp0 interrupt control for this cpu
+ * - set STATUS[IE]
+ * - clear EIRR and EIMR
+ * on return, all interrupts are disabled by EIMR
+ *
+ * henceforth STATUS[IE] is expected to remain normally set
+ * but may be cleared and restored for temporary interrupt disablement
+ *
+ * call before the first call to spl0 on this cpu
+ */
+LEAF_NOPROFILE(rmixl_spl_init_cpu)
+	mfc0	t0, MIPS_COP_0_STATUS		# get STATUS
+	ori	t0, MIPS_SR_INT_IE		# set IE
+	mtc0	zero, MIPS_COP_0_STATUS		## disable all ints in STATUS
+	COP0_SYNC
+	dmtc0	zero, RMIXL_COP_0_EIMR		##  "       "   "   "  EIMR
+	COP0_SYNC
+	dmtc0	zero, RMIXL_COP_0_EIRR		## clear EIRR
+	COP0_SYNC
+	mtc0	t0, MIPS_COP_0_STATUS		## set STATUS | IE
+	JR_HB_RA
+END(rmixl_spl_init_cpu)
+
 /*
  * RMIXL processor interrupt control
@@ -77,139 +104,84 @@
  * Used as building blocks for spl(9) kernel interface.
  */
+
 _splraise:
 	/*
-	 * a0 = EIMR bits to be set for this IPL
+	 * a0 = EIMR bits requested to be set for this IPL
 	 * a1 = this IPL (IPL_*)
 	 * Can only use a0-a3 and v0-v1
+	 * old IPL is returned in v0
 	 */
-	PTR_L	a3, L_CPU(MIPS_CURLWP)
-	INT_L	v0, CPU_INFO_CPL(a3)		# get current IPL from cpu_info
-	sltu	v1, a1, v0			# newipl < curipl
-	bnez	v1, 2f				# yes, don't change.
-	 mfc0	a2, MIPS_COP_0_STATUS		# load STATUS
-	and	a2, ~MIPS_INT_MASK		# clear STATUS[IM]
-	sll	v1, a0, 8			# EIMR[7:0] to STATUS[15:8]
-	and	v1, MIPS_INT_MASK		#  "        "   "
-	or	v1, a2				# new STATUS value
-	mtc0	zero, MIPS_COP_0_STATUS		## disable all ints in STATUS
+	dmfc0	a2, RMIXL_COP_0_EIMR		# save EIMR
+	dmtc0	zero, RMIXL_COP_0_EIMR		## disable all interrupts
+	COP0_SYNC
+	PTR_L	a3, L_CPU(MIPS_CURLWP)		##
+	INT_L	v0, CPU_INFO_CPL(a3)		## get current IPL from cpu_info
+	sltu	v1, a1, v0			## newipl < curipl
+	bnez	v1, 1f				## yes, don't change.
+	 nop
 	INT_S	a1, CPU_INFO_CPL(a3)		## save IPL in cpu_info
 	dmtc0	a0, RMIXL_COP_0_EIMR		## set new EIMR
-	mtc0	v1, MIPS_COP_0_STATUS		## set new STATUS
-#ifdef PARANOIA
-	j	ra
-	 nop
-#endif /* PARANOIA */
-#ifdef PARANOIA
-	dmfc0	v0, RMIXL_COP_0_EIMR		# get EIMR
-1:	bne	a0, v0, 1b			# loop forever if not equal
-	 nop
-#endif /* PARANOIA */
-2:	j	ra
-	 nop
+	JR_HB_RA
+1:
+	dmtc0	a2, RMIXL_COP_0_EIMR		## restore saved EIMR
+	JR_HB_RA
 
 STATIC_LEAF(_splsw_splx)
 STATIC_XLEAF(_splsw_splx_noprof)		# does not get mcount hooks
-	PTR_L	a3, L_CPU(MIPS_CURLWP)		# get cpu_info
-	INT_L	a2, CPU_INFO_CPL(a3)		# get IPL from cpu_info
-	beq	a0, a2, 2f			# if same, nothing to do
-	 nop
-#ifdef PARANOIA
-	sltu	v0, a0, a2			# v0 = a0 < a2
-99:	beqz	v0, 99b				# loop forever if false
-	 nop
-#endif /* PARANOIA */
-	#move	a1, zero			# avoid lookup on splx(IPL_NONE)
-	#beq	a0, zero, 1f			# skip load
 	PTR_LA	v1, _C_LABEL(ipl_eimr_map)	# get address of table
 	sll	a2, a0, MAP_SCALESHIFT		# convert IPL to array offset
 	PTR_ADDU v1, a2				# add to table addr
 	REG_L	v1, (v1)			# load EIMR bits for this IPL
-1:
-	dmfc0	a2, MIPS_COP_0_STATUS		# load STATUS
-	and	a2, ~MIPS_INT_MASK		# clear STATUS[IM]
-	sll	v0, v1, 8			# EIMR[7:0] to STATUS[15:8]
-	and	v0, MIPS_INT_MASK		#  "        "   "
-	or	v0, a2				# new STATUS value
-	dmtc0	zero, RMIXL_COP_0_EIMR		## disable all interrupts
-	INT_S	a0, CPU_INFO_CPL(a3)		## save IPL in cpu_info (KSEG0)
+
+	dmtc0	zero, RMIXL_COP_0_EIMR		## disable all interrupts
+	COP0_SYNC
+	PTR_L	a3, L_CPU(MIPS_CURLWP)		## get cpu_info
+	INT_S	a0, CPU_INFO_CPL(a3)		## save IPL in cpu_info
 	dmtc0	v1, RMIXL_COP_0_EIMR		## set new EIMR
-	mtc0	v0, MIPS_COP_0_STATUS		## set new STATUS
-#ifdef PARANOIA
-	j	ra
-	 nop
-#endif /* PARANOIA */
-2:
-#ifdef PARANOIA
-	PTR_LA	v1, _C_LABEL(ipl_eimr_map)	# get address of table
-	sll	a2, a0, MAP_SCALESHIFT		# convert IPL to array offset
-	PTR_ADDU v1, a2				# add to table addr
-	REG_L	a1, (v1)			# load EIMR bits for this IPL
-	dmfc0	v1, RMIXL_COP_0_EIMR		# get EIMR
-3:	bne	a1, v1, 3b			# loop forever if not equal
-	 nop
-#endif /* PARANOIA */
-	j	ra
-	 nop
+	JR_HB_RA
 END(_splsw_splx)
 
 STATIC_LEAF(_splsw_spl0)
 	REG_L	v1, _C_LABEL(ipl_eimr_map) + 8*IPL_NONE
-	PTR_L	a3, L_CPU(MIPS_CURLWP)
-	mtc0	zero, MIPS_COP_0_CAUSE		# clear SOFT_INT bits
-	dmfc0	a2, MIPS_COP_0_STATUS		# load STATUS
-	and	a2, ~MIPS_INT_MASK		# clear STATUS[IM]
-	sll	v0, v1, 8			# EIMR[7:0] to STATUS[15:8]
-	and	v0, MIPS_INT_MASK		#  "        "   "
-	or	v0, MIPS_SR_INT_IE		# set STATUS[IE]
-	or	v0, a2				# new STATUS value
-	mtc0	zero, MIPS_COP_0_STATUS		## disable all interrupts
+	dmtc0	zero, RMIXL_COP_0_EIMR		## disable all interrupts
+	COP0_SYNC
+	PTR_L	a3, L_CPU(MIPS_CURLWP)		## get cpu_info
 #if IPL_NONE == 0
-	INT_S	zero, CPU_INFO_CPL(a3)		## set ipl to 0
+	INT_S	zero, CPU_INFO_CPL(a3)		## save IPL in cpu_info
 #else
 #error IPL_NONE != 0
 #endif
 	dmtc0	v1, RMIXL_COP_0_EIMR		## set new EIMR
-	mtc0	v0, MIPS_COP_0_STATUS		## set new STATUS
-	nop
-	nop
-	j	ra
-	 nop
+	JR_HB_RA
 END(_splsw_spl0)
 
-LEAF_NOPROFILE(rmixl_spln)
-	PTR_LA	v1, _C_LABEL(ipl_eimr_map)	# get address of table
-	sll	a2, a0, MAP_SCALESHIFT		# convert IPL to array offset
-	PTR_ADDU v1, a2				# add to table addr
-	REG_L	v0, (v1)			# load EIMR bits for this IPL
-	j	ra
-	 nop
-END(rmixl_spln)
-
 STATIC_LEAF(_splsw_setsoftintr)
-	mfc0	v1, MIPS_COP_0_STATUS		# save status register
-	mtc0	zero, MIPS_COP_0_STATUS		## disable interrupts (2 cycles)
-	nop
-	nop
-	mfc0	v0, MIPS_COP_0_CAUSE		## load cause register
-	nop
-	or	v0, v0, a0			## set soft intr. bits
-	mtc0	v0, MIPS_COP_0_CAUSE		## store back
-	mtc0	v1, MIPS_COP_0_STATUS		## enable interrupts
-	j	ra
-	nop
+	dsrl	a0, 8				# convert CAUSE bit to EIRR bit
+	and	a0, RMIXL_SOFT_INT_MASK		# restrict to softint bits
+	dmfc0	v1, RMIXL_COP_0_EIMR		# save EIMR register
+	dmtc0	zero, RMIXL_COP_0_EIMR		## disable all interrupts
+	COP0_SYNC
+	dmfc0	v0, RMIXL_COP_0_EIRR		## load EIRR
+	and	v0, RMIXL_EIRR_PRESERVE		## preserve clock & softints
+	or	v0, a0				## set new softint bit
+	dmtc0	v0, RMIXL_COP_0_EIRR		## store EIRR
+	COP0_SYNC
+	dmtc0	v1, RMIXL_COP_0_EIMR		## restore EIMR
+	JR_HB_RA
 END(_splsw_setsoftintr)
 
 STATIC_LEAF(_splsw_clrsoftintr)
-	mfc0	v1, MIPS_COP_0_STATUS		# save status register
-	mtc0	zero, MIPS_COP_0_STATUS		## disable interrupts (2 cycles)
-	nop
-	nop
-	mfc0	v0, MIPS_COP_0_CAUSE		## load cause register
-	nor	a0, zero, a0			## bitwise inverse of A0
-	and	v0, v0, a0			## clear soft intr. bits
-	mtc0	v0, MIPS_COP_0_CAUSE		## store back
-	mtc0	v1, MIPS_COP_0_STATUS		## enable interrupts
-	j	ra
-	nop
+	dsrl	a0, 8				# convert CAUSE bit to EIRR bit
+	and	a0, RMIXL_SOFT_INT_MASK		# restrict to softint bits
+	xor	a0, RMIXL_EIRR_PRESERVE		# clear from preserve mask
+	dmfc0	v1, RMIXL_COP_0_EIMR		# save EIMR register
+	dmtc0	zero, RMIXL_COP_0_EIMR		## disable all interrupts
+	COP0_SYNC
+	dmfc0	v0, RMIXL_COP_0_EIRR		## load EIRR
+	and	v0, a0				## apply preserve mask
+	dmtc0	v0, RMIXL_COP_0_EIRR		## store EIRR
+	COP0_SYNC
+	dmtc0	v1, RMIXL_COP_0_EIMR		## restore EIMR
+	JR_HB_RA
 END(_splsw_clrsoftintr)
 
@@ -226,30 +198,21 @@
 STATIC_LEAF(_splsw_splhigh)
 STATIC_XLEAF(_splsw_splhigh_noprof)
-	PTR_L	a3, L_CPU(MIPS_CURLWP)
-	INT_L	v0, CPU_INFO_CPL(a3)		# get current IPL from cpu_info
-	li	a1, IPL_HIGH			# 
-	beq	v0, a1, 1f			# don't do anything if IPL_HIGH
-	mfc0	v1, MIPS_COP_0_STATUS		# load STATUS
-	move	a2, zero			# clear for EIMR
-	and	a0, v1, MIPS_INT_MASK		# select all interrupts
-	xor	a0, v1				# clear STATUS[IM]
-	mtc0	zero, MIPS_COP_0_STATUS		## disable all interrupts
+	dmtc0	zero, RMIXL_COP_0_EIMR		## disable all interrupts
+	COP0_SYNC
+	PTR_L	a3, L_CPU(MIPS_CURLWP)		## get cpu_info from curlwp
+	li	a1, IPL_HIGH			##
+	INT_L	v0, CPU_INFO_CPL(a3)		## old IPL for return value
 	INT_S	a1, CPU_INFO_CPL(a3)		## save IPL in cpu_info
-	dmtc0	a2, RMIXL_COP_0_EIMR		## set new EIMR
-	mtc0	a0, MIPS_COP_0_STATUS		## set new STATUS
-	 nop					# XXXXX
-#ifdef PARANOIA
+						## interrupts remain disabled!
 	j	ra				# return
 	 nop
-#endif /* PARANOIA */
-1:
-#ifdef PARANOIA
-	dmfc0	v1, RMIXL_COP_0_EIMR		# load EIMR
-2:	bnez	v1, 2b				# loop forever if not 0.
-	 nop
-#endif /* PARANOIA */
-	j	ra				## return
-	 nop
 END(_splsw_splhigh)
+
+STATIC_LEAF(_splsw_splddb)
+	REG_L	a0, _C_LABEL(ipl_eimr_map) + 8*IPL_DDB
+	li	a1, IPL_DDB
+	b	_splraise
+	 nop
+END(_splsw_splddb)
 
 STATIC_LEAF(_splsw_splsched)
@@ -298,26 +261,23 @@
 	dmfc0	ta1, RMIXL_COP_0_EIRR		# get active interrupts
 						# restrict to hard int bits:
-	and	v1, ta1, RMIXL_SOFT_INT_MASK	#  v1 &= ~RMIXL_SOFT_INT_MASK
-	xor	v1, ta1				#   "      "
-
-	li	v0, IPL_NONE			# return IPL_NONE ...
-	beq	v1, zero, 2f			# ... if nothing pending
-	 nop
-
-	li	v0, IPL_VM			# start at IPL_VM
+	and	v1, ta1, RMIXL_SOFT_INT_MASK	#  v1 = ta1 & ~RMIXL_SOFT_INT_MASK
+	xor	v1, ta1				#   "       "
+
+	li	v0, IPL_NONE
 	PTR_LA	ta3, _C_LABEL(ipl_eimr_map) + 8*IPL_VM
 	REG_L	ta2, -8(ta3)			# load 'enabled' bits for IPL_SOFTSERIAL
-						#  ta2 has 'enabled' ints
 	and	v1, ta2				# apply to pending bits
-
+	beq	v1, zero, 4f			# if nothing pending...
+	 nop					# ... return IPL_NONE
+
+	li	v0, IPL_VM			# ipl=IPL_VM
 1:
-	REG_L	ta2, (ta3)			# load 'enabled' bits for ipl in v0
+	REG_L	ta2, (ta3)			# load 'enabled' bits for ipl
 	and	ta2, v1				# any match to pending intrs?
 	beq	ta2, zero, 2f			#  no, return ipl
-
-	PTR_ADDU ta3, 1 << MAP_SCALESHIFT	# point to next entry
-	addiu	v0, 1				#  increase ipl by 1
-	move	v1, ta2				# reduce down pending intrs
-	b	1b				# and check them
+	 PTR_ADDI ta3, 1 << MAP_SCALESHIFT	#  point to next entry
+	addiu	v0, 1				# ipl++
+	move	v1, ta2				# update highest pending
+	b	1b				# loop
 	 nop
 
@@ -330,6 +290,5 @@
 	 *   individial EIRR requests
 	 */
-	beq	v1, zero, 4f			# skip ahead if nothing pending
-	 li	t2, RMIXL_INT_MASK_5		# load RMIXL_INT_MASK_5
+	li	t2, RMIXL_INT_MASK_5		# load RMIXL_INT_MASK_5
 	and	t1, v1, t2			# save count/compare intr request value
 	nor	t0, zero, t2			# invert the mask
Index: /trunk/src/sys/arch/mips/rmi/rmixl_subr.S
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_subr.S	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_subr.S	(revision 152)
@@ -1,3 +1,4 @@
-/*	$NetBSD: rmixl_subr.S,v 1.1.2.7 2010/04/13 18:15:16 cliff Exp $	*/
+/*	rmixl_subr.S,v 1.1.2.8 2011/04/29 08:26:34 matt Exp	*/
+
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -37,10 +38,14 @@
 #include <mips/cpuregs.h>
 
+RCSID("rmixl_subr.S,v 1.1.2.8 2011/04/29 08:26:34 matt Exp");
+
 #include "assym.h"
 
-	.set	push
-        .set    noreorder
-        .set    mips64
-        .text
+#define RMIXL_COP_0_EIRR	_(9), 6
+#define RMIXL_COP_0_EIMR	_(9), 7
+
+	.set    noreorder
+	.set	arch=xlr
+	.text
 
 /*
@@ -54,5 +59,5 @@
 #endif
 	j	ra
-	mfcr	v0, a0
+	 mfcr	v0, a0
 END(rmixl_mfcr)
 
@@ -67,6 +72,26 @@
 #endif
 	j	ra
-	mtcr	a1, a0
+	 mtcr	a1, a0
 END(rmixl_mtcr)
+
+/*
+ * void rmixl_eirr_ack(uint64_t eimr, uint64_t vecbit, uint64_t preserve)
+ *
+ *	ack in EIRR the irq we are about to handle
+ *	disable all interrupts to prevent a race that would allow
+ *	e.g. softints set from a higher interrupt getting
+ *	clobbered by the EIRR read-modify-write 
+ */
+LEAF(rmixl_eirr_ack)
+	dmtc0	zero, RMIXL_COP_0_EIMR	/* EIMR = 0 */
+	COP0_SYNC
+	dmfc0	a3, RMIXL_COP_0_EIRR	/* a3 = EIRR */
+	and	a3, a2			/* a3 &= preserve */
+	or	a3, a1			/* a3 |= vecbit */
+	dmtc0	a3, RMIXL_COP_0_EIRR	/* EIRR = a3 */
+	COP0_SYNC
+	dmtc0	a0, RMIXL_COP_0_EIMR	/* EIMR = eimr */
+	JR_HB_RA
+END(rmixl_eirr_ack)
 
 #ifdef MULTIPROCESSOR
@@ -109,7 +134,11 @@
 NESTED(rmixl_cpu_trampoline, CALLFRAME_SIZ, ra)
 #ifdef _LP64
+	/*
+	 * reconstruct trampoline args addr:
+	 * sign-extend 32 bit KSEG0 address in a0
+	 * to make proper 64 bit KSEG0 addr
+	 */
+	sll		s0, a0, 0
 	li		t0, MIPS_SR_KX
-	li		t1, MIPS_KSEG0_START	/* reconstruct presumed upper half ... */
-	or		a0, a0, t1		/* ... of trampoline args addr */
 #else
 	li		t0, 0
@@ -128,5 +157,5 @@
 	 * load our stack pointer from trampoline args
 	 */
-	REG_L		sp, 0*SZREG(a0)		/* XXX ta_sp */
+	REG_L		sp, 0*SZREG(s0)		/* XXX ta_sp */
 
 	/*
@@ -134,5 +163,5 @@
 	 * save in t8 reg dedicated as 'mips_curlwp'
 	 */
-	REG_L		t8, 1*SZREG(a0)		/* XXX ta_lwp */
+	REG_L		t8, 1*SZREG(s0)		/* XXX ta_lwp */
 
 	/*
@@ -140,7 +169,12 @@
 	 * jump to common mips cpu_trampoline
 	 */
-	REG_L		a1, 2*SZREG(a0)		/* XXX ta_cpuinfo */
+	REG_L		a1, 2*SZREG(s0)		/* XXX ta_cpuinfo */
+	dmtc0		a1, $22, 0		/* MIPS_COP_0_OSSCRATCH */
+	PTR_L		v1, CPU_INFO_TLB_INFO(a1)
+	PTR_L		v1, TI_LOCK(v1)
+	PTR_ADDU	v1, MTX_LOCK
+	dmtc0		v1, $22, 2
 	j		cpu_trampoline
-	 mtc0		a1, $22, 0		/* MIPS_COP_0_OSSCRATCH */
+	 nop
 
 	/* NOTREACHED */
@@ -149,5 +183,2 @@
 
 #endif	/* MULTIPROCESSOR */
-
-	.set	pop
-
Index: /trunk/src/sys/arch/mips/rmi/rmixl_usbi.c
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_usbi.c	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_usbi.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_usbi.c,v 1.1.2.5 2010/04/12 22:42:07 cliff Exp $	*/
+/*	$NetBSD: rmixl_usbi.c,v 1.1.2.7 2011/04/29 08:26:34 matt Exp $	*/
 
 /*-
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixl_usbi.c,v 1.1.2.5 2010/04/12 22:42:07 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rmixl_usbi.c,v 1.1.2.7 2011/04/29 08:26:34 matt Exp $");
 
 #include "locators.h"
@@ -62,5 +62,5 @@
 #define RMIXL_USBI_GEN_WRITE(o,v)  *RMIXL_USBI_GEN_VADDR(o) = htole32(v)
 
-static const char *rmixl_usbi_intrnames[RMIXL_UB_INTERRUPT_MAX+1] = {
+static const char rmixl_usbi_intrnames[RMIXL_UB_INTERRUPT_MAX+1][16] = {
 	"int 0 (ohci0)",
 	"int 1 (ohci1)",
@@ -70,21 +70,4 @@
 	"int 5 (force)"
 };
-
-typedef struct rmixl_usbi_dispatch {
-	int (*func)(void *);
-	void *arg; 
-	struct evcnt count;
-} rmixl_usbi_dispatch_t;
-
-typedef struct rmixl_usbi_softc {
-	device_t		sc_dev;
-	bus_space_tag_t		sc_eb_bst;
-	bus_space_tag_t		sc_el_bst;
-	bus_addr_t		sc_addr;
-	bus_size_t		sc_size;
-	bus_dma_tag_t		sc_dmat;
-	rmixl_usbi_dispatch_t	sc_dispatch[RMIXL_UB_INTERRUPT_MAX + 1];
-} rmixl_usbi_softc_t;
-
 
 static int	rmixl_usbi_match(device_t, cfdata_t, void *);
@@ -147,10 +130,6 @@
 	 */
         r = RMIXL_IOREG_READ(RMIXL_IO_DEV_GPIO + RMIXL_GPIO_BIST_EACH_STS);
-	aprint_normal(": BIST status=");
-	if ((r & __BIT(18)) == 0) {			/* XXX USB_BIST */
-		aprint_normal("FAIL\n");
-		return;
-	}
-	aprint_normal("OK");
+	aprint_normal(": BIST status=%s,",
+	    (r & __BIT(18)) ? "OK" : "FAIL");		/* XXX USB_BIST */
 
 	/*
@@ -174,9 +153,12 @@
 
 	/* establish interrupt */
-	ih = rmixl_intr_establish(obio->obio_intr, obio->obio_tmsk,
-		IPL_USB, RMIXL_TRIG_LEVEL, RMIXL_POLR_HIGH,
-		rmixl_usbi_intr, sc, false);
-	if (ih == NULL)
-		panic("%s: couldn't establish interrupt", device_xname(self));
+	if (obio->obio_intr != OBIOCF_INTR_DEFAULT) {
+		ih = rmixl_intr_establish(obio->obio_intr, obio->obio_tmsk,
+			IPL_USB, RMIXL_TRIG_LEVEL, RMIXL_POLR_HIGH,
+			rmixl_usbi_intr, sc, false);
+		if (ih == NULL)
+			panic("%s: couldn't establish interrupt",
+				device_xname(self));
+	}
 
 	aprint_normal("\n");
Index: /trunk/src/sys/arch/mips/rmi/rmixl_usbivar.h
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixl_usbivar.h	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixl_usbivar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixl_usbivar.h,v 1.1.2.1 2009/12/14 07:21:41 cliff Exp $	*/
+/*	$NetBSD: rmixl_usbivar.h,v 1.1.2.2 2011/04/29 08:26:34 matt Exp $	*/
 
 /*-
@@ -45,6 +45,26 @@
 };
 
-extern void *rmixl_usbi_intr_establish(void *, u_int, int (*)(void *), void *);
-extern void  rmixl_usbi_intr_disestablish(void *, void *);
+typedef struct rmixl_usbi_dispatch {
+	int (*func)(void *);
+	void *arg; 
+	struct evcnt count;
+} rmixl_usbi_dispatch_t;
+
+typedef struct rmixl_usbi_softc {
+	device_t		sc_dev;
+	bus_space_tag_t		sc_eb_bst;
+	bus_space_tag_t		sc_el_bst;
+	bus_addr_t		sc_addr;
+	bus_size_t		sc_size;
+	bus_dma_tag_t		sc_dmat;
+	device_t		sc_ohci_devs[2];
+	rmixl_usbi_dispatch_t	sc_dispatch[RMIXL_UB_INTERRUPT_MAX + 1];
+} rmixl_usbi_softc_t;
+
+
+#ifdef _KERNEL
+void *rmixl_usbi_intr_establish(void *, u_int, int (*)(void *), void *);
+void  rmixl_usbi_intr_disestablish(void *, void *);
+#endif
 
 #endif /* _MIPS_RMI_RMIXL_USBIVAR_H_ */
Index: /trunk/src/sys/arch/mips/rmi/rmixlvar.h
===================================================================
--- /trunk/src/sys/arch/mips/rmi/rmixlvar.h	(revision 151)
+++ /trunk/src/sys/arch/mips/rmi/rmixlvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: rmixlvar.h,v 1.1.2.18 2010/04/17 07:33:33 cliff Exp $	*/
+/*	$NetBSD: rmixlvar.h,v 1.1.2.20 2011/04/29 08:26:34 matt Exp $	*/
 
 /*
@@ -47,4 +47,6 @@
 #include <dev/pci/pcivar.h>
 
+extern void rmixl_pcr_init_core(void);
+
 static inline bool
 cpu_rmixl(const struct pridtab *ct)
@@ -111,4 +113,6 @@
 struct rmixl_config {
 	uint64_t		 rc_io_pbase;	
+	uint64_t		 rc_flash_pbase;	/* FLASH_BAR */
+	uint64_t		 rc_flash_mask;		/* FLASH_BAR */
 	bus_addr_t		 rc_pci_cfg_pbase;	
 	bus_size_t		 rc_pci_cfg_size;
@@ -121,4 +125,5 @@
 	struct mips_bus_space	 rc_obio_eb_memt; 	/* DEVIO -eb */
 	struct mips_bus_space	 rc_obio_el_memt; 	/* DEVIO -el */
+	struct mips_bus_space	 rc_iobus_memt; 	/* Peripherals IO Bus */
 	struct mips_bus_space	 rc_pci_cfg_memt; 	/* PCI CFG  */
 	struct mips_bus_space	 rc_pci_ecfg_memt; 	/* PCI ECFG */
@@ -132,4 +137,5 @@
 	struct extent		*rc_obio_eb_ex;
 	struct extent		*rc_obio_el_ex;
+	struct extent		*rc_iobus_ex;
 	struct extent		*rc_pci_cfg_ex;
 	struct extent		*rc_pci_ecfg_ex;
@@ -148,4 +154,5 @@
 extern void rmixl_obio_eb_bus_mem_init(bus_space_tag_t, void *);
 extern void rmixl_obio_el_bus_mem_init(bus_space_tag_t, void *);
+extern void rmixl_iobus_bus_mem_init(bus_space_tag_t, void *);
 extern void rmixl_pci_cfg_bus_mem_init(bus_space_tag_t, void *);
 extern void rmixl_pci_ecfg_bus_mem_init(bus_space_tag_t, void *);
@@ -158,4 +165,5 @@
 extern uint64_t rmixl_mfcr(u_int);
 extern void rmixl_mtcr(uint64_t, u_int);
+extern void rmixl_eirr_ack(uint64_t, uint64_t, uint64_t);
 
 
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbbuswatch.c
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbbuswatch.c	(revision 152)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbbuswatch.c	(revision 152)
@@ -0,0 +1,112 @@
+/*	$NetBSD: sbbuswatch.c,v 1.1.2.2 2010/06/10 17:35:04 cliff Exp $	*/
+/*
+ * Copyright (c) 2010, The NetBSD Foundation, Inc.  All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Cliff Neighbors.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/cpu.h>
+
+#include <mips/cpu.h>
+#include <mips/locore.h>
+
+#include <mips/sibyte/include/sb1250_int.h>
+#include <mips/sibyte/include/sb1250_regs.h>
+#include <mips/sibyte/dev/sbbuswatchvar.h>
+
+#define READ_REG(rp)            (mips3_ld((volatile uint64_t *)(rp)))
+#define WRITE_REG(rp, val)      (mips3_sd((volatile uint64_t *)(rp), (val)))
+
+static void sibyte_bus_watch_intr(void *, uint32_t, vaddr_t);
+
+void
+sibyte_bus_watch_init(void)
+{
+	(void)READ_REG(MIPS_PHYS_TO_KSEG1(A_SCD_BUS_ERR_STATUS));
+	WRITE_REG(MIPS_PHYS_TO_KSEG1(A_BUS_L2_ERRORS), 0);
+	WRITE_REG(MIPS_PHYS_TO_KSEG1(A_BUS_MEM_IO_ERRORS), 0);
+
+	(void)cpu_intr_establish(K_INT_BAD_ECC, IPL_DDB,
+		sibyte_bus_watch_intr, (void *)K_INT_BAD_ECC);
+	(void)cpu_intr_establish(K_INT_COR_ECC, IPL_DDB,
+		sibyte_bus_watch_intr, (void *)K_INT_COR_ECC);
+	(void)cpu_intr_establish(K_INT_IO_BUS, IPL_DDB,
+		sibyte_bus_watch_intr, (void *)K_INT_IO_BUS);
+}
+
+int
+sibyte_bus_watch_check(unsigned int cause)
+{
+	uint64_t err_ctl;
+	uint64_t cache_err_i;
+	uint64_t cache_err_d;
+	uint64_t cache_err_dpa;
+	uint64_t bus_err_dpa;
+	uint32_t bus_err_status;
+	uint32_t l2_errors;
+	uint32_t mem_io_errors;
+
+	bus_err_status = READ_REG(
+		MIPS_PHYS_TO_KSEG1(A_SCD_BUS_ERR_STATUS));
+
+	if (bus_err_status == 0)
+		return 0;
+
+	l2_errors = READ_REG(
+		MIPS_PHYS_TO_KSEG1(A_BUS_L2_ERRORS));
+	if (l2_errors != 0)
+		WRITE_REG(MIPS_PHYS_TO_KSEG1(A_BUS_L2_ERRORS), 0);
+
+	mem_io_errors = READ_REG(
+		MIPS_PHYS_TO_KSEG1(A_BUS_MEM_IO_ERRORS));
+	if (mem_io_errors != 0)
+		WRITE_REG(MIPS_PHYS_TO_KSEG1(A_BUS_MEM_IO_ERRORS), 0);
+
+	asm volatile("dmfc0 %0, $26, 0;" : "=r"(err_ctl));
+	asm volatile("dmfc0 %0, $26, 1;" : "=r"(bus_err_dpa));
+	asm volatile("dmfc0 %0, $27, 0;" : "=r"(cache_err_i));
+	asm volatile("dmfc0 %0, $27, 1;" : "=r"(cache_err_d));
+	asm volatile("dmfc0 %0, $27, 3;" : "=r"(cache_err_dpa));
+
+	printf("bus_err_status=%#x\n", bus_err_status);
+	printf("l2_errors=%#x\n", l2_errors);
+	printf("mem_io_errors=%#x\n", mem_io_errors);
+	printf("err_ctl=%#"PRIx64"\n", err_ctl);
+	printf("bus_err_dpa=%#"PRIx64"\n", bus_err_dpa);
+	printf("cache_err_i=%#"PRIx64"\n", cache_err_i);
+	printf("cache_err_d=%#"PRIx64"\n", cache_err_d);
+	printf("cache_err_dpa=%#"PRIx64"\n", cache_err_dpa);
+
+	return -1;
+}
+
+static void
+sibyte_bus_watch_intr(void *arg, uint32_t status, vaddr_t pc)
+{
+	printf("%s: %p\n", __func__, arg);
+	(void)sibyte_bus_watch_check(0);
+}
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbbuswatchvar.h
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbbuswatchvar.h	(revision 152)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbbuswatchvar.h	(revision 152)
@@ -0,0 +1,36 @@
+/*	$NetBSD: sbbuswatchvar.h,v 1.1.2.2 2010/06/10 17:33:21 cliff Exp $	*/
+/*
+ * Copyright (c) 2010, The NetBSD Foundation, Inc.  All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Cliff Neighbors.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _ARCH_SIBYTE_DEV_SBBUSWATCHVAR_H
+#define	_ARCH_SIBYTE_DEV_SBBUSWATCHVAR_H
+
+extern void sibyte_bus_watch_init(void);
+extern int  sibyte_bus_watch_check(unsigned int);
+
+#endif	/* _ARCH_SIBYTE_DEV_SBBUSWATCHVAR_H */
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbgbus.c
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbgbus.c	(revision 151)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbgbus.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sbgbus.c,v 1.10.96.1 2009/11/23 18:28:46 matt Exp $ */
+/* $NetBSD: sbgbus.c,v 1.10.96.2 2010/06/09 14:22:16 matt Exp $ */
 
 /*
@@ -34,5 +34,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sbgbus.c,v 1.10.96.1 2009/11/23 18:28:46 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbgbus.c,v 1.10.96.2 2010/06/09 14:22:16 matt Exp $");
 
 #include <sys/param.h>
@@ -48,16 +48,15 @@
 extern struct cfdriver sbgbus_cd;
 
-static int	sbgbus_match(struct device *, struct cfdata *, void *);
-static void	sbgbus_attach(struct device *, struct device *, void *);
+static int	sbgbus_match(device_t, cfdata_t, void *);
+static void	sbgbus_attach(device_t, device_t, void *);
 
-CFATTACH_DECL(sbgbus, sizeof(struct device),
+CFATTACH_DECL_NEW(sbgbus, 0,
     sbgbus_match, sbgbus_attach, NULL, NULL);
 
-static int	sbgbussearch(struct device *, struct cfdata *,
-			     const int *, void *);
+static int	sbgbussearch(device_t, cfdata_t, const int *, void *);
 static int	sbgbusprint(void *, const char *);
 
 static int
-sbgbus_match(struct device *parent, struct cfdata *match, void *aux)
+sbgbus_match(device_t parent, cfdata_t match, void *aux)
 {
 	struct sbobio_attach_args *sap = aux;
@@ -70,5 +69,5 @@
 
 static void
-sbgbus_attach(struct device *parent, struct device *self, void *aux)
+sbgbus_attach(device_t parent, device_t self, void *aux)
 {
 
@@ -96,5 +95,5 @@
 
 static int
-sbgbussearch(struct device *parent, struct cfdata *cf,
+sbgbussearch(device_t parent, cfdata_t cf,
 	     const int *ldesc, void *aux)
 {
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbjcn.c
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbjcn.c	(revision 151)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbjcn.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sbjcn.c,v 1.21.14.1 2009/11/23 18:28:46 matt Exp $ */
+/* $NetBSD: sbjcn.c,v 1.21.14.2 2010/06/09 14:22:16 matt Exp $ */
 
 /*
@@ -104,5 +104,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sbjcn.c,v 1.21.14.1 2009/11/23 18:28:46 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbjcn.c,v 1.21.14.2 2010/06/09 14:22:16 matt Exp $");
 
 #define	SBJCN_DEBUG
@@ -220,8 +220,8 @@
 #endif /* KGDB */
 
-static int	sbjcn_match(struct device *, struct cfdata *, void *);
-static void	sbjcn_attach(struct device *, struct device *, void *);
-
-CFATTACH_DECL(sbjcn, sizeof(struct sbjcn_softc),
+static int	sbjcn_match(device_t, cfdata_t, void *);
+static void	sbjcn_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(sbjcn, sizeof(struct sbjcn_softc),
     sbjcn_match, sbjcn_attach, NULL, NULL);
 
@@ -238,5 +238,5 @@
 
 static int
-sbjcn_match(struct device *parent, struct cfdata *match, void *aux)
+sbjcn_match(device_t parent, cfdata_t match, void *aux)
 {
 	struct sbscd_attach_args *sap = aux;
@@ -249,12 +249,13 @@
 
 static void
-sbjcn_attach(struct device *parent, struct device *self, void *aux)
-{
-	struct sbjcn_softc *sc = (struct sbjcn_softc *)self;
+sbjcn_attach(device_t parent, device_t self, void *aux)
+{
+	struct sbjcn_softc *sc = device_private(self);
 	struct sbscd_attach_args *sap = aux;
 
+	sc->sc_dev = self;
 	sc->sc_addr = sap->sa_base + sap->sa_locs.sa_offset;
 
-	printf("\n");
+	aprint_normal("\n");
 	sbjcn_attach_channel(sc, 0, sap->sa_locs.sa_intr[0]);
 }
@@ -314,6 +315,7 @@
 	ch->ch_rbuf = malloc(sbjcn_rbuf_size << 1, M_DEVBUF, M_NOWAIT);
 	if (ch->ch_rbuf == NULL) {
-		printf("%s: channel %d: unable to allocate ring buffer\n",
-		    sc->sc_dev.dv_xname, chan);
+		aprint_error_dev(sc->sc_dev,
+		    "channel %d: unable to allocate ring buffer\n",
+		    chan);
 		return;
 	}
@@ -329,7 +331,7 @@
 
 		cn_tab->cn_dev = makedev(maj,
-		    (device_unit(&sc->sc_dev) << 1) + chan);
-
-		printf("%s: channel %d: console\n", sc->sc_dev.dv_xname, chan);
+		    (device_unit(sc->sc_dev) << 1) + chan);
+
+		aprint_normal_dev(sc->sc_dev, "channel %d: console\n", chan);
 	}
 
@@ -344,5 +346,5 @@
 
 		SET(ch->ch_hwflags, SBJCN_HW_KGDB);
-		printf("%s: channel %d: kgdb\n", sc->sc_dev.dv_xname, chan);
+		aprint_normal_dev(sc->sc_dev, "channel %d: kgdb\n", chan);
 	}
 #endif
@@ -392,6 +394,7 @@
 	struct tty *tp = ch->ch_tty;
 
-	printf("%s: chan %d: %s %sclocal  %sdcd %sts_carr_on %sdtr %stx_stopped\n",
-	    sc->sc_dev.dv_xname, ch->ch_num, str,
+	aprint_normal_dev(sc->sc_dev,
+	    "chan %d: %s %sclocal  %sdcd %sts_carr_on %sdtr %stx_stopped\n",
+	    ch->ch_num, str,
 	    ISSET(tp->t_cflag, CLOCAL) ? "+" : "-",
 	    ISSET(ch->ch_iports, ch->ch_i_dcd) ? "+" : "-",
@@ -400,6 +403,7 @@
 	    ch->ch_tx_stopped ? "+" : "-");
 
-	printf("%s: chan %d: %s %scrtscts %scts %sts_ttstop  %srts %xrx_flags\n",
-	    sc->sc_dev.dv_xname, ch->ch_num, str,
+	aprint_normal_dev(sc->sc_dev,
+	    "chan %d: %s %scrtscts %scts %sts_ttstop  %srts %xrx_flags\n",
+	    ch->ch_num, str,
 	    ISSET(tp->t_cflag, CRTSCTS) ? "+" : "-",
 	    ISSET(ch->ch_iports, ch->ch_i_cts) ? "+" : "-",
@@ -1047,6 +1051,6 @@
 #ifdef DIAGNOSTIC
 	if (!timo)
-		printf("%s: sbjcn_iflush timeout %02x\n",
-		    ch->ch_sc->sc_dev.dv_xname, reg);
+		aprint_error_dev(ch->ch_sc->sc_dev,
+		    "%s: sbjcn_iflush timeout %02x\n", reg);
 #endif
 }
@@ -1201,5 +1205,5 @@
 
 	log(LOG_WARNING, "%s: channel %d: %d fifo overflow%s, %d ibuf flood%s\n",
-	    sc->sc_dev.dv_xname, ch->ch_num,
+	    device_xname(sc->sc_dev), ch->ch_num,
 	    overflows, overflows == 1 ? "" : "s",
 	    floods, floods == 1 ? "" : "s");
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbjcnvar.h
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbjcnvar.h	(revision 151)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbjcnvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sbjcnvar.h,v 1.2 2003/02/07 17:38:49 cgd Exp $ */
+/* $NetBSD: sbjcnvar.h,v 1.2.126.1 2010/06/09 14:22:16 matt Exp $ */
 
 /*
@@ -164,5 +164,5 @@
 
 struct sbjcn_softc {
-	struct device	sc_dev;		/* base device */
+	device_t	sc_dev;		/* base device */
 
 	/* shared data structures */
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbobio.c
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbobio.c	(revision 151)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbobio.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sbobio.c,v 1.16.98.1 2009/11/23 18:28:47 matt Exp $ */
+/* $NetBSD: sbobio.c,v 1.16.98.2 2010/06/09 14:22:16 matt Exp $ */
 
 /*
@@ -34,5 +34,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sbobio.c,v 1.16.98.1 2009/11/23 18:28:47 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbobio.c,v 1.16.98.2 2010/06/09 14:22:16 matt Exp $");
 
 #include <sys/param.h>
@@ -48,8 +48,8 @@
 #include "locators.h"
 
-static int	sbobio_match(struct device *, struct cfdata *, void *);
-static void	sbobio_attach(struct device *, struct device *, void *);
-
-CFATTACH_DECL(sbobio, sizeof(struct device),
+static int	sbobio_match(device_t, cfdata_t, void *);
+static void	sbobio_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(sbobio, 0,
     sbobio_match, sbobio_attach, NULL, NULL);
 
@@ -105,5 +105,5 @@
 
 static int
-sbobio_match(struct device *parent, struct cfdata *match, void *aux)
+sbobio_match(device_t parent, cfdata_t match, void *aux)
 {
 	struct zbbus_attach_args *zap = aux;
@@ -129,5 +129,5 @@
 
 static void
-sbobio_attach(struct device *parent, struct device *self, void *aux)
+sbobio_attach(device_t parent, device_t self, void *aux)
 {
 	struct sbobio_attach_args sa;
@@ -164,5 +164,5 @@
 	}
 
-	printf(": %s peripherals\n", dscr);
+	aprint_normal(": %s peripherals\n", dscr);
 
 	for (i = 0; i < devcount; i++) {
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbscd.c
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbscd.c	(revision 151)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbscd.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sbscd.c,v 1.14 2008/06/16 08:36:51 cegger Exp $ */
+/* $NetBSD: sbscd.c,v 1.14.14.1 2010/06/09 14:22:17 matt Exp $ */
 
 /*
@@ -34,5 +34,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sbscd.c,v 1.14 2008/06/16 08:36:51 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbscd.c,v 1.14.14.1 2010/06/09 14:22:17 matt Exp $");
 
 #include <sys/param.h>
@@ -45,8 +45,8 @@
 #include "locators.h"
 
-static int	sbscd_match(struct device *, struct cfdata *, void *);
-static void	sbscd_attach(struct device *, struct device *, void *);
+static int	sbscd_match(device_t, cfdata_t, void *);
+static void	sbscd_attach(device_t, device_t, void *);
 
-CFATTACH_DECL(sbscd, sizeof(struct device),
+CFATTACH_DECL_NEW(sbscd, 0,
     sbscd_match, sbscd_attach, NULL, NULL);
 
@@ -70,5 +70,5 @@
 
 static int
-sbscd_match(struct device *parent, struct cfdata *match, void *aux)
+sbscd_match(device_t parent, cfdata_t match, void *aux)
 {
 	struct zbbus_attach_args *zap = aux;
@@ -81,5 +81,5 @@
 
 static void
-sbscd_attach(struct device *parent, struct device *self, void *aux)
+sbscd_attach(device_t parent, device_t self, void *aux)
 {
 	struct sbscd_attach_args sa;
@@ -87,5 +87,5 @@
 	int locs[SBSCDCF_NLOCS];
 
-	printf("\n");
+	aprint_normal("\n");
 
 	for (i = 0; i < sb1250_sbscd_dev_count; i++) {
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbscn.c
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbscn.c	(revision 151)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbscn.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sbscn.c,v 1.27.14.2 2009/11/23 18:46:50 matt Exp $ */
+/* $NetBSD: sbscn.c,v 1.27.14.3 2010/06/09 14:22:17 matt Exp $ */
 
 /*
@@ -110,5 +110,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sbscn.c,v 1.27.14.2 2009/11/23 18:46:50 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbscn.c,v 1.27.14.3 2010/06/09 14:22:17 matt Exp $");
 
 #define	SBSCN_DEBUG
@@ -230,8 +230,8 @@
 #endif /* KGDB */
 
-static int	sbscn_match(struct device *, struct cfdata *, void *);
-static void	sbscn_attach(struct device *, struct device *, void *);
-
-CFATTACH_DECL(sbscn, sizeof(struct sbscn_softc),
+static int	sbscn_match(device_t, cfdata_t, void *);
+static void	sbscn_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(sbscn, sizeof(struct sbscn_softc),
     sbscn_match, sbscn_attach, NULL, NULL);
 
@@ -260,5 +260,5 @@
 
 static int
-sbscn_match(struct device *parent, struct cfdata *match, void *aux)
+sbscn_match(device_t parent, cfdata_t match, void *aux)
 {
 	struct sbobio_attach_args *sap = aux;
@@ -271,13 +271,14 @@
 
 static void
-sbscn_attach(struct device *parent, struct device *self, void *aux)
-{
-	struct sbscn_softc *sc = (struct sbscn_softc *)self;
+sbscn_attach(device_t parent, device_t self, void *aux)
+{
+	struct sbscn_softc *sc = device_private(self);
 	struct sbobio_attach_args *sap = aux;
 	int i;
 
+	sc->sc_dev = self;
 	sc->sc_addr = sap->sa_base + sap->sa_locs.sa_offset;
 
-	printf("\n");
+	aprint_normal("\n");
 	for (i = 0; i < 2; i++)
 		sbscn_attach_channel(sc, i, sap->sa_locs.sa_intr[i]);
@@ -345,6 +346,7 @@
 	ch->ch_rbuf = malloc(sbscn_rbuf_size << 1, M_DEVBUF, M_NOWAIT);
 	if (ch->ch_rbuf == NULL) {
-		printf("%s: channel %d: unable to allocate ring buffer\n",
-		    sc->sc_dev.dv_xname, chan);
+		aprint_error_dev(sc->sc_dev,
+		    "channel %d: unable to allocate ring buffer\n",
+		    chan);
 		return;
 	}
@@ -360,7 +362,7 @@
 
 		cn_tab->cn_dev = makedev(maj,
-		    (device_unit(&sc->sc_dev) << 1) + chan);
-
-		printf("%s: channel %d: console\n", sc->sc_dev.dv_xname, chan);
+		    (device_unit(sc->sc_dev) << 1) + chan);
+
+		aprint_normal_dev(sc->sc_dev, "channel %d: console\n", chan);
 	}
 
@@ -375,5 +377,5 @@
 
 		SET(sc->sc_hwflags, SBSCN_HW_KGDB);
-		printf("%s: channel %d: kgdb\n", sc->sc_dev.dv_xname, chan);
+		aprint_normal_dev(sc->sc_dev, "channel %d: kgdb\n", chan);
 	}
 #endif
@@ -382,5 +384,5 @@
 
 #if NRND > 0 && defined(RND_SBSCN)
-	rnd_attach_source(&ch->ch_rnd_source, sc->sc_dev.dv_xname,
+	rnd_attach_source(&ch->ch_rnd_source, device_xname(sc->sc_dev),
 			  RND_TYPE_TTY, 0);
 #endif
@@ -428,6 +430,7 @@
 	struct tty *tp = ch->ch_tty;
 
-	printf("%s: chan %d: %s %sclocal  %sdcd %sts_carr_on %sdtr %stx_stopped\n",
-	    sc->sc_dev.dv_xname, ch->ch_num, str,
+	aprint_normal_dev(sc->sc_dev, 
+	    "chan %d: %s %sclocal  %sdcd %sts_carr_on %sdtr %stx_stopped\n",
+	    ch->ch_num, str,
 	    ISSET(tp->t_cflag, CLOCAL) ? "+" : "-",
 	    ISSET(ch->ch_iports, ch->ch_i_dcd) ? "+" : "-",
@@ -436,6 +439,7 @@
 	    ch->ch_tx_stopped ? "+" : "-");
 
-	printf("%s: chan %d: %s %scrtscts %scts %sts_ttstop  %srts %xrx_flags\n",
-	    sc->sc_dev.dv_xname, ch->ch_num, str,
+	aprint_normal_dev(sc->sc_dev, 
+	    "chan %d: %s %scrtscts %scts %sts_ttstop  %srts %xrx_flags\n",
+	    ch->ch_num, str,
 	    ISSET(tp->t_cflag, CRTSCTS) ? "+" : "-",
 	    ISSET(ch->ch_iports, ch->ch_i_cts) ? "+" : "-",
@@ -1140,6 +1144,7 @@
 #ifdef DIAGNOSTIC
 	if (!timo)
-		printf("%s: sbscn_iflush timeout %02x\n",
-		    ch->ch_sc->sc_dev.dv_xname, reg & 0xff);
+		aprint_error_dev(ch->ch_sc->sc_dev,
+		    "sbscn_iflush timeout %02x\n",
+		    reg & 0xff);
 #endif
 }
@@ -1306,5 +1311,5 @@
 
 	log(LOG_WARNING, "%s: channel %d: %d fifo overflow%s, %d ibuf flood%s\n",
-	    sc->sc_dev.dv_xname, ch->ch_num,
+	    device_xname(sc->sc_dev), ch->ch_num,
 	    overflows, overflows == 1 ? "" : "s",
 	    floods, floods == 1 ? "" : "s");
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbscnvar.h
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbscnvar.h	(revision 151)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbscnvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sbscnvar.h,v 1.3 2006/03/07 14:01:41 he Exp $ */
+/* $NetBSD: sbscnvar.h,v 1.3.88.1 2010/06/09 14:22:17 matt Exp $ */
 
 /*
@@ -163,5 +163,5 @@
 
 struct sbscn_softc {
-	struct device	sc_dev;		/* base device */
+	device_t	sc_dev;		/* base device */
 
 	/* shared data structures */
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbsmbus.c
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbsmbus.c	(revision 151)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbsmbus.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sbsmbus.c,v 1.13 2006/03/28 17:38:25 thorpej Exp $ */
+/* $NetBSD: sbsmbus.c,v 1.13.84.1 2010/06/09 14:22:17 matt Exp $ */
 
 /*
@@ -37,5 +37,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sbsmbus.c,v 1.13 2006/03/28 17:38:25 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbsmbus.c,v 1.13.84.1 2010/06/09 14:22:17 matt Exp $");
 
 #include <sys/param.h>
@@ -51,9 +51,9 @@
 #include "locators.h"
 
-static int smbus_match(struct device *, struct cfdata *, void *);
-static void smbus_attach(struct device *, struct device *, void *);
+static int smbus_match(device_t, cfdata_t, void *);
+static void smbus_attach(device_t, device_t, void *);
 static int smbus_print(void *, const char *);
 
-CFATTACH_DECL(smbus, sizeof(struct device),
+CFATTACH_DECL_NEW(smbus, 0,
     smbus_match, smbus_attach, NULL, NULL);
 
@@ -74,5 +74,5 @@
 
 static int
-smbus_match(struct device *parent, struct cfdata *match, void *aux)
+smbus_match(device_t parent, cfdata_t match, void *aux)
 {
 
@@ -82,5 +82,5 @@
 
 static void
-smbus_attach(struct device *parent, struct device *self, void *aux)
+smbus_attach(device_t parent, device_t self, void *aux)
 {
 	struct smbus_attach_args sa;
@@ -89,5 +89,5 @@
 
 	found++;
-	printf("\n");
+	aprint_normal("\n");
 
 	for (i = 0; i < smbus_dev_count; i++) {
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbtimer.c
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbtimer.c	(revision 151)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbtimer.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sbtimer.c,v 1.13.28.2 2009/11/23 18:46:50 matt Exp $ */
+/* $NetBSD: sbtimer.c,v 1.13.28.3 2010/06/09 14:22:17 matt Exp $ */
 
 /*
@@ -34,5 +34,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sbtimer.c,v 1.13.28.2 2009/11/23 18:46:50 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbtimer.c,v 1.13.28.3 2010/06/09 14:22:17 matt Exp $");
 
 #include <sys/param.h>
@@ -48,5 +48,5 @@
 
 struct sbtimer_softc {
-	struct device sc_dev;
+	device_t sc_dev;
 	void	*sc_intrhand;
 	int	sc_flags;
@@ -59,8 +59,8 @@
 #define	WRITE_REG(rp, val)	(mips3_sd((volatile uint64_t *)(rp), (val)))
 
-static int	sbtimer_match(struct device *, struct cfdata *, void *);
-static void	sbtimer_attach(struct device *, struct device *, void *);
-
-CFATTACH_DECL(sbtimer, sizeof(struct sbtimer_softc),
+static int	sbtimer_match(device_t, cfdata_t, void *);
+static void	sbtimer_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(sbtimer, sizeof(struct sbtimer_softc),
     sbtimer_match, sbtimer_attach, NULL, NULL);
 
@@ -72,5 +72,5 @@
 
 static int
-sbtimer_match(struct device *parent, struct cfdata *match, void *aux)
+sbtimer_match(device_t parent, cfdata_t match, void *aux)
 {
 	struct sbscd_attach_args *sap = aux;
@@ -83,13 +83,14 @@
 
 static void
-sbtimer_attach(struct device *parent, struct device *self, void *aux)
+sbtimer_attach(device_t parent, device_t self, void *aux)
 {
 	struct sbscd_attach_args *sa = aux;
-	struct sbtimer_softc *sc = (struct sbtimer_softc *)self;
+	struct sbtimer_softc *sc = device_private(self);
 	void (*fun)(void *, uint32_t, vaddr_t);
 	int ipl;
 	const char *comment = "";
 
-	sc->sc_flags = device_cfdata(&sc->sc_dev)->cf_flags;
+	sc->sc_dev = self;
+	sc->sc_flags = device_cfdata(sc->sc_dev)->cf_flags;
 	sc->sc_addr_icnt = (uint64_t *)MIPS_PHYS_TO_KSEG1(sa->sa_base +
 	    sa->sa_locs.sa_offset + R_SCD_TIMER_INIT);
@@ -99,5 +100,5 @@
 	    sa->sa_locs.sa_offset + R_SCD_TIMER_CFG);
 
-	printf(": ");
+	aprint_normal(": ");
 	if ((sc->sc_flags & SBTIMER_CLOCK) != 0) {
 		ipl = IPL_CLOCK;
@@ -110,5 +111,5 @@
 			goto not_really;
 		}
-		printf("system timer");
+		aprint_normal("system timer");
 	} else if ((sc->sc_flags & SBTIMER_STATCLOCK) != 0) {
 		ipl = IPL_HIGH;
@@ -122,12 +123,12 @@
 			goto not_really;
 		}
-		printf("system statistics timer");
+		aprint_normal("system statistics timer");
 	} else {
 not_really:
 		ipl = IPL_BIO;			/* XXX -- pretty low */
 		fun = sbtimer_miscintr;
-		printf("general-purpose timer%s", comment);
+		aprint_normal("general-purpose timer%s", comment);
 	}
-	printf("\n");
+	aprint_normal("\n");
 
 	/* clear intr & disable timer. */
@@ -143,9 +144,9 @@
 	struct sbtimer_softc *sc = arg;
 
-	printf("%s: ", sc->sc_dev.dv_xname);
 	if ((1000000 % hz) == 0)
-		printf("%dHz system timer\n", hz);
+		aprint_normal_dev(sc->sc_dev, "%dHz system timer\n", hz);
 	else {
-		printf("cannot get %dHz clock; using 1000Hz\n", hz);
+		aprint_error_dev(sc->sc_dev, 
+		    "cannot get %dHz clock; using 1000Hz\n", hz);
 		hz = 1000;
 		tick = 1000000 / hz;
@@ -154,6 +155,6 @@
 	WRITE_REG(sc->sc_addr_cfg, 0x00);		/* XXX */
 	if (G_SYS_PLL_DIV(READ_REG(MIPS_PHYS_TO_KSEG1(A_SCD_SYSTEM_CFG))) == 0) {
-		printf("%s: PLL_DIV == 0; speeding up clock ticks for simulator\n",
-		    sc->sc_dev.dv_xname);
+		aprint_debug_dev(sc->sc_dev,
+		    "PLL_DIV == 0; speeding up clock ticks for simulator\n");
 		WRITE_REG(sc->sc_addr_icnt, (tick/100) - 1); /* XXX */
 	} else {
Index: /trunk/src/sys/arch/mips/sibyte/dev/sbwdog.c
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/dev/sbwdog.c	(revision 151)
+++ /trunk/src/sys/arch/mips/sibyte/dev/sbwdog.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sbwdog.c,v 1.7.94.2 2010/05/15 06:22:38 matt Exp $ */
+/* $NetBSD: sbwdog.c,v 1.7.94.3 2010/06/09 14:22:17 matt Exp $ */
 
 /*
@@ -41,5 +41,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sbwdog.c,v 1.7.94.2 2010/05/15 06:22:38 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sbwdog.c,v 1.7.94.3 2010/06/09 14:22:17 matt Exp $");
 
 #include "locators.h"
@@ -67,6 +67,6 @@
 };
 
-static int sbwdog_match(struct device *, struct cfdata *, void *);
-static void sbwdog_attach(struct device *, struct device *, void *);
+static int sbwdog_match(device_t, cfdata_t, void *);
+static void sbwdog_attach(device_t, device_t, void *);
 static int sbwdog_tickle(struct sysmon_wdog *);
 static int sbwdog_setmode(struct sysmon_wdog *);
@@ -80,5 +80,5 @@
 
 static int
-sbwdog_match(struct device *parent, struct cfdata *cf, void *aux)
+sbwdog_match(device_t parent, cfdata_t cf, void *aux)
 {
 	struct sbscd_attach_args *sa = aux;
@@ -91,5 +91,5 @@
 
 static void
-sbwdog_attach(struct device *parent, struct device *self, void *aux)
+sbwdog_attach(device_t parent, device_t self, void *aux)
 {
 	struct sbwdog_softc *sc = device_private(self);
Index: /trunk/src/sys/arch/mips/sibyte/pci/sbbrz.c
===================================================================
--- /trunk/src/sys/arch/mips/sibyte/pci/sbbrz.c	(revision 151)
+++ /trunk/src/sys/arch/mips/sibyte/pci/sbbrz.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sbbrz.c,v 1.1.2.5 2010/02/23 20:33:48 matt Exp $ */
+/* $NetBSD: sbbrz.c,v 1.1.2.6 2010/06/09 14:22:17 matt Exp $ */
 
 /*
@@ -213,9 +213,9 @@
 	if (pnp)
 #if _has_pba_busname
-		printf("%s at %s\n", pba->pba_busname, pnp);
+		aprint_normal("%s at %s\n", pba->pba_busname, pnp);
 #else
-		printf("\n* sbbrz_pci at %s", pnp);
+		aprint_normal("\n* sbbrz_pci at %s", pnp);
 #endif
-	printf(" bus %d", pba->pba_bus);
+	aprint_normal(" bus %d", pba->pba_bus);
 	return (UNCONF);
 }       
Index: /trunk/src/sys/arch/mipsco/include/intr.h
===================================================================
--- /trunk/src/sys/arch/mipsco/include/intr.h	(revision 151)
+++ /trunk/src/sys/arch/mipsco/include/intr.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: intr.h,v 1.16.36.1 2010/02/05 07:39:54 matt Exp $	*/
+/*	$NetBSD: intr.h,v 1.16.36.2 2010/12/29 08:16:21 matt Exp $	*/
 
 /*
@@ -34,27 +34,10 @@
 #define _MACHINE_INTR_H_
 
-#define	IPL_NONE	0	/* disable only this interrupt */
-#define	IPL_SOFTCLOCK	1	/* generic software interrupts */
-#define	IPL_SOFTBIO	1	/* clock software interrupts */
-#define	IPL_SOFTNET	2	/* network software interrupts */
-#define	IPL_SOFTSERIAL	2	/* serial software interrupts */
-#define	IPL_VM		3
-#define	IPL_SCHED	4
-#define	IPL_HIGH	4	/* disable all interrupts */
-
-#define	IPL_N		5
-
-/* Interrupt sharing types. */
-#define IST_NONE	0	/* none */
-#define IST_PULSE	1	/* pulsed */
-#define IST_EDGE	2	/* edge-triggered */
-#define IST_LEVEL	3	/* level-triggered */
+#include <mips/intr.h>
 
 #ifdef _KERNEL
-#ifndef _LOCORE
-#include <sys/types.h>
-#include <sys/device.h>
-#include <sys/queue.h>
-#include <mips/locore.h>
+#ifdef __INTR_PRIVATE
+#include <sys/evcnt.h>
+#include <mips/cpuregs.h>
 
 /*
@@ -70,33 +53,7 @@
 #define MIPS_INT_MASK_SPL5	(MIPS_INT_MASK_5|MIPS_INT_MASK_SPL4)
 
-#define spl0()		(void)_spllower(0)
-#define splx(s)		(void)_splset(s)
-#define splvm()		_splraise(MIPS_INT_MASK_SPL2)
-#define splsched()	_splraise(MIPS_INT_MASK_SPL2)
-#define splhigh()	_splraise(MIPS_INT_MASK_SPL2)
-
-#define splsoftclock()	_splraise(MIPS_INT_MASK_SPL_SOFT0)
-#define splsoftbio()	_splraise(MIPS_INT_MASK_SPL_SOFT0)
-#define	splsoftnet()	_splraise(MIPS_INT_MASK_SPL_SOFT1)
-#define	splsoftserial()	_splraise(MIPS_INT_MASK_SPL_SOFT1)
-
-typedef int ipl_t;
-typedef struct {
-	int _sr;
-} ipl_cookie_t;
-
-ipl_cookie_t makeiplcookie(ipl_t ipl);
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
-	return _splraise(icookie._sr);
-}
-
 struct mipsco_intrhand {
-	LIST_ENTRY(mipsco_intrhand)
-		ih_q;
-	int	(*ih_fun) __P((void *));
+	LIST_ENTRY(mipsco_intrhand) ih_q;
+	int	(*ih_fun)(void *);
 	void	 *ih_arg;
 	struct	mipsco_intr *ih_intrhead;
@@ -105,12 +62,16 @@
 
 struct mipsco_intr {
-	LIST_HEAD(,mipsco_intrhand)
-		intr_q;
+	LIST_HEAD(,mipsco_intrhand) intr_q;
 	struct	evcnt ih_evcnt;
 	unsigned long intr_siq;
 };
 
+extern const struct ipl_sr_map mipsco_ipl_sr_map;
+extern struct mipsco_intrhand intrtab[];
+#define	CALL_INTR(lev)	((*intrtab[lev].ih_fun)(intrtab[lev].ih_arg))
 
-extern struct mipsco_intrhand intrtab[];
+#define MAX_INTR_COOKIES 16
+
+#endif /* __INTR_PRIVATE */
 
 #define SYS_INTR_LEVEL0	0
@@ -127,9 +88,4 @@
 #define SYS_INTR_ATBUS	11
 
-#define MAX_INTR_COOKIES 16
-
-#define	CALL_INTR(lev)	((*intrtab[lev].ih_fun)(intrtab[lev].ih_arg))
-
-#endif /* !_LOCORE */
 #endif /* _KERNEL */
 #endif /* _MACHINE_INTR_H_ */
Index: /trunk/src/sys/arch/mipsco/include/sysconf.h
===================================================================
--- /trunk/src/sys/arch/mipsco/include/sysconf.h	(revision 151)
+++ /trunk/src/sys/arch/mipsco/include/sysconf.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sysconf.h,v 1.4 2007/03/04 06:00:13 christos Exp $	*/
+/*	$NetBSD: sysconf.h,v 1.4.62.1 2010/12/29 08:16:21 matt Exp $	*/
 
 /*
@@ -54,9 +54,9 @@
 	 *	clkinit		-	Initialize clocks
 	 */
-	void	(*cons_init) __P((void));
-	void	(*iointr) __P((unsigned, unsigned, unsigned, unsigned));
-	int	(*memsize) __P((void *));
-	void	(*intr_establish) __P((int, int (*)__P((void *)), void *)); 
-	void	(*clkinit) __P((void));
+	void	(*cons_init)(void);
+	void	(*iointr)(uint32_t, vaddr_t, uint32_t);
+	int	(*memsize)(void *);
+	void	(*intr_establish)(int, int (*)(void *), void *); 
+	void	(*clkinit)(void);
 };
 
Index: /trunk/src/sys/arch/mipsco/mipsco/autoconf.c
===================================================================
--- /trunk/src/sys/arch/mipsco/mipsco/autoconf.c	(revision 151)
+++ /trunk/src/sys/arch/mipsco/mipsco/autoconf.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: autoconf.c,v 1.18 2007/12/03 15:33:57 ad Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.18.36.1 2010/12/29 08:16:21 matt Exp $	*/
 
 /*
@@ -85,6 +85,7 @@
  */
 
+#define __INTR_PRIVATE
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.18 2007/12/03 15:33:57 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.18.36.1 2010/12/29 08:16:21 matt Exp $");
 
 #include <sys/param.h>
Index: /trunk/src/sys/arch/mipsco/mipsco/interrupt.c
===================================================================
--- /trunk/src/sys/arch/mipsco/mipsco/interrupt.c	(revision 151)
+++ /trunk/src/sys/arch/mipsco/mipsco/interrupt.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: interrupt.c,v 1.6.18.1 2010/02/05 07:39:54 matt Exp $	*/
+/*	$NetBSD: interrupt.c,v 1.6.18.2 2010/12/29 08:16:21 matt Exp $	*/
 
 /*
@@ -30,11 +30,11 @@
  */
 
+#define __INTR_PRIVATE
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.6.18.1 2010/02/05 07:39:54 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.6.18.2 2010/12/29 08:16:21 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/malloc.h>
 #include <sys/intr.h>
-#include <sys/cpu.h>
 
 #include <uvm/uvm_extern.h>
@@ -43,30 +43,20 @@
 
 void
-cpu_intr(status, cause, pc, ipending)
-	u_int32_t status;
-	u_int32_t cause;
-	u_int32_t pc;
-	u_int32_t ipending;
+cpu_intr(int ppl, vaddr_t pc, uint32_t status)
 {
-	struct cpu_info *ci;
+	uint32_t ipending;
+	int ipl;
 
-	ci = curcpu();
 	uvmexp.intrs++;
 
-	/* device interrupts */
-	ci->ci_idepth++;
-	(*platform.iointr)(status, cause, pc, ipending);
-	ci->ci_idepth--;
+	while (ppl < (ipl = splintr(&ipending))) {
+		/* device interrupts */
+		(*platform.iointr)(status, pc, ipending);
+	}
 
-#ifdef __HAVE_FAST_SOFTINTS
-	/* software simulated interrupt */
-	ipending &= MIPS_SOFT_INT_MASK;
-	if (ipending == 0)
-		return;
-	softint_process(ipending);
-#endif
 }
 
-static const int ipl_sr_bits[] = {
+const struct ipl_sr_map mipsco_ipl_sr_map = {
+    .sr_bits = {
 	[IPL_NONE] = 0,
 	[IPL_SOFTCLOCK] = MIPS_INT_MASK_SPL_SOFT0,
@@ -74,10 +64,5 @@
 	[IPL_VM] = MIPS_INT_MASK_SPL2,
 	[IPL_SCHED] = MIPS_INT_MASK_SPL2,
+	[IPL_HIGH] = MIPS_INT_MASK,
+    },
 };
-
-ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
-	return (ipl_cookie_t){._sr = ipl_sr_bits[ipl]};
-}
Index: /trunk/src/sys/arch/mipsco/mipsco/machdep.c
===================================================================
--- /trunk/src/sys/arch/mipsco/mipsco/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/mipsco/mipsco/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: machdep.c,v 1.58.10.3 2010/03/21 17:38:34 cliff Exp $	*/
+/*	$NetBSD: machdep.c,v 1.58.10.4 2010/12/29 08:16:21 matt Exp $	*/
 
 /*
@@ -77,5 +77,5 @@
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.58.10.3 2010/03/21 17:38:34 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.58.10.4 2010/12/29 08:16:21 matt Exp $");
 
 /* from: Utah Hdr: machdep.c 1.63 91/04/24 */
@@ -151,10 +151,10 @@
 int mem_cluster_cnt;
 
-void to_monitor __P((int)) __attribute__((__noreturn__));
-void prom_halt __P((int)) __attribute__((__noreturn__));
+void to_monitor(int) __dead;
+void prom_halt(int) __dead;
 
 #ifdef	KGDB
-void zs_kgdb_init __P((void));
-void kgdb_connect __P((int));
+void zs_kgdb_init(void);
+void kgdb_connect(int);
 #endif
 
@@ -162,13 +162,13 @@
  *  Local functions.
  */
-int initcpu __P((void));
-void configure __P((void));
-
-void mach_init __P((int, char *[], char*[], u_int, char *));
-int  memsize_scan __P((void *));
+int initcpu(void);
+void configure(void);
+
+void mach_init(int, char *[], char*[], u_int, char *);
+int  memsize_scan(void *);
 
 #ifdef DEBUG
 /* stacktrace code violates prototypes to get callee's registers */
-extern void stacktrace __P((void)); /*XXX*/
+extern void stacktrace(void); /*XXX*/
 #endif
 
@@ -183,13 +183,13 @@
 
 /* locore callback-vector setup */
-extern void mips_vector_init  __P((const struct splsw *));
-extern void prom_init  __P((void));
-extern void pizazz_init __P((void));
+extern void mips_vector_init(const struct splsw *);
+extern void prom_init(void);
+extern void pizazz_init(void);
 
 /* platform-specific initialization vector */
-static void	unimpl_cons_init __P((void));
-static void	unimpl_iointr __P((unsigned, unsigned, unsigned, unsigned));
-static int	unimpl_memsize __P((void *));
-static void	unimpl_intr_establish __P((int, int (*)__P((void *)), void *));
+static void	unimpl_cons_init(void);
+static void	unimpl_iointr(uint32_t, vaddr_t, uint32_t);
+static int	unimpl_memsize(void *);
+static void	unimpl_intr_establish(int, int (*)(void *), void *);
 
 struct platform platform = {
@@ -206,9 +206,9 @@
 extern struct consdev consdev_zs;
 
-static void null_cnprobe __P((struct consdev *));
-static void prom_cninit __P((struct consdev *));
-static int  prom_cngetc __P((dev_t));
-static void prom_cnputc __P((dev_t, int));
-static void null_cnpollc __P((dev_t, int));
+static void null_cnprobe(struct consdev *);
+static void prom_cninit(struct consdev *);
+static int  prom_cngetc(dev_t);
+static void prom_cnputc(dev_t, int);
+static void null_cnpollc(dev_t, int);
 
 struct consdev consdev_prom = {
@@ -247,5 +247,4 @@
 #endif
 
-
 	/* Check for valid bootinfo passed from bootstrap */
 	if (bim == BOOTINFO_MAGIC) {
@@ -265,4 +264,11 @@
 	memset(edata, 0, end - edata);
 
+	/*
+	 * Copy exception-dispatch code down to exception vector.
+	 * Initialize locore-function vector.
+	 * Clear out the I and D caches.
+	 */
+	mips_vector_init(NULL);
+
 #if NKSYMS || defined(DDB) || defined(LKM)
 	bi_syms = lookup_bootinfo(BTINFO_SYMTAB);
@@ -298,11 +304,4 @@
 	mem_clusters[0].size  = ctob(physmem);
 	mem_cluster_cnt = 1;
-
-	/*
-	 * Copy exception-dispatch code down to exception vector.
-	 * Initialize locore-function vector.
-	 * Clear out the I and D caches.
-	 */
-	mips_vector_init();
 
 	/* Look at argv[0] and compute bootdev */
@@ -532,5 +531,5 @@
 
 int
-initcpu()
+initcpu(void)
 {
 	spl0();		/* safe to turn interrupts on now */
@@ -539,5 +538,5 @@
 
 static void
-unimpl_cons_init()
+unimpl_cons_init(void)
 {
 
@@ -546,9 +545,5 @@
 
 static void
-unimpl_iointr(mask, pc, statusreg, causereg)
-	u_int mask;
-	u_int pc;
-	u_int statusreg;
-	u_int causereg;
+unimpl_iointr(uint32_t status, vaddr_t pc, uint32_t ipending)
 {
 
@@ -557,6 +552,5 @@
 
 static int
-unimpl_memsize(first)
-void *first;
+unimpl_memsize(void *first)
 {
 
@@ -565,8 +559,5 @@
 
 void
-unimpl_intr_establish(level, func, arg)
-	int level;
-	int (*func) __P((void *));
-	void *arg;
+unimpl_intr_establish(int level, int (*func)(void *), void *arg)
 {
 	panic("sysconf.init didn't init intr_establish");
@@ -574,6 +565,5 @@
 
 void
-delay(n)
-	int n;
+delay(int n)
 {
 	DELAY(n);
Index: /trunk/src/sys/arch/mipsco/mipsco/mips_3x30.c
===================================================================
--- /trunk/src/sys/arch/mipsco/mipsco/mips_3x30.c	(revision 151)
+++ /trunk/src/sys/arch/mipsco/mipsco/mips_3x30.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mips_3x30.c,v 1.10.18.1 2010/02/01 04:18:31 matt Exp $	*/
+/*	$NetBSD: mips_3x30.c,v 1.10.18.2 2010/12/29 08:16:21 matt Exp $	*/
 
 /*
@@ -30,6 +30,7 @@
  */
 
+#define	__INTR_PRIVATE
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mips_3x30.c,v 1.10.18.1 2010/02/01 04:18:31 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips_3x30.c,v 1.10.18.2 2010/12/29 08:16:21 matt Exp $");
 
 #include <sys/param.h>
@@ -38,9 +39,9 @@
 #include <sys/proc.h>
 #include <sys/kernel.h>
+#include <sys/cpu.h>
+#include <sys/intr.h>
 
 #include <machine/trap.h>
 #include <machine/psl.h>
-#include <machine/cpu.h>
-#include <machine/intr.h>
 #include <machine/mainboard.h>
 #include <machine/sysconf.h>
@@ -50,7 +51,7 @@
 /* Local functions */
 void pizazz_init (void);
-void pizazz_intr (u_int, u_int, u_int, u_int);
+void pizazz_intr (uint32_t, vaddr_t, uint32_t);
 int  pizazz_level0_intr (void *);
-void pizazz_level5_intr (int, int, int);
+void pizazz_level5_intr (uint32_t, vaddr_t);
 void pizazz_intr_establish  (int, int (*)(void *), void *);
 
@@ -64,4 +65,6 @@
 	platform.iointr = pizazz_intr;
 	platform.intr_establish = pizazz_intr_establish;
+
+	ipl_sr_map = mipsco_ipl_sr_map;
 
 	pizazz_intr_establish(SYS_INTR_LEVEL0, pizazz_level0_intr, NULL);
@@ -79,9 +82,5 @@
 
 void
-pizazz_intr(status, cause, pc, ipending)
-	u_int status;	/* status register at time of the exception */
-	u_int cause;	/* cause register at time of exception */
-	u_int pc;	/* program counter where to continue */
-	u_int ipending;
+pizazz_intr(uint32_t status, vaddr_t pc, uint32_t ipending)
 {
 	/* handle clock interrupts ASAP */
@@ -92,16 +91,11 @@
 		cf.pc = pc;
 		cf.sr = status;
+		cf.intr = (curcpu()->ci_idepth > 0);
 
 		rambo_clkintr(&cf);
-
-		/* keep clock interrupts enabled when we return */
-		cause &= ~MIPS_INT_MASK_2;
 	}
 
-	/* If clock interrupts were enabled, re-enable them ASAP. */
-	_splset(MIPS_SR_INT_IE | (status & MIPS_INT_MASK_2));
-
 	if (ipending & MIPS_INT_MASK_5)		/* level 5 interrupt */
-		pizazz_level5_intr(pc, cause, status);
+		pizazz_level5_intr(status, pc);
 
 	HANDLE_INTR(SYS_INTR_FDC,	MIPS_INT_MASK_4);
@@ -109,16 +103,11 @@
 	HANDLE_INTR(SYS_INTR_LEVEL0,	MIPS_INT_MASK_0);
 
-	/* XXX:  Keep FDC interrupt masked off */
-	cause &= ~(MIPS_INT_MASK_0 | MIPS_INT_MASK_1 | MIPS_INT_MASK_5);
-
-	_splset((status & ~cause & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
-
 #if !defined(NOFPU)
 	/* FPU nofiticaition */
 	if (ipending & INT_MASK_FPU) {
 		if (!USERMODE(status))
-			panic("kernel used FPU: PC %x, CR %x, SR %x",
-			      pc, cause, status);
-		MachFPInterrupt(status, cause, pc, curlwp->l_md.md_utf);
+			panic("kernel used FPU: PC %x, SR %x",
+			      pc, status);
+		MachFPInterrupt(status, 0, pc, curlwp->l_md.md_utf);
 	}
 #endif
@@ -156,8 +145,5 @@
  */
 void
-pizazz_level5_intr(pc, cause, status)
-	int pc;
-	int cause;
-	int status;
+pizazz_level5_intr(uint32_t status, vaddr_t pc)
 {
 	u_int32_t ereg;
@@ -165,5 +151,5 @@
 	ereg = *(u_int32_t *)RAMBO_ERREG;
 
-	printf("interrupt: pc=%p cr=%x sr=%x\n", (void *)pc, cause, status);
+	printf("interrupt: pc=%p sr=%x\n", (void *)pc, status);
 	printf("parity error: %p mask: 0x%x\n", (void *)ereg, ereg & 0xf);
 	panic("memory fault");
Index: /trunk/src/sys/arch/newsmips/apbus/apbus.c
===================================================================
--- /trunk/src/sys/arch/newsmips/apbus/apbus.c	(revision 151)
+++ /trunk/src/sys/arch/newsmips/apbus/apbus.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: apbus.c,v 1.21 2008/04/09 15:40:30 tsutsui Exp $	*/
+/*	$NetBSD: apbus.c,v 1.21.22.1 2010/12/29 08:14:42 matt Exp $	*/
 
 /*-
@@ -28,5 +28,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: apbus.c,v 1.21 2008/04/09 15:40:30 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: apbus.c,v 1.21.22.1 2010/12/29 08:14:42 matt Exp $");
+
+#define __INTR_PRIVATE
 
 #include <sys/param.h>
@@ -35,4 +37,5 @@
 #include <sys/device.h>
 #include <sys/proc.h>
+#include <sys/intr.h>
 
 #include <uvm/uvm_extern.h>
@@ -42,5 +45,4 @@
 #define _NEWSMIPS_BUS_DMA_PRIVATE
 #include <machine/bus.h>
-#include <machine/intr.h>
 #include <newsmips/apbus/apbusvar.h>
 
@@ -98,4 +100,6 @@
 	int i;
 
+	mips_set_wbflush(apbus_wbflush);
+
 	*(volatile uint32_t *)(NEWS5000_APBUS_INTST) = 0xffffffff;
 	*(volatile uint32_t *)(NEWS5000_APBUS_INTMSK) = 0xffffffff;
@@ -177,7 +181,8 @@
 apbus_wbflush(void)
 {
-	volatile int32_t *wbflush = (uint32_t *)NEWS5000_WBFLUSH;
-
-	(void)*wbflush;
+	volatile int32_t * const our_wbflush = (int32_t *)NEWS5000_WBFLUSH;
+
+	(*mips_locore_jumpvec.ljv_wbflush)();
+	(void)*our_wbflush;
 }
 
Index: /trunk/src/sys/arch/newsmips/apbus/if_snvar.h
===================================================================
--- /trunk/src/sys/arch/newsmips/apbus/if_snvar.h	(revision 151)
+++ /trunk/src/sys/arch/newsmips/apbus/if_snvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: if_snvar.h,v 1.12 2008/04/09 15:40:30 tsutsui Exp $	*/
+/*	$NetBSD: if_snvar.h,v 1.12.22.1 2010/12/29 08:14:42 matt Exp $	*/
 
 /*
@@ -33,12 +33,4 @@
 
 #include <mips/locore.h>
-#undef wbflush	/* XXX */
-
-static inline void
-wbflush(void)
-{
-	mips3_wbflush();
-	apbus_wbflush();
-};
 
 /*
Index: /trunk/src/sys/arch/newsmips/dev/hb.c
===================================================================
--- /trunk/src/sys/arch/newsmips/dev/hb.c	(revision 151)
+++ /trunk/src/sys/arch/newsmips/dev/hb.c	(revision 152)
@@ -1,14 +1,15 @@
-/*	$NetBSD: hb.c,v 1.18 2008/04/09 15:40:30 tsutsui Exp $	*/
+/*	$NetBSD: hb.c,v 1.18.22.1 2010/12/29 08:14:43 matt Exp $	*/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hb.c,v 1.18 2008/04/09 15:40:30 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hb.c,v 1.18.22.1 2010/12/29 08:14:43 matt Exp $");
 
+#define __INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/device.h>
 #include <sys/malloc.h>
+#include <sys/intr.h>
 
 #include <machine/autoconf.h>
-#include <machine/intr.h>
 
 #include <newsmips/dev/hbvar.h>
Index: /trunk/src/sys/arch/newsmips/dev/scsi_1185.c
===================================================================
--- /trunk/src/sys/arch/newsmips/dev/scsi_1185.c	(revision 151)
+++ /trunk/src/sys/arch/newsmips/dev/scsi_1185.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: scsi_1185.c,v 1.19 2008/04/09 15:40:30 tsutsui Exp $	*/
+/*	$NetBSD: scsi_1185.c,v 1.19.22.1 2010/12/29 08:14:43 matt Exp $	*/
 
 /*
@@ -54,9 +54,11 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: scsi_1185.c,v 1.19 2008/04/09 15:40:30 tsutsui Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: scsi_1185.c,v 1.19.22.1 2010/12/29 08:14:43 matt Exp $");
+
+#define	__INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/device.h>
+#include <sys/intr.h>
 
 #include <uvm/uvm_extern.h>
Index: /trunk/src/sys/arch/newsmips/include/intr.h
===================================================================
--- /trunk/src/sys/arch/newsmips/include/intr.h	(revision 151)
+++ /trunk/src/sys/arch/newsmips/include/intr.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: intr.h,v 1.23 2008/04/28 20:23:30 martin Exp $	*/
+/*	$NetBSD: intr.h,v 1.23.18.1 2010/12/29 08:14:43 matt Exp $	*/
 
 /*-
@@ -33,54 +33,13 @@
 #define _MACHINE_INTR_H_
 
-#define IPL_NONE	0	/* disable only this interrupt */
-#define IPL_SOFTCLOCK	1	/* clock software interrupts (SI 0) */
-#define IPL_SOFTBIO	1	/* bio software interrupts (SI 0) */
-#define IPL_SOFTNET	2	/* network software interrupts (SI 1) */
-#define IPL_SOFTSERIAL	2	/* serial software interrupts (SI 1) */
-#define	IPL_VM		3
-#define IPL_SCHED	4	/* disable clock interrupts */
-#define IPL_HIGH	4	/* disable all interrupts */
-
-#define _IPL_N		5
-
-#define _IPL_SI0_FIRST	IPL_SOFTCLOCK
-#define _IPL_SI0_LAST	IPL_SOFTBIO
-
-#define _IPL_SI1_FIRST	IPL_SOFTNET
-#define _IPL_SI1_LAST	IPL_SOFTSERIAL
+#include <mips/intr.h>
 
 #ifdef _KERNEL
-#ifndef _LOCORE
+#ifdef __INTR_PRIVATE
 
-#include <sys/device.h>
+#include <sys/evcnt.h>
 #include <mips/locore.h>
 
-extern const uint32_t ipl_sr_bits[_IPL_N];
-
-#define spl0()		(void)_spllower(0)
-#define splx(s)		(void)_splset(s)
-
-#define splsoft()	_splraise(ipl_sr_bits[IPL_SOFT])
-
-typedef int ipl_t;
-typedef struct {
-	ipl_t _sr;
-} ipl_cookie_t;
-
-static inline ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
-	return (ipl_cookie_t){._sr = ipl_sr_bits[ipl]};
-}
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
-	return _splraise(icookie._sr);
-}
-
-#include <sys/spl.h>
+extern const struct ipl_sr_map newmips_ipl_sr_map;
 
 struct newsmips_intrhand {
@@ -118,11 +77,7 @@
 
 /* handle i/o device interrupts */
-#ifdef news3400
-void news3400_intr(uint32_t, uint32_t, uint32_t, uint32_t);
-#endif
-#ifdef news5000
-void news5000_intr(uint32_t, uint32_t, uint32_t, uint32_t);
-#endif
-extern void (*hardware_intr)(uint32_t, uint32_t, uint32_t, uint32_t);
+void news3400_intr(int, vaddr_t, uint32_t);
+void news5000_intr(int, vaddr_t, uint32_t);
+extern void (*hardware_intr)(int, vaddr_t, uint32_t);
 
 extern void (*enable_intr)(void);
@@ -130,5 +85,5 @@
 extern void (*enable_timer)(void);
 
-#endif /* !_LOCORE */
+#endif /* __INTR_PRIVATE */
 #endif /* _KERNEL */
 #endif /* _MACHINE_INTR_H_ */
Index: /trunk/src/sys/arch/newsmips/newsmips/autoconf.c
===================================================================
--- /trunk/src/sys/arch/newsmips/newsmips/autoconf.c	(revision 151)
+++ /trunk/src/sys/arch/newsmips/newsmips/autoconf.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: autoconf.c,v 1.32 2008/02/16 22:02:15 he Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.32.28.1 2010/12/29 08:14:43 matt Exp $	*/
 
 /*
@@ -86,6 +86,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.32 2008/02/16 22:02:15 he Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.32.28.1 2010/12/29 08:14:43 matt Exp $");
+
+#define __INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -94,4 +95,6 @@
 #include <sys/reboot.h>
 #include <sys/device.h>
+#include <sys/intr.h>
+#include <sys/cpu.h>
 
 #include <dev/scsipi/scsi_all.h>
@@ -99,5 +102,4 @@
 #include <dev/scsipi/scsiconf.h>
 
-#include <machine/cpu.h>
 #include <machine/adrsmap.h>
 #include <machine/romcall.h>
@@ -130,5 +132,5 @@
 	 * Kick off autoconfiguration
 	 */
-	_splnone();	/* enable all interrupts */
+	spl0();		/* enable all interrupts */
 	splhigh();	/* ...then disable device interrupts */
 
@@ -145,5 +147,5 @@
 
 	/* Configuration is finished, turn on interrupts. */
-	_splnone();	/* enable all source forcing SOFT_INTs cleared */
+	spl0();		/* enable all source forcing SOFT_INTs cleared */
 }
 
Index: /trunk/src/sys/arch/newsmips/newsmips/clock.c
===================================================================
--- /trunk/src/sys/arch/newsmips/newsmips/clock.c	(revision 151)
+++ /trunk/src/sys/arch/newsmips/newsmips/clock.c	(revision 152)
@@ -1,3 +1,3 @@
-/*      $NetBSD: clock.c,v 1.15 2006/09/04 20:33:24 tsutsui Exp $	*/
+/*      $NetBSD: clock.c,v 1.15.78.1 2010/12/29 08:14:43 matt Exp $	*/
 
 /*
@@ -42,13 +42,13 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.15 2006/09/04 20:33:24 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.15.78.1 2010/12/29 08:14:43 matt Exp $");
 
+#define __INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/kernel.h>
 #include <sys/systm.h>
 #include <sys/device.h>
-
-#include <machine/cpu.h>
-#include <machine/intr.h>
+#include <sys/cpu.h>
+#include <sys/intr.h>
 
 /*
Index: /trunk/src/sys/arch/newsmips/newsmips/machdep.c
===================================================================
--- /trunk/src/sys/arch/newsmips/newsmips/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/newsmips/newsmips/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: machdep.c,v 1.98.10.5 2010/03/21 17:38:34 cliff Exp $	*/
+/*	$NetBSD: machdep.c,v 1.98.10.6 2010/12/29 08:14:43 matt Exp $	*/
 
 /*
@@ -77,5 +77,5 @@
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.98.10.5 2010/03/21 17:38:34 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.98.10.6 2010/12/29 08:14:43 matt Exp $");
 
 /* from: Utah Hdr: machdep.c 1.63 91/04/24 */
@@ -84,4 +84,6 @@
 #include "opt_ddb.h"
 #include "opt_execfmt.h"
+
+#define __INTR_PRIVATE
 
 #include <sys/param.h>
@@ -105,4 +107,6 @@
 #include <sys/kcore.h>
 #include <sys/ksyms.h>
+#include <sys/cpu.h>
+#include <sys/intr.h>
 
 #include <uvm/uvm_extern.h>
@@ -110,6 +114,4 @@
 #include <ufs/mfs/mfs_extern.h>		/* mfs_initminiroot() */
 
-#include <machine/cpu.h>
-#include <machine/intr.h>
 #include <machine/reg.h>
 #include <machine/psl.h>
@@ -157,5 +159,5 @@
 
 struct idrom idrom;
-void (*hardware_intr)(uint32_t, uint32_t, uint32_t, uint32_t);
+void (*hardware_intr)(int, vaddr_t, uint32_t);
 void (*enable_intr)(void);
 void (*disable_intr)(void);
@@ -598,22 +600,10 @@
 
 void
-cpu_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
-{
-	struct cpu_info *ci;
-
-	ci = curcpu();
+cpu_intr(int ppl, vaddr_t pc, uint32_t status)
+{
 	uvmexp.intrs++;
 
 	/* device interrupts */
-	ci->ci_idepth++;
-	(*hardware_intr)(status, cause, pc, ipending);
-	ci->ci_idepth--;
-
-#ifdef __HAVE_FAST_SOFTINTS
-	/* software interrupts */
-	ipending &= MIPS_SOFT_INT_MASK;
-	if (ipending == 0)
-		return;
-	softint_process(ipending);
-#endif
-}
+	(*hardware_intr)(ppl, pc, status);
+
+}
Index: /trunk/src/sys/arch/newsmips/newsmips/news3400.c
===================================================================
--- /trunk/src/sys/arch/newsmips/newsmips/news3400.c	(revision 151)
+++ /trunk/src/sys/arch/newsmips/newsmips/news3400.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: news3400.c,v 1.19.36.1 2010/02/01 04:18:31 matt Exp $	*/
+/*	$NetBSD: news3400.c,v 1.19.36.2 2010/12/29 08:14:43 matt Exp $	*/
 
 /*-
@@ -28,22 +28,21 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: news3400.c,v 1.19.36.1 2010/02/01 04:18:31 matt Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: news3400.c,v 1.19.36.2 2010/12/29 08:14:43 matt Exp $");
+
+#define __INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/kernel.h>
 #include <sys/proc.h>
 #include <sys/systm.h>
+#include <sys/cpu.h>
+#include <sys/intr.h>
+
+#include <mips/locore.h>
 
 #include <machine/adrsmap.h>
-#include <machine/cpu.h>
-#include <machine/intr.h>
 #include <machine/psl.h>
 #include <newsmips/newsmips/machid.h>
 
 #include <newsmips/dev/hbvar.h>
-
-#if !defined(FPEMUL)
-void MachFPInterrupt(unsigned, unsigned, unsigned, struct trapframe *);
-#endif
 
 int news3400_badaddr(void *, u_int);
@@ -64,74 +63,65 @@
  */
 void
-news3400_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
-{
-	struct clockframe cf;
-	struct cpu_info *ci;
-
-	ci = curcpu();
-	ci->ci_idepth++;
+news3400_intr(int ppl, uint32_t pc, uint32_t status)
+{
+	uint32_t ipending;
+	int ipl;
+
+	while (ppl < (ipl = splintr(&ipending))) {
 
 	/* handle clock interrupts ASAP */
-	if (ipending & MIPS_INT_MASK_2) {
-		int stat;
-
-		stat = *(volatile uint8_t *)INTST0;
-		stat &= INTST0_TIMINT|INTST0_KBDINT|INTST0_MSINT;
-
-		*(volatile uint8_t *)INTCLR0 = stat;
-		if (stat & INTST0_TIMINT) {
-			cf.pc = pc;
-			cf.sr = status;
-			hardclock(&cf);
-			intrcnt[HARDCLOCK_INTR]++;
-			stat &= ~INTST0_TIMINT;
-		}
-
-		if (stat)
-			hb_intr_dispatch(2, stat);
-
-		cause &= ~MIPS_INT_MASK_2;
+		if (ipending & MIPS_INT_MASK_2) {
+			int stat;
+
+			stat = *(volatile uint8_t *)INTST0;
+			stat &= INTST0_TIMINT|INTST0_KBDINT|INTST0_MSINT;
+
+			*(volatile uint8_t *)INTCLR0 = stat;
+			if (stat & INTST0_TIMINT) {
+				struct clockframe cf = {
+					.pc = pc,
+					.sr = status,
+					.intr = (curcpu()->ci_idepth > 0),
+				};
+				hardclock(&cf);
+				intrcnt[HARDCLOCK_INTR]++;
+			}
+
+			if (stat)
+				hb_intr_dispatch(2, stat);
+
+		}
+
+		if (ipending & MIPS_INT_MASK_5) {
+			*(volatile uint8_t *)INTCLR0 = INTCLR0_PERR;
+			printf("Memory error interrupt(?) at 0x%x\n", pc);
+		}
+
+		/* asynchronous bus error */
+		if (ipending & MIPS_INT_MASK_4) {
+			*(volatile uint8_t *)INTCLR0 = INTCLR0_BERR;
+			badaddr_flag = 1;
+		}
+
+		if (ipending & MIPS_INT_MASK_1) {
+			news3400_level1_intr();
+		}
+
+		if (ipending & MIPS_INT_MASK_0) {
+			news3400_level0_intr();
+		}
+
+		/* FPU nofiticaition */
+		if (ipending & INT_MASK_FPU) {
+			if (!USERMODE(status))
+				panic("kernel used FPU: PC %x, SR %x",
+				      pc, status);
+
+			intrcnt[FPU_INTR]++;
+#if !defined(FPEMUL)
+			mips_fpu_intr(pc, curlwp->l_md.md_utf);
+#endif
+		}
 	}
-	/* If clock interrupts were enabled, re-enable them ASAP. */
-	_splset(MIPS_SR_INT_IE | (status & MIPS_INT_MASK_2));
-
-	if (ipending & MIPS_INT_MASK_5) {
-		*(volatile uint8_t *)INTCLR0 = INTCLR0_PERR;
-		printf("Memory error interrupt(?) at 0x%x\n", pc);
-		cause &= ~MIPS_INT_MASK_5;
-	}
-
-	/* asynchronous bus error */
-	if (ipending & MIPS_INT_MASK_4) {
-		*(volatile uint8_t *)INTCLR0 = INTCLR0_BERR;
-		cause &= ~MIPS_INT_MASK_4;
-		badaddr_flag = 1;
-	}
-
-	if (ipending & MIPS_INT_MASK_1) {
-		news3400_level1_intr();
-		cause &= ~MIPS_INT_MASK_1;
-	}
-
-	if (ipending & MIPS_INT_MASK_0) {
-		news3400_level0_intr();
-		cause &= ~MIPS_INT_MASK_0;
-	}
-
-	_splset((status & ~cause & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
-
-	/* FPU nofiticaition */
-	if (ipending & INT_MASK_FPU) {
-		if (!USERMODE(status))
-			panic("kernel used FPU: PC %x, CR %x, SR %x",
-			      pc, cause, status);
-
-		intrcnt[FPU_INTR]++;
-#if !defined(FPEMUL)
-		MachFPInterrupt(status, cause, pc, curlwp->l_md.md_utf);
-#endif
-	}
-
-	ci->ci_idepth--;
 }
 
Index: /trunk/src/sys/arch/newsmips/newsmips/news5000.c
===================================================================
--- /trunk/src/sys/arch/newsmips/newsmips/news5000.c	(revision 151)
+++ /trunk/src/sys/arch/newsmips/newsmips/news5000.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: news5000.c,v 1.17 2007/12/03 15:34:05 ad Exp $	*/
+/*	$NetBSD: news5000.c,v 1.17.36.1 2010/12/29 08:14:43 matt Exp $	*/
 
 /*-
@@ -28,6 +28,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: news5000.c,v 1.17 2007/12/03 15:34:05 ad Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: news5000.c,v 1.17.36.1 2010/12/29 08:14:43 matt Exp $");
+
+#define __INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -35,7 +36,7 @@
 #include <sys/timetc.h>
 #include <sys/cpu.h>
+#include <sys/intr.h>
 
 #include <machine/adrsmap.h>
-#include <machine/intr.h>
 
 #include <newsmips/apbus/apbusvar.h>
@@ -56,110 +57,100 @@
  */
 void
-news5000_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
-{
-	struct cpu_info *ci;
-
-	ci = curcpu();
-	ci->ci_idepth++;
-
-	if (ipending & MIPS_INT_MASK_2) {
+news5000_intr(int ppl, vaddr_t pc, uint32_t status)
+{
+	uint32_t ipending;
+	int ipl;
+
+	while (ppl < (ipl = splintr(&ipending))) {
+
+		if (ipending & MIPS_INT_MASK_2) {
 #ifdef DEBUG
-		static int l2cnt = 0;
+			static int l2cnt = 0;
 #endif
-		uint32_t int2stat;
-		struct clockframe cf;
-
-		int2stat = *(volatile uint32_t *)NEWS5000_INTST2;
+			uint32_t int2stat;
+			struct clockframe cf;
+
+			int2stat = *(volatile uint32_t *)NEWS5000_INTST2;
 
 #ifdef DEBUG
-		l2cnt++;
-		if (l2cnt == 50) {
-			*(volatile uint32_t *)NEWS5000_LED_SEC = 1;
-		}
-		if (l2cnt == 100) {
-			*(volatile uint32_t *)NEWS5000_LED_SEC = 0;
-			l2cnt = 0;
-		}
+			l2cnt++;
+			if (l2cnt == 50) {
+				*(volatile uint32_t *)NEWS5000_LED_SEC = 1;
+			}
+			if (l2cnt == 100) {
+				*(volatile uint32_t *)NEWS5000_LED_SEC = 0;
+				l2cnt = 0;
+			}
 #endif
 
-		if (int2stat & NEWS5000_INT2_TIMER0) {
-			*(volatile uint32_t *)NEWS5000_TIMER0 = 1;
-
-			cf.pc = pc;
-			cf.sr = status;
-
-			hardclock(&cf);
-			intrcnt[HARDCLOCK_INTR]++;
-		}
-
-		apbus_wbflush();
-		cause &= ~MIPS_INT_MASK_2;
+			if (int2stat & NEWS5000_INT2_TIMER0) {
+				*(volatile uint32_t *)NEWS5000_TIMER0 = 1;
+
+				cf.pc = pc;
+				cf.sr = status;
+
+				hardclock(&cf);
+				intrcnt[HARDCLOCK_INTR]++;
+			}
+
+			apbus_wbflush();
+		}
+
+		if (ipending & MIPS_INT_MASK_5) {
+			uint32_t int5stat;
+
+			int5stat = *(volatile u_int *)NEWS5000_INTST5;
+			printf("level5 interrupt (%08x)\n", int5stat);
+
+			apbus_wbflush();
+		}
+
+		if (ipending & MIPS_INT_MASK_4) {
+			uint32_t int4stat;
+
+			int4stat = *(volatile uint32_t *)NEWS5000_INTST4;
+			printf("level4 interrupt (%08x)\n", int4stat);
+			if (int4stat & NEWS5000_INT4_APBUS) {
+				uint32_t stat;
+
+				stat = *(volatile uint32_t *)NEWS5000_APBUS_INTST;
+				printf("APbus error 0x%04x\n", stat & 0xffff);
+				if (stat & NEWS5000_APBUS_INT_DMAADDR) {
+					printf("DMA Address Error: "
+					    "slot=%x, addr=0x%08x\n",
+					    *(volatile uint32_t *)NEWS5000_APBUS_DER_S,
+					    *(volatile uint32_t *)NEWS5000_APBUS_DER_A);
+				}
+				if (stat & NEWS5000_APBUS_INT_RDTIMEO)
+					printf("IO Read Timeout: addr=0x%08x\n",
+					    *(volatile uint32_t *)NEWS5000_APBUS_BER_A);
+				if (stat & NEWS5000_APBUS_INT_WRTIMEO)
+					printf("IO Write Timeout: addr=0x%08x\n",
+					    *(volatile uint32_t *)NEWS5000_APBUS_BER_A);
+				*(volatile uint32_t *)0xb4c00014 = stat;
+			}
+
+			apbus_wbflush();
+		}
+
+		if (ipending & MIPS_INT_MASK_3) {
+			uint32_t int3stat;
+
+			int3stat = *(volatile uint32_t *)NEWS5000_INTST3;
+			printf("level3 interrupt (%08x)\n", int3stat);
+
+			apbus_wbflush();
+		}
+
+		if (ipending & MIPS_INT_MASK_1) {
+			news5000_level1_intr();
+			apbus_wbflush();
+		}
+
+		if (ipending & MIPS_INT_MASK_0) {
+			news5000_level0_intr();
+			apbus_wbflush();
+		}
 	}
-	/* If clock interrupts were enabled, re-enable them ASAP. */
-	_splset(MIPS_SR_INT_IE | (status & MIPS_INT_MASK_2));
-
-	if (ipending & MIPS_INT_MASK_5) {
-		uint32_t int5stat;
-
-		int5stat = *(volatile u_int *)NEWS5000_INTST5;
-		printf("level5 interrupt (%08x)\n", int5stat);
-
-		apbus_wbflush();
-		cause &= ~MIPS_INT_MASK_5;
-	}
-
-	if (ipending & MIPS_INT_MASK_4) {
-		uint32_t int4stat;
-
-		int4stat = *(volatile uint32_t *)NEWS5000_INTST4;
-		printf("level4 interrupt (%08x)\n", int4stat);
-		if (int4stat & NEWS5000_INT4_APBUS) {
-			uint32_t stat;
-
-			stat = *(volatile uint32_t *)NEWS5000_APBUS_INTST;
-			printf("APbus error 0x%04x\n", stat & 0xffff);
-			if (stat & NEWS5000_APBUS_INT_DMAADDR) {
-				printf("DMA Address Error: "
-				    "slot=%x, addr=0x%08x\n",
-				    *(volatile uint32_t *)NEWS5000_APBUS_DER_S,
-				    *(volatile uint32_t *)NEWS5000_APBUS_DER_A);
-			}
-			if (stat & NEWS5000_APBUS_INT_RDTIMEO)
-				printf("IO Read Timeout: addr=0x%08x\n",
-				    *(volatile uint32_t *)NEWS5000_APBUS_BER_A);
-			if (stat & NEWS5000_APBUS_INT_WRTIMEO)
-				printf("IO Write Timeout: addr=0x%08x\n",
-				    *(volatile uint32_t *)NEWS5000_APBUS_BER_A);
-			*(volatile uint32_t *)0xb4c00014 = stat;
-		}
-
-		apbus_wbflush();
-		cause &= ~MIPS_INT_MASK_4;
-	}
-
-	if (ipending & MIPS_INT_MASK_3) {
-		uint32_t int3stat;
-
-		int3stat = *(volatile uint32_t *)NEWS5000_INTST3;
-		printf("level3 interrupt (%08x)\n", int3stat);
-
-		apbus_wbflush();
-		cause &= ~MIPS_INT_MASK_3;
-	}
-
-	if (ipending & MIPS_INT_MASK_1) {
-		news5000_level1_intr();
-		apbus_wbflush();
-		cause &= ~MIPS_INT_MASK_1;
-	}
-
-	if (ipending & MIPS_INT_MASK_0) {
-		news5000_level0_intr();
-		apbus_wbflush();
-		cause &= ~MIPS_INT_MASK_0;
-	}
-
-	ci->ci_idepth--;
-	_splset((status & ~cause & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
 }
 
Index: /trunk/src/sys/arch/pmax/conf/GENERIC64
===================================================================
--- /trunk/src/sys/arch/pmax/conf/GENERIC64	(revision 151)
+++ /trunk/src/sys/arch/pmax/conf/GENERIC64	(revision 152)
@@ -1,3 +1,3 @@
-# $NetBSD: GENERIC64,v 1.1.2.1 2009/09/08 17:24:08 matt Exp $
+# $NetBSD: GENERIC64,v 1.1.2.2 2010/12/29 00:21:28 matt Exp $
 #
 # GENERIC machine description file
@@ -23,5 +23,5 @@
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident		"GENERIC-$Revision: 1.1.2.1 $"
+#ident		"GENERIC-$Revision: 1.1.2.2 $"
 
 maxusers	64
@@ -30,4 +30,5 @@
 
 # Support for specific models of DECstation
+options 	DEC_3MAX	# DECstation 5000/200 (kn02)
 options 	DEC_3MIN	# DECstation 5000/1xx (kn02ba), 5000/150 (kn04)
 options 	DEC_MAXINE	# Personal DECstation 5000/xx (kn02ca)
@@ -178,4 +179,14 @@
 tc*	at	mainbus0
 
+# 3MAX has TURBOchannel but no IOASIC
+ibus0	at	tc? slot ? offset ?	# 3MAX system slot
+
+# PMAX, 3MAX and MIPSMATE common devices
+mcclock* at	ibus0 addr ?		# DS1287 RTC
+dz*	at	ibus0 addr ?		# DC7085 quad line serial device
+lkkbd*	at	dz? line 0		# Keyboard
+vsms*	at	dz? line 1		# Mouse
+sii*	at	ibus0 addr ?		# DC7061 onboard SCSI`
+
 # 3MIN, 3MAX+ and MAXINE have IOASIC in system slot
 ioasic0	at	tc?
@@ -234,4 +245,5 @@
 #########################################################################
 
+scsibus* at sii?
 scsibus* at asc?
 
Index: /trunk/src/sys/arch/pmax/ibus/dz_ibus.c
===================================================================
--- /trunk/src/sys/arch/pmax/ibus/dz_ibus.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/ibus/dz_ibus.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: dz_ibus.c,v 1.9 2008/04/28 20:23:31 martin Exp $	*/
+/*	$NetBSD: dz_ibus.c,v 1.9.18.1 2010/12/29 00:12:00 matt Exp $	*/
 
 /*-
@@ -62,5 +62,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dz_ibus.c,v 1.9 2008/04/28 20:23:31 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dz_ibus.c,v 1.9.18.1 2010/12/29 00:12:00 matt Exp $");
 
 #include "dzkbd.h"
@@ -137,7 +137,5 @@
 dz_ibus_match(device_t parent, cfdata_t cf, void *aux)
 {
-	struct ibus_attach_args *iba;
-
-	iba = aux;
+	struct ibus_attach_args *iba = aux;
 
 	if (strcmp(iba->ia_name, "dc") != 0 &&
@@ -158,5 +156,7 @@
 	struct dz_softc *sc = device_private(self);
 	volatile struct dzregs *dz;
+#if NDZMS > 0 || NDZKBD > 0
 	struct dzkm_attach_args daa;
+#endif
 	int i;
 
Index: /trunk/src/sys/arch/pmax/ibus/ibus.c
===================================================================
--- /trunk/src/sys/arch/pmax/ibus/ibus.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/ibus/ibus.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ibus.c,v 1.14 2007/03/04 06:00:33 christos Exp $	*/
+/*	$NetBSD: ibus.c,v 1.14.62.1 2010/12/29 00:12:01 matt Exp $	*/
 
 /*
@@ -32,5 +32,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: ibus.c,v 1.14 2007/03/04 06:00:33 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ibus.c,v 1.14.62.1 2010/12/29 00:12:01 matt Exp $");
 
 #include <sys/param.h>
@@ -66,5 +66,5 @@
 			continue;
 
-		locs[IBUSCF_ADDR] = MIPS_KSEG1_TO_PHYS(ia->ia_addr);
+		locs[IBUSCF_ADDR] = (int32_t)MIPS_KSEG1_TO_PHYS(ia->ia_addr);
 
 		config_found_sm_loc(self, "ibus", locs, ia,
@@ -83,5 +83,5 @@
 		aprint_normal("%s at %s", ia->ia_name, pnp);
 
-	aprint_normal(" addr 0x%x", MIPS_KSEG1_TO_PHYS(ia->ia_addr));
+	aprint_normal(" addr %#"PRIxPADDR, MIPS_KSEG1_TO_PHYS(ia->ia_addr));
 
 	return (UNCONF);
@@ -93,5 +93,5 @@
 	void *cookie;
 	int level;
-	int (*handler) __P((void *));
+	int (*handler)(void *);
 	void *arg;
 {
Index: /trunk/src/sys/arch/pmax/ibus/ibus_3max.c
===================================================================
--- /trunk/src/sys/arch/pmax/ibus/ibus_3max.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/ibus/ibus_3max.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ibus_3max.c,v 1.11 2008/05/26 10:31:22 nisimura Exp $	*/
+/*	$NetBSD: ibus_3max.c,v 1.11.16.1 2010/12/29 00:12:01 matt Exp $	*/
 
 /*-
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ibus_3max.c,v 1.11 2008/05/26 10:31:22 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ibus_3max.c,v 1.11.16.1 2010/12/29 00:12:01 matt Exp $");
 
 #include <sys/param.h>
@@ -46,16 +46,12 @@
 };
 
-static int	kn02sys_match __P((struct device *, struct cfdata *, void *));
-static void	kn02sys_attach __P((struct device *, struct device *, void *));
+static int	kn02sys_match(device_t, cfdata_t, void *);
+static void	kn02sys_attach(device_t, device_t, void *);
 
-CFATTACH_DECL(kn02sys, sizeof(struct ibus_softc),
+CFATTACH_DECL_NEW(kn02sys, 0,
     kn02sys_match, kn02sys_attach, NULL, NULL);
 
 static int
-kn02sys_match(parent, cfdata, aux)
-        struct device *parent;
-        struct cfdata *cfdata;
-        void *aux;
-
+kn02sys_match(device_t parent, cfdata_t cf, void *aux)
 {
 	struct tc_attach_args *ta = aux;
@@ -65,7 +61,5 @@
 
 static void
-kn02sys_attach(parent, self, aux)
-        struct device *parent, *self;
-        void *aux;
+kn02sys_attach(device_t parent, device_t self, void *aux)
 {
 	struct ibus_dev_attach_args ida;
@@ -73,5 +67,5 @@
 	ida.ida_busname = "ibus";
 	ida.ida_devs = kn02sys_devs;
-	ida.ida_ndevs = sizeof(kn02sys_devs)/sizeof(kn02sys_devs[0]);
+	ida.ida_ndevs = __arraycount(kn02sys_devs);
 
 	ibusattach(parent, self, &ida);
Index: /trunk/src/sys/arch/pmax/ibus/ibus_pmax.c
===================================================================
--- /trunk/src/sys/arch/pmax/ibus/ibus_pmax.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/ibus/ibus_pmax.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ibus_pmax.c,v 1.18 2002/10/02 04:15:09 thorpej Exp $	*/
+/*	$NetBSD: ibus_pmax.c,v 1.18.130.1 2010/12/29 00:12:01 matt Exp $	*/
 
 /*
@@ -32,5 +32,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: ibus_pmax.c,v 1.18 2002/10/02 04:15:09 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ibus_pmax.c,v 1.18.130.1 2010/12/29 00:12:01 matt Exp $");
 
 #include "opt_dec_3100.h"
@@ -50,8 +50,8 @@
 #include <pmax/pmax/pmaxtype.h>
 
-static int	ibus_pmax_match __P((struct device *, struct cfdata *, void *));
-static void	ibus_pmax_attach __P((struct device *, struct device *, void *));
+static int	ibus_pmax_match(device_t, cfdata_t, void *);
+static void	ibus_pmax_attach(device_t, device_t, void *);
 
-CFATTACH_DECL(ibus_pmax, sizeof(struct ibus_softc),
+CFATTACH_DECL_NEW(ibus_pmax, 0,
     ibus_pmax_match, ibus_pmax_attach, NULL, NULL);
 
@@ -66,6 +66,4 @@
         { "mc146818",   SYS_DEV_BOGUS,	KV(KN01_SYS_CLOCK),     0	},
 };
-static const int ibus_pmax_ndevs =
-	sizeof(ibus_pmax_devs)/sizeof(ibus_pmax_devs[0]);
 #endif /* DEC_3100 */
 
@@ -89,6 +87,4 @@
 #endif
 };
-static const int ibus_mipsmate_ndevs =
-	sizeof(ibus_mipsmate_devs)/sizeof(ibus_mipsmate_devs[0]);
 #endif /* DEC_5100 */
 
@@ -96,8 +92,5 @@
 
 static int
-ibus_pmax_match(parent, cfdata, aux)
-        struct device *parent;
-        struct cfdata *cfdata;
-	void *aux;
+ibus_pmax_match(device_t parent, cfdata_t cf, void *aux)
 {
 	struct mainbus_attach_args *ma = aux;
@@ -114,7 +107,5 @@
 
 static void
-ibus_pmax_attach(parent, self, aux)
-        struct device *parent, *self;
-        void *aux;
+ibus_pmax_attach(device_t parent, device_t self, void *aux)
 {
 	struct ibus_dev_attach_args ida;
@@ -127,5 +118,5 @@
 	case DS_PMAX:
 		ida.ida_devs = ibus_pmax_devs;
-		ida.ida_ndevs = ibus_pmax_ndevs;
+		ida.ida_ndevs = __arraycount(ibus_pmax_devs);
 		break;
 #endif
@@ -133,5 +124,5 @@
 	case DS_MIPSMATE:
 		ida.ida_devs = ibus_mipsmate_devs;
-		ida.ida_ndevs = ibus_mipsmate_ndevs;
+		ida.ida_ndevs = __arraycount(ibus_mipsmate_devs);
 		break;
 #endif
Index: /trunk/src/sys/arch/pmax/ibus/ibusvar.h
===================================================================
--- /trunk/src/sys/arch/pmax/ibus/ibusvar.h	(revision 151)
+++ /trunk/src/sys/arch/pmax/ibus/ibusvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ibusvar.h,v 1.17 2007/03/04 06:00:33 christos Exp $	*/
+/*	$NetBSD: ibusvar.h,v 1.17.62.1 2010/12/29 00:12:01 matt Exp $	*/
 
 #ifndef _PMAX_IBUS_IBUSVAR_H_
@@ -7,8 +7,4 @@
 
 struct ibus_attach_args;
-
-struct ibus_softc {
-	struct device	sc_dev;
-};
 
 /*
@@ -28,13 +24,13 @@
 struct ibus_attach_args {
 	const char *ia_name;		/* device name */
-	int	ia_cookie;		/* device cookie */
-	u_int32_t ia_addr;		/* device address (KSEG1) */
-	int	ia_basz;		/* badaddr() size */
+	intptr_t ia_cookie;		/* device cookie */
+	bus_addr_t ia_addr;		/* device address (KSEG1) */
+	bus_size_t ia_basz;		/* badaddr() size */
 };
 
-void	ibusattach __P((struct device *, struct device *, void *));
-int	ibusprint __P((void *, const char *));
-void	ibus_intr_establish __P((struct device *, void *cookie, int level,
-	    int (*handler)(void *), void *arg));
+void	ibusattach(struct device *, struct device *, void *);
+int	ibusprint(void *, const char *);
+void	ibus_intr_establish(struct device *, void *cookie, int level,
+	    int (*handler)(void *), void *arg);
 
 #endif	/* !_PMAX_IBUS_IBUSVAR_H_ */
Index: /trunk/src/sys/arch/pmax/ibus/mcclock_ibus.c
===================================================================
--- /trunk/src/sys/arch/pmax/ibus/mcclock_ibus.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/ibus/mcclock_ibus.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: mcclock_ibus.c,v 1.13 2008/01/03 23:02:24 joerg Exp $	*/
+/*	$NetBSD: mcclock_ibus.c,v 1.13.28.1 2010/12/29 00:12:01 matt Exp $	*/
 
 /*
@@ -29,5 +29,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: mcclock_ibus.c,v 1.13 2008/01/03 23:02:24 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mcclock_ibus.c,v 1.13.28.1 2010/12/29 00:12:01 matt Exp $");
 
 #include <sys/param.h>
@@ -42,8 +42,6 @@
 #include <pmax/ibus/ibusvar.h>
 
-static int	mcclock_ibus_match __P((struct device *, struct cfdata *,
-		    void *));
-static void	mcclock_ibus_attach __P((struct device *, struct device *,
-		    void *));
+static int	mcclock_ibus_match(device_t, cfdata_t, void *);
+static void	mcclock_ibus_attach(device_t, device_t, void *);
 
 CFATTACH_DECL(mcclock_ibus, sizeof (struct mcclock_pad32_softc),
@@ -51,8 +49,5 @@
 
 static int
-mcclock_ibus_match(parent, match, aux)
-	struct device *parent;
-	struct cfdata *match;
-	void *aux;
+mcclock_ibus_match(device_t parent, cfdata_t cf, void *aux)
 {
 	struct ibus_attach_args *ia = aux;
@@ -61,5 +56,5 @@
 		return (0);
 
-	if (badaddr((void *)ia->ia_addr, sizeof(u_int32_t)))
+	if (badaddr((void *)ia->ia_addr, sizeof(uint32_t)))
 		return (0);
 
@@ -68,10 +63,8 @@
 
 static void
-mcclock_ibus_attach(parent, self, aux)
-	struct device *parent, *self;
-	void *aux;
+mcclock_ibus_attach(device_t parent, device_t self, void *aux)
 {
-	struct ibus_attach_args *ia =aux;
-	struct mcclock_pad32_softc *sc = (struct mcclock_pad32_softc *)self;
+	struct ibus_attach_args *ia = aux;
+	struct mcclock_pad32_softc *sc = device_private(self);
 
 	sc->sc_dp = (struct mcclock_pad32_clockdatum*)ia->ia_addr;
Index: /trunk/src/sys/arch/pmax/ibus/sii_ds.c
===================================================================
--- /trunk/src/sys/arch/pmax/ibus/sii_ds.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/ibus/sii_ds.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sii_ds.c,v 1.3 2007/03/04 06:00:33 christos Exp $	*/
+/*	$NetBSD: sii_ds.c,v 1.3.62.1 2010/12/29 00:12:01 matt Exp $	*/
 
 /*
@@ -17,5 +17,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sii_ds.c,v 1.3 2007/03/04 06:00:33 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sii_ds.c,v 1.3.62.1 2010/12/29 00:12:01 matt Exp $");
 
 #include "sii.h"
@@ -43,21 +43,19 @@
 
 
-static void	kn230_copytobuf __P((u_short *src, 	/* NB: must be short aligned */
-		    volatile u_short *dst, int length));
-static void	kn230_copyfrombuf __P((volatile u_short *src, char *dst,
-		    int length));
-
-static void	kn01_copytobuf __P((u_short *src, 	/* NB: must be short aligned */
-		    volatile u_short *dst, int length));
-static void	kn01_copyfrombuf __P((volatile u_short *src, char *dst,
-		    int length));
+static void	kn230_copytobuf(u_short *src, 	/* NB: must be short aligned */
+		    volatile u_short *dst, int length);
+static void	kn230_copyfrombuf(volatile u_short *src, char *dst,
+		    int length);
+
+static void	kn01_copytobuf(u_short *src, 	/* NB: must be short aligned */
+		    volatile u_short *dst, int length);
+static void	kn01_copyfrombuf(volatile u_short *src, char *dst,
+		    int length);
 
 /*
  * Autoconfig definition of driver front-end
  */
-static int	sii_ds_match __P((struct device* parent, struct cfdata *match,
-		    void *aux));
-static void	sii_ds_attach __P((struct device *parent, struct device *self,
-		    void *aux));
+static int	sii_ds_match(device_t, struct cfdata *, void *);
+static void	sii_ds_attach(device_t, device_t, void *);
 
 CFATTACH_DECL(sii_ds, sizeof(struct siisoftc),
@@ -72,8 +70,5 @@
  */
 static int
-sii_ds_match(parent, match, aux)
-	struct device *parent;
-	struct cfdata *match;
-	void *aux;
+sii_ds_match(device_t parent, cfdata_t cf, void *aux)
 {
 	struct ibus_attach_args *ia = aux;
@@ -89,11 +84,8 @@
 
 static void
-sii_ds_attach(parent, self, aux)
-	struct device *parent;
-	struct device *self;
-	void *aux;
+sii_ds_attach(device_t parent, device_t self, void *aux)
 {
 	struct ibus_attach_args *ia = aux;
-	struct siisoftc *sc = (struct siisoftc *) self;
+	struct siisoftc *sc = device_private(self);
 
 	sc->sc_regs = (SIIRegs *)MIPS_PHYS_TO_KSEG1(ia->ia_addr);
@@ -135,8 +127,5 @@
  */
 static void
-kn230_copytobuf(src, dst, len)
-	u_short *src;
-	volatile u_short *dst;
-	int len;
+kn230_copytobuf(u_short *src, volatile u_short *dst, int len)
 {
 	u_int *wsrc = (u_int *)src;
@@ -172,8 +161,7 @@
  */
 static void
-kn230_copyfrombuf(src, dst, len)
-	volatile u_short *src;
-	char *dst;		/* XXX assume 32-bit aligned? */
-	int len;
+kn230_copyfrombuf(volatile u_short *src,
+	char *dst,		/* XXX assume 32-bit aligned? */
+	int len)
 {
 	volatile u_int *wsrc = (volatile u_int *)src;
@@ -213,8 +201,5 @@
 
 static void
-kn01_copytobuf(src, dst, len)
-	u_short *src;
-	volatile u_short *dst;
-	int len;
+kn01_copytobuf(u_short *src, volatile u_short *dst, int len)
 {
 #if defined(DIAGNOSTIC) || defined(DEBUG)
@@ -231,8 +216,7 @@
 
 static void
-kn01_copyfrombuf(src, dst, len)
-	volatile u_short *src;
-	char *dst;		/* XXX assume 32-bit aligned? */
-	int len;
+kn01_copyfrombuf(volatile u_short *src,
+	char *dst,		/* XXX assume 32-bit aligned? */
+	int len)
 {
 #if defined(DIAGNOSTIC) || defined(DEBUG)
Index: /trunk/src/sys/arch/pmax/ibus/siivar.h
===================================================================
--- /trunk/src/sys/arch/pmax/ibus/siivar.h	(revision 151)
+++ /trunk/src/sys/arch/pmax/ibus/siivar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: siivar.h,v 1.2 2006/07/29 19:10:57 ad Exp $	*/
+/*	$NetBSD: siivar.h,v 1.2.80.1 2010/12/29 00:12:01 matt Exp $	*/
 
 #ifndef _SIIVAR_H
@@ -58,17 +58,16 @@
 	int	sc_target;		/* target SCSI ID if connected */
 	ScsiCmd	*sc_cmd[SII_NCMD];	/* active command indexed by ID */
- 	void  (*sii_copytobuf) __P((u_short *src, volatile u_short *dst, int ln));
-	void (*sii_copyfrombuf) __P((volatile u_short *src, char *dst, int len));
+ 	void  (*sii_copytobuf)(u_short *src, volatile u_short *dst, int ln);
+	void (*sii_copyfrombuf)(volatile u_short *src, char *dst, int len);
 
 	State	sc_st[SII_NCMD];	/* state info for each active command */
 };
 
-int	siiintr __P((void *sc));
+int	siiintr(void *sc);
 
 /* Machine-indepedent back-end attach entry point */
 
-void	sii_scsi_request __P((struct scsipi_channel *,
-				scsipi_adapter_req_t, void *));
-void	siiattach __P((struct siisoftc *));
+void	sii_scsi_request(struct scsipi_channel *, scsipi_adapter_req_t, void *);
+void	siiattach(struct siisoftc *);
 
 #endif	/* _SIIVAR_H */
Index: /trunk/src/sys/arch/pmax/include/autoconf.h
===================================================================
--- /trunk/src/sys/arch/pmax/include/autoconf.h	(revision 151)
+++ /trunk/src/sys/arch/pmax/include/autoconf.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: autoconf.h,v 1.18 2003/03/22 14:26:43 simonb Exp $ */
+/*	$NetBSD: autoconf.h,v 1.18.126.1 2010/12/24 07:23:41 matt Exp $ */
 
 /*
@@ -41,5 +41,5 @@
 };
 
-void	makebootdev __P((char *));
+void	makebootdev(char *);
 
 #endif	/* !_PMAX_AUTOCONF_H_ */
Index: /trunk/src/sys/arch/pmax/include/bootinfo.h
===================================================================
--- /trunk/src/sys/arch/pmax/include/bootinfo.h	(revision 151)
+++ /trunk/src/sys/arch/pmax/include/bootinfo.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: bootinfo.h,v 1.7 2005/12/11 12:18:39 christos Exp $	*/
+/*	$NetBSD: bootinfo.h,v 1.7.96.1 2010/12/24 07:23:41 matt Exp $	*/
 
 /*
@@ -67,5 +67,5 @@
 
 #ifdef _KERNEL
-void	*lookup_bootinfo __P((int));
+void	*lookup_bootinfo(int);
 #endif
 
Index: /trunk/src/sys/arch/pmax/include/bus.h
===================================================================
--- /trunk/src/sys/arch/pmax/include/bus.h	(revision 151)
+++ /trunk/src/sys/arch/pmax/include/bus.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: bus.h,v 1.28 2008/04/28 20:23:31 martin Exp $	*/
+/*	$NetBSD: bus.h,v 1.28.18.1 2010/12/24 07:23:41 matt Exp $	*/
 
 /*-
@@ -55,6 +55,6 @@
 
 /*
- *	int bus_space_map __P((bus_space_tag_t t, bus_addr_t addr,
- *	    bus_size_t size, int flags, bus_space_handle_t *bshp));
+ *	int bus_space_map(bus_space_tag_t t, bus_addr_t addr,
+ *	    bus_size_t size, int flags, bus_space_handle_t *bshp);
  *
  * Map a region of bus space.
@@ -65,53 +65,53 @@
 #define	BUS_SPACE_MAP_PREFETCHABLE	0x04
 
-int	bus_space_map __P((bus_space_tag_t, bus_addr_t, bus_size_t,
-	    int, bus_space_handle_t *));
-
-/*
- *	void bus_space_unmap __P((bus_space_tag_t t,
- *	    bus_space_handle_t bsh, bus_size_t size));
+int	bus_space_map(bus_space_tag_t, bus_addr_t, bus_size_t,
+	    int, bus_space_handle_t *);
+
+/*
+ *	void bus_space_unmap(bus_space_tag_t t,
+ *	    bus_space_handle_t bsh, bus_size_t size);
  *
  * Unmap a region of bus space.
  */
 
-void	bus_space_unmap __P((bus_space_tag_t, bus_space_handle_t, bus_size_t));
-
-/*
- *	int bus_space_subregion __P((bus_space_tag_t t,
+void	bus_space_unmap(bus_space_tag_t, bus_space_handle_t, bus_size_t);
+
+/*
+ *	int bus_space_subregion(bus_space_tag_t t,
  *	    bus_space_handle_t bsh, bus_size_t offset, bus_size_t size,
- *	    bus_space_handle_t *nbshp));
+ *	    bus_space_handle_t *nbshp);
  *
  * Get a new handle for a subregion of an already-mapped area of bus space.
  */
 
-int	bus_space_subregion __P((bus_space_tag_t t, bus_space_handle_t bsh,
-	    bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp));
-
-/*
- *	int bus_space_alloc __P((bus_space_tag_t t, bus_addr_t, rstart,
+int	bus_space_subregion(bus_space_tag_t t, bus_space_handle_t bsh,
+	    bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp);
+
+/*
+ *	int bus_space_alloc(bus_space_tag_t t, bus_addr_t, rstart,
  *	    bus_addr_t rend, bus_size_t size, bus_size_t align,
  *	    bus_size_t boundary, int flags, bus_addr_t *addrp,
- *	    bus_space_handle_t *bshp));
+ *	    bus_space_handle_t *bshp);
  *
  * Allocate a region of bus space.
  */
 
-int	bus_space_alloc __P((bus_space_tag_t t, bus_addr_t rstart,
+int	bus_space_alloc(bus_space_tag_t t, bus_addr_t rstart,
 	    bus_addr_t rend, bus_size_t size, bus_size_t align,
 	    bus_size_t boundary, int cacheable, bus_addr_t *addrp,
-	    bus_space_handle_t *bshp));
-
-/*
- *	int bus_space_free __P((bus_space_tag_t t,
- *	    bus_space_handle_t bsh, bus_size_t size));
+	    bus_space_handle_t *bshp);
+
+/*
+ *	int bus_space_free(bus_space_tag_t t,
+ *	    bus_space_handle_t bsh, bus_size_t size);
  *
  * Free a region of bus space.
  */
 
-void	bus_space_free __P((bus_space_tag_t t, bus_space_handle_t bsh,
-	    bus_size_t size));
-
-/*
- *	void *bus_space_vaddr __P((bus_space_tag_t, bus_space_handle_t));
+void	bus_space_free(bus_space_tag_t t, bus_space_handle_t bsh,
+	    bus_size_t size);
+
+/*
+ *	void *bus_space_vaddr(bus_space_tag_t, bus_space_handle_t);
  *
  * Get the kernel virtual address for the mapped bus space.
@@ -123,6 +123,6 @@
 
 /*
- *	u_intN_t bus_space_read_N __P((bus_space_tag_t tag,
- *	    bus_space_handle_t bsh, bus_size_t offset));
+ *	u_intN_t bus_space_read_N(bus_space_tag_t tag,
+ *	    bus_space_handle_t bsh, bus_size_t offset);
  *
  * Read a 1, 2, 4, or 8 byte quantity from bus space
@@ -137,5 +137,5 @@
 
 #define	bus_space_read_4(t, h, o)					\
-     ((void) t, (*(volatile u_int32_t *)((h) + (o))))
+     ((void) t, (*(volatile uint32_t *)((h) + (o))))
 
 #if 0	/* Cause a link error for bus_space_read_8 */
@@ -144,7 +144,7 @@
 
 /*
- *	void bus_space_read_multi_N __P((bus_space_tag_t tag,
+ *	void bus_space_read_multi_N(bus_space_tag_t tag,
  *	    bus_space_handle_t bsh, bus_size_t offset,
- *	    u_intN_t *addr, size_t count));
+ *	    u_intN_t *addr, size_t count);
  *
  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
@@ -154,14 +154,14 @@
 #define __PMAX_bus_space_read_multi(BYTES,BITS)				\
 static __inline void __CONCAT(bus_space_read_multi_,BYTES)		\
-	__P((bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
-	__PB_TYPENAME(BITS) *, size_t));				\
+	(bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
+	__PB_TYPENAME(BITS) *, size_t);					\
 									\
 static __inline void							\
-__CONCAT(bus_space_read_multi_,BYTES)(t, h, o, a, c)			\
-	bus_space_tag_t t;						\
-	bus_space_handle_t h;						\
-	bus_size_t o;							\
-	__PB_TYPENAME(BITS) *a;						\
-	size_t c;							\
+__CONCAT(bus_space_read_multi_,BYTES)(					\
+	bus_space_tag_t t,						\
+	bus_space_handle_t h,						\
+	bus_size_t o,							\
+	__PB_TYPENAME(BITS) *a,						\
+	size_t c)							\
 {									\
 									\
@@ -181,7 +181,7 @@
 
 /*
- *	void bus_space_read_region_N __P((bus_space_tag_t tag,
+ *	void bus_space_read_region_N(bus_space_tag_t tag,
  *	    bus_space_handle_t bsh, bus_size_t offset,
- *	    u_intN_t *addr, size_t count));
+ *	    u_intN_t *addr, size_t count);
  *
  * Read `count' 1, 2, 4, or 8 byte quantities from bus space
@@ -192,14 +192,14 @@
 #define __PMAX_bus_space_read_region(BYTES,BITS)			\
 static __inline void __CONCAT(bus_space_read_region_,BYTES)		\
-	__P((bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
-	__PB_TYPENAME(BITS) *, size_t));				\
+	(bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
+	__PB_TYPENAME(BITS) *, size_t);					\
 									\
 static __inline void							\
-__CONCAT(bus_space_read_region_,BYTES)(t, h, o, a, c)			\
-	bus_space_tag_t t;						\
-	bus_space_handle_t h;						\
-	bus_size_t o;							\
-	__PB_TYPENAME(BITS) *a;						\
-	size_t c;							\
+__CONCAT(bus_space_read_region_,BYTES)(					\
+	bus_space_tag_t t,						\
+	bus_space_handle_t h,						\
+	bus_size_t o,							\
+	__PB_TYPENAME(BITS) *a,						\
+	size_t c)							\
 {									\
 									\
@@ -221,7 +221,7 @@
 
 /*
- *	void bus_space_write_N __P((bus_space_tag_t tag,
+ *	void bus_space_write_N(bus_space_tag_t tag,
  *	    bus_space_handle_t bsh, bus_size_t offset,
- *	    u_intN_t value));
+ *	    u_intN_t value);
  *
  * Write the 1, 2, 4, or 8 byte value `value' to bus space
@@ -232,5 +232,5 @@
 do {									\
 	(void) t;							\
-	*(volatile u_int8_t *)((h) + (o)) = (v);			\
+	*(volatile uint8_t *)((h) + (o)) = (v);				\
 	wbflush();					/* XXX */	\
 } while (0)
@@ -239,5 +239,5 @@
 do {									\
 	(void) t;							\
-	*(volatile u_int16_t *)((h) + (o)) = (v);			\
+	*(volatile uint16_t *)((h) + (o)) = (v);			\
 	wbflush();					/* XXX */	\
 } while (0)
@@ -246,5 +246,5 @@
 do {									\
 	(void) t;							\
-	*(volatile u_int32_t *)((h) + (o)) = (v);			\
+	*(volatile uint32_t *)((h) + (o)) = (v);			\
 	wbflush();					/* XXX */	\
 } while (0)
@@ -255,7 +255,7 @@
 
 /*
- *	void bus_space_write_multi_N __P((bus_space_tag_t tag,
+ *	void bus_space_write_multi_N(bus_space_tag_t tag,
  *	    bus_space_handle_t bsh, bus_size_t offset,
- *	    const u_intN_t *addr, size_t count));
+ *	    const u_intN_t *addr, size_t count);
  *
  * Write `count' 1, 2, 4, or 8 byte quantities from the buffer
@@ -265,14 +265,14 @@
 #define __PMAX_bus_space_write_multi(BYTES,BITS)			\
 static __inline void __CONCAT(bus_space_write_multi_,BYTES)		\
-	__P((bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
-	__PB_TYPENAME(BITS) *, size_t));				\
+	(bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
+	__PB_TYPENAME(BITS) *, size_t);					\
 									\
 static __inline void							\
-__CONCAT(bus_space_write_multi_,BYTES)(t, h, o, a, c)			\
-	bus_space_tag_t t;						\
-	bus_space_handle_t h;						\
-	bus_size_t o;							\
-	__PB_TYPENAME(BITS) *a;						\
-	size_t c;							\
+__CONCAT(bus_space_write_multi_,BYTES)(					\
+	bus_space_tag_t t,						\
+	bus_space_handle_t h,						\
+	bus_size_t o,							\
+	__PB_TYPENAME(BITS) *a,						\
+	size_t c)							\
 {									\
 									\
@@ -293,7 +293,7 @@
 
 /*
- *	void bus_space_write_region_N __P((bus_space_tag_t tag,
+ *	void bus_space_write_region_N(bus_space_tag_t tag,
  *	    bus_space_handle_t bsh, bus_size_t offset,
- *	    const u_intN_t *addr, size_t count));
+ *	    const u_intN_t *addr, size_t count);
  *
  * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided
@@ -303,14 +303,14 @@
 #define __PMAX_bus_space_write_region(BYTES,BITS)			\
 static __inline void __CONCAT(bus_space_write_region_,BYTES)		\
-	__P((bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
-	__PB_TYPENAME(BITS) *, size_t));				\
+	(bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
+	__PB_TYPENAME(BITS) *, size_t);					\
 									\
 static __inline void							\
-__CONCAT(bus_space_write_region_,BYTES)(t, h, o, a, c)			\
-	bus_space_tag_t t;						\
-	bus_space_handle_t h;						\
-	bus_size_t o;							\
-	__PB_TYPENAME(BITS) *a;						\
-	size_t c;							\
+__CONCAT(bus_space_write_region_,BYTES)(				\
+	bus_space_tag_t t,						\
+	bus_space_handle_t h,						\
+	bus_size_t o,							\
+	__PB_TYPENAME(BITS) *a,						\
+	size_t c)							\
 {									\
 									\
@@ -333,7 +333,7 @@
 
 /*
- *	void bus_space_set_multi_N __P((bus_space_tag_t tag,
+ *	void bus_space_set_multi_N(bus_space_tag_t tag,
  *	    bus_space_handle_t bsh, bus_size_t offset, u_intN_t val,
- *	    size_t count));
+ *	    size_t count);
  *
  * Write the 1, 2, 4, or 8 byte value `val' to bus space described
@@ -343,14 +343,14 @@
 #define __PMAX_bus_space_set_multi(BYTES,BITS)				\
 static __inline void __CONCAT(bus_space_set_multi_,BYTES)		\
-	__P((bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
-	__PB_TYPENAME(BITS), size_t));					\
+	(bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
+	__PB_TYPENAME(BITS), size_t);					\
 									\
 static __inline void							\
-__CONCAT(bus_space_set_multi_,BYTES)(t, h, o, v, c)			\
-	bus_space_tag_t t;						\
-	bus_space_handle_t h;						\
-	bus_size_t o;							\
-	__PB_TYPENAME(BITS) v;						\
-	size_t c;							\
+__CONCAT(bus_space_set_multi_,BYTES)(					\
+	bus_space_tag_t t,						\
+	bus_space_handle_t h,						\
+	bus_size_t o,							\
+	__PB_TYPENAME(BITS) v,						\
+	size_t c)							\
 {									\
 									\
@@ -371,7 +371,7 @@
 
 /*
- *	void bus_space_set_region_N __P((bus_space_tag_t tag,
+ *	void bus_space_set_region_N(bus_space_tag_t tag,
  *	    bus_space_handle_t bsh, bus_size_t offset, u_intN_t val,
- *	    size_t count));
+ *	    size_t count);
  *
  * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described
@@ -381,14 +381,14 @@
 #define __PMAX_bus_space_set_region(BYTES,BITS)				\
 static __inline void __CONCAT(bus_space_set_region_,BYTES)		\
-	__P((bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
-	__PB_TYPENAME(BITS), size_t));					\
+	(bus_space_tag_t, bus_space_handle_t, bus_size_t,		\
+	__PB_TYPENAME(BITS), size_t);					\
 									\
 static __inline void							\
-__CONCAT(bus_space_set_region_,BYTES)(t, h, o, v, c)			\
-	bus_space_tag_t t;						\
-	bus_space_handle_t h;						\
-	bus_size_t o;							\
-	__PB_TYPENAME(BITS) v;						\
-	size_t c;							\
+__CONCAT(bus_space_set_region_,BYTES)(					\
+	bus_space_tag_t t,						\
+	bus_space_handle_t h,						\
+	bus_size_t o,							\
+	__PB_TYPENAME(BITS) v,						\
+	size_t c)							\
 {									\
 									\
@@ -411,8 +411,8 @@
 
 /*
- *	void bus_space_copy_region_N __P((bus_space_tag_t tag,
+ *	void bus_space_copy_region_N(bus_space_tag_t tag,
  *	    bus_space_handle_t bsh1, bus_size_t off1,
  *	    bus_space_handle_t bsh2, bus_size_t off2,
- *	    bus_size_t count));
+ *	    bus_size_t count);
  *
  * Copy `count' 1, 2, 4, or 8 byte values from bus space starting
@@ -422,14 +422,15 @@
 #define	__PMAX_copy_region(BYTES)					\
 static __inline void __CONCAT(bus_space_copy_region_,BYTES)		\
-	__P((bus_space_tag_t,						\
+	   (bus_space_tag_t,						\
 	    bus_space_handle_t bsh1, bus_size_t off1,			\
 	    bus_space_handle_t bsh2, bus_size_t off2,			\
-	    bus_size_t count));						\
+	    bus_size_t count);						\
 									\
 static __inline void							\
-__CONCAT(bus_space_copy_region_,BYTES)(t, h1, o1, h2, o2, c)		\
-	bus_space_tag_t t;						\
-	bus_space_handle_t h1, h2;					\
-	bus_size_t o1, o2, c;						\
+__CONCAT(bus_space_copy_region_,BYTES)(					\
+	bus_space_tag_t t,						\
+	bus_space_handle_t h1, bus_size_t o1,				\
+	bus_space_handle_t h2, bus_size_t o2,				\
+	bus_size_t c)							\
 {									\
 	bus_size_t o;							\
@@ -462,7 +463,7 @@
  * Bus read/write barrier methods.
  *
- *	void bus_space_barrier __P((bus_space_tag_t tag,
+ *	void bus_space_barrier(bus_space_tag_t tag,
  *	    bus_space_handle_t bsh, bus_size_t offset,
- *	    bus_size_t len, int flags));
+ *	    bus_size_t len, int flags);
  *
  * On the MIPS, we just flush the write buffer.
@@ -538,31 +539,31 @@
 	 * DMA mapping methods.
 	 */
-	int	(*_dmamap_create) __P((bus_dma_tag_t, bus_size_t, int,
-		    bus_size_t, bus_size_t, int, bus_dmamap_t *));
-	void	(*_dmamap_destroy) __P((bus_dma_tag_t, bus_dmamap_t));
-	int	(*_dmamap_load) __P((bus_dma_tag_t, bus_dmamap_t, void *,
-		    bus_size_t, struct proc *, int));
-	int	(*_dmamap_load_mbuf) __P((bus_dma_tag_t, bus_dmamap_t,
-		    struct mbuf *, int));
-	int	(*_dmamap_load_uio) __P((bus_dma_tag_t, bus_dmamap_t,
-		    struct uio *, int));
-	int	(*_dmamap_load_raw) __P((bus_dma_tag_t, bus_dmamap_t,
-		    bus_dma_segment_t *, int, bus_size_t, int));
-	void	(*_dmamap_unload) __P((bus_dma_tag_t, bus_dmamap_t));
-	void	(*_dmamap_sync) __P((bus_dma_tag_t, bus_dmamap_t,
-		    bus_addr_t, bus_size_t, int));
+	int	(*_dmamap_create)(bus_dma_tag_t, bus_size_t, int,
+		    bus_size_t, bus_size_t, int, bus_dmamap_t *);
+	void	(*_dmamap_destroy)(bus_dma_tag_t, bus_dmamap_t);
+	int	(*_dmamap_load)(bus_dma_tag_t, bus_dmamap_t, void *,
+		    bus_size_t, struct proc *, int);
+	int	(*_dmamap_load_mbuf)(bus_dma_tag_t, bus_dmamap_t,
+		    struct mbuf *, int);
+	int	(*_dmamap_load_uio)(bus_dma_tag_t, bus_dmamap_t,
+		    struct uio *, int);
+	int	(*_dmamap_load_raw)(bus_dma_tag_t, bus_dmamap_t,
+		    bus_dma_segment_t *, int, bus_size_t, int);
+	void	(*_dmamap_unload)(bus_dma_tag_t, bus_dmamap_t);
+	void	(*_dmamap_sync)(bus_dma_tag_t, bus_dmamap_t,
+		    bus_addr_t, bus_size_t, int);
 
 	/*
 	 * DMA memory utility functions.
 	 */
-	int	(*_dmamem_alloc) __P((bus_dma_tag_t, bus_size_t, bus_size_t,
-		    bus_size_t, bus_dma_segment_t *, int, int *, int));
-	void	(*_dmamem_free) __P((bus_dma_tag_t,
-		    bus_dma_segment_t *, int));
-	int	(*_dmamem_map) __P((bus_dma_tag_t, bus_dma_segment_t *,
-		    int, size_t, void **, int));
-	void	(*_dmamem_unmap) __P((bus_dma_tag_t, void *, size_t));
-	paddr_t	(*_dmamem_mmap) __P((bus_dma_tag_t, bus_dma_segment_t *,
-		    int, off_t, int, int));
+	int	(*_dmamem_alloc)(bus_dma_tag_t, bus_size_t, bus_size_t,
+		    bus_size_t, bus_dma_segment_t *, int, int *, int);
+	void	(*_dmamem_free)(bus_dma_tag_t,
+		    bus_dma_segment_t *, int);
+	int	(*_dmamem_map)(bus_dma_tag_t, bus_dma_segment_t *,
+		    int, size_t, void **, int);
+	void	(*_dmamem_unmap)(bus_dma_tag_t, void *, size_t);
+	paddr_t	(*_dmamem_mmap)(bus_dma_tag_t, bus_dma_segment_t *,
+		    int, off_t, int, int);
 };
 
@@ -626,37 +627,37 @@
 void	pmax_bus_dma_init(void);
 
-int	_bus_dmamap_create __P((bus_dma_tag_t, bus_size_t, int, bus_size_t,
-	    bus_size_t, int, bus_dmamap_t *));
-void	_bus_dmamap_destroy __P((bus_dma_tag_t, bus_dmamap_t));
-int	_bus_dmamap_load __P((bus_dma_tag_t, bus_dmamap_t, void *,
-	    bus_size_t, struct proc *, int));
-int	_bus_dmamap_load_mbuf __P((bus_dma_tag_t, bus_dmamap_t,
-	    struct mbuf *, int));
-int	_bus_dmamap_load_uio __P((bus_dma_tag_t, bus_dmamap_t,
-	    struct uio *, int));
-int	_bus_dmamap_load_raw __P((bus_dma_tag_t, bus_dmamap_t,
-	    bus_dma_segment_t *, int, bus_size_t, int));
-void	_bus_dmamap_unload __P((bus_dma_tag_t, bus_dmamap_t));
-void	_bus_dmamap_sync_r3k __P((bus_dma_tag_t, bus_dmamap_t, bus_addr_t,
-	    bus_size_t, int));
-void	_bus_dmamap_sync_r4k __P((bus_dma_tag_t, bus_dmamap_t, bus_addr_t,
-	    bus_size_t, int));
-
-int	_bus_dmamem_alloc __P((bus_dma_tag_t tag, bus_size_t size,
+int	_bus_dmamap_create(bus_dma_tag_t, bus_size_t, int, bus_size_t,
+	    bus_size_t, int, bus_dmamap_t *);
+void	_bus_dmamap_destroy(bus_dma_tag_t, bus_dmamap_t);
+int	_bus_dmamap_load(bus_dma_tag_t, bus_dmamap_t, void *,
+	    bus_size_t, struct proc *, int);
+int	_bus_dmamap_load_mbuf(bus_dma_tag_t, bus_dmamap_t,
+	    struct mbuf *, int);
+int	_bus_dmamap_load_uio(bus_dma_tag_t, bus_dmamap_t,
+	    struct uio *, int);
+int	_bus_dmamap_load_raw(bus_dma_tag_t, bus_dmamap_t,
+	    bus_dma_segment_t *, int, bus_size_t, int);
+void	_bus_dmamap_unload(bus_dma_tag_t, bus_dmamap_t);
+void	_bus_dmamap_sync_r3k(bus_dma_tag_t, bus_dmamap_t, bus_addr_t,
+	    bus_size_t, int);
+void	_bus_dmamap_sync_r4k(bus_dma_tag_t, bus_dmamap_t, bus_addr_t,
+	    bus_size_t, int);
+
+int	_bus_dmamem_alloc(bus_dma_tag_t tag, bus_size_t size,
 	    bus_size_t alignment, bus_size_t boundary,
-	    bus_dma_segment_t *segs, int nsegs, int *rsegs, int flags));
-void	_bus_dmamem_free __P((bus_dma_tag_t tag, bus_dma_segment_t *segs,
-	    int nsegs));
-int	_bus_dmamem_map __P((bus_dma_tag_t tag, bus_dma_segment_t *segs,
-	    int nsegs, size_t size, void **kvap, int flags));
-void	_bus_dmamem_unmap __P((bus_dma_tag_t tag, void *kva,
-	    size_t size));
-paddr_t	_bus_dmamem_mmap __P((bus_dma_tag_t tag, bus_dma_segment_t *segs,
-	    int nsegs, off_t off, int prot, int flags));
-
-int	_bus_dmamem_alloc_range __P((bus_dma_tag_t tag, bus_size_t size,
+	    bus_dma_segment_t *segs, int nsegs, int *rsegs, int flags);
+void	_bus_dmamem_free(bus_dma_tag_t tag, bus_dma_segment_t *segs,
+	    int nsegs);
+int	_bus_dmamem_map(bus_dma_tag_t tag, bus_dma_segment_t *segs,
+	    int nsegs, size_t size, void **kvap, int flags);
+void	_bus_dmamem_unmap(bus_dma_tag_t tag, void *kva,
+	    size_t size);
+paddr_t	_bus_dmamem_mmap(bus_dma_tag_t tag, bus_dma_segment_t *segs,
+	    int nsegs, off_t off, int prot, int flags);
+
+int	_bus_dmamem_alloc_range(bus_dma_tag_t tag, bus_size_t size,
 	    bus_size_t alignment, bus_size_t boundary,
 	    bus_dma_segment_t *segs, int nsegs, int *rsegs, int flags,
-	    vaddr_t low, vaddr_t high));
+	    vaddr_t low, vaddr_t high);
 
 extern struct pmax_bus_dma_tag pmax_default_bus_dma_tag;
Index: /trunk/src/sys/arch/pmax/include/dec_prom.h
===================================================================
--- /trunk/src/sys/arch/pmax/include/dec_prom.h	(revision 151)
+++ /trunk/src/sys/arch/pmax/include/dec_prom.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: dec_prom.h,v 1.20.96.1 2009/09/16 19:23:18 matt Exp $	*/
+/*	$NetBSD: dec_prom.h,v 1.20.96.2 2010/12/29 00:16:30 matt Exp $	*/
 
 /*
@@ -146,6 +146,8 @@
 extern const struct callback callvec;
 #endif
+intptr_t promcall(void *, ...);
 
 #if defined(_STANDALONE) && !defined(_NO_PROM_DEFINES)
+#if 0
 #define memcpy (*callv -> _memcpy)
 #define memset (*callv -> _memset)
@@ -189,4 +191,5 @@
 #define execute_cmd (*callv -> _execute_cmd)
 #define rex (*callv -> _rex)
+#endif
 
 #define bzero(dst, len) memset(dst, 0, len)
Index: /trunk/src/sys/arch/pmax/include/intr.h
===================================================================
--- /trunk/src/sys/arch/pmax/include/intr.h	(revision 151)
+++ /trunk/src/sys/arch/pmax/include/intr.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: intr.h,v 1.32.28.1 2010/02/06 02:57:44 matt Exp $	*/
+/*	$NetBSD: intr.h,v 1.32.28.3 2010/12/29 00:19:12 matt Exp $	*/
 
 /*
@@ -37,65 +37,13 @@
 #include <sys/queue.h>
 
-#define	IPL_NONE	0	/* disable only this interrupt */
-#define	IPL_SOFTCLOCK	1	/* clock software interrupts (SI 0) */
-#define	IPL_SOFTBIO	1	/* generic software interrupts (SI 0) */
-#define	IPL_SOFTNET	2	/* network software interrupts (SI 1) */
-#define	IPL_SOFTSERIAL	2	/* serial software interrupts (SI 1) */
-#define	IPL_VM		3
-#define	IPL_SCHED	4
-#define	IPL_HIGH	5
-
-#define	_IPL_N		6
-
-#define	_IPL_SI0_FIRST	IPL_SOFTCLOCK
-#define	_IPL_SI0_LAST	IPL_SOFTBIO
-
-#define	_IPL_SI1_FIRST	IPL_SOFTNET
-#define	_IPL_SI1_LAST	IPL_SOFTSERIAL
+#include <mips/intr.h>
 
 #ifdef _KERNEL
 #ifndef _LOCORE
 
-#include <mips/cpuregs.h>
-#include <mips/locore.h>
-
-#define spl0()		(void)_spllower(0)
-#define splx(s)		(void)_splset(s)
-#define splvm()		splraiseipl(makeiplcookie(IPL_VM))
-#define splsched()	splraiseipl(makeiplcookie(IPL_SCHED))
-#define splhigh()	_splraise(MIPS_INT_MASK)
-
-#define	_SPL_SOFT	MIPS_SOFT_INT_MASK_0
-#define	_SPL_SOFTCLOCK	MIPS_SOFT_INT_MASK_0
-#define	_SPL_SOFTNET	(MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
-#define	_SPL_SOFTSERIAL	(MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
-
-#define splsoftclock()	_splraise(_SPL_SOFTCLOCK)
-#define splsoftbio()	_splraise(_SPL_SOFTBIO)
-#define splsoftnet()	_splraise(_SPL_SOFTNET)
-#define splsoftserial()	_splraise(_SPL_SOFTSERIAL)
-
-extern const int *ipl2spl_table;
-
-typedef int ipl_t;
-typedef struct {
-	int _spl;
-} ipl_cookie_t;
-
-ipl_cookie_t makeiplcookie(ipl_t);
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
-	return _splraise(icookie._spl);
-}
-
-/* Conventionals ... */
-
-#define MIPS_SPLHIGH (MIPS_INT_MASK)
-#define MIPS_SPL0 (MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
-#define MIPS_SPL1 (MIPS_INT_MASK_1|MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
-#define MIPS_SPL3 (MIPS_INT_MASK_3|MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
+#define MIPS_SPLHIGH	(MIPS_INT_MASK)
+#define MIPS_SPL0	(MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK)
+#define MIPS_SPL1	(MIPS_INT_MASK_1|MIPS_SOFT_INT_MASK)
+#define MIPS_SPL3	(MIPS_INT_MASK_3|MIPS_SOFT_INT_MASK)
 #define MIPS_SPL_0_1	 (MIPS_INT_MASK_1|MIPS_SPL0)
 #define MIPS_SPL_0_1_2	 (MIPS_INT_MASK_2|MIPS_SPL_0_1)
@@ -104,5 +52,5 @@
 
 struct intrhand {
-	int	(*ih_func) __P((void *));
+	int	(*ih_func)(void *);
 	void	*ih_arg;
 	struct evcnt ih_count;
Index: /trunk/src/sys/arch/pmax/include/param.h
===================================================================
--- /trunk/src/sys/arch/pmax/include/param.h	(revision 151)
+++ /trunk/src/sys/arch/pmax/include/param.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: param.h,v 1.38.76.1 2009/08/22 06:45:30 matt Exp $	*/
+/*	$NetBSD: param.h,v 1.38.76.2 2010/12/24 07:23:41 matt Exp $	*/
 
 /*
@@ -102,7 +102,7 @@
 #ifndef _LOCORE
 
-void	delay __P((int n));
+void	delay(int n);
 extern	int cpuspeed;
-static __inline void __attribute__((__unused__))
+static __inline void __unused
 DELAY(int n)
 {
Index: /trunk/src/sys/arch/pmax/include/sysconf.h
===================================================================
--- /trunk/src/sys/arch/pmax/include/sysconf.h	(revision 151)
+++ /trunk/src/sys/arch/pmax/include/sysconf.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sysconf.h,v 1.12 2008/01/03 23:02:24 joerg Exp $	*/
+/*	$NetBSD: sysconf.h,v 1.12.28.1 2010/12/24 07:23:41 matt Exp $	*/
 
 /*
@@ -66,10 +66,10 @@
 	 *	tc_init		-	initialize timecounters
 	 */
-	void	(*bus_reset) __P((void));
-	void	(*cons_init) __P((void));
-	void	(*iointr) __P((unsigned, unsigned, unsigned, unsigned));
-	void	(*intr_establish) __P((struct device *, void *, int,
-		    int (*)(void *), void *));
-	int	(*memsize) __P((void *));
+	void	(*bus_reset)(void);
+	void	(*cons_init)(void);
+	void	(*iointr)(uint32_t, vaddr_t, uint32_t);
+	void	(*intr_establish)(device_t, void *, int, int (*)(void *),
+		    void *);
+	int	(*memsize)(void *);
 	void	(*tc_init)(void);
 };
@@ -79,5 +79,5 @@
  */
 struct sysinit {
-	void	(*init) __P((void));
+	void	(*init)(void);
 	const char *option;
 };
@@ -87,11 +87,11 @@
 
 extern struct platform platform;
-extern struct sysinit sysinit[];
-extern int nsysinit;
+extern const struct sysinit sysinit[];
+extern const int nsysinit;
 
-int	memsize_scan __P((void *));
-int	memsize_bitmap __P((void *));
-void	platform_not_configured __P((void));
-void	platform_not_supported __P((void));
+int	memsize_scan(void *);
+int	memsize_bitmap(void *);
+void	platform_not_configured(void);
+void	platform_not_supported(void);
 
 #endif /* _KERNEL */
Index: /trunk/src/sys/arch/pmax/pmax/autoconf.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/autoconf.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/autoconf.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: autoconf.c,v 1.71 2007/12/03 15:34:09 ad Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.71.36.1 2010/12/24 07:23:42 matt Exp $	*/
 
 /*
@@ -78,5 +78,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.71 2007/12/03 15:34:09 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.71.36.1 2010/12/24 07:23:42 matt Exp $");
 
 #include <sys/param.h>
@@ -115,8 +115,4 @@
 	(void)splhigh();
 
-	evcnt_attach_static(&pmax_clock_evcnt);
-	evcnt_attach_static(&pmax_fpu_evcnt);
-	evcnt_attach_static(&pmax_memerr_evcnt);
-
 	if (config_rootfound("mainbus", NULL) == NULL)
 		panic("no mainbus found");
@@ -126,5 +122,5 @@
 
 	/* Configuration is finished, turn on interrupts. */
-	_splnone();	/* enable all source forcing SOFT_INTs cleared */
+	spl0();	/* enable all source forcing SOFT_INTs cleared */
 }
 
Index: /trunk/src/sys/arch/pmax/pmax/bus_dma.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/bus_dma.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/bus_dma.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: bus_dma.c,v 1.49.16.2 2010/02/01 06:09:21 matt Exp $	*/
+/*	$NetBSD: bus_dma.c,v 1.49.16.3 2010/12/24 07:23:42 matt Exp $	*/
 
 /*-
@@ -32,5 +32,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.49.16.2 2010/02/01 06:09:21 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.49.16.3 2010/12/24 07:23:42 matt Exp $");
 
 #include "opt_cputype.h"
@@ -48,9 +48,9 @@
 #include <mips/cache.h>
 
-static int	_bus_dmamap_load_buffer __P((bus_dmamap_t,
+static int	_bus_dmamap_load_buffer(bus_dmamap_t,
 		    void *, bus_size_t, struct vmspace *, int, vaddr_t *,
-		    int *, int));
-
-paddr_t	kvtophys __P((vaddr_t));	/* XXX */
+		    int *, int);
+
+paddr_t	kvtophys(vaddr_t);	/* XXX */
 
 /*
@@ -737,5 +737,5 @@
 		if (curaddr < mips_avail_start || curaddr >= high) {
 			printf("uvm_pglistalloc returned non-sensical"
-			    " address 0x%lx\n", curaddr);
+			    " address 0x%"PRIxVADDR"\n", curaddr);
 			panic("_bus_dmamem_alloc");
 		}
Index: /trunk/src/sys/arch/pmax/pmax/dec_3100.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/dec_3100.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/dec_3100.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: dec_3100.c,v 1.44.36.1 2010/02/01 06:09:21 matt Exp $ */
+/* $NetBSD: dec_3100.c,v 1.44.36.3 2010/12/29 00:20:37 matt Exp $ */
 
 /*
@@ -105,16 +105,19 @@
  */
 
+#define __INTR_PRIVATE
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dec_3100.c,v 1.44.36.1 2010/02/01 06:09:21 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dec_3100.c,v 1.44.36.3 2010/12/29 00:20:37 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/device.h>
-
-#include <machine/cpu.h>
-#include <machine/intr.h>
+#include <sys/cpu.h>
+#include <sys/lwp.h>
+#include <sys/intr.h>
+
 #include <machine/sysconf.h>
 
 #include <mips/mips/mips_mcclock.h>	/* mcclock CPUspeed estimation */
+//#include <mips/locore.h>
 
 #include <dev/tc/tcvar.h>		/* tc_addr_t */
@@ -132,22 +135,25 @@
 #include "pm.h"
 
-void		dec_3100_init __P((void));		/* XXX */
-static void	dec_3100_bus_reset __P((void));
-
-static void	dec_3100_cons_init __P((void));
-static void	dec_3100_errintr __P((void));
-static void	dec_3100_intr __P((unsigned, unsigned, unsigned, unsigned));
-static void	dec_3100_intr_establish __P((struct device *, void *,
-		    int, int (*)(void *), void *));
-
-#define	kn01_wbflush()	mips1_wbflush() /* XXX to be corrected XXX */
-
-static const int dec_3100_ipl2spl_table[] = {
+void		dec_3100_init(void);		/* XXX */
+static void	dec_3100_bus_reset(void);
+
+static void	dec_3100_cons_init(void);
+static void	dec_3100_errintr(void);
+static void	dec_3100_intr(uint32_t, vaddr_t, uint32_t);
+static void	dec_3100_intr_establish(struct device *, void *,
+		    int, int (*)(void *), void *);
+
+#define	kn01_wbflush()	wbflush() /* XXX to be corrected XXX */
+
+static const struct ipl_sr_map dec_3100_ipl_sr_map = {
+    .sr_bits = {
 	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] = _SPL_SOFTCLOCK,
-	[IPL_SOFTSERIAL] = _SPL_SOFTSERIAL,
+	[IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTSERIAL] = MIPS_SOFT_INT_MASK,
 	[IPL_VM] = MIPS_SPL_0_1_2,
-	[IPL_SCHED] = MIPS_SPL_0_1_2_3,
-	[IPL_HIGH] = MIPS_SPL_0_1_2_3,
+	[IPL_SCHED] = MIPS_SPLHIGH,
+	[IPL_DDB] = MIPS_SPLHIGH,
+	[IPL_HIGH] = MIPS_SPLHIGH,
+    }
 };
 
@@ -165,5 +171,5 @@
 	/* no high resolution timer available */
 
-	ipl2spl_table = dec_3100_ipl2spl_table;
+	ipl_sr_map = dec_3100_ipl_sr_map;
 
 	/* calibrate cpu_mhz value */
@@ -226,9 +232,5 @@
 
 static void
-dec_3100_intr(status, cause, pc, ipending)
-	unsigned status;
-	unsigned cause;
-	unsigned pc;
-	unsigned ipending;
+dec_3100_intr(uint32_t status, vaddr_t pc, uint32_t ipending)
 {
 	/* handle clock interrupts ASAP */
@@ -242,11 +244,5 @@
 		hardclock(&cf);
 		pmax_clock_evcnt.ev_count++;
-
-		/* keep clock interrupts enabled when we return */
-		cause &= ~MIPS_INT_MASK_3;
-	}
-
-	/* If clock interrupts were enabled, re-enable them ASAP. */
-	_splset(MIPS_SR_INT_IE | (status & MIPS_INT_MASK_3));
+	}
 
 	CALLINTR(SYS_DEV_SCSI, MIPS_INT_MASK_0);
@@ -258,15 +254,9 @@
 		pmax_memerr_evcnt.ev_count++;
 	}
-	_splset(MIPS_SR_INT_IE | (status & ~cause & MIPS_HARD_INT_MASK));
-}
-
-
-static void
-dec_3100_intr_establish(dev, cookie, level, handler, arg)
-	struct device *dev;
-	void *cookie;
-	int level;
-	int (*handler) __P((void *));
-	void *arg;
+}
+
+static void
+dec_3100_intr_establish(device_t dev, void *cookie, int level,
+	int (*handler)(void *), void *arg)
 {
 
Index: /trunk/src/sys/arch/pmax/pmax/dec_3max.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/dec_3max.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/dec_3max.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: dec_3max.c,v 1.45.36.1 2010/02/01 06:09:21 matt Exp $ */
+/* $NetBSD: dec_3max.c,v 1.45.36.3 2010/12/29 00:20:37 matt Exp $ */
 
 /*
@@ -105,15 +105,19 @@
  */
 
+#define	__INTR_PRIVATE
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: dec_3max.c,v 1.45.36.1 2010/02/01 06:09:21 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dec_3max.c,v 1.45.36.3 2010/12/29 00:20:37 matt Exp $");
+
+#include "dzkbd.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/device.h>
-
-#include <machine/cpu.h>
-#include <machine/bus.h>
-#include <machine/intr.h>
+#include <sys/lwp.h>
+#include <sys/cpu.h>
+#include <sys/bus.h>
+#include <sys/intr.h>
+
 #include <machine/locore.h>
 #include <machine/sysconf.h>
@@ -138,18 +142,21 @@
 static void	dec_3max_cons_init(void);
 static void	dec_3max_errintr(void);
-static void	dec_3max_intr(uint32_t, uint32_t, vaddr_t, uint32_t);
+static void	dec_3max_intr(uint32_t, vaddr_t, uint32_t);
 static void	dec_3max_intr_establish(device_t, void *,
 		    int, int (*)(void *), void *);
 
 
-#define	kn02_wbflush()	mips1_wbflush()	/* XXX to be corrected XXX */
-
-static const int dec_3max_ipl2spl_table[] = {
+#define	kn02_wbflush()	wbflush()	/* XXX to be corrected XXX */
+
+static const struct ipl_sr_map dec_3max_ipl_sr_map = {
+    .sr_bits = {
 	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] = _SPL_SOFTCLOCK,
-	[IPL_SOFTNET] = _SPL_SOFTNET,
+	[IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] = MIPS_SOFT_INT_MASK,
 	[IPL_VM] = MIPS_SPL0,
-	[IPL_SCHED] = MIPS_SPL_0_1,
-	[IPL_HIGH] = MIPS_SPL_0_1,
+	[IPL_SCHED] = MIPS_SPLHIGH,
+	[IPL_DDB] = MIPS_SPLHIGH,
+	[IPL_HIGH] = MIPS_SPLHIGH,
+    },
 };
 
@@ -171,5 +178,5 @@
 	kn02_wbflush();
 
-	ipl2spl_table = dec_3max_ipl2spl_table;
+	ipl_sr_map = dec_3max_ipl_sr_map;
 
 	/* calibrate cpu_mhz value */
@@ -249,23 +256,19 @@
 
 static void
-dec_3max_intr_establish(dev, cookie, level, handler, arg)
-	device_t dev;
-	void *cookie;
-	int level;
-	int (*handler)(void *);
-	void *arg;
+dec_3max_intr_establish(device_t dev, void *cookie, int level,
+	int (*handler)(void *), void *arg)
 {
 	int i;
 	uint32_t csr;
 
-	for (i = 0; i < sizeof(kn02intrs)/sizeof(kn02intrs[0]); i++) {
-		if (kn02intrs[i].cookie == (int)cookie)
+	for (i = 0; i < __arraycount(kn02intrs); i++) {
+		if (kn02intrs[i].cookie == (intptr_t)cookie)
 			goto found;
 	}
-	panic("intr_establish: invalid cookie %d", (int)cookie);
+	panic("intr_establish: invalid cookie %p", cookie);
 
 found:
-	intrtab[(int)cookie].ih_func = handler;
-	intrtab[(int)cookie].ih_arg = arg;
+	intrtab[(intptr_t)cookie].ih_func = handler;
+	intrtab[(intptr_t)cookie].ih_arg = arg;
 
 	csr = *(uint32_t *)MIPS_PHYS_TO_KSEG1(KN02_SYS_CSR) & 0x00ffff00;
@@ -283,7 +286,7 @@
 
 static void
-dec_3max_intr(uint32_t status, uint32_t cause, vaddr_t pc, uint32_t ipending)
-{
-	static int warned = 0;
+dec_3max_intr(uint32_t status, vaddr_t pc, uint32_t ipending)
+{
+	static bool warned = false;
 	uint32_t csr;
 
@@ -294,8 +297,8 @@
 		csr = *(uint32_t *)MIPS_PHYS_TO_KSEG1(KN02_SYS_CSR);
 		if ((csr & KN02_CSR_PSWARN) && !warned) {
-			warned = 1;
+			warned = true;
 			printf("WARNING: power supply is overheating!\n");
 		} else if (warned && !(csr & KN02_CSR_PSWARN)) {
-			warned = 0;
+			warned = false;
 			printf("WARNING: power supply is OK again\n");
 		}
@@ -309,9 +312,5 @@
 
 		/* keep clock interrupts enabled when we return */
-		cause &= ~MIPS_INT_MASK_1;
-	}
-
-	/* If clock interrupts were enabled, re-enable them ASAP. */
-	_splset(MIPS_SR_INT_IE | (status & MIPS_INT_MASK_1));
+	}
 
 	if (ipending & MIPS_INT_MASK_0) {
@@ -339,6 +338,4 @@
 		pmax_memerr_evcnt.ev_count++;
 	}
-
-	_splset(MIPS_SR_INT_IE | (status & ~cause & MIPS_HARD_INT_MASK));
 }
 
@@ -352,5 +349,6 @@
 dec_3max_errintr()
 {
-	uint32_t erradr, errsyn, csr;
+	uint32_t erradr, csr;
+	vaddr_t errsyn;
 
 	/* Fetch error address, ECC chk/syn bits, clear interrupt */
Index: /trunk/src/sys/arch/pmax/pmax/dec_3maxplus.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/dec_3maxplus.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/dec_3maxplus.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: dec_3maxplus.c,v 1.58.28.1 2009/09/08 17:24:09 matt Exp $ */
+/* $NetBSD: dec_3maxplus.c,v 1.58.28.3 2010/12/29 00:20:37 matt Exp $ */
 
 /*
@@ -105,7 +105,8 @@
  */
 
+#define __INTR_PRIVATE
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: dec_3maxplus.c,v 1.58.28.1 2009/09/08 17:24:09 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dec_3maxplus.c,v 1.58.28.3 2010/12/29 00:20:37 matt Exp $");
 
 #include <sys/param.h>
@@ -116,4 +117,5 @@
 #include <machine/cpu.h>
 #include <machine/sysconf.h>
+#include <machine/locore.h>
 
 #include <mips/mips/mips_mcclock.h>	/* mclock CPUspeed estimation */
@@ -133,13 +135,13 @@
 #include "wsdisplay.h"
 
-void		dec_3maxplus_init __P((void));		/* XXX */
-static void	dec_3maxplus_bus_reset __P((void));
-static void	dec_3maxplus_cons_init __P((void));
-static void 	dec_3maxplus_errintr __P((void));
-static void	dec_3maxplus_intr __P((unsigned, unsigned, unsigned, unsigned));
-static void	dec_3maxplus_intr_establish __P((struct device *, void *,
-		    int, int (*)(void *), void *));
-
-static void	kn03_wbflush __P((void));
+void		dec_3maxplus_init(void);		/* XXX */
+static void	dec_3maxplus_bus_reset(void);
+static void	dec_3maxplus_cons_init(void);
+static void 	dec_3maxplus_errintr(void);
+static void	dec_3maxplus_intr(uint32_t, vaddr_t, uint32_t);
+static void	dec_3maxplus_intr_establish(struct device *, void *,
+		    int, int (*)(void *), void *);
+
+static void	kn03_wbflush(void);
 
 static void	dec_3maxplus_tc_init(void);
@@ -151,8 +153,9 @@
 static unsigned latched_cycle_cnt;
 
-static const int dec_3maxplus_ipl2spl_table[] = {
-	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] = _SPL_SOFTCLOCK,
-	[IPL_SOFTNET] = _SPL_SOFTNET,
+static const struct ipl_sr_map dec_3maxplus_ipl_sr_map = {
+    .sr_bits = {
+	[IPL_NONE] =		0,
+	[IPL_SOFTCLOCK] =	MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] =		MIPS_SOFT_INT_MASK,
 	/*
 	 * 3MAX+ IOASIC interrupts come through INT 0, while
@@ -160,7 +163,9 @@
 	 * should block IOASIC activities.
 	 */
-	[IPL_VM] = MIPS_SPL0,
-	[IPL_SCHED] = MIPS_SPL_0_1,
-	[IPL_HIGH] = MIPS_SPL_0_1,
+	[IPL_VM] =		MIPS_SOFT_INT_MASK | MIPS_INT_MASK_0,
+	[IPL_SCHED] =		MIPS_INT_MASK,
+	[IPL_DDB] =		MIPS_INT_MASK,
+	[IPL_HIGH] =		MIPS_INT_MASK,
+    },
 };
 
@@ -185,5 +190,5 @@
 	ioasic_base = MIPS_PHYS_TO_KSEG1(KN03_SYS_ASIC);
 
-	ipl2spl_table = dec_3maxplus_ipl2spl_table;
+	ipl_sr_map = dec_3maxplus_ipl_sr_map;
 
 	/* calibrate cpu_mhz value */
@@ -264,10 +269,6 @@
 
 static void
-dec_3maxplus_intr_establish(dev, cookie, level, handler, arg)
-	struct device *dev;
-	void *cookie;
-	int level;
-	int (*handler) __P((void *));
-	void *arg;
+dec_3maxplus_intr_establish(device_t dev, void *cookie, int level,
+	int (*handler)(void *), void *arg)
 {
 	unsigned mask;
@@ -314,5 +315,5 @@
     do {							\
 	if (can_serve & (bits)) {				\
-		ifound = 1;					\
+		ifound = true;					\
 		intrtab[vvv].ih_count.ev_count++;		\
 		(*intrtab[vvv].ih_func)(intrtab[vvv].ih_arg);	\
@@ -321,75 +322,32 @@
 
 static void
-dec_3maxplus_intr(status, cause, pc, ipending)
-	unsigned status;
-	unsigned cause;
-	unsigned pc;
-	unsigned ipending;
-{
-	static int warned = 0;
-	unsigned old_buscycle;
-
-	if (ipending & MIPS_INT_MASK_4)
-		prom_haltbutton();
-
-	/* handle clock interrupts ASAP */
-	old_buscycle = latched_cycle_cnt;
-	if (ipending & MIPS_INT_MASK_1) {
-		struct clockframe cf;
-
-		__asm volatile("lbu $0,48(%0)" ::
-			"r"(ioasic_base + IOASIC_SLOT_8_START));
-		cf.pc = pc;
-		cf.sr = status;
-		hardclock(&cf);
-		pmax_clock_evcnt.ev_count++;
-		old_buscycle = latched_cycle_cnt - old_buscycle;
-		/* keep clock interrupts enabled when we return */
-		cause &= ~MIPS_INT_MASK_1;
-	}
-
-	/* If clock interrupts were enabled, re-enable them ASAP. */
-	_splset(MIPS_SR_INT_IE | (status & MIPS_INT_MASK_1));
-
-#ifdef notdef
-	/*
-	 * Check for late clock interrupts (allow 10% slop). Be careful
-	 * to do so only after calling hardclock(), due to logging cost.
-	 * Even then, logging dropped ticks just causes more clock
-	 * ticks to be missed.
-	 */
-	if ((ipending & MIPS_INT_MASK_1) && old_buscycle > (tick+49) * 25) {
-		/* XXX need to include <sys/msgbug.h> for msgbufmapped */
-  		if (msgbufmapped && 0)
-			 addlog("kn03: clock intr %d usec late\n",
-				 old_buscycle/25);
-	}
-#endif
-	if (ipending & MIPS_INT_MASK_0) {
-		int ifound;
-		uint32_t imsk, intr, can_serve, xxxintr;
-
-		do {
-			ifound = 0;
-			imsk = *(uint32_t *)(ioasic_base + IOASIC_IMSK);
-			intr = *(uint32_t *)(ioasic_base + IOASIC_INTR);
-			can_serve = intr & imsk;
-
-			CHECKINTR(SYS_DEV_SCC0, IOASIC_INTR_SCC_0);
-			CHECKINTR(SYS_DEV_SCC1, IOASIC_INTR_SCC_1);
-			CHECKINTR(SYS_DEV_LANCE, IOASIC_INTR_LANCE);
-			CHECKINTR(SYS_DEV_SCSI, IOASIC_INTR_SCSI);
-			CHECKINTR(SYS_DEV_OPT2, KN03_INTR_TC_2);
-			CHECKINTR(SYS_DEV_OPT1, KN03_INTR_TC_1);
-			CHECKINTR(SYS_DEV_OPT0, KN03_INTR_TC_0);
-
-			if (warned > 0 && !(can_serve & KN03_INTR_PSWARN)) {
-				printf("%s\n", "Power supply ok now.");
-				warned = 0;
-			}
-			if ((can_serve & KN03_INTR_PSWARN) && (warned < 3)) {
-				warned++;
-				printf("%s\n", "Power supply overheating");
-			}
+dec_3maxplus_ioasic_intr(void)
+{
+	static bool warned = false;
+	bool ifound;
+	uint32_t imsk, intr, can_serve, xxxintr;
+
+	do {
+		ifound = false;
+		imsk = *(uint32_t *)(ioasic_base + IOASIC_IMSK);
+		intr = *(uint32_t *)(ioasic_base + IOASIC_INTR);
+		can_serve = intr & imsk;
+
+		CHECKINTR(SYS_DEV_SCC0, IOASIC_INTR_SCC_0);
+		CHECKINTR(SYS_DEV_SCC1, IOASIC_INTR_SCC_1);
+		CHECKINTR(SYS_DEV_LANCE, IOASIC_INTR_LANCE);
+		CHECKINTR(SYS_DEV_SCSI, IOASIC_INTR_SCSI);
+		CHECKINTR(SYS_DEV_OPT2, KN03_INTR_TC_2);
+		CHECKINTR(SYS_DEV_OPT1, KN03_INTR_TC_1);
+		CHECKINTR(SYS_DEV_OPT0, KN03_INTR_TC_0);
+
+		if (warned && !(can_serve & KN03_INTR_PSWARN)) {
+			printf("%s\n", "Power supply ok now.");
+			warned = false;
+		}
+		if ((can_serve & KN03_INTR_PSWARN) && (warned < 3)) {
+			warned = true;
+			printf("%s\n", "Power supply overheating");
+		}
 
 #define ERRORS	(IOASIC_INTR_SCSI_OVRUN|IOASIC_INTR_SCSI_READ_E|IOASIC_INTR_LANCE_READ_E)
@@ -412,11 +370,51 @@
 	 * non-DMA interrupts from ioctl devices or TC options.
 	 */
-			xxxintr = can_serve & (ERRORS | PTRLOAD);
-			if (xxxintr) {
-				ifound = 1;
-				*(uint32_t *)(ioasic_base + IOASIC_INTR)
-					= intr &~ xxxintr;
-			}
-		} while (ifound);
+		xxxintr = can_serve & (ERRORS | PTRLOAD);
+		if (xxxintr) {
+			ifound = true;
+			*(uint32_t *)(ioasic_base + IOASIC_INTR) = intr &~ xxxintr;
+		}
+	} while (ifound);
+}
+
+static void
+dec_3maxplus_intr(uint32_t status, vaddr_t pc, uint32_t ipending)
+{
+	unsigned old_buscycle;
+
+	if (ipending & MIPS_INT_MASK_4)
+		prom_haltbutton();
+
+	/* handle clock interrupts ASAP */
+	old_buscycle = latched_cycle_cnt;
+	if (ipending & MIPS_INT_MASK_1) {
+		struct clockframe cf;
+
+		__asm volatile("lbu $0,48(%0)" ::
+			"r"(ioasic_base + IOASIC_SLOT_8_START));
+		cf.pc = pc;
+		cf.sr = status;
+		hardclock(&cf);
+		pmax_clock_evcnt.ev_count++;
+		old_buscycle = latched_cycle_cnt - old_buscycle;
+		/* keep clock interrupts enabled when we return */
+	}
+
+#ifdef notdef
+	/*
+	 * Check for late clock interrupts (allow 10% slop). Be careful
+	 * to do so only after calling hardclock(), due to logging cost.
+	 * Even then, logging dropped ticks just causes more clock
+	 * ticks to be missed.
+	 */
+	if ((ipending & MIPS_INT_MASK_1) && old_buscycle > (tick+49) * 25) {
+		/* XXX need to include <sys/msgbug.h> for msgbufmapped */
+		if (msgbufmapped && 0)
+			 addlog("kn03: clock intr %d usec late\n",
+				 old_buscycle/25);
+	}
+#endif
+	if (ipending & MIPS_INT_MASK_0) {
+		dec_3maxplus_ioasic_intr();
 	}
 	if (ipending & MIPS_INT_MASK_3) {
@@ -424,6 +422,4 @@
 		pmax_memerr_evcnt.ev_count++;
 	}
-
-	_splset(MIPS_SR_INT_IE | (status & ~cause & MIPS_HARD_INT_MASK));
 }
 
Index: /trunk/src/sys/arch/pmax/pmax/dec_3min.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/dec_3min.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/dec_3min.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: dec_3min.c,v 1.60.22.2 2010/02/01 06:09:21 matt Exp $ */
+/* $NetBSD: dec_3min.c,v 1.60.22.4 2010/12/29 00:20:37 matt Exp $ */
 
 /*
@@ -105,7 +105,8 @@
  */
 
+#define	__INTR_PRIVATE
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: dec_3min.c,v 1.60.22.2 2010/02/01 06:09:21 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dec_3min.c,v 1.60.22.4 2010/12/29 00:20:37 matt Exp $");
 
 #include <sys/param.h>
@@ -113,7 +114,8 @@
 #include <sys/device.h>
 #include <sys/timetc.h>
-
-#include <machine/cpu.h>
-#include <machine/intr.h>
+#include <sys/lwp.h>
+#include <sys/cpu.h>
+#include <sys/intr.h>
+
 #include <machine/sysconf.h>
 
@@ -134,12 +136,12 @@
 #include "wsdisplay.h"
 
-void		dec_3min_init __P((void));		/* XXX */
-static void	dec_3min_bus_reset __P((void));
-static void	dec_3min_cons_init __P((void));
-static void	dec_3min_intr __P((unsigned, unsigned, unsigned, unsigned));
-static void	dec_3min_intr_establish __P((struct device *, void *,
-		    int, int (*)(void *), void *));
-
-static void	kn02ba_wbflush __P((void));
+void		dec_3min_init(void);		/* XXX */
+static void	dec_3min_bus_reset(void);
+static void	dec_3min_cons_init(void);
+static void	dec_3min_intr(uint32_t, vaddr_t, uint32_t);
+static void	dec_3min_intr_establish(struct device *, void *,
+		    int, int (*)(void *), void *);
+
+static void	kn02ba_wbflush(void);
 
 static void	dec_3min_tc_init(void);
@@ -150,8 +152,9 @@
 static uint32_t kmin_tc3_imask;
 
-static const int dec_3min_ipl2spl_table[] = {
+static const struct ipl_sr_map dec_3min_ipl_sr_map = {
+    .sr_bits = {
 	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] = _SPL_SOFTCLOCK,
-	[IPL_SOFTNET] = _SPL_SOFTNET,
+	[IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] = MIPS_SOFT_INT_MASK,
 	/*
 	 * Since all the motherboard interrupts come through the
@@ -160,7 +163,9 @@
 	 * TURBOchannel option slots, just splhigh().
 	 */
-	[IPL_VM] = MIPS_SPL_0_1_2_3,
-	[IPL_SCHED] = MIPS_SPL_0_1_2_3,
-	[IPL_HIGH] = MIPS_SPL_0_1_2_3,
+	[IPL_VM] = MIPS_SPLHIGH,
+	[IPL_SCHED] = MIPS_SPLHIGH,
+	[IPL_DDB] = MIPS_SPLHIGH,
+	[IPL_HIGH] = MIPS_SPLHIGH,
+    },
 };
 
@@ -182,5 +187,5 @@
 	ioasic_base = MIPS_PHYS_TO_KSEG1(KMIN_SYS_ASIC);
 
-	ipl2spl_table = dec_3min_ipl2spl_table;
+	ipl_sr_map = dec_3min_ipl_sr_map;
 
 	/* enable posting of MIPS_INT_MASK_3 to CAUSE register */
@@ -265,10 +270,6 @@
 
 static void
-dec_3min_intr_establish(dev, cookie, level, handler, arg)
-	struct device *dev;
-	void *cookie;
-	int level;
-	int (*handler) __P((void *));
-	void *arg;
+dec_3min_intr_establish(device_t dev, void *cookie, int level,
+	int (*handler)(void *), void *arg)
 {
 	unsigned mask;
@@ -355,127 +356,117 @@
 
 static void
-dec_3min_intr(status, cause, pc, ipending)
-	unsigned status;
-	unsigned cause;
-	unsigned pc;
-	unsigned ipending;
+dec_3min_intr(uint32_t status, vaddr_t pc, uint32_t ipending)
 {
 	static int user_warned = 0;
-	static int intr_depth = 0;
 	uint32_t old_mask;
 
-	intr_depth++;
 	old_mask = *(uint32_t *)(ioasic_base + IOASIC_IMSK);
 
-	if (ipending & MIPS_INT_MASK_4)
-		prom_haltbutton();
-
-	if (ipending & MIPS_INT_MASK_3) {
-		/* NB: status & MIPS_INT_MASK3 must also be set */
-		/* masked interrupts are still observable */
-		uint32_t intr, imsk, can_serve, turnoff;
-
-		turnoff = 0;
-		intr = *(uint32_t *)(ioasic_base + IOASIC_INTR);
-		imsk = *(uint32_t *)(ioasic_base + IOASIC_IMSK);
-		can_serve = intr & imsk;
-
-		if (intr & IOASIC_INTR_SCSI_PTR_LOAD) {
-			turnoff |= IOASIC_INTR_SCSI_PTR_LOAD;
+	do {
+		if (ipending & MIPS_INT_MASK_4)
+			prom_haltbutton();
+
+		if (ipending & MIPS_INT_MASK_3) {
+			/* NB: status & MIPS_INT_MASK3 must also be set */
+			/* masked interrupts are still observable */
+			uint32_t intr, imsk, can_serve, turnoff;
+
+			turnoff = 0;
+			intr = *(uint32_t *)(ioasic_base + IOASIC_INTR);
+			imsk = *(uint32_t *)(ioasic_base + IOASIC_IMSK);
+			can_serve = intr & imsk;
+
+			if (intr & IOASIC_INTR_SCSI_PTR_LOAD) {
+				turnoff |= IOASIC_INTR_SCSI_PTR_LOAD;
 #ifdef notdef
-			asc_dma_intr();
-#endif
+				asc_dma_intr();
+#endif
+			}
+
+			if (intr & (IOASIC_INTR_SCSI_OVRUN | IOASIC_INTR_SCSI_READ_E))
+				turnoff |= IOASIC_INTR_SCSI_OVRUN | IOASIC_INTR_SCSI_READ_E;
+
+			if (intr & IOASIC_INTR_LANCE_READ_E)
+				turnoff |= IOASIC_INTR_LANCE_READ_E;
+
+			if (turnoff)
+				*(uint32_t *)(ioasic_base + IOASIC_INTR) = ~turnoff;
+
+			if (intr & KMIN_INTR_TIMEOUT) {
+				kn02ba_errintr();
+				pmax_memerr_evcnt.ev_count++;
+			}
+
+			if (intr & KMIN_INTR_CLOCK) {
+				struct clockframe cf;
+
+				__asm volatile("lbu $0,48(%0)" ::
+					"r"(ioasic_base + IOASIC_SLOT_8_START));
+
+				cf.pc = pc;
+				cf.sr = status;
+				hardclock(&cf);
+				pmax_clock_evcnt.ev_count++;
+			}
+
+			/* If clock interrupts were enabled, re-enable them ASAP. */
+			if (old_mask & KMIN_INTR_CLOCK) {
+				/* ioctl interrupt mask to splclock and higher */
+				*(uint32_t *)(ioasic_base + IOASIC_IMSK) =
+				    old_mask &
+					~(KMIN_INTR_SCC_0|KMIN_INTR_SCC_1
+					  |IOASIC_INTR_LANCE|IOASIC_INTR_SCSI);
+				kn02ba_wbflush();
+			}
+
+			if (curcpu()->ci_idepth > 1)
+				 break;
+
+			CHECKINTR(SYS_DEV_SCC0, IOASIC_INTR_SCC_0);
+			CHECKINTR(SYS_DEV_SCC1, IOASIC_INTR_SCC_1);
+
+#ifdef notyet /* untested */
+			/* If tty interrupts were enabled, re-enable them ASAP. */
+			if ((old_mask & (KMIN_INTR_SCC_1|KMIN_INTR_SCC_0)) ==
+			     (KMIN_INTR_SCC_1|KMIN_INTR_SCC_0)) {
+				*imaskp = old_mask &
+				  ~(KMIN_INTR_SCC_0|KMIN_INTR_SCC_1 |
+				  IOASIC_INTR_LANCE|IOASIC_INTR_SCSI);
+				kn02ba_wbflush();
+			}
+
+			/* XXX until we know about SPLs of TC options. */
+			if (curcpu()->ci_idepth > 1)
+				 break;
+#endif
+			CHECKINTR(SYS_DEV_LANCE, IOASIC_INTR_LANCE);
+			CHECKINTR(SYS_DEV_SCSI, IOASIC_INTR_SCSI);
+
+			if (user_warned && ((intr & KMIN_INTR_PSWARN) == 0)) {
+				printf("%s\n", "Power supply ok now.");
+				user_warned = 0;
+			}
+			if ((intr & KMIN_INTR_PSWARN) && (user_warned < 3)) {
+				user_warned++;
+				printf("%s\n", "Power supply overheating");
+			}
 		}
-
-		if (intr & (IOASIC_INTR_SCSI_OVRUN | IOASIC_INTR_SCSI_READ_E))
-			turnoff |= IOASIC_INTR_SCSI_OVRUN | IOASIC_INTR_SCSI_READ_E;
-
-		if (intr & IOASIC_INTR_LANCE_READ_E)
-			turnoff |= IOASIC_INTR_LANCE_READ_E;
-
-		if (turnoff)
-			*(uint32_t *)(ioasic_base + IOASIC_INTR) = ~turnoff;
-
-		if (intr & KMIN_INTR_TIMEOUT) {
-			kn02ba_errintr();
-			pmax_memerr_evcnt.ev_count++;
+		if ((ipending & MIPS_INT_MASK_0) && intrtab[SYS_DEV_OPT0].ih_func) {
+			(*intrtab[SYS_DEV_OPT0].ih_func)(intrtab[SYS_DEV_OPT0].ih_arg);
+			intrtab[SYS_DEV_OPT0].ih_count.ev_count++;
 		}
 
-		if (intr & KMIN_INTR_CLOCK) {
-			struct clockframe cf;
-
-			__asm volatile("lbu $0,48(%0)" ::
-				"r"(ioasic_base + IOASIC_SLOT_8_START));
-
-			cf.pc = pc;
-			cf.sr = status;
-			hardclock(&cf);
-			pmax_clock_evcnt.ev_count++;
+		if ((ipending & MIPS_INT_MASK_1) && intrtab[SYS_DEV_OPT1].ih_func) {
+			(*intrtab[SYS_DEV_OPT1].ih_func)(intrtab[SYS_DEV_OPT1].ih_arg);
+			intrtab[SYS_DEV_OPT1].ih_count.ev_count++;
 		}
-
-		/* If clock interrupts were enabled, re-enable them ASAP. */
-		if (old_mask & KMIN_INTR_CLOCK) {
-			/* ioctl interrupt mask to splclock and higher */
-			*(uint32_t *)(ioasic_base + IOASIC_IMSK)
-				= old_mask &
-					~(KMIN_INTR_SCC_0|KMIN_INTR_SCC_1 |
-					  IOASIC_INTR_LANCE|IOASIC_INTR_SCSI);
-			kn02ba_wbflush();
-			_splset(MIPS_SR_INT_IE | (status & MIPS_INT_MASK_3));
+		if ((ipending & MIPS_INT_MASK_2) && intrtab[SYS_DEV_OPT2].ih_func) {
+			(*intrtab[SYS_DEV_OPT2].ih_func)(intrtab[SYS_DEV_OPT2].ih_arg);
+			intrtab[SYS_DEV_OPT2].ih_count.ev_count++;
 		}
-
-		if (intr_depth > 1)
-			 goto done;
-
-		CHECKINTR(SYS_DEV_SCC0, IOASIC_INTR_SCC_0);
-		CHECKINTR(SYS_DEV_SCC1, IOASIC_INTR_SCC_1);
-
-#ifdef notyet /* untested */
-		/* If tty interrupts were enabled, re-enable them ASAP. */
-		if ((old_mask & (KMIN_INTR_SCC_1|KMIN_INTR_SCC_0)) ==
-		     (KMIN_INTR_SCC_1|KMIN_INTR_SCC_0)) {
-			*imaskp = old_mask &
-			  ~(KMIN_INTR_SCC_0|KMIN_INTR_SCC_1 |
-			  IOASIC_INTR_LANCE|IOASIC_INTR_SCSI);
-			kn02ba_wbflush();
-		}
-
-		/* XXX until we know about SPLs of TC options. */
-		if (intr_depth > 1)
-			 goto done;
-#endif
-		CHECKINTR(SYS_DEV_LANCE, IOASIC_INTR_LANCE);
-		CHECKINTR(SYS_DEV_SCSI, IOASIC_INTR_SCSI);
-
-		if (user_warned && ((intr & KMIN_INTR_PSWARN) == 0)) {
-			printf("%s\n", "Power supply ok now.");
-			user_warned = 0;
-		}
-		if ((intr & KMIN_INTR_PSWARN) && (user_warned < 3)) {
-			user_warned++;
-			printf("%s\n", "Power supply overheating");
-		}
-	}
-	if ((ipending & MIPS_INT_MASK_0) && intrtab[SYS_DEV_OPT0].ih_func) {
-		(*intrtab[SYS_DEV_OPT0].ih_func)(intrtab[SYS_DEV_OPT0].ih_arg);
-		intrtab[SYS_DEV_OPT0].ih_count.ev_count++;
- 	}
-
-	if ((ipending & MIPS_INT_MASK_1) && intrtab[SYS_DEV_OPT1].ih_func) {
-		(*intrtab[SYS_DEV_OPT1].ih_func)(intrtab[SYS_DEV_OPT1].ih_arg);
-		intrtab[SYS_DEV_OPT1].ih_count.ev_count++;
-	}
-	if ((ipending & MIPS_INT_MASK_2) && intrtab[SYS_DEV_OPT2].ih_func) {
-		(*intrtab[SYS_DEV_OPT2].ih_func)(intrtab[SYS_DEV_OPT2].ih_arg);
-		intrtab[SYS_DEV_OPT2].ih_count.ev_count++;
-	}
-
-done:
+	} while (0);
+
 	/* restore entry state */
-	splhigh();
-	intr_depth--;
 	*(uint32_t *)(ioasic_base + IOASIC_IMSK) = old_mask;
-
-	_splset(MIPS_SR_INT_IE | (status & ~cause & MIPS_HARD_INT_MASK));
 }
 
Index: /trunk/src/sys/arch/pmax/pmax/dec_5100.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/dec_5100.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/dec_5100.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: dec_5100.c,v 1.40 2007/12/03 15:34:10 ad Exp $ */
+/* $NetBSD: dec_5100.c,v 1.40.36.2 2010/12/29 00:20:37 matt Exp $ */
 
 /*
@@ -32,13 +32,15 @@
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: dec_5100.c,v 1.40 2007/12/03 15:34:10 ad Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: dec_5100.c,v 1.40.36.2 2010/12/29 00:20:37 matt Exp $");
+
+#define __INTR_PRIVATE
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/device.h>
+#include <sys/cpu.h>
+#include <sys/intr.h>
+#include <sys/lwp.h>
 #include <sys/kernel.h>
 
-#include <machine/cpu.h>
-#include <machine/intr.h>
 #include <machine/locore.h>
 #include <machine/sysconf.h>
@@ -56,19 +58,22 @@
 #include <pmax/pmax/cons.h>
 
-void		dec_5100_init __P((void));		/* XXX */
-static void	dec_5100_bus_reset __P((void));
-static void	dec_5100_cons_init __P((void));
-static void	dec_5100_intr __P((unsigned, unsigned, unsigned, unsigned));
-static void	dec_5100_intr_establish __P((struct device *, void *,
-		    int, int (*)(void *), void *));
-static void	dec_5100_memintr __P((void));
-
-static const int dec_5100_ipl2spl_table[] = {
+void		dec_5100_init(void);		/* XXX */
+static void	dec_5100_bus_reset(void);
+static void	dec_5100_cons_init(void);
+static void	dec_5100_intr(uint32_t, vaddr_t, uint32_t);
+static void	dec_5100_intr_establish(struct device *, void *,
+		    int, int (*)(void *), void *);
+static void	dec_5100_memintr(void);
+
+static const struct ipl_sr_map dec_5100_ipl_sr_map = {
+    .sr_bits = {
 	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] = _SPL_SOFTCLOCK,
-	[IPL_SOFTNET] = _SPL_SOFTNET,
+	[IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] = MIPS_SOFT_INT_MASK,
 	[IPL_VM] = MIPS_SPL_0_1,
-	[IPL_SCHED] = MIPS_SPL_0_1_2,
-	[IPL_HIGH] = MIPS_SPL_0_1_2,
+	[IPL_SCHED] = MIPS_SPLHIGH,
+	[IPL_DDB] = MIPS_SPLHIGH,
+	[IPL_HIGH] = MIPS_SPLHIGH,
+    },
 };
 
@@ -87,5 +92,5 @@
 	mips_set_wbflush(kn230_wbflush);
 
-	ipl2spl_table = dec_5100_ipl2spl_table;
+	ipl_sr_map = dec_5100_ipl_sr_map;
 
 	/* calibrate cpu_mhz value */
@@ -101,10 +106,10 @@
 dec_5100_bus_reset()
 {
-	u_int32_t icsr;
+	uint32_t icsr;
 
 	/* clear any memory error condition */
-	icsr = *(volatile u_int32_t *)MIPS_PHYS_TO_KSEG1(KN230_SYS_ICSR);
+	icsr = *(volatile uint32_t *)MIPS_PHYS_TO_KSEG1(KN230_SYS_ICSR);
 	icsr |= KN230_CSR_INTR_WMERR;
-	*(volatile u_int32_t *)MIPS_PHYS_TO_KSEG1(KN230_SYS_ICSR) = icsr;
+	*(volatile uint32_t *)MIPS_PHYS_TO_KSEG1(KN230_SYS_ICSR) = icsr;
 
 	/* nothing else to do */
@@ -127,10 +132,6 @@
 
 static void
-dec_5100_intr_establish(dev, cookie, level, handler, arg)
-	struct device *dev;
-	void *cookie;
-	int level;
-	int (*handler) __P((void *));
-	void *arg;
+dec_5100_intr_establish(device_t dev, void *cookie, int level,
+	int (*handler)(void *), void *arg)
 {
 
@@ -149,11 +150,7 @@
 
 static void
-dec_5100_intr(status, cause, pc, ipending)
-	unsigned status;
-	unsigned cause;
-	unsigned pc;
-	unsigned ipending;
-{
-	u_int32_t icsr;
+dec_5100_intr(uint32_t status, vaddr_t pc, uint32_t ipending)
+{
+	uint32_t icsr;
 
 	if (ipending & MIPS_INT_MASK_4) {
@@ -165,6 +162,5 @@
 	}
 
-	icsr = *(volatile u_int32_t *)MIPS_PHYS_TO_KSEG1(KN230_SYS_ICSR);
-
+	icsr = *(volatile uint32_t *)MIPS_PHYS_TO_KSEG1(KN230_SYS_ICSR);
 	/* handle clock interrupts ASAP */
 	if (ipending & MIPS_INT_MASK_2) {
@@ -177,11 +173,5 @@
 		hardclock(&cf);
 		pmax_clock_evcnt.ev_count++;
-
-		/* keep clock interrupts enabled when we return */
-		cause &= ~MIPS_INT_MASK_2;
-	}
-
-	/* If clock interrupts were enabled, re-enable them ASAP. */
-	_splset(MIPS_SR_INT_IE | (status & MIPS_INT_MASK_2));
+	}
 
 	if (ipending & MIPS_INT_MASK_0) {
@@ -200,6 +190,4 @@
 		pmax_memerr_evcnt.ev_count++;
 	}
-
-	_splset(MIPS_SR_INT_IE | (status & ~cause & MIPS_HARD_INT_MASK));
 }
 
@@ -215,10 +203,10 @@
 dec_5100_memintr()
 {
-	u_int32_t icsr;
+	uint32_t icsr;
 
 	/* read icsr and clear error  */
-	icsr = *(volatile u_int32_t *)MIPS_PHYS_TO_KSEG1(KN230_SYS_ICSR);
+	icsr = *(volatile uint32_t *)MIPS_PHYS_TO_KSEG1(KN230_SYS_ICSR);
 	icsr |= KN230_CSR_INTR_WMERR;
-	*(volatile u_int32_t *)MIPS_PHYS_TO_KSEG1(KN230_SYS_ICSR) = icsr;
+	*(volatile uint32_t *)MIPS_PHYS_TO_KSEG1(KN230_SYS_ICSR) = icsr;
 	kn230_wbflush();
 
Index: /trunk/src/sys/arch/pmax/pmax/dec_maxine.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/dec_maxine.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/dec_maxine.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: dec_maxine.c,v 1.52.28.2 2010/02/01 06:09:21 matt Exp $ */
+/* $NetBSD: dec_maxine.c,v 1.52.28.4 2010/12/29 00:20:37 matt Exp $ */
 
 /*
@@ -105,7 +105,8 @@
  */
 
+#define __INTR_PRIVATE
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: dec_maxine.c,v 1.52.28.2 2010/02/01 06:09:21 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dec_maxine.c,v 1.52.28.4 2010/12/29 00:20:37 matt Exp $");
 
 #include <sys/param.h>
@@ -113,6 +114,7 @@
 #include <sys/device.h>
 #include <sys/timetc.h>
-
-#include <machine/cpu.h>
+#include <sys/lwp.h>
+#include <sys/cpu.h>
+
 #include <machine/sysconf.h>
 #include <mips/mips/mips_mcclock.h>
@@ -132,14 +134,14 @@
 #include "xcfb.h"
 
-void		dec_maxine_init __P((void));		/* XXX */
-static void	dec_maxine_bus_reset __P((void));
-static void	dec_maxine_cons_init __P((void));
-static void	dec_maxine_intr __P((unsigned, unsigned, unsigned, unsigned));
-static void	dec_maxine_intr_establish __P((struct device *, void *,
-		    int, int (*)(void *), void *));
+void		dec_maxine_init(void);		/* XXX */
+static void	dec_maxine_bus_reset(void);
+static void	dec_maxine_cons_init(void);
+static void	dec_maxine_intr(uint32_t, vaddr_t, uint32_t);
+static void	dec_maxine_intr_establish(struct device *, void *,
+		    int, int (*)(void *), void *);
 
 static void	dec_maxine_tc_init(void);
 
-static void	kn02ca_wbflush __P((void));
+static void	kn02ca_wbflush(void);
 
 /*
@@ -148,8 +150,9 @@
 static uint32_t xine_tc3_imask;
 
-static const int dec_maxine_ipl2spl_table[] = {
-	[IPL_NONE] = 0,
-	[IPL_SOFTCLOCK] = _SPL_SOFTCLOCK,
-	[IPL_SOFTNET] = _SPL_SOFTNET,
+static const struct ipl_sr_map dec_maxine_ipl_sr_map = {
+    .sr_bits = {
+	[IPL_NONE] =		0,
+	[IPL_SOFTCLOCK] =	MIPS_SOFT_INT_MASK_0,
+	[IPL_SOFTNET] =		MIPS_SOFT_INT_MASK,
 	/*
 	 * MAXINE IOASIC interrupts come through INT 3, while
@@ -157,7 +160,9 @@
 	 * should block IOASIC activities.
 	 */
-	[IPL_VM] = MIPS_SPL3,
-	[IPL_SCHED] = MIPS_SPL_0_1_3,
-	[IPL_HIGH] = MIPS_SPL_0_1_3,
+	[IPL_VM] =		MIPS_SOFT_INT_MASK | MIPS_INT_MASK_3,
+	[IPL_SCHED] =		MIPS_INT_MASK,
+	[IPL_DDB] =		MIPS_INT_MASK,
+	[IPL_HIGH] =		MIPS_INT_MASK,
+    },
 };
 
@@ -180,5 +185,5 @@
 	ioasic_base = MIPS_PHYS_TO_KSEG1(XINE_SYS_ASIC);
 
-	ipl2spl_table = dec_maxine_ipl2spl_table;
+	ipl_sr_map = dec_maxine_ipl_sr_map;
  
 	/* calibrate cpu_mhz value */  
@@ -257,10 +262,6 @@
 
 static void
-dec_maxine_intr_establish(dev, cookie, level, handler, arg)
-	struct device *dev;
-	void *cookie;
-	int level;
-	int (*handler) __P((void *));
-	void *arg;
+dec_maxine_intr_establish(device_t dev, void *cookie, int level,
+	int (*handler)(void *), void *arg)
 {
 	unsigned mask;
@@ -311,5 +312,5 @@
     do {							\
 	if (can_serve & (bits)) {				\
-		ifound = 1;					\
+		ifound = true;					\
 		intrtab[vvv].ih_count.ev_count++;		\
 		(*intrtab[vvv].ih_func)(intrtab[vvv].ih_arg);	\
@@ -318,50 +319,25 @@
 
 static void
-dec_maxine_intr(status, cause, pc, ipending)
-	unsigned ipending;
-	unsigned pc;
-	unsigned status;
-	unsigned cause;
-{
-	if (ipending & MIPS_INT_MASK_4)
-		prom_haltbutton();
-
-	/* handle clock interrupts ASAP */
-	if (ipending & MIPS_INT_MASK_1) {
-		struct clockframe cf;
-
-		__asm volatile("lbu $0,48(%0)" ::
-			"r"(ioasic_base + IOASIC_SLOT_8_START));
-		cf.pc = pc;
-		cf.sr = status;
-		hardclock(&cf);
-		pmax_clock_evcnt.ev_count++;
-		/* keep clock interrupts enabled when we return */
-		cause &= ~MIPS_INT_MASK_1;
-	}
-
-	/* If clock interrupts were enabled, re-enable them ASAP. */
-	_splset(MIPS_SR_INT_IE | (status & MIPS_INT_MASK_1));
-
-	if (ipending & MIPS_INT_MASK_3) {
-		int ifound;
-		uint32_t imsk, intr, can_serve, xxxintr;
-
-		do {
-			ifound = 0;
-			intr = *(uint32_t *)(ioasic_base + IOASIC_INTR);
-			imsk = *(uint32_t *)(ioasic_base + IOASIC_IMSK);
-			can_serve = intr & imsk;
-
-			CHECKINTR(SYS_DEV_DTOP, XINE_INTR_DTOP);
-			CHECKINTR(SYS_DEV_SCC0, IOASIC_INTR_SCC_0);
-			CHECKINTR(SYS_DEV_LANCE, IOASIC_INTR_LANCE);
-			CHECKINTR(SYS_DEV_SCSI, IOASIC_INTR_SCSI);
-			/* CHECKINTR(SYS_DEV_OPT2, XINE_INTR_VINT);	*/
-			CHECKINTR(SYS_DEV_ISDN, (IOASIC_INTR_ISDN_TXLOAD | IOASIC_INTR_ISDN_RXLOAD));
-			/* CHECKINTR(SYS_DEV_FDC, IOASIC_INTR_FDC);	*/
-			CHECKINTR(SYS_DEV_OPT1, XINE_INTR_TC_1);
-			CHECKINTR(SYS_DEV_OPT0, XINE_INTR_TC_0);
- 
+dec_maxine_ioasic_intr(void)
+{
+	bool ifound;
+	uint32_t imsk, intr, can_serve, xxxintr;
+
+	do {
+		ifound = false;
+		intr = *(uint32_t *)(ioasic_base + IOASIC_INTR);
+		imsk = *(uint32_t *)(ioasic_base + IOASIC_IMSK);
+		can_serve = intr & imsk;
+
+		CHECKINTR(SYS_DEV_DTOP, XINE_INTR_DTOP);
+		CHECKINTR(SYS_DEV_SCC0, IOASIC_INTR_SCC_0);
+		CHECKINTR(SYS_DEV_LANCE, IOASIC_INTR_LANCE);
+		CHECKINTR(SYS_DEV_SCSI, IOASIC_INTR_SCSI);
+		/* CHECKINTR(SYS_DEV_OPT2, XINE_INTR_VINT);	*/
+		CHECKINTR(SYS_DEV_ISDN, (IOASIC_INTR_ISDN_TXLOAD | IOASIC_INTR_ISDN_RXLOAD));
+		/* CHECKINTR(SYS_DEV_FDC, IOASIC_INTR_FDC);	*/
+		CHECKINTR(SYS_DEV_OPT1, XINE_INTR_TC_1);
+		CHECKINTR(SYS_DEV_OPT0, XINE_INTR_TC_0);
+	 
 #define ERRORS	(IOASIC_INTR_ISDN_OVRUN|IOASIC_INTR_SCSI_OVRUN|IOASIC_INTR_SCSI_READ_E|IOASIC_INTR_LANCE_READ_E)
 #define PTRLOAD (IOASIC_INTR_ISDN_TXLOAD|IOASIC_INTR_ISDN_RXLOAD|IOASIC_INTR_SCSI_PTR_LOAD)
@@ -384,11 +360,34 @@
 	 * non-DMA interrupts from ioctl devices or TC options.
 	 */
-			xxxintr = can_serve & (ERRORS | PTRLOAD);
-			if (xxxintr) {
-				ifound = 1;
-				*(uint32_t *)(ioasic_base + IOASIC_INTR)
-					= intr &~ xxxintr;
-			}
-		} while (ifound);
+		xxxintr = can_serve & (ERRORS | PTRLOAD);
+		if (xxxintr) {
+			ifound = true;
+			*(uint32_t *)(ioasic_base + IOASIC_INTR)
+				= intr &~ xxxintr;
+		}
+	} while (ifound);
+}
+
+static void
+dec_maxine_intr(uint32_t status, vaddr_t pc, uint32_t ipending)
+{
+	if (ipending & MIPS_INT_MASK_4)
+		prom_haltbutton();
+
+	/* handle clock interrupts ASAP */
+	if (ipending & MIPS_INT_MASK_1) {
+		struct clockframe cf;
+
+		__asm volatile("lbu $0,48(%0)" ::
+			"r"(ioasic_base + IOASIC_SLOT_8_START));
+		cf.pc = pc;
+		cf.sr = status;
+		cf.intr = (curcpu()->ci_idepth > 1);
+		hardclock(&cf);
+		pmax_clock_evcnt.ev_count++;
+	}
+
+	if (ipending & MIPS_INT_MASK_3) {
+		dec_maxine_ioasic_intr();
 	}
 	if (ipending & MIPS_INT_MASK_2) {
@@ -396,6 +395,4 @@
 		pmax_memerr_evcnt.ev_count++;
 	}
-
-	_splset(MIPS_SR_INT_IE | (status & ~cause & MIPS_HARD_INT_MASK));
 }
 
@@ -403,5 +400,5 @@
 kn02ca_wbflush()
 {
-	/* read once IOASIC_IMSK */
+/* read once IOASIC_IMSK */
 	__asm volatile("lw $0,%0" ::
 	    "i"(MIPS_PHYS_TO_KSEG1(XINE_REG_IMSK)));
Index: /trunk/src/sys/arch/pmax/pmax/disksubr.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/disksubr.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/disksubr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: disksubr.c,v 1.48 2008/01/02 11:48:27 ad Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.48.24.1 2010/12/24 07:23:42 matt Exp $	*/
 
 /*
@@ -33,5 +33,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.48 2008/01/02 11:48:27 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.48.24.1 2010/12/24 07:23:42 matt Exp $");
 
 #include "opt_compat_ultrix.h"
@@ -48,6 +48,6 @@
 #include <ufs/ffs/fs.h>			/* XXX for BBSIZE & SBSIZE */
 
-const char *compat_label __P((dev_t dev, void (*strat) __P((struct buf *bp)),
-	struct disklabel *lp, struct cpu_disklabel *osdep));	/* XXX */
+const char *compat_label(dev_t dev, void (*strat)(struct buf *bp),
+	struct disklabel *lp, struct cpu_disklabel *osdep);	/* XXX */
 
 #endif
Index: /trunk/src/sys/arch/pmax/pmax/interrupt.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/interrupt.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/interrupt.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: interrupt.c,v 1.15.18.2 2010/02/05 07:39:53 matt Exp $	*/
+/*	$NetBSD: interrupt.c,v 1.15.18.4 2010/12/29 08:18:29 matt Exp $	*/
 
 /*-
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.15.18.2 2010/02/05 07:39:53 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.15.18.4 2010/12/29 08:18:29 matt Exp $");
 
 #include <sys/param.h>
@@ -41,4 +41,6 @@
 
 #include <mips/psl.h>
+#include <mips/locore.h>
+#include <mips/regnum.h>
 
 #include <machine/autoconf.h>
@@ -48,10 +50,13 @@
 struct evcnt pmax_clock_evcnt =
     EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "clock", "intr");
+EVCNT_ATTACH_STATIC(pmax_clock_evcnt);
+#ifndef NOFPU
 struct evcnt pmax_fpu_evcnt =
     EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "fpu", "intr");
+EVCNT_ATTACH_STATIC(pmax_fpu_evcnt);
+#endif
 struct evcnt pmax_memerr_evcnt =
     EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "memerr", "intr");
-
-void MachFPInterrupt(unsigned, unsigned, unsigned, struct trapframe *);
+EVCNT_ATTACH_STATIC(pmax_memerr_evcnt);
 
 static const char * const intrnames[] = {
@@ -82,47 +87,28 @@
  */
 void
-cpu_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+cpu_intr(int ppl, vaddr_t pc, uint32_t status)
 {
-	struct cpu_info *ci;
+	int ipl;
+	uint32_t pending;
 
-	ci = curcpu();
-	ci->ci_idepth++;
 	uvmexp.intrs++;
 
-	/* device interrupts */
-	if (ipending & (MIPS_INT_MASK_0|MIPS_INT_MASK_1|MIPS_INT_MASK_2|
-			MIPS_INT_MASK_3|MIPS_INT_MASK_4)) {
-		(*platform.iointr)(status, cause, pc, ipending);
+	while (ppl < (ipl = splintr(&pending))) {
+		/* device interrupts */
+		if (pending & (MIPS_INT_MASK_0|MIPS_INT_MASK_1|MIPS_INT_MASK_2|
+				MIPS_INT_MASK_3|MIPS_INT_MASK_4)) {
+			(*platform.iointr)(status, pc, pending);
+		}
+#if !defined(NOFPU)
+		/* FPU notification */
+		if (pending & MIPS_INT_MASK_5) {
+			if (!USERMODE(status))
+				panic("kernel used FPU: "
+				    "PC %#"PRIxVADDR", SR %#x", pc, status);
+
+			pmax_fpu_evcnt.ev_count++;
+			mips_fpu_intr(pc, curlwp->l_md.md_utf);
+		}
+#endif
 	}
-#if !defined(NOFPU)
-	/* FPU notification */
-	if (ipending & MIPS_INT_MASK_5) {
-		if (!USERMODE(status))
-			goto kerneltouchedFPU;
-		pmax_fpu_evcnt.ev_count++;
-		MachFPInterrupt(status, cause, pc, curlwp->l_md.md_utf);
-	}
-#endif
-
-	ci->ci_idepth--;
-
-#ifdef __HAVE_FAST_SOFTINTS
-	ipending &= MIPS_SOFT_INT_MASK;
-	if (ipending == 0)
-		return;
-	softint_process(ipending);
-#endif
-
-	return;
-kerneltouchedFPU:
-	panic("kernel used FPU: PC %x, CR %x, SR %x", pc, cause, status);
 }
-
-const int *ipl2spl_table;
-
-ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
-	return (ipl_cookie_t){._spl = ipl2spl_table[ipl]};
-}
Index: /trunk/src/sys/arch/pmax/pmax/locore_machdep.S
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/locore_machdep.S	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/locore_machdep.S	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: locore_machdep.S,v 1.23 2005/12/11 12:18:39 christos Exp $	*/
+/*	$NetBSD: locore_machdep.S,v 1.23.96.1 2010/12/29 00:16:30 matt Exp $	*/
 
 /*
@@ -57,4 +57,5 @@
 #include <mips/cpuregs.h>	/* XXX - misnomer? */
 
+#include "assym.h"
 #include "sii.h"
 #include "opt_dec_5100.h"
@@ -163,2 +164,55 @@
 END(dec_mips1_wbflush)
 #endif	/* defined(DEC_5100) || defined(DEC_5400) */
+
+#ifdef __mips_o32
+NESTED(promcall, 0, ra)
+	sll	t9, a0, 0
+	sll	a0, a1, 0
+	sll	a1, a2, 0
+	sll	a2, a3, 0
+
+	j	t9
+	 nop
+END(promcall)
+#else
+NESTED(promcall, TF_SIZ, ra)
+	PTR_SUBU sp, TF_SIZ
+	REG_S	ra, TF_REG_RA(sp)
+	REG_S	s0, TF_REG_S0(sp)
+	REG_S	s1, TF_REG_S1(sp)
+	REG_S	s2, TF_REG_S2(sp)
+	REG_S	s3, TF_REG_S3(sp)
+	REG_S	s4, TF_REG_S4(sp)
+	REG_S	s5, TF_REG_S5(sp)
+	REG_S	s6, TF_REG_S6(sp)
+	REG_S	s7, TF_REG_S7(sp)
+	REG_S	s8, TF_REG_S8(sp)
+	REG_S	gp, TF_REG_GP(sp)
+
+	sll	t9, a0, 0
+	sll	a0, a1, 0
+	sll	a1, a2, 0
+	sll	a2, a3, 0
+
+	jal	t9
+	 nop
+
+	sll	v0, v0, 0
+
+	REG_L	ra, TF_REG_RA(sp)
+	REG_L	s0, TF_REG_S0(sp)
+	REG_L	s1, TF_REG_S1(sp)
+	REG_L	s2, TF_REG_S2(sp)
+	REG_L	s3, TF_REG_S3(sp)
+	REG_L	s4, TF_REG_S4(sp)
+	REG_L	s5, TF_REG_S5(sp)
+	REG_L	s6, TF_REG_S6(sp)
+	REG_L	s7, TF_REG_S7(sp)
+	REG_L	s8, TF_REG_S8(sp)
+	REG_L	gp, TF_REG_GP(sp)
+
+	PTR_ADDU sp, TF_SIZ
+	j	ra
+	nop
+END(promcall)
+#endif
Index: /trunk/src/sys/arch/pmax/pmax/machdep.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: machdep.c,v 1.223.8.1.2.7 2010/03/21 17:38:34 cliff Exp $	*/
+/*	$NetBSD: machdep.c,v 1.223.8.1.2.9 2010/12/29 00:22:01 matt Exp $	*/
 
 /*
@@ -78,5 +78,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.223.8.1.2.7 2010/03/21 17:38:34 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.223.8.1.2.9 2010/12/29 00:22:01 matt Exp $");
 
 #include "fs_mfs.h"
@@ -162,11 +162,11 @@
 
 /* Motherboard or system-specific initialization vector */
-static void	unimpl_bus_reset __P((void));
-static void	unimpl_cons_init __P((void));
-static void	unimpl_iointr __P((unsigned, unsigned, unsigned, unsigned));
-static void	unimpl_intr_establish __P((struct device *, void *, int,
-		    int (*)(void *), void *));
-static int	unimpl_memsize __P((void *));
-static unsigned	nullwork __P((void));
+static void	unimpl_bus_reset(void);
+static void	unimpl_cons_init(void);
+static void	unimpl_iointr(uint32_t, vaddr_t, uint32_t);
+static void	unimpl_intr_establish(device_t, void *, int,
+		    int (*)(void *), void *);
+static int	unimpl_memsize(void *);
+static unsigned	nullwork(void);
 
 struct platform platform = {
@@ -267,5 +267,4 @@
 		callv = &callvec;
 	}
-	callv = (code == DEC_PROM_MAGIC) ? (void *)cv : &callvec;
 
 	/* Use PROM console output until we initialize a console driver. */
@@ -429,5 +428,5 @@
 
 void
-consinit()
+consinit(void)
 {
 
@@ -440,5 +439,5 @@
  */
 void
-cpu_startup()
+cpu_startup(void)
 {
 	vaddr_t minaddr, maxaddr;
@@ -484,6 +483,5 @@
  */
 void *
-lookup_bootinfo(type)
-	int type;
+lookup_bootinfo(int type)
 {
 	struct btinfo_common *bt;
@@ -506,7 +504,5 @@
 
 void
-cpu_reboot(howto, bootstr)
-	volatile int howto;	/* XXX volatile to keep gcc happy */
-	char *bootstr;
+cpu_reboot(int howto, char *bootstr)
 {
 
@@ -570,6 +566,5 @@
  */
 int
-memsize_scan(first)
-	void *first;
+memsize_scan(void *first)
 {
 	int i, mem;
@@ -616,6 +611,5 @@
  */
 int
-memsize_bitmap(first)
-	void *first;
+memsize_bitmap(void *first)
 {
 	memmap *prom_memmap = (memmap *)first;
@@ -657,5 +651,5 @@
  */
 static void
-unimpl_bus_reset()
+unimpl_bus_reset(void)
 {
 
@@ -664,5 +658,5 @@
 
 static void
-unimpl_cons_init()
+unimpl_cons_init(void)
 {
 
@@ -671,9 +665,5 @@
 
 static void
-unimpl_iointr(mask, pc, statusreg, causereg)
-	u_int mask;
-	u_int pc;
-	u_int statusreg;
-	u_int causereg;
+unimpl_iointr(uint32_t status, vaddr_t pc, uint32_t ipending)
 {
 
@@ -682,10 +672,6 @@
 
 static void
-unimpl_intr_establish(dev, cookie, level, handler, arg)
-	struct device *dev;
-	void *cookie;
-	int level;
-	int (*handler) __P((void *));
-	void *arg;
+unimpl_intr_establish(device_t dev, void *cookie, int level,
+	int (*handler)(void *), void *arg)
 {
 	panic("sysconf.init didn't set intr_establish");
@@ -693,6 +679,5 @@
 
 static int
-unimpl_memsize(first)
-void *first;
+unimpl_memsize(void *first)
 {
 
@@ -701,5 +686,5 @@
 
 static unsigned
-nullwork()
+nullwork(void)
 {
 
@@ -711,6 +696,5 @@
  */
 void
-delay(n)
-        int n;
+delay(int n)
 {
 
Index: /trunk/src/sys/arch/pmax/pmax/promcall.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/promcall.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/promcall.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: promcall.c,v 1.12.76.1 2009/09/16 19:23:18 matt Exp $	*/
+/*	$NetBSD: promcall.c,v 1.12.76.3 2010/12/29 00:16:30 matt Exp $	*/
 
 /*
@@ -78,5 +78,5 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: promcall.c,v 1.12.76.1 2009/09/16 19:23:18 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: promcall.c,v 1.12.76.3 2010/12/29 00:16:30 matt Exp $");
 
 #include <sys/param.h>
@@ -120,5 +120,5 @@
 
 	s  = splhigh();
-	chr = (*callv->_getchar)();
+	chr = promcall(callv->_getchar);
 	splx(s);
 	return chr;
@@ -134,5 +134,5 @@
 
 	s = splhigh();
-	(*callv->_printf)("%c", c);
+	promcall(callv->_printf, "%c", c);
 	splx(s);
 }
@@ -195,5 +195,5 @@
 prom_getenv(const char *name)
 {
-	return (*callv->_getenv)(name);
+	return (void *)promcall(callv->_getenv, name);
 }
 
@@ -208,10 +208,14 @@
 prom_systype(void)
 {
+#ifndef _LP64
 	char *cp;
 
 	if (callv != &callvec)
-		return (*callv->_getsysid)();
+#endif
+		return promcall(callv->_getsysid);
+#ifndef _LP64
 	cp = prom_getenv("systype");
 	return (cp != NULL) ? strtoul(cp, NULL, 0) : 0;
+#endif
 }
 
@@ -222,5 +226,5 @@
 prom_haltbutton(void)
 {
-	(*callv->_halt)((int *)0, 0);
+	promcall(callv->_halt, (int *)0, 0);
 }
 
@@ -232,7 +236,7 @@
 {
 	if (callv != &callvec)
-		(*callv->_rex)((howto & RB_HALT) ? 'h' : 'b');
+		promcall(callv->_rex, (howto & RB_HALT) ? 'h' : 'b');
 	else {
-		void __dead (*f) __P((void));
+		void __dead (*f)(void);
 
 		f = (howto & RB_HALT)
@@ -270,5 +274,5 @@
 
 	if (callv->_getbitmap != NULL)
-		return (callv->_getbitmap(map));
+		return promcall(callv->_getbitmap, map);
 	/*
 	 * See if we can get the bitmap from the environment variables
Index: /trunk/src/sys/arch/pmax/pmax/sysconf.c
===================================================================
--- /trunk/src/sys/arch/pmax/pmax/sysconf.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/pmax/sysconf.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sysconf.c,v 1.10 2005/12/11 12:18:39 christos Exp $	*/
+/*	$NetBSD: sysconf.c,v 1.10.96.1 2010/12/24 07:23:42 matt Exp $	*/
 
 /*
@@ -32,5 +32,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysconf.c,v 1.10 2005/12/11 12:18:39 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysconf.c,v 1.10.96.1 2010/12/24 07:23:42 matt Exp $");
 
 #include <sys/param.h>
@@ -42,5 +42,5 @@
 #include "opt_dec_3100.h"
 #ifdef DEC_3100
-  void	dec_3100_init __P((void));
+  void	dec_3100_init(void);
 #else
 # define dec_3100_init		platform_not_configured
@@ -49,5 +49,5 @@
 #include "opt_dec_3max.h"
 #ifdef DEC_3MAX
-  void	dec_3max_init __P((void));
+  void	dec_3max_init(void);
 #else
 # define dec_3max_init	platform_not_configured
@@ -57,5 +57,5 @@
 #include "opt_dec_3min.h"
 #ifdef DEC_3MIN
-  void	dec_3min_init __P((void));
+  void	dec_3min_init(void);
 #else
 # define dec_3min_init	platform_not_configured
@@ -65,5 +65,5 @@
 #include "opt_dec_maxine.h"
 #ifdef DEC_MAXINE
-  void	dec_maxine_init __P((void));
+  void	dec_maxine_init(void);
 #else
 # define dec_maxine_init	platform_not_configured
@@ -72,5 +72,5 @@
 #include "opt_dec_3maxplus.h"
 #ifdef DEC_3MAXPLUS
-  void	dec_3maxplus_init __P((void));
+  void	dec_3maxplus_init(void);
 #else
 # define dec_3maxplus_init	platform_not_configured
@@ -79,5 +79,5 @@
 #include "opt_dec_5100.h"
 #ifdef DEC_5100
-  void	dec_5100_init __P((void));
+  void	dec_5100_init(void);
 #else
 # define dec_5100_init	platform_not_configured
@@ -86,5 +86,5 @@
 #include "opt_dec_5400.h"
 #ifdef DEC_5400
-  void	dec_5400_init __P((void));
+  void	dec_5400_init(void);
 #else
 # define dec_5400_init	platform_not_configured
@@ -93,5 +93,5 @@
 #include "opt_dec_5500.h"
 #ifdef DEC_5500
-  void	dec_5500_init __P((void));
+  void	dec_5500_init(void);
 #else
 # define dec_5500_init	platform_not_configured
@@ -101,5 +101,5 @@
 #include "opt_dec_5800.h"
 #ifdef DEC_5800
-  void	dec_5800_init __P((void));
+  void	dec_5800_init(void);
 #else
 # define dec_5800_init	platform_not_configured
@@ -107,5 +107,5 @@
 
 
-struct sysinit sysinit[] = {
+const struct sysinit sysinit[] = {
 	sys_notsupp("???"),			     /*	 0: ??? */
 	sys_init(dec_3100_init,"DEC_3100"),	     /*	 1: PMAX */
@@ -122,5 +122,5 @@
 	sys_init(dec_5100_init,"DEC_5100"),	     /*	 12: 5100 */
 };
-int nsysinit = (sizeof(sysinit) / sizeof(sysinit[0]));
+const int nsysinit = __arraycount(sysinit);
 
 
Index: /trunk/src/sys/arch/pmax/tc/tcbus.c
===================================================================
--- /trunk/src/sys/arch/pmax/tc/tcbus.c	(revision 151)
+++ /trunk/src/sys/arch/pmax/tc/tcbus.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: tcbus.c,v 1.21 2008/05/26 10:31:22 nisimura Exp $	*/
+/*	$NetBSD: tcbus.c,v 1.21.16.1 2010/12/29 00:16:30 matt Exp $	*/
 
 /*-
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcbus.c,v 1.21 2008/05/26 10:31:22 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcbus.c,v 1.21.16.1 2010/12/29 00:16:30 matt Exp $");
 
 /*
@@ -193,5 +193,5 @@
 #include <machine/dec_prom.h>
 
-int	tc_checkslot __P((tc_addr_t, char *));
+int	tc_checkslot(tc_addr_t, char *);
 
 struct cnboards {
@@ -230,6 +230,5 @@
 
 int
-tcfb_cnattach(slotno)
-	int slotno;
+tcfb_cnattach(int slotno)
 {
 	paddr_t tcaddr;
@@ -237,13 +236,14 @@
 	int i;
 
-	tcaddr = (*callv->_slot_address)(slotno);
+	tcaddr = promcall(callv->_slot_address, slotno);
 	if (tc_badaddr(tcaddr) || tc_checkslot(tcaddr, tcname) == 0)
 		panic("TC console designated by PROM does not exist!?");
 
-	for (i = 0; i < sizeof(cnboards) / sizeof(cnboards[0]); i++)
+	for (i = 0; i < __arraycount(cnboards); i++) {
 		if (strncmp(tcname, cnboards[i].cb_tcname, TC_ROM_LLEN) == 0)
 			break;
-
-	if (i == sizeof(cnboards) / sizeof(cnboards[0]))
+	}
+
+	if (i == __arraycount(cnboards))
 		return (0);
 
Index: /trunk/src/sys/arch/powerpc/tools/chrpicon/Makefile
===================================================================
--- /trunk/src/sys/arch/powerpc/tools/chrpicon/Makefile	(revision 151)
+++ /trunk/src/sys/arch/powerpc/tools/chrpicon/Makefile	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: Makefile,v 1.1 1999/11/19 00:43:20 lonhyn Exp $
+#	$NetBSD: Makefile,v 1.1.1.1 1999/11/19 00:43:20 lonhyn Exp $
 
 SUBDIR= chrpicontoppm ppmtochrpicon
Index: /trunk/src/sys/arch/powerpc/tools/chrpicon/README
===================================================================
--- /trunk/src/sys/arch/powerpc/tools/chrpicon/README	(revision 151)
+++ /trunk/src/sys/arch/powerpc/tools/chrpicon/README	(revision 152)
@@ -1,4 +1,4 @@
 
-$NetBSD: README,v 1.1 1999/11/19 00:43:20 lonhyn Exp $
+$NetBSD: README,v 1.1.1.1 1999/11/19 00:43:20 lonhyn Exp $
 
 Routines for converting back and forth between CHRP boot icons
Index: /trunk/src/sys/arch/sbmips/conf/GENERIC
===================================================================
--- /trunk/src/sys/arch/sbmips/conf/GENERIC	(revision 151)
+++ /trunk/src/sys/arch/sbmips/conf/GENERIC	(revision 152)
@@ -1,3 +1,3 @@
-# $NetBSD: GENERIC,v 1.70.8.5 2010/05/14 23:16:08 cliff Exp $
+# $NetBSD: GENERIC,v 1.70.8.6 2011/04/29 09:21:46 matt Exp $
 
 include 	"arch/sbmips/conf/std.sbmips"
@@ -5,5 +5,5 @@
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"GENERIC-$Revision: 1.70.8.5 $"
+#ident 		"GENERIC-$Revision: 1.70.8.6 $"
 
 #options 	LOCKDEBUG	# XXX XXX XXX XXX
@@ -36,5 +36,5 @@
 options 	DDB_HISTORY_SIZE=100 # enable history editing in DDB
 makeoptions 	DEBUG="-g"	# compile full symbol table
-options 	SYMTAB_SPACE=380000	# size for embedded symbol table
+options 	SYMTAB_SPACE=400000	# size for embedded symbol table
 
 # Compatibility options
Index: /trunk/src/sys/arch/sbmips/include/cpuvar.h
===================================================================
--- /trunk/src/sys/arch/sbmips/include/cpuvar.h	(revision 151)
+++ /trunk/src/sys/arch/sbmips/include/cpuvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: cpuvar.h,v 1.1.2.1 2010/03/11 22:26:56 matt Exp $ */
+/* $NetBSD: cpuvar.h,v 1.1.2.2 2010/12/29 08:19:58 matt Exp $ */
 
 #ifndef _SBMIPS_CPUVAR_H_
@@ -13,4 +13,7 @@
 	uint64_t sb1cpu_imr_all;
 	struct evcnt sb1cpu_intr_evcnts[64];
+	struct evcnt sb1cpu_spurious_intrs[_IPL_N];
+	struct evcnt sb1cpu_intrs[_IPL_N];
+	struct evcnt sb1cpu_int5;
 };
 #endif /* _LOCORE */
Index: /trunk/src/sys/arch/sbmips/include/systemsw.h
===================================================================
--- /trunk/src/sys/arch/sbmips/include/systemsw.h	(revision 151)
+++ /trunk/src/sys/arch/sbmips/include/systemsw.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: systemsw.h,v 1.7.28.5 2010/03/11 08:20:59 matt Exp $ */
+/* $NetBSD: systemsw.h,v 1.7.28.6 2010/06/10 17:40:20 cliff Exp $ */
 
 /*
@@ -59,4 +59,5 @@
 struct cpu_softc;
 void	sb1250_cpu_init(struct cpu_softc *);
+void	sb1250_ipl_map_init(void);
 
 #define	cpu_intr_establish(n,s,f,a)	((*systemsw.s_intr_establish)(n,s,f,a))
Index: /trunk/src/sys/arch/sbmips/sbmips/cpu.c
===================================================================
--- /trunk/src/sys/arch/sbmips/sbmips/cpu.c	(revision 151)
+++ /trunk/src/sys/arch/sbmips/sbmips/cpu.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: cpu.c,v 1.18.16.8 2010/05/11 21:08:51 matt Exp $ */
+/* $NetBSD: cpu.c,v 1.18.16.9 2010/09/01 01:07:26 matt Exp $ */
 
 /*
@@ -34,5 +34,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.18.16.8 2010/05/11 21:08:51 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.18.16.9 2010/09/01 01:07:26 matt Exp $");
 
 #include "opt_multiprocessor.h"
@@ -135,5 +135,5 @@
 #if defined(MULTIPROCESSOR)
 		int status;
-		ci = cpu_info_alloc(NULL, found - 1);
+		ci = cpu_info_alloc(NULL, found - 1, 0, found - 1, 0);
 		KASSERT(ci);
 
Index: /trunk/src/sys/arch/sbmips/sbmips/machdep.c
===================================================================
--- /trunk/src/sys/arch/sbmips/sbmips/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/sbmips/sbmips/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: machdep.c,v 1.38.10.8 2010/03/21 17:38:35 cliff Exp $ */
+/* $NetBSD: machdep.c,v 1.38.10.10 2011/04/29 08:26:35 matt Exp $ */
 
 /*
@@ -59,5 +59,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.38.10.8 2010/03/21 17:38:35 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.38.10.10 2011/04/29 08:26:35 matt Exp $");
 
 #include "opt_ddb.h"
@@ -102,4 +102,6 @@
 #include <machine/leds.h>
 
+#include <mips/sibyte/dev/sbbuswatchvar.h>
+
 #include "ksyms.h"
 
@@ -143,10 +145,4 @@
 void	configure(void);
 void	mach_init(long, long, long, long);
-
-/*
- * safepri is a safe priority for sleep to set for a spin-wait during
- * autoconfiguration or after a panic.  Used as an argument to splx().
- */
-int	safepri = MIPS_INT_MASK | MIPS_SR_INT_IE;
 
 extern void *esym;
@@ -218,5 +214,13 @@
 	 * Clear out the I and D caches.
 	 */
-	mips_vector_init(NULL);
+#ifdef MULTIPROCESSOR
+	mips_vector_init(NULL, true);
+#else
+	mips_vector_init(NULL, false);
+#endif
+
+	mips_locoresw.lsw_bus_error = sibyte_bus_watch_check;
+
+	sb1250_ipl_map_init();
 
 #ifdef DEBUG
@@ -370,5 +374,5 @@
 
 	/* Take a snapshot before clobbering any registers. */
-	savectx(curlwp->l_addr);
+	savectx(lwp_getpcb(curlwp));
 
 	if (cold) {
Index: /trunk/src/sys/arch/sbmips/sbmips/sb1250_icu.c
===================================================================
--- /trunk/src/sys/arch/sbmips/sbmips/sb1250_icu.c	(revision 151)
+++ /trunk/src/sys/arch/sbmips/sbmips/sb1250_icu.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: sb1250_icu.c,v 1.9.36.14 2010/05/16 00:34:45 matt Exp $ */
+/* $NetBSD: sb1250_icu.c,v 1.9.36.15 2010/06/10 17:40:20 cliff Exp $ */
 
 /*
@@ -34,5 +34,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sb1250_icu.c,v 1.9.36.14 2010/05/16 00:34:45 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sb1250_icu.c,v 1.9.36.15 2010/06/10 17:40:20 cliff Exp $");
 
 #define	__INTR_PRIVATE
@@ -239,9 +239,15 @@
 
 void
+sb1250_ipl_map_init(void)
+{
+	ipl_sr_map = sb1250_ipl_sr_map;
+}
+
+void
 sb1250_icu_init(void)
 {
 	const uint64_t imr_all = 0xffffffffffffffffULL;
 
-	ipl_sr_map = sb1250_ipl_sr_map;
+	KASSERT(memcmp((const void *)&ipl_sr_map, (const void *)&sb1250_ipl_sr_map, sizeof(ipl_sr_map)) == 0);
 
 	/* zero out the list of used interrupts/lines */
Index: /trunk/src/sys/arch/sgimips/conf/GENERIC32_IP2x
===================================================================
--- /trunk/src/sys/arch/sgimips/conf/GENERIC32_IP2x	(revision 151)
+++ /trunk/src/sys/arch/sgimips/conf/GENERIC32_IP2x	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: GENERIC32_IP2x,v 1.75 2008/08/15 15:17:18 tsutsui Exp $
+#	$NetBSD: GENERIC32_IP2x,v 1.75.8.1 2010/12/29 07:19:27 matt Exp $
 #
 # GENERIC32_IP2x machine description file
@@ -30,5 +30,5 @@
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident		"GENERIC32-IP2x-$Revision: 1.75 $"
+#ident		"GENERIC32-IP2x-$Revision: 1.75.8.1 $"
 
 maxusers	32
@@ -246,4 +246,5 @@
 dsclock*	at hpc0 offset ?	# IP22 / 24
 haltwo*         at hpc0 offset ?	# IP22 / 24
+panel*		at hpc0 offset ?	# front panel buttons on Indy
 pckbc*		at hpc0 offset ?
 
Index: /trunk/src/sys/arch/sgimips/conf/majors.sgimips
===================================================================
--- /trunk/src/sys/arch/sgimips/conf/majors.sgimips	(revision 151)
+++ /trunk/src/sys/arch/sgimips/conf/majors.sgimips	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: majors.sgimips,v 1.20 2007/12/31 15:32:05 ad Exp $
+#	$NetBSD: majors.sgimips,v 1.20.24.1 2010/12/29 07:19:27 matt Exp $
 #
 # Device majors for sgimips
@@ -68,5 +68,5 @@
 device-major	ksyms		char 77			ksyms
 device-major	lpt		char 78			lpt
-
+device-major    sysmon          char 79                 sysmon_envsys | sysmon_wdog
 device-major	nsmb		char 98			nsmb
 
Index: /trunk/src/sys/arch/sgimips/dev/crime.c
===================================================================
--- /trunk/src/sys/arch/sgimips/dev/crime.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/dev/crime.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: crime.c,v 1.33.12.1 2010/01/20 09:04:31 matt Exp $	*/
+/*	$NetBSD: crime.c,v 1.33.12.2 2010/12/29 07:15:47 matt Exp $	*/
 
 /*
@@ -39,5 +39,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: crime.c,v 1.33.12.1 2010/01/20 09:04:31 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: crime.c,v 1.33.12.2 2010/12/29 07:15:47 matt Exp $");
 
 #include <sys/param.h>
@@ -67,5 +67,5 @@
 void		crime_watchdog_reset(void);
 void		crime_watchdog_disable(void);
-void		crime_intr(uint32_t, uint32_t, uint32_t, uint32_t);
+void		crime_intr(vaddr_t, uint32_t, uint32_t);
 void		*crime_intr_establish(int, int, int (*)(void *), void *);
 
@@ -210,5 +210,5 @@
 
 void
-crime_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+crime_intr(vaddr_t pc, uint32_t status, uint32_t ipending)
 {
 	uint64_t crime_intmask;
Index: /trunk/src/sys/arch/sgimips/dev/imc.c
===================================================================
--- /trunk/src/sys/arch/sgimips/dev/imc.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/dev/imc.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: imc.c,v 1.29 2008/08/23 17:25:54 tsutsui Exp $	*/
+/*	$NetBSD: imc.c,v 1.29.12.1 2010/12/29 07:15:47 matt Exp $	*/
 
 /*
@@ -29,5 +29,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: imc.c,v 1.29 2008/08/23 17:25:54 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: imc.c,v 1.29.12.1 2010/12/29 07:15:47 matt Exp $");
 
 #include <sys/param.h>
@@ -62,5 +62,5 @@
 static int	imc_print(void *, const char *);
 static void	imc_bus_reset(void);
-static void	imc_bus_error(uint32_t, uint32_t, uint32_t, uint32_t);
+static void	imc_bus_error(vaddr_t, uint32_t, uint32_t);
 static void	imc_watchdog_reset(void);
 static void	imc_watchdog_disable(void);
@@ -264,5 +264,5 @@
 
 static void
-imc_bus_error(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+imc_bus_error(vaddr_t pc, uint32_t status, uint32_t ipending)
 {
 
Index: /trunk/src/sys/arch/sgimips/dev/int.c
===================================================================
--- /trunk/src/sys/arch/sgimips/dev/int.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/dev/int.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: int.c,v 1.19.12.1 2009/09/10 01:51:31 matt Exp $	*/
+/*	$NetBSD: int.c,v 1.19.12.2 2010/12/29 07:15:47 matt Exp $	*/
 
 /*
@@ -33,6 +33,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: int.c,v 1.19.12.1 2009/09/10 01:51:31 matt Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: int.c,v 1.19.12.2 2010/12/29 07:15:47 matt Exp $");
+
+#define __INTR_PRIVATE
 #include "opt_cputype.h"
 
@@ -66,12 +67,12 @@
 static int	int_match(struct device *, struct cfdata *, void *);
 static void	int_attach(struct device *, struct device *, void *);
-static void 	int_local0_intr(uint32_t, uint32_t, uint32_t, uint32_t);
-static void	int_local1_intr(uint32_t, uint32_t, uint32_t, uint32_t);
+static void 	int_local0_intr(vaddr_t, uint32_t, uint32_t);
+static void	int_local1_intr(vaddr_t, uint32_t, uint32_t);
 static int 	int_mappable_intr(void *);
 static void    *int_intr_establish(int, int, int (*)(void *), void *);
 static void	int_8254_cal(void);
 static u_int	int_8254_get_timecount(struct timecounter *);
-static void	int_8254_intr0(uint32_t, uint32_t, uint32_t, uint32_t);
-static void	int_8254_intr1(uint32_t, uint32_t, uint32_t, uint32_t);
+static void	int_8254_intr0(vaddr_t, uint32_t, uint32_t);
+static void	int_8254_intr1(vaddr_t, uint32_t, uint32_t);
 
 #ifdef MIPS3
@@ -235,5 +236,5 @@
 
 void
-int_local0_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+int_local0_intr(vaddr_t pc, uint32_t status, uint32_t ipending)
 {
 	int i;
@@ -261,5 +262,5 @@
 
 void
-int_local1_intr(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+int_local1_intr(vaddr_t pc, uint32_t status, uint32_t ipending)
 {
 	int i;
@@ -459,5 +460,5 @@
 
 static void
-int_8254_intr0(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+int_8254_intr0(vaddr_t pc, uint32_t status, uint32_t ipending)
 {
 	struct clockframe cf;
@@ -473,5 +474,5 @@
 
 static void
-int_8254_intr1(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+int_8254_intr1(vaddr_t pc, uint32_t status, uint32_t ipending)
 {
 	int s;
Index: /trunk/src/sys/arch/sgimips/dev/pic.c
===================================================================
--- /trunk/src/sys/arch/sgimips/dev/pic.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/dev/pic.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: pic.c,v 1.13 2008/08/23 17:25:54 tsutsui Exp $	 */
+/*	$NetBSD: pic.c,v 1.13.12.1 2010/12/29 07:15:47 matt Exp $	 */
 
 /*
@@ -29,5 +29,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.13 2008/08/23 17:25:54 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.13.12.1 2010/12/29 07:15:47 matt Exp $");
 
 #include <sys/param.h>
@@ -60,5 +60,5 @@
 static int      pic_print(void *, const char *);
 static void	pic_bus_reset(void);
-static void	pic_bus_error(uint32_t, uint32_t, uint32_t, uint32_t);
+static void	pic_bus_error(vaddr_t, uint32_t, uint32_t);
 static void	pic_watchdog_enable(void);
 static void	pic_watchdog_disable(void);
@@ -213,5 +213,5 @@
 
 static void
-pic_bus_error(uint32_t status, uint32_t cause, uint32_t pc, uint32_t ipending)
+pic_bus_error(vaddr_t pc, uint32_t status, uint32_t ipending)
 {
 
Index: /trunk/src/sys/arch/sgimips/gio/files.gio
===================================================================
--- /trunk/src/sys/arch/sgimips/gio/files.gio	(revision 151)
+++ /trunk/src/sys/arch/sgimips/gio/files.gio	(revision 152)
@@ -1,3 +1,3 @@
-# $NetBSD: files.gio,v 1.9 2006/12/29 00:42:01 rumble Exp $
+# $NetBSD: files.gio,v 1.9.66.1 2010/12/29 07:19:28 matt Exp $
 
 device	gio {[slot = -1], [addr = -1]}
@@ -13,5 +13,5 @@
 
 # XL graphics
-device	newport: wsemuldisplaydev
+device	newport: wsemuldisplaydev, vcons, rasops8
 attach	newport at gio
 file	arch/sgimips/gio/newport.c	newport needs-flag
Index: /trunk/src/sys/arch/sgimips/gio/newport.c
===================================================================
--- /trunk/src/sys/arch/sgimips/gio/newport.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/gio/newport.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: newport.c,v 1.10 2007/03/04 06:00:39 christos Exp $	*/
+/*	$NetBSD: newport.c,v 1.10.62.1 2010/12/29 07:19:28 matt Exp $	*/
 
 /*
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: newport.c,v 1.10 2007/03/04 06:00:39 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: newport.c,v 1.10.62.1 2010/12/29 07:19:28 matt Exp $");
 
 #include <sys/param.h>
@@ -43,4 +43,6 @@
 #include <dev/wscons/wsdisplayvar.h>
 #include <dev/wsfont/wsfont.h>
+#include <dev/rasops/rasops.h>
+#include <dev/wscons/wsdisplay_vconsvar.h>
 
 #include <sgimips/gio/giovar.h>
@@ -49,7 +51,8 @@
 
 struct newport_softc {
-	struct device sc_dev;
+	device_t sc_dev;
 
 	struct newport_devconfig *sc_dc;
+	
 };
 
@@ -70,15 +73,19 @@
 
 	int			dc_font;
+	struct wsscreen_descr	*dc_screen;
 	struct wsdisplay_font	*dc_fontdata;
+	int			dc_mode;
+	struct vcons_data	dc_vd;
 };
 
-static int  newport_match(struct device *, struct cfdata *, void *);
-static void newport_attach(struct device *, struct device *, void *);
-
-CFATTACH_DECL(newport, sizeof(struct newport_softc),
+static int  newport_match(device_t, struct cfdata *, void *);
+static void newport_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(newport, sizeof(struct newport_softc),
     newport_match, newport_attach, NULL, NULL);
 
 /* textops */
 static void newport_cursor(void *, int, int, int);
+static void newport_cursor_dummy(void *, int, int, int);
 static int  newport_mapchar(void *, int, unsigned int *);
 static void newport_putchar(void *, int, int, u_int, long);
@@ -89,16 +96,18 @@
 static int  newport_allocattr(void *, int, int, int, long *);
 
+static void newport_init_screen(void *, struct vcons_screen *, int, long *);
+
 /* accessops */
 static int     newport_ioctl(void *, void *, u_long, void *, int,
     struct lwp *);
 static paddr_t newport_mmap(void *, void *, off_t, int);
-static int     newport_alloc_screen(void *, const struct wsscreen_descr *,
-    void **, int *, int *, long *);
-static void    newport_free_screen(void *, void *);
-static int     newport_show_screen(void *, void *, int,
-    void (*)(void *, int, int), void *);
-
-static const struct wsdisplay_emulops newport_textops = {
-	.cursor		= newport_cursor,
+
+static struct wsdisplay_accessops newport_accessops = {
+	.ioctl		= newport_ioctl,
+	.mmap		= newport_mmap,
+};
+
+static struct wsdisplay_emulops newport_textops = {
+	.cursor		= newport_cursor_dummy,
 	.mapchar	= newport_mapchar,
 	.putchar	= newport_putchar,
@@ -110,24 +119,6 @@
 };
 
-static const struct wsdisplay_accessops newport_accessops = {
-	.ioctl		= newport_ioctl,
-	.mmap		= newport_mmap,
-	.alloc_screen	= newport_alloc_screen,
-	.free_screen	= newport_free_screen,
-	.show_screen	= newport_show_screen,
-};
-
-static const struct wsscreen_descr newport_screen_1024x768 = {
-	.name		= "1024x768",
-	.ncols		= 128,
-	.nrows		= 48,
-	.textops	= &newport_textops,
-	.fontwidth	= 8,
-	.fontheight	= 16,
-	.capabilities	= WSSCREEN_WSCOLORS | WSSCREEN_HILIT | WSSCREEN_REVERSE
-};
-
-static const struct wsscreen_descr newport_screen_1280x1024 = {
-	.name		= "1280x1024",
+static struct wsscreen_descr newport_screen = {
+	.name		= "default",
 	.ncols		= 160,
 	.nrows		= 64,
@@ -139,6 +130,5 @@
 
 static const struct wsscreen_descr *_newport_screenlist[] = {
-	&newport_screen_1024x768,
-	&newport_screen_1280x1024
+	&newport_screen
 };
 
@@ -148,4 +138,5 @@
 };
 
+static struct vcons_screen newport_console_screen;
 static struct newport_devconfig newport_console_dc;
 static int newport_is_console = 0;
@@ -155,95 +146,5 @@
 #define NEWPORT_ATTR_FG(a)		(((a) >> 8) & 0xff)
 
-static const uint16_t newport_cursor_data[128] = {
-	/* Bit 0 */
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0xff00, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-
-	/* Bit 1 */
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-	0x0000, 0x0000,
-};
-
-static const uint8_t newport_defcmap[16*3] = {
-	/* Normal colors */
-	0x00, 0x00, 0x00, /* black */
-	0x7f, 0x00, 0x00, /* red */
-	0x00, 0x7f, 0x00, /* green */
-	0x7f, 0x7f, 0x00, /* brown */
-	0x00, 0x00, 0x7f, /* blue */
-	0x7f, 0x00, 0x7f, /* magenta */
-	0x00, 0x7f, 0x7f, /* cyan */
-	0xc7, 0xc7, 0xc7, /* white - XXX too dim? */
-
-	/* Hilite colors */
-	0x7f, 0x7f, 0x7f, /* black */
-	0xff, 0x00, 0x00, /* red */
-	0x00, 0xff, 0x00, /* green */
-	0xff, 0xff, 0x00, /* brown */
-	0x00, 0x00, 0xff, /* blue */
-	0xff, 0x00, 0xff, /* magenta */
-	0x00, 0xff, 0xff, /* cyan */
-	0xff, 0xff, 0xff, /* white */
-};
+extern const u_char rasops_cmap[768];
 
 /**** Low-level hardware register groveling functions ****/
@@ -328,4 +229,5 @@
 }
 
+#if 0
 static void
 vc2_write_ram(struct newport_devconfig *dc, uint16_t addr, uint16_t val)
@@ -342,4 +244,5 @@
 	rex3_write(dc, REX3_REG_DCBDATA0, val << 16);
 }
+#endif
 
 static u_int32_t
@@ -394,155 +297,4 @@
 	    REX3_DRAWMODE0_ADRMODE_BLOCK | REX3_DRAWMODE0_DOSETUP |
 	    REX3_DRAWMODE0_STOPONX | REX3_DRAWMODE0_STOPONY);
-	rex3_write(dc, REX3_REG_WRMASK, 0xffffffff);
-	rex3_write(dc, REX3_REG_COLORI, color);
-	rex3_write(dc, REX3_REG_XYSTARTI, (x1 << REX3_XYSTARTI_XSHIFT) | y1);
-
-	rex3_write_go(dc, REX3_REG_XYENDI, (x2 << REX3_XYENDI_XSHIFT) | y2);
-}
-
-static void
-newport_copy_rectangle(struct newport_devconfig *dc, int x1, int y1, int x2,
-    int y2, int dx, int dy)
-{
-	uint32_t tmp;
-
-	rex3_wait_gfifo(dc);
-	
-	rex3_write(dc, REX3_REG_DRAWMODE0, REX3_DRAWMODE0_OPCODE_SCR2SCR |
-	    REX3_DRAWMODE0_ADRMODE_BLOCK | REX3_DRAWMODE0_DOSETUP |
-	    REX3_DRAWMODE0_STOPONX | REX3_DRAWMODE0_STOPONY);
-	rex3_write(dc, REX3_REG_XYSTARTI, (x1 << REX3_XYSTARTI_XSHIFT) | y1);
-	rex3_write(dc, REX3_REG_XYENDI, (x2 << REX3_XYENDI_XSHIFT) | y2);
-
-	tmp = (dy - y1) & 0xffff;
-	tmp |= (dx - x1) << REX3_XYMOVE_XSHIFT;
-
-	rex3_write_go(dc, REX3_REG_XYMOVE, tmp);
-}
-
-static void
-newport_cmap_setrgb(struct newport_devconfig *dc, int index, uint8_t r,
-    uint8_t g, uint8_t b)
-{
-	rex3_write(dc, REX3_REG_DCBMODE,
-	    REX3_DCBMODE_DW_2 |
-	    REX3_DCBMODE_ENCRSINC |
-	    (NEWPORT_DCBADDR_CMAP_BOTH << REX3_DCBMODE_DCBADDR_SHIFT) |
-	    (CMAP_DCBCRS_ADDRESS_LOW << REX3_DCBMODE_DCBCRS_SHIFT) |
-	    (1 << REX3_DCBMODE_CSWIDTH_SHIFT) |
-	    (1 << REX3_DCBMODE_CSHOLD_SHIFT) |
-	    (1 << REX3_DCBMODE_CSSETUP_SHIFT) |
-	    REX3_DCBMODE_SWAPENDIAN);
-
-	rex3_write(dc, REX3_REG_DCBDATA0, index << 16);
-
-	rex3_write(dc, REX3_REG_DCBMODE,
-	    REX3_DCBMODE_DW_3 |
-	    (NEWPORT_DCBADDR_CMAP_BOTH << REX3_DCBMODE_DCBADDR_SHIFT) |
-	    (CMAP_DCBCRS_PALETTE << REX3_DCBMODE_DCBCRS_SHIFT) |
-	    (1 << REX3_DCBMODE_CSWIDTH_SHIFT) |
-	    (1 << REX3_DCBMODE_CSHOLD_SHIFT) |
-	    (1 << REX3_DCBMODE_CSSETUP_SHIFT));
-
-	rex3_write(dc, REX3_REG_DCBDATA0, (r << 24) + (g << 16) + (b << 8));
-}
-
-static void
-newport_get_resolution(struct newport_devconfig *dc)
-{
-	uint16_t vep,lines;
-	uint16_t linep,cols;
-	uint16_t data;
-
-	vep = vc2_read_ireg(dc, VC2_IREG_VIDEO_ENTRY);
-
-	dc->dc_xres = 0;
-	dc->dc_yres = 0;
-
-	for (;;) {
-		/* Iterate over runs in video timing table */
-
-		cols = 0;
-
-		linep = vc2_read_ram(dc, vep++);
-		lines = vc2_read_ram(dc, vep++);
-
-		if (lines == 0)
-			break;
-
-		do {
-			/* Iterate over state runs in line sequence table */
-		
-			data = vc2_read_ram(dc, linep++);
-
-			if ((data & 0x0001) == 0)
-				cols += (data >> 7) & 0xfe;
-
-			if ((data & 0x0080) == 0)
-				data = vc2_read_ram(dc, linep++);
-		} while ((data & 0x8000) == 0);
-
-		if (cols != 0) {
-			if (cols > dc->dc_xres)
-				dc->dc_xres = cols;
-
-			dc->dc_yres += lines;
-		}
-	}
-}
-
-static void
-newport_setup_hw(struct newport_devconfig *dc)
-{
-	uint16_t curp,tmp;
-	int i;
-	uint32_t scratch;
-
-	/* Get various revisions */
-	rex3_write(dc, REX3_REG_DCBMODE,
-	    REX3_DCBMODE_DW_1 |
-	    (NEWPORT_DCBADDR_CMAP_0 << REX3_DCBMODE_DCBADDR_SHIFT) |
-	    (CMAP_DCBCRS_REVISION << REX3_DCBMODE_DCBCRS_SHIFT) |
-	    (1 << REX3_DCBMODE_CSWIDTH_SHIFT) |
-	    (1 << REX3_DCBMODE_CSHOLD_SHIFT) |
-	    (1 << REX3_DCBMODE_CSSETUP_SHIFT));
-
-	scratch = vc2_read_ireg(dc, VC2_IREG_CONFIG);
-	dc->dc_vc2rev = (scratch & VC2_IREG_CONFIG_REVISION) >> 5;
-
-	scratch = rex3_read(dc, REX3_REG_DCBDATA0);
-
-	dc->dc_boardrev = (scratch >> 28) & 0x07;
-	dc->dc_cmaprev = scratch & 0x07;
-	dc->dc_xmaprev = xmap9_read(dc, XMAP9_DCBCRS_REVISION) & 0x07;
-	dc->dc_depth = ( (dc->dc_boardrev > 1) && (scratch & 0x80)) ? 8 : 24;
-
-	/* Setup cursor glyph */
-	curp = vc2_read_ireg(dc, VC2_IREG_CURSOR_ENTRY);
-
-	for (i=0; i<128; i++)
-		vc2_write_ram(dc, curp + i, newport_cursor_data[i]);
-
-	/* Setup VC2 to a known state */
-	tmp = vc2_read_ireg(dc, VC2_IREG_CONTROL) & VC2_CONTROL_INTERLACE;
-	vc2_write_ireg(dc, VC2_IREG_CONTROL, tmp |
-	    VC2_CONTROL_DISPLAY_ENABLE |
-	    VC2_CONTROL_VTIMING_ENABLE |
-	    VC2_CONTROL_DID_ENABLE |
-	    VC2_CONTROL_CURSORFUNC_ENABLE |
-	    VC2_CONTROL_CURSOR_ENABLE);
-
-	/* Setup XMAP9s */
-	xmap9_write(dc, XMAP9_DCBCRS_CONFIG,
-	    XMAP9_CONFIG_8BIT_SYSTEM | XMAP9_CONFIG_RGBMAP_CI);
-
-	xmap9_write(dc, XMAP9_DCBCRS_CURSOR_CMAP, 0);
-
-	xmap9_write_mode(dc, 0,
-	    XMAP9_MODE_GAMMA_BYPASS |
-	    XMAP9_MODE_PIXSIZE_8BPP);
-	xmap9_write(dc, XMAP9_DCBCRS_MODE_SELECT, 0);
-
-	/* Setup REX3 */
 	rex3_write(dc, REX3_REG_DRAWMODE1,
 	    REX3_DRAWMODE1_PLANES_CI |
@@ -554,16 +306,189 @@
 	    REX3_DRAWMODE1_COMPARE_GT |
 	    REX3_DRAWMODE1_LO_SRC);
+	rex3_write(dc, REX3_REG_WRMASK, 0xffffffff);
+	rex3_write(dc, REX3_REG_COLORI, color);
+	rex3_write(dc, REX3_REG_XYSTARTI, (x1 << REX3_XYSTARTI_XSHIFT) | y1);
+
+	rex3_write_go(dc, REX3_REG_XYENDI, (x2 << REX3_XYENDI_XSHIFT) | y2);
+}
+
+static void
+newport_bitblt(struct newport_devconfig *dc, int xs, int ys, int xd,
+    int yd, int wi, int he, int rop)
+{
+	int xe, ye;
+	uint32_t tmp;
+
+	rex3_wait_gfifo(dc);
+	if (yd > ys) {
+		/* need to copy bottom up */
+		ye = ys;
+		yd += he - 1;
+		ys += he - 1;
+	} else
+		ye = ys + he - 1;
+
+	if (xd > xs) {
+		/* need to copy right to left */
+		xe = xs;
+		xd += wi - 1;
+		xs += wi - 1;
+	} else
+		xe = xs + wi - 1;
+
+	rex3_write(dc, REX3_REG_DRAWMODE0, REX3_DRAWMODE0_OPCODE_SCR2SCR |
+	    REX3_DRAWMODE0_ADRMODE_BLOCK | REX3_DRAWMODE0_DOSETUP |
+	    REX3_DRAWMODE0_STOPONX | REX3_DRAWMODE0_STOPONY);
+	rex3_write(dc, REX3_REG_DRAWMODE1,
+	    REX3_DRAWMODE1_PLANES_CI |
+	    REX3_DRAWMODE1_DD_DD8 |
+	    REX3_DRAWMODE1_RWPACKED |
+	    REX3_DRAWMODE1_HD_HD8 |
+	    REX3_DRAWMODE1_COMPARE_LT |
+	    REX3_DRAWMODE1_COMPARE_EQ |
+	    REX3_DRAWMODE1_COMPARE_GT |
+	    ((rop << 28) & REX3_DRAWMODE1_LOGICOP_MASK));
+	rex3_write(dc, REX3_REG_XYSTARTI, (xs << REX3_XYSTARTI_XSHIFT) | ys);
+	rex3_write(dc, REX3_REG_XYENDI, (xe << REX3_XYENDI_XSHIFT) | ye);
+
+	tmp = (yd - ys) & 0xffff;
+	tmp |= (xd - xs) << REX3_XYMOVE_XSHIFT;
+
+	rex3_write_go(dc, REX3_REG_XYMOVE, tmp);
+}
+
+static void
+newport_cmap_setrgb(struct newport_devconfig *dc, int index, uint8_t r,
+    uint8_t g, uint8_t b)
+{
+	rex3_write(dc, REX3_REG_DCBMODE,
+	    REX3_DCBMODE_DW_2 |
+	    REX3_DCBMODE_ENCRSINC |
+	    (NEWPORT_DCBADDR_CMAP_BOTH << REX3_DCBMODE_DCBADDR_SHIFT) |
+	    (CMAP_DCBCRS_ADDRESS_LOW << REX3_DCBMODE_DCBCRS_SHIFT) |
+	    (1 << REX3_DCBMODE_CSWIDTH_SHIFT) |
+	    (1 << REX3_DCBMODE_CSHOLD_SHIFT) |
+	    (1 << REX3_DCBMODE_CSSETUP_SHIFT) |
+	    REX3_DCBMODE_SWAPENDIAN);
+
+	rex3_write(dc, REX3_REG_DCBDATA0, index << 16);
+
+	rex3_write(dc, REX3_REG_DCBMODE,
+	    REX3_DCBMODE_DW_3 |
+	    (NEWPORT_DCBADDR_CMAP_BOTH << REX3_DCBMODE_DCBADDR_SHIFT) |
+	    (CMAP_DCBCRS_PALETTE << REX3_DCBMODE_DCBCRS_SHIFT) |
+	    (1 << REX3_DCBMODE_CSWIDTH_SHIFT) |
+	    (1 << REX3_DCBMODE_CSHOLD_SHIFT) |
+	    (1 << REX3_DCBMODE_CSSETUP_SHIFT));
+
+	rex3_write(dc, REX3_REG_DCBDATA0, (r << 24) + (g << 16) + (b << 8));
+}
+
+static void
+newport_get_resolution(struct newport_devconfig *dc)
+{
+	uint16_t vep,lines;
+	uint16_t linep,cols;
+	uint16_t data;
+
+	vep = vc2_read_ireg(dc, VC2_IREG_VIDEO_ENTRY);
+
+	dc->dc_xres = 0;
+	dc->dc_yres = 0;
+
+	for (;;) {
+		/* Iterate over runs in video timing table */
+
+		cols = 0;
+
+		linep = vc2_read_ram(dc, vep++);
+		lines = vc2_read_ram(dc, vep++);
+
+		if (lines == 0)
+			break;
+
+		do {
+			/* Iterate over state runs in line sequence table */
+		
+			data = vc2_read_ram(dc, linep++);
+
+			if ((data & 0x0001) == 0)
+				cols += (data >> 7) & 0xfe;
+
+			if ((data & 0x0080) == 0)
+				data = vc2_read_ram(dc, linep++);
+		} while ((data & 0x8000) == 0);
+
+		if (cols != 0) {
+			if (cols > dc->dc_xres)
+				dc->dc_xres = cols;
+
+			dc->dc_yres += lines;
+		}
+	}
+}
+
+static void
+newport_setup_hw(struct newport_devconfig *dc)
+{
+	uint16_t curp,tmp;
+	int i;
+	uint32_t scratch;
+
+	/* Get various revisions */
+	rex3_write(dc, REX3_REG_DCBMODE,
+	    REX3_DCBMODE_DW_1 |
+	    (NEWPORT_DCBADDR_CMAP_0 << REX3_DCBMODE_DCBADDR_SHIFT) |
+	    (CMAP_DCBCRS_REVISION << REX3_DCBMODE_DCBCRS_SHIFT) |
+	    (1 << REX3_DCBMODE_CSWIDTH_SHIFT) |
+	    (1 << REX3_DCBMODE_CSHOLD_SHIFT) |
+	    (1 << REX3_DCBMODE_CSSETUP_SHIFT));
+
+	scratch = vc2_read_ireg(dc, VC2_IREG_CONFIG);
+	dc->dc_vc2rev = (scratch & VC2_IREG_CONFIG_REVISION) >> 5;
+
+	scratch = rex3_read(dc, REX3_REG_DCBDATA0);
+
+	dc->dc_boardrev = (scratch >> 28) & 0x07;
+	dc->dc_cmaprev = scratch & 0x07;
+	dc->dc_xmaprev = xmap9_read(dc, XMAP9_DCBCRS_REVISION) & 0x07;
+	dc->dc_depth = ( (dc->dc_boardrev > 1) && (scratch & 0x80)) ? 8 : 24;
+
+	/* Setup cursor glyph */
+	curp = vc2_read_ireg(dc, VC2_IREG_CURSOR_ENTRY);
+
+	/* Setup VC2 to a known state */
+	tmp = vc2_read_ireg(dc, VC2_IREG_CONTROL) & VC2_CONTROL_INTERLACE;
+	vc2_write_ireg(dc, VC2_IREG_CONTROL, tmp |
+	    VC2_CONTROL_DISPLAY_ENABLE |
+	    VC2_CONTROL_VTIMING_ENABLE |
+	    VC2_CONTROL_DID_ENABLE |
+	    VC2_CONTROL_CURSORFUNC_ENABLE /*|
+	    VC2_CONTROL_CURSOR_ENABLE*/);
+
+	/* Setup XMAP9s */
+	xmap9_write(dc, XMAP9_DCBCRS_CONFIG,
+	    XMAP9_CONFIG_8BIT_SYSTEM | XMAP9_CONFIG_RGBMAP_CI);
+
+	xmap9_write(dc, XMAP9_DCBCRS_CURSOR_CMAP, 0);
+
+	xmap9_write_mode(dc, 0,
+	    XMAP9_MODE_GAMMA_BYPASS |
+	    XMAP9_MODE_PIXSIZE_8BPP);
+	xmap9_write(dc, XMAP9_DCBCRS_MODE_SELECT, 0);
+
+	/* Setup REX3 */
 	rex3_write(dc, REX3_REG_XYWIN, (4096 << 16) | 4096);
 	rex3_write(dc, REX3_REG_TOPSCAN, 0x3ff); /* XXX Why? XXX */
 
 	/* Setup CMAP */
-	for (i=0; i<16; i++)
-		newport_cmap_setrgb(dc, i, newport_defcmap[i*3],
-		    newport_defcmap[i*3 + 1], newport_defcmap[i*3 + 2]);
+	for (i = 0; i < 256; i++)
+		newport_cmap_setrgb(dc, i, rasops_cmap[i * 3],
+		    rasops_cmap[i * 3 + 1], rasops_cmap[i * 3 + 2]);
 }
 
 /**** Attach routines ****/
 static int
-newport_match(struct device *parent, struct cfdata *self, void *aux)
+newport_match(device_t parent, struct cfdata *self, void *aux)
 {
 	struct gio_attach_args *ga = aux;
@@ -622,13 +547,18 @@
 
 	newport_fill_rectangle(dc, 0, 0, dc->dc_xres, dc->dc_yres, 0);
-}
-
-static void
-newport_attach(struct device *parent, struct device *self, void *aux)
+	dc->dc_screen = &newport_screen;
+	
+	dc->dc_mode = WSDISPLAYIO_MODE_EMUL;
+}
+
+static void
+newport_attach(device_t parent, device_t self, void *aux)
 {
 	struct gio_attach_args *ga = aux;
-	struct newport_softc *sc = (void *)self;
+	struct newport_softc *sc = device_private(self);
 	struct wsemuldisplaydev_attach_args wa;
-
+	unsigned long defattr;
+
+	sc->sc_dev = self;
 	if (newport_is_console && ga->ga_addr == newport_console_dc.dc_addr) {
 		wa.console = 1;
@@ -649,10 +579,21 @@
 	    sc->sc_dc->dc_boardrev, sc->sc_dc->dc_cmaprev,
 	    sc->sc_dc->dc_xmaprev, sc->sc_dc->dc_vc2rev, sc->sc_dc->dc_depth);
-
+	vcons_init(&sc->sc_dc->dc_vd, sc->sc_dc, sc->sc_dc->dc_screen,
+	    &newport_accessops);
+	sc->sc_dc->dc_vd.init_screen = newport_init_screen;
+	if (newport_is_console) {
+		newport_console_screen.scr_flags |= VCONS_SCREEN_IS_STATIC;
+		vcons_init_screen(&sc->sc_dc->dc_vd, &newport_console_screen,
+		    1, &defattr);
+		sc->sc_dc->dc_screen->textops =
+		    &newport_console_screen.scr_ri.ri_ops;
+		memcpy(&newport_textops, &newport_console_screen.scr_ri.ri_ops,
+		    sizeof(struct wsdisplay_emulops));
+	}
 	wa.scrdata = &newport_screenlist;
 	wa.accessops = &newport_accessops;
-	wa.accesscookie = sc->sc_dc;
-
-	config_found(&sc->sc_dev, &wa, wsemuldisplaydevprint);
+	wa.accesscookie = &sc->sc_dc->dc_vd;
+
+	config_found(sc->sc_dev, &wa, wsemuldisplaydevprint);
 }
 
@@ -660,6 +601,6 @@
 newport_cnattach(struct gio_attach_args *ga)
 {
+	struct rasops_info *ri = &newport_console_screen.scr_ri;
 	long defattr = NEWPORT_ATTR_ENCODE(WSCOL_WHITE, WSCOL_BLACK);
-	const struct wsscreen_descr *screen;
 
 	if (!newport_match(NULL, NULL, ga)) {
@@ -669,11 +610,25 @@
 	newport_attach_common(&newport_console_dc, ga);
 
-	if (newport_console_dc.dc_xres >= 1280 &&
-	    newport_console_dc.dc_yres >= 1024)
-		screen = &newport_screen_1280x1024;
-	else
-		screen = &newport_screen_1024x768;
-
-	wsdisplay_cnattach(screen, &newport_console_dc, 0, 0, defattr);
+	newport_screen.ncols = newport_console_dc.dc_xres / 8;
+	newport_screen.nrows = newport_console_dc.dc_yres / 16;
+
+	ri->ri_hw = &newport_console_screen;
+	ri->ri_depth = newport_console_dc.dc_depth;
+	ri->ri_width = newport_console_dc.dc_xres;
+	ri->ri_height = newport_console_dc.dc_yres;
+	ri->ri_stride = newport_console_dc.dc_xres; /* XXX */
+	ri->ri_flg = RI_CENTER | RI_FULLCLEAR;
+	ri->ri_ops.copyrows  = newport_copyrows;
+	ri->ri_ops.eraserows = newport_eraserows;
+	ri->ri_ops.copycols  = newport_copycols;
+	ri->ri_ops.erasecols = newport_erasecols;
+	ri->ri_ops.cursor    = newport_cursor_dummy;
+	ri->ri_ops.mapchar   = newport_mapchar;
+	ri->ri_ops.putchar   = newport_putchar;
+	ri->ri_ops.allocattr = newport_allocattr;
+	ri->ri_font = newport_console_dc.dc_fontdata;
+	newport_console_screen.scr_cookie = &newport_console_dc;
+
+	wsdisplay_cnattach(&newport_screen, ri, 0, 0, defattr);
 
 	newport_is_console = 1;
@@ -682,33 +637,69 @@
 }
 
+static void
+newport_init_screen(void *cookie, struct vcons_screen *scr,
+    int existing, long *defattr)
+{
+	struct newport_devconfig *dc = cookie;
+	struct rasops_info *ri = &scr->scr_ri;
+
+	ri->ri_depth = dc->dc_depth;
+	ri->ri_width = dc->dc_xres;
+	ri->ri_height = dc->dc_yres;
+	ri->ri_stride = dc->dc_xres; /* XXX */
+	ri->ri_flg = RI_CENTER;
+
+	/*&ri->ri_bits = (char *)sc->sc_fb.fb_pixels;*/
+
+	rasops_init(ri, dc->dc_yres / 8, dc->dc_xres / 8);
+	ri->ri_caps = WSSCREEN_WSCOLORS;
+
+	rasops_reconfig(ri, dc->dc_yres / ri->ri_font->fontheight,
+		    dc->dc_xres / ri->ri_font->fontwidth);
+
+	ri->ri_hw = scr;
+	ri->ri_ops.copyrows  = newport_copyrows;
+	ri->ri_ops.eraserows = newport_eraserows;
+	ri->ri_ops.copycols  = newport_copycols;
+	ri->ri_ops.erasecols = newport_erasecols;
+	ri->ri_ops.cursor    = newport_cursor;
+	ri->ri_ops.mapchar   = newport_mapchar;
+	ri->ri_ops.putchar   = newport_putchar;
+	ri->ri_ops.allocattr = newport_allocattr;
+}
+
 /**** wsdisplay textops ****/
 static void
+newport_cursor_dummy(void *c, int on, int row, int col)
+{
+}
+
+static void
 newport_cursor(void *c, int on, int row, int col)
 {
-	struct newport_devconfig *dc = (void *)c;
-	uint16_t control;
-	int x_offset;
-
-	control = vc2_read_ireg(dc, VC2_IREG_CONTROL);
-
-	if (!on) {
-		vc2_write_ireg(dc, VC2_IREG_CONTROL,
-		    control & ~VC2_CONTROL_CURSOR_ENABLE);
-	} else {
-		/* Work around bug in some board revisions */
-		if (dc->dc_boardrev < 6)
-			x_offset = 21;
-		else if (dc->dc_vc2rev == 0) 
-			x_offset = 29;
-		else
-			x_offset = 31;
-
-		vc2_write_ireg(dc, VC2_IREG_CURSOR_X,
-		    col * dc->dc_fontdata->fontwidth + x_offset);
-		vc2_write_ireg(dc, VC2_IREG_CURSOR_Y,
-		    row * dc->dc_fontdata->fontheight + 31);
-	
-		vc2_write_ireg(dc, VC2_IREG_CONTROL,
-		    control | VC2_CONTROL_CURSOR_ENABLE);
+	struct rasops_info *ri = c;
+	struct vcons_screen *scr = ri->ri_hw;
+	struct newport_devconfig *dc = scr->scr_cookie;
+	int x, y, wi,he;
+
+	wi = ri->ri_font->fontwidth;
+	he = ri->ri_font->fontheight;
+
+	if (ri->ri_flg & RI_CURSOR) {
+		x = ri->ri_ccol * wi + ri->ri_xorigin;
+		y = ri->ri_crow * he + ri->ri_yorigin;
+		newport_bitblt(dc, x, y, x, y, wi, he, 12);
+		ri->ri_flg &= ~RI_CURSOR;
+	}
+
+	ri->ri_crow = row;
+	ri->ri_ccol = col;
+
+	if (on)
+	{
+		x = ri->ri_ccol * wi + ri->ri_xorigin;
+		y = ri->ri_crow * he + ri->ri_yorigin;
+		newport_bitblt(dc, x, y, x, y, wi, he, 12);
+		ri->ri_flg |= RI_CURSOR;
 	}
 }
@@ -717,5 +708,7 @@
 newport_mapchar(void *c, int ch, unsigned int *cp)
 {
-	struct newport_devconfig *dc = (void *)c;
+	struct rasops_info *ri = c;
+	struct vcons_screen *scr = ri->ri_hw;
+	struct newport_devconfig *dc = scr->scr_cookie;
 
 	if (dc->dc_fontdata->encoding != WSDISPLAY_FONTENC_ISO) {
@@ -741,12 +734,14 @@
 newport_putchar(void *c, int row, int col, u_int ch, long attr)
 {
-	struct newport_devconfig *dc = (void *)c;
-	struct wsdisplay_font *font = dc->dc_fontdata;
+	struct rasops_info *ri = c;
+	struct vcons_screen *scr = ri->ri_hw;
+	struct newport_devconfig *dc = scr->scr_cookie;
+	struct wsdisplay_font *font = ri->ri_font;
 	uint8_t *bitmap = (u_int8_t *)font->data + (ch - font->firstchar) * 
 	    font->fontheight * font->stride;
 	uint32_t pattern;
 	int i;
-	int x = col * font->fontwidth;
-	int y = row * font->fontheight;
+	int x = col * font->fontwidth + ri->ri_xorigin;
+	int y = row * font->fontheight + ri->ri_yorigin;
 
 	rex3_wait_gfifo(dc);
@@ -756,4 +751,14 @@
 	    REX3_DRAWMODE0_ENZPATTERN | REX3_DRAWMODE0_ZPOPAQUE);
 
+	rex3_write(dc, REX3_REG_DRAWMODE1,
+	    REX3_DRAWMODE1_PLANES_CI |
+	    REX3_DRAWMODE1_DD_DD8 |
+	    REX3_DRAWMODE1_RWPACKED |
+	    REX3_DRAWMODE1_HD_HD8 |
+	    REX3_DRAWMODE1_COMPARE_LT |
+	    REX3_DRAWMODE1_COMPARE_EQ |
+	    REX3_DRAWMODE1_COMPARE_GT |
+	    REX3_DRAWMODE1_LO_SRC);
+
 	rex3_write(dc, REX3_REG_XYSTARTI, (x << REX3_XYSTARTI_XSHIFT) | y);
 	rex3_write(dc, REX3_REG_XYENDI,
@@ -765,5 +770,5 @@
 	rex3_write(dc, REX3_REG_WRMASK, 0xffffffff);
 
-	for (i=0; i<font->fontheight; i++) {
+	for (i = 0; i < font->fontheight; i++) {
 		/* XXX Works only with font->fontwidth == 8 XXX */
 		pattern = *bitmap << 24;
@@ -778,14 +783,15 @@
 newport_copycols(void *c, int row, int srccol, int dstcol, int ncols)
 {
-	struct newport_devconfig *dc = (void *)c;
-	struct wsdisplay_font *font = dc->dc_fontdata;
-
-	newport_copy_rectangle(dc,
-	    srccol * font->fontwidth,			/* x1 */
-	    row * font->fontheight,			/* y1 */
-	    (srccol + ncols + 1) * font->fontwidth - 1,	/* x2 */
-	    (row + 1) * font->fontheight - 1,		/* y2 */
-	    dstcol * font->fontheight,			/* dx */
-	    row * font->fontheight);			/* dy */
+	struct rasops_info *ri = c;
+	struct vcons_screen *scr = ri->ri_hw;
+	struct newport_devconfig *dc = scr->scr_cookie;
+	int32_t xs, xd, y, width, height;
+
+	xs = ri->ri_xorigin + ri->ri_font->fontwidth * srccol;
+	xd = ri->ri_xorigin + ri->ri_font->fontwidth * dstcol;
+	y = ri->ri_yorigin + ri->ri_font->fontheight * row;
+	width = ri->ri_font->fontwidth * ncols;
+	height = ri->ri_font->fontheight;
+	newport_bitblt(dc, xs, y, xd, y, width, height, 3);
 }
 
@@ -794,5 +800,7 @@
     long attr)
 {
-	struct newport_devconfig *dc = (void *)c;
+	struct rasops_info *ri = c;
+	struct vcons_screen *scr = ri->ri_hw;
+	struct newport_devconfig *dc = scr->scr_cookie;
 	struct wsdisplay_font *font = dc->dc_fontdata;
 
@@ -800,5 +808,5 @@
 	    startcol * font->fontwidth,				/* x1 */
 	    row * font->fontheight,				/* y1 */
-	    (startcol + ncols + 1) * font->fontwidth - 1,	/* x2 */
+	    (startcol + ncols) * font->fontwidth - 1,		/* x2 */
 	    (row + 1) * font->fontheight - 1,			/* y2 */
 	    NEWPORT_ATTR_BG(attr));
@@ -808,14 +816,16 @@
 newport_copyrows(void *c, int srcrow, int dstrow, int nrows)
 {
-	struct newport_devconfig *dc = (void *)c;
-	struct wsdisplay_font *font = dc->dc_fontdata;
-
-	newport_copy_rectangle(dc,
-	    0,							/* x1 */
-	    srcrow * font->fontheight,				/* y1 */
-	    dc->dc_xres,					/* x2 */
-	    (srcrow + nrows + 1) * font->fontheight - 1,	/* y2 */
-	    0,							/* dx */
-	    dstrow * font->fontheight);				/* dy */
+	struct rasops_info *ri = c;
+	struct vcons_screen *scr = ri->ri_hw;
+	struct newport_devconfig *dc = scr->scr_cookie;
+	int32_t x, ys, yd, width, height;
+
+	x = ri->ri_xorigin;
+	ys = ri->ri_yorigin + ri->ri_font->fontheight * srcrow;
+	yd = ri->ri_yorigin + ri->ri_font->fontheight * dstrow;
+	width = ri->ri_emuwidth;
+	height = ri->ri_font->fontheight * nrows;
+
+	newport_bitblt(dc, x, ys, x, yd, width, height, 3);
 }
 
@@ -823,5 +833,7 @@
 newport_eraserows(void *c, int startrow, int nrows, long attr)
 {
-	struct newport_devconfig *dc = (void *)c;
+	struct rasops_info *ri = c;
+	struct vcons_screen *scr = ri->ri_hw;
+	struct newport_devconfig *dc = scr->scr_cookie;
 	struct wsdisplay_font *font = dc->dc_fontdata;
 
@@ -830,5 +842,5 @@
 	    startrow * font->fontheight,			/* y1 */
 	    dc->dc_xres,					/* x2 */
-	    (startrow + nrows + 1) * font->fontheight - 1,	/* y2 */
+	    (startrow + nrows) * font->fontheight - 1,		/* y2 */
 	    NEWPORT_ATTR_BG(attr));
 }
@@ -862,8 +874,15 @@
 
 static int
-newport_ioctl(void *c, void *vs, u_long cmd, void *data, int flag,
+newport_ioctl(void *v, void *vs, u_long cmd, void *data, int flag,
 	struct lwp *l)
 {
-	struct newport_softc *sc = c;
+	struct vcons_data *vd;
+	struct newport_devconfig *dc;
+	struct vcons_screen *ms;
+	int nmode;
+
+	vd = (struct vcons_data *)v;
+	dc = (struct newport_devconfig *)vd->cookie;
+	ms = (struct vcons_screen *)vd->active;
 
 #define FBINFO (*(struct wsdisplay_fbinfo*)data)
@@ -871,7 +890,7 @@
 	switch (cmd) {
 	case WSDISPLAYIO_GINFO:
-		FBINFO.width  = sc->sc_dc->dc_xres;
-		FBINFO.height = sc->sc_dc->dc_yres;
-		FBINFO.depth  = sc->sc_dc->dc_depth;
+		FBINFO.width  = dc->dc_xres;
+		FBINFO.height = dc->dc_yres;
+		FBINFO.depth  = dc->dc_depth;
 		FBINFO.cmsize = 1 << FBINFO.depth;
 		return 0;
@@ -879,4 +898,15 @@
 		*(u_int *)data = WSDISPLAY_TYPE_NEWPORT;
 		return 0;
+	case WSDISPLAYIO_SMODE:
+		nmode = *(int *)data;
+		if (nmode != dc->dc_mode) {
+			dc->dc_mode = nmode;
+			if (nmode == WSDISPLAYIO_MODE_EMUL) {
+				rex3_wait_gfifo(dc);
+				newport_setup_hw(dc);
+				vcons_redraw_screen(vd->active);
+			}
+		}
+		return 0;
 	}
 	return EPASSTHROUGH;
@@ -884,7 +914,11 @@
 
 static paddr_t
-newport_mmap(void *c, void *vs, off_t offset, int prot)
-{
-	struct newport_devconfig *dc = c;
+newport_mmap(void *v, void *vs, off_t offset, int prot)
+{
+	struct vcons_data *vd;
+	struct newport_devconfig *dc;
+
+	vd = (struct vcons_data *)v;
+	dc = (struct newport_devconfig *)vd->cookie;
 
 	if ( offset >= 0xfffff)
@@ -893,24 +927,2 @@
 	return mips_btop(dc->dc_addr + offset);
 }
-
-static int
-newport_alloc_screen(void *c, const struct wsscreen_descr *type, void **cookiep,
-    int *cursxp, int *cursyp, long *attrp)
-{
-	/* This won't get called for console screen and we don't support
-	 * virtual screens */
-
-	return ENOMEM;
-}
-
-static void
-newport_free_screen(void *c, void *cookie)
-{
-	panic("newport_free_screen");
-}
-static int
-newport_show_screen(void *c, void *cookie, int waitok,
-    void (*cb)(void *, int, int), void *cbarg)
-{
-	return 0;
-}
Index: /trunk/src/sys/arch/sgimips/gio/newportreg.h
===================================================================
--- /trunk/src/sys/arch/sgimips/gio/newportreg.h	(revision 151)
+++ /trunk/src/sys/arch/sgimips/gio/newportreg.h	(revision 152)
@@ -1,4 +1,4 @@
 
-/*	$NetBSD: newportreg.h,v 1.3 2005/12/11 12:18:53 christos Exp $	*/
+/*	$NetBSD: newportreg.h,v 1.3.96.1 2010/12/29 07:19:28 matt Exp $	*/
 
 /*
@@ -129,5 +129,11 @@
 #define  REX3_DRAWMODE0_LENGTH32	0x00008000
 #define  REX3_DRAWMODE0_ZPOPAQUE	0x00010000
-
+#define  REX3_DRAWMODE0_LSOPAQUE	0x00020000
+#define  REX3_DRAWMODE0_SHADE		0x00040000
+#define  REX3_DRAWMODE0_LRONLY		0x00080000
+#define  REX3_DRAWMODE0_XYOFFSET	0x00100000
+#define  REX3_DRAWMODE0_CICLAMP		0x00200000
+#define  REX3_DRAWMODE0_ENDPTFILTER	0x00400000
+#define  REX3_DRAWMODE0_YSTRIDE		0x00800000
 #define REX3_REG_LSMODE			0x0008
 
Index: /trunk/src/sys/arch/sgimips/hpc/files.hpc
===================================================================
--- /trunk/src/sys/arch/sgimips/hpc/files.hpc	(revision 151)
+++ /trunk/src/sys/arch/sgimips/hpc/files.hpc	(revision 152)
@@ -1,3 +1,3 @@
-# $NetBSD: files.hpc,v 1.12 2006/08/27 10:05:23 bjh21 Exp $
+# $NetBSD: files.hpc,v 1.12.78.1 2010/12/29 07:19:28 matt Exp $
 
 device	sq: arp, ether, ifnet
@@ -34,2 +34,5 @@
 file	arch/sgimips/hpc/pi1ppc.c	pi1ppc
 
+device	panel : sysmon_power, sysmon_taskq
+attach	panel at hpc
+file	arch/sgimips/hpc/panel.c	panel
Index: /trunk/src/sys/arch/sgimips/hpc/haltwo.c
===================================================================
--- /trunk/src/sys/arch/sgimips/hpc/haltwo.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/hpc/haltwo.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: haltwo.c,v 1.15 2008/08/24 13:03:39 tsutsui Exp $ */
+/* $NetBSD: haltwo.c,v 1.15.12.1 2010/12/29 07:19:28 matt Exp $ */
 
 /*
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: haltwo.c,v 1.15 2008/08/24 13:03:39 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: haltwo.c,v 1.15.12.1 2010/12/29 07:19:28 matt Exp $");
 
 #include <sys/param.h>
@@ -610,4 +610,5 @@
 		strcpy(dev->label.name, AudioNmaster);
 		dev->un.v.num_channels = 2;
+		dev->un.v.delta = 16;
 		strcpy(dev->un.v.units.name, AudioNvolume);
 		break;
Index: /trunk/src/sys/arch/sgimips/hpc/hpc.c
===================================================================
--- /trunk/src/sys/arch/sgimips/hpc/hpc.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/hpc/hpc.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: hpc.c,v 1.60.38.1 2009/08/26 03:46:40 matt Exp $	*/
+/*	$NetBSD: hpc.c,v 1.60.38.2 2010/12/29 07:19:28 matt Exp $	*/
 
 /*
@@ -36,5 +36,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hpc.c,v 1.60.38.1 2009/08/26 03:46:40 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hpc.c,v 1.60.38.2 2010/12/29 07:19:28 matt Exp $");
 
 #include <sys/param.h>
@@ -214,4 +214,10 @@
 	  -1,
 	  HPCDEV_IP22 | HPCDEV_IP24 },
+
+	{ "panel",	/* Indy front panel */
+	  HPC_BASE_ADDRESS_0,
+	  HPC3_PBUS_CH6_DEVREGS + IOC_PANEL, 0,
+	  9,
+	  HPCDEV_IP24 },
 
 	{ NULL,
Index: /trunk/src/sys/arch/sgimips/hpc/panel.c
===================================================================
--- /trunk/src/sys/arch/sgimips/hpc/panel.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/hpc/panel.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: panel.c,v 1.1.4.2 2009/09/26 18:03:06 snj Exp $ */
+/*	$NetBSD: panel.c,v 1.1.10.2 2010/12/29 07:19:28 matt Exp $ */
 
 /*-
@@ -28,5 +28,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: panel.c,v 1.1.4.2 2009/09/26 18:03:06 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: panel.c,v 1.1.10.2 2010/12/29 07:19:28 matt Exp $");
 
 #include <sys/param.h>
Index: /trunk/src/sys/arch/sgimips/include/intr.h
===================================================================
--- /trunk/src/sys/arch/sgimips/include/intr.h	(revision 151)
+++ /trunk/src/sys/arch/sgimips/include/intr.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: intr.h,v 1.25.36.1 2010/02/06 02:57:44 matt Exp $	*/
+/*	$NetBSD: intr.h,v 1.25.36.2 2010/12/29 07:15:47 matt Exp $	*/
 
 /*
@@ -36,27 +36,12 @@
 #define	_SGIMIPS_INTR_H_
 
-#define	IPL_NONE	0	/* Disable only this interrupt. */
-#define	IPL_SOFTCLOCK	1	/* generic software interrupts */
-#define	IPL_SOFTBIO	1	/* serial software interrupts */
-#define	IPL_SOFTNET	1	/* network software interrupts */
-#define	IPL_SOFTSERIAL	1	/* clock software interrupts */
-#define	IPL_VM		2
-#define	IPL_SCHED	3
-#define	IPL_HIGH	4
-
-#define NIPL		5
-
-/* Interrupt sharing types. */
-#define IST_NONE	0	/* none */
-#define IST_PULSE	1	/* pulsed */
-#define IST_EDGE	2	/* edge-triggered */
-#define IST_LEVEL	3	/* level-triggered */
+#include <mips/intr.h>
 
 #ifdef _KERNEL
-#ifndef _LOCORE
+#ifdef __INTR_PRIVATE
 
 #include <sys/queue.h>
 #include <sys/types.h>
-#include <sys/device.h>
+#include <sys/evcnt.h>
 #include <mips/cpuregs.h>
 #include <mips/locore.h>
@@ -65,6 +50,5 @@
 
 struct sgimips_intrhand {
-	LIST_ENTRY(sgimips_intrhand)
-		ih_q;
+	LIST_ENTRY(sgimips_intrhand) ih_q;
 	int	(*ih_fun) (void *);
 	void	 *ih_arg;
@@ -75,6 +59,5 @@
 
 struct sgimips_intr {
-	LIST_HEAD(,sgimips_intrhand)
-		intr_q;
+	LIST_HEAD(,sgimips_intrhand) intr_q;
 	struct	evcnt ih_evcnt;
 	unsigned long intr_ipl;
@@ -83,33 +66,9 @@
 extern struct sgimips_intrhand intrtab[];
 
-extern const int *ipl2spl_table;
+#endif /* __INTR_PRIVATE */
 
-#define spl0()		(void)_spllower(0)
-#define splx(s)		(void)_splset(s)
-#define splvm()		_splraise(ipl2spl_table[IPL_VM])
-#define splsched()	_splraise(ipl2spl_table[IPL_SCHED])
-#define splhigh()	_splraise(MIPS_INT_MASK)
-
-#define splsoftclock()	_splraise(MIPS_SOFT_INT_MASK_1)
-#define splsoftbio()	splsoftclock()
-#define splsoftnet()	splsoftclock()
-#define splsoftserial()	splsoftclock()
-
-extern void *		cpu_intr_establish(int, int, int (*)(void *), void *);
-
-typedef int ipl_t;
-typedef struct {
-	int _spl;
-} ipl_cookie_t;
-
-ipl_cookie_t makeiplcookie(ipl_t);
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
-	return _splraise(icookie._spl);
-}
-#endif /* _LOCORE */
+#ifndef _LOCORE
+void *cpu_intr_establish(int, int, int (*)(void *), void *);
+#endif
 #endif /* !_KERNEL */
 
Index: /trunk/src/sys/arch/sgimips/include/sysconf.h
===================================================================
--- /trunk/src/sys/arch/sgimips/include/sysconf.h	(revision 151)
+++ /trunk/src/sys/arch/sgimips/include/sysconf.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sysconf.h,v 1.7 2006/12/29 05:26:30 rumble Exp $	*/
+/*	$NetBSD: sysconf.h,v 1.7.66.1 2010/12/29 07:15:47 matt Exp $	*/
 
 /*
@@ -76,10 +76,10 @@
 	void	(*watchdog_disable)(void);
 	void	(*watchdog_enable)(void);
-	void	(*intr0)(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
-	void	(*intr1)(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
-	void	(*intr2)(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
-	void	(*intr3)(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
-	void	(*intr4)(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
-	void	(*intr5)(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+	void	(*intr0)(vaddr_t, uint32_t, uint32_t);
+	void	(*intr1)(vaddr_t, uint32_t, uint32_t);
+	void	(*intr2)(vaddr_t, uint32_t, uint32_t);
+	void	(*intr3)(vaddr_t, uint32_t, uint32_t);
+	void	(*intr4)(vaddr_t, uint32_t, uint32_t);
+	void	(*intr5)(vaddr_t, uint32_t, uint32_t);
 };
 
Index: /trunk/src/sys/arch/sgimips/ioc/ioc.c
===================================================================
--- /trunk/src/sys/arch/sgimips/ioc/ioc.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/ioc/ioc.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: ioc.c,v 1.7 2007/10/17 19:57:05 garbled Exp $	 */
+/* $NetBSD: ioc.c,v 1.7.38.1 2010/12/29 07:19:28 matt Exp $	 */
 
 /*
@@ -38,5 +38,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ioc.c,v 1.7 2007/10/17 19:57:05 garbled Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ioc.c,v 1.7.38.1 2010/12/29 07:19:28 matt Exp $");
 
 #include <sys/param.h>
@@ -141,8 +141,11 @@
 			  IOC_WRITE_PC_UART2 | IOC_WRITE_PC_UART1);
 
+/* XXX: the firmware should have taken care of this already */
+#if 0
 	if (mach_subtype == MACH_SGI_IP22_GUINNESS) {
 		bus_space_write_4(sc->sc_iot, sc->sc_ioh, IOC_GCSEL, 0xff);
 		bus_space_write_4(sc->sc_iot, sc->sc_ioh, IOC_GCREG, 0xff);
 	}
+#endif
 
 #if defined(BLINK)
Index: /trunk/src/sys/arch/sgimips/sgimips/clock.c
===================================================================
--- /trunk/src/sys/arch/sgimips/sgimips/clock.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/sgimips/clock.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: clock.c,v 1.20 2006/12/29 07:00:11 rumble Exp $	*/
+/*	$NetBSD: clock.c,v 1.20.66.1 2010/12/29 07:15:48 matt Exp $	*/
 
 /*
@@ -80,5 +80,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.20 2006/12/29 07:00:11 rumble Exp $");
+__KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.20.66.1 2010/12/29 07:15:48 matt Exp $");
 
 #include <sys/param.h>
@@ -86,4 +86,5 @@
 #include <sys/kernel.h>
 #include <sys/systm.h>
+#include <sys/cpu.h>
 #include <machine/sysconf.h>
 
@@ -96,8 +97,8 @@
 #include <sgimips/sgimips/clockvar.h>
 
-u_int32_t next_clk_intr;
-u_int32_t missed_clk_intrs;
+uint32_t next_clk_intr;
+uint32_t missed_clk_intrs;
 
-void mips3_clock_intr(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+void mips3_clock_intr(vaddr_t, uint32_t, uint32_t);
 
 /*
@@ -130,5 +131,5 @@
 		/* int(4) will take care of our clocks */
 		/* enable hardware interrupts including hardclock(9) */
-		_splnone();
+		spl0();
 		break;
 #endif /* MIPS1 */
@@ -149,6 +150,5 @@
 #if defined(MIPS3)
 void
-mips3_clock_intr(u_int32_t status, u_int32_t cause, u_int32_t pc,
-		 u_int32_t ipending)
+mips3_clock_intr(vaddr_t pc, uint32_t status, uint32_t pending)
 {
 	struct clockframe cf;
@@ -156,4 +156,5 @@
 	cf.pc = pc;
 	cf.sr = status;
+	cf.intr = (curcpu()->ci_idepth > 1);
 	mips3_clockintr(&cf);
 }
Index: /trunk/src/sys/arch/sgimips/sgimips/cpu.c
===================================================================
--- /trunk/src/sys/arch/sgimips/sgimips/cpu.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/sgimips/cpu.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cpu.c,v 1.21.36.3 2010/02/05 07:39:54 matt Exp $	*/
+/*	$NetBSD: cpu.c,v 1.21.36.4 2010/12/29 07:15:48 matt Exp $	*/
 
 /*
@@ -36,5 +36,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.21.36.3 2010/02/05 07:39:54 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.21.36.4 2010/12/29 07:15:48 matt Exp $");
 
 #include <sys/param.h>
@@ -56,9 +56,7 @@
 static int	cpu_match(struct device *, struct cfdata *, void *);
 static void	cpu_attach(struct device *, struct device *, void *);
-void		cpu_intr(u_int32_t, u_int32_t, vaddr_t, u_int32_t);
+void		cpu_intr(int, vaddr_t, uint32_t);
 void *cpu_intr_establish(int, int, int (*func)(void *), void *);
-void		mips1_fpu_intr(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
-
-void	MachFPInterrupt(u_int32_t, u_int32_t, u_int32_t, struct trapframe *);
+void		mips1_fpu_intr(vaddr_t, u_int32_t, u_int32_t);
 
 static struct evcnt mips_int0_evcnt =
@@ -79,7 +77,4 @@
 static struct evcnt mips_int5_evcnt =
 	EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "mips", "int 5");
-
-static struct evcnt mips_spurint_evcnt =
-	EVCNT_INITIALIZER(EVCNT_TYPE_INTR, NULL, "mips", "spurious interrupts");
 
 CFATTACH_DECL_NEW(cpu, 0,
@@ -109,63 +104,46 @@
  */
 void
-cpu_intr(u_int32_t status, u_int32_t cause, vaddr_t pc, u_int32_t ipending)
+cpu_intr(int ppl, vaddr_t pc, uint32_t status)
 {
-	struct cpu_info *ci;
+	uint32_t pending;
+	int ipl;
 
-	ci = curcpu();
-	ci->ci_idepth++;
 	uvmexp.intrs++;
 
 	(void)(*platform.watchdog_reset)();
 
-	if (ipending & MIPS_HARD_INT_MASK) {
-        	if (ipending & MIPS_INT_MASK_5) {
-               		(void)(*platform.intr5)(status, cause, pc, ipending);
+	while (ppl < (ipl = splintr(&pending))) {
+		splx(ipl);		/* enable interrupts */
+
+        	if (pending & MIPS_INT_MASK_5) {
+               		(void)(*platform.intr5)(pc, status, pending);
 			mips_int5_evcnt.ev_count++;
-			cause &= ~MIPS_INT_MASK_5;
         	}
 
-		if (ipending & MIPS_INT_MASK_4) {
-			(void)(*platform.intr4)(status, cause, pc, ipending);
+		if (pending & MIPS_INT_MASK_4) {
+               		(void)(*platform.intr4)(pc, status, pending);
 			mips_int4_evcnt.ev_count++;
-			cause &= ~MIPS_INT_MASK_4;
 		}
 
-		if (ipending & MIPS_INT_MASK_3) {
-			(void)(*platform.intr3)(status, cause, pc, ipending);
+		if (pending & MIPS_INT_MASK_3) {
+               		(void)(*platform.intr3)(pc, status, pending);
 			mips_int3_evcnt.ev_count++;
-			cause &= ~MIPS_INT_MASK_3;
 		}
 
-	        if (ipending & MIPS_INT_MASK_2) {
-			(void)(*platform.intr2)(status, cause, pc, ipending);
+	        if (pending & MIPS_INT_MASK_2) {
+               		(void)(*platform.intr2)(pc, status, pending);
 			mips_int2_evcnt.ev_count++;
-			cause &= ~MIPS_INT_MASK_2;
 		}
 
-		if (ipending & MIPS_INT_MASK_1) {
-			(void)(*platform.intr1)(status, cause, pc, ipending);
+		if (pending & MIPS_INT_MASK_1) {
+               		(void)(*platform.intr1)(pc, status, pending);
 			mips_int1_evcnt.ev_count++;
-			cause &= ~MIPS_INT_MASK_1;
 		}
 
-		if (ipending & MIPS_INT_MASK_0) {  
-			(void)(*platform.intr0)(status, cause, pc, ipending);
+		if (pending & MIPS_INT_MASK_0) {  
+               		(void)(*platform.intr0)(pc, status, pending);
 			mips_int0_evcnt.ev_count++;
-			cause &= ~MIPS_INT_MASK_0;
 		}
-
-		if (cause & status & MIPS_HARD_INT_MASK)
-			mips_spurint_evcnt.ev_count++;
 	}
-	ci->ci_idepth--;
-
-#ifdef __HAVE_FAST_SOFTINTS
-	/* software interrupt */
-	ipending &= MIPS_SOFT_INT_MASK;
-	if (ipending == 0)
-		return;
-	softint_process(ipending);
-#endif
 }
 
@@ -177,15 +155,15 @@
 }
 
+#ifdef MIPS1
 void
-mips1_fpu_intr(u_int32_t status, u_int32_t cause, u_int32_t pc,
-    u_int32_t ipending)
+mips1_fpu_intr(vaddr_t pc, uint32_t status, uint32_t pending)
 {
-
 	if (!USERMODE(status))
-		panic("kernel used FPU: PC 0x%08x, CR 0x%08x, SR 0x%08x",
-		    pc, cause, status);
+		panic("kernel used FPU: PC 0x%08x, SR 0x%08x",
+		    pc, status);
 
 #if !defined(NOFPU) && !defined(FPEMUL)
-	MachFPInterrupt(status, cause, pc, curlwp->l_md.md_utf);
+	mips_fpu_intr(pc, curlwp->l_md.md_utf);
 #endif
 }
+#endif
Index: /trunk/src/sys/arch/sgimips/sgimips/machdep.c
===================================================================
--- /trunk/src/sys/arch/sgimips/sgimips/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/sgimips/sgimips/machdep.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: machdep.c,v 1.121.8.5 2010/03/21 17:38:35 cliff Exp $	*/
+/*	$NetBSD: machdep.c,v 1.121.8.6 2010/12/29 07:15:48 matt Exp $	*/
 
 /*
@@ -35,5 +35,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.121.8.5 2010/03/21 17:38:35 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.121.8.6 2010/12/29 07:15:48 matt Exp $");
 
 #include "opt_ddb.h"
@@ -42,4 +42,6 @@
 #include "opt_cputype.h"
 #include "opt_mips_cache.h"
+
+#define __INTR_PRIVATE
 
 #include <sys/param.h>
@@ -129,34 +131,37 @@
 int ncpus;
 
-/* CPU interrupt masks */
-const int *ipl2spl_table;
-
-#define	IPL2SPL_TABLE_COMMON \
-	[IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_1, \
-	[IPL_HIGH] = MIPS_INT_MASK,
-
+#define IPL2SPL_TABLE_COMMON					\
+	[IPL_NONE] =		0,				\
+	[IPL_SOFTCLOCK] =	MIPS_SOFT_INT_MASK_0,		\
+	[IPL_SOFTNET] =		MIPS_SOFT_INT_MASK,		\
+	[IPL_DDB] =		MIPS_INT_MASK,			\
+	[IPL_HIGH] =		MIPS_INT_MASK
+
+/* CPU interrupt sr maps */
 #if defined(MIPS1)
-static const int sgi_ip12_ipl2spl_table[] = {
-	IPL2SPL_TABLE_COMMON
+static const struct ipl_sr_map sgi_ip12_ipl_sr_map = {
+    .sr_bits = {
+	IPL2SPL_TABLE_COMMON,
 	[IPL_VM] = MIPS_INT_MASK_2|MIPS_INT_MASK_1|MIPS_INT_MASK_0|
-	    MIPS_SOFT_INT_MASK_0,
+	    MIPS_SOFT_INT_MASK,
 	[IPL_SCHED] = MIPS_INT_MASK_4|MIPS_INT_MASK_3|MIPS_INT_MASK_2|
-	    MIPS_INT_MASK_1|MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK_0,
+	    MIPS_INT_MASK_1|MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK,
+    },
 };
 #endif /* defined(MIPS1) */
 #if defined(MIPS3)
-static const int sgi_ip2x_ipl2spl_table[] = {
-	IPL2SPL_TABLE_COMMON
-	[IPL_VM] = MIPS_INT_MASK_1|MIPS_INT_MASK_0|
-	    MIPS_SOFT_INT_MASK_1|MIPS_SOFT_INT_MASK_0,
-	[IPL_SCHED] = MIPS_INT_MASK_5|MIPS_INT_MASK_3|MIPS_INT_MASK_2|
-	    MIPS_INT_MASK_1|MIPS_INT_MASK_0|
-	    MIPS_SOFT_INT_MASK_1|MIPS_SOFT_INT_MASK_0,
+static const struct ipl_sr_map sgi_ip2x_ipl_sr_map = {
+    .sr_bits = {
+	IPL2SPL_TABLE_COMMON,
+	[IPL_VM] = MIPS_INT_MASK_1|MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK,
+	[IPL_SCHED] = MIPS_INT_MASK,
+    },
 };
-static const int sgi_ip3x_ipl2spl_table[] = {
-	IPL2SPL_TABLE_COMMON
-	[IPL_VM] = MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK_1|MIPS_SOFT_INT_MASK_0,
-	[IPL_SCHED] = MIPS_INT_MASK_5|MIPS_INT_MASK_0|
-	    MIPS_SOFT_INT_MASK_1|MIPS_SOFT_INT_MASK_0,
+static const struct ipl_sr_map sgi_ip3x_ipl_sr_map = {
+    .sr_bits = {
+	IPL2SPL_TABLE_COMMON,
+	[IPL_VM] = MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK,
+	[IPL_SCHED] = MIPS_INT_MASK_5|MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK,
+    },
 };
 #endif /* defined(MIPS3) */
@@ -171,9 +176,9 @@
 
 #if defined(MIPS1)
-extern void mips1_fpu_intr(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+extern void mips1_fpu_intr(vaddr_t, uint32_t, uint32_t);
 #endif
 
 #if defined(MIPS3)
-extern void mips3_clock_intr(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+extern void mips3_clock_intr(vaddr_t, uint32_t, uint32_t);
 #endif
 
@@ -194,5 +199,5 @@
 static void	unimpl_cons_init(void);
 static void	*unimpl_intr_establish(int, int, int (*)(void *), void *);
-static void	unimpl_intr(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+static void	unimpl_intr(vaddr_t, uint32_t, uint32_t);
 static unsigned	long nulllong(void);
 static void	nullvoid(void);
@@ -223,5 +228,5 @@
  * autoconfiguration or after a panic.  Used as an argument to splx().
  */
-int	safepri = MIPS1_PSL_LOWIPL;
+int	safepri = IPL_HIGH;
 
 extern u_int32_t ssir;
@@ -523,5 +528,5 @@
                 }
 
-		ipl2spl_table = sgi_ip12_ipl2spl_table;
+		ipl_sr_map = sgi_ip12_ipl_sr_map;
 		platform.intr0 = mips1_fpu_intr;
 		break;
@@ -532,17 +537,17 @@
 		i = *(volatile u_int32_t *)MIPS_PHYS_TO_KSEG1(0x1fbd0000);
 		mach_boardrev = (i & 0x7000) >> 12;
-		ipl2spl_table = sgi_ip2x_ipl2spl_table;
+		ipl_sr_map = sgi_ip2x_ipl_sr_map;
 		platform.intr5 = mips3_clock_intr;
 		break;
 	case MACH_SGI_IP22:
-		ipl2spl_table = sgi_ip2x_ipl2spl_table;
+		ipl_sr_map = sgi_ip2x_ipl_sr_map;
 		platform.intr5 = mips3_clock_intr;
 		break;
 	case MACH_SGI_IP30:
-		ipl2spl_table = sgi_ip3x_ipl2spl_table;
+		ipl_sr_map = sgi_ip3x_ipl_sr_map;
 		platform.intr5 = mips3_clock_intr;
 		break;
 	case MACH_SGI_IP32:
-		ipl2spl_table = sgi_ip3x_ipl2spl_table;
+		ipl_sr_map = sgi_ip3x_ipl_sr_map;
 		platform.intr5 = mips3_clock_intr;
 		break;
@@ -877,15 +882,15 @@
 {
 	panic("target init didn't set intr_establish");
-	return (void *)NULL;
+	return NULL;
 }
 
 static void
-unimpl_intr(u_int32_t status, u_int32_t cause, u_int32_t pc, u_int32_t ipending)
-{
-	printf("spurious interrupt, ipending %x\n", ipending);
+unimpl_intr(vaddr_t pc, uint32_t status, uint32_t pending)
+{
+	printf("spurious interrupt pending %#x\n", pending);
 }
 
 static unsigned long
-nulllong()
+nulllong(void)
 {
 	printf("nulllong\n");
@@ -988,9 +993,2 @@
 	}
 }
-
-ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
-	return (ipl_cookie_t){._spl = ipl2spl_table[ipl]};
-}
Index: /trunk/src/sys/arch/tsarmips/conf/files.tsarmips
===================================================================
--- /trunk/src/sys/arch/tsarmips/conf/files.tsarmips	(revision 151)
+++ /trunk/src/sys/arch/tsarmips/conf/files.tsarmips	(revision 152)
@@ -72,6 +72,4 @@
 file	dev/cons.c
 
-file arch/mips/mips/softintr.c
-
 #
 # Machine-independent SCSI drivers
Index: /trunk/src/sys/arch/tsarmips/conf/kern.ldscript
===================================================================
--- /trunk/src/sys/arch/tsarmips/conf/kern.ldscript	(revision 151)
+++ /trunk/src/sys/arch/tsarmips/conf/kern.ldscript	(revision 152)
@@ -19,4 +19,7 @@
     *(.text)
     *(.text.*)
+    __stub_start = . ;
+    *(.stub*)
+    __stub_end = . ;
     *(.gnu.warning)
   } =0
Index: /trunk/src/sys/arch/tsarmips/include/bus.h
===================================================================
--- /trunk/src/sys/arch/tsarmips/include/bus.h	(revision 151)
+++ /trunk/src/sys/arch/tsarmips/include/bus.h	(revision 152)
@@ -34,5 +34,7 @@
 #define _TSARMIPS_BUS_H_
 
-#include <mips/locore.h>
+#include <machine/cpu.h>
+#include <sys/mutex.h>
+#include <machine/locore.h>
 
 /*
Index: /trunk/src/sys/arch/tsarmips/tsarmips/machdep.c
===================================================================
--- /trunk/src/sys/arch/tsarmips/tsarmips/machdep.c	(revision 151)
+++ /trunk/src/sys/arch/tsarmips/tsarmips/machdep.c	(revision 152)
@@ -196,5 +196,5 @@
 	 */
 	printf("mips_vector_init");
-	mips_vector_init(NULL);
+	mips_vector_init(NULL, true);
 	printf(" done\n");
 
@@ -474,4 +474,7 @@
 struct splsw mips_splsw;
 
+extern const mips_locore_jumpvec_t mips32_locore_vec;
+mips_locore_jumpvec_t mips_locore_jumpvec;
+
 struct mips_options mips_options = {
         .mips_cpu_id = 0xffffffff,
@@ -496,5 +499,5 @@
  */
 void
-mips_vector_init(const struct splsw *splsw)
+mips_vector_init(const struct splsw *splsw, bool multicpu_p)
 {
 	struct mips_options * const opts = &mips_options;
@@ -523,4 +526,11 @@
 
 	mips_splsw = std_splsw; /* XXX already done in mach_init */
+
+	mips_locore_atomicvec = mips_llsc_locore_atomicvec;
+
+	mips_locore_jumpvec = mips32_locore_vec;
+
+	mips_locoresw = mips32_locoresw;
+	mips_locoresw.lsw_cpu_idle = mips_wait_idle;
 
 	/*
@@ -562,7 +572,4 @@
 	mips_cp0_status_write(mips_cp0_status_read() & ~MIPS_SR_BEV);
 	printf(" done\n");
-	mips_locoresw = mips32_locoresw;
-
-	CPU_IDLE = mips_wait_idle;
 }
 
@@ -580,5 +587,6 @@
 	u_long stack;
 {
-	struct trapframe *tf = l->l_md.md_utf;
+	struct trapframe * const tf = l->l_md.md_utf;
+	struct pcb * const pcb = lwp_getpcb(l);
 
 	memset(tf, 0, sizeof(struct trapframe));
@@ -587,4 +595,5 @@
         tf->tf_regs[_R_T9] = (int)pack->ep_entry & ~3; /* abicall requirement */
         tf->tf_regs[_R_SR] = PSL_USERSET;
+
 
 	/*
@@ -602,7 +611,6 @@
         tf->tf_regs[_R_A3] = (intptr_t)l->l_proc->p_psstr;
 
-	if (l->l_md.md_flags & MDP_FPUSED)
-		fpudiscard_lwp(l);
-	memset(&l->l_addr->u_pcb.pcb_fpregs, 0, sizeof(struct fpreg));
+	fpu_discard();
+	memset(&pcb->pcb_fpregs, 0, sizeof(struct fpreg));
 	l->l_md.md_flags &= ~MDP_FPUSED;
 	l->l_md.md_ss_addr = 0;
Index: /trunk/src/sys/arch/x86/include/cpu.h
===================================================================
--- /trunk/src/sys/arch/x86/include/cpu.h	(revision 151)
+++ /trunk/src/sys/arch/x86/include/cpu.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cpu.h,v 1.9.10.1 2010/04/21 00:33:45 matt Exp $	*/
+/*	$NetBSD: cpu.h,v 1.9.10.2 2011/05/20 08:11:24 matt Exp $	*/
 
 /*-
@@ -305,7 +305,4 @@
 extern int biosbasemem;
 extern int biosextmem;
-extern unsigned int cpu_feature;
-extern unsigned int cpu_feature2;
-extern unsigned int cpu_feature_padlock;
 extern int cpu;
 extern int cpuid_level;
Index: /trunk/src/sys/arch/x86/include/cpuvar.h
===================================================================
--- /trunk/src/sys/arch/x86/include/cpuvar.h	(revision 151)
+++ /trunk/src/sys/arch/x86/include/cpuvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/* 	$NetBSD: cpuvar.h,v 1.27.16.1 2010/04/21 00:33:45 matt Exp $ */
+/* 	$NetBSD: cpuvar.h,v 1.27.16.2 2011/05/20 08:11:24 matt Exp $ */
 
 /*-
@@ -143,4 +143,9 @@
 extern bool x86_mp_online;
 
+extern uint32_t cpu_feature;
+extern uint32_t cpu_feature2;
+extern uint32_t cpu_feature3;
+extern uint32_t cpu_feature4;
+extern uint32_t cpu_feature_padlock;
 #endif
 
Index: /trunk/src/sys/arch/x86/x86/cpu.c
===================================================================
--- /trunk/src/sys/arch/x86/x86/cpu.c	(revision 151)
+++ /trunk/src/sys/arch/x86/x86/cpu.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cpu.c,v 1.57.4.3 2009/02/02 20:10:16 snj Exp $	*/
+/*	$NetBSD: cpu.c,v 1.57.4.3.4.1 2011/05/20 08:11:24 matt Exp $	*/
 
 /*-
@@ -63,5 +63,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.57.4.3 2009/02/02 20:10:16 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.57.4.3.4.1 2011/05/20 08:11:24 matt Exp $");
 
 #include "opt_ddb.h"
@@ -167,4 +167,11 @@
 uint32_t cpus_attached = 0;
 uint32_t cpus_running = 0;
+
+/* CPUID feature flags */
+uint32_t cpu_feature;  /* %edx */
+uint32_t cpu_feature2; /* %ecx */
+uint32_t cpu_feature3; /* extended features - %edx */
+uint32_t cpu_feature4; /* extended features - %ecx */
+uint32_t cpu_feature_padlock; /* VIA PadLock feature flags */
 
 extern char x86_64_doubleflt_stack[];
@@ -970,5 +977,5 @@
 	}
 
-	if (cpu_feature & CPUID_NOX)
+	if (cpu_feature3 & CPUID_NOX)
 		wrmsr(MSR_EFER, rdmsr(MSR_EFER) | EFER_NXE);
 }
Index: /trunk/src/sys/arch/x86/x86/identcpu.c
===================================================================
--- /trunk/src/sys/arch/x86/x86/identcpu.c	(revision 151)
+++ /trunk/src/sys/arch/x86/x86/identcpu.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: identcpu.c,v 1.10.4.2.4.1 2010/04/21 00:33:46 matt Exp $	*/
+/*	$NetBSD: identcpu.c,v 1.10.4.2.4.2 2011/05/20 08:11:24 matt Exp $	*/
 
 /*-
@@ -31,5 +31,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: identcpu.c,v 1.10.4.2.4.1 2010/04/21 00:33:46 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: identcpu.c,v 1.10.4.2.4.2 2011/05/20 08:11:24 matt Exp $");
 
 #include "opt_enhanced_speedstep.h"
@@ -288,6 +288,6 @@
 	if (descs[0] >= 0x80000001) {
 		x86_cpuid(0x80000001, descs);
-		ci->ci_feature3_flags |= descs[3]; /* %edx */
-		ci->ci_feature4_flags = descs[2];  /* %ecx */
+		ci->ci_feature4_flags = descs[2]; /* %ecx */
+		ci->ci_feature3_flags = descs[3]; /* %edx */
 	}
 
@@ -624,8 +624,10 @@
 	}
 
-	if ((cpu_feature | cpu_feature2) == 0) {
+	if (ci == &cpu_info_primary) {
 		/* If first. */
 		cpu_feature = ci->ci_feature_flags;
 		cpu_feature2 = ci->ci_feature2_flags;
+		cpu_feature3 = ci->ci_feature3_flags;
+		cpu_feature4 = ci->ci_feature4_flags;
 		/* Early patch of text segment. */
 #ifndef XEN
@@ -636,4 +638,6 @@
 		cpu_feature &= ci->ci_feature_flags;
 		cpu_feature2 &= ci->ci_feature2_flags;
+		cpu_feature3 &= ci->ci_feature3_flags;
+		cpu_feature4 &= ci->ci_feature4_flags;
 	}
 }
Index: /trunk/src/sys/arch/x86/x86/pmap.c
===================================================================
--- /trunk/src/sys/arch/x86/x86/pmap.c	(revision 151)
+++ /trunk/src/sys/arch/x86/x86/pmap.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: pmap.c,v 1.74.4.1.4.1 2010/04/21 00:33:46 matt Exp $	*/
+/*	$NetBSD: pmap.c,v 1.74.4.1.4.2 2011/05/20 08:11:24 matt Exp $	*/
 
 /*
@@ -155,5 +155,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.74.4.1.4.1 2010/04/21 00:33:46 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.74.4.1.4.2 2011/05/20 08:11:24 matt Exp $");
 
 #include "opt_user_ldt.h"
@@ -1075,5 +1075,5 @@
 	     PG_V | PG_k;
 #ifndef XEN
-	if ((cpu_feature & CPUID_NOX) && !(prot & VM_PROT_EXECUTE))
+	if ((cpu_feature3 & CPUID_NOX) && !(prot & VM_PROT_EXECUTE))
 		npte |= PG_NX;
 #endif
@@ -1200,5 +1200,5 @@
 	unsigned long p1i;
 	vaddr_t kva_end;
-	pt_entry_t pg_nx = (cpu_feature & CPUID_NOX ? PG_NX : 0);
+	pt_entry_t pg_nx = (cpu_feature3 & CPUID_NOX ? PG_NX : 0);
 #endif
 
Index: /trunk/src/sys/arch/x86/x86/via_padlock.c
===================================================================
--- /trunk/src/sys/arch/x86/x86/via_padlock.c	(revision 151)
+++ /trunk/src/sys/arch/x86/x86/via_padlock.c	(revision 152)
@@ -1,4 +1,4 @@
 /*	$OpenBSD: via.c,v 1.8 2006/11/17 07:47:56 tom Exp $	*/
-/*	$NetBSD: via_padlock.c,v 1.9 2008/04/16 16:06:52 cegger Exp $ */
+/*	$NetBSD: via_padlock.c,v 1.9.20.1 2011/05/20 08:11:25 matt Exp $ */
 
 /*-
@@ -21,5 +21,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: via_padlock.c,v 1.9 2008/04/16 16:06:52 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: via_padlock.c,v 1.9.20.1 2011/05/20 08:11:25 matt Exp $");
 
 #include "opt_viapadlock.h"
@@ -37,4 +37,5 @@
 
 #include <machine/cpufunc.h>
+#include <machine/cpuvar.h>
 
 #include <opencrypto/cryptodev.h>
Index: /trunk/src/sys/arch/xen/x86/cpu.c
===================================================================
--- /trunk/src/sys/arch/xen/x86/cpu.c	(revision 151)
+++ /trunk/src/sys/arch/xen/x86/cpu.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cpu.c,v 1.28.4.1 2008/11/13 00:04:07 snj Exp $	*/
+/*	$NetBSD: cpu.c,v 1.28.4.1.4.1 2011/05/20 08:11:25 matt Exp $	*/
 /* NetBSD: cpu.c,v 1.18 2004/02/20 17:35:01 yamt Exp  */
 
@@ -67,5 +67,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.28.4.1 2008/11/13 00:04:07 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.28.4.1.4.1 2011/05/20 08:11:25 matt Exp $");
 
 #include "opt_ddb.h"
@@ -173,4 +173,11 @@
 uint32_t cpus_attached = 0;
 uint32_t cpus_running = 0;
+
+/* CPUID feature flags */
+uint32_t cpu_feature;  /* %edx */
+uint32_t cpu_feature2; /* %ecx */
+uint32_t cpu_feature3; /* extended features - %edx */
+uint32_t cpu_feature4; /* extended features - %ecx */
+uint32_t cpu_feature_padlock; /* VIA PadLock feature flags */
 
 bool x86_mp_online;
@@ -680,5 +687,4 @@
 	struct cpu_info *ci = (struct cpu_info *)v;
 	int s, i;
-	uint32_t blacklist_features;
 
 #ifdef __x86_64__
@@ -689,7 +695,6 @@
 
 	/* not on Xen... */
-	blacklist_features = ~(CPUID_PGE|CPUID_PSE|CPUID_MTRR|CPUID_FXSR|CPUID_NOX); /* XXX add CPUID_SVM */
-
-	cpu_feature &= blacklist_features;
+	cpu_feature &= ~(CPUID_PGE|CPUID_PSE|CPUID_MTRR|CPUID_FXSR); /* XXX add CPUID_SVM */
+	cpu_feature3 &= ~CPUID_NOX;
 
 	KDASSERT((ci->ci_flags & CPUF_PRESENT) == 0);
Index: /trunk/src/sys/coda/coda.h
===================================================================
--- /trunk/src/sys/coda/coda.h	(revision 151)
+++ /trunk/src/sys/coda/coda.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: coda.h,v 1.14 2007/03/04 06:01:11 christos Exp $ */
+/* $NetBSD: coda.h,v 1.14.60.1 2011/05/20 08:11:25 matt Exp $ */
 
 /*
@@ -794,6 +794,6 @@
 struct ViceIoctl {
         void *in, *out;		/* Data to be transferred in, or out */
-        short in_size;          /* Size of input buffer <= 2K */
-        short out_size;         /* Maximum size of output buffer, <= 2K */
+        unsigned short in_size; /* Size of input buffer <= 2K */
+        unsigned short out_size;/* Maximum size of output buffer, <= 2K */
 };
 
Index: /trunk/src/sys/coda/coda_venus.c
===================================================================
--- /trunk/src/sys/coda/coda_venus.c	(revision 151)
+++ /trunk/src/sys/coda/coda_venus.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: coda_venus.c,v 1.25 2007/03/04 06:01:12 christos Exp $	*/
+/*	$NetBSD: coda_venus.c,v 1.25.60.1 2011/05/20 08:11:25 matt Exp $	*/
 
 /*
@@ -33,5 +33,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coda_venus.c,v 1.25 2007/03/04 06:01:12 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coda_venus.c,v 1.25.60.1 2011/05/20 08:11:25 matt Exp $");
 
 #include <sys/param.h>
@@ -309,5 +309,5 @@
     inp->cmd |= (tmp & IOCPARM_MASK) <<	16;
 
-    if (iap->vi.in_size < 0 || iap->vi.in_size > VC_MAXMSGSIZE) {
+    if (iap->vi.in_size > VC_MAXMSGSIZE || iap->vi.out_size > VC_MAXMSGSIZE) {
 	CODA_FREE(inp, coda_ioctl_size);
 	return (EINVAL);
Index: /trunk/src/sys/coda/coda_vnops.c
===================================================================
--- /trunk/src/sys/coda/coda_vnops.c	(revision 151)
+++ /trunk/src/sys/coda/coda_vnops.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: coda_vnops.c,v 1.68 2008/01/30 09:50:19 ad Exp $	*/
+/*	$NetBSD: coda_vnops.c,v 1.68.28.1 2011/05/20 08:11:25 matt Exp $	*/
 
 /*
@@ -47,5 +47,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.68 2008/01/30 09:50:19 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.68.28.1 2011/05/20 08:11:25 matt Exp $");
 
 #include <sys/param.h>
@@ -542,5 +542,5 @@
     }
 
-    if (iap->vi.in_size > VC_MAXDATASIZE) {
+    if (iap->vi.in_size > VC_MAXDATASIZE || iap->vi.out_size > VC_MAXDATASIZE) {
 	vrele(tvp);
 	return(EINVAL);
Index: /trunk/src/sys/compat/netbsd32/netbsd32_conv.h
===================================================================
--- /trunk/src/sys/compat/netbsd32/netbsd32_conv.h	(revision 151)
+++ /trunk/src/sys/compat/netbsd32/netbsd32_conv.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: netbsd32_conv.h,v 1.19 2008/06/02 14:12:08 njoly Exp $	*/
+/*	$NetBSD: netbsd32_conv.h,v 1.19.12.1 2010/06/09 18:13:46 matt Exp $	*/
 
 /*
@@ -235,4 +235,5 @@
 	mhp->msg_name = NETBSD32PTR64(mhp32->msg_name);
 	mhp->msg_namelen = mhp32->msg_namelen;
+	mhp->msg_iov = NETBSD32PTR64(mhp32->msg_iov);
 	mhp->msg_iovlen = (size_t)mhp32->msg_iovlen;
 	mhp->msg_control = NETBSD32PTR64(mhp32->msg_control);
Index: /trunk/src/sys/compat/netbsd32/netbsd32_socket.c
===================================================================
--- /trunk/src/sys/compat/netbsd32/netbsd32_socket.c	(revision 151)
+++ /trunk/src/sys/compat/netbsd32/netbsd32_socket.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: netbsd32_socket.c,v 1.33 2008/06/24 11:18:15 ad Exp $	*/
+/*	$NetBSD: netbsd32_socket.c,v 1.33.12.1 2010/06/09 18:13:46 matt Exp $	*/
 
 /*
@@ -28,5 +28,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_socket.c,v 1.33 2008/06/24 11:18:15 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_socket.c,v 1.33.12.1 2010/06/09 18:13:46 matt Exp $");
 
 #include <sys/param.h>
@@ -78,4 +78,5 @@
 	} else 
 		iov = aiov;
+
 	msg.msg_flags = SCARG(uap, flags);
 	uiov = (struct iovec *)NETBSD32PTR64(msg.msg_iov);
@@ -238,8 +239,6 @@
 		       sizeof(struct iovec) * (u_int)msg.msg_iovlen, M_IOV,
 		       M_WAITOK);
-	} else if ((u_int)msg.msg_iovlen > 0)
+	} else
 		iov = aiov;
-	else
-		return (EMSGSIZE);
 
 	error = netbsd32_to_iovecin((struct netbsd32_iovec *)msg.msg_iov,
Index: /trunk/src/sys/conf/copyright
===================================================================
--- /trunk/src/sys/conf/copyright	(revision 151)
+++ /trunk/src/sys/conf/copyright	(revision 152)
@@ -1,4 +1,4 @@
 Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-    2006, 2007, 2008, 2009
+    2006, 2007, 2008, 2009, 2010, 2011
     The NetBSD Foundation, Inc.  All rights reserved.
 Copyright (c) 1982, 1986, 1989, 1991, 1993
Index: /trunk/src/sys/crypto/des/podd.h
===================================================================
--- /trunk/src/sys/crypto/des/podd.h	(revision 151)
+++ /trunk/src/sys/crypto/des/podd.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: podd.h,v 1.1 2000/06/14 19:45:36 thorpej Exp $	*/
+/*	$NetBSD: podd.h,v 1.1.1.1 2000/06/14 19:45:36 thorpej Exp $	*/
 /*	$KAME: podd.h,v 1.3 2000/03/27 04:36:34 sumikawa Exp $	*/
 
Index: /trunk/src/sys/crypto/des/sk.h
===================================================================
--- /trunk/src/sys/crypto/des/sk.h	(revision 151)
+++ /trunk/src/sys/crypto/des/sk.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sk.h,v 1.1 2000/06/14 19:45:36 thorpej Exp $	*/
+/*	$NetBSD: sk.h,v 1.1.1.1 2000/06/14 19:45:36 thorpej Exp $	*/
 /*	$KAME: sk.h,v 1.3 2000/03/27 04:36:34 sumikawa Exp $	*/
 
Index: /trunk/src/sys/dev/ic/com.c
===================================================================
--- /trunk/src/sys/dev/ic/com.c	(revision 151)
+++ /trunk/src/sys/dev/ic/com.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: com.c,v 1.286.10.1 2009/09/13 03:32:33 cliff Exp $ */
+/* com.c,v 1.286.10.1 2009/09/13 03:32:33 cliff Exp */
 
 /*-
@@ -67,5 +67,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.286.10.1 2009/09/13 03:32:33 cliff Exp $");
+__KERNEL_RCSID(0, "com.c,v 1.286.10.1 2009/09/13 03:32:33 cliff Exp");
 
 #include "opt_com.h"
@@ -1469,4 +1469,5 @@
 	if (sc->sc_type == COM_TYPE_AU1x00) {
 		/* alchemy has single separate 16-bit clock divisor register */
+		/* XXX endian */
 		CSR_WRITE_2(regsp, COM_REG_DLBL, sc->sc_dlbl +
 		    (sc->sc_dlbh << 8));
@@ -2155,5 +2156,12 @@
 	if (frequency != -1) {
 		rate = comspeed(rate, frequency, type);
-		if (type != COM_TYPE_AU1x00) {
+		if (type == COM_TYPE_AU1x00) {
+			/*
+			 * alchemy has single separate
+			 * 16-bit clock divisor register
+			 * XXX endian
+			 */
+			CSR_WRITE_2(regsp, COM_REG_DLBL, rate);
+		} else {
 			/* no EFR on alchemy */ 
 			if (type != COM_TYPE_16550_NOERS) {
@@ -2164,6 +2172,4 @@
 			CSR_WRITE_1(regsp, COM_REG_DLBL, rate & 0xff);
 			CSR_WRITE_1(regsp, COM_REG_DLBH, rate >> 8);
-		} else {
-			CSR_WRITE_1(regsp, COM_REG_DLBL, rate);
 		}
 	}
Index: /trunk/src/sys/dev/ic/siisata.c
===================================================================
--- /trunk/src/sys/dev/ic/siisata.c	(revision 151)
+++ /trunk/src/sys/dev/ic/siisata.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: siisata.c,v 1.2.14.1 2010/04/21 00:27:37 matt Exp $ */
+/* $NetBSD: siisata.c,v 1.2.14.2 2011/04/29 08:20:50 matt Exp $ */
 
 /* from ahcisata_core.c */
@@ -1194,5 +1194,5 @@
 	sc = (struct siisata_softc *)schp->ata_channel.ch_atac;
 
-	KASSERTMSG(((schp->sch_active_slots & __BIT(slot)) == __BIT(slot)),
+	KASSERTMSG(((schp->sch_active_slots & __BIT(slot)) == 0),
 	    ("%s: trying to activate active slot %d", SIISATANAME(sc), slot));
 
@@ -1216,5 +1216,5 @@
 	sc = (struct siisata_softc *)schp->ata_channel.ch_atac;
 
-	KASSERTMSG(((schp->sch_active_slots & __BIT(slot)) == 0),
+	KASSERTMSG(((schp->sch_active_slots & __BIT(slot)) != 0),
 	    ("%s: trying to deactivate inactive slot %d", SIISATANAME(sc),
 	    slot));
Index: /trunk/src/sys/dev/mii/miidevs
===================================================================
--- /trunk/src/sys/dev/mii/miidevs	(revision 151)
+++ /trunk/src/sys/dev/mii/miidevs	(revision 152)
@@ -1,3 +1,3 @@
-$NetBSD: miidevs,v 1.78.10.2 2010/04/20 22:55:48 matt Exp $
+$NetBSD: miidevs,v 1.78.10.5 2011/05/20 14:41:01 matt Exp $
 
 /*-
@@ -115,4 +115,5 @@
 model ATTANSIC L1		0x0001 L1 10/100/1000 PHY
 model ATTANSIC L2		0x0002 L2 10/100 PHY
+model ATTANSIC AR8316		0x0004 AR8316 Switch
 
 /* Altima Communications PHYs */
Index: /trunk/src/sys/dev/mii/miidevs.h
===================================================================
--- /trunk/src/sys/dev/mii/miidevs.h	(revision 151)
+++ /trunk/src/sys/dev/mii/miidevs.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: miidevs.h,v 1.81.10.2 2010/04/21 00:27:39 matt Exp $	*/
+/*	$NetBSD: miidevs.h,v 1.81.10.3 2011/05/20 14:42:20 matt Exp $	*/
 
 /*
@@ -5,5 +5,5 @@
  *
  * generated from:
- *	NetBSD: miidevs,v 1.78.10.2 2010/04/20 22:55:48 matt Exp
+ *	NetBSD: miidevs,v 1.78.10.5 2011/05/20 14:41:01 matt Exp
  */
 
@@ -126,4 +126,6 @@
 #define	MII_MODEL_ATTANSIC_L2	0x0002
 #define	MII_STR_ATTANSIC_L2	"L2 10/100 PHY"
+#define	MII_MODEL_ATTANSIC_AR8316	0x0004
+#define	MII_STR_ATTANSIC_AR8316	"AR8316 Switch"
 
 /* Altima Communications PHYs */
Index: /trunk/src/sys/dev/mii/miidevs_data.h
===================================================================
--- /trunk/src/sys/dev/mii/miidevs_data.h	(revision 151)
+++ /trunk/src/sys/dev/mii/miidevs_data.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: miidevs_data.h,v 1.71.10.2 2010/04/21 00:27:39 matt Exp $	*/
+/*	$NetBSD: miidevs_data.h,v 1.71.10.3 2011/05/20 14:42:20 matt Exp $	*/
 
 /*
@@ -5,5 +5,5 @@
  *
  * generated from:
- *	NetBSD: miidevs,v 1.78.10.2 2010/04/20 22:55:48 matt Exp
+ *	NetBSD: miidevs,v 1.78.10.5 2011/05/20 14:41:01 matt Exp
  */
 
@@ -42,4 +42,5 @@
  { MII_OUI_ATTANSIC, MII_MODEL_ATTANSIC_L1, MII_STR_ATTANSIC_L1 },
  { MII_OUI_ATTANSIC, MII_MODEL_ATTANSIC_L2, MII_STR_ATTANSIC_L2 },
+ { MII_OUI_ATTANSIC, MII_MODEL_ATTANSIC_AR8316, MII_STR_ATTANSIC_AR8316 },
  { MII_OUI_ALTIMA, MII_MODEL_ALTIMA_ACXXX, MII_STR_ALTIMA_ACXXX },
  { MII_OUI_ALTIMA, MII_MODEL_ALTIMA_AC101, MII_STR_ALTIMA_AC101 },
Index: /trunk/src/sys/dev/pci/siisata_pci.c
===================================================================
--- /trunk/src/sys/dev/pci/siisata_pci.c	(revision 151)
+++ /trunk/src/sys/dev/pci/siisata_pci.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: siisata_pci.c,v 1.1.14.1.4.1 2010/04/21 00:27:49 matt Exp $ */
+/* $NetBSD: siisata_pci.c,v 1.1.14.1.4.2 2011/04/29 08:21:25 matt Exp $ */
 
 /*
@@ -92,4 +92,10 @@
 
 static const struct siisata_pci_board siisata_pci_boards[] = {
+	{
+		.spb_vend = PCI_VENDOR_CMDTECH,
+		.spb_prod = PCI_PRODUCT_CMDTECH_3114,
+		.spb_port = 4,
+		.spb_chip = 3114,
+	},
 	{
 		.spb_vend = PCI_VENDOR_CMDTECH,
Index: /trunk/src/sys/dev/usb/ehci.c
===================================================================
--- /trunk/src/sys/dev/usb/ehci.c	(revision 151)
+++ /trunk/src/sys/dev/usb/ehci.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ehci.c,v 1.154.4.1 2008/11/29 20:47:05 bouyer Exp $ */
+/*	$NetBSD: ehci.c,v 1.154.4.1.4.1 2011/05/20 08:11:26 matt Exp $ */
 
 /*
@@ -53,5 +53,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.154.4.1 2008/11/29 20:47:05 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.154.4.1.4.1 2011/05/20 08:11:26 matt Exp $");
 
 #include "ohci.h"
@@ -1616,9 +1616,12 @@
 		sqh->qh.qh_endphub = htole32(
 		    EHCI_QH_SET_MULT(1) |
-		    EHCI_QH_SET_HUBA(hshubaddr) |
-		    EHCI_QH_SET_PORT(hshubport) |
-		    EHCI_QH_SET_CMASK(0x08) | /* XXX */
 		    EHCI_QH_SET_SMASK(xfertype == UE_INTERRUPT ? 0x02 : 0)
 		    );
+		if (speed != EHCI_QH_SPEED_HIGH)
+			sqh->qh.qh_endphub |= htole32(
+			    EHCI_QH_SET_PORT(hshubport) |
+			    EHCI_QH_SET_HUBA(hshubaddr) |
+			    EHCI_QH_SET_CMASK(0x08) /* XXX */
+			);
 		sqh->qh.qh_curqtd = EHCI_NULL;
 		/* Fill the overlay qTD */
Index: /trunk/src/sys/dist/ipf/netinet/ip_fil_netbsd.c
===================================================================
--- /trunk/src/sys/dist/ipf/netinet/ip_fil_netbsd.c	(revision 151)
+++ /trunk/src/sys/dist/ipf/netinet/ip_fil_netbsd.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ip_fil_netbsd.c,v 1.46.8.1.2.1.2.1 2010/04/21 00:27:55 matt Exp $	*/
+/*	$NetBSD: ip_fil_netbsd.c,v 1.46.8.1.2.1.2.2 2011/05/20 08:11:26 matt Exp $	*/
 
 /*
@@ -9,5 +9,5 @@
 #if defined(__NetBSD__)
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_fil_netbsd.c,v 1.46.8.1.2.1.2.1 2010/04/21 00:27:55 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_fil_netbsd.c,v 1.46.8.1.2.1.2.2 2011/05/20 08:11:26 matt Exp $");
 #else
 static const char sccsid[] = "@(#)ip_fil.c	2.41 6/5/96 (C) 1993-2000 Darren Reed";
@@ -1003,4 +1003,5 @@
 		hlen = sizeof(ip_t);
 		ohlen = fin->fin_hlen;
+		iclen = hlen + offsetof(struct icmp, icmp_ip) + ohlen;
 		if (fin->fin_hlen < fin->fin_plen)
 			xtra = MIN(fin->fin_dlen, 8);
@@ -1013,10 +1014,10 @@
 		hlen = sizeof(ip6_t);
 		ohlen = sizeof(ip6_t);
+		iclen = hlen + offsetof(struct icmp, icmp_ip) + ohlen;
 		type = icmptoicmp6types[type];
 		if (type == ICMP6_DST_UNREACH)
 			code = icmptoicmp6unreach[code];
 
-		if (hlen + sizeof(*icmp) + max_linkhdr +
-		    fin->fin_plen > avail) {
+		if (iclen + max_linkhdr + fin->fin_plen > avail) {
 			MCLGET(m, M_DONTWAIT);
 			if (m == NULL)
@@ -1029,5 +1030,12 @@
 		}
 		xtra = MIN(fin->fin_plen,
-			   avail - hlen - sizeof(*icmp) - max_linkhdr);
+			   avail - iclen - max_linkhdr);
+		/* RFC4443 asks for 'as much of invoking packet
+		 * as possible without the ICMPv6 packet exceeding
+		 * the minimum IPv6 MTU'
+		 * fr_send_ip also drops packets larger than the
+		 * link mtu
+		 */
+		xtra = MIN(xtra, IPV6_MMTU - iclen);
 		if (dst == 0) {
 			if (fr_ifpaddr(6, FRI_NORMAL, ifp,
@@ -1045,5 +1053,4 @@
 	}
 
-	iclen = hlen + sizeof(*icmp);
 	avail -= (max_linkhdr + iclen);
 	if (avail < 0) {
@@ -1532,7 +1539,5 @@
 	{
 # if (__NetBSD_Version__ >= 106010000)
-#  if (__NetBSD_Version__ >= 399001400)
-		struct in6_ifextra *ife;
-#  else
+#  if (__NetBSD_Version__ < 399001400)
 		struct in6_addr finaldst = fin->fin_dst6;
 		int frag;
@@ -1554,6 +1559,5 @@
 # else
 #  if (__NetBSD_Version__ >= 399001400)
-		ife = (struct in6_ifextra *)(ifp)->if_afdata[AF_INET6];
-		mtu = ife->nd_ifinfo[ifp->if_index].linkmtu;
+		mtu = IN6_LINKMTU(ifp);
 #  else
 		error = ip6_getpmtu(ro, ro, ifp, &finaldst, &mtu, &frag);
Index: /trunk/src/sys/gdbscripts/lwps
===================================================================
--- /trunk/src/sys/gdbscripts/lwps	(revision 151)
+++ /trunk/src/sys/gdbscripts/lwps	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: lwps,v 1.1 2008/02/20 20:56:35 ad Exp $
+#	$NetBSD: lwps,v 1.1.32.1 2011/05/20 08:11:27 matt Exp $
 
 define lwps
@@ -20,5 +20,5 @@
 					printf " (%s)", (char *)$l->l_wmesg
 				end
-				set $l = $l->l_list.le_next
+				set $l = $l->l_sibling.le_next
 				printf "\n"
 				set $j++
Index: /trunk/src/sys/kern/exec_subr.c
===================================================================
--- /trunk/src/sys/kern/exec_subr.c	(revision 151)
+++ /trunk/src/sys/kern/exec_subr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: exec_subr.c,v 1.61.8.1 2009/04/01 00:25:22 snj Exp $	*/
+/*	$NetBSD: exec_subr.c,v 1.61.8.1.4.1 2011/05/20 08:11:27 matt Exp $	*/
 
 /*
@@ -32,5 +32,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exec_subr.c,v 1.61.8.1 2009/04/01 00:25:22 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exec_subr.c,v 1.61.8.1.4.1 2011/05/20 08:11:27 matt Exp $");
 
 #include "opt_pax.h"
@@ -387,4 +387,5 @@
 		max_stack_size = MAXSSIZ;
 	}
+	epp->ep_ssize = l->l_proc->p_rlimit[RLIMIT_STACK].rlim_cur;
 
 #ifdef PAX_ASLR
@@ -396,5 +397,4 @@
 	epp->ep_maxsaddr = (u_long)STACK_GROW(epp->ep_minsaddr,
 		max_stack_size);
-	epp->ep_ssize = l->l_proc->p_rlimit[RLIMIT_STACK].rlim_cur;
 
 	/*
@@ -411,9 +411,9 @@
 	noaccess_linear_min = (u_long)STACK_ALLOC(STACK_GROW(epp->ep_minsaddr,
 	    access_size), noaccess_size);
-	if (noaccess_size > 0) {
+	if (noaccess_size > 0 && noaccess_size <= MAXSSIZ) {
 		NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, noaccess_size,
 		    noaccess_linear_min, NULL, 0, VM_PROT_NONE, VMCMD_STACK);
 	}
-	KASSERT(access_size > 0);
+	KASSERT(access_size > 0 && access_size <= MAXSSIZ);
 	NEW_VMCMD2(&epp->ep_vmcmds, vmcmd_map_zero, access_size,
 	    access_linear_min, NULL, 0, VM_PROT_READ | VM_PROT_WRITE,
Index: /trunk/src/sys/kern/kern_cctr.c
===================================================================
--- /trunk/src/sys/kern/kern_cctr.c	(revision 151)
+++ /trunk/src/sys/kern/kern_cctr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_cctr.c,v 1.8 2008/05/19 17:06:02 ad Exp $	*/
+/*	$NetBSD: kern_cctr.c,v 1.8.14.1 2011/02/05 06:00:13 cliff Exp $	*/
 
 /*-
@@ -76,5 +76,7 @@
 #include <sys/cdefs.h>
 /* __FBSDID("$FreeBSD: src/sys/i386/i386/tsc.c,v 1.204 2003/10/21 18:28:34 silby Exp $"); */
-__KERNEL_RCSID(0, "$NetBSD: kern_cctr.c,v 1.8 2008/05/19 17:06:02 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_cctr.c,v 1.8.14.1 2011/02/05 06:00:13 cliff Exp $");
+
+#include "opt_multiprocessor.h"
 
 #include <sys/param.h>
Index: /trunk/src/sys/kern/kern_exec.c
===================================================================
--- /trunk/src/sys/kern/kern_exec.c	(revision 151)
+++ /trunk/src/sys/kern/kern_exec.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_exec.c,v 1.280.4.3.4.1 2010/04/21 00:28:16 matt Exp $	*/
+/*	$NetBSD: kern_exec.c,v 1.280.4.3.4.3 2011/04/29 08:20:14 matt Exp $	*/
 
 /*-
@@ -60,5 +60,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.280.4.3.4.1 2010/04/21 00:28:16 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.280.4.3.4.3 2011/04/29 08:20:14 matt Exp $");
 
 #include "opt_ktrace.h"
@@ -1034,6 +1034,9 @@
 		(*pack.ep_esch->es_setregs)(l, &pack, (u_long) stack);
 
+	/* Provide a consistent LWP private setting */
+	(void)lwp_setprivate(l, NULL);
+
 	/* map the process's signal trampoline code */
-	if (exec_sigcode_map(p, pack.ep_esch->es_emul)) {
+	if ((error = exec_sigcode_map(p, pack.ep_esch->es_emul)) != 0) {
 		DPRINTF(("execve: map sigcode failed %d\n", error));
 		goto exec_abort;
@@ -1208,6 +1211,8 @@
 	argc = arginfo->ps_nargvstr;
 	envc = arginfo->ps_nenvstr;
-	if ((error = copyout(&argc, cpp++, sizeof(argc))) != 0)
+	if ((error = copyout(&argc, cpp++, sizeof(argc))) != 0) {
+		DPRINTF(("copyargs:%d copyout @%p %zu\n", __LINE__, cpp-1, sizeof(argc)));
 		return error;
+	}
 
 	dp = (char *) (cpp + argc + envc + 2 + pack->ep_esch->es_arglen);
@@ -1217,21 +1222,37 @@
 	arginfo->ps_argvstr = cpp; /* remember location of argv for later */
 
-	for (; --argc >= 0; sp += len, dp += len)
-		if ((error = copyout(&dp, cpp++, sizeof(dp))) != 0 ||
-		    (error = copyoutstr(sp, dp, ARG_MAX, &len)) != 0)
+	for (; --argc >= 0; sp += len, dp += len) {
+		if ((error = copyout(&dp, cpp++, sizeof(dp))) != 0) {
+			DPRINTF(("copyargs:%d copyout @%p %zu\n", __LINE__, cpp-1, sizeof(dp)));
 			return error;
-
-	if ((error = copyout(&nullp, cpp++, sizeof(nullp))) != 0)
+		}
+		if ((error = copyoutstr(sp, dp, ARG_MAX, &len)) != 0) {
+			DPRINTF(("copyargs:%d copyoutstr @%p %u\n", __LINE__, dp, ARG_MAX));
+			return error;
+		}
+	}
+
+	if ((error = copyout(&nullp, cpp++, sizeof(nullp))) != 0) {
+		DPRINTF(("copyargs:%d copyout @%p %zu\n", __LINE__, cpp-1, sizeof(nullp)));
 		return error;
+	}
 
 	arginfo->ps_envstr = cpp; /* remember location of envp for later */
 
-	for (; --envc >= 0; sp += len, dp += len)
-		if ((error = copyout(&dp, cpp++, sizeof(dp))) != 0 ||
-		    (error = copyoutstr(sp, dp, ARG_MAX, &len)) != 0)
+	for (; --envc >= 0; sp += len, dp += len) {
+		if ((error = copyout(&dp, cpp++, sizeof(dp))) != 0) {
+			DPRINTF(("copyargs:%d copyout @%p %zu\n", __LINE__, cpp-1, sizeof(dp)));
 			return error;
-
-	if ((error = copyout(&nullp, cpp++, sizeof(nullp))) != 0)
+		}
+		if ((error = copyoutstr(sp, dp, ARG_MAX, &len)) != 0) {
+			DPRINTF(("copyargs:%d copyoutstr @%p %u\n", __LINE__, dp, ARG_MAX));
+			return error;
+		}
+	}
+
+	if ((error = copyout(&nullp, cpp++, sizeof(nullp))) != 0) {
+		DPRINTF(("copyargs:%d copyout @%p %zu\n", __LINE__, cpp-1, sizeof(nullp)));
 		return error;
+	}
 
 	*stackp = (char *)cpp;
@@ -1669,4 +1690,8 @@
 				    UVM_ADV_RANDOM, 0));
 	if (error) {
+		DPRINTF(("exec_sigcode_map:%d map %p "
+		    "uvm_map %#"PRIxVSIZE"@%#"PRIxVADDR" failed %d\n",
+		    __LINE__, &p->p_vmspace->vm_map, round_page(sz), va,
+		    error));
 		(*uobj->pgops->pgo_detach)(uobj);
 		return (error);
Index: /trunk/src/sys/kern/kern_fork.c
===================================================================
--- /trunk/src/sys/kern/kern_fork.c	(revision 151)
+++ /trunk/src/sys/kern/kern_fork.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_fork.c,v 1.171 2008/10/11 13:40:57 pooka Exp $	*/
+/*	$NetBSD: kern_fork.c,v 1.171.10.1 2011/04/29 08:20:15 matt Exp $	*/
 
 /*-
@@ -68,5 +68,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_fork.c,v 1.171 2008/10/11 13:40:57 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_fork.c,v 1.171.10.1 2011/04/29 08:20:15 matt Exp $");
 
 #include "opt_ktrace.h"
@@ -295,7 +295,9 @@
 	 * Inherit flags we want to keep.  The flags related to SIGCHLD
 	 * handling are important in order to keep a consistent behaviour
-	 * for the child after the fork.
-	 */
-	p2->p_flag = p1->p_flag & (PK_SUGID | PK_NOCLDWAIT | PK_CLDSIGIGN);
+	 * for the child after the fork.  If we are a 32-bit process, the
+	 * child will be too. 
+	 */
+	p2->p_flag =
+	    p1->p_flag & (PK_SUGID | PK_NOCLDWAIT | PK_CLDSIGIGN | PK_32);
 	p2->p_emul = p1->p_emul;
 	p2->p_execsw = p1->p_execsw;
@@ -435,4 +437,5 @@
 	    stack, stacksize, (func != NULL) ? func : child_return, arg, &l2,
 	    l1->l_class);
+	lwp_setprivate(l2, l1->l_private);
 
 	/*
Index: /trunk/src/sys/kern/kern_lwp.c
===================================================================
--- /trunk/src/sys/kern/kern_lwp.c	(revision 151)
+++ /trunk/src/sys/kern/kern_lwp.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_lwp.c,v 1.126.2.2 2009/03/08 03:15:36 snj Exp $	*/
+/*	$NetBSD: kern_lwp.c,v 1.126.2.2.4.2 2011/04/29 08:20:15 matt Exp $	*/
 
 /*-
@@ -207,6 +207,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_lwp.c,v 1.126.2.2 2009/03/08 03:15:36 snj Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: kern_lwp.c,v 1.126.2.2.4.2 2011/04/29 08:20:15 matt Exp $");
+
+#include "opt_multiprocessor.h"
 #include "opt_ddb.h"
 #include "opt_lockdebug.h"
@@ -1721,4 +1722,19 @@
 }
 
+/*      
+ * Set an LWP's private data pointer.
+ */     
+int             
+lwp_setprivate(lwp_t *l, void *ptr)
+{               
+	int error = 0;  
+
+	l->l_private = ptr;
+#ifdef __HAVE_CPU_LWP_SETPRIVATE
+	error = cpu_lwp_setprivate(l, ptr); 
+#endif  
+	return error;
+}
+
 #if defined(DDB)
 void
Index: /trunk/src/sys/kern/kern_malloc_debug.c
===================================================================
--- /trunk/src/sys/kern/kern_malloc_debug.c	(revision 151)
+++ /trunk/src/sys/kern/kern_malloc_debug.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_malloc_debug.c,v 1.20 2008/08/07 01:40:21 matt Exp $	*/
+/*	kern_malloc_debug.c,v 1.20 2008/08/07 01:40:21 matt Exp	*/
 
 /*
@@ -57,5 +57,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_malloc_debug.c,v 1.20 2008/08/07 01:40:21 matt Exp $");
+__KERNEL_RCSID(0, "kern_malloc_debug.c,v 1.20 2008/08/07 01:40:21 matt Exp");
 
 #include <sys/param.h>
@@ -241,5 +241,5 @@
 	offset = va - vm_map_min(kernel_map);
 	for (;;) {
-		pg = uvm_pagealloc(NULL, offset, NULL, 0);
+		pg = uvm_pagealloc(NULL, offset, NULL, UVM_FLAG_COLORMATCH);
 		if (pg) {
 			pg->flags &= ~PG_BUSY;  /* new page */
Index: /trunk/src/sys/kern/kern_mutex.c
===================================================================
--- /trunk/src/sys/kern/kern_mutex.c	(revision 151)
+++ /trunk/src/sys/kern/kern_mutex.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_mutex.c,v 1.44 2008/10/15 06:51:20 wrstuden Exp $	*/
+/*	$NetBSD: kern_mutex.c,v 1.44.10.1 2011/02/05 06:00:13 cliff Exp $	*/
 
 /*-
@@ -41,5 +41,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.44 2008/10/15 06:51:20 wrstuden Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_mutex.c,v 1.44.10.1 2011/02/05 06:00:13 cliff Exp $");
+
+#include "opt_multiprocessor.h"
 
 #include <sys/param.h>
Index: /trunk/src/sys/kern/kern_pax.c
===================================================================
--- /trunk/src/sys/kern/kern_pax.c	(revision 151)
+++ /trunk/src/sys/kern/kern_pax.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_pax.c,v 1.22 2008/06/04 12:26:20 ad Exp $	*/
+/*	$NetBSD: kern_pax.c,v 1.22.16.1 2011/05/20 08:11:27 matt Exp $	*/
 
 /*-
@@ -29,5 +29,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_pax.c,v 1.22 2008/06/04 12:26:20 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_pax.c,v 1.22.16.1 2011/05/20 08:11:27 matt Exp $");
 
 #include "opt_pax.h"
@@ -354,4 +354,6 @@
 		epp->ep_minsaddr -= d;
 		*max_stack_size -= d;
+		if (epp->ep_ssize > *max_stack_size)
+			epp->ep_ssize = *max_stack_size;
 	}
 }
Index: /trunk/src/sys/kern/kern_runq.c
===================================================================
--- /trunk/src/sys/kern/kern_runq.c	(revision 151)
+++ /trunk/src/sys/kern/kern_runq.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_runq.c,v 1.22.4.3.4.1 2010/04/21 00:28:16 matt Exp $	*/
+/*	$NetBSD: kern_runq.c,v 1.22.4.3.4.2 2011/02/05 06:00:14 cliff Exp $	*/
 
 /*
@@ -28,5 +28,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_runq.c,v 1.22.4.3.4.1 2010/04/21 00:28:16 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_runq.c,v 1.22.4.3.4.2 2011/02/05 06:00:14 cliff Exp $");
+
+#include "opt_multiprocessor.h"
 
 #include <sys/param.h>
Index: /trunk/src/sys/kern/kern_rwlock.c
===================================================================
--- /trunk/src/sys/kern/kern_rwlock.c	(revision 151)
+++ /trunk/src/sys/kern/kern_rwlock.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_rwlock.c,v 1.28.10.2.2.1 2010/04/21 00:28:17 matt Exp $	*/
+/*	$NetBSD: kern_rwlock.c,v 1.28.10.2.2.2 2011/02/05 06:00:14 cliff Exp $	*/
 
 /*-
@@ -39,5 +39,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_rwlock.c,v 1.28.10.2.2.1 2010/04/21 00:28:17 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_rwlock.c,v 1.28.10.2.2.2 2011/02/05 06:00:14 cliff Exp $");
+
+#include "opt_multiprocessor.h"
 
 #define	__RWLOCK_PRIVATE
Index: /trunk/src/sys/kern/kern_stub.c
===================================================================
--- /trunk/src/sys/kern/kern_stub.c	(revision 151)
+++ /trunk/src/sys/kern/kern_stub.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_stub.c,v 1.11 2008/10/15 16:03:29 wrstuden Exp $	*/
+/*	$NetBSD: kern_stub.c,v 1.11.8.1 2011/02/05 06:00:14 cliff Exp $	*/
 
 /*-
@@ -63,6 +63,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_stub.c,v 1.11 2008/10/15 16:03:29 wrstuden Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: kern_stub.c,v 1.11.8.1 2011/02/05 06:00:14 cliff Exp $");
+
+#include "opt_multiprocessor.h"
 #include "opt_ptrace.h"
 #include "opt_ktrace.h"
Index: /trunk/src/sys/kern/kern_subr.c
===================================================================
--- /trunk/src/sys/kern/kern_subr.c	(revision 151)
+++ /trunk/src/sys/kern/kern_subr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_subr.c,v 1.192.4.1.4.2 2010/01/26 04:51:03 cliff Exp $	*/
+/*	$NetBSD: kern_subr.c,v 1.192.4.1.4.4 2010/06/10 00:42:16 cliff Exp $	*/
 
 /*-
@@ -80,5 +80,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_subr.c,v 1.192.4.1.4.2 2010/01/26 04:51:03 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_subr.c,v 1.192.4.1.4.4 2010/06/10 00:42:16 cliff Exp $");
 
 #include "opt_ddb.h"
@@ -974,9 +974,11 @@
 		 */
 
+		dv = finddevice(rootspec);
+
 		/*
-		 * if rootspec is not configured, ask (again)
+		 * if the lookup failed and we have no rootdev
+		 * then we have to ask
 		 */
-		dv = finddevice(rootspec);
-		if (dv == NULL) {
+		if (dv == NULL && rootdev == NODEV) {
 			printf("device %s not configured\n", rootspec);
 			boothowto |= RB_ASKNAME;
@@ -988,10 +990,10 @@
 		 * early.
 		 */
-		if (device_class(dv) == DV_IFNET) {
+		if (dv != NULL && device_class(dv) == DV_IFNET) {
 			rootdv = dv;
 			goto haveroot;
 		}
 
-		if (rootdev == NODEV &&
+		if (dv != NULL && rootdev == NODEV &&
 		    device_class(dv) == DV_DISK && device_is_a(dv, "dk") &&
 		    (majdev = devsw_name2blk(device_xname(dv), NULL, 0)) >= 0)
Index: /trunk/src/sys/kern/kern_verifiedexec.c
===================================================================
--- /trunk/src/sys/kern/kern_verifiedexec.c	(revision 151)
+++ /trunk/src/sys/kern/kern_verifiedexec.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: kern_verifiedexec.c,v 1.111.4.1 2008/12/18 00:56:27 snj Exp $	*/
+/*	kern_verifiedexec.c,v 1.111.4.1 2008/12/18 00:56:27 snj Exp	*/
 
 /*-
@@ -30,5 +30,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_verifiedexec.c,v 1.111.4.1 2008/12/18 00:56:27 snj Exp $");
+__KERNEL_RCSID(0, "kern_verifiedexec.c,v 1.111.4.1 2008/12/18 00:56:27 snj Exp");
 
 #include "opt_veriexec.h"
@@ -766,5 +766,6 @@
 	ctx = kmem_alloc(vfe->ops->context_size, KM_SLEEP);
 	fp = kmem_alloc(vfe->ops->hash_len, KM_SLEEP);
-	kva = uvm_km_alloc(kernel_map, PAGE_SIZE, 0, UVM_KMF_VAONLY | UVM_KMF_WAITVA);
+	kva = uvm_km_alloc(kernel_map, PAGE_SIZE, VM_PAGE_TO_COLOR(pg),
+	    UVM_KMF_COLORMATCH | UVM_KMF_VAONLY | UVM_KMF_WAITVA);
 	pmap_kenter_pa(kva, VM_PAGE_TO_PHYS(pg), VM_PROT_READ);
 	pmap_update(pmap_kernel());
Index: /trunk/src/sys/kern/subr_autoconf.c
===================================================================
--- /trunk/src/sys/kern/subr_autoconf.c	(revision 151)
+++ /trunk/src/sys/kern/subr_autoconf.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: subr_autoconf.c,v 1.163.4.2 2009/03/15 19:43:48 snj Exp $ */
+/* $NetBSD: subr_autoconf.c,v 1.163.4.2.4.3 2011/02/08 21:56:01 cliff Exp $ */
 
 /*
@@ -78,6 +78,7 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_autoconf.c,v 1.163.4.2 2009/03/15 19:43:48 snj Exp $");
-
+__KERNEL_RCSID(0, "$NetBSD: subr_autoconf.c,v 1.163.4.2.4.3 2011/02/08 21:56:01 cliff Exp $");
+
+#include "opt_multiprocessor.h"
 #include "opt_ddb.h"
 #include "drvctl.h"
@@ -197,4 +198,19 @@
 
 TAILQ_HEAD(deferred_config_head, deferred_config);
+
+/*
+ * config_queues_lock protects MP access to
+ * - deferred_config_queue
+ * - interrupt_config_queue
+ * is held for short durations, and is initialized to spin
+ */
+static kmutex_t *config_queues_lock;
+
+/*
+ * dc_funcs_lock ensures the driver dc_func's are not called concurrently
+ * many (most?) are not MP safe
+ * is held for unknown durations, and is initialized to sleep
+ */
+static kmutex_t *dc_funcs_lock;
 
 struct deferred_config_head deferred_config_queue =
@@ -361,4 +377,7 @@
 	cv_init(&config_misc_cv, "cfgmisc");
 
+	dc_funcs_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_SOFTNET);
+	config_queues_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_VM);
+
 	/* allcfdrivers is statically initialized. */
 	for (i = 0; cfdriver_list_initial[i] != NULL; i++) {
@@ -397,10 +416,17 @@
 	struct deferred_config *dc;
 
+	mutex_enter(config_queues_lock);
 	while ((dc = TAILQ_FIRST(&interrupt_config_queue)) != NULL) {
 		TAILQ_REMOVE(&interrupt_config_queue, dc, dc_queue);
+		mutex_exit(config_queues_lock);
+		mutex_enter(dc_funcs_lock);
 		(*dc->dc_func)(dc->dc_dev);
+		mutex_exit(dc_funcs_lock);
 		kmem_free(dc, sizeof(*dc));
 		config_pending_decr();
-	}
+		mutex_enter(config_queues_lock);
+	}
+	mutex_exit(config_queues_lock);
+
 	kthread_exit(0);
 }
@@ -1651,4 +1677,5 @@
 
 #ifdef DIAGNOSTIC
+	mutex_enter(config_queues_lock);
 	for (dc = TAILQ_FIRST(&deferred_config_queue); dc != NULL;
 	     dc = TAILQ_NEXT(dc, dc_queue)) {
@@ -1656,4 +1683,5 @@
 			panic("config_defer: deferred twice");
 	}
+	mutex_exit(config_queues_lock);
 #endif
 
@@ -1664,5 +1692,9 @@
 	dc->dc_dev = dev;
 	dc->dc_func = func;
+
+	mutex_enter(config_queues_lock);
 	TAILQ_INSERT_TAIL(&deferred_config_queue, dc, dc_queue);
+	mutex_exit(config_queues_lock);
+
 	config_pending_incr();
 }
@@ -1687,4 +1719,5 @@
 
 #ifdef DIAGNOSTIC
+	mutex_enter(config_queues_lock);
 	for (dc = TAILQ_FIRST(&interrupt_config_queue); dc != NULL;
 	     dc = TAILQ_NEXT(dc, dc_queue)) {
@@ -1692,4 +1725,5 @@
 			panic("config_interrupts: deferred twice");
 	}
+	mutex_exit(config_queues_lock);
 #endif
 
@@ -1700,5 +1734,7 @@
 	dc->dc_dev = dev;
 	dc->dc_func = func;
+	mutex_enter(config_queues_lock);
 	TAILQ_INSERT_TAIL(&interrupt_config_queue, dc, dc_queue);
+	mutex_exit(config_queues_lock);
 	config_pending_incr();
 }
@@ -1713,13 +1749,19 @@
 	struct deferred_config *dc, *ndc;
 
+	mutex_enter(config_queues_lock);
 	for (dc = TAILQ_FIRST(queue); dc != NULL; dc = ndc) {
 		ndc = TAILQ_NEXT(dc, dc_queue);
 		if (parent == NULL || dc->dc_dev->dv_parent == parent) {
 			TAILQ_REMOVE(queue, dc, dc_queue);
+			mutex_exit(config_queues_lock);
+			mutex_enter(dc_funcs_lock);
 			(*dc->dc_func)(dc->dc_dev);
+			mutex_exit(dc_funcs_lock);
 			kmem_free(dc, sizeof(*dc));
 			config_pending_decr();
+			mutex_enter(config_queues_lock);
 		}
 	}
+	mutex_exit(config_queues_lock);
 }
 
Index: /trunk/src/sys/kern/subr_evcnt.c
===================================================================
--- /trunk/src/sys/kern/subr_evcnt.c	(revision 151)
+++ /trunk/src/sys/kern/subr_evcnt.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: subr_evcnt.c,v 1.4 2005/12/11 12:24:30 christos Exp $ */
+/* $NetBSD: subr_evcnt.c,v 1.4.94.2 2011/02/05 06:54:58 cliff Exp $ */
 
 /*
@@ -78,5 +78,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_evcnt.c,v 1.4 2005/12/11 12:24:30 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_evcnt.c,v 1.4.94.2 2011/02/05 06:54:58 cliff Exp $");
 
 #include "opt_ddb.h"
@@ -84,8 +84,10 @@
 #include <sys/param.h>
 #include <sys/device.h>
+#include <sys/mutex.h>
 #include <sys/systm.h>
 
 /* list of all events */
 struct evcntlist allevents = TAILQ_HEAD_INITIALIZER(allevents);
+static kmutex_t evcnt_lock;
 
 /*
@@ -105,4 +107,6 @@
 	__link_set_decl(evcnts, struct evcnt);
 	struct evcnt * const *evp;
+
+	mutex_init(&evcnt_lock, MUTEX_DEFAULT, IPL_NONE);
 
 	__link_set_foreach(evp, evcnts) {
@@ -136,5 +140,7 @@
 	ev->ev_namelen = len;
 
+	mutex_enter(&evcnt_lock);
 	TAILQ_INSERT_TAIL(&allevents, ev, ev_list);
+	mutex_exit(&evcnt_lock);
 }
 
@@ -163,5 +169,7 @@
 {
 
+	mutex_enter(&evcnt_lock);
 	TAILQ_REMOVE(&allevents, ev, ev_list);
+	mutex_exit(&evcnt_lock);
 }
 
Index: /trunk/src/sys/kern/sys_lwp.c
===================================================================
--- /trunk/src/sys/kern/sys_lwp.c	(revision 151)
+++ /trunk/src/sys/kern/sys_lwp.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sys_lwp.c,v 1.43 2008/10/16 08:47:07 ad Exp $	*/
+/*	$NetBSD: sys_lwp.c,v 1.43.10.1 2011/04/29 08:20:15 matt Exp $	*/
 
 /*-
@@ -36,5 +36,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_lwp.c,v 1.43 2008/10/16 08:47:07 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_lwp.c,v 1.43.10.1 2011/04/29 08:20:15 matt Exp $");
 
 #include <sys/param.h>
@@ -186,6 +186,5 @@
 	} */
 
-	l->l_private = SCARG(uap, ptr);
-	return 0;
+	return lwp_setprivate(l, SCARG(uap, ptr));
 }
 
Index: /trunk/src/sys/kern/sys_pipe.c
===================================================================
--- /trunk/src/sys/kern/sys_pipe.c	(revision 151)
+++ /trunk/src/sys/kern/sys_pipe.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sys_pipe.c,v 1.103.4.5 2009/04/04 23:36:27 snj Exp $	*/
+/*	sys_pipe.c,v 1.103.4.5 2009/04/04 23:36:27 snj Exp	*/
 
 /*-
@@ -69,5 +69,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_pipe.c,v 1.103.4.5 2009/04/04 23:36:27 snj Exp $");
+__KERNEL_RCSID(0, "sys_pipe.c,v 1.103.4.5 2009/04/04 23:36:27 snj Exp");
 
 #include <sys/param.h>
@@ -509,4 +509,5 @@
 #ifndef PIPE_NODIRECT
 		if ((rpipe->pipe_state & PIPE_DIRECTR) != 0) {
+			struct pipemapping * const rmap = &rpipe->pipe_map;
 			/*
 			 * Direct copy, bypassing a kernel buffer.
@@ -516,9 +517,9 @@
 			KASSERT(rpipe->pipe_state & PIPE_DIRECTW);
 
-			size = rpipe->pipe_map.cnt;
+			size = rmap->cnt;
 			if (size > uio->uio_resid)
 				size = uio->uio_resid;
 
-			va = (char *)rpipe->pipe_map.kva + rpipe->pipe_map.pos;
+			va = (char *)rmap->kva + rmap->koff + rmap->pos;
 			mutex_exit(lock);
 			error = uiomove(va, size, uio);
@@ -527,7 +528,7 @@
 				break;
 			nread += size;
-			rpipe->pipe_map.pos += size;
-			rpipe->pipe_map.cnt -= size;
-			if (rpipe->pipe_map.cnt == 0) {
+			rmap->pos += size;
+			rmap->cnt -= size;
+			if (rmap->cnt == 0) {
 				rpipe->pipe_state &= ~PIPE_DIRECTR;
 				cv_broadcast(&rpipe->pipe_wcv);
@@ -622,18 +623,17 @@
 pipe_loan_alloc(struct pipe *wpipe, int npages)
 {
-	vsize_t len;
-
-	len = (vsize_t)npages << PAGE_SHIFT;
+	struct pipemapping * const wmap = &wpipe->pipe_map;
+	const vsize_t len = ptoa(npages);
+
 	atomic_add_int(&amountpipekva, len);
-	wpipe->pipe_map.kva = uvm_km_alloc(kernel_map, len, 0,
-	    UVM_KMF_VAONLY | UVM_KMF_WAITVA);
-	if (wpipe->pipe_map.kva == 0) {
+	wmap->kva = uvm_km_alloc(kernel_map, len, 0,
+	    UVM_KMF_COLORMATCH | UVM_KMF_VAONLY | UVM_KMF_WAITVA);
+	if (wmap->kva == 0) {
 		atomic_add_int(&amountpipekva, -len);
 		return (ENOMEM);
 	}
 
-	wpipe->pipe_map.npages = npages;
-	wpipe->pipe_map.pgs = kmem_alloc(npages * sizeof(struct vm_page *),
-	    KM_SLEEP);
+	wmap->npages = npages;
+	wmap->pgs = kmem_alloc(npages * sizeof(struct vm_page *), KM_SLEEP);
 	return (0);
 }
@@ -645,13 +645,17 @@
 pipe_loan_free(struct pipe *wpipe)
 {
-	vsize_t len;
-
-	len = (vsize_t)wpipe->pipe_map.npages << PAGE_SHIFT;
-	uvm_km_free(kernel_map, wpipe->pipe_map.kva, len, UVM_KMF_VAONLY);
-	wpipe->pipe_map.kva = 0;
+	struct pipemapping * const wmap = &wpipe->pipe_map;
+	const vsize_t len = ptoa(wmap->npages);
+
+	uvm_km_free(kernel_map, wmap->kva, len, UVM_KMF_VAONLY);
+	wmap->kva = 0;
 	atomic_add_int(&amountpipekva, -len);
-	kmem_free(wpipe->pipe_map.pgs,
-	    wpipe->pipe_map.npages * sizeof(struct vm_page *));
-	wpipe->pipe_map.pgs = NULL;
+	kmem_free(wmap->pgs, wmap->npages * sizeof(struct vm_page *));
+	wmap->pgs = NULL;
+#if 0
+	wmap->npages = 0;
+	wmap->pos = 0;
+	wmap->cnt = 0;
+#endif
 }
 
@@ -669,4 +673,6 @@
 pipe_direct_write(struct file *fp, struct pipe *wpipe, struct uio *uio)
 {
+	struct pipemapping * const wmap = &wpipe->pipe_map;
+	kmutex_t * const lock = wpipe->pipe_lock;
 	int error, npages, j;
 	struct vm_page **pgs;
@@ -674,8 +680,8 @@
 	vsize_t blen, bcnt;
 	voff_t bpos;
-	kmutex_t *lock = wpipe->pipe_lock;
+	u_int starting_color;
 
 	KASSERT(mutex_owned(wpipe->pipe_lock));
-	KASSERT(wpipe->pipe_map.cnt == 0);
+	KASSERT(wmap->cnt == 0);
 
 	mutex_exit(lock);
@@ -698,5 +704,6 @@
 		bcnt = uio->uio_iov->iov_len;
 	}
-	npages = blen >> PAGE_SHIFT;
+	npages = atop(blen);
+	starting_color = atop(base) & uvmexp.colormask;
 
 	/*
@@ -704,10 +711,10 @@
 	 * allocated.
 	 */
-	if (wpipe->pipe_map.kva != 0 && npages > wpipe->pipe_map.npages)
+	if (wmap->kva != 0 && starting_color + npages > wmap->npages)
 		pipe_loan_free(wpipe);
 
 	/* Allocate new kva. */
-	if (wpipe->pipe_map.kva == 0) {
-		error = pipe_loan_alloc(wpipe, npages);
+	if (wmap->kva == 0) {
+		error = pipe_loan_alloc(wpipe, starting_color + npages);
 		if (error) {
 			mutex_enter(lock);
@@ -717,5 +724,5 @@
 
 	/* Loan the write buffer memory from writer process */
-	pgs = wpipe->pipe_map.pgs;
+	pgs = wmap->pgs + starting_color;
 	error = uvm_loan(&uio->uio_vmspace->vm_map, base, blen,
 			 pgs, UVM_LOAN_TOPAGE);
@@ -727,5 +734,5 @@
 
 	/* Enter the loaned pages to kva */
-	kva = wpipe->pipe_map.kva;
+	kva = wmap->kva + ptoa(starting_color);
 	for (j = 0; j < npages; j++, kva += PAGE_SIZE) {
 		pmap_kenter_pa(kva, VM_PAGE_TO_PHYS(pgs[j]), VM_PROT_READ);
@@ -734,6 +741,6 @@
 
 	/* Now we can put the pipe in direct write mode */
-	wpipe->pipe_map.pos = bpos;
-	wpipe->pipe_map.cnt = bcnt;
+	wmap->pos = bpos + ptoa(starting_color);
+	wmap->cnt = bcnt;
 
 	/*
@@ -773,5 +780,5 @@
 
 	if (pgs != NULL) {
-		pmap_kremove(wpipe->pipe_map.kva, blen);
+		pmap_kremove(wmap->kva, blen);
 		pmap_update(pmap_kernel());
 		uvm_unloan(pgs, npages, UVM_LOAN_TOPAGE);
@@ -790,11 +797,11 @@
 		 * write, error, or restarting the write(2) as appropriate.
 		 */
-		if (wpipe->pipe_map.cnt == bcnt) {
-			wpipe->pipe_map.cnt = 0;
+		if (wmap->cnt == bcnt) {
+			wmap->cnt = 0;
 			cv_broadcast(&wpipe->pipe_wcv);
 			return (error);
 		}
 
-		bcnt -= wpipe->pipe_map.cnt;
+		bcnt -= wpipe->cnt;
 	}
 
@@ -808,5 +815,5 @@
 	}
 
-	wpipe->pipe_map.cnt = 0;
+	wmap->cnt = 0;
 	return (error);
 }
@@ -1241,5 +1248,4 @@
 		pipe_loan_free(pipe);
 		pipe->pipe_map.cnt = 0;
-		pipe->pipe_map.kva = 0;
 		pipe->pipe_map.pos = 0;
 		pipe->pipe_map.npages = 0;
Index: /trunk/src/sys/kern/tty.c
===================================================================
--- /trunk/src/sys/kern/tty.c	(revision 151)
+++ /trunk/src/sys/kern/tty.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: tty.c,v 1.227.4.1.4.1 2010/04/21 00:28:18 matt Exp $	*/
+/*	tty.c,v 1.227.4.1.4.1 2010/04/21 00:28:18 matt Exp	*/
 
 /*-
@@ -64,5 +64,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.227.4.1.4.1 2010/04/21 00:28:18 matt Exp $");
+__KERNEL_RCSID(0, "tty.c,v 1.227.4.1.4.1 2010/04/21 00:28:18 matt Exp");
 
 #include <sys/param.h>
@@ -75,4 +75,5 @@
 #include <sys/file.h>
 #include <sys/conf.h>
+#include <sys/cpu.h>
 #include <sys/dkstat.h>
 #include <sys/uio.h>
@@ -2400,13 +2401,34 @@
 	mutex_enter(pick->p_lock);
 	LIST_FOREACH(l, &pick->p_lwps, l_sibling) {
+		const char *lp;
 		lwp_lock(l);
-		snprintf(lmsg, sizeof(lmsg), "%s%s",
-		    l->l_stat == LSONPROC ? "running" :
-		    l->l_stat == LSRUN ? "runnable" :
-		    l->l_wchan ? l->l_wmesg : "iowait",
-		    (LIST_NEXT(l, l_sibling) != NULL) ? " " : "] ");
+#ifdef LWP_PC
+#define FMT_RUN "%#"PRIxVADDR
+#define VAL_RUNNING (vaddr_t)LWP_PC(l)
+#define VAL_RUNABLE (vaddr_t)LWP_PC(l)
+#else
+#define FMT_RUN "%s"
+#define VAL_RUNNING "running"
+#define VAL_RUNABLE "runnable"
+#endif
+		switch (l->l_stat) {
+		case LSONPROC:
+			snprintf(lmsg, sizeof(lmsg), FMT_RUN"/%d", VAL_RUNNING,
+			    cpu_index(l->l_cpu));
+			lp = lmsg;
+			break;
+		case LSRUN:
+			snprintf(lmsg, sizeof(lmsg), FMT_RUN, VAL_RUNABLE);
+			lp = lmsg;
+			break;
+		default:
+			lp = l->l_wchan ? l->l_wmesg : "iowait";
+			break;
+		} 
+		strlcat(buf, lp, bufsz);
+		strlcat(buf, LIST_NEXT(l, l_sibling) != NULL ? " " : "] ",
+		    bufsz);
+		pctcpu += l->l_pctcpu;
 		lwp_unlock(l);
-		strlcat(buf, lmsg, bufsz);
-		pctcpu += l->l_pctcpu;
 	}
 	pctcpu += pick->p_pctcpu;
Index: /trunk/src/sys/kern/uipc_socket.c
===================================================================
--- /trunk/src/sys/kern/uipc_socket.c	(revision 151)
+++ /trunk/src/sys/kern/uipc_socket.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uipc_socket.c,v 1.177.4.2.2.1.2.1 2010/04/21 00:28:18 matt Exp $	*/
+/*	uipc_socket.c,v 1.177.4.2.2.1.2.1 2010/04/21 00:28:18 matt Exp	*/
 
 /*-
@@ -64,5 +64,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.177.4.2.2.1.2.1 2010/04/21 00:28:18 matt Exp $");
+__KERNEL_RCSID(0, "uipc_socket.c,v 1.177.4.2.2.1.2.1 2010/04/21 00:28:18 matt Exp");
 
 #include "opt_sock_counters.h"
@@ -200,5 +200,5 @@
 
 vaddr_t
-sokvaalloc(vsize_t len, struct socket *so)
+sokvaalloc(vaddr_t sva, vsize_t len, struct socket *so)
 {
 	vaddr_t lva;
@@ -215,5 +215,6 @@
 	 */
 
-	lva = uvm_km_alloc(kernel_map, len, 0, UVM_KMF_VAONLY | UVM_KMF_WAITVA);
+	lva = uvm_km_alloc(kernel_map, len, atop(sva) & uvmexp.colormask,
+	    UVM_KMF_COLORMATCH | UVM_KMF_VAONLY | UVM_KMF_WAITVA);
 	if (lva == 0) {
 		sokvaunreserve(len);
@@ -363,5 +364,5 @@
 	KASSERT(npgs <= M_EXT_MAXPAGES);
 
-	lva = sokvaalloc(len, so);
+	lva = sokvaalloc(sva, len, so);
 	if (lva == 0)
 		return 0;
Index: /trunk/src/sys/kern/vfs_wapbl.c
===================================================================
--- /trunk/src/sys/kern/vfs_wapbl.c	(revision 151)
+++ /trunk/src/sys/kern/vfs_wapbl.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: vfs_wapbl.c,v 1.3.8.1 2009/02/24 04:13:35 snj Exp $	*/
+/*	$NetBSD: vfs_wapbl.c,v 1.3.8.1.4.1 2011/05/20 08:11:27 matt Exp $	*/
 
 /*-
@@ -34,5 +34,5 @@
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_wapbl.c,v 1.3.8.1 2009/02/24 04:13:35 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_wapbl.c,v 1.3.8.1.4.1 2011/05/20 08:11:27 matt Exp $");
 
 #include <sys/param.h>
@@ -2073,5 +2073,5 @@
 			continue;
 		wr->wr_blkhash = wapbl_malloc(hashsize * sizeof(*wr->wr_blkhash));
-		for (i = 0; i < wr->wr_blkhashmask; i++)
+		for (i = 0; i < hashsize; i++)
 			LIST_INIT(&wr->wr_blkhash[i]);
 		wr->wr_blkhashmask = hashsize - 1;
Index: /trunk/src/sys/kern/vfs_xattr.c
===================================================================
--- /trunk/src/sys/kern/vfs_xattr.c	(revision 151)
+++ /trunk/src/sys/kern/vfs_xattr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: vfs_xattr.c,v 1.19 2008/06/23 11:30:41 ad Exp $	*/
+/*	$NetBSD: vfs_xattr.c,v 1.19.14.1 2011/05/20 08:11:28 matt Exp $	*/
 
 /*-
@@ -69,5 +69,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_xattr.c,v 1.19 2008/06/23 11:30:41 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_xattr.c,v 1.19.14.1 2011/05/20 08:11:28 matt Exp $");
 
 #include <sys/param.h>
@@ -150,5 +150,5 @@
 		syscallarg(const char *) attrname;
 	} */
-	struct vnode *vp;
+	struct vnode *vp, *path_vp;
 	struct nameidata nd;
 	char attrname[EXTATTR_MAXNAMELEN];
@@ -162,4 +162,11 @@
 	}
 
+	NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, SCARG(uap, path));
+	error = namei(&nd);
+	if (error) {
+		return (error);
+	}
+	path_vp = nd.ni_vp;
+
 	vp = NULL;
 	if (SCARG(uap, filename) != NULL) {
@@ -167,18 +174,12 @@
 		    SCARG(uap, filename));
 		error = namei(&nd);
-		if (error)
+		if (error) {
+			vrele(path_vp);
 			return (error);
+		}
 		vp = nd.ni_vp;
 	}
 
-	NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, SCARG(uap, path));
-	error = namei(&nd);
-	if (error) {
-		if (vp != NULL)
-			vput(vp);
-		return (error);
-	}
-
-	error = VFS_EXTATTRCTL(nd.ni_vp->v_mount, SCARG(uap, cmd), vp,
+	error = VFS_EXTATTRCTL(path_vp->v_mount, SCARG(uap, cmd), vp,
 	    SCARG(uap, attrnamespace),
 	    SCARG(uap, attrname) != NULL ? attrname : NULL);
@@ -186,4 +187,5 @@
 	if (vp != NULL)
 		vrele(vp);
+	vrele(path_vp);
 
 	return (error);
Index: /trunk/src/sys/lib/libkern/libkern.h
===================================================================
--- /trunk/src/sys/lib/libkern/libkern.h	(revision 151)
+++ /trunk/src/sys/lib/libkern/libkern.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: libkern.h,v 1.82.8.1 2010/04/21 00:28:20 matt Exp $	*/
+/*	$NetBSD: libkern.h,v 1.82.8.3 2011/04/29 08:10:38 matt Exp $	*/
 
 /*-
@@ -193,7 +193,5 @@
 #endif
 
-#define	CTASSERT(x)		_CTASSERT(x, __LINE__)
-#define	_CTASSERT(x, y)		__CTASSERT(x, y)
-#define	__CTASSERT(x, y)	typedef char __ctassert ## y[(x) ? 1 : -1];
+#define	CTASSERT(x)		__CTASSERT(x)
 
 #ifndef DIAGNOSTIC
@@ -209,5 +207,5 @@
 #define _DIAGASSERT(a)	assert(a)
 #define	KASSERTMSG(e, msg) do {		\
-	if (__predict_false((e)))	\
+	if (__predict_false(!(e)))	\
 		panic msg;		\
 	} while (/*CONSTCOND*/ 0)
@@ -223,9 +221,15 @@
 #ifndef DEBUG
 #ifdef lint
-#define	KDASSERT(e)	/* NOTHING */
+#define	KDASSERTMSG(e, msg)	/* NOTHING */
+#define	KDASSERT(e)		/* NOTHING */
 #else /* lint */
-#define	KDASSERT(e)	((void)0)
+#define	KDASSERTMSG(e, msg)	((void)0)
+#define	KDASSERT(e)		((void)0)
 #endif /* lint */
 #else
+#define	KDASSERTMSG(e, msg) do {	\
+	if (__predict_false(!(e)))	\
+		panic msg;		\
+	} while (/*CONSTCOND*/ 0)
 #ifdef __STDC__
 #define	KDASSERT(e)	(__predict_true((e)) ? (void)0 :		    \
Index: /trunk/src/sys/lib/libkern/softfloat.c
===================================================================
--- /trunk/src/sys/lib/libkern/softfloat.c	(revision 151)
+++ /trunk/src/sys/lib/libkern/softfloat.c	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: softfloat.c,v 1.4 2005/12/11 12:24:37 christos Exp $ */
+/* $NetBSD: softfloat.c,v 1.4.94.2 2011/02/08 19:00:14 cliff Exp $ */
 
 /*
@@ -50,5 +50,5 @@
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: softfloat.c,v 1.4 2005/12/11 12:24:37 christos Exp $");
+__RCSID("$NetBSD: softfloat.c,v 1.4.94.2 2011/02/08 19:00:14 cliff Exp $");
 #endif /* LIBC_SCCS and not lint */
 
Index: /trunk/src/sys/miscfs/genfs/genfs_io.c
===================================================================
--- /trunk/src/sys/miscfs/genfs/genfs_io.c	(revision 151)
+++ /trunk/src/sys/miscfs/genfs/genfs_io.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: genfs_io.c,v 1.13.4.2 2009/04/04 18:14:50 snj Exp $	*/
+/*	genfs_io.c,v 1.13.4.2.4.2 2011/05/20 08:11:28 matt Exp	*/
 
 /*
@@ -32,5 +32,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.13.4.2 2009/04/04 18:14:50 snj Exp $");
+__KERNEL_RCSID(0, "genfs_io.c,v 1.13.4.2.4.2 2011/05/20 08:11:28 matt Exp");
 
 #include <sys/param.h>
@@ -127,4 +127,5 @@
 	const bool overwrite = (flags & PGO_OVERWRITE) != 0;
 	const bool blockalloc = write && (flags & PGO_NOBLOCKALLOC) == 0;
+	const bool glocked = (flags & PGO_GLOCKHELD) != 0;
 	voff_t origvsize;
 	UVMHIST_FUNC("genfs_getpages"); UVMHIST_CALLED(ubchist);
@@ -215,4 +216,5 @@
 		int nfound;
 
+		KASSERT(!glocked);
 		npages = *ap->a_count;
 #if defined(DEBUG)
@@ -229,5 +231,5 @@
 			goto out_err;
 		}
-		if (!rw_tryenter(&gp->g_glock, RW_READER)) {
+		if (!genfs_node_rdtrylock(vp)) {
 			genfs_rel_pages(ap->a_m, npages);
 
@@ -244,5 +246,5 @@
 			}
 		} else {
-			rw_exit(&gp->g_glock);
+			genfs_node_unlock(vp);
 		}
 		error = (ap->a_m[ap->a_centeridx] == NULL ? EBUSY : 0);
@@ -303,12 +305,17 @@
 	 */
 
-	if (blockalloc) {
-		rw_enter(&gp->g_glock, RW_WRITER);
-	} else {
-		rw_enter(&gp->g_glock, RW_READER);
+	KASSERT(!glocked || genfs_node_wrlocked(vp));
+	if (!glocked) {
+		if (blockalloc) {
+			genfs_node_wrlock(vp);
+		} else {
+			genfs_node_rdlock(vp);
+		}
 	}
 	mutex_enter(&uobj->vmobjlock);
 	if (vp->v_size < origvsize) {
-		rw_exit(&gp->g_glock);
+		if (!glocked) {
+			genfs_node_unlock(vp);
+		}
 		if (pgs != pgs_onstack)
 			kmem_free(pgs, pgs_size);
@@ -318,5 +325,7 @@
 	if (uvn_findpages(uobj, origoffset, &npages, &pgs[ridx],
 	    async ? UFP_NOWAIT : UFP_ALL) != orignpages) {
-		rw_exit(&gp->g_glock);
+		if (!glocked) {
+			genfs_node_unlock(vp);
+		}
 		KASSERT(async != 0);
 		genfs_rel_pages(&pgs[ridx], orignpages);
@@ -339,5 +348,7 @@
 	}
 	if (i == npages) {
-		rw_exit(&gp->g_glock);
+		if (!glocked) {
+			genfs_node_unlock(vp);
+		}
 		UVMHIST_LOG(ubchist, "returning cached pages", 0,0,0,0);
 		npages += ridx;
@@ -350,5 +361,7 @@
 
 	if (overwrite) {
-		rw_exit(&gp->g_glock);
+		if (!glocked) {
+			genfs_node_unlock(vp);
+		}
 		UVMHIST_LOG(ubchist, "PGO_OVERWRITE",0,0,0,0);
 
@@ -385,5 +398,7 @@
 		if (uvn_findpages(uobj, startoffset, &npgs, pgs,
 		    async ? UFP_NOWAIT : UFP_ALL) != npages) {
-			rw_exit(&gp->g_glock);
+			if (!glocked) {
+				genfs_node_unlock(vp);
+			}
 			KASSERT(async != 0);
 			genfs_rel_pages(pgs, npages);
@@ -566,5 +581,7 @@
 	if (async) {
 		UVMHIST_LOG(ubchist, "returning 0 (async)",0,0,0,0);
-		rw_exit(&gp->g_glock);
+		if (!glocked) {
+			genfs_node_unlock(vp);
+		}
 		error = 0;
 		goto out_err;
@@ -614,5 +631,7 @@
 		}
 	}
-	rw_exit(&gp->g_glock);
+	if (!glocked) {
+		genfs_node_unlock(vp);
+	}
 	mutex_enter(&uobj->vmobjlock);
 
@@ -846,5 +865,4 @@
 	    ((endoff - startoff) >> PAGE_SHIFT) * UVM_PAGE_HASH_PENALTY);
 
-#if !defined(DEBUG)
 	/*
 	 * if this vnode is known not to have dirty pages,
@@ -853,10 +871,11 @@
 
 	if ((vp->v_iflag & VI_ONWORKLST) == 0) {
+#if !defined(DEBUG)
 		if ((flags & (PGO_FREE|PGO_DEACTIVATE)) == 0) {
 			goto skip_scan;
 		}
+#endif /* !defined(DEBUG) */
 		flags &= ~PGO_CLEANIT;
 	}
-#endif /* !defined(DEBUG) */
 
 	/*
@@ -1728,7 +1747,9 @@
 	upm = vm_map_pmap(map);
 	kpm = vm_map_pmap(kernel_map);
-	kva = uvm_km_alloc(kernel_map, klen, 0,
-			   UVM_KMF_VAONLY | UVM_KMF_WAITVA);
 	puva = trunc_page(uva);
+
+	kva = uvm_km_alloc(kernel_map, klen, atop(puva) & uvmexp.colormask,
+	    UVM_KMF_COLORMATCH | UVM_KMF_VAONLY | UVM_KMF_WAITVA);
+
 	for (poff = 0; poff < klen; poff += PAGE_SIZE) {
 		rv = pmap_extract(upm, puva + poff, &pa);
Index: /trunk/src/sys/miscfs/genfs/genfs_node.h
===================================================================
--- /trunk/src/sys/miscfs/genfs/genfs_node.h	(revision 151)
+++ /trunk/src/sys/miscfs/genfs/genfs_node.h	(revision 152)
@@ -1,3 +1,3 @@
-/* $NetBSD: genfs_node.h,v 1.17 2008/05/14 16:49:47 reinoud Exp $ */
+/* $NetBSD: genfs_node.h,v 1.17.16.1 2011/05/20 08:11:28 matt Exp $ */
 
 /*
@@ -92,5 +92,7 @@
 void	genfs_node_wrlock(struct vnode *);
 void	genfs_node_rdlock(struct vnode *);
+int	genfs_node_rdtrylock(struct vnode *);
 void	genfs_node_unlock(struct vnode *);
+int	genfs_node_wrlocked(struct vnode *);
 
 #endif	/* _MISCFS_GENFS_GENFS_NODE_H_ */
Index: /trunk/src/sys/miscfs/genfs/genfs_vnops.c
===================================================================
--- /trunk/src/sys/miscfs/genfs/genfs_vnops.c	(revision 151)
+++ /trunk/src/sys/miscfs/genfs/genfs_vnops.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: genfs_vnops.c,v 1.167 2008/04/28 20:24:08 martin Exp $	*/
+/*	$NetBSD: genfs_vnops.c,v 1.167.18.1 2011/05/20 08:11:28 matt Exp $	*/
 
 /*-
@@ -58,5 +58,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.167 2008/04/28 20:24:08 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.167.18.1 2011/05/20 08:11:28 matt Exp $");
 
 #include <sys/param.h>
@@ -494,4 +494,12 @@
 }
 
+int
+genfs_node_rdtrylock(struct vnode *vp)
+{
+	struct genfs_node *gp = VTOG(vp);
+
+	return rw_tryenter(&gp->g_glock, RW_READER);
+}
+
 void
 genfs_node_unlock(struct vnode *vp)
@@ -501,2 +509,10 @@
 	rw_exit(&gp->g_glock);
 }
+
+int
+genfs_node_wrlocked(struct vnode *vp)
+{
+	struct genfs_node *gp = VTOG(vp);
+
+	return rw_write_held(&gp->g_glock);
+}
Index: /trunk/src/sys/miscfs/procfs/procfs_linux.c
===================================================================
--- /trunk/src/sys/miscfs/procfs/procfs_linux.c	(revision 151)
+++ /trunk/src/sys/miscfs/procfs/procfs_linux.c	(revision 152)
@@ -1,3 +1,3 @@
-/*      $NetBSD: procfs_linux.c,v 1.54.14.1 2010/04/21 00:28:20 matt Exp $      */
+/*      $NetBSD: procfs_linux.c,v 1.54.14.3 2011/04/29 08:12:08 matt Exp $      */
 
 /*
@@ -37,5 +37,9 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_linux.c,v 1.54.14.1 2010/04/21 00:28:20 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_linux.c,v 1.54.14.3 2011/04/29 08:12:08 matt Exp $");
+
+#ifdef _KERNEL_OPT
+#include "opt_multiprocessor.h"
+#endif
 
 #include <sys/param.h>
Index: /trunk/src/sys/net/bpf_filter.c
===================================================================
--- /trunk/src/sys/net/bpf_filter.c	(revision 151)
+++ /trunk/src/sys/net/bpf_filter.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: bpf_filter.c,v 1.35 2008/08/20 13:01:54 joerg Exp $	*/
+/*	$NetBSD: bpf_filter.c,v 1.35.12.1 2011/05/20 08:11:29 matt Exp $	*/
 
 /*-
@@ -38,5 +38,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bpf_filter.c,v 1.35 2008/08/20 13:01:54 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bpf_filter.c,v 1.35.12.1 2011/05/20 08:11:29 matt Exp $");
 
 #if 0
@@ -514,5 +514,5 @@
 				 * Check for constant division by 0.
 				 */
-				if (BPF_RVAL(p->code) == BPF_K && p->k == 0)
+				if (BPF_SRC(p->code) == BPF_K && p->k == 0)
 					return 0;
 				break;
Index: /trunk/src/sys/net/if.c
===================================================================
--- /trunk/src/sys/net/if.c	(revision 151)
+++ /trunk/src/sys/net/if.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: if.c,v 1.230.4.1.4.1 2010/04/21 00:28:21 matt Exp $	*/
+/*	$NetBSD: if.c,v 1.230.4.1.4.2 2011/05/20 08:11:29 matt Exp $	*/
 
 /*-
@@ -91,5 +91,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.230.4.1.4.1 2010/04/21 00:28:21 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.230.4.1.4.2 2011/05/20 08:11:29 matt Exp $");
 
 #include "opt_inet.h"
@@ -1714,5 +1714,5 @@
 #ifdef COMPAT_OIFREQ
 	if (cmd != ocmd)
-		ifreqn2o(oifr, ifr);
+		ifreqn2o(ifr, oifr);
 #endif
 
Index: /trunk/src/sys/net/route.c
===================================================================
--- /trunk/src/sys/net/route.c	(revision 151)
+++ /trunk/src/sys/net/route.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: route.c,v 1.113.4.1 2009/04/03 17:59:03 snj Exp $	*/
+/*	$NetBSD: route.c,v 1.113.4.1.4.1 2010/08/16 18:42:58 matt Exp $	*/
 
 /*-
@@ -94,5 +94,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.113.4.1 2009/04/03 17:59:03 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.113.4.1.4.1 2010/08/16 18:42:58 matt Exp $");
 
 #include <sys/param.h>
@@ -377,5 +377,5 @@
 	struct rtentry *rt;
 	int error = 0;
-	u_quad_t *stat = NULL;
+	uint64_t *stat = NULL;
 	struct rt_addrinfo info;
 	struct ifaddr *ifa;
Index: /trunk/src/sys/net/route.h
===================================================================
--- /trunk/src/sys/net/route.h	(revision 151)
+++ /trunk/src/sys/net/route.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: route.h,v 1.70.16.1.4.2 2010/05/13 05:34:58 matt Exp $	*/
+/*	$NetBSD: route.h,v 1.70.16.1.4.3 2010/08/16 18:42:58 matt Exp $	*/
 
 /*
@@ -68,14 +68,14 @@
  */
 struct rt_metrics {
-	u_quad_t rmx_locks;	/* Kernel must leave these values alone */
-	u_quad_t rmx_mtu;	/* MTU for this path */
-	u_quad_t rmx_hopcount;	/* max hops expected */
-	u_quad_t rmx_expire;	/* lifetime for route, e.g. redirect */
-	u_quad_t rmx_recvpipe;	/* inbound delay-bandwidth product */
-	u_quad_t rmx_sendpipe;	/* outbound delay-bandwidth product */
-	u_quad_t rmx_ssthresh;	/* outbound gateway buffer limit */
-	u_quad_t rmx_rtt;	/* estimated round trip time */
-	u_quad_t rmx_rttvar;	/* estimated rtt variance */
-	u_quad_t rmx_pksent;	/* packets sent using this route */
+	uint64_t rmx_locks;	/* Kernel must leave these values alone */
+	uint64_t rmx_mtu;	/* MTU for this path */
+	uint64_t rmx_hopcount;	/* max hops expected */
+	uint64_t rmx_expire;	/* lifetime for route, e.g. redirect */
+	uint64_t rmx_recvpipe;	/* inbound delay-bandwidth product */
+	uint64_t rmx_sendpipe;	/* outbound delay-bandwidth product */
+	uint64_t rmx_ssthresh;	/* outbound gateway buffer limit */
+	uint64_t rmx_rtt;	/* estimated round trip time */
+	uint64_t rmx_rttvar;	/* estimated rtt variance */
+	uint64_t rmx_pksent;	/* packets sent using this route */
 };
 
@@ -160,9 +160,9 @@
  */
 struct	rtstat {
-	u_quad_t rts_badredirect;	/* bogus redirect calls */
-	u_quad_t rts_dynamic;		/* routes created by redirects */
-	u_quad_t rts_newgateway;	/* routes modified by redirects */
-	u_quad_t rts_unreach;		/* lookups which failed */
-	u_quad_t rts_wildcard;		/* lookups satisfied by a wildcard */
+	uint64_t rts_badredirect;	/* bogus redirect calls */
+	uint64_t rts_dynamic;		/* routes created by redirects */
+	uint64_t rts_newgateway;	/* routes modified by redirects */
+	uint64_t rts_unreach;		/* lookups which failed */
+	uint64_t rts_wildcard;		/* lookups satisfied by a wildcard */
 };
 /*
@@ -180,5 +180,5 @@
 	int	rtm_errno;	/* why failed */
 	int	rtm_use;	/* from rtentry */
-	u_quad_t rtm_inits;	/* which metrics we are initializing */
+	uint64_t rtm_inits;	/* which metrics we are initializing */
 	struct	rt_metrics rtm_rmx; /* metrics themselves */
 };
@@ -245,5 +245,5 @@
 
 #define RT_ROUNDUP(a) \
-	((a) > 0 ? (1 + (((a) - 1) | (sizeof(u_quad_t) - 1))) : sizeof(u_quad_t))
+	((a) > 0 ? (1 + (((a) - 1) | (sizeof(uint64_t) - 1))) : sizeof(uint64_t))
 #define RT_ADVANCE(x, n) (x += RT_ROUNDUP((n)->sa_len))
 
Index: /trunk/src/sys/netinet/tcp_input.c
===================================================================
--- /trunk/src/sys/netinet/tcp_input.c	(revision 151)
+++ /trunk/src/sys/netinet/tcp_input.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: tcp_input.c,v 1.291.8.1.2.1 2010/04/21 00:28:22 matt Exp $	*/
+/*	$NetBSD: tcp_input.c,v 1.291.8.1.2.2 2011/05/20 08:11:29 matt Exp $	*/
 
 /*
@@ -146,5 +146,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.291.8.1.2.1 2010/04/21 00:28:22 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.291.8.1.2.2 2011/05/20 08:11:29 matt Exp $");
 
 #include "opt_inet.h"
@@ -3344,10 +3344,7 @@
 		(void) m_free(sc->sc_ipopts);
 	rtcache_free(&sc->sc_route);
-	if (callout_invoking(&sc->sc_timer))
-		sc->sc_flags |= SCF_DEAD;
-	else {
-		callout_destroy(&sc->sc_timer);
-		pool_put(&syn_cache_pool, sc);
-	}
+	sc->sc_flags |= SCF_DEAD;
+	if (!callout_invoking(&sc->sc_timer))
+		callout_schedule(&(sc)->sc_timer, 1);
 }
 
@@ -3510,5 +3507,9 @@
 	TCP_STATINC(TCP_STAT_SC_TIMED_OUT);
 	syn_cache_rm(sc);
-	syn_cache_put(sc);	/* calls pool_put but see spl above */
+	if (sc->sc_ipopts)
+		(void) m_free(sc->sc_ipopts);
+	rtcache_free(&sc->sc_route);
+	callout_destroy(&sc->sc_timer);
+	pool_put(&syn_cache_pool, sc);
 	KERNEL_UNLOCK_ONE(NULL);
 	mutex_exit(softnet_lock);
@@ -4183,4 +4184,9 @@
 	} else {
 		s = splsoftnet();
+		/*
+		 * syn_cache_put() will try to schedule the timer, so
+		 * we need to initialize it
+		 */
+		SYN_CACHE_TIMER_ARM(sc);
 		syn_cache_put(sc);
 		splx(s);
Index: /trunk/src/sys/netinet6/udp6_output.c
===================================================================
--- /trunk/src/sys/netinet6/udp6_output.c	(revision 151)
+++ /trunk/src/sys/netinet6/udp6_output.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: udp6_output.c,v 1.37 2008/10/24 22:30:32 dyoung Exp $	*/
+/*	$NetBSD: udp6_output.c,v 1.37.12.1 2011/05/20 08:11:29 matt Exp $	*/
 /*	$KAME: udp6_output.c,v 1.43 2001/10/15 09:19:52 itojun Exp $	*/
 
@@ -63,5 +63,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: udp6_output.c,v 1.37 2008/10/24 22:30:32 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udp6_output.c,v 1.37.12.1 2011/05/20 08:11:29 matt Exp $");
 
 #include "opt_inet.h"
@@ -127,5 +127,6 @@
 	u_int16_t fport;
 	int error = 0;
-	struct ip6_pktopts *optp, opt;
+	struct ip6_pktopts *optp = NULL;
+	struct ip6_pktopts opt;
 	int priv;
 	int af = AF_INET6, hlen = sizeof(struct ip6_hdr);
@@ -168,5 +169,5 @@
 			scope_ambiguous = 1;
 		if ((error = sa6_embedscope(sin6, ip6_use_defzone)) != 0)
-			return (error);
+			goto release;
 	}
 
@@ -409,5 +410,6 @@
 releaseopt:
 	if (control) {
-		ip6_clearpktopts(&opt, -1);
+		if (optp == &opt)
+			ip6_clearpktopts(&opt, -1);
 		m_freem(control);
 	}
Index: /trunk/src/sys/netsmb/mchain.h
===================================================================
--- /trunk/src/sys/netsmb/mchain.h	(revision 151)
+++ /trunk/src/sys/netsmb/mchain.h	(revision 152)
@@ -60,6 +60,6 @@
 	struct mbuf *	mb_top;		/* head of mbufs chain */
 	struct mbuf * 	mb_cur;		/* current mbuf */
-	int		mb_mleft;	/* free space in the current mbuf */
-	int		mb_count;	/* total number of bytes */
+	size_t		mb_mleft;	/* free space in the current mbuf */
+	size_t		mb_count;	/* total number of bytes */
 	mb_copy_t *	mb_copy;	/* user defined copy function */
 	void *		mb_udata;	/* user data */
@@ -79,5 +79,5 @@
 struct mbuf *mb_detach(struct mbchain *mbp);
 int  mb_fixhdr(struct mbchain *mbp);
-void *mb_reserve(struct mbchain *mbp, int size);
+void *mb_reserve(struct mbchain *mbp, size_t size);
 
 int  mb_put_uint8(struct mbchain *mbp, u_int8_t x);
@@ -88,7 +88,7 @@
 int  mb_put_int64be(struct mbchain *mbp, int64_t x);
 int  mb_put_int64le(struct mbchain *mbp, int64_t x);
-int  mb_put_mem(struct mbchain *mbp, const char * source, int size, int type);
+int  mb_put_mem(struct mbchain *mbp, const char * source, size_t size, int type);
 int  mb_put_mbuf(struct mbchain *mbp, struct mbuf *m);
-int  mb_put_uio(struct mbchain *mbp, struct uio *uiop, int size);
+int  mb_put_uio(struct mbchain *mbp, struct uio *uiop, size_t size);
 
 int  md_init(struct mdchain *mdp);
@@ -107,7 +107,7 @@
 int  md_get_int64be(struct mdchain *mdp, int64_t *x);
 int  md_get_int64le(struct mdchain *mdp, int64_t *x);
-int  md_get_mem(struct mdchain *mdp, void *target, int size, int type);
+int  md_get_mem(struct mdchain *mdp, void *target, size_t size, int type);
 int  md_get_mbuf(struct mdchain *mdp, int size, struct mbuf **m);
-int  md_get_uio(struct mdchain *mdp, struct uio *uiop, int size);
+int  md_get_uio(struct mdchain *mdp, struct uio *uiop, size_t size);
 
 #endif	/* ifdef _KERNEL */
Index: /trunk/src/sys/netsmb/smb_dev.h
===================================================================
--- /trunk/src/sys/netsmb/smb_dev.h	(revision 151)
+++ /trunk/src/sys/netsmb/smb_dev.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: smb_dev.h,v 1.6 2006/05/14 21:20:13 elad Exp $	*/
+/*	$NetBSD: smb_dev.h,v 1.6.82.1 2011/05/20 08:11:30 matt Exp $	*/
 
 /*
@@ -68,7 +68,7 @@
 struct smbioc_ossn {
 	int		ioc_opt;
-	int		ioc_svlen;	/* size of ioc_server address */
+	uint32_t	ioc_svlen;	/* size of ioc_server address */
 	struct sockaddr*ioc_server;
-	int		ioc_lolen;	/* size of ioc_local address */
+	uint32_t	ioc_lolen;	/* size of ioc_local address */
 	struct sockaddr*ioc_local;
 	char		ioc_srvname[SMB_MAXSRVNAMELEN + 1];
Index: /trunk/src/sys/netsmb/smb_subr.c
===================================================================
--- /trunk/src/sys/netsmb/smb_subr.c	(revision 151)
+++ /trunk/src/sys/netsmb/smb_subr.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: smb_subr.c,v 1.32 2008/06/24 10:37:19 gmcgarry Exp $	*/
+/*	$NetBSD: smb_subr.c,v 1.32.14.1 2011/05/20 08:11:30 matt Exp $	*/
 
 /*
@@ -36,5 +36,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smb_subr.c,v 1.32 2008/06/24 10:37:19 gmcgarry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smb_subr.c,v 1.32.14.1 2011/05/20 08:11:30 matt Exp $");
 
 #include <sys/param.h>
@@ -97,5 +97,5 @@
 {
 	char *p;
-	int len;
+	size_t len;
 
 	len = s ? strlen(s) + 1 : 1;
@@ -112,8 +112,8 @@
  */
 char *
-smb_strdupin(char *s, int maxlen)
+smb_strdupin(char *s, size_t maxlen)
 {
 	char *p, bt;
-	int len = 0;
+	size_t len = 0;
 
 	for (p = s; ;p++) {
@@ -135,5 +135,5 @@
  */
 void *
-smb_memdupin(void *umem, int len)
+smb_memdupin(void *umem, size_t len)
 {
 	char *p;
@@ -161,5 +161,5 @@
 
 void *
-smb_zmalloc(unsigned long size, struct malloc_type *type, int flags)
+smb_zmalloc(size_t size, struct malloc_type *type, int flags)
 {
 
@@ -180,10 +180,10 @@
 m_dumpm(struct mbuf *m) {
 	char *p;
-	int len;
+	size_t len;
 	printf("d=");
 	while(m) {
-		p=mtod(m,char *);
-		len=m->m_len;
-		printf("(%d)",len);
+		p = mtod(m,char *);
+		len = m->m_len;
+		printf("(%zu)", len);
 		while(len--){
 			printf("%02x ",((int)*(p++)) & 0xff);
@@ -316,5 +316,5 @@
 int
 smb_put_dmem(struct mbchain *mbp, struct smb_vc *vcp, const char *src,
-	int size, int caseopt)
+	size_t size, int caseopt)
 {
 	struct iconv_drv *dp = vcp->vc_toserver;
Index: /trunk/src/sys/netsmb/smb_subr.h
===================================================================
--- /trunk/src/sys/netsmb/smb_subr.h	(revision 151)
+++ /trunk/src/sys/netsmb/smb_subr.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: smb_subr.h,v 1.18 2008/06/24 10:37:19 gmcgarry Exp $	*/
+/*	$NetBSD: smb_subr.h,v 1.18.14.1 2011/05/20 08:11:30 matt Exp $	*/
 
 /*
@@ -110,10 +110,10 @@
 int  smb_proc_intr(struct lwp *);
 char *smb_strdup(const char *s);
-char *smb_strdupin(char *s, int maxlen);
-void *smb_memdupin(void *umem, int len);
+char *smb_strdupin(char *s, size_t maxlen);
+void *smb_memdupin(void *umem, size_t len);
 void smb_strtouni(u_int16_t *dst, const char *src);
 void smb_strfree(char *s);
 void smb_memfree(void *s);
-void *smb_zmalloc(unsigned long size, struct malloc_type *type, int flags);
+void *smb_zmalloc(size_t size, struct malloc_type *type, int flags);
 
 int  smb_encrypt(const u_char *apwd, u_char *C8, u_char *RN);
@@ -121,5 +121,5 @@
 int  smb_maperror(int eclass, int eno);
 int  smb_put_dmem(struct mbchain *mbp, struct smb_vc *vcp,
-	const char *src, int len, int caseopt);
+	const char *src, size_t len, int caseopt);
 int  smb_put_dstring(struct mbchain *mbp, struct smb_vc *vcp,
 	const char *src, int caseopt);
Index: /trunk/src/sys/netsmb/subr_mchain.c
===================================================================
--- /trunk/src/sys/netsmb/subr_mchain.c	(revision 151)
+++ /trunk/src/sys/netsmb/subr_mchain.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: subr_mchain.c,v 1.15 2008/06/24 10:37:19 gmcgarry Exp $	*/
+/*	$NetBSD: subr_mchain.c,v 1.15.14.1 2011/05/20 08:11:30 matt Exp $	*/
 
 /*
@@ -36,5 +36,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_mchain.c,v 1.15 2008/06/24 10:37:19 gmcgarry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_mchain.c,v 1.15.14.1 2011/05/20 08:11:30 matt Exp $");
 
 #include <sys/param.h>
@@ -53,9 +53,7 @@
 #ifdef __NetBSD__
 static struct mbuf *
-m_getm(struct mbuf *m, int len, int how, int type)
+m_getm(struct mbuf *m, size_t len, int how, int type)
 {
         struct mbuf *top, *tail, *mp, *mtail = NULL;
-
-        KASSERT(len >= 0);
 
         mp = m_get(how, type);
@@ -113,5 +111,5 @@
 {
 	struct mbuf *m = m0;
-	int len = 0;
+	size_t len = 0;
 
 	while (m) {
@@ -176,5 +174,5 @@
  */
 void *
-mb_reserve(struct mbchain *mbp, int size)
+mb_reserve(struct mbchain *mbp, size_t size)
 {
 	struct mbuf *m, *mn;
@@ -182,5 +180,5 @@
 
 	if (size > MLEN)
-		panic("mb_reserve: size = %d", size);
+		panic("mb_reserve: size = %zu", size);
 	m = mbp->mb_cur;
 	if (mbp->mb_mleft < size) {
@@ -249,10 +247,11 @@
 
 int
-mb_put_mem(struct mbchain *mbp, const char *source, int size, int type)
+mb_put_mem(struct mbchain *mbp, const char *source, size_t size, int type)
 {
 	struct mbuf *m;
 	char *dst;
 	const char *src;
-	int cplen, error, mleft, count;
+	int error;
+	size_t cplen, mleft, count;
 
 	m = mbp->mb_cur;
@@ -324,7 +323,7 @@
  */
 int
-mb_put_uio(struct mbchain *mbp, struct uio *uiop, int size)
-{
-	long left;
+mb_put_uio(struct mbchain *mbp, struct uio *uiop, size_t size)
+{
+	size_t left;
 	int mtype, error;
 
@@ -515,10 +514,10 @@
 
 int
-md_get_mem(struct mdchain *mdp, void *targetv, int size, int type)
+md_get_mem(struct mdchain *mdp, void *targetv, size_t size, int type)
 {
 	char *target = targetv;
 	struct mbuf *m = mdp->md_cur;
 	int error;
-	u_int count;
+	size_t count;
 	u_char *s;
 
@@ -577,8 +576,8 @@
 
 int
-md_get_uio(struct mdchain *mdp, struct uio *uiop, int size)
+md_get_uio(struct mdchain *mdp, struct uio *uiop, size_t size)
 {
 	char *uiocp;
-	long left;
+	size_t left;
 	int mtype, error;
 
Index: /trunk/src/sys/nfs/nfs_bio.c
===================================================================
--- /trunk/src/sys/nfs/nfs_bio.c	(revision 151)
+++ /trunk/src/sys/nfs/nfs_bio.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: nfs_bio.c,v 1.179.4.1 2008/11/02 23:08:56 snj Exp $	*/
+/*	$NetBSD: nfs_bio.c,v 1.179.4.1.4.1 2011/05/20 08:11:31 matt Exp $	*/
 
 /*
@@ -36,5 +36,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_bio.c,v 1.179.4.1 2008/11/02 23:08:56 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_bio.c,v 1.179.4.1.4.1 2011/05/20 08:11:31 matt Exp $");
 
 #include "opt_nfs.h"
@@ -1046,5 +1046,5 @@
 			}
 			mutex_exit(&uobj->vmobjlock);
-			return 0;
+			goto out;
 		} else if (error == NFSERR_STALEWRITEVERF) {
 			nfs_clearcommit(vp->v_mount);
Index: /trunk/src/sys/opencrypto/crypto.c
===================================================================
--- /trunk/src/sys/opencrypto/crypto.c	(revision 151)
+++ /trunk/src/sys/opencrypto/crypto.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: crypto.c,v 1.29.4.1 2008/11/20 03:22:38 snj Exp $ */
+/*	$NetBSD: crypto.c,v 1.29.4.1.4.1 2011/05/20 08:11:31 matt Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/crypto.c,v 1.4.2.5 2003/02/26 00:14:05 sam Exp $	*/
 /*	$OpenBSD: crypto.c,v 1.41 2002/07/17 23:52:38 art Exp $	*/
@@ -54,5 +54,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: crypto.c,v 1.29.4.1 2008/11/20 03:22:38 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: crypto.c,v 1.29.4.1.4.1 2011/05/20 08:11:31 matt Exp $");
 
 #include <sys/param.h>
@@ -339,6 +339,8 @@
 		/* See if all the algorithms are supported. */
 		for (cr = cri; cr; cr = cr->cri_next)
-			if (crypto_drivers[hid].cc_alg[cr->cri_alg] == 0)
+			if (crypto_drivers[hid].cc_alg[cr->cri_alg] == 0) {
+				DPRINTF(("crypto_newsession: alg %d not supported\n", cr->cri_alg));
 				break;
+			}
 
 		if (cr == NULL) {
@@ -715,4 +717,8 @@
 
 	mutex_spin_enter(&crypto_mtx);
+	DPRINTF(("crypto_dispatch: crp %08x, reqid 0x%x, alg %d\n",
+			(uint32_t)crp,
+			crp->crp_reqid,
+			crp->crp_desc->crd_alg));
 
 	cryptostats.cs_ops++;
@@ -963,4 +969,6 @@
 	if (crp == NULL)
 		return;
+	DPRINTF(("crypto_freereq[%d]: crp %p\n",
+			(uint32_t)crp->crp_sid, crp));
 
 	/* sanity check */
@@ -1022,4 +1030,6 @@
 		crypto_tstat(&cryptostats.cs_done, &crp->crp_tstamp);
 #endif
+	DPRINTF(("crypto_done[%d]: crp %08x\n",
+			(uint32_t)crp->crp_sid, (uint32_t)crp));
 
 	/*
@@ -1068,12 +1078,16 @@
 			 * unecessary context switches.
 			 */
+			DPRINTF(("crypto_done[%d]: crp %08x CRYPTO_F_USER\n",
+				(uint32_t)crp->crp_sid, (uint32_t)crp));
 		} else {
 			wasempty = TAILQ_EMPTY(&crp_ret_q);
-			DPRINTF(("crypto_done: queueing %08x\n", (uint32_t)crp));
+			DPRINTF(("crypto_done[%d]: queueing %08x\n",
+					(uint32_t)crp->crp_sid, (uint32_t)crp));
 			crp->crp_flags |= CRYPTO_F_ONRETQ;
 			TAILQ_INSERT_TAIL(&crp_ret_q, crp, crp_next);
 			if (wasempty) {
-				DPRINTF(("crypto_done: waking cryptoret, %08x " \
-					"hit empty queue\n.", (uint32_t)crp));
+				DPRINTF(("crypto_done[%d]: waking cryptoret, crp %08x " \
+					"hit empty queue\n.",
+					(uint32_t)crp->crp_sid, (uint32_t)crp));
 				cv_signal(&cryptoret_cv);
 			}
Index: /trunk/src/sys/opencrypto/cryptodev.c
===================================================================
--- /trunk/src/sys/opencrypto/cryptodev.c	(revision 151)
+++ /trunk/src/sys/opencrypto/cryptodev.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cryptodev.c,v 1.44.8.2 2009/04/04 23:36:28 snj Exp $ */
+/*	$NetBSD: cryptodev.c,v 1.44.8.2.4.1 2011/05/20 08:11:31 matt Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/cryptodev.c,v 1.4.2.4 2003/06/03 00:09:02 sam Exp $	*/
 /*	$OpenBSD: cryptodev.c,v 1.53 2002/07/10 22:21:30 mickey Exp $	*/
@@ -65,5 +65,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cryptodev.c,v 1.44.8.2 2009/04/04 23:36:28 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cryptodev.c,v 1.44.8.2.4.1 2011/05/20 08:11:31 matt Exp $");
 
 #include <sys/param.h>
@@ -88,4 +88,5 @@
 #include "opt_ocf.h"
 #include <opencrypto/cryptodev.h>
+#include <opencrypto/ocryptodev.h>
 #include <opencrypto/xform.h>
 
@@ -95,8 +96,10 @@
 	u_int32_t	ses;
 
-	u_int32_t	cipher;
+	u_int32_t	cipher;		/* note: shares name space in crd_alg */
 	struct enc_xform *txform;
-	u_int32_t	mac;
+	u_int32_t	mac;		/* note: shares name space in crd_alg */
 	struct auth_hash *thash;
+	u_int32_t	comp_alg;	/* note: shares name space in crd_alg */
+	struct comp_algo *tcomp;
 
 	void *		key;
@@ -153,20 +156,15 @@
 };
 
+struct csession *cryptodev_csefind(struct fcrypt *, u_int);
 static struct	csession *csefind(struct fcrypt *, u_int);
 static int	csedelete(struct fcrypt *, struct csession *);
 static struct	csession *cseadd(struct fcrypt *, struct csession *);
 static struct	csession *csecreate(struct fcrypt *, u_int64_t, void *,
-    u_int64_t, void *, u_int64_t, u_int32_t, u_int32_t, struct enc_xform *,
-    struct auth_hash *);
+    u_int64_t, void *, u_int64_t, u_int32_t, u_int32_t, u_int32_t,
+    struct enc_xform *, struct auth_hash *, struct comp_algo *);
 static int	csefree(struct csession *);
 
-static int	cryptodev_op(struct csession *, struct crypt_op *,
-    struct lwp *);
-static int	cryptodev_mop(struct fcrypt *, struct crypt_n_op *, int,
-    struct lwp *);
 static int	cryptodev_key(struct crypt_kop *);
 static int	cryptodev_mkey(struct fcrypt *, struct crypt_n_kop *, int);
-static int	cryptodev_session(struct fcrypt *, struct session_op *);
-static int	cryptodev_msession(struct fcrypt *, struct session_n_op *, int);
 static int	cryptodev_msessionfin(struct fcrypt *, int, u_int32_t *);
 
@@ -180,4 +178,6 @@
     int);
 static int	cryptodev_getstatus(struct fcrypt *, struct crypt_result *);
+
+extern int	ocryptof_ioctl(struct file *, u_long, void *);
 
 /*
@@ -373,16 +373,19 @@
 		break;
 	default:
-		DPRINTF(("invalid ioctl cmd %ld\n", cmd));
-		error = EINVAL;
+		/* Check for backward compatible commands */
+		error = ocryptof_ioctl(fp, cmd, data);
 	}
 	return error;
 }
 
-static int
+int
 cryptodev_op(struct csession *cse, struct crypt_op *cop, struct lwp *l)
 {
 	struct cryptop *crp = NULL;
-	struct cryptodesc *crde = NULL, *crda = NULL;
+	struct cryptodesc *crde = NULL, *crda = NULL, *crdc = NULL;
 	int error;
+	int iov_len = cop->len;
+	int flags=0;
+	int dst_len;	/* copyout size */
 
 	if (cop->len > 256*1024-4)
@@ -392,4 +395,13 @@
 		if (cop->len == 0 || (cop->len % cse->txform->blocksize) != 0)
 			return EINVAL;
+	}
+
+	DPRINTF(("cryptodev_op[%d]: iov_len %d\n", (uint32_t)cse->sid, iov_len));
+	if ((cse->tcomp) && cop->dst_len) {
+		if (iov_len < cop->dst_len) {
+			/* Need larger iov to deal with decompress */
+			iov_len = cop->dst_len;
+		}
+		DPRINTF(("cryptodev_op: iov_len -> %d for decompress\n", iov_len));
 	}
 
@@ -401,26 +413,48 @@
 	UIO_SETUP_SYSSPACE(&cse->uio);
 	memset(&cse->iovec, 0, sizeof(cse->iovec));
-	cse->uio.uio_iov[0].iov_len = cop->len;
-	cse->uio.uio_iov[0].iov_base = kmem_alloc(cop->len, KM_SLEEP);
+
+	/* the iov needs to be big enough to handle the uncompressed
+	 * data.... */
+	cse->uio.uio_iov[0].iov_len = iov_len;
+	cse->uio.uio_iov[0].iov_base = kmem_alloc(iov_len, KM_SLEEP);
 	cse->uio.uio_resid = cse->uio.uio_iov[0].iov_len;
-
-	crp = crypto_getreq((cse->txform != NULL) + (cse->thash != NULL));
+	DPRINTF(("cryptodev_op[%d]: uio.iov_base %p malloced %d bytes\n",
+		(uint32_t)cse->sid, cse->uio.uio_iov[0].iov_base, iov_len));
+
+	crp = crypto_getreq((cse->tcomp != NULL) + (cse->txform != NULL) + (cse->thash != NULL));
 	if (crp == NULL) {
 		error = ENOMEM;
 		goto bail;
 	}
+	DPRINTF(("cryptodev_op[%d]: crp %p\n", (uint32_t)cse->sid, crp));
+
+	/* crds are always ordered tcomp, thash, then txform */
+	/* with optional missing links */
+
+	/* XXX: If we're going to compress then hash or encrypt, we need
+	 * to be able to pass on the new size of the data.
+	 */
+
+	if (cse->tcomp) {
+		crdc = crp->crp_desc;
+	}
 
 	if (cse->thash) {
-		crda = crp->crp_desc;
+		crda = crdc ? crdc->crd_next : crp->crp_desc;
 		if (cse->txform && crda)
 			crde = crda->crd_next;
 	} else {
-		if (cse->txform)
-			crde = crp->crp_desc;
-		else {
+		if (cse->txform) {
+			crde = crdc ? crdc->crd_next : crp->crp_desc;
+		} else if (!cse->tcomp) {
 			error = EINVAL;
 			goto bail;
 		}
 	}
+
+	DPRINTF(("ocf[%d]: iov_len %d, cop->len %d\n",
+			(uint32_t)cse->sid,
+			cse->uio.uio_iov[0].iov_len, 
+			cop->len));
 
 	if ((error = copyin(cop->src, cse->uio.uio_iov[0].iov_base, cop->len)))
@@ -430,4 +464,29 @@
 	}
 
+	if (crdc) {
+		switch (cop->op) {
+		case COP_COMP:
+			crdc->crd_flags |= CRD_F_COMP;
+			break;
+		case COP_DECOMP:
+			crdc->crd_flags &= ~CRD_F_COMP;
+			break;
+		default:
+			break;
+		}
+		/* more data to follow? */
+		if (cop->flags & COP_F_MORE) {
+			flags |= CRYPTO_F_MORE;
+		}
+		crdc->crd_len = cop->len;
+		crdc->crd_inject = 0;
+
+		crdc->crd_alg = cse->comp_alg;
+		crdc->crd_key = NULL;
+		crdc->crd_klen = 0;
+		DPRINTF(("cryptodev_op[%d]: crdc setup for comp_alg %d.\n",
+					(uint32_t)cse->sid, crdc->crd_alg));
+	}
+
 	if (crda) {
 		crda->crd_skip = 0;
@@ -438,11 +497,18 @@
 		crda->crd_key = cse->mackey;
 		crda->crd_klen = cse->mackeylen * 8;
+		DPRINTF(("cryptodev_op: crda setup for mac %d.\n", crda->crd_alg));
 	}
 
 	if (crde) {
-		if (cop->op == COP_ENCRYPT)
+		switch (cop->op) {
+		case COP_ENCRYPT:
 			crde->crd_flags |= CRD_F_ENCRYPT;
-		else
+			break;
+		case COP_DECRYPT:
 			crde->crd_flags &= ~CRD_F_ENCRYPT;
+			break;
+		default:
+			break;
+		}
 		crde->crd_len = cop->len;
 		crde->crd_inject = 0;
@@ -451,5 +517,7 @@
 		crde->crd_key = cse->key;
 		crde->crd_klen = cse->keylen * 8;
-	}
+		DPRINTF(("cryptodev_op: crde setup for cipher %d.\n", crde->crd_alg));
+	}
+
 
 	crp->crp_ilen = cop->len;
@@ -459,5 +527,6 @@
 	 * delayed or is not completed immediately the flag is removed.
 	 */
-	crp->crp_flags = CRYPTO_F_IOV | (cop->flags & COP_F_BATCH) | CRYPTO_F_USER;
+	crp->crp_flags = CRYPTO_F_IOV | (cop->flags & COP_F_BATCH) | CRYPTO_F_USER |
+			flags;
 	crp->crp_buf = (void *)&cse->uio;
 	crp->crp_callback = (int (*) (struct cryptop *)) cryptodev_cb;
@@ -517,5 +586,5 @@
 	 * If the request was going to be completed by the
 	 * ioctl thread then it would have been done by now.
-	 * Remove the F_USER flag it so crypto_done() is not confused
+	 * Remove the F_USER flag so crypto_done() is not confused
 	 * if the crypto device calls it after this point.
 	 */
@@ -538,6 +607,7 @@
 
 	while (!(crp->crp_flags & CRYPTO_F_DONE)) {
-		DPRINTF(("cryptodev_op: sleeping on cv %08x for crp %08x\n", \
-		    (uint32_t)&crp->crp_cv, (uint32_t)crp));
+		DPRINTF(("cryptodev_op[%d]: sleeping on cv %08x for crp %08x\n",
+			(uint32_t)cse->sid, (uint32_t)&crp->crp_cv,
+			(uint32_t)crp));
 		cv_wait(&crp->crp_cv, &crypto_mtx);	/* XXX cv_wait_sig? */
 	}
@@ -563,6 +633,16 @@
 	}
 
+	dst_len = crp->crp_ilen;
+	/* let the user know how much data was returned */
+	if (crp->crp_olen) {
+		dst_len = cop->dst_len = crp->crp_olen;
+	}
+	crp->len = dst_len;
+
+	if (cop->dst) {
+		DPRINTF(("cryptodev_op: copyout %d bytes to %p\n", dst_len, cop->dst));
+	}
 	if (cop->dst &&
-	    (error = copyout(cse->uio.uio_iov[0].iov_base, cop->dst, cop->len)))
+	    (error = copyout(cse->uio.uio_iov[0].iov_base, cop->dst, dst_len)))
 	{
 		DPRINTF(("cryptodev_op: copyout error %d\n", error));
@@ -576,11 +656,12 @@
 	}
 
+
 bail:
 	if (crp) {
 		crypto_freereq(crp);
 	}
-	if (cse->uio.uio_iov[0].iov_base)
-		kmem_free(cse->uio.uio_iov[0].iov_base,
-		    cse->uio.uio_iov[0].iov_len);
+	if (cse->uio.uio_iov[0].iov_base) {
+		kmem_free(cse->uio.uio_iov[0].iov_base,iov_len);
+	}
 
 	return error;
@@ -816,4 +897,10 @@
 }
 
+/* needed for compatibility module */
+struct	csession *cryptodev_csefind(struct fcrypt *fcr, u_int ses)
+{
+	return csefind(fcr, ses);
+}
+
 /* csefind: call with crypto_mtx held. */
 static struct csession *
@@ -863,5 +950,6 @@
 csecreate(struct fcrypt *fcr, u_int64_t sid, void *key, u_int64_t keylen,
     void *mackey, u_int64_t mackeylen, u_int32_t cipher, u_int32_t mac,
-    struct enc_xform *txform, struct auth_hash *thash)
+    u_int32_t comp_alg, struct enc_xform *txform, struct auth_hash *thash,
+    struct comp_algo *tcomp)
 {
 	struct csession *cse;
@@ -878,6 +966,8 @@
 	cse->cipher = cipher;
 	cse->mac = mac;
+	cse->comp_alg = comp_alg;
 	cse->txform = txform;
 	cse->thash = thash;
+	cse->tcomp = tcomp;
 	cse->error = 0;
 	if (cseadd(fcr, cse))
@@ -968,5 +1058,5 @@
 };
 
-static int 
+int 
 cryptodev_mop(struct fcrypt *fcr, 
               struct crypt_n_op * cnop,
@@ -974,7 +1064,9 @@
 {
 	struct cryptop *crp = NULL;
-	struct cryptodesc *crde = NULL, *crda = NULL;
+	struct cryptodesc *crde = NULL, *crda = NULL, *crdc = NULL;
 	int req, error=0;
 	struct csession *cse;
+	int flags=0;
+	int iov_len;
 
 	for (req = 0; req < count; req++) {
@@ -1003,8 +1095,19 @@
 
 		crp = crypto_getreq((cse->txform != NULL) +
-		    (cse->thash != NULL));
+				    (cse->thash != NULL) +
+				    (cse->tcomp != NULL));
 		if (crp == NULL) {
 			cnop[req].status = ENOMEM;
 			goto bail;
+		}
+
+		iov_len = cnop[req].len;
+		/* got a compression/decompression max size? */
+		if ((cse->tcomp) && cnop[req].dst_len) {
+			if (iov_len < cnop[req].dst_len) {
+				/* Need larger iov to deal with decompress */
+				iov_len = cnop[req].dst_len;
+			}
+			DPRINTF(("cryptodev_mop: iov_len -> %d for decompress\n", iov_len));
 		}
 
@@ -1016,19 +1119,23 @@
 		UIO_SETUP_SYSSPACE(&crp->uio);
 		memset(&crp->iovec, 0, sizeof(crp->iovec));
-		crp->uio.uio_iov[0].iov_len = cnop[req].len;
-		crp->uio.uio_iov[0].iov_base = kmem_alloc(cnop[req].len,
-		    KM_SLEEP);
+		crp->uio.uio_iov[0].iov_len = iov_len;
+		DPRINTF(("cryptodev_mop: kmem_alloc(%d) for iov \n", iov_len));
+		crp->uio.uio_iov[0].iov_base = kmem_alloc(iov_len, KM_SLEEP);
 		crp->uio.uio_resid = crp->uio.uio_iov[0].iov_len;
 
+		if (cse->tcomp) {
+			crdc = crp->crp_desc;
+		}
+
 		if (cse->thash) {
-			crda = crp->crp_desc;
+			crda = crdc ? crdc->crd_next : crp->crp_desc;
 			if (cse->txform && crda)
 				crde = crda->crd_next;
 		} else {
-			if (cse->txform)
-				crde = crp->crp_desc;
-			else {
-				cnop[req].status = EINVAL;
-				goto bail;	
+			if (cse->txform) {
+				crde = crdc ? crdc->crd_next : crp->crp_desc;
+			} else if (!cse->tcomp) {
+				error = EINVAL;
+				goto bail;
 			}
 		}
@@ -1038,4 +1145,31 @@
 			cnop[req].status = EINVAL;
 			goto bail;
+		}
+
+		if (crdc) {
+			switch (cnop[req].op) {
+			case COP_COMP:
+				crdc->crd_flags |= CRD_F_COMP;
+				break;
+			case COP_DECOMP:
+				crdc->crd_flags &= ~CRD_F_COMP;
+				break;
+			default:
+				break;
+			}
+			/* more data to follow? */
+			if (cnop[req].flags & COP_F_MORE) {
+				flags |= CRYPTO_F_MORE;
+			}
+			crdc->crd_len = cnop[req].len;
+			crdc->crd_inject = 0;
+
+			crdc->crd_alg = cse->comp_alg;
+			crdc->crd_key = NULL;
+			crdc->crd_klen = 0;
+			DPRINTF(("cryptodev_mop[%d]: crdc setup for comp_alg %d"
+				 " len %d.\n",
+				(uint32_t)cse->sid, crdc->crd_alg,
+				crdc->crd_len));
 		}
 	
@@ -1077,5 +1211,5 @@
 		crp->crp_ilen = cnop[req].len;
 		crp->crp_flags = CRYPTO_F_IOV | CRYPTO_F_CBIMM |
-		    (cnop[req].flags & COP_F_BATCH);
+		    (cnop[req].flags & COP_F_BATCH) | flags;
 		crp->crp_buf = (void *)&crp->uio;
 		crp->crp_callback = (int (*) (struct cryptop *)) cryptodev_mcb;
@@ -1084,7 +1218,9 @@
 		crp->fcrp = fcr;
 		crp->dst = cnop[req].dst;
-		/* we can use the crp_ilen in cryptop(crp) for this */
-		crp->len = cnop[req].len;
+		crp->len = cnop[req].len; /* input len, iov may be larger */
 		crp->mac = cnop[req].mac;
+		DPRINTF(("cryptodev_mop: iov_base %p dst %p len %d mac %p\n",
+			    crp->uio.uio_iov[0].iov_base, crp->dst, crp->len,
+			    crp->mac));
 
 		if (cnop[req].iv) {
@@ -1151,9 +1287,9 @@
 		if (cnop[req].status) {
 			if (crp) {
+				if (crp->uio.uio_iov[0].iov_base) {
+					kmem_free(crp->uio.uio_iov[0].iov_base,
+					    crp->uio.uio_iov[0].iov_len);
+				}
 				crypto_freereq(crp);
-				if(cse->uio.uio_iov[0].iov_base) {
-					kmem_free(cse->uio.uio_iov[0].iov_base,
-					    cse->uio.uio_iov[0].iov_len);
-				}
 			}
 			error = 0;
@@ -1304,14 +1440,19 @@
 }
 
-static int
+int
 cryptodev_session(struct fcrypt *fcr, struct session_op *sop) 
 {
 	struct cryptoini cria, crie;
+	struct cryptoini cric;		/* compressor */
+	struct cryptoini *crihead = NULL;
 	struct enc_xform *txform = NULL;
 	struct auth_hash *thash = NULL;
+	struct comp_algo *tcomp = NULL;
 	struct csession *cse;
 	u_int64_t sid;
 	int error = 0;
 
+	DPRINTF(("cryptodev_session() cipher=%d, mac=%d\n", sop->cipher, sop->mac));
+
 	/* XXX there must be a way to not embed the list of xforms here */
 	switch (sop->cipher) {
@@ -1329,4 +1470,5 @@
 	case CRYPTO_CAST_CBC:
 		txform = &enc_xform_cast5;
+		break;
 	case CRYPTO_SKIPJACK_CBC:
 		txform = &enc_xform_skipjack;
@@ -1343,4 +1485,19 @@
 	default:
 		DPRINTF(("Invalid cipher %d\n", sop->cipher));
+		return EINVAL;
+	}
+
+	switch (sop->comp_alg) {
+	case 0:
+		break;
+	case CRYPTO_DEFLATE_COMP:
+		tcomp = &comp_algo_deflate;
+		break;
+	case CRYPTO_GZIP_COMP:
+		tcomp = &comp_algo_gzip;
+		DPRINTF(("cryptodev_session() tcomp for GZIP\n"));
+		break;
+	default:
+		DPRINTF(("Invalid compression alg %d\n", sop->comp_alg));
 		return EINVAL;
 	}
@@ -1396,4 +1553,18 @@
 	memset(&crie, 0, sizeof(crie));
 	memset(&cria, 0, sizeof(cria));
+	memset(&cric, 0, sizeof(cric));
+
+	if (tcomp) {
+		cric.cri_alg = tcomp->type;
+		cric.cri_klen = 0;
+		DPRINTF(("tcomp->type = %d\n", tcomp->type));
+
+		crihead = &cric;
+		if (thash) {
+			cric.cri_next = &cria;
+		} else if (txform) {
+			cric.cri_next = &crie;
+		}
+	}
 
 	if (txform) {
@@ -1411,7 +1582,8 @@
 		if ((error = copyin(sop->key, crie.cri_key, crie.cri_klen / 8)))
 			goto bail;
-		if (thash)
-			crie.cri_next = &cria;	/* XXX forces enc then hash? */
-	}
+		if (!crihead) {
+			crihead = &crie;
+		}
+	} 
 
 	if (thash) {
@@ -1432,13 +1604,19 @@
 			}
 		}
-	}
+		if (txform)
+			cria.cri_next = &crie;	/* XXX forces enc then hash? */
+		if (!crihead) {
+			crihead = &cria;
+		}
+	}
+
 	/* crypto_newsession requires that we hold the mutex. */
 	mutex_spin_enter(&crypto_mtx);
-	error = crypto_newsession(&sid, (txform ? &crie : &cria),
-	    crypto_devallowsoft);
+	error = crypto_newsession(&sid, crihead, crypto_devallowsoft);
 	if (!error) {
+		DPRINTF(("cyrptodev_session: got session %d\n", (uint32_t)sid));
 		cse = csecreate(fcr, sid, crie.cri_key, crie.cri_klen,
-		    cria.cri_key, cria.cri_klen, sop->cipher, sop->mac,
-		    txform, thash);
+		    cria.cri_key, cria.cri_klen, (txform ? sop->cipher : 0), sop->mac,
+		    (tcomp ? sop->comp_alg : 0), txform, thash, tcomp);
 		if (cse != NULL) {
 			sop->ses = cse->ses;
@@ -1467,5 +1645,5 @@
 }
 
-static int
+int
 cryptodev_msession(struct fcrypt *fcr, struct session_n_op *sn_ops,
 		   int count)
@@ -1522,11 +1700,10 @@
 	int completed=0;
 
-	/* On stack so nobody else can grab them -- no locking */
-	SLIST_HEAD(, cryptop) crp_delfree_l =
-	    SLIST_HEAD_INITIALIZER(crp_delfree_l);
-	SLIST_HEAD(, cryptkop) krp_delfree_l =
-	    SLIST_HEAD_INITIALIZER(krp_delfree_l);
-
-	mutex_spin_enter(&crypto_mtx);
+	/* On queue so nobody else can grab them
+	 * and copyout can be delayed-- no locking */
+	TAILQ_HEAD(, cryptop) crp_delfree_q = 
+		TAILQ_HEAD_INITIALIZER(crp_delfree_q);
+	TAILQ_HEAD(, cryptkop) krp_delfree_q = 
+		TAILQ_HEAD_INITIALIZER(krp_delfree_q);
 
 	/* at this point we do not know which response user is requesting for 
@@ -1534,17 +1711,48 @@
 	 * count is 2 then 1 from symmetric and 1 from asymmetric queue and 
 	 * if 3 then 2 symmetric and 1 asymmetric and so on */
-	for(; req < count ;) {
+
+	/* pull off a list of requests while protected from changes */
+	mutex_spin_enter(&crypto_mtx);
+	while (req < count) {
 		crp = TAILQ_FIRST(&fcr->crp_ret_mq);
-		if(crp) {
+		if (crp) {
+			TAILQ_REMOVE(&fcr->crp_ret_mq, crp, crp_next);
+			TAILQ_INSERT_TAIL(&crp_delfree_q, crp, crp_next);
+			cse = (struct csession *)crp->crp_opaque;
+
+			/* see if the session is still valid */
+			cse = csefind(fcr, cse->ses);
+			if (cse != NULL) {
+				crypt_res[req].status = 0;
+			} else {
+				DPRINTF(("csefind failed\n"));
+				crypt_res[req].status = EINVAL;
+			}
+			req++;
+		}
+		if(req < count) {
+			crypt_res[req].status = 0;
+			krp = TAILQ_FIRST(&fcr->crp_ret_mkq);
+			if (krp) {
+				TAILQ_REMOVE(&fcr->crp_ret_mkq, krp, krp_next);
+				TAILQ_INSERT_TAIL(&krp_delfree_q, krp, krp_next);
+			req++;
+			}
+		}
+	}
+	mutex_spin_exit(&crypto_mtx);
+
+	/* now do all the work outside the mutex */
+	for(req=0; req < count ;) {
+		crp = TAILQ_FIRST(&crp_delfree_q);
+		if (crp) {
+			if (crypt_res[req].status != 0) {
+				/* csefind failed during collection */
+				goto bail;
+			}
 			cse = (struct csession *)crp->crp_opaque;
 			crypt_res[req].reqid = crp->crp_reqid;
 			crypt_res[req].opaque = crp->crp_usropaque;
 			completed++;
-			cse = csefind(fcr, cse->ses);
-			if (cse == NULL) {
-				DPRINTF(("csefind failed\n"));
-				crypt_res[req].status = EINVAL;
-				goto bail;
-			}
 			
 			if (crp->crp_etype != 0) {
@@ -1567,13 +1775,15 @@
 			    cse->thash->authsize)))
 				goto bail;
+
 bail:
-			TAILQ_REMOVE(&fcr->crp_ret_mq, crp, crp_next);
-			SLIST_INSERT_HEAD(&crp_delfree_l, crp,
-			    crp_qun.crp_lnext);
+			TAILQ_REMOVE(&crp_delfree_q, crp, crp_next);
+			kmem_free(crp->uio.uio_iov[0].iov_base,
+			    crp->uio.uio_iov[0].iov_len);
+			crypto_freereq(crp);
 			req++;
 		}
 
-		if(req < count) {
-			krp = TAILQ_FIRST(&fcr->crp_ret_mkq);
+		if (req < count) {
+			krp = TAILQ_FIRST(&krp_delfree_q);
 			if (krp) {
 				crypt_res[req].reqid = krp->krp_reqid;
@@ -1607,38 +1817,23 @@
 				}
 fail:
-				TAILQ_REMOVE(&fcr->crp_ret_mkq, krp, krp_next);
+				TAILQ_REMOVE(&krp_delfree_q, krp, krp_next);
 				/* not sure what to do for this */
 				/* kop[req].crk_status = krp->krp_status; */ 
-				SLIST_INSERT_HEAD(&krp_delfree_l, krp,
-				    krp_qun.krp_lnext);
-			}
-			req++;
-		}
-	}
-	mutex_spin_exit(&crypto_mtx);
-
-	while(!SLIST_EMPTY(&crp_delfree_l)) {
-		crp = SLIST_FIRST(&crp_delfree_l);
-		SLIST_REMOVE_HEAD(&crp_delfree_l, crp_qun.crp_lnext);
-		kmem_free(crp->uio.uio_iov[0].iov_base,
-		    crp->uio.uio_iov[0].iov_len);
-		crypto_freereq(crp);
-	}
-	
-	while(!SLIST_EMPTY(&krp_delfree_l)) {
-		krp = SLIST_FIRST(&krp_delfree_l);
-		for (i = 0; i < CRK_MAXPARAM; i++) {
-			struct crparam *kp = &(krp->krp_param[i]);
-			if (kp->crp_p) {
-				size = (kp->crp_nbits + 7) / 8;
-				KASSERT(size > 0);
-				(void)memset(kp->crp_p, 0, size);
-				kmem_free(kp->crp_p, size);
-			}
-		}
-		SLIST_REMOVE_HEAD(&krp_delfree_l, krp_qun.krp_lnext);
-		cv_destroy(&krp->krp_cv);
-		pool_put(&cryptkop_pool, krp);
-	}
+				for (i = 0; i < CRK_MAXPARAM; i++) {
+					struct crparam *kp = &(krp->krp_param[i]);
+					if (kp->crp_p) {
+						size = (kp->crp_nbits + 7) / 8;
+						KASSERT(size > 0);
+						(void)memset(kp->crp_p, 0, size);
+						kmem_free(kp->crp_p, size);
+					}
+				}
+				cv_destroy(&krp->krp_cv);
+				pool_put(&cryptkop_pool, krp);
+				req++;
+			}
+		}
+	}
+
 	return completed;	
 }
Index: /trunk/src/sys/opencrypto/cryptodev.h
===================================================================
--- /trunk/src/sys/opencrypto/cryptodev.h	(revision 151)
+++ /trunk/src/sys/opencrypto/cryptodev.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cryptodev.h,v 1.14.10.1 2008/11/20 03:22:38 snj Exp $ */
+/*	$NetBSD: cryptodev.h,v 1.14.10.1.4.1 2011/05/20 08:11:31 matt Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/cryptodev.h,v 1.2.2.6 2003/07/02 17:04:50 sam Exp $	*/
 /*	$OpenBSD: cryptodev.h,v 1.33 2002/07/17 23:52:39 art Exp $	*/
@@ -132,5 +132,6 @@
 #define CRYPTO_SHA1_HMAC_96	20
 #define CRYPTO_RIPEMD160_HMAC_96	21
-#define CRYPTO_ALGORITHM_MAX	22 /* Keep updated - see below */
+#define CRYPTO_GZIP_COMP	22 /* Deflate compression algorithm */
+#define CRYPTO_ALGORITHM_MAX	23 /* Keep updated - see below */
 
 /* Algorithm flags */
@@ -142,4 +143,5 @@
 	u_int32_t	cipher;		/* ie. CRYPTO_DES_CBC */
 	u_int32_t	mac;		/* ie. CRYPTO_MD5_HMAC */
+	u_int32_t	comp_alg;	/* ie. CRYPTO_GZIP_COMP */
 
 	u_int32_t	keylen;		/* cipher key */
@@ -156,4 +158,5 @@
 	u_int32_t	cipher;		/* ie. CRYPTO_DES_CBC */
 	u_int32_t	mac;		/* ie. CRYPTO_MD5_HMAC */
+	u_int32_t	comp_alg;	/* ie. CRYPTO_GZIP_COMP */
 
 	u_int32_t	keylen;		/* cipher key */
@@ -171,10 +174,13 @@
 #define COP_ENCRYPT	1
 #define COP_DECRYPT	2
+#define COP_COMP	3
+#define COP_DECOMP	4
 	u_int16_t	flags;
 #define	COP_F_BATCH 	0x0008		/* Dispatch as quickly as possible */
-	u_int		len;
+	u_int		len;		/* src len */
 	void *		src, *dst;	/* become iov[] inside kernel */
 	void *		mac;		/* must be big enough for chosen MAC */
 	void *		iv;
+	u_int		dst_len;	/* dst len if not 0 */
 };
 
@@ -201,5 +207,6 @@
 	u_int16_t	flags;
 #define COP_F_BATCH	0x0008		/* Dispatch as quickly as possible */
-	u_int		len;
+#define COP_F_MORE	0x0010		/* more data to follow */
+	u_int		len;		/* src len */
 
 	u_int32_t	reqid;		/* request id */
@@ -214,4 +221,5 @@
 	void *		mac;		/* must be big enough for chosen MAC */
 	void *		iv;
+	u_int		dst_len;	/* dst len if not 0 */
 };
 
@@ -341,14 +349,15 @@
 
 /* the following are done against the cloned descriptor */
-#define	CIOCGSESSION	_IOWR('c', 101, struct session_op)
 #define	CIOCFSESSION	_IOW('c', 102, u_int32_t)
-#define CIOCCRYPT	_IOWR('c', 103, struct crypt_op)
 #define CIOCKEY		_IOWR('c', 104, struct crypt_kop)
-#define	CIOCNGSESSION	_IOWR('c', 106, struct crypt_sgop)
-#define CIOCNCRYPTM	_IOWR('c', 107, struct crypt_mop)
 #define CIOCNFKEYM	_IOWR('c', 108, struct crypt_mkop)
 #define CIOCNFSESSION	_IOW('c', 109, struct crypt_sfop)
 #define CIOCNCRYPTRETM	_IOWR('c', 110, struct cryptret)
 #define CIOCNCRYPTRET	_IOWR('c', 111, struct crypt_result)
+
+#define	CIOCGSESSION	_IOWR('c', 112, struct session_op)
+#define	CIOCNGSESSION	_IOWR('c', 113, struct crypt_sgop)
+#define CIOCCRYPT	_IOWR('c', 114, struct crypt_op)
+#define CIOCNCRYPTM	_IOWR('c', 115, struct crypt_mop)
 
 #define CIOCASYMFEAT	_IOR('c', 105, u_int32_t)
@@ -405,5 +414,5 @@
 #define	CRD_F_IV_EXPLICIT	0x04	/* IV explicitly provided */
 #define	CRD_F_DSA_SHA_NEEDED	0x08	/* Compute SHA-1 of buffer for DSA */
-#define CRD_F_COMP		0x0f    /* Set when doing compression */
+#define CRD_F_COMP		0x10    /* Set when doing compression */
 
 	struct cryptoini	CRD_INI; /* Initialization/context data */
@@ -419,9 +428,5 @@
 /* Structure describing complete operation */
 struct cryptop {
-	union {
-		TAILQ_ENTRY(cryptop) crp_tnext;
-		SLIST_ENTRY(cryptop) crp_lnext;
-	}		crp_qun;
-#define	crp_next crp_qun.crp_tnext	/* XXX compat */
+	TAILQ_ENTRY(cryptop) crp_next;
 	u_int64_t	crp_sid;	/* Session ID */
 	
@@ -453,4 +458,5 @@
 #define	CRYPTO_F_ONRETQ		0x0080	/* Request is on return queue */
 #define	CRYPTO_F_USER		0x0100	/* Request is in user context */
+#define	CRYPTO_F_MORE		0x0200	/* more data to follow */
 
 	void *		crp_buf;	/* Data to be processed */
@@ -472,4 +478,5 @@
 	struct iovec	iovec[1];
 	struct uio	uio;
+	uint32_t	magic;
 };
 
@@ -487,9 +494,5 @@
 
 struct cryptkop {
-	union {
-		TAILQ_ENTRY(cryptkop) krp_tnext;
-                SLIST_ENTRY(cryptkop) krp_lnext;
-        }               krp_qun;
-#define krp_next krp_qun.krp_tnext	/* XXX compat */
+	TAILQ_ENTRY(cryptkop) krp_next;
 
 	u_int32_t	krp_reqid;	/* request id */
Index: /trunk/src/sys/opencrypto/cryptosoft.c
===================================================================
--- /trunk/src/sys/opencrypto/cryptosoft.c	(revision 151)
+++ /trunk/src/sys/opencrypto/cryptosoft.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cryptosoft.c,v 1.20 2008/02/04 00:35:34 tls Exp $ */
+/*	$NetBSD: cryptosoft.c,v 1.20.26.1 2011/05/20 08:11:32 matt Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/cryptosoft.c,v 1.2.2.1 2002/11/21 23:34:23 sam Exp $	*/
 /*	$OpenBSD: cryptosoft.c,v 1.35 2002/04/26 08:43:50 deraadt Exp $	*/
@@ -25,5 +25,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cryptosoft.c,v 1.20 2008/02/04 00:35:34 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cryptosoft.c,v 1.20.26.1 2011/05/20 08:11:32 matt Exp $");
 
 #include <sys/param.h>
@@ -561,23 +561,6 @@
 			adj = result - crd->crd_len;
 			m_adj((struct mbuf *)buf, adj);
-		} else {
-			struct uio *uio = (struct uio *)buf;
-			int ind;
-
-			adj = crd->crd_len - result;
-			ind = uio->uio_iovcnt - 1;
-
-			while (adj > 0 && ind >= 0) {
-				if (adj < uio->uio_iov[ind].iov_len) {
-					uio->uio_iov[ind].iov_len -= adj;
-					break;
-				}
-
-				adj -= uio->uio_iov[ind].iov_len;
-				uio->uio_iov[ind].iov_len = 0;
-				ind--;
-				uio->uio_iovcnt--;
-			}
-		}
+		}
+		/* Don't adjust the iov_len, it breaks the kmem_free */
 	}
 	FREE(out, M_CRYPTO_DATA);
@@ -805,4 +788,9 @@
 			(*swd)->sw_cxf = cxf;
 			break;
+
+		case CRYPTO_GZIP_COMP:
+			cxf = &swcr_comp_algo_gzip;
+			(*swd)->sw_cxf = cxf;
+			break;
 		default:
 			swcr_freesession(NULL, i);
@@ -897,4 +885,5 @@
 
 		case CRYPTO_DEFLATE_COMP:
+		case CRYPTO_GZIP_COMP:
 			cxf = swd->sw_cxf;
 			break;
@@ -995,4 +984,6 @@
 
 		case CRYPTO_DEFLATE_COMP:
+		case CRYPTO_GZIP_COMP:
+			DPRINTF(("swcr_process: compdec for %d\n", sw->sw_alg));
 			if ((crp->crp_etype = swcr_compdec(crd, sw,
 			    crp->crp_buf, type)) != 0)
@@ -1048,4 +1039,5 @@
 	REGISTER(CRYPTO_RIJNDAEL128_CBC);
 	REGISTER(CRYPTO_DEFLATE_COMP);
+	REGISTER(CRYPTO_GZIP_COMP);
 #undef REGISTER
 }
Index: /trunk/src/sys/opencrypto/cryptosoft.h
===================================================================
--- /trunk/src/sys/opencrypto/cryptosoft.h	(revision 151)
+++ /trunk/src/sys/opencrypto/cryptosoft.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cryptosoft.h,v 1.5 2007/03/04 06:03:40 christos Exp $ */
+/*	$NetBSD: cryptosoft.h,v 1.5.60.1 2011/05/20 08:11:32 matt Exp $ */
 /*	$OpenBSD: cryptosoft.h,v 1.10 2002/04/22 23:10:09 deraadt Exp $	*/
 
@@ -42,4 +42,5 @@
 		struct {
 			u_int32_t	 SW_size;
+			u_int32_t	 SW_crc;
 			const struct swcr_comp_algo *SW_cxf;
 		} SWCR_COMP;
Index: /trunk/src/sys/opencrypto/cryptosoft_xform.c
===================================================================
--- /trunk/src/sys/opencrypto/cryptosoft_xform.c	(revision 151)
+++ /trunk/src/sys/opencrypto/cryptosoft_xform.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cryptosoft_xform.c,v 1.8 2008/02/04 00:35:34 tls Exp $ */
+/*	$NetBSD: cryptosoft_xform.c,v 1.8.26.1 2011/05/20 08:11:32 matt Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/xform.c,v 1.1.2.1 2002/11/21 23:34:23 sam Exp $	*/
 /*	$OpenBSD: xform.c,v 1.19 2002/08/16 22:47:25 dhartmei Exp $	*/
@@ -41,5 +41,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: cryptosoft_xform.c,v 1.8 2008/02/04 00:35:34 tls Exp $");
+__KERNEL_RCSID(1, "$NetBSD: cryptosoft_xform.c,v 1.8.26.1 2011/05/20 08:11:32 matt Exp $");
 
 #include <crypto/blowfish/blowfish.h>
@@ -126,4 +126,6 @@
 static u_int32_t deflate_compress(u_int8_t *, u_int32_t, u_int8_t **);
 static u_int32_t deflate_decompress(u_int8_t *, u_int32_t, u_int8_t **);
+static u_int32_t gzip_compress(u_int8_t *, u_int32_t, u_int8_t **);
+static u_int32_t gzip_decompress(u_int8_t *, u_int32_t, u_int8_t **);
 
 /* Encryption instances */
@@ -277,4 +279,10 @@
 	deflate_compress,
 	deflate_decompress
+};
+
+static const struct swcr_comp_algo swcr_comp_algo_gzip = {
+	&comp_algo_deflate,
+	gzip_compress,
+	gzip_decompress
 };
 
@@ -645,2 +653,14 @@
 	return deflate_global(data, size, 1, out);
 }
+
+static u_int32_t
+gzip_compress(u_int8_t *data, u_int32_t size, u_int8_t **out)
+{
+	return gzip_global(data, size, 0, out);
+}
+
+static u_int32_t
+gzip_decompress(u_int8_t *data, u_int32_t size, u_int8_t **out)
+{
+	return gzip_global(data, size, 1, out);
+}
Index: /trunk/src/sys/opencrypto/deflate.c
===================================================================
--- /trunk/src/sys/opencrypto/deflate.c	(revision 151)
+++ /trunk/src/sys/opencrypto/deflate.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: deflate.c,v 1.11 2008/05/05 13:41:30 ad Exp $ */
+/*	$NetBSD: deflate.c,v 1.11.18.1 2011/05/20 08:11:32 matt Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/deflate.c,v 1.1.2.1 2002/11/21 23:34:23 sam Exp $	*/
 /* $OpenBSD: deflate.c,v 1.3 2001/08/20 02:45:22 hugh Exp $ */
@@ -36,5 +36,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: deflate.c,v 1.11 2008/05/05 13:41:30 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: deflate.c,v 1.11.18.1 2011/05/20 08:11:32 matt Exp $");
 
 #include <sys/types.h>
@@ -46,4 +46,5 @@
 #include <opencrypto/cryptodev.h>
 #include <opencrypto/deflate.h>
+
 
 int window_inflate = -1 * MAX_WBITS;
@@ -85,4 +86,6 @@
 	struct deflate_buf *buf, *tmp;
 	size_t len, old_len;
+
+	DPRINTF(("deflate_global: size %d\n", size));
 
 	len = ZBUF;
@@ -205,2 +208,262 @@
 	return 0;
 }
+
+/*
+ * Initial version will perform a single gzip encapsulation,
+ * filling in the header,
+ * and appending the crc and uncompressed length.
+ *
+ * Later version will support multiple buffers with 
+ * a flag indication final buffer.  The crc is maintained
+ * over all buffers and appended to the output along with 
+ * the uncompressed length after the final data buffer
+ * has been compressed and output.
+ *
+ * Ditto for uncompress - CRC is extracted from the final packed
+ * and compared against CRC of uncompressed data.
+ *
+ */
+
+/* constant header for the gzip */
+static const char gzip_header[10] = {
+	0x1f, 0x8b, 	/* ID1 ID2	*/
+	Z_DEFLATED, 	/* CM		*/
+	0,		/* FLG		*/
+	0, 0, 0, 0,	/* MTIME	*/
+	0,		/* XFL		*/
+	0x03		/* OS (Unix)	*/
+};
+
+/* Followed by compressed payload */
+/* Followed by uint32_t CRC32 and uint32_t ISIZE */
+#define GZIP_TAIL_SIZE	8
+
+u_int32_t
+gzip_global(u_int8_t *data, u_int32_t size,
+	int decomp, u_int8_t **out)
+{
+	/* decomp indicates whether we compress (0) or decompress (1) */
+	z_stream zbuf;
+	u_int8_t *output;
+	u_int32_t count, result;
+	int error, i = 0, j;
+	struct deflate_buf *buf, *tmp;
+	size_t nbufs, old_nbufs;
+	u_int32_t crc;
+	u_int32_t isize;
+
+	DPRINTF(("gzip_global: decomp %d, size %d\n", decomp, size));
+
+	nbufs = ZBUF;
+	buf = malloc(nbufs*sizeof(struct deflate_buf), M_CRYPTO_DATA, M_NOWAIT);
+	if (buf == NULL) {
+		DPRINTF(("gzip_global.%d: failed to malloc %d\n",
+				__LINE__, nbufs*sizeof(struct deflate_buf)));
+		return 0;
+	}
+
+	memset(&zbuf, 0, sizeof(z_stream));
+	for (j = 0; j < nbufs; j++)
+		buf[j].flag = 0;
+
+	zbuf.zalloc = ocf_zalloc;
+	zbuf.zfree = ocf_zfree;
+	zbuf.opaque = Z_NULL;
+
+	crc = crc32(0, NULL, 0);	/* get initial crc value */
+
+	zbuf.avail_in = size;	/* Total length of data to be processed */
+	zbuf.next_in = data;	/* data that is going to be processed */
+
+	if (!decomp) {
+		/* compress */
+		DPRINTF(("gzip_global: compress[%d] malloc %d + %d + %d = %d\n",
+				i, size, sizeof(gzip_header), GZIP_TAIL_SIZE,
+				size + sizeof(gzip_header) + GZIP_TAIL_SIZE));
+
+		buf[i].out = malloc(size, M_CRYPTO_DATA, M_NOWAIT);
+		if (buf[i].out == NULL)
+			goto bad2;
+		buf[i].size = size;
+		buf[i].flag = 1;
+
+		zbuf.next_out = buf[i].out;
+		zbuf.avail_out = buf[i].size;
+		i++;
+		
+		crc = crc32(crc, data, size);
+		DPRINTF(("gzip_compress: size %d, crc 0x%x\n", size, crc));
+	} else {
+		/* decompress */
+		/* check the gzip header */
+		if (zbuf.avail_in <= 0) {
+			/* Not enough data for the header & tail */
+			DPRINTF(("gzip_global: not enough data (%d)\n",
+					size));
+			goto bad2;
+		}
+
+		/* XXX this is pretty basic,
+		 * needs to be expanded to ignore MTIME, OS, 
+		 * but still ensure flags are 0.
+		 * Q. Do we need to support the flags and 
+		 * optional header fields? Likely.
+		 * XXX add flag and field support too.
+		 */
+		if (memcmp(data, gzip_header, sizeof(gzip_header)) != 0) {
+			DPRINTF(("gzip_global: unsupported gzip header (%02x%02x)\n",
+					data[0], data[1]));
+			goto bad2;
+		} else {
+			DPRINTF(("gzip_global.%d: gzip header ok\n",__LINE__));
+		}
+
+		isize = *((uint32_t *)&data[size-sizeof(uint32_t)]);
+
+		DPRINTF(("gzip_global: isize = %d (%02x %02x %02x %02x)\n",
+				isize,
+				data[size-4],
+				data[size-3],
+				data[size-2],
+				data[size-1]));
+
+		buf[i].size = isize;
+		buf[i].out = malloc(buf[i].size, M_CRYPTO_DATA, M_NOWAIT);
+		if (buf[i].out == NULL)
+			goto bad2;
+		buf[i].flag = 1;
+		zbuf.next_out = buf[i].out;
+		zbuf.avail_out = buf[i].size;
+		i++;
+
+		/* skip over the gzip header */
+		zbuf.next_in = data + sizeof(gzip_header);
+
+		/* actual payload size stripped of gzip header and tail */
+		zbuf.avail_in = size - sizeof(gzip_header) - GZIP_TAIL_SIZE;
+		DPRINTF(("zbuf avail_in %d, avail_out %d\n",
+					zbuf.avail_in, zbuf.avail_out));
+
+	}
+
+
+	error = decomp ? inflateInit2(&zbuf, window_inflate) :
+	    deflateInit2(&zbuf, Z_DEFAULT_COMPRESSION, Z_METHOD,
+		    window_deflate, Z_MEMLEVEL, Z_DEFAULT_STRATEGY);
+
+	if (error != Z_OK) {
+		printf("deflateInit2() failed\n");
+		goto bad;
+	}
+	for (;;) {
+		DPRINTF(("pre: %s in:%d out:%d\n", decomp ? "deflate()" : "inflate()", 
+				zbuf.avail_in, zbuf.avail_out));
+		error = decomp ? inflate(&zbuf, Z_PARTIAL_FLUSH) :
+				 deflate(&zbuf, Z_PARTIAL_FLUSH);
+		DPRINTF(("post: %s in:%d out:%d\n", decomp ? "deflate()" : "inflate()", 
+				zbuf.avail_in, zbuf.avail_out));
+		if (error != Z_OK && error != Z_STREAM_END) {
+			printf("deflate() or inflate() failed, error=%d\n", error);
+			goto bad;
+		} else if (zbuf.avail_in == 0 && zbuf.avail_out != 0) {
+			DPRINTF(("gzip_global: avail_in == 0, ending\n"));
+			goto end;
+		} else if (zbuf.avail_in == 0 && zbuf.avail_out == 0) {
+			DPRINTF(("gzip_global: avail_in == 0, avail_out == 0, ending\n"));
+			goto end;
+		} else if (zbuf.avail_out == 0) {
+			if (i == (nbufs-1)) {
+				old_nbufs = i;
+				nbufs += ZBUF;
+				tmp = realloc(buf,nbufs*sizeof(struct deflate_buf),
+							  M_CRYPTO_DATA, M_NOWAIT);
+				if (tmp == NULL)
+					goto bad;
+				buf = tmp;
+				for (j = old_nbufs; j < nbufs; j++)
+					buf[j].flag = 0;
+			}
+			/* we need more output space, allocate size */
+			buf[i].out = malloc(size, M_CRYPTO_DATA, M_NOWAIT);
+			if (buf[i].out == NULL)
+				goto bad;
+			zbuf.next_out = buf[i].out;
+			buf[i].size = size;
+			buf[i].flag = 1;
+			zbuf.avail_out = buf[i].size;
+			i++;
+		} else
+			goto bad;
+	}
+
+end:
+	if (decomp) {
+		count = result = zbuf.total_out;
+	} else {
+		/* need room for header, CRC, and ISIZE */
+		result = zbuf.total_out + sizeof(gzip_header) + GZIP_TAIL_SIZE;
+		count = zbuf.total_out;
+	}
+
+	DPRINTF(("gzip_global: in %d -> out %d\n", size, result));
+
+	*out = malloc(result, M_CRYPTO_DATA, M_NOWAIT);
+	if (*out == NULL)
+		goto bad;
+	output = *out;
+	if (decomp)
+		inflateEnd(&zbuf);
+	else {
+		deflateEnd(&zbuf);
+
+		/* fill in gzip header */
+		memcpy(output, gzip_header, sizeof(gzip_header));
+		output += sizeof(gzip_header);
+	}
+	for (j = 0; buf[j].flag != 0; j++) {
+		if (decomp) {
+			/* update crc for decompressed data */
+			crc = crc32(crc, buf[j].out, buf[j].size);
+		}
+		if (count > buf[j].size) {
+			memcpy(output, buf[j].out, buf[j].size);
+			output += buf[j].size;
+			free(buf[j].out, M_CRYPTO_DATA);
+			count -= buf[j].size;
+		} else {
+			/* it should be the last buffer */
+			memcpy(output, buf[j].out, count);
+			output += count;
+			free(buf[j].out, M_CRYPTO_DATA);
+			count = 0;
+		}
+	}
+	free(buf, M_CRYPTO_DATA);
+
+	if (!decomp) {
+		/* fill in CRC and ISIZE */
+		((uint32_t *)output)[0] = crc;
+		((uint32_t *)output)[1] = size;
+
+		DPRINTF(("gzip_global: size = 0x%x (%02x %02x %02x %02x)\n",
+				size,
+				output[7],
+				output[3],
+				output[5],
+				output[4]));
+	}
+
+	return result;
+
+bad:
+	if (decomp)
+		inflateEnd(&zbuf);
+	else
+		deflateEnd(&zbuf);
+bad2:
+	*out = NULL;
+	for (j = 0; buf[j].flag != 0; j++)
+		free(buf[j].out, M_CRYPTO_DATA);
+	free(buf, M_CRYPTO_DATA);
+	return 0;
+}
Index: /trunk/src/sys/opencrypto/deflate.h
===================================================================
--- /trunk/src/sys/opencrypto/deflate.h	(revision 151)
+++ /trunk/src/sys/opencrypto/deflate.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: deflate.h,v 1.5 2008/05/05 13:41:30 ad Exp $ */
+/*	$NetBSD: deflate.h,v 1.5.18.1 2011/05/20 08:11:32 matt Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/deflate.h,v 1.1.2.1 2002/11/21 23:34:23 sam Exp $	*/
 /* $OpenBSD: deflate.h,v 1.3 2002/03/14 01:26:51 millert Exp $ */
@@ -46,4 +46,5 @@
 
 u_int32_t deflate_global(u_int8_t *, u_int32_t, int, u_int8_t **);
+u_int32_t gzip_global(u_int8_t *, u_int32_t, int, u_int8_t **);
 void *z_alloc(void *, u_int, u_int);
 void z_free(void *, void *);
Index: /trunk/src/sys/opencrypto/files.opencrypto
===================================================================
--- /trunk/src/sys/opencrypto/files.opencrypto	(revision 151)
+++ /trunk/src/sys/opencrypto/files.opencrypto	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: files.opencrypto,v 1.19 2008/02/04 00:35:35 tls Exp $
+#	$NetBSD: files.opencrypto,v 1.19.28.1 2011/05/20 08:11:32 matt Exp $
 #
 #
@@ -24,4 +24,5 @@
 defpseudo crypto: opencrypto
 file	opencrypto/cryptodev.c		crypto
+file	opencrypto/ocryptodev.c		crypto
 
 defflag opt_ocf.h	CRYPTO_DEBUG CRYPTO_TIMING
Index: /trunk/src/sys/opencrypto/ocryptodev.c
===================================================================
--- /trunk/src/sys/opencrypto/ocryptodev.c	(revision 151)
+++ /trunk/src/sys/opencrypto/ocryptodev.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ocryptodev.c,v 1.2.4.2 2009/05/03 17:24:45 snj Exp $ */
+/*	$NetBSD: ocryptodev.c,v 1.4.2.2 2011/05/20 08:11:32 matt Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/cryptodev.c,v 1.4.2.4 2003/06/03 00:09:02 sam Exp $	*/
 /*	$OpenBSD: cryptodev.c,v 1.53 2002/07/10 22:21:30 mickey Exp $	*/
@@ -70,5 +70,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ocryptodev.c,v 1.2.4.2 2009/05/03 17:24:45 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ocryptodev.c,v 1.4.2.2 2011/05/20 08:11:32 matt Exp $");
 
 #include <sys/param.h>
Index: /trunk/src/sys/opencrypto/ocryptodev.h
===================================================================
--- /trunk/src/sys/opencrypto/ocryptodev.h	(revision 151)
+++ /trunk/src/sys/opencrypto/ocryptodev.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ocryptodev.h,v 1.1.4.2 2009/05/03 17:24:45 snj Exp $ */
+/*	$NetBSD: ocryptodev.h,v 1.2.2.2 2011/05/20 08:11:33 matt Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/cryptodev.h,v 1.2.2.6 2003/07/02 17:04:50 sam Exp $	*/
 /*	$OpenBSD: cryptodev.h,v 1.33 2002/07/17 23:52:39 art Exp $	*/
Index: /trunk/src/sys/opencrypto/xform.c
===================================================================
--- /trunk/src/sys/opencrypto/xform.c	(revision 151)
+++ /trunk/src/sys/opencrypto/xform.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: xform.c,v 1.17 2008/02/28 09:29:10 tls Exp $ */
+/*	$NetBSD: xform.c,v 1.17.22.1 2011/05/20 08:11:33 matt Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/xform.c,v 1.1.2.1 2002/11/21 23:34:23 sam Exp $	*/
 /*	$OpenBSD: xform.c,v 1.19 2002/08/16 22:47:25 dhartmei Exp $	*/
@@ -41,5 +41,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xform.c,v 1.17 2008/02/28 09:29:10 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xform.c,v 1.17.22.1 2011/05/20 08:11:33 matt Exp $");
 
 #include <sys/param.h>
@@ -191,2 +191,7 @@
 	90
 };
+
+struct comp_algo comp_algo_gzip = {
+	CRYPTO_GZIP_COMP, "GZIP",
+	90
+};
Index: /trunk/src/sys/opencrypto/xform.h
===================================================================
--- /trunk/src/sys/opencrypto/xform.h	(revision 151)
+++ /trunk/src/sys/opencrypto/xform.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: xform.h,v 1.9 2008/02/02 02:39:01 tls Exp $ */
+/*	$NetBSD: xform.h,v 1.9.28.1 2011/05/20 08:11:33 matt Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/xform.h,v 1.1.2.1 2002/11/21 23:34:23 sam Exp $	*/
 /*	$OpenBSD: xform.h,v 1.10 2002/04/22 23:10:09 deraadt Exp $	*/
@@ -86,4 +86,5 @@
 
 extern struct comp_algo comp_algo_deflate;
+extern struct comp_algo comp_algo_gzip;
 
 #ifdef _KERNEL
Index: /trunk/src/sys/sys/Makefile
===================================================================
--- /trunk/src/sys/sys/Makefile	(revision 151)
+++ /trunk/src/sys/sys/Makefile	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: Makefile,v 1.114 2008/10/19 22:05:23 apb Exp $
+#	$NetBSD: Makefile,v 1.114.8.1 2011/04/29 08:11:22 matt Exp $
 
 .include <bsd.sys.mk>
@@ -34,5 +34,5 @@
 	syncobj.h syslimits.h syslog.h \
 	tape.h termios.h time.h timeb.h timepps.h times.h \
-	timex.h trace.h tree.h tty.h ttychars.h ttycom.h \
+	timex.h tls.h trace.h tree.h tty.h ttychars.h ttycom.h \
 	ttydefaults.h ttydev.h types.h \
 	ucontext.h ucred.h uio.h un.h unistd.h unpcb.h user.h utsname.h uuid.h \
Index: /trunk/src/sys/sys/cdefs.h
===================================================================
--- /trunk/src/sys/sys/cdefs.h	(revision 151)
+++ /trunk/src/sys/sys/cdefs.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cdefs.h,v 1.69 2008/08/17 00:23:02 gmcgarry Exp $	*/
+/*	$NetBSD: cdefs.h,v 1.69.10.1 2011/04/29 08:10:38 matt Exp $	*/
 
 /*
@@ -135,4 +135,15 @@
 #define	__aconst
 #endif
+
+/*
+ * Compile Time Assertion.
+ */
+#ifdef __COUNTER__
+#define	__CTASSERT(x)		__CTASSERT0(x, __ctassert, __COUNTER__)
+#else
+#define	__CTASSERT(x)		__CTASSERT0(x, __ctassert, __LINE__)
+#endif
+#define	__CTASSERT0(x, y, z)	__CTASSERT1(x, y, z)
+#define	__CTASSERT1(x, y, z)	typedef char y ## z[(x) ? 1 : -1];
 
 /*
Index: /trunk/src/sys/sys/cpu.h
===================================================================
--- /trunk/src/sys/sys/cpu.h	(revision 151)
+++ /trunk/src/sys/sys/cpu.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cpu.h,v 1.23.4.3 2009/02/02 03:19:32 snj Exp $	*/
+/*	$NetBSD: cpu.h,v 1.23.4.3.4.1 2011/04/29 08:20:15 matt Exp $	*/
 
 /*-
@@ -76,4 +76,5 @@
 void	cpu_kpreempt_exit(uintptr_t);
 bool	cpu_kpreempt_disabled(void);
+int	cpu_lwp_setprivate(struct lwp *, void *);
 
 CIRCLEQ_HEAD(cpuqueue, cpu_info);
Index: /trunk/src/sys/sys/cpu_data.h
===================================================================
--- /trunk/src/sys/sys/cpu_data.h	(revision 151)
+++ /trunk/src/sys/sys/cpu_data.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: cpu_data.h,v 1.27.16.1 2010/05/09 20:25:45 rmind Exp $	*/
+/*	cpu_data.h,v 1.27.16.2 2011/04/29 08:13:53 matt Exp	*/
 
 /*-
@@ -72,5 +72,5 @@
 	CIRCLEQ_ENTRY(cpu_info) cpu_qchain;	/* circleq of all CPUs */
 
-	cpuid_t		cpu_node_id;
+	cpuid_t		cpu_package_id;
 	cpuid_t		cpu_core_id;
 	cpuid_t		cpu_smt_id;
@@ -114,5 +114,5 @@
 #define	ci_lkdebug_recurse	ci_data.cpu_lkdebug_recurse
 
-#define	ci_node_id		ci_data.cpu_node_id
+#define	ci_package_id		ci_data.cpu_package_id
 #define	ci_core_id		ci_data.cpu_core_id
 #define	ci_smt_id		ci_data.cpu_smt_id
Index: /trunk/src/sys/sys/lwp.h
===================================================================
--- /trunk/src/sys/sys/lwp.h	(revision 151)
+++ /trunk/src/sys/sys/lwp.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: lwp.h,v 1.114.4.1 2009/02/06 01:54:09 snj Exp $	*/
+/*	$NetBSD: lwp.h,v 1.114.4.1.4.3 2011/04/29 08:20:15 matt Exp $	*/
 
 /*-
@@ -32,4 +32,8 @@
 #ifndef _SYS_LWP_H_
 #define _SYS_LWP_H_
+
+#ifdef _KERNEL_OPT
+#include "opt_multiprocessor.h"
+#endif
 
 #include <sys/time.h>
@@ -200,4 +204,11 @@
 
 extern lwp_t lwp0;			/* LWP for proc0 */
+
+static inline void *
+lwp_getpcb(lwp_t *l)
+{
+
+	return l->l_addr;
+}
 #endif
 
@@ -308,4 +319,5 @@
 void	lwp_need_userret(lwp_t *);
 void	lwp_free(lwp_t *, bool, bool);
+int	lwp_setprivate(lwp_t *, void *);
 void	lwp_sys_init(void);
 u_int	lwp_unsleep(lwp_t *, bool);
Index: /trunk/src/sys/sys/param.h
===================================================================
--- /trunk/src/sys/sys/param.h	(revision 151)
+++ /trunk/src/sys/sys/param.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: param.h,v 1.330.4.9.2.2.2.1 2010/04/21 00:28:24 matt Exp $	*/
+/*	param.h,v 1.330.4.9.2.2.2.1 2010/04/21 00:28:24 matt Exp	*/
 
 /*-
@@ -64,5 +64,5 @@
  */
 
-#define	__NetBSD_Version__	500000003	/* NetBSD 5.0_STABLE */
+#define	__NetBSD_Version__	501000000	/* NetBSD 5.1 */
 
 #define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
Index: /trunk/src/sys/sys/socketvar.h
===================================================================
--- /trunk/src/sys/sys/socketvar.h	(revision 151)
+++ /trunk/src/sys/sys/socketvar.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: socketvar.h,v 1.116.4.2 2009/04/04 23:36:28 snj Exp $	*/
+/*	socketvar.h,v 1.116.4.2 2009/04/04 23:36:28 snj Exp	*/
 
 /*-
@@ -506,5 +506,5 @@
 
 /* sosend loan */
-vaddr_t	sokvaalloc(vsize_t, struct socket *);
+vaddr_t	sokvaalloc(vaddr_t, vsize_t, struct socket *);
 void	sokvafree(vaddr_t, vsize_t);
 void	soloanfree(struct mbuf *, void *, size_t, void *);
Index: /trunk/src/sys/sys/tls.h
===================================================================
--- /trunk/src/sys/sys/tls.h	(revision 152)
+++ /trunk/src/sys/sys/tls.h	(revision 152)
@@ -0,0 +1,61 @@
+/*	$NetBSD: tls.h,v 1.1.4.2 2011/04/29 07:43:19 matt Exp $	*/
+/*-
+ * Copyright (c) 2011 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Joerg Sonnenberger.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _SYS_TLS_H_
+#define _SYS_TLS_H_
+
+#include <sys/cdefs.h>
+#include <machine/types.h>
+
+#if defined(__HAVE_TLS_VARIANT_I) || defined(__HAVE_TLS_VARIANT_II)
+
+#if defined(__HAVE_TLS_VARIANT_I) && defined(__HAVE_TLS_VARIANT_II)
+#error Only one TLS variant can be supported at a time
+#endif
+
+struct tls_tcb {
+#ifdef __HAVE_TLS_VARIANT_I
+	void	**tcb_dtv;
+	void	*tcb_pthread;
+#else
+	void	*tcb_self;
+	void	**tcb_dtv;
+	void	*tcb_pthread;
+#endif
+};
+
+__BEGIN_DECLS
+struct tls_tcb	*_rtld_tls_allocate(void);
+void	 	 _rtld_tls_free(struct tls_tcb *);
+void		 _rtld_tls_static_setup(void);
+__END_DECLS
+#endif /* __HAVE_TLS_VARIANT_I || __HAVE_TLS_VARIANT_II */
+
+#endif /* _SYS_TLS_H_ */
Index: /trunk/src/sys/sys/ucontext.h
===================================================================
--- /trunk/src/sys/sys/ucontext.h	(revision 151)
+++ /trunk/src/sys/sys/ucontext.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ucontext.h,v 1.11 2008/10/15 06:51:21 wrstuden Exp $	*/
+/*	$NetBSD: ucontext.h,v 1.11.12.1 2011/04/29 08:14:36 matt Exp $	*/
 
 /*-
@@ -58,7 +58,27 @@
 #define _UC_CPU		0x04		/* valid GPR context in uc_mcontext */
 #define _UC_FPU		0x08		/* valid FPU context in uc_mcontext */
+#define	_UC_MD		0x40070020	/* MD bits.  see below */
+
+/*
+ * _UC_MD includes:
+ *	_UC_SETSTACK	0x00010000 (many ports) and 0x00020000 (arm)
+ *	_UC_CLRSTACK	0x00020000 (many ports) and 0x00040000 (arm)
+ *	_UC_POWERPC_VEC	0x00010000 (powerpc)
+ *	_UC_M68K_UC_USER 0x40000000 (m68k)
+ *	_UC_UNIQUE	0x00000020 (alpha)
+ *	_UC_ARM_VFP	0x00010000 (arm)
+ *	_UC_VM		0x00040000 (i386)
+ *	_UC_FXSAVE	0x00000020 (i386)
+ *
+ * if your port needs more MD bits, please try to choose bits from _UC_MD
+ * first, rather than picking random unused bits.
+ */
 
 #ifdef _KERNEL
 struct lwp;
+
+#ifdef __UCONTEXT_SIZE
+__CTASSERT(sizeof(ucontext_t) == __UCONTEXT_SIZE)
+#endif
 
 void	getucontext(struct lwp *, ucontext_t *);
Index: /trunk/src/sys/ufs/ufs/ufs_inode.c
===================================================================
--- /trunk/src/sys/ufs/ufs/ufs_inode.c	(revision 151)
+++ /trunk/src/sys/ufs/ufs/ufs_inode.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: ufs_inode.c,v 1.76.4.1.4.1 2010/04/21 00:28:26 matt Exp $	*/
+/*	$NetBSD: ufs_inode.c,v 1.76.4.1.4.2 2011/05/20 08:11:33 matt Exp $	*/
 
 /*
@@ -38,5 +38,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_inode.c,v 1.76.4.1.4.1 2010/04/21 00:28:26 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_inode.c,v 1.76.4.1.4.2 2011/05/20 08:11:33 matt Exp $");
 
 #if defined(_KERNEL_OPT)
@@ -276,9 +276,9 @@
 	len += delta;
 
- retry:
+	genfs_node_wrlock(vp);
 	mutex_enter(&uobj->vmobjlock);
 	error = VOP_GETPAGES(vp, pagestart, pgs, &npages, 0,
-	    VM_PROT_WRITE, 0,
-	    PGO_SYNCIO|PGO_PASTEOF|PGO_NOBLOCKALLOC|PGO_NOTIMESTAMP);
+	    VM_PROT_WRITE, 0, PGO_SYNCIO | PGO_PASTEOF | PGO_NOBLOCKALLOC |
+	    PGO_NOTIMESTAMP | PGO_GLOCKHELD);
 	if (error) {
 		goto out;
@@ -298,23 +298,4 @@
 	 * now allocate the range.
 	 */
-
-	/*
-	 * XXX: Hack around deadlock with pagebusy and genfs node lock.
-	 *      This should be properly fixed.  PR kern/40389
-	 */
-	{
-	struct genfs_node *gp = VTOG(vp); /* XXX */
-
-	if (!rw_tryenter(&gp->g_glock, RW_WRITER)) {
-		mutex_enter(&uobj->vmobjlock);
-		for (i = 0; i < npages; i++)
-			pgs[i]->flags |= PG_RELEASED | PG_CLEAN;
-		mutex_enter(&uvm_pageqlock);
-		uvm_page_unbusy(pgs, npages);
-		mutex_exit(&uvm_pageqlock);
-		mutex_exit(&uobj->vmobjlock);
-		kpause("uballo", false, 1, NULL);
-		goto retry;
-	}}
 
 	error = GOP_ALLOC(vp, off, len, flags, cred);
Index: /trunk/src/sys/uvm/uvm_aobj.c
===================================================================
--- /trunk/src/sys/uvm/uvm_aobj.c	(revision 151)
+++ /trunk/src/sys/uvm/uvm_aobj.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uvm_aobj.c,v 1.104 2008/10/18 03:46:22 rmind Exp $	*/
+/*	uvm_aobj.c,v 1.104 2008/10/18 03:46:22 rmind Exp	*/
 
 /*
@@ -44,5 +44,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_aobj.c,v 1.104 2008/10/18 03:46:22 rmind Exp $");
+__KERNEL_RCSID(0, "uvm_aobj.c,v 1.104 2008/10/18 03:46:22 rmind Exp");
 
 #include "opt_uvmhist.h"
@@ -977,5 +977,5 @@
 			    current_offset >> PAGE_SHIFT) == 0) {
 				ptmp = uvm_pagealloc(uobj, current_offset,
-				    NULL, UVM_PGA_ZERO);
+				    NULL, UVM_FLAG_COLORMATCH|UVM_PGA_ZERO);
 				if (ptmp) {
 					/* new page */
Index: /trunk/src/sys/uvm/uvm_extern.h
===================================================================
--- /trunk/src/sys/uvm/uvm_extern.h	(revision 151)
+++ /trunk/src/sys/uvm/uvm_extern.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uvm_extern.h,v 1.148.4.2.4.1 2010/01/26 21:26:28 matt Exp $	*/
+/*	uvm_extern.h,v 1.148.4.2.4.1 2010/01/26 21:26:28 matt Exp	*/
 
 /*
@@ -174,4 +174,5 @@
 #define UVM_KMF_NOWAIT	UVM_FLAG_NOWAIT		/* not allowed to sleep */
 #define UVM_KMF_WAITVA	UVM_FLAG_WAITVA		/* sleep for va */
+#define	UVM_KMF_COLORMATCH UVM_FLAG_COLORMATCH	/* start at color in align */
 
 /*
Index: /trunk/src/sys/uvm/uvm_fault.c
===================================================================
--- /trunk/src/sys/uvm/uvm_fault.c	(revision 151)
+++ /trunk/src/sys/uvm/uvm_fault.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uvm_fault.c,v 1.125.6.1.4.1 2010/01/26 21:26:28 matt Exp $	*/
+/*	uvm_fault.c,v 1.125.6.1.4.1 2010/01/26 21:26:28 matt Exp	*/
 
 /*
@@ -40,5 +40,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_fault.c,v 1.125.6.1.4.1 2010/01/26 21:26:28 matt Exp $");
+__KERNEL_RCSID(0, "uvm_fault.c,v 1.125.6.1.4.1 2010/01/26 21:26:28 matt Exp");
 
 #include "opt_uvmhist.h"
@@ -362,5 +362,5 @@
 			 * no page, we must try and bring it in.
 			 */
-
+			KASSERT(ufi != NULL);
 			pg = uvm_pagealloc(NULL, ufi->orig_rvaddr,
 			    NULL, UVM_FLAG_COLORMATCH);
Index: /trunk/src/sys/uvm/uvm_km.c
===================================================================
--- /trunk/src/sys/uvm/uvm_km.c	(revision 151)
+++ /trunk/src/sys/uvm/uvm_km.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uvm_km.c,v 1.101.4.2.4.3 2010/02/06 05:28:30 matt Exp $	*/
+/*	uvm_km.c,v 1.101.4.2.4.3 2010/02/06 05:28:30 matt Exp	*/
 
 /*
@@ -129,5 +129,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.101.4.2.4.3 2010/02/06 05:28:30 matt Exp $");
+__KERNEL_RCSID(0, "uvm_km.c,v 1.101.4.2.4.3 2010/02/06 05:28:30 matt Exp");
 
 #include "opt_uvmhist.h"
@@ -542,4 +542,6 @@
 		(flags & UVM_KMF_TYPEMASK) == UVM_KMF_PAGEABLE ||
 		(flags & UVM_KMF_TYPEMASK) == UVM_KMF_VAONLY);
+	KASSERT((flags & UVM_KMF_VAONLY) != 0 || (flags & UVM_KMF_COLORMATCH) == 0);
+	KASSERT((flags & UVM_KMF_COLORMATCH) == 0 || (flags & UVM_KMF_VAONLY) != 0);
 
 	/*
@@ -560,5 +562,5 @@
 	    align, UVM_MAPFLAG(UVM_PROT_ALL, UVM_PROT_ALL, UVM_INH_NONE,
 	    UVM_ADV_RANDOM,
-	    (flags & (UVM_KMF_TRYLOCK | UVM_KMF_NOWAIT | UVM_KMF_WAITVA))
+	    (flags & (UVM_KMF_TRYLOCK | UVM_KMF_NOWAIT | UVM_KMF_WAITVA | UVM_KMF_COLORMATCH))
 	    | UVM_FLAG_QUANTUM)) != 0)) {
 		UVMHIST_LOG(maphist, "<- done (no VM)",0,0,0,0);
Index: /trunk/src/sys/uvm/uvm_map.c
===================================================================
--- /trunk/src/sys/uvm/uvm_map.c	(revision 151)
+++ /trunk/src/sys/uvm/uvm_map.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uvm_map.c,v 1.263.4.3.4.1 2009/08/23 06:38:07 matt Exp $	*/
+/*	uvm_map.c,v 1.263.4.3.4.3 2010/08/19 07:30:31 matt Exp	*/
 
 /*
@@ -72,5 +72,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.263.4.3.4.1 2009/08/23 06:38:07 matt Exp $");
+__KERNEL_RCSID(0, "uvm_map.c,v 1.263.4.3.4.3 2010/08/19 07:30:31 matt Exp");
 
 #include "opt_ddb.h"
@@ -305,5 +305,5 @@
 static void	uvm_map_reference_amap(struct vm_map_entry *, int);
 static int	uvm_map_space_avail(vaddr_t *, vsize_t, voff_t, vsize_t, int,
-		    struct vm_map_entry *);
+		    int, struct vm_map_entry *);
 static void	uvm_map_unreference_amap(struct vm_map_entry *, int);
 
@@ -1853,5 +1853,5 @@
 static int
 uvm_map_space_avail(vaddr_t *start, vsize_t length, voff_t uoffset,
-    vsize_t align, int topdown, struct vm_map_entry *entry)
+    vsize_t align, int flags, int topdown, struct vm_map_entry *entry)
 {
 	vaddr_t end;
@@ -1866,5 +1866,25 @@
 		PMAP_PREFER(uoffset, start, length, topdown);
 #endif
-	if (align != 0) {
+	if ((flags & UVM_FLAG_COLORMATCH) != 0) {
+		KASSERT(align < uvmexp.ncolors);
+		if (uvmexp.ncolors > 1) {
+			const u_int colormask = uvmexp.colormask;
+			const u_int colorsize = colormask + 1;
+			vaddr_t hint = atop(*start);
+			const u_int color = hint & colormask;
+			if (color != align) {
+				hint -= color;	/* adjust to color boundary */
+				KASSERT((hint & colormask) == 0);
+				if (topdown) {
+					if (align > color)
+						hint -= colorsize;
+				} else {
+					if (align < color)
+						hint += colorsize;
+				}
+				*start = ptoa(hint + align); /* adjust to color */
+			}
+		}
+	} else if (align != 0) {
 		if ((*start & (align - 1)) != 0) {
 			if (topdown)
@@ -1922,5 +1942,6 @@
 	UVMHIST_LOG(maphist, "(map=0x%x, hint=0x%x, len=%d, flags=0x%x)",
 	    map, hint, length, flags);
-	KASSERT((align & (align - 1)) == 0);
+	KASSERT((flags & UVM_FLAG_COLORMATCH) != 0 || (align & (align - 1)) == 0);
+	KASSERT((flags & UVM_FLAG_COLORMATCH) == 0 || align < uvmexp.ncolors);
 	KASSERT((flags & UVM_FLAG_FIXED) == 0 || align == 0);
 
@@ -2000,5 +2021,5 @@
 			 */
 			switch (uvm_map_space_avail(&hint, length,
-			    uoffset, align, topdown, entry)) {
+			    uoffset, align, flags, topdown, entry)) {
 			case 1:
 				goto found;
@@ -2031,5 +2052,5 @@
 	/* Check slot before any entry */
 	hint = topdown ? entry->next->start - length : entry->end;
-	switch (uvm_map_space_avail(&hint, length, uoffset, align,
+	switch (uvm_map_space_avail(&hint, length, uoffset, align, flags,
 	    topdown, entry)) {
 	case 1:
@@ -2100,5 +2121,5 @@
 		}
 		switch (uvm_map_space_avail(&hint, length, uoffset, align,
-		    topdown, tmp)) {
+		    flags, topdown, tmp)) {
 		case 1:
 			entry = tmp;
@@ -2122,5 +2143,5 @@
 	}
 	switch (uvm_map_space_avail(&hint, length, uoffset, align,
-	    topdown, prev)) {
+	    flags, topdown, prev)) {
 	case 1:
 		entry = prev;
@@ -2163,5 +2184,5 @@
 	}
 	switch (uvm_map_space_avail(&hint, length, uoffset, align,
-	    topdown, tmp)) {
+	    flags, topdown, tmp)) {
 	case 1:
 		entry = tmp;
@@ -2189,5 +2210,5 @@
 		/* See if it fits. */
 		switch (uvm_map_space_avail(&hint, length, uoffset, align,
-		    topdown, entry)) {
+		    flags, topdown, entry)) {
 		case 1:
 			goto found;
@@ -4139,4 +4160,7 @@
 	/* XXX cgd 960926: the sparc #ifdef should be a MD hook */
 	kill_user_windows(l);   /* before stack addresses go away */
+#endif
+#ifdef __HAVE_CPU_VMSPACE_EXEC
+	cpu_vmspace_exec(l, start, end);
 #endif
 
@@ -4637,5 +4661,5 @@
 
 	error = uvm_map_prepare(map, 0, PAGE_SIZE, NULL, UVM_UNKNOWN_OFFSET,
-	    0, mapflags, &args);
+	    VM_PAGE_TO_COLOR(pg), mapflags | UVM_FLAG_COLORMATCH, &args);
 	if (error) {
 		uvm_pagefree(pg);
Index: /trunk/src/sys/uvm/uvm_page.h
===================================================================
--- /trunk/src/sys/uvm/uvm_page.h	(revision 151)
+++ /trunk/src/sys/uvm/uvm_page.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uvm_page.h,v 1.55.14.1 2010/01/23 19:54:04 matt Exp $	*/
+/*	uvm_page.h,v 1.55.14.2 2011/04/29 08:16:42 matt Exp	*/
 
 /*
@@ -256,4 +256,7 @@
  * physical memory config is stored in vm_physmem.
  */
+#define	VM_PHYSMEM_PTR(i)	(&vm_physmem[i])
+#define	VM_PHYSMEM_PTR_SWAP(i, j) \
+	do { vm_physmem[(i)] = vm_physmem[(j)]; } while (0)
 
 extern struct vm_physseg vm_physmem[VM_PHYSSEG_MAX];
@@ -305,4 +308,9 @@
 
 #define VM_PAGE_TO_PHYS(entry)	((entry)->phys_addr)
+#define VM_PAGE_TO_COLOR(entry)	(atop((entry)->phys_addr) & uvmexp.colormask)
+
+#ifdef __HAVE_VM_PAGE_MD
+#define VM_PAGE_TO_MD(pg)	(&(pg)->mdpage)
+#endif
 
 /*
Index: /trunk/src/sys/uvm/uvm_pager.c
===================================================================
--- /trunk/src/sys/uvm/uvm_pager.c	(revision 151)
+++ /trunk/src/sys/uvm/uvm_pager.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uvm_pager.c,v 1.92 2008/04/17 05:39:41 simonb Exp $	*/
+/*	uvm_pager.c,v 1.92 2008/04/17 05:39:41 simonb Exp	*/
 
 /*
@@ -40,5 +40,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_pager.c,v 1.92 2008/04/17 05:39:41 simonb Exp $");
+__KERNEL_RCSID(0, "uvm_pager.c,v 1.92 2008/04/17 05:39:41 simonb Exp");
 
 #include "opt_uvmhist.h"
@@ -113,5 +113,6 @@
 	mutex_init(&pager_map_wanted_lock, MUTEX_DEFAULT, IPL_NONE);
 	pager_map_wanted = false;
-	emergva = uvm_km_alloc(kernel_map, round_page(MAXPHYS), 0,
+	emergva = uvm_km_alloc(kernel_map,
+	    round_page(MAXPHYS) + ptoa(uvmexp.ncolors), 0,
 	    UVM_KMF_VAONLY);
 #if defined(DEBUG)
@@ -151,8 +152,10 @@
 	struct vm_page *pp;
 	vm_prot_t prot;
-	const bool pdaemon = curlwp == uvm.pagedaemon_lwp;
+	const bool pdaemon = (curlwp == uvm.pagedaemon_lwp);
+	const u_int first_color = VM_PAGE_TO_COLOR(*pps);
 	UVMHIST_FUNC("uvm_pagermapin"); UVMHIST_CALLED(maphist);
 
-	UVMHIST_LOG(maphist,"(pps=0x%x, npages=%d)", pps, npages,0,0);
+	UVMHIST_LOG(maphist,"(pps=0x%x, npages=%d, first_color=%u)",
+		pps, npages, first_color, 0);
 
 	/*
@@ -166,9 +169,10 @@
 
 ReStart:
-	size = npages << PAGE_SHIFT;
+	size = ptoa(npages);
 	kva = 0;			/* let system choose VA */
 
-	if (uvm_map(pager_map, &kva, size, NULL, UVM_UNKNOWN_OFFSET, 0,
-	    UVM_FLAG_NOMERGE | (pdaemon ? UVM_FLAG_NOWAIT : 0)) != 0) {
+	if (uvm_map(pager_map, &kva, size, NULL, UVM_UNKNOWN_OFFSET,
+	    first_color, UVM_FLAG_COLORMATCH | UVM_FLAG_NOMERGE
+	    | (pdaemon ? UVM_FLAG_NOWAIT : 0)) != 0) {
 		if (pdaemon) {
 			mutex_enter(&pager_map_wanted_lock);
@@ -181,5 +185,5 @@
 			emerginuse = true;
 			mutex_exit(&pager_map_wanted_lock);
-			kva = emergva;
+			kva = emergva + ptoa(first_color);
 			/* The shift implicitly truncates to PAGE_SIZE */
 			KASSERT(npages <= (MAXPHYS >> PAGE_SHIFT));
@@ -200,7 +204,8 @@
 enter:
 	/* got it */
-	for (cva = kva ; size != 0 ; size -= PAGE_SIZE, cva += PAGE_SIZE) {
+	for (cva = kva; npages != 0; npages--, cva += PAGE_SIZE) {
 		pp = *pps++;
 		KASSERT(pp);
+		KASSERT(((VM_PAGE_TO_PHYS(pp) ^ cva) & uvmexp.colormask) == 0);
 		KASSERT(pp->flags & PG_BUSY);
 		pmap_kenter_pa(cva, VM_PAGE_TO_PHYS(pp), prot);
@@ -222,5 +227,5 @@
 uvm_pagermapout(vaddr_t kva, int npages)
 {
-	vsize_t size = npages << PAGE_SHIFT;
+	vsize_t size = ptoa(npages);
 	struct vm_map_entry *entries;
 	UVMHIST_FUNC("uvm_pagermapout"); UVMHIST_CALLED(maphist);
@@ -232,6 +237,7 @@
 	 */
 
-	pmap_kremove(kva, npages << PAGE_SHIFT);
-	if (kva == emergva) {
+	pmap_kremove(kva, size);
+
+	if ((kva & ~ptoa(uvmexp.colormask)) == emergva) {
 		mutex_enter(&pager_map_wanted_lock);
 		emerginuse = false;
Index: /trunk/src/sys/uvm/uvm_pager.h
===================================================================
--- /trunk/src/sys/uvm/uvm_pager.h	(revision 151)
+++ /trunk/src/sys/uvm/uvm_pager.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uvm_pager.h,v 1.38 2008/08/22 10:48:22 hannken Exp $	*/
+/*	$NetBSD: uvm_pager.h,v 1.38.12.1 2011/05/20 08:11:34 matt Exp $	*/
 
 /*
@@ -165,4 +165,5 @@
 #define PGO_NOTIMESTAMP 0x1000	/* don't mark object accessed/modified */
 #define PGO_RECLAIM	0x2000	/* object is being reclaimed */
+#define PGO_GLOCKHELD	0x4000	/* genfs_node's lock is already held */
 
 /* page we are not interested in getting */
Index: /trunk/src/sys/uvm/uvm_pglist.c
===================================================================
--- /trunk/src/sys/uvm/uvm_pglist.c	(revision 151)
+++ /trunk/src/sys/uvm/uvm_pglist.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uvm_pglist.c,v 1.42.16.5 2010/01/23 20:03:28 matt Exp $	*/
+/*	uvm_pglist.c,v 1.42.16.6 2010/06/01 19:04:02 matt Exp	*/
 
 /*-
@@ -36,5 +36,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_pglist.c,v 1.42.16.5 2010/01/23 20:03:28 matt Exp $");
+__KERNEL_RCSID(0, "uvm_pglist.c,v 1.42.16.6 2010/06/01 19:04:02 matt Exp");
 
 #include <sys/param.h>
@@ -171,4 +171,6 @@
 			try = roundup2(max(low, ps->avail_start), alignment);
 			limit = min(high, ps->avail_start + ps->start_hint);
+			if (limit >= ps->avail_end)
+				return 0;
 			skip = 0;
 			continue;
@@ -185,18 +187,26 @@
 			continue;
 		}
-#ifdef DEBUG
+
 		/*
 		 * Make sure this is a managed physical page.
 		 */
-
-		if (vm_physseg_find(try, &cidx) != ps - vm_physmem)
-			panic("pgalloc contig: botch1");
-		if (cidx != try - ps->start)
-			panic("pgalloc contig: botch2");
-		if (vm_physseg_find(try + num - 1, &cidx) != ps - vm_physmem)
-			panic("pgalloc contig: botch3");
-		if (cidx != try - ps->start + num - 1)
-			panic("pgalloc contig: botch4");
-#endif
+		KDASSERTMSG(vm_physseg_find(try, &cidx) == ps - vm_physmem,
+		    ("%s: %s(%#x, &cidx) (%d) != ps - vm_physmem (%zd)",
+		     __func__, "vm_physseg_find", try,
+		    vm_physseg_find(try, &cidx), ps - vm_physmem));
+
+		KDASSERTMSG(cidx == try - ps->start,
+		    ("%s: cidx (%#x) != try (%#x) - ps->start (%#"PRIxPADDR")",
+		     __func__, cidx, try, ps->start));
+
+		KDASSERTMSG(vm_physseg_find(try + num - 1, &cidx) == ps - vm_physmem,
+		    ("%s: %s(%#x + %#x - 1, &cidx) (%d) != ps - vm_physmem (%zd)",
+		     __func__, "vm_physseg_find", try, num,
+		    vm_physseg_find(try, &cidx), ps - vm_physmem));
+
+		KDASSERTMSG(cidx == try - ps->start + num - 1,
+		    ("%s: cidx (%#x) != try (%#x) - ps->start (%#"PRIxPADDR") + num (%#x) - 1",
+		     __func__, cidx, try, ps->start, num));
+
 		tryidx = try - ps->start;
 		end = tryidx + num;
@@ -354,7 +364,8 @@
     struct pglist *rlist)
 {
-	int todo, limit, try;
+	int todo, limit, try, color;
 	struct vm_page *pg;
-	bool second_pass;
+	bool second_pass, colorless;
+	const int colormask = uvmexp.colormask;
 #ifdef DEBUG
 	int cidx = 0;	/* XXX: GCC */
@@ -366,4 +377,18 @@
 
 	KASSERT(mutex_owned(&uvm_fpageqlock));
+
+	/*
+	 * If the pageq (rlist) is empty, then no pages have been allocated
+	 * and we can start with any color.  If it wasn't empty, then the
+	 * starting color is the last page's next color.
+	 */
+	colorless = TAILQ_EMPTY(rlist);
+	color = (ps->avail_start + ps->start_hint) & colormask;
+#ifdef DIAGNOSTIC
+	if (!colorless) {
+		pg = TAILQ_LAST(rlist, pglist);
+		KASSERT(color == ((VM_PAGE_TO_COLOR(pg) + 1) & colormask));
+	}
+#endif
 
 	low = atop(low);
@@ -376,21 +401,53 @@
 
 	for (;; try++, pg++) {
+		KDASSERTMSG(limit <= ps->avail_end,
+		    ("%s: limit (%#x) > ps->avail_end (%#"PRIxPADDR")",
+		     __func__, limit, ps->avail_end));
+
 		if (try >= limit) {
 			if (ps->start_hint == 0 || second_pass)
 				break;
 			second_pass = true;
-			try = max(low, ps->avail_start);
+			try = max(low, ps->avail_start) - 1;
 			limit = min(high, ps->avail_start + ps->start_hint);
+			if (limit >= ps->avail_end)
+				break;
 			pg = &ps->pgs[try - ps->start];
 			continue;
 		}
-#ifdef DEBUG
-		if (vm_physseg_find(try, &cidx) != ps - vm_physmem)
-			panic("pgalloc simple: botch1");
-		if (cidx != (try - ps->start))
-			panic("pgalloc simple: botch2");
-#endif
-		if (VM_PAGE_IS_FREE(pg) == 0)
+
+		KDASSERTMSG(vm_physseg_find(try, &cidx) == ps - vm_physmem,
+		    ("%s: %s(%#x, &cidx) (%d) != ps - vm_physmem (%zd)",
+		     __func__, "vm_physseg_find", try,
+		    vm_physseg_find(try, &cidx), ps - vm_physmem));
+
+		KDASSERTMSG(cidx == try - ps->start,
+		    ("%s: cidx (%#x) != try (%#x) - ps->start (%#"PRIxPADDR")",
+		     __func__, cidx, try, ps->start));
+
+		/*
+		 * If this page isn't free, then we need to skip a colors worth
+		 * of pages to get a matching color.  Note that colormask is 1
+		 * less than what we need since the loop will also increment
+		 * try and pgs.
+		 */
+		if (VM_PAGE_IS_FREE(pg) == 0) {
+			try += colormask;
+			pg += colormask;
 			continue;
+		}
+
+		/*
+		 * If this page doesn't have the right color, figure out how
+		 * many pages we need to skip until we get to the right color.
+		 * Note that skip is 1 less that what we need since the loop
+		 * will also increment try and pgs.
+		 */
+		if (!colorless && (try & colormask) != color) {
+			const int skip = (color - (try + 1)) & colormask;
+			try += skip;
+			pg += skip;
+			continue;
+		}
 
 		uvm_pglist_add(pg, rlist);
@@ -398,4 +455,11 @@
 			break;
 		}
+
+		/*
+		 * Advance the color (use try instead of color in case we
+		 * haven't set an initial color).
+		 */
+		color = (try + 1) & colormask;
+		colorless = false;
 	}
 
Index: /trunk/src/sys/uvm/uvm_unix.c
===================================================================
--- /trunk/src/sys/uvm/uvm_unix.c	(revision 151)
+++ /trunk/src/sys/uvm/uvm_unix.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uvm_unix.c,v 1.40.28.1 2009/08/23 06:38:07 matt Exp $	*/
+/*	$NetBSD: uvm_unix.c,v 1.40.28.2 2011/04/29 08:15:09 matt Exp $	*/
 
 /*
@@ -51,5 +51,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_unix.c,v 1.40.28.1 2009/08/23 06:38:07 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_unix.c,v 1.40.28.2 2011/04/29 08:15:09 matt Exp $");
 
 #include "opt_pax.h"
@@ -119,5 +119,5 @@
 		if (error) {
 #ifndef PRIdVSIZE
-#define	PRIdVSIZE	"%ld"
+#define	PRIdVSIZE	"ld"
 #endif
 			uprintf("sbrk: grow %"PRIdVSIZE" failed, error = %d\n",
Index: /trunk/src/sys/uvm/uvm_vnode.c
===================================================================
--- /trunk/src/sys/uvm/uvm_vnode.c	(revision 151)
+++ /trunk/src/sys/uvm/uvm_vnode.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: uvm_vnode.c,v 1.90 2008/01/02 11:49:21 ad Exp $	*/
+/*	uvm_vnode.c,v 1.90 2008/01/02 11:49:21 ad Exp	*/
 
 /*
@@ -51,5 +51,5 @@
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_vnode.c,v 1.90 2008/01/02 11:49:21 ad Exp $");
+__KERNEL_RCSID(0, "uvm_vnode.c,v 1.90 2008/01/02 11:49:21 ad Exp");
 
 #include "fs_nfs.h"
@@ -258,5 +258,6 @@
 				return 0;
 			}
-			pg = uvm_pagealloc(uobj, offset, NULL, 0);
+			pg = uvm_pagealloc(uobj, offset, NULL,
+			    UVM_FLAG_COLORMATCH);
 			if (pg == NULL) {
 				if (flags & UFP_NOWAIT) {
Index: /trunk/src/tools/Makefile
===================================================================
--- /trunk/src/tools/Makefile	(revision 151)
+++ /trunk/src/tools/Makefile	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: Makefile,v 1.124 2008/10/25 22:12:41 apb Exp $
+#	Makefile,v 1.124 2008/10/25 22:12:41 apb Exp
 
 .include <bsd.own.mk>
@@ -103,4 +103,9 @@
 .endif
 
+.if ${MACHINE} == "evbarm" || ${MACHINE} == "evbmips" || \
+    ${MACHINE} == "evbppc" || ${MACHINE} == "sandpoint"
+SUBDIR+=	mkubootimage
+.endif
+
 check_MKTOOLS: .PHONY .NOTMAIN
 .if ${MKTOOLS:Uyes} == "no"
Index: /trunk/src/tools/mkubootimage/Makefile
===================================================================
--- /trunk/src/tools/mkubootimage/Makefile	(revision 152)
+++ /trunk/src/tools/mkubootimage/Makefile	(revision 152)
@@ -0,0 +1,8 @@
+#	$NetBSD: Makefile,v 1.1.4.2 2011/05/20 15:05:11 matt Exp $
+
+HOSTPROGNAME=	${_TOOL_PREFIX}mkubootimage
+HOST_SRCDIR=	usr.bin/mkubootimage
+
+HOST_CPPFLAGS+= -I${.CURDIR}
+
+.include "${.CURDIR}/../Makefile.host"
Index: /trunk/src/usr.bin/Makefile
===================================================================
--- /trunk/src/usr.bin/Makefile	(revision 151)
+++ /trunk/src/usr.bin/Makefile	(revision 152)
@@ -1,3 +1,3 @@
-#	$NetBSD: Makefile,v 1.171 2008/10/29 16:49:33 christos Exp $
+#	Makefile,v 1.171 2008/10/29 16:49:33 christos Exp
 #	from: @(#)Makefile	8.3 (Berkeley) 1/7/94
 
@@ -16,6 +16,6 @@
 	kdump ktrace ktruss lam last lastcomm ldd leave less \
 	lex locale locate lock logger login logname look lorder m4 \
-	machine mail make man menuc mesg midiplay mixerctl mkcsmapper \
-	mkdep mkesdb mkfifo mklocale mkstr mktemp moduli msgc msgs \
+	machine mail make man menuc mesg midiplay mixerctl mkcsmapper mkdep \
+	mkesdb mkfifo mklocale mkstr mktemp mkubootimage moduli msgc msgs \
 	netgroup netstat newgrp newsyslog nfsstat nice nl nohup nvi \
 	pagesize passwd paste patch pathchk pkill pmap pmc pr \
Index: /trunk/src/usr.bin/mkubootimage/Makefile
===================================================================
--- /trunk/src/usr.bin/mkubootimage/Makefile	(revision 152)
+++ /trunk/src/usr.bin/mkubootimage/Makefile	(revision 152)
@@ -0,0 +1,7 @@
+# $NetBSD: Makefile,v 1.1.4.2 2011/05/20 15:05:11 matt Exp $
+
+PROG=	mkubootimage
+SRCS=	mkubootimage.c crc32.c
+NOMAN=	# defined
+
+.include <bsd.prog.mk>
Index: /trunk/src/usr.bin/mkubootimage/crc32.c
===================================================================
--- /trunk/src/usr.bin/mkubootimage/crc32.c	(revision 152)
+++ /trunk/src/usr.bin/mkubootimage/crc32.c	(revision 152)
@@ -0,0 +1,102 @@
+/* $NetBSD: crc32.c,v 1.2.4.2 2011/05/20 15:05:11 matt Exp $ */
+
+/*-
+ * Copyright (c) 2002 Marcel Moolenaar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * CRC32 code derived from work by Gary S. Brown.
+ */
+
+#if HAVE_NBTOOL_CONFIG_H
+#include "nbtool_config.h"
+#endif
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: crc32.c,v 1.2.4.2 2011/05/20 15:05:11 matt Exp $");
+
+#include <sys/types.h>
+#include <stdint.h>
+
+uint32_t	crc32(const void *, size_t);
+
+static uint32_t crc32_tab[] = {
+	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
+	0xe963a535, 0x9e6495a3,	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
+	0xf3b97148, 0x84be41de,	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,	0x14015c4f, 0x63066cd9,
+	0xfa0f3d63, 0x8d080df5,	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,	0x35b5a8fa, 0x42b2986c,
+	0xdbbbc9d6, 0xacbcf940,	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
+	0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,	0x76dc4190, 0x01db7106,
+	0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
+	0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+	0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
+	0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
+	0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
+	0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
+	0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+	0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
+	0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
+	0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
+	0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
+	0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+	0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
+	0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
+	0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
+	0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
+};
+
+uint32_t
+crc32(const void *buf, size_t size)
+{
+	const uint8_t *p;
+	uint32_t crc;
+
+	p = buf;
+	crc = ~0U;
+
+	while (size--)
+		crc = crc32_tab[(crc ^ *p++) & 0xFF] ^ (crc >> 8);
+
+	return crc ^ ~0U;
+}
Index: /trunk/src/usr.bin/mkubootimage/mkubootimage.c
===================================================================
--- /trunk/src/usr.bin/mkubootimage/mkubootimage.c	(revision 152)
+++ /trunk/src/usr.bin/mkubootimage/mkubootimage.c	(revision 152)
@@ -0,0 +1,345 @@
+/* $NetBSD: mkubootimage.c,v 1.6.2.2 2011/05/20 15:05:11 matt Exp $ */
+
+/*-
+ * Copyright (c) 2010 Jared D. McNeill <jmcneill@invisible.ca>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if HAVE_NBTOOL_CONFIG_H
+#include "nbtool_config.h"
+#endif
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: mkubootimage.c,v 1.6.2.2 2011/05/20 15:05:11 matt Exp $");
+
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#include "uboot.h"
+
+#ifndef __arraycount
+#define __arraycount(__x)	(sizeof(__x) / sizeof(__x[0]))
+#endif
+
+extern uint32_t crc32(const void *, size_t);
+
+static enum uboot_image_os image_os = IH_OS_NETBSD;
+static enum uboot_image_arch image_arch = IH_ARCH_UNKNOWN;
+static enum uboot_image_type image_type = IH_TYPE_UNKNOWN;
+static enum uboot_image_comp image_comp = IH_COMP_NONE;
+static uint32_t image_loadaddr = 0;
+static uint32_t image_entrypoint = 0;
+static char *image_name;
+
+struct uboot_os {
+	enum uboot_image_os os;
+	const char *name;
+} uboot_os[] = {
+	{ IH_OS_OPENBSD,	"openbsd" },
+	{ IH_OS_NETBSD,		"netbsd" },
+	{ IH_OS_FREEBSD,	"freebsd" },
+	{ IH_OS_LINUX,		"linux" },
+};
+
+static enum uboot_image_os
+get_os(const char *name)
+{
+	unsigned int i;
+
+	for (i = 0; i < __arraycount(uboot_os); i++) {
+		if (strcmp(uboot_os[i].name, name) == 0)
+			return uboot_os[i].os;
+	}
+
+	return IH_OS_UNKNOWN;
+}
+
+struct uboot_arch {
+	enum uboot_image_arch arch;
+	const char *name;
+} uboot_arch[] = {
+	{ IH_ARCH_ARM,		"arm" },
+	{ IH_ARCH_MIPS,		"mips" },
+	{ IH_ARCH_MIPS64,	"mips64" },
+	{ IH_ARCH_PPC,		"powerpc" },
+};
+
+static enum uboot_image_arch
+get_arch(const char *name)
+{
+	unsigned int i;
+
+	for (i = 0; i < __arraycount(uboot_arch); i++) {
+		if (strcmp(uboot_arch[i].name, name) == 0)
+			return uboot_arch[i].arch;
+	}
+
+	return IH_ARCH_UNKNOWN;
+}
+
+struct uboot_type {
+	enum uboot_image_type type;
+	const char *name;
+} uboot_type[] = {
+	{ IH_TYPE_STANDALONE,	"standalone" },
+	{ IH_TYPE_KERNEL,	"kernel" },
+	{ IH_TYPE_RAMDISK,	"ramdisk" },
+	{ IH_TYPE_FILESYSTEM,	"fs" },
+};
+
+static enum uboot_image_type
+get_type(const char *name)
+{
+	unsigned int i;
+
+	for (i = 0; i < __arraycount(uboot_type); i++) {
+		if (strcmp(uboot_type[i].name, name) == 0)
+			return uboot_type[i].type;
+	}
+
+	return IH_TYPE_UNKNOWN;
+}
+
+struct uboot_comp {
+	enum uboot_image_comp comp;
+	const char *name;
+} uboot_comp[] = {
+	{ IH_COMP_NONE,		"none" },
+	{ IH_COMP_GZIP,		"gz" },
+	{ IH_COMP_BZIP2,	"bz2" },
+};
+
+static enum uboot_image_comp
+get_comp(const char *name)
+{
+	unsigned int i;
+
+	for (i = 0; i < __arraycount(uboot_comp); i++) {
+		if (strcmp(uboot_comp[i].name, name) == 0)
+			return uboot_comp[i].comp;
+	}
+
+	return IH_TYPE_UNKNOWN;
+}
+
+static void
+usage(void)
+{
+	fprintf(stderr, "usage: mkubootimage -A <arm|mips|mips64|powerpc>");
+	fprintf(stderr, " -C <none|gz|bz2>");
+	fprintf(stderr, " -O <openbsd|netbsd|freebsd|linux>");
+	fprintf(stderr, " -T <standalone|kernel|ramdisk|fs>");
+	fprintf(stderr, " -a <addr> [-e <ep>] -n <name>");
+	fprintf(stderr, " <srcfile> <dstfile>\n");
+
+	exit(EXIT_FAILURE);
+}
+
+static void
+dump_header(struct uboot_image_header *hdr)
+{
+	time_t tm = ntohl(hdr->ih_time);
+
+	printf(" magic:       0x%08x\n", ntohl(hdr->ih_magic));
+	printf(" time:        %s", ctime(&tm));
+	printf(" size:        %u\n", ntohl(hdr->ih_size));
+	printf(" load addr:   0x%08x\n", ntohl(hdr->ih_load));
+	printf(" entry point: 0x%08x\n", ntohl(hdr->ih_ep));
+	printf(" data crc:    0x%08x\n", ntohl(hdr->ih_dcrc));
+	printf(" os:          %d\n", hdr->ih_os);
+	printf(" arch:        %d\n", hdr->ih_arch);
+	printf(" type:        %d\n", hdr->ih_type);
+	printf(" comp:        %d\n", hdr->ih_comp);
+	printf(" name:        %s\n", hdr->ih_name);
+	printf(" header crc:  0x%08x\n", hdr->ih_hcrc);
+}
+
+static int
+generate_header(struct uboot_image_header *hdr, int kernel_fd)
+{
+	uint8_t *p;
+	struct stat st;
+	uint32_t crc;
+	int error;
+
+	error = fstat(kernel_fd, &st);
+	if (error == -1) {
+		perror("stat");
+		return errno;
+	}
+
+	if (st.st_size + sizeof(*hdr) > UINT32_MAX) {
+		fprintf(stderr, "fatal: kernel too big\n");
+		return EINVAL;
+	}
+
+	p = mmap(0, st.st_size, PROT_READ, MAP_FILE|MAP_SHARED, kernel_fd, 0);
+	if (p == MAP_FAILED) {
+		perror("mmap kernel");
+		return EINVAL;
+	}
+	crc = crc32(p, st.st_size);
+	munmap(p, st.st_size);
+
+	memset(hdr, 0, sizeof(*hdr));
+	hdr->ih_magic = htonl(IH_MAGIC);
+	hdr->ih_time = htonl(st.st_mtime);
+	hdr->ih_size = htonl(st.st_size);
+	hdr->ih_load = htonl(image_loadaddr);
+	hdr->ih_ep = htonl(image_entrypoint);
+	hdr->ih_dcrc = htonl(crc);
+	hdr->ih_os = image_os;
+	hdr->ih_arch = image_arch;
+	hdr->ih_type = image_type;
+	hdr->ih_comp = image_comp;
+	strncpy((char *)hdr->ih_name, image_name, sizeof(hdr->ih_name));
+	crc = crc32((void *)hdr, sizeof(*hdr));
+	hdr->ih_hcrc = htonl(crc);
+
+	dump_header(hdr);
+
+	return 0;
+}
+
+static int
+write_image(struct uboot_image_header *hdr, int kernel_fd, int image_fd)
+{
+	uint8_t buf[4096];
+	ssize_t rlen, wlen;
+
+	wlen = write(image_fd, hdr, sizeof(*hdr));
+	if (wlen != sizeof(*hdr)) {
+		perror("short write");
+		return errno;
+	}
+
+	while ((rlen = read(kernel_fd, buf, sizeof(buf))) > 0) {
+		wlen = write(image_fd, buf, rlen);
+		if (wlen != rlen) {
+			perror("short write");
+			return errno;
+		}
+	}
+
+	return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+	struct uboot_image_header hdr;
+	const char *src, *dest;
+	char *ep;
+	int kernel_fd, image_fd;
+	int ch;
+	unsigned long num;
+
+	while ((ch = getopt(argc, argv, "A:C:O:T:a:e:hn:")) != -1) {
+		switch (ch) {
+		case 'A':	/* arch */
+			image_arch = get_arch(optarg);
+			break;
+		case 'C':	/* comp */
+			image_comp = get_comp(optarg);
+			break;
+		case 'O':	/* os */
+			image_os = get_os(optarg);
+			break;
+		case 'T':	/* type */
+			image_type = get_type(optarg);
+			break;
+		case 'a':	/* addr */
+			errno = 0;
+			num = strtoul(optarg, &ep, 0);
+			if (*ep != '\0' || (errno == ERANGE &&
+			    (num == ULONG_MAX || num == 0)))
+				errx(1, "illegal number -- %s", optarg);
+			image_loadaddr = (uint32_t)num;
+			break;
+		case 'e':	/* ep */
+			errno = 0;
+			num = strtoul(optarg, &ep, 0);
+			if (*ep != '\0' || (errno == ERANGE &&
+			    (num == ULONG_MAX || num == 0)))
+				errx(1, "illegal number -- %s", optarg);
+			image_entrypoint = (uint32_t)num;
+			break;
+		case 'n':	/* name */
+			image_name = strdup(optarg);
+			break;
+		case 'h':
+		default:
+			usage();
+			/* NOTREACHED */
+		}
+	}
+	argc -= optind;
+	argv += optind;
+
+	if (argc != 2)
+		usage();
+
+	if (image_entrypoint == 0)
+		image_entrypoint = image_loadaddr;
+
+	if (image_arch == IH_ARCH_UNKNOWN ||
+	    image_type == IH_TYPE_UNKNOWN ||
+	    image_loadaddr == 0 ||
+	    image_name == NULL)
+		usage();
+
+	src = argv[0];
+	dest = argv[1];
+
+	kernel_fd = open(src, O_RDONLY);
+	if (kernel_fd == -1) {
+		perror("open kernel");
+		return EXIT_FAILURE;
+	}
+	image_fd = open(dest, O_WRONLY|O_CREAT, 0666);
+	if (image_fd == -1) {
+		perror("open image");
+		return EXIT_FAILURE;
+	}
+
+	if (generate_header(&hdr, kernel_fd) != 0)
+		return EXIT_FAILURE;
+
+	if (write_image(&hdr, kernel_fd, image_fd) != 0)
+		return EXIT_FAILURE;
+
+	close(image_fd);
+	close(kernel_fd);
+
+	return EXIT_SUCCESS;
+}
Index: /trunk/src/usr.bin/mkubootimage/uboot.h
===================================================================
--- /trunk/src/usr.bin/mkubootimage/uboot.h	(revision 152)
+++ /trunk/src/usr.bin/mkubootimage/uboot.h	(revision 152)
@@ -0,0 +1,79 @@
+/* $NetBSD: uboot.h,v 1.3.2.2 2011/05/20 15:05:11 matt Exp $ */
+
+/*-
+ * Copyright (c) 2010 Jared D. McNeill <jmcneill@invisible.ca>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _HAVE_UBOOT_H
+#define _HAVE_UBOOT_H
+
+enum uboot_image_os {
+	IH_OS_UNKNOWN = 0,
+	IH_OS_OPENBSD = 1,
+	IH_OS_NETBSD = 2,
+	IH_OS_FREEBSD = 3,
+	IH_OS_LINUX = 5
+};
+
+enum uboot_image_arch {
+	IH_ARCH_UNKNOWN = 0,
+	IH_ARCH_ARM = 2,
+	IH_ARCH_MIPS = 5,
+	IH_ARCH_MIPS64 = 6,
+	IH_ARCH_PPC = 7
+};
+
+enum uboot_image_type {
+	IH_TYPE_UNKNOWN = 0,
+	IH_TYPE_STANDALONE = 1,
+	IH_TYPE_KERNEL = 2,
+	IH_TYPE_RAMDISK = 3,
+	IH_TYPE_FILESYSTEM = 7,
+};
+
+enum uboot_image_comp {
+	IH_COMP_NONE = 0,
+	IH_COMP_GZIP = 1,
+	IH_COMP_BZIP2 = 2,
+};
+
+#define IH_MAGIC	0x27051956
+#define IH_NMLEN	32
+
+struct uboot_image_header {
+	uint32_t	ih_magic;
+	uint32_t	ih_hcrc;
+	uint32_t	ih_time;
+	uint32_t	ih_size;
+	uint32_t	ih_load;
+	uint32_t	ih_ep;
+	uint32_t	ih_dcrc;
+	uint8_t		ih_os;
+	uint8_t		ih_arch;
+	uint8_t		ih_type;
+	uint8_t		ih_comp;
+	uint8_t		ih_name[IH_NMLEN];
+};
+
+#endif /* !_HAVE_UBOOT_H */
Index: /trunk/src/usr.bin/sort/fsort.c
===================================================================
--- /trunk/src/usr.bin/sort/fsort.c	(revision 151)
+++ /trunk/src/usr.bin/sort/fsort.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: fsort.c,v 1.32.12.1 2010/04/21 05:27:12 matt Exp $	*/
+/*	fsort.c,v 1.32.12.1 2010/04/21 05:27:12 matt Exp	*/
 
 /*-
@@ -73,5 +73,5 @@
 
 #ifndef lint
-__RCSID("$NetBSD: fsort.c,v 1.32.12.1 2010/04/21 05:27:12 matt Exp $");
+__RCSID("fsort.c,v 1.32.12.1 2010/04/21 05:27:12 matt Exp");
 __SCCSID("@(#)fsort.c	8.1 (Berkeley) 6/6/93");
 #endif /* not lint */
@@ -99,5 +99,5 @@
 	int max_recs = DEBUG('m') ? 16 : MAXNUM;
 
-	buffer = malloc(bufsize);
+	buffer = allocrec(NULL, bufsize);
 	bufend = (u_char *)buffer + bufsize;
 	/* Allocate double length keymap for radix_sort */
@@ -158,5 +158,5 @@
 			/* Allocate a larger buffer for this lot of data */
 			bufsize *= 2;
-			nbuffer = realloc(buffer, bufsize);
+			nbuffer = allocrec(buffer, bufsize);
 			if (!nbuffer) {
 				err(2, "failed to realloc buffer to %zu bytes",
Index: /trunk/src/usr.bin/sort/msort.c
===================================================================
--- /trunk/src/usr.bin/sort/msort.c	(revision 151)
+++ /trunk/src/usr.bin/sort/msort.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: msort.c,v 1.18.12.1 2010/04/21 05:27:12 matt Exp $	*/
+/*	msort.c,v 1.18.12.1 2010/04/21 05:27:12 matt Exp	*/
 
 /*-
@@ -66,5 +66,5 @@
 
 #ifndef lint
-__RCSID("$NetBSD: msort.c,v 1.18.12.1 2010/04/21 05:27:12 matt Exp $");
+__RCSID("msort.c,v 1.18.12.1 2010/04/21 05:27:12 matt Exp");
 __SCCSID("@(#)msort.c	8.1 (Berkeley) 6/6/93");
 #endif /* not lint */
@@ -210,5 +210,5 @@
 		cfile = &fstack[i];
 		if (cfile->rec == NULL) {
-			cfile->rec = emalloc(DEFLLEN);
+			cfile->rec = allocrec(NULL, DEFLLEN);
 			cfile->end = (u_char *)cfile->rec + DEFLLEN;
 		}
@@ -223,5 +223,5 @@
 				/* Double buffer size */
 				sz = (cfile->end - (u_char *)cfile->rec) * 2;
-				cfile->rec = erealloc(cfile->rec, sz);
+				cfile->rec = allocrec(cfile->rec, sz);
 				cfile->end = (u_char *)cfile->rec + sz;
 				continue;
@@ -249,5 +249,5 @@
 	 * list.
 	 */
-	new_rec = emalloc(DEFLLEN);
+	new_rec = allocrec(NULL, DEFLLEN);
 	new_end = (u_char *)new_rec + DEFLLEN;
 	for (;;) {
@@ -267,5 +267,5 @@
 			/* Buffer not large enough - double in size */
 			sz = (new_end - (u_char *)new_rec) * 2;
-			new_rec = erealloc(new_rec, sz);
+			new_rec = allocrec(new_rec, sz);
 			new_end = (u_char *)new_rec +sz;
 			continue;
Index: /trunk/src/usr.bin/sort/sort.c
===================================================================
--- /trunk/src/usr.bin/sort/sort.c	(revision 151)
+++ /trunk/src/usr.bin/sort/sort.c	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sort.c,v 1.46.8.1 2010/04/21 05:27:12 matt Exp $	*/
+/*	$NetBSD: sort.c,v 1.46.8.2 2011/05/20 08:11:34 matt Exp $	*/
 
 /*-
@@ -78,5 +78,5 @@
 
 #ifndef lint
-__RCSID("$NetBSD: sort.c,v 1.46.8.1 2010/04/21 05:27:12 matt Exp $");
+__RCSID("$NetBSD: sort.c,v 1.46.8.2 2011/05/20 08:11:34 matt Exp $");
 __SCCSID("@(#)sort.c	8.1 (Berkeley) 6/6/93");
 #endif /* not lint */
@@ -406,2 +406,9 @@
 	exit(2);
 }
+
+RECHEADER *
+allocrec(RECHEADER *rec, size_t size)
+{
+
+	return (erealloc(rec, size + sizeof(long) - 1));
+}
Index: /trunk/src/usr.bin/sort/sort.h
===================================================================
--- /trunk/src/usr.bin/sort/sort.h	(revision 151)
+++ /trunk/src/usr.bin/sort/sort.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: sort.h,v 1.19.12.1 2010/04/21 05:27:12 matt Exp $	*/
+/*	$NetBSD: sort.h,v 1.19.12.2 2011/05/20 13:34:11 matt Exp $	*/
 
 /*-
@@ -175,4 +175,5 @@
 extern unsigned int debug_flags;
 
+RECHEADER *allocrec(RECHEADER *, size_t);
 void	 append(RECHEADER **, int, FILE *, void (*)(const RECHEADER *, FILE *));
 void	 concat(FILE *, FILE *);
Index: /trunk/src/usr.bin/xlint/arch/mips64/targparam.h
===================================================================
--- /trunk/src/usr.bin/xlint/arch/mips64/targparam.h	(revision 151)
+++ /trunk/src/usr.bin/xlint/arch/mips64/targparam.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: targparam.h,v 1.1 2006/08/25 23:35:04 matt Exp $	*/
+/*	$NetBSD: targparam.h,v 1.1.30.1 2011/04/29 09:35:37 matt Exp $	*/
 
 /*
@@ -50,5 +50,5 @@
 #define	FLOAT_SIZE		(4 * CHAR_BIT)
 #define	DOUBLE_SIZE		(8 * CHAR_BIT)
-#define	LDOUBLE_SIZE		(8 * CHAR_BIT)
+#define	LDOUBLE_SIZE		(16 * CHAR_BIT)
 
 #define	ENUM_SIZE		(4 * CHAR_BIT)
Index: /trunk/src/usr.sbin/pppd/pppd/tdb.h
===================================================================
--- /trunk/src/usr.sbin/pppd/pppd/tdb.h	(revision 151)
+++ /trunk/src/usr.sbin/pppd/pppd/tdb.h	(revision 152)
@@ -1,3 +1,3 @@
-/*	$NetBSD: tdb.h,v 1.1 2000/09/23 22:14:55 christos Exp $	*/
+/*	$NetBSD: tdb.h,v 1.1.1.1 2000/09/23 22:14:55 christos Exp $	*/
 
 #define STANDALONE	1
