For the moment conditionally remove the declaration of certain libc
authorMatthew Dillon <dillon@dragonflybsd.org>
Tue, 5 Dec 2006 23:14:55 +0000 (23:14 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Tue, 5 Dec 2006 23:14:55 +0000 (23:14 +0000)
functions when compiling with _KERNEL_VIRTUAL to avoid conflicts with
replicas in the kernel code.  This allows the virtual kernel source to
include standard libc header files.

Define _KERNEL_VIRTUAL in machine/vkernel/conf/kern.mk.

Begin fleshing out the virtual kernel init sequence.

include/stdlib.h
include/string.h
sys/platform/vkernel/conf/files
sys/platform/vkernel/conf/kern.mk
sys/platform/vkernel/platform/init.c
sys/platform/vkernel/platform/machintr.c [new file with mode: 0644]
sys/sys/errno.h
sys/sys/fcntl.h
sys/sys/stat.h
sys/sys/systm.h
sys/sys/types.h

index ae5142a..3ec0350 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)stdlib.h    8.5 (Berkeley) 5/19/95
  * $FreeBSD: src/include/stdlib.h,v 1.16.2.5 2002/12/13 01:34:00 tjr Exp $
- * $DragonFly: src/include/stdlib.h,v 1.18 2006/09/28 17:20:45 corecode Exp $
+ * $DragonFly: src/include/stdlib.h,v 1.19 2006/12/05 23:14:51 dillon Exp $
  */
 
 #ifndef _STDLIB_H_
@@ -102,8 +102,6 @@ int  rand(void);
 void   *realloc(void *, size_t);
 void    srand(unsigned);
 double  strtod(const char *, char **);
-long    strtol(const char *, char **, int);
-unsigned long  strtoul(const char *, char **, int);
 #ifdef __LONG_LONG_SUPPORTED
 long long int  atoll(const char *);
 long long      strtoll(const char *, char **, int);
@@ -111,6 +109,11 @@ unsigned long long strtoull(const char *, char **, int);
 #endif
 int     system(const char *);
 
+#if !defined(_KERNEL_VIRTUAL)
+long    strtol(const char *, char **, int);
+unsigned long  strtoul(const char *, char **, int);
+#endif
+
 int     mblen(const char *, size_t);
 size_t  mbstowcs(wchar_t *, const char *, size_t);
 int     wctomb(char *, wchar_t);
@@ -171,10 +174,13 @@ char      *setstate(char *);
 void    srandom(unsigned long);
 void    srandomdev(void);
 char   *user_from_uid(uid_t, int);
-#ifndef __STRICT_ANSI__
+
+#if !defined(__STRICT_ANSI__) && !defined(_KERNEL_VIRTUAL)
 __int64_t      strtoq(const char *, char **, int);
 __uint64_t     strtouq(const char *, char **, int);
+#endif
 
+#ifndef __STRICT_ANSI__
 #ifdef __LONG_LONG_SUPPORTED
 long long
         strtonum(const char *, long long, long long, const char **);
index 03518ef..a17917b 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)string.h    8.1 (Berkeley) 6/2/93
  * $FreeBSD: src/include/string.h,v 1.6.2.3 2001/12/25 00:36:57 ache Exp $
- * $DragonFly: src/include/string.h,v 1.7 2005/09/20 08:42:51 asmodai Exp $
+ * $DragonFly: src/include/string.h,v 1.8 2006/12/05 23:14:51 dillon Exp $
  */
 
 #ifndef _STRING_H_
@@ -59,21 +59,11 @@ typedef __size_t        size_t;             /* open group */
 
 __BEGIN_DECLS
 void   *memchr (const void *, int, size_t);
-int     memcmp (const void *, const void *, size_t);
-void   *memcpy (void *, const void *, size_t);
 void   *memmove (void *, const void *, size_t);
-void   *memset (void *, int, size_t);
-char   *strcat (char *, const char *);
 char   *strchr (const char *, int);
-int     strcmp (const char *, const char *);
 int     strcoll (const char *, const char *);
-char   *strcpy (char *, const char *);
 size_t strcspn (const char *, const char *);
 char   *strerror (int);
-size_t strlen (const char *);
-char   *strncat (char *, const char *, size_t);
-int     strncmp (const char *, const char *, size_t);
-char   *strncpy (char *, const char *, size_t);
 char   *strpbrk (const char *, const char *);
 char   *strrchr (const char *, int);
 size_t strspn (const char *, const char *);
@@ -81,21 +71,26 @@ char        *strstr (const char *, const char *);
 char   *strtok (char *, const char *);
 size_t strxfrm (char *, const char *, size_t);
 
