summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/i386/stand/boot/Makefile4
-rw-r--r--sys/arch/i386/stand/libsa/libsa.h4
-rw-r--r--sys/stand/boot/boot.c14
-rw-r--r--sys/stand/boot/boot_loadfile.c119
4 files changed, 16 insertions, 125 deletions
diff --git a/sys/arch/i386/stand/boot/Makefile b/sys/arch/i386/stand/boot/Makefile
index d3b62e77fb3..b1a561acf2c 100644
--- a/sys/arch/i386/stand/boot/Makefile
+++ b/sys/arch/i386/stand/boot/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.30 2003/04/17 03:43:18 drahn Exp $
+# $OpenBSD: Makefile,v 1.31 2003/04/17 12:06:05 mickey Exp $
.include "${.CURDIR}/../Makefile.inc"
@@ -20,7 +20,7 @@ CLEANFILES+= crt0.o
SRCS= srt0.S
.endif
-SRCS+= boot_loadfile.c cmd.c vars.c bootarg.c conf.c
+SRCS+= boot.c cmd.c vars.c bootarg.c conf.c
S =${.CURDIR}/../../../..
SADIR= ${.CURDIR}/..
diff --git a/sys/arch/i386/stand/libsa/libsa.h b/sys/arch/i386/stand/libsa/libsa.h
index fb09f037ff5..e3b54327f80 100644
--- a/sys/arch/i386/stand/libsa/libsa.h
+++ b/sys/arch/i386/stand/libsa/libsa.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: libsa.h,v 1.36 2003/04/17 03:43:19 drahn Exp $ */
+/* $OpenBSD: libsa.h,v 1.37 2003/04/17 12:06:06 mickey Exp $ */
/*
* Copyright (c) 1996-1999 Michael Shalayeff
@@ -36,7 +36,7 @@
#define EXEC_ELF
-#define DEFAULT_KERNEL_ADDRESS 0x100000
+#define DEFAULT_KERNEL_ADDRESS 0
void gateA20(int);
diff --git a/sys/stand/boot/boot.c b/sys/stand/boot/boot.c
index 3b5d045161d..46419374133 100644
--- a/sys/stand/boot/boot.c
+++ b/sys/stand/boot/boot.c
@@ -1,6 +1,7 @@
-/* $OpenBSD: boot.c,v 1.23 2000/12/29 19:24:44 mickey Exp $ */
+/* $OpenBSD: boot.c,v 1.24 2003/04/17 12:06:05 mickey Exp $ */
/*
+ * Copyright (c) 2003 Dale Rahn
* Copyright (c) 1997,1998 Michael Shalayeff
* All rights reserved.
*
@@ -36,8 +37,11 @@
#include <sys/reboot.h>
#include <sys/stat.h>
#include <libsa.h>
+#include <lib/libsa/loadfile.h>
+
#include "cmd.h"
+
static const char *const kernels[] = {
"/bsd",
"/obsd",
@@ -54,6 +58,7 @@ boot(bootdev)
{
register const char *bootfile = kernels[0];
register int i = 0, try = 0, st;
+ u_long marks[MARK_MAX];
machdep();
@@ -76,7 +81,9 @@ boot(bootdev)
st = 0;
printf("booting %s: ", cmd.path);
- exec(cmd.path, cmd.addr, cmd.boothowto);
+ marks[MARK_START] = cmd.addr;
+ if (loadfile(cmd.path, marks, LOAD_ALL) >= 0)
+ break;
if (kernels[++i] == NULL) {
try += 1;
@@ -94,6 +101,9 @@ boot(bootdev)
cmd.timeout = 0;
}
}
+
+ /* exec */
+ run_loadfile(marks, cmd.boothowto);
}
#ifdef _TEST
diff --git a/sys/stand/boot/boot_loadfile.c b/sys/stand/boot/boot_loadfile.c
deleted file mode 100644
index c05a801924e..00000000000
--- a/sys/stand/boot/boot_loadfile.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/* $OpenBSD: boot_loadfile.c,v 1.1 2003/04/17 03:53:53 drahn Exp $ */
-
-/*
- * Copyright (c) 2003 Dale Rahn
- * Copyright (c) 1997,1998 Michael Shalayeff
- * 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Michael Shalayeff.
- * 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
- * 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.
- *
- */
-
-#include <sys/param.h>
-#include <sys/reboot.h>
-#include <sys/stat.h>
-#include <libsa.h>
-#include <lib/libsa/loadfile.h>
-
-#include "cmd.h"
-
-
-static const char *const kernels[] = {
- "/bsd",
- "/obsd",
- "/bsd.old",
- NULL
-};
-
-extern const char version[];
-struct cmd_state cmd;
-
-void
-boot(bootdev)
- dev_t bootdev;
-{
- register const char *bootfile = kernels[0];
- register int i = 0, try = 0, st;
- u_long marks[MARK_MAX];
-
-printf("bootdev %x\n", bootdev);
- machdep();
-
- printf(">> OpenBSD/" MACHINE " BOOT %s\n", version);
-
- devboot(bootdev, cmd.bootdev);
- strncpy(cmd.image, bootfile, sizeof(cmd.image));
- cmd.boothowto = 0;
- cmd.conf = "/etc/boot.conf";
- cmd.addr = (void *)DEFAULT_KERNEL_ADDRESS;
- cmd.timeout = 5;
-
- st = read_conf();
-
- while (1) {
- if (st <= 0) /* no boot.conf, or no boot cmd in there */
- do {
- printf("boot> ");
- } while(!getcmd());
- st = 0;
-
- printf("booting %s: ", cmd.path);
- marks[MARK_START] = 0;
- if (loadfile(cmd.path, marks, LOAD_ALL) >= 0)
- break;
-
- if (kernels[++i] == NULL) {
- try += 1;
- bootfile = kernels[i=0];
- } else
- bootfile = kernels[i];
- strncpy(cmd.image, bootfile, sizeof(cmd.image));
- printf(" failed(%d). will try %s\n", errno, bootfile);
-
- if (try < 2)
- cmd.timeout++;
- else {
- if (cmd.timeout)
- printf("Turning timeout off.\n");
- cmd.timeout = 0;
- }
- }
-
- /* exec */
- run_loadfile(marks, cmd.boothowto);
-
- /* panic?? */
-}
-
-#ifdef _TEST
-int
-main()
-{
- boot(0);
- return 0;
-}
-#endif