Bump the config version. Add a 'cpu_arch' directive that allows the
authorMatthew Dillon <dillon@dragonflybsd.org>
Mon, 23 Oct 2006 18:01:15 +0000 (18:01 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Mon, 23 Oct 2006 18:01:15 +0000 (18:01 +0000)
cpu architecture for the virtual machine to be specified.  This also
creates additional softlinks for <cpu/*.h> and <cpu_arch/...> to allow
a virtual machine to access cpu-architecture-specific files.

sys/config/VKERNEL
sys/platform/pc32/conf/Makefile
sys/platform/vkernel/conf/Makefile
usr.sbin/config/config.h
usr.sbin/config/config.y
usr.sbin/config/configvers.h
usr.sbin/config/lang.l
usr.sbin/config/main.c

index 48a88ff..601adb0 100644 (file)
@@ -1,8 +1,9 @@
 # VKERNEL - test rid for virtual kernel
 #
-# $DragonFly: src/sys/config/VKERNEL,v 1.1 2006/10/22 16:09:19 dillon Exp $
+# $DragonFly: src/sys/config/VKERNEL,v 1.2 2006/10/23 18:01:15 dillon Exp $
 
-machine                vkernel
+machine                vkernel         # machine architecture
+cpu_arch       i386            # creates <cpu/blah.h> infrastructure
 ident          VKERNEL
 maxusers       0
 
index 0235e55..608a975 100644 (file)
@@ -2,7 +2,7 @@
 # Copyright 1990 W. Jolitz
 #      from: @(#)Makefile.i386 7.1 5/10/91
 # $FreeBSD: src/sys/conf/Makefile.i386,v 1.179.2.16 2002/11/18 11:26:49 ru Exp $
-# $DragonFly: src/sys/platform/pc32/conf/Makefile,v 1.1 2006/10/22 16:09:13 dillon Exp $
+# $DragonFly: src/sys/platform/pc32/conf/Makefile,v 1.2 2006/10/23 18:01:15 dillon Exp $
 #
 # Makefile for DragonFly BSD
 #
@@ -24,7 +24,7 @@
 #      -DDESTDIR               Where to install, defaults to /
 
 # Which version of config(8) is required.
-%VERSREQ=      400023
+%VERSREQ=      400024
 
 .if !defined(S)
 .if exists(./@/.)
index 8a55483..3550ee7 100644 (file)
@@ -1,7 +1,7 @@
-# $DragonFly: src/sys/platform/vkernel/conf/Makefile,v 1.1 2006/10/22 16:09:14 dillon Exp $
+# $DragonFly: src/sys/platform/vkernel/conf/Makefile,v 1.2 2006/10/23 18:01:15 dillon Exp $
 #
 # Which version of config(8) is required.
-%VERSREQ=      400023
+%VERSREQ=      400024
 
 .if !defined(S)
 .if exists(./@/.)
index 9e24534..9d97881 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)config.h    8.1 (Berkeley) 6/6/93
  * $FreeBSD: src/usr.sbin/config/config.h,v 1.35.2.1 2000/08/03 00:09:56 peter Exp $
- * $DragonFly: src/usr.sbin/config/config.h,v 1.6 2005/01/12 00:26:03 cpressey Exp $
+ * $DragonFly: src/usr.sbin/config/config.h,v 1.7 2006/10/23 18:01:13 dillon Exp $
  */
 
 /*
@@ -109,6 +109,7 @@ struct config {
  * in the makerules, etc.
  */
 char   *machinename;
+char   *cpuarchname;
 
 /*
  * For each machine, a set of CPU's may be specified as supported.
index c2f8895..a6a4083 100644 (file)
@@ -13,6 +13,7 @@
 %token CONFLICTS
 %token CONTROLLER
 %token CPU
+%token CPU_ARCH
 %token DEVICE
 %token DISABLE
 %token DISK
@@ -83,7 +84,7 @@
  *
  *     @(#)config.y    8.1 (Berkeley) 6/6/93
  * $FreeBSD: src/usr.sbin/config/config.y,v 1.42.2.1 2001/01/23 00:09:32 peter Exp $
- * $DragonFly: src/usr.sbin/config/config.y,v 1.11 2005/01/12 00:26:03 cpressey Exp $
+ * $DragonFly: src/usr.sbin/config/config.y,v 1.12 2006/10/23 18:01:13 dillon Exp $
  */
 
 #include <ctype.h>
@@ -138,6 +139,14 @@ Config_spec:
                }
                machinename = $2;
              } |