+#if !defined(_KERNEL_VIRTUAL)
+int    memcmp (const void *, const void *, size_t);
+void   *memcpy (void *, const void *, size_t);
+void   *memset (void *, int, size_t);
+char   *strcat (char *, const char *);
+int    strcmp (const char *, const char *);
+char   *strcpy (char *, const char *);
+size_t strlen (const char *);
+char   *strncat (char *, const char *, size_t);
+int    strncmp (const char *, const char *, size_t);
+char   *strncpy (char *, const char *, size_t);
+#endif
+
 /* Nonstandard routines */
 #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
-int     bcmp (const void *, const void *, size_t);
-void    bcopy (const void *, void *, size_t);
-void    bzero (void *, size_t);
-int     ffs (int);
-char   *index (const char *, int);
 void   *memccpy (void *, const void *, int, size_t);
-char   *rindex (const char *, int);
 int     strcasecmp (const char *, const char *);
 char   *strcasestr (const char *, const char *);
 char   *strdup (const char *);
 int     strerror_r (int, char *, size_t);
-size_t strlcat (char *, const char *, size_t);
-size_t strlcpy (char *, const char *, size_t);
 void    strmode (mode_t, char *);
 int     strncasecmp (const char *, const char *, size_t);
 char   *strnstr (const char *, const char *, size_t);
@@ -103,7 +98,20 @@ char        *strsep (char **, const char *);
 char   *strsignal (int);
 char   *strtok_r (char *, const char *, char **);
 void    swab (const void *, void *, size_t);
+
+#if !defined(_KERNEL_VIRTUAL)
+void   bcopy (const void *, void *, size_t);
+void   bzero (void *, size_t);
+int    ffs (int);
+int    bcmp (const void *, const void *, size_t);
+char   *index (const char *, int);
+char   *rindex (const char *, int);
+size_t strlcat (char *, const char *, size_t);
+size_t strlcpy (char *, const char *, size_t);
 #endif
+
+#endif
+
 __END_DECLS
 
 #endif /* _STRING_H_ */
index 6129315..16bc76d 100644 (file)
@@ -1,7 +1,7 @@
 # This file tells config what files go into building a kernel,
 # files marked standard are always included.
 #
-# $DragonFly: src/sys/platform/vkernel/conf/files,v 1.3 2006/11/07 17:51:24 dillon Exp $
+# $DragonFly: src/sys/platform/vkernel/conf/files,v 1.4 2006/12/05 23:14:53 dillon Exp $
 #
 bf_enc.o                       optional        ipsec ipsec_esp         \
        dependency      "$S/crypto/blowfish/arch/i386/bf_enc.S $S/crypto/blowfish/arch/i386/bf_enc_586.S $S/crypto/blowfish/arch/i386/bf_enc_686.S"             \
@@ -44,3 +44,7 @@ cpu/i386/misc/ktr.c                   optional        ktr
 #vkernel/vkernel/trap.c                standard
 #vkernel/vkernel/clock.c               standard
 #vkernel/vkernel/float.c               standard
+#
+# PLATFORM FILES
+machine/vkernel/platform/init.c                standard
+machine/vkernel/platform/machintr.c    standard
index b385698..0d6b310 100644 (file)
@@ -1,4 +1,4 @@
-# $DragonFly: src/sys/platform/vkernel/conf/kern.mk,v 1.1 2006/10/22 16:09:14 dillon Exp $
+# $DragonFly: src/sys/platform/vkernel/conf/kern.mk,v 1.2 2006/12/05 23:14:53 dillon Exp $
 #
 # On the i386, do not align the stack to 16-byte boundaries.  Otherwise GCC
 # adds code to the entry and exit point of every function to align the
@@ -15,5 +15,6 @@
 CFLAGS+=       -mpreferred-stack-boundary=2
 CFLAGS+=       -fno-stack-protector
 CFLAGS+=       -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3
+CFLAGS+=       -D_KERNEL_VIRTUAL
 
 INLINE_LIMIT=  8000
index c249304..82d4798 100644 (file)
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * 
- * $DragonFly: src/sys/platform/vkernel/platform/init.c,v 1.1 2006/12/04 18:04:04 dillon Exp $
+ * $DragonFly: src/sys/platform/vkernel/platform/init.c,v 1.2 2006/12/05 23:14:54 dillon Exp $
  */
 
+#include <sys/types.h>
+#include <sys/systm.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <vm/vm_page.h>
+
 #include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <err.h>
+#include <errno.h>
 
 vm_paddr_t Maxmem;
 int MemImageFd = -1;
