summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorthorpej <thorpej@NetBSD.org>2001-10-23 03:31:25 +0000
committerthorpej <thorpej@NetBSD.org>2001-10-23 03:31:25 +0000
commit42e835d381c19cb24a4205063d237eec76b089d7 (patch)
tree29a20396383ecce97e50e7f6bba773aae6f44bff /sys
parent506d23317041d1527585c0a65d0dd1834a0c46f1 (diff)
Clean up the NetBSD/ofppc boot loader:
- Garbage collect some cruft that doesn't apply to the ofppc port. - Make our OFW-friendly alloc.c more like the libsa alloc.c - Generally reduce some differences where we can between this boot loader and the NetBSD/macppc boot loader. - Use libsa's loadfile(). - Fix DDB symbol loading -- Add a magic number after the args string so the kernel knows the symbols are there, provide both ssym and esym, and make sure all these values are aligned to a 4-byte boundary. - Add support for MS-DOS file systems.
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/ofppc/stand/ofwboot/Locore.c13
-rw-r--r--sys/arch/ofppc/stand/ofwboot/Makefile24
-rw-r--r--sys/arch/ofppc/stand/ofwboot/alloc.c6
-rw-r--r--sys/arch/ofppc/stand/ofwboot/boot.c354
-rw-r--r--sys/arch/ofppc/stand/ofwboot/ofdev.c27
-rw-r--r--sys/arch/ofppc/stand/ofwboot/version3
6 files changed, 113 insertions, 314 deletions
diff --git a/sys/arch/ofppc/stand/ofwboot/Locore.c b/sys/arch/ofppc/stand/ofwboot/Locore.c
index a63b9c482aa..1a3e5b6e20b 100644
--- a/sys/arch/ofppc/stand/ofwboot/Locore.c
+++ b/sys/arch/ofppc/stand/ofwboot/Locore.c
@@ -1,4 +1,4 @@
-/* $NetBSD: Locore.c,v 1.5 2001/01/17 15:31:04 ws Exp $ */
+/* $NetBSD: Locore.c,v 1.6 2001/10/23 03:31:25 thorpej Exp $ */
/*
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -45,15 +45,6 @@ static void setup __P((void));
static int stack[1024];
-#ifdef XCOFF_GLUE
-asm("
- .text
- .globl _entry
-_entry:
- .long _start,0,0
-");
-#endif
-
asm("
.text
.globl _start
@@ -92,7 +83,9 @@ startup(vpd, res, openfirm, arg, argl)
char *arg;
int argl;
{
+ extern char etext[], _end[], _edata[];
+ memset(_edata, 0, (_end - _edata));
openfirmware_entry = openfirm;
setup();
main();
diff --git a/sys/arch/ofppc/stand/ofwboot/Makefile b/sys/arch/ofppc/stand/ofwboot/Makefile
index 91e6357d726..667ed857545 100644
--- a/sys/arch/ofppc/stand/ofwboot/Makefile
+++ b/sys/arch/ofppc/stand/ofwboot/Makefile
@@ -1,13 +1,18 @@
-# $NetBSD: Makefile,v 1.9 2000/08/07 22:38:11 jdolecek Exp $
+# $NetBSD: Makefile,v 1.10 2001/10/23 03:31:26 thorpej Exp $
S= ${.CURDIR}/../../../..
PROG= ofwboot
-SRCS= Locore.c boot.c ofdev.c net.c netif_of.c alloc.c vers.c
-.PATH: ${S}/arch/ofppc/ofppc
+FILES= ${PROG}.elf
+SRCS= Locore.c alloc.c boot.c ofdev.c net.c netif_of.c vers.c
+CFLAGS+= -msoft-float -Wno-main
+#CPPFLAGS+= -DDEBUG -DNETIF_DEBUG
+CPPFLAGS+= -D_STANDALONE -DSUPPORT_DHCP -I${.CURDIR}
+DBG= -Os -mmultiple
+
SRCS+= ofwmagic.S
.PATH: ${S}/arch/powerpc/powerpc
-#CFLAGS+= -DDEBUG -DNETIF_DEBUG
+
MKMAN= no
STRIPFLAG=
BINMODE= 444
@@ -19,13 +24,11 @@ RELOC= 20000
ENTRY= _start
-CLEANFILES+= vers.c
+CLEANFILES+= vers.c ${PROG}.elf
-CPPFLAGS+= -I${.CURDIR}/../../.. -I${.CURDIR}/../../../.. -I${.OBJDIR}
+CPPFLAGS+= -I. -I${.CURDIR}/../../.. -I${.CURDIR}/../../../..
CPPFLAGS+= -DRELOC=0x${RELOC}
CPPFLAGS+= -DFIRMWORKSBUGS
-CPPFLAGS+= -DPOWERPC_BOOT_AOUT
-CPPFLAGS+= -DPOWERPC_BOOT_ELF
CPPFLAGS+= -DCOMPAT_386BSD_MBRPART
.BEGIN:
@@ -46,7 +49,7 @@ LIBZ= ${ZLIB}
### find out what to use for libsa
SA_AS= library
-SAMISCMAKEFLAGS= SA_USE_CREAD=yes
+SAMISCMAKEFLAGS= SA_USE_CREAD=yes SA_USE_LOADFILE=yes
.include "${S}/lib/libsa/Makefile.inc"
LIBSA= ${SALIB}
@@ -55,7 +58,8 @@ vers.c: version
sh ${S}/conf/newvers_stand.sh ${.CURDIR}/version "ofppc" ${NEWVERSWHAT}
${PROG}: ${OBJS} ${LIBSA} ${LIBZ} ${LIBKERN}
- ${LD} -X -Ttext ${RELOC} -e ${ENTRY} -o ${PROG} \
+ ${LD} -s -N -Ttext ${RELOC} -Bstatic -e ${ENTRY} -o ${PROG}.elf \
${OBJS} ${LIBSA} ${LIBZ} ${LIBKERN}
+ ${OBJCOPY} -O binary ${PROG}.elf ${PROG}
.include <bsd.prog.mk>
diff --git a/sys/arch/ofppc/stand/ofwboot/alloc.c b/sys/arch/ofppc/stand/ofwboot/alloc.c
index cbdcf4e53de..def93e98b45 100644
--- a/sys/arch/ofppc/stand/ofwboot/alloc.c
+++ b/sys/arch/ofppc/stand/ofwboot/alloc.c
@@ -1,4 +1,4 @@
-/* $NetBSD: alloc.c,v 1.3 1998/02/22 07:42:31 mycroft Exp $ */
+/* $NetBSD: alloc.c,v 1.4 2001/10/23 03:31:26 thorpej Exp $ */
/*-
* Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -130,7 +130,9 @@ alloc(size)
unsigned size;
{
struct ml *f, *bestf;
+#ifndef ALLOC_FIRST_FIT
unsigned bestsize = 0xffffffff; /* greater than any real size */
+#endif
char *help;
int failed;
@@ -194,7 +196,9 @@ alloc(size)
/* we take the best fit */
f = bestf;
+#ifndef ALLOC_FIRST_FIT
found:
+#endif
/* remove from freelist */
LIST_REMOVE(f, list);
help = (char *)f;
diff --git a/sys/arch/ofppc/stand/ofwboot/boot.c b/sys/arch/ofppc/stand/ofwboot/boot.c
index e8d5b212e5e..8ea70dfceb3 100644
--- a/sys/arch/ofppc/stand/ofwboot/boot.c
+++ b/sys/arch/ofppc/stand/ofwboot/boot.c
@@ -1,4 +1,4 @@
-/* $NetBSD: boot.c,v 1.10 2001/07/22 14:43:15 wiz Exp $ */
+/* $NetBSD: boot.c,v 1.11 2001/10/23 03:31:26 thorpej Exp $ */
/*-
* Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -87,6 +87,7 @@
#include <sys/boot_flag.h>
#include <lib/libsa/stand.h>
+#include <lib/libsa/loadfile.h>
#include <lib/libkern/libkern.h>
#include <machine/cpu.h>
@@ -94,30 +95,34 @@
#include "ofdev.h"
#include "openfirm.h"
+#ifdef DEBUG
+# define DPRINTF printf
+#else
+# define DPRINTF while (/*CONSTCOND*/0) printf
+#endif
+
char bootdev[128];
char bootfile[128];
int boothowto;
int debug;
-#ifdef POWERPC_BOOT_ELF
-int elf_exec __P((int, Elf_Ehdr *, u_int32_t *, void **));
-#endif
-
-#ifdef POWERPC_BOOT_AOUT
-int aout_exec __P((int, struct exec *, u_int32_t *, void **));
-#endif
+static int ofw_version = 0;
+static char *kernels[] = { "/netbsd", "/netbsd.gz", "/netbsd.ofppc", NULL };
static void
prom2boot(dev)
char *dev;
{
- char *cp;
+ char *cp, *ocp;
- for (cp = dev; *cp != '\0'; cp++)
+ ocp = cp;
+ cp = dev + strlen(dev) - 1;
+ for (; cp >= ocp; cp--) {
if (*cp == ':') {
*cp = '\0';
return;
}
+ }
}
static void
@@ -132,104 +137,51 @@ parseargs(str, howtop)
OF_exit();
*howtop = 0;
+
for (cp = str; *cp; cp++)
if (*cp == ' ' || *cp == '-')
- break;
- if (!*cp)
- return;
+ goto found;
+ return;
+
+ found:
*cp++ = '\0';
while (*cp)
BOOT_FLAG(*cp++, *howtop);
}
static void
-chain(entry, args, esym)
+chain(entry, args, ssym, esym)
void (*entry)();
char *args;
- void *esym;
+ void *ssym, *esym;
{
- extern char end[];
- int l;
+ extern char end[], *cp;
+ u_int l, magic = 0x19730224;
freeall();
/*
- * Stash pointer to end of symbol table after the argument
+ * Stash pointer to start and end of symbol table after the argument
* strings.
*/
l = strlen(args) + 1;
+ l = (l + 3) & ~3; /* align */
+ DPRINTF("magic @ %p\n", args + l);
+ memcpy(args + l, &magic, sizeof(magic));
+ l += sizeof(magic);
+ DPRINTF("ssym @ %p\n", args + l);
+ memcpy(args + l, &ssym, sizeof(ssym));
+ l += sizeof(ssym);
+ DPRINTF("esym @ %p\n", args + l);
memcpy(args + l, &esym, sizeof(esym));
l += sizeof(esym);
+ DPRINTF("args + l -> %p\n", args + l);
OF_chain((void *)RELOC, end - (char *)RELOC, entry, args, l);
panic("chain");
}
-int
-loadfile(fd, args)
- int fd;
- char *args;
-{
- union {
-#ifdef POWERPC_BOOT_AOUT
- struct exec aout;
-#endif
-#ifdef POWERPC_BOOT_ELF
- Elf_Ehdr elf;
-#endif
- } hdr;
- int rval;
- u_int32_t entry;
- void *esym;
-
- rval = 1;
- esym = NULL;
-
- /* Load the header. */
- if (read(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) {
- printf("read header: %s\n", strerror(errno));
- goto err;
- }
-
- /* Determine file type, load kernel. */
-#ifdef POWERPC_BOOT_AOUT
- if (N_BADMAG(hdr.aout) == 0 && N_GETMID(hdr.aout) == MID_POWERPC) {
- rval = aout_exec(fd, &hdr.aout, &entry, &esym);
- } else
-#endif
-#ifdef POWERPC_BOOT_ELF
- if (memcmp(hdr.elf.e_ident, ELFMAG, SELFMAG) == 0 &&
- hdr.elf.e_ident[EI_CLASS] == ELFCLASS) {
- rval = elf_exec(fd, &hdr.elf, &entry, &esym);
- } else
-#endif
- {
- printf("unknown executable format\n");
- }
-
- if (rval)
- goto err;
-
- printf(" start=0x%x\n", entry);
-
- close(fd);
-
- /* XXX this should be replaced w/ a mountroothook. */
- if (floppyboot) {
- printf("Please insert root disk and press ENTER ");
- getchar();
- printf("\n");
- }
-
- chain((void *)entry, args, esym);
- /* NOTREACHED */
-
- err:
- close(fd);
- return (rval);
-}
-
__dead void
_rtt()
{
@@ -237,210 +189,19 @@ _rtt()
OF_exit();
}
-#ifdef POWERPC_BOOT_AOUT
-int
-aout_exec(fd, hdr, entryp, esymp)
- int fd;
- struct exec *hdr;
- u_int32_t *entryp;
- void **esymp;
-{
- int n, *addr;
-
- /* Display the load address (entry point) for a.out. */
- printf("Booting %s @ 0x%lx\n", opened_name, hdr->a_entry);
- addr = (void *)(hdr->a_entry);
-
- /*
- * Determine memory needed for kernel and allocate it from
- * the firmware.
- */
- n = hdr->a_text + hdr->a_data + hdr->a_bss + hdr->a_syms + sizeof(int);
-
- /* Load text. */
- lseek(fd, N_TXTOFF(*hdr), SEEK_SET);
- printf("%lu", hdr->a_text);
- if (read(fd, addr, hdr->a_text) != hdr->a_text) {
- printf("read text: %s\n", strerror(errno));
- return (1);
- }
- __syncicache((void *)addr, hdr->a_text);
-
- /* Load data. */
- printf("+%lu", hdr->a_data);
- if (read(fd, (char *)addr + hdr->a_text, hdr->a_data) != hdr->a_data) {
- printf("read data: %s\n", strerror(errno));
- return (1);
- }
-
- /* Zero BSS. */
- printf("+%lu", hdr->a_bss);
- memset((char *)addr + hdr->a_text + hdr->a_data, 0, hdr->a_bss);
-
- /* Symbols. */
- *esymp = addr;
- addr = (int *)((char *)addr + hdr->a_text + hdr->a_data + hdr->a_bss);
- *addr++ = hdr->a_syms;
- if (hdr->a_syms) {
- printf(" [%lu", hdr->a_syms);
- if (read(fd, addr, hdr->a_syms) != hdr->a_syms) {
- printf("read symbols: %s\n", strerror(errno));
- return (1);
- }
- addr = (int *)((char *)addr + hdr->a_syms);
- if (read(fd, &n, sizeof(int)) != sizeof(int)) {
- printf("read symbols: %s\n", strerror(errno));
- return (1);
- }
- *addr++ = n;
- if (read(fd, addr, n - sizeof(int)) != n - sizeof(int)) {
- printf("read symbols: %s\n", strerror(errno));
- return (1);
- }
- printf("+%d]", n - sizeof(int));
- *esymp = addr + (n - sizeof(int));
- }
-
- *entryp = hdr->a_entry;
- return (0);
-}
-#endif /* POWERPC_BOOT_AOUT */
-
-#ifdef POWERPC_BOOT_ELF
-int
-elf_exec(fd, elf, entryp, esymp)
- int fd;
- Elf_Ehdr *elf;
- u_int32_t *entryp;
- void **esymp;
-{
- Elf32_Shdr *shp;
- Elf32_Off off;
- void *addr;
- size_t size;
- int i, first = 1;
- int n;
-
- /*
- * Don't display load address for ELF; it's encoded in
- * each section.
- */
- printf("Booting %s\n", opened_name);
-
- for (i = 0; i < elf->e_phnum; i++) {
- Elf_Phdr phdr;
- (void)lseek(fd, elf->e_phoff + sizeof(phdr) * i, SEEK_SET);
- if (read(fd, (void *)&phdr, sizeof(phdr)) != sizeof(phdr)) {
- printf("read phdr: %s\n", strerror(errno));
- return (1);
- }
- if (phdr.p_type != PT_LOAD ||
- (phdr.p_flags & (PF_W|PF_X)) == 0)
- continue;
-
- /* Read in segment. */
- printf("%s%lu@0x%lx", first ? "" : "+", phdr.p_filesz,
- (u_long)phdr.p_vaddr);
- (void)lseek(fd, phdr.p_offset, SEEK_SET);
- if (read(fd, (void *)phdr.p_vaddr, phdr.p_filesz) !=
- phdr.p_filesz) {
- printf("read segment: %s\n", strerror(errno));
- return (1);
- }
- __syncicache((void *)phdr.p_vaddr, phdr.p_filesz);
-
- /* Zero BSS. */
- if (phdr.p_filesz < phdr.p_memsz) {
- printf("+%lu@0x%lx", phdr.p_memsz - phdr.p_filesz,
- (u_long)(phdr.p_vaddr + phdr.p_filesz));
- memset((void *)phdr.p_vaddr + phdr.p_filesz, 0,
- phdr.p_memsz - phdr.p_filesz);
- }
- first = 0;
- }
-
- printf(" \n");
-
-#if 0 /* I want to rethink this... --thorpej@netbsd.org */
- /*
- * Compute the size of the symbol table.
- */
- size = sizeof(Elf_Ehdr) + (elf->e_shnum * sizeof(Elf32_Shdr));
- shp = addr = alloc(elf->e_shnum * sizeof(Elf32_Shdr));
- (void)lseek(fd, elf->e_shoff, SEEK_SET);
- if (read(fd, addr, elf->e_shnum * sizeof(Elf32_Shdr)) !=
- elf->e_shnum * sizeof(Elf32_Shdr)) {
- printf("read section headers: %s\n", strerror(errno));
- return (1);
- }
- for (i = 0; i < elf->e_shnum; i++, shp++) {
- if (shp->sh_type == SHT_NULL)
- continue;
- if (shp->sh_type != SHT_SYMTAB
- && shp->sh_type != SHT_STRTAB) {
- shp->sh_offset = 0;
- shp->sh_type = SHT_NOBITS;
- continue;
- }
- size += shp->sh_size;
- }
- shp = addr;
-
- panic("no space for symbol table");
-
- /*
- * Copy the headers.
- */
- elf->e_phoff = 0;
- elf->e_shoff = sizeof(Elf_Ehdr);
- elf->e_phentsize = 0;
- elf->e_phnum = 0;
- memcpy(addr, elf, sizeof(Elf_Ehdr));
- memcpy(addr + sizeof(Elf_Ehdr), shp, elf->e_shnum * sizeof(Elf32_Shdr));
- free(shp, elf->e_shnum * sizeof(Elf32_Shdr));
- *ssymp = addr;
-
- /*
- * Now load the symbol sections themselves.
- */
- shp = addr + sizeof(Elf_Ehdr);
- addr += sizeof(Elf_Ehdr) + (elf->e_shnum * sizeof(Elf32_Shdr));
- off = sizeof(Elf_Ehdr) + (elf->e_shnum * sizeof(Elf32_Shdr));
- for (first = 1, i = 0; i < elf->e_shnum; i++, shp++) {
- if (shp->sh_type == SHT_SYMTAB
- || shp->sh_type == SHT_STRTAB) {
- if (first)
- printf("symbols @ 0x%lx ", (u_long)addr);
- printf("%s%d", first ? "" : "+", shp->sh_size);
- (void)lseek(fd, shp->sh_offset, SEEK_SET);
- if (read(fd, addr, shp->sh_size) != shp->sh_size) {
- printf("read symbols: %s\n", strerror(errno));
- return (1);
- }
- addr += shp->sh_size;
- shp->sh_offset = off;
- off += shp->sh_size;
- first = 0;
- }
- }
- *esymp = addr;
-#endif /* 0 */
-
- *entryp = elf->e_entry;
- return (0);
-}
-#endif /* POWERPC_BOOT_ELF */
-
void
main()
{
extern char bootprog_name[], bootprog_rev[],
- bootprog_maker[], bootprog_date[];
- int chosen;
+ bootprog_maker[], bootprog_date[];
+ int chosen, options;
char bootline[512]; /* Should check size? */
char *cp;
- int fd;
-
+ u_long marks[MARK_MAX];
+ u_int32_t entry;
+ void *ssym, *esym;
+
+ printf("\n");
printf(">> %s, Revision %s\n", bootprog_name, bootprog_rev);
printf(">> (%s, %s)\n", bootprog_maker, bootprog_date);
@@ -456,19 +217,34 @@ main()
prom2boot(bootdev);
parseargs(bootline, &boothowto);
+ DPRINTF("bootline=%s\n", bootline);
for (;;) {
+ int i;
+
if (boothowto & RB_ASKNAME) {
printf("Boot: ");
gets(bootline);
parseargs(bootline, &boothowto);
}
- if ((fd = open(bootline, 0)) >= 0)
- break;
- if (errno)
- printf("open %s: %s\n", opened_name, strerror(errno));
+
+ if (bootline[0]) {
+ kernels[0] = bootline;
+ kernels[1] = NULL;
+ }
+
+ for (i = 0; kernels[i]; i++) {
+ DPRINTF("Trying %s\n", kernels[i]);
+
+ marks[MARK_START] = 0;
+ if (loadfile(kernels[i], marks, LOAD_KERNEL) >= 0)
+ goto loaded;
+ }
+
boothowto |= RB_ASKNAME;
}
+ loaded:
+
#ifdef __notyet__
OF_setprop(chosen, "bootpath", opened_name, strlen(opened_name) + 1);
cp = bootline;
@@ -495,8 +271,14 @@ main()
#ifdef __notyet__
OF_setprop(chosen, "bootargs", bootline, strlen(bootline) + 1);
#endif
- /* XXX void, for now */
- (void)loadfile(fd, bootline);
+
+ entry = marks[MARK_ENTRY];
+ ssym = (void *)marks[MARK_SYM];
+ esym = (void *)marks[MARK_END];
+
+ printf(" start=0x%x\n", entry);
+ __syncicache((void *)entry, (u_int)ssym - (u_int)entry);
+ chain((void *)entry, bootline, ssym, esym);
OF_exit();
}
diff --git a/sys/arch/ofppc/stand/ofwboot/ofdev.c b/sys/arch/ofppc/stand/ofwboot/ofdev.c
index f892dbad308..b5bd0c9fa09 100644
--- a/sys/arch/ofppc/stand/ofwboot/ofdev.c
+++ b/sys/arch/ofppc/stand/ofwboot/ofdev.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ofdev.c,v 1.5 2001/07/22 14:43:15 wiz Exp $ */
+/* $NetBSD: ofdev.c,v 1.6 2001/10/23 03:31:26 thorpej Exp $ */
/*
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -43,12 +43,19 @@
#include <lib/libsa/stand.h>
#include <lib/libsa/ufs.h>
#include <lib/libsa/cd9660.h>
+#include <lib/libsa/dosfs.h>
#include <lib/libsa/nfs.h>
#include "ofdev.h"
extern char bootdev[];
+#ifdef DEBUG
+# define DPRINTF printf
+#else
+# define DPRINTF while (0) printf
+#endif
+
static char *
filename(str, ppart)
char *str;
@@ -154,6 +161,10 @@ static struct fs_ops file_system_cd9660 = {
cd9660_open, cd9660_close, cd9660_read, cd9660_write, cd9660_seek,
cd9660_stat
};
+static struct fs_ops file_system_dosfs = {
+ dosfs_open, dosfs_close, dosfs_read, dosfs_write, dosfs_seek,
+ dosfs_stat
+};
static struct fs_ops file_system_nfs = {
nfs_open, nfs_close, nfs_read, nfs_write, nfs_seek, nfs_stat
};
@@ -265,6 +276,7 @@ devopen(of, name, file)
strcpy(fname, name);
cp = filename(fname, &partition);
if (cp) {
+ DPRINTF("filename=%s\n", cp);
strcpy(buf, cp);
*cp = 0;
}
@@ -272,6 +284,7 @@ devopen(of, name, file)
strcpy(buf, DEFAULT_KERNEL);
if (!*fname)
strcpy(fname, bootdev);
+ DPRINTF("fname=%s\n", fname);
strcpy(opened_name, fname);
if (partition) {
cp = opened_name + strlen(opened_name);
@@ -283,8 +296,10 @@ devopen(of, name, file)
strcat(opened_name, "/");
strcat(opened_name, buf);
*file = opened_name + strlen(fname) + 1;
- if ((handle = OF_finddevice(fname)) == -1)
+ if ((handle = OF_finddevice(fname)) == -1) {
+ DPRINTF("OF_finddevice(\"%s\") failed\n", fname);
return ENOENT;
+ }
if (OF_getprop(handle, "name", buf, sizeof buf) < 0)
return ENXIO;
floppyboot = !strcmp(buf, "floppy");
@@ -324,9 +339,9 @@ devopen(of, name, file)
of->f_dev = devsw;
of->f_devdata = &ofdev;
- memcpy(file_system, &file_system_ufs, sizeof file_system[0]);
- memcpy(file_system + 1, &file_system_cd9660,
- sizeof file_system[0]);
+ file_system[0] = file_system_ufs;
+ file_system[1] = file_system_cd9660;
+ file_system[1] = file_system_dosfs;
nfsys = 2;
return 0;
}
@@ -334,7 +349,7 @@ devopen(of, name, file)
ofdev.type = OFDEV_NET;
of->f_dev = devsw;
of->f_devdata = &ofdev;
- memcpy(file_system, &file_system_nfs, sizeof file_system[0]);
+ file_system[0] = file_system_nfs;
nfsys = 1;
if (error = net_open(&ofdev))
goto bad;
diff --git a/sys/arch/ofppc/stand/ofwboot/version b/sys/arch/ofppc/stand/ofwboot/version
index 0e0850cea46..335193c554d 100644
--- a/sys/arch/ofppc/stand/ofwboot/version
+++ b/sys/arch/ofppc/stand/ofwboot/version
@@ -1,6 +1,7 @@
-$NetBSD: version,v 1.4 2000/09/24 12:32:38 jdolecek Exp $
+$NetBSD: version,v 1.5 2001/10/23 03:31:26 thorpej Exp $
1.1: Boot program for OpenFirmware; initial revision
1.2: Boot program rearrangement
1.3: Added support for loading ELF kernels
1.4: Support verbose/quiet boot.
+1.5: Support for proper DDB symbol loading and MS-DOS file systems