+       CPU_ARCH Save_id
+             = {
+               if (cpuarchname != NULL) {
+                   errx(1, "%d: only one cpu_arch directive is allowed",
+                       yyline);
+               }
+               cpuarchname = $2;
+             } |
        CPU Save_id
              = {
                struct cputype *cp;
index b605706..fe79260 100644 (file)
@@ -7,6 +7,6 @@
  * and <osreldate.h> system.
  *
  * $FreeBSD: src/usr.sbin/config/configvers.h,v 1.19.2.1 2001/12/19 18:09:32 silby Exp $
- * $DragonFly: src/usr.sbin/config/configvers.h,v 1.6 2006/10/22 16:09:08 dillon Exp $
+ * $DragonFly: src/usr.sbin/config/configvers.h,v 1.7 2006/10/23 18:01:13 dillon Exp $
  */
-#define        CONFIGVERS      400023
+#define        CONFIGVERS      400024
index 8e32f68..adda12c 100644 (file)
@@ -33,7 +33,7 @@
  *
  *     @(#)lang.l      8.1 (Berkeley) 6/6/93
  * $FreeBSD: src/usr.sbin/config/lang.l,v 1.27 1999/11/09 07:20:22 peter Exp $
- * $DragonFly: src/usr.sbin/config/lang.l,v 1.10 2005/01/12 00:26:03 cpressey Exp $
+ * $DragonFly: src/usr.sbin/config/lang.l,v 1.11 2006/10/23 18:01:13 dillon Exp $
  */
 
 #include <ctype.h>
@@ -57,6 +57,7 @@ struct kt {
        { "config",     CONFIG },
        { "controller", CONTROLLER },
        { "cpu",        CPU },
+       { "cpu_arch",   CPU_ARCH },
        { "device",     DEVICE },
        { "disable",    DISABLE },
        { "disk",       DISK },
index a2fb344..0eed3c3 100644 (file)
@@ -33,7 +33,7 @@
  * @(#) Copyright (c) 1980, 1993 The Regents of the University of California.  All rights reserved.
  * @(#)main.c  8.1 (Berkeley) 6/6/93
  * $FreeBSD: src/usr.sbin/config/main.c,v 1.37.2.3 2001/06/13 00:25:53 cg Exp $
- * $DragonFly: src/usr.sbin/config/main.c,v 1.17 2006/10/22 16:09:08 dillon Exp $
+ * $DragonFly: src/usr.sbin/config/main.c,v 1.18 2006/10/23 18:01:13 dillon Exp $
  */
 
 #include <sys/types.h>
@@ -160,6 +160,11 @@ main(int argc, char *argv[])
                printf("Specify machine type, e.g. ``machine i386''\n");
                exit(1);
        }
+       if (strcmp(machinename, "vkernel") == 0 && cpuarchname == NULL) {
+               printf("Specify cpu_arch for virtual kernel, e.g. "
+                      "``cpu_arch i386''\n");
+               exit(1);
+       }
        newbus_ioconf();
        
        /*
@@ -174,7 +179,7 @@ main(int argc, char *argv[])
        symlink(linkdest, path("machine"));
 
        /*
-        * "arch" points into <ARCH>
+        * "arch" points into <ARCH>/<MACHINE_ARCH>
         */
        if (*srcdir == '\0')
                snprintf(linkdest, sizeof(linkdest), "../../arch/%s",
@@ -184,6 +189,28 @@ main(int argc, char *argv[])
                    srcdir, machinename);
        symlink(linkdest, path("arch"));
 
+       /*
+        * "cpu" points to <ARCH>/<CPU_ARCH>/include, only if cpu_arch
+        * directive was specified.  Used by virtual kernels.
+        */
+       if (cpuarchname != NULL) {
+               if (*srcdir == '\0')
+                       snprintf(linkdest, sizeof(linkdest),
+                                "../../arch/%s/include", cpuarchname);
+               else
+                       snprintf(linkdest, sizeof(linkdest),
+                                "%s/arch/%s/include", srcdir, cpuarchname);
+               symlink(linkdest, path("cpu"));
+
+               if (*srcdir == '\0')
+                       snprintf(linkdest, sizeof(linkdest), "../../arch/%s",
+                           cpuarchname);
+               else
+                       snprintf(linkdest, sizeof(linkdest), "%s/arch/%s",
+                           srcdir, cpuarchname);
+               symlink(linkdest, path("cpu_arch"));
+       }
+
        /*
         * XXX check directory structure for architecture subdirectories and
         * create the symlinks automatically XXX