@@ -42,9 +54,10 @@ int RootImageFd = -1;
 vm_offset_t KvaBase;
 vm_offset_t KvaSize;
 
-static void init_sys_memory(const char *imageFile);
-static void init_kern_memory(const char *imageFile);
-static void init_rootdevice(const char *imageFile);
+static void init_sys_memory(char *imageFile);
+static void init_kern_memory(void);
+static void init_rootdevice(char *imageFile);
+static void usage(const char *ctl);
 
 /*
  * Kernel startup for virtual kernels - standard main() 
@@ -52,8 +65,10 @@ static void init_rootdevice(const char *imageFile);
 int
 main(int ac, char **av)
 {
-       const char *memImageFile;
-       const char *rootImageFile;
+       char *memImageFile = NULL;
+       char *rootImageFile = NULL;
+       char *suffix;
+       int c;
 
        /*
         * Process options
@@ -101,6 +116,7 @@ main(int ac, char **av)
        init_rootdevice(rootImageFile);
        mi_startup();
        /* NOT REACHED */
+       exit(1);
 }
 
 /*
@@ -108,8 +124,9 @@ main(int ac, char **av)
  */
 static
 void
-init_sys_memory(const char *imageFile)
+init_sys_memory(char *imageFile)
 {
+       struct stat st;
        int fd;
 
        /*
@@ -120,7 +137,7 @@ init_sys_memory(const char *imageFile)
        if (imageFile && stat(imageFile, &st) == 0 && Maxmem == 0)
                Maxmem = (vm_paddr_t)st.st_size;
        if ((imageFile == NULL || stat(imageFile, &st) < 0) && Maxmem == 0) {
-               err(1, "Cannot create new memory file unless "
+               err(1, "Cannot create new memory file %s unless "
                       "system memory size is specified with -m",
                       imageFile);
                /* NOT REACHED */
@@ -145,7 +162,7 @@ init_sys_memory(const char *imageFile)
                asprintf(&imageFile, "/var/vkernel/image.%05d", (int)getpid());
        fd = open(imageFile, O_RDWR|O_CREAT|O_EXLOCK|O_NONBLOCK, 0644);
        if (fd < 0 || fstat(fd, &st) < 0) {
-               err(1, "Unable to open/create %s",
+               err(1, "Unable to open/create %s: %s",
                      imageFile, strerror(errno));
                /* NOT REACHED */
        }
@@ -212,7 +229,14 @@ init_kern_memory(void)
  */
 static
 void
-init_rootdevice(const char *imageFile)
+init_rootdevice(char *imageFile)
+{
+}
+
+static
+void
+usage(const char *ctl)
 {
+       
 }
 
diff --git a/sys/platform/vkernel/platform/machintr.c b/sys/platform/vkernel/platform/machintr.c
new file mode 100644 (file)
index 0000000..ca6ff00
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2006 The DragonFly Project.  All rights reserved.
+ * 
+ * This code is derived from software contributed to The DragonFly Project
+ * by Matthew Dillon <dillon@backplane.com>
+ * 
+ * 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 DragonFly Project 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 COPYRIGHT HOLDERS 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
+ * COPYRIGHT HOLDERS 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.
+ * 
+ * $DragonFly: src/sys/platform/vkernel/platform/machintr.c,v 1.1 2006/12/05 23:14:54 dillon Exp $
+ */
+
+#include <sys/types.h>
+#include <sys/machintr.h>
+#include <stdio.h>
+
+static void dummy_intrdis(int);
+static void dummy_intren(int);
+static int dummy_vectorctl(int, int, int);
+static int dummy_setvar(int, const void *);
+static int dummy_getvar(int, void *);
+static void dummy_finalize(void);
+
+struct machintr_abi MachIntrABI = {
+       MACHINTR_GENERIC,
+       dummy_intrdis,
+       dummy_intren,
+       dummy_vectorctl,
+       dummy_setvar,
+       dummy_getvar,
+       dummy_finalize
+};
+
+static void
+dummy_intrdis(int)
+{
+}
+
+static void
+dummy_intren(int)
+{
+}
+
+static int
+dummy_vectorctl(int, int, int)
+{
+       return (EOPNOTSUPP);
+}
+
+static int
+dummy_setvar(int, const void *)
+{
+       return (ENOENT);
+}
+
+static int
+dummy_getvar(int, void *)
+{
+       return (ENOENT);
+}
+
+static void
+dummy_finalize(void)
+{
+}
+
index 58744e8..ed27d87 100644 (file)
  *
  *     @(#)errno.h     8.5 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/sys/errno.h,v 1.14.2.2 2002/01/22 10:46:56 keramida Exp $
- * $DragonFly: src/sys/sys/errno.h,v 1.9 2005/07/03 14:43:27 corecode Exp $
+ * $DragonFly: src/sys/sys/errno.h,v 1.10 2006/12/05 23:14:55 dillon Exp $
  */
 
 #ifndef _SYS_ERRNO_H_
 #define _SYS_ERRNO_H_
 
-#ifndef _KERNEL
+#if !defined(_KERNEL) || defined(_KERNEL_VIRTUAL)
 extern __thread int    errno;
 
 #include <sys/cdefs.h>
index 86cb04a..9a36827 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)fcntl.h     8.3 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/sys/fcntl.h,v 1.9.2.2 2001/06/03 05:00:10 dillon Exp $
- * $DragonFly: src/sys/sys/fcntl.h,v 1.10 2006/07/28 02:11:31 dillon Exp $
+ * $DragonFly: src/sys/sys/fcntl.h,v 1.11 2006/12/05 23:14:55 dillon Exp $
  */
 
 #ifndef _SYS_FCNTL_H_
@@ -216,8 +216,7 @@ union fcntl_dat {
 #define        LOCK_UN         0x08            /* unlock file */
 #endif
 
-
-#ifndef _KERNEL
+#if !defined(_KERNEL) || defined(_KERNEL_VIRTUAL)
 #include <sys/cdefs.h>
 
 __BEGIN_DECLS
index 8d4819b..389b9ad 100644 (file)
@@ -33,7 +33,7 @@
  *
  *     @(#)stat.h      8.12 (Berkeley) 6/16/95
  * $FreeBSD: src/sys/sys/stat.h,v 1.20 1999/12/29 04:24:47 peter Exp $
- * $DragonFly: src/sys/sys/stat.h,v 1.10 2006/08/13 19:12:04 dillon Exp $
+ * $DragonFly: src/sys/sys/stat.h,v 1.11 2006/12/05 23:14:55 dillon Exp $
  */
 
 #ifndef _SYS_STAT_H_
@@ -197,7 +197,7 @@ struct stat {
 
 #endif /* !_POSIX_SOURCE */
 
-#ifndef _KERNEL
+#if !defined(_KERNEL) || defined(_KERNEL_VIRTUAL)
 #include <sys/cdefs.h>
 
 __BEGIN_DECLS
@@ -217,6 +217,6 @@ int lstat (const char *, struct stat *);
 #endif
 __END_DECLS
 
-#endif /* !_KERNEL */
+#endif
 
 #endif /* !_SYS_STAT_H_ */
index d3898ec..3bd26d9 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)systm.h     8.7 (Berkeley) 3/29/95
  * $FreeBSD: src/sys/sys/systm.h,v 1.111.2.18 2002/12/17 18:04:02 sam Exp $
- * $DragonFly: src/sys/sys/systm.h,v 1.47 2006/12/04 18:03:27 dillon Exp $
+ * $DragonFly: src/sys/sys/systm.h,v 1.48 2006/12/05 23:14:55 dillon Exp $
  */
 
 #ifndef _SYS_SYSTM_H_
@@ -159,6 +159,7 @@ int     vsprintf (char *buf, const char *, __va_list) __printflike(2, 0);
 int    ttyprintf (struct tty *, const char *, ...) __printflike(2, 3);
 int    sscanf (const char *, char const *, ...);
 int    vsscanf (const char *, char const *, __va_list);
+
 long   strtol (const char *, char **, int);
 u_long strtoul (const char *, char **, int);
 quad_t strtoq (const char *, char **, int);
index 3060f26..e86776d 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)types.h     8.6 (Berkeley) 2/19/95
  * $FreeBSD: src/sys/sys/types.h,v 1.40.2.2 2001/04/21 14:53:06 ume Exp $
- * $DragonFly: src/sys/sys/types.h,v 1.16 2006/09/10 01:26:40 dillon Exp $
+ * $DragonFly: src/sys/sys/types.h,v 1.17 2006/12/05 23:14:55 dillon Exp $
  */
 
 #ifndef _SYS_TYPES_H_
@@ -132,9 +132,15 @@ typedef struct cdev        *cdev_t;
 
 #endif
 
+/*
+ * The kernel now uses only udev_t or cdev_t.  Userland uses dev_t.
+ * Virtual kernel builds needs dev_t in order to include userland header
+ * files.
+ */
 #ifdef _KERNEL
 
 #define offsetof(type, field) __offsetof(type, field)
+typedef udev_t         dev_t;          /* device number */
 
 #else