diff options
-rw-r--r-- | sys/arch/i386/stand/boot/Makefile | 4 | ||||
-rw-r--r-- | sys/arch/i386/stand/libsa/libsa.h | 4 | ||||
-rw-r--r-- | sys/stand/boot/boot.c | 14 | ||||
-rw-r--r-- | sys/stand/boot/boot_loadfile.c | 119 |
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 |