diff options
author | msmith <msmith@FreeBSD.org> | 1998-08-21 03:17:42 +0000 |
---|---|---|
committer | msmith <msmith@FreeBSD.org> | 1998-08-21 03:17:42 +0000 |
commit | 8adeb775c43d4c2ae76cce40837a3953af6abc83 (patch) | |
tree | ec778e5f3903abe2dbb59959c0fd8398c99c145b /sys/boot/alpha | |
parent | 335c4be5b17816baac6b70d4d0b3132925de858d (diff) | |
download | FreeBSD-src-8adeb775c43d4c2ae76cce40837a3953af6abc83.zip FreeBSD-src-8adeb775c43d4c2ae76cce40837a3953af6abc83.tar.gz |
This is the new unified bootstrap, sometimes known previously as the
'three-stage' bootstrap.
There are a number of caveats with the code in its current state:
- The i386 bootstrap only supports booting from a floppy.
- The kernel and kld do not yet know how to deal with the extended
information and module summary passed in.
- PnP-based autodetection and demand loading of modules is not implemented.
- i386 ELF kernel loading is not ready yet.
- The i386 bootstrap is loaded via an ugly blockmap.
On the alpha, both net- and disk-booting (SRM console machines only) is
supported. No blockmaps are used by this code.
Obtained from: Parts from the NetBSD/i386 standalone bootstrap.
Diffstat (limited to 'sys/boot/alpha')
42 files changed, 6117 insertions, 0 deletions
diff --git a/sys/boot/alpha/Makefile b/sys/boot/alpha/Makefile new file mode 100644 index 0000000..81dec03 --- /dev/null +++ b/sys/boot/alpha/Makefile @@ -0,0 +1,6 @@ +# $Id$ + +SUBDIR= libalpha +SUBDIR+= boot1 boot2 netboot + +.include <bsd.subdir.mk> diff --git a/sys/boot/alpha/Makefile.inc b/sys/boot/alpha/Makefile.inc new file mode 100644 index 0000000..f041076 --- /dev/null +++ b/sys/boot/alpha/Makefile.inc @@ -0,0 +1,6 @@ +# Options used when building app-specific libalpha components +PRIMARY_LOAD_ADDRESS= 20000000 # "Region 1 start" +SECONDARY_LOAD_ADDRESS= 2000c000 # "Region 1 start" + 48k +HEAP_LIMIT= 20040000 # "Region 1 start" + 256k + +BINDIR= /usr/mdec diff --git a/sys/boot/alpha/boot1/Makefile b/sys/boot/alpha/boot1/Makefile new file mode 100644 index 0000000..f97f5fb --- /dev/null +++ b/sys/boot/alpha/boot1/Makefile @@ -0,0 +1,47 @@ +# $NetBSD: Makefile,v 1.15 1998/03/28 00:21:35 thorpej Exp $ + +.include <../Makefile.inc> + +PROG = boot1 + +.PATH: ${.CURDIR}/../../common +.PATH: ${.CURDIR}/../libalpha + +SRCS= start.S boot1.c sys.c +CFLAGS+= -mno-fp-regs +CFLAGS+= -I${.CURDIR}/../../common -I${.CURDIR} +LIBSTANDDIR= /home/dfr/FreeBSD/alpha/src/lib/libstand +LIBSTAND= ${LIBSTANDDIR}/obj/libstand.a +CFLAGS+= -I${LIBSTANDDIR} +LIBALPHA= ${.CURDIR}/../libalpha/obj/libalpha.a +CFLAGS+= -I${.CURDIR}/.. +CFLAGS+= -DSECONDARY_LOAD_ADDRESS=0x${SECONDARY_LOAD_ADDRESS} -DMINIMAL +NOMAN=1 +STRIP= + +BOOT_RELOC = ${PRIMARY_LOAD_ADDRESS} + +CLEANFILES+= ${PROG}.sym ${PROG}.nosym ${PROG}.list + +all: ${PROG} + +afterinstall: + ln -sf boot1 /usr/mdec/sdboot + +${PROG}.nosym: ${PROG}.sym + cp ${PROG}.sym ${PROG}.nosym + strip ${PROG}.nosym + +${PROG}: ${PROG}.nosym + objcopy -O binary ${PROG}.nosym ${PROG} + +.include <bsd.prog.mk> + +start.o: ${.CURDIR}/../libalpha/start.S + ${CC} -c -DPRIMARY_BOOTBLOCK $< + +${PROG}.sym: ${OBJS} ${LIBKERN} + ${LD} -M -Ttext ${BOOT_RELOC} -N -e start -o ${PROG}.sym ${OBJS} \ + ${LIBSTAND} ${LIBALPHA} ${LIBSTAND} > ${.OBJDIR}/${PROG}.list + size ${PROG}.sym + diff --git a/sys/boot/alpha/boot1/boot1.c b/sys/boot/alpha/boot1/boot1.c new file mode 100644 index 0000000..e52987a --- /dev/null +++ b/sys/boot/alpha/boot1/boot1.c @@ -0,0 +1,188 @@ +/* + * $Id$ + * From $NetBSD: bootxx.c,v 1.4 1997/09/06 14:08:29 drochner Exp $ + */ + +/* + * Copyright (c) 1995 Carnegie-Mellon University. + * All rights reserved. + * + * Author: Chris G. Demetriou + * + * Permission to use, copy, modify and distribute this software and + * its documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND + * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ + +#include <sys/param.h> + +#include <machine/prom.h> + +#define DEBUGxx + +extern end[]; +int errno; + +char *heap = (char*) end; + +void +putchar(int c) +{ + if (c == '\n') + prom_putchar('\r'); + prom_putchar(c); +} + +void +puts(const char *s) +{ + while (*s) + putchar(*s++); +} + +void * +malloc(size_t size) +{ + char *p = heap; + size = (size + 7) & ~7; + heap += size; + return p; +} + +void +free(void * p) +{ +} + +void +panic(const char *message, ...) +{ + puts(message); + puts("\r\n"); + halt(); +} + +int prom_fd = 0; + +int +devopen() +{ + prom_return_t ret; + char devname[64]; + + if (prom_fd) + return; + + ret.bits = prom_getenv(PROM_E_BOOTED_DEV, devname, sizeof devname); + + ret.bits = prom_open(devname, ret.u.retval + 1); + if (ret.u.status) + panic("devopen: open failed\n"); + + prom_fd = ret.u.retval; + + /* XXX read disklabel and setup partition offset */ + + return 0; +} + +#ifdef DEBUG + +void +puthex(u_long v) +{ + int digit; + char hex[] = "0123456789abcdef"; + + if (!v) { + puts("0"); + return; + } + + for (digit = 0; v >= (0x10L << digit); digit += 4) + ; + + for (; digit >= 0; digit -= 4) + putchar(hex[(v >> digit) & 0xf]); +} + +#endif + +void +devread(char *buf, int block, size_t size) +{ +#ifdef DEBUG + puts("devread("); + puthex((u_long)buf); + puts(","); + puthex(block); + puts(","); + puthex(size); + puts(")\n"); +#endif + + prom_read(prom_fd, size, buf, block); +} + +void +devclose() +{ + if (prom_fd) { + prom_close(prom_fd); + prom_fd = 0; + } +} + +void +loadfile(char *name, char *addr) +{ + int n; + + if (openrd(name)) { + puts("Can't open file "); + puts(name); + puts("\n"); + halt(); + } + + do { + n = read(addr, 1024); + addr += n; + twiddle(); + } while (n > 0); + + devclose(); +} + +void +main() +{ + char *loadaddr = (char*) SECONDARY_LOAD_ADDRESS; + char *p; + void (*entry) __P((void)); + + int i; + + init_prom_calls(); + + loadfile("/boot/boot2", loadaddr); + + entry = (void (*)())loadaddr; + (*entry)(); +} diff --git a/sys/boot/alpha/boot1/sys.c b/sys/boot/alpha/boot1/sys.c new file mode 100644 index 0000000..1c0d912 --- /dev/null +++ b/sys/boot/alpha/boot1/sys.c @@ -0,0 +1,187 @@ +/* + * Mach Operating System + * Copyright (c) 1992, 1991 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + * + * from: Mach, Revision 2.2 92/04/04 11:36:34 rpd + * fromL Id: sys.c,v 1.21 1997/06/09 05:10:56 bde Exp + * $Id$ + */ + +#include <sys/param.h> +#include <sys/time.h> + +#include <ufs/ffs/fs.h> +#include <ufs/ufs/quota.h> +#include <ufs/ufs/inode.h> + +#include <sys/dirent.h> + +struct fs *fs; +struct inode inode; +int boff = 0; + +#if 0 +/* #define BUFSIZE 4096 */ +#define BUFSIZE MAXBSIZE + +static char buf[BUFSIZE], fsbuf[SBSIZE], iobuf[MAXBSIZE]; +#endif + +#define BUFSIZE 8192 +#define MAPBUFSIZE BUFSIZE +static char buf[BUFSIZE], fsbuf[BUFSIZE], iobuf[BUFSIZE]; + +static char mapbuf[MAPBUFSIZE]; +static int mapblock; + +int poff; + +#ifdef RAWBOOT +#define STARTBYTE 8192 /* Where on the media the kernel starts */ +#endif + +static int block_map(int file_block); +static int find(char *path); + +int +read(char *buffer, int count) +{ + int logno, off, size; + int cnt2, bnum2; + struct fs *fs_copy; + int n = 0; + + if (poff + count > inode.i_size) + count = inode.i_size - poff; + while (count > 0 && poff < inode.i_size) { + fs_copy = fs; + off = blkoff(fs_copy, poff); + logno = lblkno(fs_copy, poff); + cnt2 = size = blksize(fs_copy, &inode, logno); + bnum2 = fsbtodb(fs_copy, block_map(logno)) + boff; + if ( (!off) && (size <= count)) { + devread(buffer, bnum2, cnt2); + } else { + size -= off; + if (size > count) + size = count; + devread(iobuf, bnum2, cnt2); + bcopy(iobuf+off, buffer, size); + } + buffer += size; + count -= size; + poff += size; + n += size; + } + return n; +} + +static int +find(char *path) +{ + char *rest, ch; + int block, off, loc, ino = ROOTINO; + struct dirent *dp; + char list_only; + + list_only = (path[0] == '?' && path[1] == '\0'); + loop: + devread(iobuf, fsbtodb(fs, ino_to_fsba(fs, ino)) + boff, fs->fs_bsize); + bcopy((void *)&((struct dinode *)iobuf)[ino % fs->fs_inopb], + (void *)&inode.i_din, + sizeof (struct dinode)); + if (!*path) + return 1; + while (*path == '/') + path++; + if (!inode.i_size || ((inode.i_mode&IFMT) != IFDIR)) + return 0; + for (rest = path; (ch = *rest) && ch != '/'; rest++) ; + *rest = 0; + loc = 0; + do { + if (loc >= inode.i_size) { + if (list_only) { + putchar('\n'); + return -1; + } else { + return 0; + } + } + if (!(off = blkoff(fs, loc))) { + block = lblkno(fs, loc); + devread(iobuf, fsbtodb(fs, block_map(block)) + boff, + blksize(fs, &inode, block)); + } + dp = (struct dirent *)(iobuf + off); + loc += dp->d_reclen; + if (dp->d_fileno && list_only) { + puts(dp->d_name); + putchar(' '); + } + } while (!dp->d_fileno || strcmp(path, dp->d_name)); + ino = dp->d_fileno; + *(path = rest) = ch; + goto loop; +} + + +static int +block_map(int file_block) +{ + int bnum; + if (file_block < NDADDR) + return(inode.i_db[file_block]); + if ((bnum=fsbtodb(fs, inode.i_ib[0])+boff) != mapblock) { + devread(mapbuf, bnum, fs->fs_bsize); + mapblock = bnum; + } + return (((int *)mapbuf)[(file_block - NDADDR) % NINDIR(fs)]); +} + + +int +openrd(char *name) +{ + int ret; + + if (devopen()) + return 1; + + /* + * Load Filesystem info (mount the device). + */ + devread((char *)(fs = (struct fs *)fsbuf), SBLOCK + boff, SBSIZE); + + /* + * Find the actual FILE on the mounted device. + */ + ret = find(name); + if (ret == 0) + return 1; + if (ret < 0) + return -1; + poff = 0; + return 0; +} diff --git a/sys/boot/alpha/boot2/Makefile b/sys/boot/alpha/boot2/Makefile new file mode 100644 index 0000000..1d833b1 --- /dev/null +++ b/sys/boot/alpha/boot2/Makefile @@ -0,0 +1,69 @@ +# $NetBSD: Makefile,v 1.12 1998/02/19 14:18:36 drochner Exp $ + +BASE= boot2 +PROG= ${BASE} +NOMAN= +NEWVERSWHAT= "SRM disk boot" + +.PATH: ${.CURDIR}/../common + +# i386-specific bootstrap sources +SRCS+= main.c conf.c + +# Always add MI sources +.PATH: ${.CURDIR}/../../common +.include <${.CURDIR}/../../common/Makefile.inc> +CFLAGS+= -mno-fp-regs +CFLAGS+= -I${.CURDIR}/../../common -I${.CURDIR} +# Verbose ls causes extra heap usage +CFLAGS+= -DVERBOSE_LS + +CLEANFILES+= vers.c vers.o gensetdefs.o gensetdefs setdef0.o setdef1.o \ + setdefs.h start.o +CLEANFILES+= ${BASE} ${BASE}.sym ${BASE}.list + +CFLAGS+= -Wall + +# XXX fix to use "standard" versions +LIBSTANDDIR= /home/dfr/FreeBSD/alpha/src/lib/libstand +LIBSTAND= ${LIBSTANDDIR}/obj/libstand.a +CFLAGS+= -I${LIBSTANDDIR} +LIBALPHA= ${.CURDIR}/../libalpha/obj/libalpha.a +CFLAGS+= -I${.CURDIR}/.. +CRT= start.o +STRIP= + +all: ${BASE} + +vers.o: ${.CURDIR}/newvers.sh ${.CURDIR}/Makefile + sh ${.CURDIR}/newvers.sh ${.CURDIR}/version ${NEWVERSWHAT} + ${CC} -c vers.c + +${BASE}: ${BASE}.sym + objcopy -O binary ${BASE}.sym ${BASE} + +${BASE}.sym: ${OBJS} ${LIBSTAND} ${LIBALPHA} ${CRT} vers.o setdef0.o setdef1.o + ${LD} -o ${BASE}.sym -M -e start -N -Ttext ${SECONDARY_LOAD_ADDRESS} \ + ${CRT} setdef0.o ${OBJS} setdef1.o \ + vers.o ${LIBSTAND} ${LIBALPHA} ${LIBSTAND} >${.OBJDIR}/${BASE}.list + +# Other fragments still to be brought in from ../Makfile.booters? +start.o: ${.CURDIR}/../libalpha/start.S + ${CC} -c $< + +setdef0.o: setdefs.h + +setdef1.o: setdefs.h + +.include <bsd.prog.mk> + +setdefs.h: gensetdefs ${OBJS} + @echo Generating linker sets + @./gensetdefs ${OBJS} >setdefs.h + +gensetdefs: gensetdefs.o + ${CC} -static gensetdefs.o -o $@ + +gensetdefs.o: gensetdefs.c + ${CC} -c $< + diff --git a/sys/boot/alpha/boot2/boot2.list b/sys/boot/alpha/boot2/boot2.list new file mode 100644 index 0000000..00e2eaa --- /dev/null +++ b/sys/boot/alpha/boot2/boot2.list @@ -0,0 +1,1000 @@ +Archive member included because of file (symbol) + +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) + conf.o (ufs_fsops) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(stat.o) + ls.o (stat) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__reml.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) (__reml) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__remlu.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) (__remlu) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divl.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) (__divl) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divlu.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) (__divlu) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncpy.o) + boot.o (strncpy) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcat.o) + misc.o (strcat) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + commands.o (pager_open) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + ls.o (optind) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + commands.o (environ) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + boot.o (strtol) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strchr.o) + boot.o (strchr) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + commands.o (strerror) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strdup.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) (strdup) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(gets.o) + interp.o (ngets) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + conf.o (zipfs_fsops) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) + ls.o (read) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) (files) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(close.o) + interp.o (close) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(fstat.o) + ls.o (fstat) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nullfs.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) (null_write) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) (inflateEnd) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) (inflate_blocks_reset) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) (adler32) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strrchr.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) (strrchr) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcmp.o) + console.o (strcmp) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) (twiddle) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) (zcalloc) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) (inflate_trees_bits) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) (inflate_codes_new) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + main.o (setheap) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) (inflate_fast) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) (inflate_mask) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcopy.o) + interp.o (bcopy) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + interp.o (errno) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bzero.o) + start.o (bzero) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + main.o (printf) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__remqu.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) (__remqu) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divqu.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) (__divqu) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strlen.o) + boot.o (strlen) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcd.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) (hex2ascii_data) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(srmdisk.o) + conf.o (srmdisk) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(devicename.o) + main.o (alpha_getdev) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(alpha_module.o) + main.o (alpha_boot) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(time.o) + boot.o (time) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(delay.o) + main.o (delay) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(reboot.o) + main.o (reboot) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) + conf.o (alpha_elf) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(OSFpal.o) + main.o (OSFpal) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(getsecs.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(time.o) (getsecs) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(pal.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(delay.o) (alpha_rpcc) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom_swpal.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(OSFpal.o) (switch_palcode) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom.o) + conf.o (promconsole) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom_disp.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom.o) (prom_dispatch_v) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(lseek.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) (lseek) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(dev.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(srmdisk.o) (noioctl) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(closeall.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) (closeall) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncmp.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(devicename.o) (strncmp) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcpy.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(devicename.o) (strcpy) + +Allocating common symbols +Common symbol size file + +domainname 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +nameip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +hostnamelen 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +command_errmsg 0x8 commands.o +errno 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +ffp_save 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) +swapip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +rootip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +optarg 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) +myip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +hostname 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +archsw 0x18 main.o +ssym 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) +console 0x4 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom.o) +command_errbuf 0x100 commands.o +currdev 0x18 main.o +bootfile 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +ptbr_save 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) +gateip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +files 0x180 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) +ifname 0x10 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +domainnamelen 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +optreset 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) +optopt 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) +prom_dispatch_v 0x10 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom_disp.o) +esym 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) + +Memory Configuration + +Name Origin Length +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +Address of section .text set to 0x2000c000 +LOAD start.o +LOAD setdef0.o +LOAD main.o +LOAD conf.o +LOAD boot.o +LOAD commands.o +LOAD console.o +LOAD devopen.o +LOAD interp.o +LOAD ls.o +LOAD misc.o +LOAD module.o +LOAD panic.o +LOAD setdef1.o +LOAD vers.o +LOAD /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a +LOAD /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a +LOAD /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a + 0x00000001200000b0 .=(0x120000000+SIZEOF_HEADERS) + +.interp + *(.interp) + +.hash + *(.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.text + *(.rel.text) + *(.rel.gnu.linkonce.t*) + +.rela.text + *(.rela.text) + *(.rela.gnu.linkonce.t*) + +.rel.data + *(.rel.data) + *(.rel.gnu.linkonce.d*) + +.rela.data 0x00000001200000b0 0x0 + *(.rela.data) + *(.rela.gnu.linkonce.d*) + +.rela.set.Xcommand_set + 0x00000001200000b0 0x0 + +.rel.rodata + *(.rel.rodata) + *(.rel.gnu.linkonce.r*) + +.rela.rodata + *(.rela.rodata) + *(.rela.gnu.linkonce.r*) + +.rel.got + *(.rel.got) + +.rela.got + *(.rela.got) + +.rel.ctors + *(.rel.ctors) + +.rela.ctors + *(.rela.ctors) + +.rel.dtors + *(.rel.dtors) + +.rela.dtors + *(.rela.dtors) + +.rel.init + *(.rel.init) + +.rela.init + *(.rela.init) + +.rel.fini + *(.rel.fini) + +.rela.fini + *(.rela.fini) + +.rel.bss + *(.rel.bss) + +.rela.bss + *(.rela.bss) + +.rel.plt + *(.rel.plt) + +.rela.plt + *(.rela.plt) + +.init + *(.init) + +.text 0x000000002000c000 0xe4c0 + *(.text) + .text 0x000000002000c000 0x50 start.o + 0x000000002000c044 __main + 0x000000002000c040 _rtt + 0x000000002000c048 cpu_number + 0x000000002000c040 halt + 0x000000002000c000 start + *fill* 0x000000002000c050 0x10 1207895071 + .text 0x000000002000c060 0x3e0 main.o + 0x000000002000c060 memsize + 0x000000002000c0c8 main + .text 0x000000002000c440 0x580 boot.o + 0x000000002000c6e8 autoboot + .text 0x000000002000c9c0 0x3e0 commands.o + .text 0x000000002000cda0 0x480 console.o + 0x000000002000cff8 putchar + 0x000000002000cda0 cons_probe + 0x000000002000cf68 ischar + 0x000000002000cea8 getchar + .text 0x000000002000d220 0xf0 devopen.o + 0x000000002000d2d0 devclose + 0x000000002000d220 devopen + *fill* 0x000000002000d310 0x10 1207895071 + .text 0x000000002000d320 0x5c0 interp.o + 0x000000002000d5e8 interact + 0x000000002000d700 source + .text 0x000000002000d8e0 0x480 ls.o + .text 0x000000002000dd60 0x140 misc.o + 0x000000002000dd60 unargv + .text 0x000000002000dea0 0x3a0 module.o + 0x000000002000e178 mod_findmodule + 0x000000002000dfd0 mod_load + .text 0x000000002000e240 0xf0 panic.o + 0x000000002000e240 panic + *fill* 0x000000002000e330 0x10 1207895071 + .text 0x000000002000e340 0xf80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) + .text 0x000000002000f2c0 0x90 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(stat.o) + 0x000000002000f2c0 stat + .text 0x000000002000f350 0x130 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__reml.o) + 0x000000002000f350 __reml + .text 0x000000002000f480 0xec /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__remlu.o) + 0x000000002000f480 __remlu + .text 0x000000002000f56c 0x128 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divl.o) + 0x000000002000f56c __divl + .text 0x000000002000f694 0xe4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divlu.o) + 0x000000002000f694 __divlu + *fill* 0x000000002000f778 0x8 1207895071 + .text 0x000000002000f780 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncpy.o) + 0x000000002000f780 strncpy + .text 0x000000002000f820 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcat.o) + 0x000000002000f820 strcat + .text 0x000000002000f8a0 0x380 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + 0x000000002000f948 pager_output + 0x000000002000f930 pager_close + 0x000000002000faf8 pager_file + 0x000000002000f8a0 pager_open + .text 0x000000002000fc20 0x310 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + 0x000000002000fc20 getopt + *fill* 0x000000002000ff30 0x10 1207895071 + .text 0x000000002000ff40 0x4a0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + 0x00000000200102a8 unsetenv + 0x00000000200103d0 env_nounset + 0x00000000200101a0 getenv + 0x0000000020010248 putenv + 0x00000000200103c8 env_noset + 0x00000000200101e0 setenv + 0x000000002000ff40 env_getenv + 0x000000002000ffc0 env_setenv + .text 0x00000000200103e0 0x260 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + 0x00000000200103e0 strtol + .text 0x0000000020010640 0x60 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strchr.o) + 0x0000000020010640 strchr + .text 0x00000000200106a0 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + 0x00000000200106a0 strerror + .text 0x0000000020010740 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strdup.o) + 0x0000000020010740 strdup + .text 0x00000000200107e0 0x340 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(gets.o) + 0x0000000020010a10 fgetstr + 0x00000000200107e0 ngets + .text 0x0000000020010b20 0x8e0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + 0x0000000020010b20 calloc + .text 0x0000000020011400 0x150 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) + 0x0000000020011400 read + *fill* 0x0000000020011550 0x10 1207895071 + .text 0x0000000020011560 0x220 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + 0x00000000200115a8 open + .text 0x0000000020011780 0x130 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(close.o) + 0x0000000020011780 close + .text 0x00000000200118b0 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(fstat.o) + 0x00000000200118b0 fstat + .text 0x0000000020011950 0xa8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nullfs.o) + 0x0000000020011998 null_write + 0x00000000200119d8 null_stat + 0x0000000020011970 null_close + 0x0000000020011978 null_read + 0x0000000020011950 null_open + 0x00000000200119b8 null_seek + *fill* 0x00000000200119f8 0x8 1207895071 + .text 0x0000000020011a00 0xc00 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + 0x0000000020011cb0 inflate + 0x0000000020012590 inflateSyncPoint + 0x0000000020011c80 inflateInit_ + 0x0000000020011a00 inflateReset + 0x00000000200123f8 inflateSync + 0x00000000200122f0 inflateSetDictionary + 0x0000000020011a80 inflateEnd + 0x0000000020011b10 inflateInit2_ + .text 0x0000000020012600 0x1400 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + 0x0000000020013908 inflate_blocks_free + 0x00000000200127f0 inflate_blocks + 0x0000000020012600 inflate_blocks_reset + 0x00000000200139f0 inflate_blocks_sync_point + 0x0000000020013990 inflate_set_dictionary + 0x00000000200126d0 inflate_blocks_new + .text 0x0000000020013a00 0x240 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + 0x0000000020013a00 adler32 + .text 0x0000000020013c40 0x60 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strrchr.o) + 0x0000000020013c40 strrchr + .text 0x0000000020013ca0 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcmp.o) + 0x0000000020013ca0 strcmp + .text 0x0000000020013d40 0x70 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + 0x0000000020013d40 twiddle + .text 0x0000000020013db0 0x98 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + 0x0000000020013db0 zlibVersion + 0x0000000020013e18 zcfree + 0x0000000020013dc0 zError + 0x0000000020013de0 zcalloc + *fill* 0x0000000020013e48 0x18 1207895071 + .text 0x0000000020013e60 0xd40 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + 0x00000000200148b8 inflate_trees_fixed + 0x0000000020014598 inflate_trees_bits + 0x00000000200146c0 inflate_trees_dynamic + .text 0x0000000020014ba0 0xc40 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + 0x0000000020014ba0 inflate_codes_new + 0x0000000020014c48 inflate_codes + 0x00000000200157a0 inflate_codes_free + .text 0x00000000200157e0 0x1e0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + 0x00000000200157e0 setheap + 0x0000000020015808 malloc + 0x0000000020015998 sbrk + 0x0000000020015900 free + .text 0x00000000200159c0 0x540 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + 0x00000000200159c0 inflate_fast + .text 0x0000000020015f00 0x1e0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + 0x0000000020015f00 inflate_flush + .text 0x00000000200160e0 0x25c /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcopy.o) + 0x00000000200160e0 bcopy + .text 0x000000002001633c 0xb0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bzero.o) + 0x000000002001633c bzero + *fill* 0x00000000200163ec 0x14 1207895071 + .text 0x0000000020016400 0x11c0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + 0x0000000020016400 printf + 0x0000000020016480 vprintf + 0x00000000200164c0 sprintf + .text 0x00000000200175c0 0xe4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__remqu.o) + 0x00000000200175c0 __remqu + .text 0x00000000200176a4 0xdc /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divqu.o) + 0x00000000200176a4 __divqu + .text 0x0000000020017780 0x40 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strlen.o) + 0x0000000020017780 strlen + .text 0x00000000200177c0 0x650 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(srmdisk.o) + .text 0x0000000020017e10 0x8e0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(devicename.o) + 0x0000000020018478 alpha_fmtdev + 0x0000000020017e10 alpha_getdev + 0x0000000020018628 alpha_setcurrdev + .text 0x00000000200186f0 0x138 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(alpha_module.o) + 0x00000000200186f0 alpha_boot + 0x00000000200187f8 alpha_autoload + .text 0x0000000020018828 0x68 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(time.o) + 0x0000000020018828 time + .text 0x0000000020018890 0xb0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(delay.o) + 0x0000000020018890 delay + .text 0x0000000020018940 0x120 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(reboot.o) + 0x0000000020018940 reboot + 0x00000000200189c8 exit + .text 0x0000000020018a60 0xdd0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) + .text 0x0000000020019830 0x120 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(OSFpal.o) + 0x0000000020019830 OSFpal + .text 0x0000000020019950 0x1c8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(getsecs.o) + 0x0000000020019950 getsecs + .text 0x0000000020019b18 0xcc /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(pal.o) + 0x0000000020019b20 alpha_mb + 0x0000000020019b94 alpha_pal_tbi + 0x0000000020019bcc alpha_pal_wrmces + 0x0000000020019bd4 alpha_pal_wrval + 0x0000000020019bc4 alpha_pal_wrvptptr + 0x0000000020019b40 alpha_pal_imb + 0x0000000020019bb4 alpha_pal_wripir + 0x0000000020019bbc alpha_pal_wrusp + 0x0000000020019b7c alpha_pal_rdval + 0x0000000020019bdc alpha_pal_swpctx + 0x0000000020019b48 alpha_pal_cflush + 0x0000000020019b8c _alpha_pal_swpipl + 0x0000000020019b18 alpha_rpcc + 0x0000000020019b30 alpha_amask + 0x0000000020019b58 alpha_pal_halt + 0x0000000020019ba4 alpha_pal_wrent + 0x0000000020019b74 alpha_pal_rdusp + 0x0000000020019b6c alpha_pal_rdps + 0x0000000020019b38 alpha_implver + 0x0000000020019b64 alpha_pal_rdmces + 0x0000000020019b84 alpha_pal_swpipl + 0x0000000020019b9c alpha_pal_whami + 0x0000000020019b28 alpha_wmb + 0x0000000020019b50 alpha_pal_draina + 0x0000000020019bac alpha_pal_wrfen + *fill* 0x0000000020019be4 0xc 1207895071 + .text 0x0000000020019bf0 0xc0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom_swpal.o) + 0x0000000020019bf0 switch_palcode + .text 0x0000000020019cb0 0x4e8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom.o) + 0x0000000020019cb0 init_prom_calls + 0x000000002001a020 prom_getenv + 0x0000000020019dd8 prom_putchar + 0x0000000020019e80 prom_getchar + 0x000000002001a100 prom_open + *fill* 0x000000002001a198 0x8 1207895071 + .text 0x000000002001a1a0 0x70 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom_disp.o) + 0x000000002001a1a0 prom_dispatch + .text 0x000000002001a210 0xe0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(lseek.o) + 0x000000002001a210 lseek + .text 0x000000002001a2f0 0x18 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(dev.o) + 0x000000002001a2f0 nodev + 0x000000002001a300 noioctl + 0x000000002001a2f8 nullsys + *fill* 0x000000002001a308 0x18 1207895071 + .text 0x000000002001a320 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(closeall.o) + 0x000000002001a320 closeall + .text 0x000000002001a3a0 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncmp.o) + 0x000000002001a3a0 strncmp + .text 0x000000002001a440 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcpy.o) + 0x000000002001a440 strcpy + *(.gnu.warning) + *(.gnu.linkonce.t*) + 0x000000002001a4c0 _etext=. + 0x000000002001a4c0 PROVIDE (etext, .) + +.fini + *(.fini) + +.rodata 0x000000002001a4c0 0x17c0 + *(.rodata) + .rodata 0x000000002001a4c0 0x128 main.o + .rodata 0x000000002001a5e8 0x188 boot.o + .rodata 0x000000002001a770 0x168 commands.o + .rodata 0x000000002001a8d8 0x30 console.o + .rodata 0x000000002001a908 0xa0 interp.o + .rodata 0x000000002001a9a8 0xa8 ls.o + .rodata 0x000000002001aa50 0x18 misc.o + .rodata 0x000000002001aa68 0xb8 module.o + .rodata 0x000000002001ab20 0x28 panic.o + .rodata 0x000000002001ab48 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) + .rodata 0x000000002001ab50 0xa8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .rodata 0x000000002001abf8 0x48 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + .rodata 0x000000002001ac40 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + .rodata 0x000000002001ac48 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + .rodata 0x000000002001ac50 0x2a0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + .rodata 0x000000002001aef0 0xc0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + .rodata 0x000000002001afb0 0xb8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + .rodata 0x000000002001b068 0xf8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + .rodata 0x000000002001b160 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + .rodata 0x000000002001b168 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + .rodata 0x000000002001b170 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + .rodata 0x000000002001b210 0x318 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + 0x000000002001b210 inflate_copyright + .rodata 0x000000002001b528 0x60 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + .rodata 0x000000002001b588 0x60 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + .rodata 0x000000002001b5e8 0x38 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + .rodata 0x000000002001b620 0x170 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + .rodata 0x000000002001b790 0x130 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcd.o) + 0x000000002001b898 hex2ascii_data + 0x000000002001b790 bcd2bin_data + 0x000000002001b830 bin2bcd_data + .rodata 0x000000002001b8c0 0x120 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(srmdisk.o) + .rodata 0x000000002001b9e0 0x40 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(devicename.o) + .rodata 0x000000002001ba20 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(delay.o) + .rodata 0x000000002001ba28 0x198 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) + .rodata 0x000000002001bbc0 0x98 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(OSFpal.o) + .rodata 0x000000002001bc58 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(getsecs.o) + .rodata 0x000000002001bc60 0x20 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom.o) + *(.gnu.linkonce.r*) + +.rodata1 + *(.rodata1) + +.reginfo + *(.reginfo) + 0x000000002001bc80 .=. + +.data 0x000000002001bc80 0x698 + *(.data) + .data 0x000000002001bc80 0x48 main.o + .data 0x000000002001bcc8 0x48 conf.o + 0x000000002001bcf0 module_formats + 0x000000002001bcd8 file_system + 0x000000002001bd00 consoles + 0x000000002001bcc8 devsw + .data 0x000000002001bd10 0x40 boot.o + .data 0x000000002001bd50 0x90 commands.o + .data 0x000000002001bde0 0x18 interp.o + .data 0x000000002001bdf8 0x28 ls.o + .data 0x000000002001be20 0x40 module.o + 0x000000002001be28 loaded_modules + .data 0x000000002001be60 0x68 vers.o + 0x000000002001be80 bootprog_rev + 0x000000002001be88 bootprog_date + 0x000000002001bea8 bootprog_maker + 0x000000002001be60 bootprog_name + .data 0x000000002001bec8 0x38 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) + 0x000000002001bec8 ufs_fsops + .data 0x000000002001bf00 0x18 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .data 0x000000002001bf18 0x10 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + 0x000000002001bf18 opterr + 0x000000002001bf1c optind + .data 0x000000002001bf28 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + 0x000000002001bf28 environ + .data 0x000000002001bf30 0x1d0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + .data 0x000000002001c100 0x40 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + 0x000000002001c100 zipfs_fsops + .data 0x000000002001c140 0x50 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + 0x000000002001c140 z_errmsg + .data 0x000000002001c190 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + *fill* 0x000000002001c194 0x4 + .data 0x000000002001c198 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + 0x000000002001c198 freelist + .data 0x000000002001c1a0 0x44 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + 0x000000002001c1a0 inflate_mask + *fill* 0x000000002001c1e4 0x4 + .data 0x000000002001c1e8 0x90 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + 0x000000002001c1f0 rootpath + 0x000000002001c270 netmask + 0x000000002001c1e8 bcea + .data 0x000000002001c278 0x40 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(srmdisk.o) + 0x000000002001c278 srmdisk + .data 0x000000002001c2b8 0x18 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) + 0x000000002001c2b8 alpha_elf + .data 0x000000002001c2d0 0x48 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom.o) + 0x000000002001c2d0 promconsole + *(.gnu.linkonce.d*) + +.set.Xcommand_set + 0x000000002001c318 0x88 + .set.Xcommand_set + 0x000000002001c318 0x8 setdef0.o + 0x000000002001c318 Xcommand_set + .set.Xcommand_set + 0x000000002001c320 0x18 main.o + .set.Xcommand_set + 0x000000002001c338 0x10 boot.o + .set.Xcommand_set + 0x000000002001c348 0x30 commands.o + .set.Xcommand_set + 0x000000002001c378 0x8 interp.o + .set.Xcommand_set + 0x000000002001c380 0x8 ls.o + .set.Xcommand_set + 0x000000002001c388 0x10 module.o + .set.Xcommand_set + 0x000000002001c398 0x8 setdef1.o + +.data1 + *(.data1) + +.ctors + *(.ctors) + +.dtors + *(.dtors) + +.plt + *(.plt) + +.got 0x000000002001c3a0 0xaa8 + *(.got.plt) + *(.got) + .got 0x000000002001c3a0 0xaa8 start.o + +.dynamic + *(.dynamic) + +.sdata + *(.sdata) + 0x000000002001ce48 _edata=. + 0x000000002001ce48 PROVIDE (edata, .) + 0x000000002001ce48 __bss_start=. + +.sbss + *(.sbss) + *(.scommon) + +.bss 0x000000002001ce50 0x2b50 + *(.dynbss) + *(.bss) + .bss 0x000000002001ce50 0xb0 interp.o + .bss 0x000000002001cf00 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .bss 0x000000002001cf04 0x20 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + *fill* 0x000000002001cf24 0x4 + .bss 0x000000002001cf28 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + .bss 0x000000002001cf30 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + *fill* 0x000000002001cf34 0x4 + .bss 0x000000002001cf38 0x1a98 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + .bss 0x000000002001e9d0 0x18 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + .bss 0x000000002001e9e8 0x17 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + *fill* 0x000000002001e9ff 0x1 + .bss 0x000000002001ea00 0x934 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(srmdisk.o) + .bss 0x000000002001f334 0x80 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(devicename.o) + *fill* 0x000000002001f3b4 0x4 + .bss 0x000000002001f3b8 0x100 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) + .bss 0x000000002001f4b8 0x18 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(getsecs.o) + *(COMMON) + COMMON 0x000000002001f4d0 0x30 main.o + 0x000000002001f4d0 archsw + 0x000000002001f4e8 currdev + COMMON 0x000000002001f500 0x110 commands.o + 0x000000002001f500 command_errmsg + 0x000000002001f510 command_errbuf + COMMON 0x000000002001f610 0x10 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + 0x000000002001f610 optarg + 0x000000002001f618 optreset + 0x000000002001f61c optopt + COMMON 0x000000002001f620 0x180 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + 0x000000002001f620 files + COMMON 0x000000002001f7a0 0x1c4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + 0x000000002001f7a0 domainname + 0x000000002001f820 nameip + 0x000000002001f824 hostnamelen + 0x000000002001f828 errno + 0x000000002001f82c swapip + 0x000000002001f830 rootip + 0x000000002001f834 myip + 0x000000002001f840 hostname + 0x000000002001f8c0 bootfile + 0x000000002001f940 gateip + 0x000000002001f950 ifname + 0x000000002001f960 domainnamelen + *fill* 0x000000002001f964 0x4 + COMMON 0x000000002001f968 0x20 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) + 0x000000002001f968 ffp_save + 0x000000002001f970 ssym + 0x000000002001f978 ptbr_save + 0x000000002001f980 esym + COMMON 0x000000002001f988 0x4 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom.o) + 0x000000002001f988 console + *fill* 0x000000002001f98c 0x4 + COMMON 0x000000002001f990 0x10 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom_disp.o) + 0x000000002001f990 prom_dispatch_v + 0x000000002001f9a0 _end=. + 0x000000002001f9a0 PROVIDE (end, .) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x0000000000000000 0x4ec + *(.comment) + .comment 0x0000000000000000 0x14 setdef0.o + .comment 0x0000000000000014 0x14 main.o + .comment 0x0000000000000028 0x14 conf.o + .comment 0x000000000000003c 0x14 boot.o + .comment 0x0000000000000050 0x14 commands.o + .comment 0x0000000000000064 0x14 console.o + .comment 0x0000000000000078 0x14 devopen.o + .comment 0x000000000000008c 0x14 interp.o + .comment 0x00000000000000a0 0x14 ls.o + .comment 0x00000000000000b4 0x14 misc.o + .comment 0x00000000000000c8 0x14 module.o + .comment 0x00000000000000dc 0x14 panic.o + .comment 0x00000000000000f0 0x14 setdef1.o + .comment 0x0000000000000104 0x14 vers.o + .comment 0x0000000000000118 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) + .comment 0x000000000000012c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(stat.o) + .comment 0x0000000000000140 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncpy.o) + .comment 0x0000000000000154 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcat.o) + .comment 0x0000000000000168 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .comment 0x000000000000017c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + .comment 0x0000000000000190 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + .comment 0x00000000000001a4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + .comment 0x00000000000001b8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strchr.o) + .comment 0x00000000000001cc 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + .comment 0x00000000000001e0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strdup.o) + .comment 0x00000000000001f4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(gets.o) + .comment 0x0000000000000208 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + .comment 0x000000000000021c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) + .comment 0x0000000000000230 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + .comment 0x0000000000000244 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(close.o) + .comment 0x0000000000000258 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(fstat.o) + .comment 0x000000000000026c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nullfs.o) + .comment 0x0000000000000280 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + .comment 0x0000000000000294 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + .comment 0x00000000000002a8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + .comment 0x00000000000002bc 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strrchr.o) + .comment 0x00000000000002d0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcmp.o) + .comment 0x00000000000002e4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + .comment 0x00000000000002f8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + .comment 0x000000000000030c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + .comment 0x0000000000000320 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + .comment 0x0000000000000334 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + .comment 0x0000000000000348 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + .comment 0x000000000000035c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + .comment 0x0000000000000370 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + .comment 0x0000000000000384 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + .comment 0x0000000000000398 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strlen.o) + .comment 0x00000000000003ac 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcd.o) + .comment 0x00000000000003c0 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(srmdisk.o) + .comment 0x00000000000003d4 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(devicename.o) + .comment 0x00000000000003e8 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(alpha_module.o) + .comment 0x00000000000003fc 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(time.o) + .comment 0x0000000000000410 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(delay.o) + .comment 0x0000000000000424 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(reboot.o) + .comment 0x0000000000000438 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) + .comment 0x000000000000044c 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(OSFpal.o) + .comment 0x0000000000000460 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(getsecs.o) + .comment 0x0000000000000474 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom.o) + .comment 0x0000000000000488 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(lseek.o) + .comment 0x000000000000049c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(dev.o) + .comment 0x00000000000004b0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(closeall.o) + .comment 0x00000000000004c4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncmp.o) + .comment 0x00000000000004d8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcpy.o) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges + *(.debug_aranges) + +.debug_pubnames + *(.debug_pubnames) + +.debug_info + *(.debug_info) + +.debug_abbrev + *(.debug_abbrev) + +.debug_line + *(.debug_line) + +.debug_frame + *(.debug_frame) + +.debug_str + *(.debug_str) + +.debug_loc + *(.debug_loc) + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) +OUTPUT(boot2.sym elf64-alpha) + +.mdebug 0x00000000000004f0 0xdb50 + .mdebug 0x00000000000004f0 0x850 start.o + .mdebug 0x0000000000000d40 0x1e0 setdef0.o + .mdebug 0x0000000000000f20 0xab8 main.o + .mdebug 0x00000000000019d8 0x2e8 conf.o + .mdebug 0x0000000000001cc0 0x8c0 boot.o + .mdebug 0x0000000000002580 0xb00 commands.o + .mdebug 0x0000000000003080 0x788 console.o + .mdebug 0x0000000000003808 0x3d0 devopen.o + .mdebug 0x0000000000003bd8 0x968 interp.o + .mdebug 0x0000000000004540 0x540 ls.o + .mdebug 0x0000000000004a80 0x330 misc.o + .mdebug 0x0000000000004db0 0x790 module.o + .mdebug 0x0000000000005540 0x310 panic.o + .mdebug 0x0000000000005850 0x1b8 setdef1.o + .mdebug 0x0000000000005a08 0x248 vers.o + .mdebug 0x0000000000005c50 0xc30 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) + .mdebug 0x0000000000006880 0x308 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(stat.o) + .mdebug 0x0000000000006b88 0x778 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__reml.o) + .mdebug 0x0000000000007300 0x708 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__remlu.o) + .mdebug 0x0000000000007a08 0x778 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divl.o) + .mdebug 0x0000000000008180 0x708 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divlu.o) + .mdebug 0x0000000000008888 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncpy.o) + .mdebug 0x0000000000008b10 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcat.o) + .mdebug 0x0000000000008d98 0x7a0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .mdebug 0x0000000000009538 0x3d0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + .mdebug 0x0000000000009908 0xa30 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + .mdebug 0x000000000000a338 0x318 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + .mdebug 0x000000000000a650 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strchr.o) + .mdebug 0x000000000000a8d8 0x350 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + .mdebug 0x000000000000ac28 0x318 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strdup.o) + .mdebug 0x000000000000af40 0x3e0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(gets.o) + .mdebug 0x000000000000b320 0xc28 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + .mdebug 0x000000000000bf48 0x308 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) + .mdebug 0x000000000000c250 0x430 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + .mdebug 0x000000000000c680 0x310 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(close.o) + .mdebug 0x000000000000c990 0x2f0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(fstat.o) + .mdebug 0x000000000000cc80 0x720 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nullfs.o) + .mdebug 0x000000000000d3a0 0xac8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + .mdebug 0x000000000000de68 0x9a0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + .mdebug 0x000000000000e808 0x2c0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + .mdebug 0x000000000000eac8 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strrchr.o) + .mdebug 0x000000000000ed50 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcmp.o) + .mdebug 0x000000000000efd8 0x318 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + .mdebug 0x000000000000f2f0 0x590 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + .mdebug 0x000000000000f880 0x830 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + .mdebug 0x00000000000100b0 0x538 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + .mdebug 0x00000000000105e8 0x618 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + .mdebug 0x0000000000010c00 0x2f8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + .mdebug 0x0000000000010ef8 0x320 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + .mdebug 0x0000000000011218 0xbc0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcopy.o) + .mdebug 0x0000000000011dd8 0x3a0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + .mdebug 0x0000000000012178 0x828 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bzero.o) + .mdebug 0x00000000000129a0 0x6e0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + .mdebug 0x0000000000013080 0x708 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__remqu.o) + .mdebug 0x0000000000013788 0x700 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divqu.o) + .mdebug 0x0000000000013e88 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strlen.o) + .mdebug 0x0000000000014110 0x228 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcd.o) + .mdebug 0x0000000000014338 0x6d8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(srmdisk.o) + .mdebug 0x0000000000014a10 0x740 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(devicename.o) + .mdebug 0x0000000000015150 0x408 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(alpha_module.o) + .mdebug 0x0000000000015558 0x2d0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(time.o) + .mdebug 0x0000000000015828 0x2d8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(delay.o) + .mdebug 0x0000000000015b00 0x3a0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(reboot.o) + .mdebug 0x0000000000015ea0 0x770 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) + .mdebug 0x0000000000016610 0x320 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(OSFpal.o) + .mdebug 0x0000000000016930 0x3b8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(getsecs.o) + .mdebug 0x0000000000016ce8 0x18b8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(pal.o) + .mdebug 0x00000000000185a0 0xae0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom_swpal.o) + .mdebug 0x0000000000019080 0x9b8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom.o) + .mdebug 0x0000000000019a38 0xaa0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom_disp.o) + .mdebug 0x000000000001a4d8 0x2f0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(lseek.o) + .mdebug 0x000000000001a7c8 0x418 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(dev.o) + .mdebug 0x000000000001abe0 0x2f8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(closeall.o) + .mdebug 0x000000000001aed8 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncmp.o) + .mdebug 0x000000000001b160 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcpy.o) + +.note 0x000000000001b3e8 0x4ec + .note 0x000000000001b3e8 0x14 setdef0.o + .note 0x000000000001b3fc 0x14 main.o + .note 0x000000000001b410 0x14 conf.o + .note 0x000000000001b424 0x14 boot.o + .note 0x000000000001b438 0x14 commands.o + .note 0x000000000001b44c 0x14 console.o + .note 0x000000000001b460 0x14 devopen.o + .note 0x000000000001b474 0x14 interp.o + .note 0x000000000001b488 0x14 ls.o + .note 0x000000000001b49c 0x14 misc.o + .note 0x000000000001b4b0 0x14 module.o + .note 0x000000000001b4c4 0x14 panic.o + .note 0x000000000001b4d8 0x14 setdef1.o + .note 0x000000000001b4ec 0x14 vers.o + .note 0x000000000001b500 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ufs.o) + .note 0x000000000001b514 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(stat.o) + .note 0x000000000001b528 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncpy.o) + .note 0x000000000001b53c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcat.o) + .note 0x000000000001b550 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .note 0x000000000001b564 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + .note 0x000000000001b578 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + .note 0x000000000001b58c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + .note 0x000000000001b5a0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strchr.o) + .note 0x000000000001b5b4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + .note 0x000000000001b5c8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strdup.o) + .note 0x000000000001b5dc 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(gets.o) + .note 0x000000000001b5f0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + .note 0x000000000001b604 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) + .note 0x000000000001b618 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + .note 0x000000000001b62c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(close.o) + .note 0x000000000001b640 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(fstat.o) + .note 0x000000000001b654 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nullfs.o) + .note 0x000000000001b668 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + .note 0x000000000001b67c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + .note 0x000000000001b690 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + .note 0x000000000001b6a4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strrchr.o) + .note 0x000000000001b6b8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcmp.o) + .note 0x000000000001b6cc 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + .note 0x000000000001b6e0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + .note 0x000000000001b6f4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + .note 0x000000000001b708 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + .note 0x000000000001b71c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + .note 0x000000000001b730 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + .note 0x000000000001b744 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + .note 0x000000000001b758 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + .note 0x000000000001b76c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + .note 0x000000000001b780 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strlen.o) + .note 0x000000000001b794 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcd.o) + .note 0x000000000001b7a8 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(srmdisk.o) + .note 0x000000000001b7bc 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(devicename.o) + .note 0x000000000001b7d0 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(alpha_module.o) + .note 0x000000000001b7e4 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(time.o) + .note 0x000000000001b7f8 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(delay.o) + .note 0x000000000001b80c 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(reboot.o) + .note 0x000000000001b820 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(elf_freebsd.o) + .note 0x000000000001b834 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(OSFpal.o) + .note 0x000000000001b848 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(getsecs.o) + .note 0x000000000001b85c 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/boot2/../libalpha/obj/libalpha.a(prom.o) + .note 0x000000000001b870 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(lseek.o) + .note 0x000000000001b884 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(dev.o) + .note 0x000000000001b898 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(closeall.o) + .note 0x000000000001b8ac 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncmp.o) + .note 0x000000000001b8c0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcpy.o) diff --git a/sys/boot/alpha/boot2/conf.c b/sys/boot/alpha/boot2/conf.c new file mode 100644 index 0000000..6a708f1 --- /dev/null +++ b/sys/boot/alpha/boot2/conf.c @@ -0,0 +1,83 @@ +/* + * $Id$ + * From $NetBSD: conf.c,v 1.2 1997/03/22 09:03:29 thorpej Exp $ + */ + +/* + * Copyright (c) 1997 + * Matthias Drochner. 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 for the NetBSD Project + * by Matthias Drochner. + * 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 AUTHOR 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 <stand.h> +#include "libalpha/libalpha.h" + +/* + * We could use linker sets for some or all of these, but + * then we would have to control what ended up linked into + * the bootstrap. So it's easier to conditionalise things + * here. + * + * XXX rename these arrays to be consistent and less namespace-hostile + */ + +/* Exported for libstand */ +struct devsw *devsw[] = { + &srmdisk, + NULL +}; + +struct fs_ops *file_system[] = { + &ufs_fsops, + &zipfs_fsops, + NULL +}; + +/* Exported for alpha only */ +/* + * Sort formats so that those that can detect based on arguments + * rather than reading the file go first. + */ +struct module_format *module_formats[] = { + &alpha_elf, + NULL +}; + +/* + * Consoles + * + * We don't prototype these in libalpha.h because they require + * data structures from bootstrap.h as well. + */ +extern struct console promconsole; + +struct console *consoles[] = { + &promconsole, + NULL +}; diff --git a/sys/boot/alpha/boot2/newvers.sh b/sys/boot/alpha/boot2/newvers.sh new file mode 100644 index 0000000..88cc010 --- /dev/null +++ b/sys/boot/alpha/boot2/newvers.sh @@ -0,0 +1,44 @@ +#!/bin/sh - +# +# $NetBSD: newvers.sh,v 1.1 1997/07/26 01:50:38 thorpej Exp $ +# +# Copyright (c) 1984, 1986, 1990, 1993 +# The Regents of the University of California. 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 the University of +# California, Berkeley and its contributors. +# 4. Neither the name of the University 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 REGENTS 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 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. +# +# @(#)newvers.sh 8.1 (Berkeley) 4/20/94 + +u=${USER-root} h=`hostname` t=`date` +r=`head -n 6 $1 | tail -n 1 | awk -F: ' { print $1 } '` + +echo "char bootprog_name[] = \"FreeBSD/alpha ${2}\";" > vers.c +echo "char bootprog_rev[] = \"${r}\";" >> vers.c +echo "char bootprog_date[] = \"${t}\";" >> vers.c +echo "char bootprog_maker[] = \"${u}@${h}\";" >> vers.c diff --git a/sys/boot/alpha/boot2/setdefs.h b/sys/boot/alpha/boot2/setdefs.h new file mode 100644 index 0000000..2320078 --- /dev/null +++ b/sys/boot/alpha/boot2/setdefs.h @@ -0,0 +1,2 @@ +/* $Id$ */ +DEFINE_SET(Xcommand_set, 15); diff --git a/sys/boot/alpha/boot2/vers.c b/sys/boot/alpha/boot2/vers.c new file mode 100644 index 0000000..08eda5c --- /dev/null +++ b/sys/boot/alpha/boot2/vers.c @@ -0,0 +1,4 @@ +char bootprog_name[] = "FreeBSD/alpha SRM disk boot"; +char bootprog_rev[] = "0.1"; +char bootprog_date[] = "Mon Aug 17 10:38:19 BST 1998"; +char bootprog_maker[] = "dfr@salmon.nlsystems.com"; diff --git a/sys/boot/alpha/boot2/version b/sys/boot/alpha/boot2/version new file mode 100644 index 0000000..6346f50 --- /dev/null +++ b/sys/boot/alpha/boot2/version @@ -0,0 +1,7 @@ +$Id$ + +NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this +file is important. Make sure the current version number is on line 6. + +0.1: Initial i386 version, germinated from the NetBSD i386 + standalone, but enormously modified. diff --git a/sys/boot/alpha/common/gensetdefs.c b/sys/boot/alpha/common/gensetdefs.c new file mode 100644 index 0000000..b72f78b --- /dev/null +++ b/sys/boot/alpha/common/gensetdefs.c @@ -0,0 +1,313 @@ +/*- + * Copyright (c) 1997 John D. Polstra. + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id: gensetdefs.c,v 1.2 1998/06/14 13:44:44 dfr Exp $ + */ + +#include <sys/types.h> +#include <elf.h> + +#include <err.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define HASHSIZE 1009u /* Number of hash chains. */ +#define PREFIX ".set." /* Section name prefix for linker sets. */ + +/* One entry in the hash table. */ +typedef struct hashent { + struct hashent *next; /* Next entry with the same hash. */ + char *name; /* Name of the linker set. */ + size_t size; /* Size in bytes. */ +} hashent; + +/* Allocate storage for "count" objects of type "type". */ +#define NEW(type, count) ((type *) xmalloc((count) * sizeof(type))) + +static hashent *hashtab[HASHSIZE]; /* Hash chain heads. */ + +static void enter(const char *, size_t); +static int enter_sets(const char *); +static unsigned int hash(const char *); +static hashent *merge(void); +static int my_byte_order(void); +static void *xmalloc(size_t); +static char *xstrdup(const char *); + +/* + * This is a special-purpose program to generate the linker set definitions + * needed when building an ELF kernel. Its arguments are the names of + * ELF object files. It scans the section names of the object files, + * building a table of those that begin with ".set.", which represent + * linker sets. Finally, for each set "foo" with "count" elements, it + * writes a line "DEFINE_SET(foo, count);" to the standard output. + */ +int +main(int argc, char **argv) +{ + int i; + int status = EXIT_SUCCESS; + hashent *list; + + for (i = 1; i < argc; i++) + if (enter_sets(argv[i]) == -1) + status = EXIT_FAILURE; + + list = merge(); + while (list != NULL) { + hashent *next; + + printf("DEFINE_SET(%s, %lu);\n", list->name, + (unsigned long) (list->size / sizeof (void *))); + next = list->next; + free(list->name); + free(list); + list = next; + } + + return (status); +} + +/* + * Enter the given string into the hash table, if it is not already there. + * Each hash chain is kept sorted, so that it will be easy to merge the + * chains to get a single sorted list. + */ +static void +enter(const char *name, size_t size) +{ + int c = 0; + hashent *entp; + hashent **linkp; + hashent *newp; + + linkp = &hashtab[hash(name) % HASHSIZE]; + while ((entp = *linkp) != NULL && (c = strcmp(name, entp->name)) > 0) + linkp = &entp->next; + + if (entp == NULL || c != 0) { /* Not found; create a new entry. */ + newp = NEW(hashent, 1); + newp->name = xstrdup(name); + newp->size = 0; + newp->next = entp; + *linkp = newp; + entp = newp; + } + + entp->size += size; +} + +/* + * Return a hash value for the given string. + */ +static unsigned int +hash(const char *s) +{ + unsigned char ch; + unsigned int h = 0; + + while((ch = *s) != '\0') { + h = 9*h + ch; + s++; + } + return (h); +} + +/* + * Enter the linker sets from the given ELF object file. Returns 0 on + * success, or -1 if an error occurred. + */ +static int +enter_sets(const char *filename) +{ + int i; + FILE *iop; + Elf64_Shdr *shdr; + char *shstr; + Elf64_Ehdr ehdr; + + if ((iop = fopen(filename, "rb")) == NULL) { + warn("%s", filename); + return (-1); + } + if (fread(&ehdr, sizeof ehdr, 1, iop) != 1 || + ehdr.e_ident[EI_MAG0] != ELFMAG0 || + ehdr.e_ident[EI_MAG1] != ELFMAG1 || + ehdr.e_ident[EI_MAG2] != ELFMAG2 || + ehdr.e_ident[EI_MAG3] != ELFMAG3) { + warnx("%s: not an ELF file", filename); + fclose(iop); + return (-1); + } + if (ehdr.e_ident[EI_VERSION] != EV_CURRENT) { + warnx("%s: unsupported ELF version", filename); + fclose(iop); + return (-1); + } + if (ehdr.e_ident[EI_DATA] != my_byte_order()) { + warnx("%s: unsupported byte order", filename); + fclose(iop); + return (-1); + } + if (ehdr.e_shoff == 0) { + warnx("%s: no section table", filename); + fclose(iop); + return (-1); + } + if (ehdr.e_shstrndx == SHN_UNDEF) { + warnx("%s: no section name string table", filename); + fclose(iop); + return (-1); + } + + shdr = NEW(Elf64_Shdr, ehdr.e_shnum); + if (fseek(iop, ehdr.e_shoff, SEEK_SET) == -1) { + warn("%s", filename); + free(shdr); + fclose(iop); + return (-1); + } + if (fread(shdr, sizeof *shdr, ehdr.e_shnum, iop) != ehdr.e_shnum) { + warnx("%s: truncated section table", filename); + free(shdr); + fclose(iop); + return (-1); + } + + shstr = NEW(char, shdr[ehdr.e_shstrndx].sh_size); + if (fseek(iop, shdr[ehdr.e_shstrndx].sh_offset, SEEK_SET) == -1) { + warn("%s", filename); + free(shstr); + free(shdr); + fclose(iop); + return (-1); + } + if (fread(shstr, sizeof *shstr, shdr[ehdr.e_shstrndx].sh_size, iop) != + shdr[ehdr.e_shstrndx].sh_size) { + warnx("%s: truncated section name string table", filename); + free(shstr); + free(shdr); + fclose(iop); + return (-1); + } + + for (i = 1; i < ehdr.e_shnum; i++) { + const char *name = shstr + shdr[i].sh_name; + + if (strncmp(name, PREFIX, sizeof (PREFIX) - 1) == 0) + enter(name + sizeof (PREFIX) - 1, shdr[i].sh_size); + } + + free(shstr); + free(shdr); + fclose(iop); + return (0); +} + +/* + * Destructively merge all the sorted hash chains into a single sorted + * list, and return a pointer to its first element. + */ +static hashent * +merge(void) +{ + unsigned int numchains = HASHSIZE; + + while (numchains > 1) { /* More merging to do. */ + unsigned int lo = 0; + /* + * Merge chains pairwise from the outside in, halving the + * number of chains. + */ + while (numchains - lo >= 2) { + hashent **linkp = &hashtab[lo]; + hashent *l1 = hashtab[lo++]; + hashent *l2 = hashtab[--numchains]; + + while (l1 != NULL && l2 != NULL) { + if (strcmp(l1->name, l2->name) < 0) { + *linkp = l1; + linkp = &l1->next; + l1 = l1->next; + } else { + *linkp = l2; + linkp = &l2->next; + l2 = l2->next; + } + } + *linkp = l1==NULL ? l2 : l1; + } + } + + return (hashtab[0]); +} + +/* + * Determine the host byte order. + */ +static int +my_byte_order(void) +{ + static unsigned short s = 0xbbaa; + int byte0; + + byte0 = *(unsigned char *)&s; + if (byte0 == 0xaa) + return (ELFDATA2LSB); + else if (byte0 == 0xbb) + return (ELFDATA2MSB); + else + return (ELFDATANONE); +} + +/* + * Allocate a chunk of memory and return a pointer to it. Die if the + * malloc fails. + */ +static void * +xmalloc(size_t size) +{ + void *p; + + p = malloc(size); + if (p == NULL) + err(EXIT_FAILURE, "malloc"); + return (p); +} + +/* + * Duplicate a string and return a pointer to the copy. Die if there is + * not enough memory. + */ +static char * +xstrdup(const char *s) +{ + int size; + + size = strlen(s) + 1; + return (memcpy(xmalloc(size), s, size)); +} diff --git a/sys/boot/alpha/common/main.c b/sys/boot/alpha/common/main.c new file mode 100644 index 0000000..c4d8d71 --- /dev/null +++ b/sys/boot/alpha/common/main.c @@ -0,0 +1,178 @@ +/*- + * Copyright (c) 1998 Michael Smith <msmith@freebsd.org> + * Copyright (c) 1998 Doug Rabson <dfr@freebsd.org> + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id$ + */ + + +#include <stand.h> +#include <string.h> + +#include <sys/param.h> +#include <machine/rpb.h> +#include <machine/prom.h> +#include "bootstrap.h" +#include "libalpha/libalpha.h" + +extern char bootprog_name[], bootprog_rev[], bootprog_date[], bootprog_maker[]; + +struct alpha_devdesc currdev; /* our current device */ +struct arch_switch archsw; /* MI/MD interface boundary */ + +extern char end[]; +extern void OSFpal(void); +extern void halt(void); + +unsigned long +memsize() +{ + struct rpb *hwrpb = (struct rpb *)HWRPB_ADDR; + struct mddt *mddtp; + struct mddt_cluster *memc; + int i; + unsigned long total = 0; + + mddtp = (struct mddt *)(((caddr_t)hwrpb) + hwrpb->rpb_memdat_off); + for (i = 0; i < mddtp->mddt_cluster_cnt; i++) { + memc = &mddtp->mddt_clusters[i]; + total += memc->mddt_pg_cnt << PAGE_SHIFT; + } + return total; +} + +void +main(void) +{ + int i; + char bootfile[128]; + + /* + * Initialise the heap as early as possible. Once this is done, alloc() is usable. + * The stack is buried inside us, so this is safe + */ + setheap((void *)end, (void *)0x20040000); + + + /* + * XXX Chicken-and-egg problem; we want to have console output early, but some + * console attributes may depend on reading from eg. the boot device, which we + * can't do yet. + * + * We can use printf() etc. once this is done. + */ + cons_probe(); + + /* switch to OSF pal code. */ + OSFpal(); + + /* + * March through the device switch probing for things. + */ + for (i = 0; devsw[i] != NULL; i++) + if (devsw[i]->dv_init != NULL) + (devsw[i]->dv_init)(); + + printf("\n"); + printf(">> %s, Revision %s\n", bootprog_name, bootprog_rev); + printf(">> (%s, %s)\n", bootprog_maker, bootprog_date); + printf(">> Memory: %ld k\n", memsize() / 1024); + + /* We're booting from an SRM disk, try to spiff this */ + currdev.d_dev = devsw[0]; /* XXX presumes that biosdisk is first in devsw */ + currdev.d_type = currdev.d_dev->dv_type; + currdev.d_kind.srmdisk.unit = 0; + currdev.d_kind.srmdisk.slice = -1; /* XXX should be able to detect this, default to autoprobe */ + currdev.d_kind.srmdisk.partition = 0; /* default to 'a' */ + + /* Create alpha-specific variables */ + prom_getenv(PROM_E_BOOTED_FILE, bootfile, sizeof(bootfile)); + if (bootfile[0]) + setenv("bootfile", bootfile, 1); + env_setenv("currdev", EV_VOLATILE, alpha_fmtdev(&currdev), alpha_setcurrdev, env_nounset); + env_setenv("loaddev", EV_VOLATILE, alpha_fmtdev(&currdev), env_noset, env_nounset); + setenv("LINES", "24", 1); /* optional */ + + archsw.arch_autoload = alpha_autoload; + archsw.arch_boot = alpha_boot; + archsw.arch_getdev = alpha_getdev; + + /* + * XXX should these be in the MI source? + */ + source("/boot/boot.config"); + interact(); /* doesn't return */ +} + +COMMAND_SET(reboot, "reboot", "reboot the system", command_reboot); + +static int +command_reboot(int argc, char *argv[]) +{ + + printf("Rebooting...\n"); + delay(1000000); + reboot(); + /* Note: we shouldn't get to this point! */ + panic("Reboot failed!"); + exit(0); +} + +COMMAND_SET(halt, "halt", "halt the system", command_halt); + +static int +command_halt(int argc, char *argv[]) +{ + halt(); /* never returns */ + return(CMD_OK); +} + +#if 0 + +COMMAND_SET(stack, "stack", "show stack usage", command_stack); + +static int +command_stack(int argc, char *argv[]) +{ + char *cp; + + for (cp = &stackbase; cp < &stacktop; cp++) + if (*cp != 0) + break; + + printf("%d bytes of stack used\n", &stacktop - cp); + return(CMD_OK); +} + +#endif + +COMMAND_SET(heap, "heap", "show heap usage", command_heap); + +static int +command_heap(int argc, char *argv[]) +{ + printf("heap base at %p, top at %p, used %ld\n", end, sbrk(0), sbrk(0) - end); + return(CMD_OK); +} diff --git a/sys/boot/alpha/common/setdef0.c b/sys/boot/alpha/common/setdef0.c new file mode 100644 index 0000000..b41276d --- /dev/null +++ b/sys/boot/alpha/common/setdef0.c @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 1997 John D. Polstra + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id: setdef0.c,v 1.1 1998/06/10 10:53:12 dfr Exp $ + */ + +#ifdef __ELF__ + +#include <sys/param.h> +#include <sys/kernel.h> + +/* + * DEFINE_SET creates the section and label for a set, and emits the + * count word at the front of it. + */ +#define DEFINE_SET(set, count) \ + __asm__(".section .set." #set ",\"aw\""); \ + __asm__(".globl " #set); \ + __asm__(".type " #set ",@object"); \ + __asm__(".p2align 3"); \ + __asm__(#set ":"); \ + __asm__(".quad " #count); \ + __asm__(".previous") + +#include "setdefs.h" /* Contains a `DEFINE_SET' for each set */ + +#endif /* __ELF__ */ diff --git a/sys/boot/alpha/common/setdef1.c b/sys/boot/alpha/common/setdef1.c new file mode 100644 index 0000000..659618a --- /dev/null +++ b/sys/boot/alpha/common/setdef1.c @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 1997 John D. Polstra + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id: setdef1.c,v 1.1 1998/06/10 10:53:13 dfr Exp $ + */ + +#ifdef __ELF__ + +/* + * DEFINE_SET emits the NULL terminator for a set. + */ +#define DEFINE_SET(set, count) \ + __asm__(".section .set." #set ",\"aw\""); \ + __asm__(".quad 0"); \ + __asm__(".previous") + +#include "setdefs.h" /* Contains a `DEFINE_SET' for each set */ + +#endif /* __ELF__ */ diff --git a/sys/boot/alpha/libalpha/Makefile b/sys/boot/alpha/libalpha/Makefile new file mode 100644 index 0000000..191649f --- /dev/null +++ b/sys/boot/alpha/libalpha/Makefile @@ -0,0 +1,23 @@ +# $Id$ + +LIB= alpha +NOPIC= true +NOPROFILE= true +INTERNALLIB= true + +# XXX hack to pick up stand.h +CFLAGS= -I/home/dfr/FreeBSD/alpha/src/lib/libstand +CFLAGS+= -DDEBUG + +# Pick up the bootstrap header for some interface items +CFLAGS+= -I${.CURDIR}/../../common -mno-fp-regs + +CFLAGS+= -DDISK_DEBUG +#CPPFLAGS+= -DNO_DISKLABEL +#CPPFLAGS+= -DSAVE_MEMORY + +SRCS= OSFpal.c elf_freebsd.c prom.c prom_disp.S prom_swpal.S start.S \ + pal.S reboot.c delay.c time.c alpha_module.c devicename.c \ + srmdisk.c srmnet.c getsecs.c + +.include <bsd.lib.mk> diff --git a/sys/boot/alpha/libalpha/OSFpal.c b/sys/boot/alpha/libalpha/OSFpal.c new file mode 100644 index 0000000..b77ee12 --- /dev/null +++ b/sys/boot/alpha/libalpha/OSFpal.c @@ -0,0 +1,71 @@ +/* + * $Id$ + * From $NetBSD: OSFpal.c,v 1.5 1998/06/24 01:33:19 ross Exp $ + */ + +/* + * Copyright (c) 1994, 1996 Carnegie-Mellon University. + * All rights reserved. + * + * Author: Keith Bostic + * + * Permission to use, copy, modify and distribute this software and + * its documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND + * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ + +#include <sys/types.h> +#include <stand.h> + +#include <machine/prom.h> +#include <machine/rpb.h> +#include <machine/alpha_cpu.h> + +vm_offset_t ptbr_save; + +#include "common.h" + +void +OSFpal() +{ + struct rpb *r; + struct pcs *p; + + r = (struct rpb *)HWRPB_ADDR; + /* + * Note, cpu_number() is a VMS op, can't necessarily call it. + * Real fun: PAL_VMS_mfpr_whami == PAL_OSF1_rti... + * We might not be rpb_primary_cpu_id, but it is supposed to go + * first so the answer should apply to everyone. + */ + p = LOCATE_PCS(r, r->rpb_primary_cpu_id); + + printf("VMS PAL rev: 0x%lx\n", p->pcs_palrevisions[PALvar_OpenVMS]); + printf("OSF PAL rev: 0x%lx\n", p->pcs_palrevisions[PALvar_OSF1]); + + if(p->pcs_pal_type==PAL_TYPE_OSF1) { + printf("OSF PAL code already running.\n"); + ptbr_save = ((struct alpha_pcb *)p)->apcb_ptbr; + printf("PTBR is: 0x%lx\n", ptbr_save); + return; + } + switch_palcode(); + printf("Switch to OSF PAL code succeeded.\n"); +} + diff --git a/sys/boot/alpha/libalpha/alpha_module.c b/sys/boot/alpha/libalpha/alpha_module.c new file mode 100644 index 0000000..a08fc85 --- /dev/null +++ b/sys/boot/alpha/libalpha/alpha_module.c @@ -0,0 +1,64 @@ +/*- + * Copyright (c) 1998 Michael Smith <msmith@freebsd.org> + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id$ + */ + +/* + * alpha-specific module functionality. + * + */ + +#include <stand.h> +#include <string.h> + +#include "bootstrap.h" +#include "libalpha.h" + +/* + * Look for a method and having found it, boot the kernel module. + */ +int +alpha_boot(void) +{ + int i; + + for (i = 0; module_formats[i] != NULL; i++) { + if (((loaded_modules->m_flags & MF_FORMATMASK) == module_formats[i]->l_format) && + (module_formats[i]->l_exec != NULL)) { + return((module_formats[i]->l_exec)(loaded_modules)); + } + } +} + +/* + * Use voodoo to load modules required by current hardware. + */ +int +alpha_autoload(void) +{ + /* XXX use PnP to locate stuff here */ + return(0); +} diff --git a/sys/boot/alpha/libalpha/bbinfo.h b/sys/boot/alpha/libalpha/bbinfo.h new file mode 100644 index 0000000..5529035 --- /dev/null +++ b/sys/boot/alpha/libalpha/bbinfo.h @@ -0,0 +1,57 @@ +/* + * $Id$ + * From $NetBSD: bbinfo.h,v 1.2 1997/04/06 08:40:57 cgd Exp $ + */ + +/* + * Copyright (c) 1995, 1996 Carnegie-Mellon University. + * All rights reserved. + * + * Author: Chris G. Demetriou + * + * Permission to use, copy, modify and distribute this software and + * its documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND + * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ + +struct bbinfoloc { + u_int64_t magic1; + u_int64_t start; + u_int64_t end; + u_int64_t pad1[4]; + u_int64_t magic2; +}; + +struct bbinfo { + int32_t cksum; + int32_t nblocks; + int32_t bsize; + u_int32_t pad1[8]; + int32_t blocks[1]; +}; + +struct netbbinfo { + u_int64_t magic1; + u_int8_t set; + u_int8_t ether_addr[6]; + u_int8_t force; + u_int64_t pad1[4]; + u_int64_t cksum; + u_int64_t magic2; +}; diff --git a/sys/boot/alpha/libalpha/common.h b/sys/boot/alpha/libalpha/common.h new file mode 100644 index 0000000..8acd3f93 --- /dev/null +++ b/sys/boot/alpha/libalpha/common.h @@ -0,0 +1,11 @@ +/* + * $Id$ + * From: $NetBSD: common.h,v 1.2 1998/01/05 07:02:48 perry Exp $ + */ + +int prom_open __P((char*, int)); +void OSFpal __P((void)); +void halt __P((void)); +u_int64_t prom_dispatch __P((int, ...)); +int cpu_number __P((void)); +void switch_palcode __P((void)); diff --git a/sys/boot/alpha/libalpha/delay.c b/sys/boot/alpha/libalpha/delay.c new file mode 100644 index 0000000..a7621b7 --- /dev/null +++ b/sys/boot/alpha/libalpha/delay.c @@ -0,0 +1,40 @@ +/*- + * Copyright (c) 1998 Doug Rabson + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id$ + */ + +#include <stand.h> +#include <machine/rpb.h> + +void +delay(int usecs) +{ + struct rpb *hwrpb = (struct rpb *)HWRPB_ADDR; + unsigned long start = alpha_rpcc(); + unsigned long end = start + (hwrpb->rpb_cc_freq * usecs) / 1000000; + while (alpha_rpcc() < end) + ; +} diff --git a/sys/boot/alpha/libalpha/devicename.c b/sys/boot/alpha/libalpha/devicename.c new file mode 100644 index 0000000..310bb94 --- /dev/null +++ b/sys/boot/alpha/libalpha/devicename.c @@ -0,0 +1,232 @@ +/*- + * Copyright (c) 1998 Michael Smith <msmith@freebsd.org> + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id$ + */ + +#include <stand.h> +#include <string.h> +#include <sys/disklabel.h> +#include "bootstrap.h" +#include "libalpha.h" + +static int alpha_parsedev(struct alpha_devdesc **dev, char *devspec, char **path); + +/* + * Point (dev) at an allocated device specifier for the device matching the + * path in (devspec). If it contains an explicit device specification, + * use that. If not, use the default device. + */ +int +alpha_getdev(void **vdev, char *devspec, char **path) +{ + struct alpha_devdesc **dev = (struct alpha_devdesc **)vdev; + int rv; + + /* + * If it looks like this is just a path and no + * device, go with the current device. + */ + if ((devspec == NULL) || + (devspec[0] == '/') || + (strchr(devspec, ':') == NULL)) { + + if (((rv = alpha_parsedev(dev, getenv("currdev"), NULL)) == 0) && + (path != NULL)) + *path = devspec; + return(rv); + } + + /* + * Try to parse the device name off the beginning of the devspec + */ + return(alpha_parsedev(dev, devspec, path)); +} + +/* + * Point (dev) at an allocated device specifier matching the string version + * at the beginning of (devspec). Return a pointer to the remaining + * text in (path). + * + * In all cases, the beginning of (devspec) is compared to the names + * of known devices in the device switch, and then any following text + * is parsed according to the rules applied to the device type. + * + * For disk-type devices, the syntax is: + * + * disk<unit>[s<slice>][<partition>]: + * + */ +static int +alpha_parsedev(struct alpha_devdesc **dev, char *devspec, char **path) +{ + struct alpha_devdesc *idev; + struct devsw *dv; + int i, unit, slice, partition, err; + char *cp, *np; + + /* minimum length check */ + if (strlen(devspec) < 2) + return(EINVAL); + + /* look for a device that matches */ + for (i = 0, dv = NULL; devsw[i] != NULL; i++) { + if (!strncmp(devspec, devsw[i]->dv_name, strlen(devsw[i]->dv_name))) { + dv = devsw[i]; + break; + } + } + + if (dv == NULL) + return(ENOENT); + idev = malloc(sizeof(struct alpha_devdesc)); + err = 0; + np = (devspec + strlen(dv->dv_name)); + + switch(dv->dv_type) { + case DEVT_NONE: /* XXX what to do here? Do we care? */ + break; + + case DEVT_DISK: + unit = -1; + slice = -1; + partition = -1; + if (*np && (*np != ':')) { + unit = strtol(np, &cp, 10); /* next comes the unit number */ + if (cp == np) { + err = EUNIT; + goto fail; + } + if (*cp == 's') { /* got a slice number */ + np = cp + 1; + slice = strtol(np, &cp, 10); + if (cp == np) { + err = ESLICE; + goto fail; + } + } + if (*cp && (*cp != ':')) { + partition = *cp - 'a'; /* get a partition number */ + if ((partition < 0) || (partition >= MAXPARTITIONS)) { + err = EPART; + goto fail; + } + cp++; + } + } + if (*cp && (*cp != ':')) { + err = EINVAL; + goto fail; + } + + idev->d_kind.srmdisk.unit = unit; + idev->d_kind.srmdisk.slice = slice; + idev->d_kind.srmdisk.partition = partition; + if (path != NULL) + *path = (*cp == 0) ? cp : cp + 1; + break; + + case DEVT_NET: + unit = 0; + + if (*np && (*np != ':')) { + unit = strtol(np, &cp, 0); /* get unit number if present */ + if (cp == np) { + err = EUNIT; + goto fail; + } + } + if (*cp && (*cp != ':')) { + err = EINVAL; + goto fail; + } + + idev->d_kind.netif.unit = unit; + if (path != NULL) + *path = (*cp == 0) ? cp : cp + 1; + break; + + default: + err = EINVAL; + goto fail; + } + idev->d_dev = dv; + idev->d_type = dv->dv_type; + if (dev != NULL) + *dev = idev; + return(0); + + fail: + free(idev); + return(err); +} + + +char * +alpha_fmtdev(void *vdev) +{ + struct alpha_devdesc *dev = (struct alpha_devdesc *)vdev; + static char buf[128]; /* XXX device length constant? */ + char *cp; + + switch(dev->d_type) { + case DEVT_NONE: + strcpy(buf, "(no device)"); + break; + + case DEVT_DISK: + cp = buf; + cp += sprintf(cp, "%s%d", dev->d_dev->dv_name, dev->d_kind.srmdisk.unit); + if (dev->d_kind.srmdisk.slice > 0) + cp += sprintf(cp, "s%d", dev->d_kind.srmdisk.slice); + if (dev->d_kind.srmdisk.partition >= 0) + cp += sprintf(cp, "%c", dev->d_kind.srmdisk.partition + 'a'); + strcat(cp, ":"); + break; + + case DEVT_NET: + sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_kind.netif.unit); + break; + } + return(buf); +} + + +/* + * Set currdev to suit the value being supplied in (value) + */ +int +alpha_setcurrdev(struct env_var *ev, int flags, void *value) +{ + struct alpha_devdesc *ncurr; + int rv; + + if ((rv = alpha_parsedev(&ncurr, value, NULL)) != 0) + return(rv); + free(ncurr); + env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL); + return(0); +} + diff --git a/sys/boot/alpha/libalpha/elf_freebsd.c b/sys/boot/alpha/libalpha/elf_freebsd.c new file mode 100644 index 0000000..4f618d8 --- /dev/null +++ b/sys/boot/alpha/libalpha/elf_freebsd.c @@ -0,0 +1,316 @@ +/* $Id$ */ +/* $NetBSD: loadfile.c,v 1.10 1998/06/25 06:45:46 ross Exp $ */ + +/*- + * Copyright (c) 1997 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center. + * + * 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 the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +/* + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Ralph Campbell. + * + * 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 the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University 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 REGENTS 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 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. + * + * @(#)boot.c 8.1 (Berkeley) 6/10/93 + */ + +#include <stand.h> +#include <string.h> + +#include <sys/param.h> +#include <machine/elf.h> +#include <machine/prom.h> +#include <machine/rpb.h> +#include <machine/bootinfo.h> + +#include "bootstrap.h" + +#define _KERNEL + +struct elf_kernel_module +{ + struct loaded_module m; + vm_offset_t m_entry; /* module entrypoint */ + struct bootinfo_v1 m_bi; /* legacy bootinfo */ +}; + +static int elf_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result); +static int elf_exec(struct loaded_module *amp); +static int elf_load(int fd, Elf_Ehdr *elf, vm_offset_t dest); + +struct module_format alpha_elf = { MF_ELF, elf_loadmodule, elf_exec }; + +vm_offset_t ffp_save, ptbr_save; +vm_offset_t ssym, esym; + +static int +elf_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result) +{ + struct elf_kernel_module *mp; + Elf_Ehdr hdr; + ssize_t nr; + int fd, rval; + + /* Open the file. */ + rval = 1; + if ((fd = open(filename, 0)) < 0) { + (void)printf("open %s: %s\n", filename, strerror(errno)); + goto err; + } + + /* Read the exec header. */ + if ((nr = read(fd, &hdr, sizeof(hdr))) != sizeof(hdr)) { + (void)printf("read header: %s\n", strerror(errno)); + goto err; + } + + if (!(hdr.e_ident[0] == ELFMAG0 + && hdr.e_ident[1] == ELFMAG1 + && hdr.e_ident[2] == ELFMAG2 + && hdr.e_ident[3] == ELFMAG3)) { + (void)printf("%s: unknown executable format\n", filename); + goto err; + } + + /* + * Ok, we think this is for us. + */ + mp = malloc(sizeof(struct elf_kernel_module)); + mp->m.m_name = strdup(filename); /* XXX should we prune the name? */ + mp->m.m_type = "elf kernel"; /* XXX only if that's what we really are */ + mp->m.m_args = NULL; /* XXX should we put the bootstrap args here and parse later? */ + mp->m.m_flags = MF_ELF; /* we're an elf kernel */ + mp->m_entry = hdr.e_entry; + if (dest == 0) + dest = (vm_offset_t) hdr.e_entry; + if (mod_findmodule(NULL, mp->m.m_type) != NULL) { + printf("elf_loadmodule: kernel already loaded\n"); + rval = EPERM; + goto err; + } + rval = elf_load(fd, &hdr, (vm_offset_t) dest); + + *result = (struct loaded_module *)mp; + + err: + if (fd >= 0) + (void)close(fd); + return (rval); +} + +static int +elf_load(int fd, Elf_Ehdr *elf, vm_offset_t dest) +{ + Elf_Shdr *shp; + Elf_Off off; + int i; + int first = 1; + int havesyms; + + for (i = 0; i < elf->e_phnum; i++) { + Elf_Phdr phdr; + if (lseek(fd, elf->e_phoff + sizeof(phdr) * i, SEEK_SET) + == -1) { + (void)printf("lseek phdr: %s\n", strerror(errno)); + return (1); + } + if (read(fd, (void *)&phdr, sizeof(phdr)) != sizeof(phdr)) { + (void)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. */ + (void)printf("%s%lu", first ? "" : "+", phdr.p_filesz); + if (lseek(fd, phdr.p_offset, SEEK_SET) == -1) { + (void)printf("lseek text: %s\n", strerror(errno)); + return (1); + } + if (read(fd, (void *)phdr.p_vaddr, phdr.p_filesz) != + phdr.p_filesz) { + (void)printf("read text: %s\n", strerror(errno)); + return (1); + } + if (first || ffp_save < phdr.p_vaddr + phdr.p_memsz) + ffp_save = phdr.p_vaddr + phdr.p_memsz; + + /* Zero out bss. */ + if (phdr.p_filesz < phdr.p_memsz) { + (void)printf("+%lu", phdr.p_memsz - phdr.p_filesz); + bzero((void *)(phdr.p_vaddr + phdr.p_filesz), + phdr.p_memsz - phdr.p_filesz); + } + first = 0; + } + /* + * Copy the ELF and section headers. + */ + ffp_save = roundup(ffp_save, sizeof(long)); + ssym = ffp_save; + bcopy(elf, (void *)ffp_save, sizeof(Elf_Ehdr)); + ffp_save += sizeof(Elf_Ehdr); + if (lseek(fd, elf->e_shoff, SEEK_SET) == -1) { + printf("lseek section headers: %s\n", strerror(errno)); + return (1); + } + if (read(fd, (void *)ffp_save, elf->e_shnum * sizeof(Elf_Shdr)) != + elf->e_shnum * sizeof(Elf_Shdr)) { + printf("read section headers: %s\n", strerror(errno)); + return (1); + } + shp = (Elf_Shdr *)ffp_save; + ffp_save += roundup((elf->e_shnum * sizeof(Elf_Shdr)), sizeof(long)); + + /* + * Now load the symbol sections themselves. Make sure the + * sections are aligned. Don't bother with string tables if + * there are no symbol sections. + */ + off = roundup((sizeof(Elf_Ehdr) + (elf->e_shnum * sizeof(Elf_Shdr))), + sizeof(long)); + for (havesyms = i = 0; i < elf->e_shnum; i++) + if (shp[i].sh_type == SHT_SYMTAB) + havesyms = 1; + for (first = 1, i = 0; i < elf->e_shnum; i++) { + if (shp[i].sh_type == SHT_SYMTAB || + shp[i].sh_type == SHT_STRTAB) { + printf("%s%ld", first ? " [" : "+", shp[i].sh_size); + if (havesyms) { + if (lseek(fd, shp[i].sh_offset, SEEK_SET) + == -1) { + printf("\nlseek symbols: %s\n", + strerror(errno)); + return (1); + } + if (read(fd, (void *)ffp_save, shp[i].sh_size) + != shp[i].sh_size) { + printf("\nread symbols: %s\n", + strerror(errno)); + return (1); + } + } + ffp_save += roundup(shp[i].sh_size, sizeof(long)); + shp[i].sh_offset = off; + off += roundup(shp[i].sh_size, sizeof(long)); + first = 0; + } + } + esym = ffp_save; + + if (first == 0) + printf("]"); + + ffp_save = ALPHA_K0SEG_TO_PHYS((ffp_save + PAGE_MASK) & ~PAGE_MASK) + >> PAGE_SHIFT; + ffp_save += 2; /* XXX OSF/1 does this, no idea why. */ + + (void)printf("\n"); + + /* + * Frob the copied ELF header to give information relative + * to ssym. + */ + elf = (Elf_Ehdr *)ssym; + elf->e_phoff = 0; + elf->e_shoff = sizeof(Elf_Ehdr); + elf->e_phentsize = 0; + elf->e_phnum = 0; + + return (0); +} + +static int +elf_exec(struct loaded_module *amp) +{ + struct elf_kernel_module *mp = (struct elf_kernel_module *)amp; + static struct bootinfo_v1 bootinfo_v1; + + /* + * Fill in the bootinfo for the kernel. + */ + bzero(&bootinfo_v1, sizeof(bootinfo_v1)); + bootinfo_v1.ssym = ssym; + bootinfo_v1.esym = esym; + strncpy(bootinfo_v1.booted_kernel, mp->m.m_name, + sizeof(bootinfo_v1.booted_kernel)); + prom_getenv(PROM_E_BOOTED_OSFLAGS, bootinfo_v1.boot_flags, + sizeof(bootinfo_v1.boot_flags)); + bootinfo_v1.hwrpb = (void *)HWRPB_ADDR; + bootinfo_v1.hwrpbsize = ((struct rpb *)HWRPB_ADDR)->rpb_size; + bootinfo_v1.cngetc = NULL; + bootinfo_v1.cnputc = NULL; + bootinfo_v1.cnpollc = NULL; + + printf("Entering %s at 0x%lx...\n", mp->m.m_name, mp->m_entry); + closeall(); + alpha_pal_imb(); + (*(void (*)())mp->m_entry)(ffp_save, ptbr_save, + BOOTINFO_MAGIC, &bootinfo_v1, 1, 0); +} + + + diff --git a/sys/boot/alpha/libalpha/getsecs.c b/sys/boot/alpha/libalpha/getsecs.c new file mode 100644 index 0000000..f234a37 --- /dev/null +++ b/sys/boot/alpha/libalpha/getsecs.c @@ -0,0 +1,37 @@ +/* + * $Id$ + * From: $NetBSD: getsecs.c,v 1.5 1998/01/05 07:02:49 perry Exp $ + */ + +#include <sys/param.h> +#include <machine/prom.h> +#include <machine/rpb.h> + +int +getsecs() +{ + static long tnsec; + static long lastpcc, wrapsecs; + long curpcc; + + if (tnsec == 0) { + tnsec = 1; + lastpcc = alpha_rpcc() & 0xffffffff; + wrapsecs = (0xffffffff / + ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq) + 1; + +#if 0 + printf("getsecs: cc freq = %d, time to wrap = %d\n", + ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq, wrapsecs); +#endif + } + + curpcc = alpha_rpcc() & 0xffffffff; + if (curpcc < lastpcc) + curpcc += 0x100000000; + + tnsec += ((curpcc - lastpcc) * 1000000000) / ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq; + lastpcc = curpcc; + + return (tnsec / 1000000000); +} diff --git a/sys/boot/alpha/libalpha/libalpha.h b/sys/boot/alpha/libalpha/libalpha.h new file mode 100644 index 0000000..24b29d2 --- /dev/null +++ b/sys/boot/alpha/libalpha/libalpha.h @@ -0,0 +1,107 @@ +/* $Id$ */ + +/* + * Copyright (c) 1996 + * Matthias Drochner. 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 for the NetBSD Project + * by Matthias Drochner. + * 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 AUTHOR 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. + * + */ + + +/* + * alpha fully-qualified device descriptor + */ +struct alpha_devdesc +{ + struct devsw *d_dev; + int d_type; +#define DEVT_NONE 0 +#define DEVT_DISK 1 +#define DEVT_NET 2 + union + { + struct + { + int unit; + int slice; + int partition; + } srmdisk; + struct + { + int unit; /* XXX net layer lives over these? */ + } netif; + } d_kind; +}; + +extern int alpha_getdev(void **vdev, char *devspec, char **path); +extern char *alpha_fmtdev(void *vdev); +extern int alpha_setcurrdev(struct env_var *ev, int flags, void *value); + +#define MAXDEV 31 /* maximum number of distinct devices */ + +typedef unsigned long physaddr_t; + +/* exported devices XXX rename? */ +extern struct devsw srmdisk; +extern struct netif_driver srmnet; + +/* this is in startup code */ +extern void delay(int); +extern void reboot(void); + +/* + * alpha module loader + */ +#define MF_FORMATMASK 0xf +#define MF_AOUT 0 /* not supported */ +#define MF_ELF 1 + +struct alpha_module +{ + char *m_name; /* module name */ + char *m_type; /* module type, eg 'kernel', 'pnptable', etc. */ + char *m_args; /* arguments for the module */ + int m_flags; /* 0xffff reserved for arch-specific use */ + struct alpha_module *m_next; /* next module */ + physaddr_t m_addr; /* load address */ + size_t m_size; /* module size */ +}; + +struct alpha_format +{ + int l_format; + /* Load function must return EFTYPE if it can't handle the module supplied */ + int (* l_load)(char *filename, physaddr_t dest, struct alpha_module **result); + int (* l_exec)(struct alpha_module *amp); +}; +extern struct alpha_format *formats[]; /* supplied by consumer */ +extern struct alpha_format alpha_elf; + +extern int alpha_boot(void); +extern int alpha_autoload(void); +extern struct alpha_module *alpha_findmodule(char *name, char *type); diff --git a/sys/boot/alpha/libalpha/pal.S b/sys/boot/alpha/libalpha/pal.S new file mode 100644 index 0000000..c33f317 --- /dev/null +++ b/sys/boot/alpha/libalpha/pal.S @@ -0,0 +1,351 @@ +/* + * $Id$ + * From: $NetBSD: pal.s,v 1.12 1998/02/27 03:44:53 thorpej Exp $ + */ + +/* + * Copyright (c) 1994, 1995 Carnegie-Mellon University. + * All rights reserved. + * + * Author: Chris G. Demetriou + * + * Permission to use, copy, modify and distribute this software and + * its documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND + * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ + +/* + * The various OSF PALcode routines. + * + * The following code is originally derived from pages: (I) 6-5 - (I) 6-7 + * and (III) 2-1 - (III) 2-25 of "Alpha Architecture Reference Manual" by + * Richard L. Sites. + * + * Updates taken from pages: (II-B) 2-1 - (II-B) 2-33 of "Alpha AXP + * Architecture Reference Manual, Second Edition" by Richard L. Sites + * and Richard T. Witek. + */ + +#include <machine/asm.h> + +inc2: .stabs __FILE__,132,0,0,inc2; .loc 1 __LINE__ +/* + * alpha_rpcc: read process cycle counter (XXX INSTRUCTION, NOT PALcode OP) + */ + .text +LEAF(alpha_rpcc,1) + rpcc v0 + RET + END(alpha_rpcc) + +/* + * alpha_mb: memory barrier (XXX INSTRUCTION, NOT PALcode OP) + */ + .text +LEAF(alpha_mb,0) + mb + RET + END(alpha_mb) + +/* + * alpha_wmb: write memory barrier (XXX INSTRUCTION, NOT PALcode OP) + */ + .text +LEAF(alpha_wmb,0) + /* wmb XXX */ + mb /* XXX */ + RET + END(alpha_wmb) + +/* + * alpha_amask: read architecture features (XXX INSTRUCTION, NOT PALcode OP) + * + * Arguments: + * a0 bitmask of features to test + * + * Returns: + * v0 bitmask - bit is _cleared_ if feature is supported + */ + .text +LEAF(alpha_amask,1) + amask a0, v0 + RET + END(alpha_amask) + +/* + * alpha_implver: read implementation version (XXX INSTRUCTION, NOT PALcode OP) + * + * Returns: + * v0 implementation version - see <machine/alpha_cpu.h> + */ + .text +LEAF(alpha_implver,0) +#if 0 + implver 0x1, v0 +#else + .long 0x47e03d80 /* XXX gas(1) does the Wrong Thing */ +#endif + RET + END(alpha_implver) + +/* + * alpha_pal_imb: I-Stream memory barrier. [UNPRIVILEGED] + * (Makes instruction stream coherent with data stream.) + */ + .text +LEAF(alpha_pal_imb,0) + call_pal PAL_imb + RET + END(alpha_pal_imb) + +/* + * alpha_pal_cflush: Cache flush [PRIVILEGED] + * + * Flush the entire physical page specified by the PFN specified in + * a0 from any data caches associated with the current processor. + * + * Arguments: + * a0 page frame number of page to flush + */ + .text +LEAF(alpha_pal_cflush,1) + call_pal PAL_cflush + RET + END(alpha_pal_cflush) + +/* + * alpha_pal_draina: Drain aborts. [PRIVILEGED] + */ + .text +LEAF(alpha_pal_draina,0) + call_pal PAL_draina + RET + END(alpha_pal_draina) + +/* + * alpha_pal_halt: Halt the processor. [PRIVILEGED] + */ + .text +LEAF(alpha_pal_halt,0) + call_pal PAL_halt + br zero,alpha_pal_halt /* Just in case */ + RET + END(alpha_pal_halt) + +/* + * alpha_pal_rdmces: Read MCES processor register. [PRIVILEGED] + * + * Return: + * v0 current MCES value + */ + .text +LEAF(alpha_pal_rdmces,1) + call_pal PAL_OSF1_rdmces + RET + END(alpha_pal_rdmces) + +/* + * alpha_pal_rdps: Read processor status. [PRIVILEGED] + * + * Return: + * v0 current PS value + */ + .text +LEAF(alpha_pal_rdps,0) + call_pal PAL_OSF1_rdps + RET + END(alpha_pal_rdps) + +/* + * alpha_pal_rdusp: Read user stack pointer. [PRIVILEGED] + * + * Return: + * v0 current user stack pointer + */ + .text +LEAF(alpha_pal_rdusp,0) + call_pal PAL_OSF1_rdusp + RET + END(alpha_pal_rdusp) + +/* + * alpha_pal_rdval: Read system value. [PRIVILEGED] + * + * Returns the sysvalue in v0, allowing access to a 64-bit + * per-processor value for use by the operating system. + * + * Return: + * v0 sysvalue + */ + .text +LEAF(alpha_pal_rdval,0) + call_pal PAL_OSF1_rdval + RET + END(alpha_pal_rdval) + +/* + * alpha_pal_swpipl: Swap Interrupt priority level. [PRIVILEGED] + * _alpha_pal_swpipl: Same, from profiling code. [PRIVILEGED] + * + * Arguments: + * a0 new IPL + * + * Return: + * v0 old IPL + */ + .text +LEAF(alpha_pal_swpipl,1) + call_pal PAL_OSF1_swpipl + RET + END(alpha_pal_swpipl) + +LEAF_NOPROFILE(_alpha_pal_swpipl,1) + call_pal PAL_OSF1_swpipl + RET + END(_alpha_pal_swpipl) + +/* + * alpha_pal_tbi: Translation buffer invalidate. [PRIVILEGED] + * + * Arguments: + * a0 operation selector + * a1 address to operate on (if necessary) + */ + .text +LEAF(alpha_pal_tbi,2) + call_pal PAL_OSF1_tbi + RET + END(alpha_pal_tbi) + +/* + * alpha_pal_whami: Who am I? [PRIVILEGED] + * + * Return: + * v0 processor number + */ + .text +LEAF(alpha_pal_whami,0) + call_pal PAL_OSF1_whami + RET + END(alpha_pal_whami) + +/* + * alpha_pal_wrent: Write system entry address. [PRIVILEGED] + * + * Arguments: + * a0 new vector + * a1 vector selector + */ + .text +LEAF(alpha_pal_wrent,2) + call_pal PAL_OSF1_wrent + RET + END(alpha_pal_wrent) + +/* + * alpha_pal_wrfen: Write floating-point enable. [PRIVILEGED] + * + * Arguments: + * a0 new enable value (val & 0x1 -> enable). + */ + .text +LEAF(alpha_pal_wrfen,1) + call_pal PAL_OSF1_wrfen + RET + END(alpha_pal_wrfen) + +/* + * alpha_pal_wripir: Write interprocessor interrupt request. [PRIVILEGED] + * + * Generate an interprocessor interrupt on the processor specified by + * processor number in a0. + * + * Arguments: + * a0 processor to interrupt + */ + .text +LEAF(alpha_pal_wripir,1) + call_pal PAL_ipir + RET + END(alpha_pal_wripir) + +/* + * alpha_pal_wrusp: Write user stack pointer. [PRIVILEGED] + * + * Arguments: + * a0 new user stack pointer + */ + .text +LEAF(alpha_pal_wrusp,1) + call_pal PAL_OSF1_wrusp + RET + END(alpha_pal_wrusp) + +/* + * alpha_pal_wrvptptr: Write virtual page table pointer. [PRIVILEGED] + * + * Arguments: + * a0 new virtual page table pointer + */ + .text +LEAF(alpha_pal_wrvptptr,1) + call_pal PAL_OSF1_wrvptptr + RET + END(alpha_pal_wrvptptr) + +/* + * alpha_pal_wrmces: Write MCES processor register. [PRIVILEGED] + * + * Arguments: + * a0 value to write to MCES + */ + .text +LEAF(alpha_pal_wrmces,1) + call_pal PAL_OSF1_wrmces + RET + END(alpha_pal_wrmces) + +/* + * alpha_pal_wrval: Write system value. [PRIVILEGED] + * + * Write the value passed in a0 to this processor's sysvalue. + * + * Arguments: + * a0 value to write to sysvalue + */ +LEAF(alpha_pal_wrval,1) + call_pal PAL_OSF1_wrval + RET + END(alpha_pal_wrval) + +/* + * alpha_pal_swpctx: Swap context. [PRIVILEGED] + * + * Switch to a new process context. + * + * Arguments: + * a0 physical address of hardware PCB describing context + * + * Returns: + * v0 physical address of hardware PCB describing previous context + */ +LEAF(alpha_pal_swpctx,1) + call_pal PAL_OSF1_swpctx + RET + END(alpha_pal_swpctx) diff --git a/sys/boot/alpha/libalpha/prom.c b/sys/boot/alpha/libalpha/prom.c new file mode 100644 index 0000000..535ce31 --- /dev/null +++ b/sys/boot/alpha/libalpha/prom.c @@ -0,0 +1,165 @@ +/* $Id$ */ +/* $NetBSD: prom.c,v 1.3 1997/09/06 14:03:58 drochner Exp $ */ + +/* + * Mach Operating System + * Copyright (c) 1992 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ + +#include <sys/types.h> + +#include <machine/prom.h> +#include <machine/rpb.h> + +#include "common.h" +#include "bootstrap.h" + +int console; + +static void prom_probe(struct console *cp); +static int prom_init(int); +void prom_putchar(int); +int prom_getchar(void); +static int prom_poll(void); + +struct console promconsole = { + "prom", + "SRM firmware console", + 0, + prom_probe, + prom_init, + prom_putchar, + prom_getchar, + prom_poll, +}; + +void +init_prom_calls() +{ + extern struct prom_vec prom_dispatch_v; + struct rpb *r; + struct crb *c; + char buf[4]; + + r = (struct rpb *)HWRPB_ADDR; + c = (struct crb *)((u_int8_t *)r + r->rpb_crb_off); + + prom_dispatch_v.routine_arg = c->crb_v_dispatch; + prom_dispatch_v.routine = c->crb_v_dispatch->entry_va; + + /* Look for console tty. */ + prom_getenv(PROM_E_TTY_DEV, buf, 4); + console = buf[0] - '0'; +} + +static void +prom_probe(struct console *cp) +{ + init_prom_calls(); + cp->c_flags |= C_PRESENTIN|C_PRESENTOUT; +} + +static int +prom_init(int arg) +{ + return 0; +} + +void +prom_putchar(int c) +{ + prom_return_t ret; + char cbuf; + + cbuf = c; + do { + ret.bits = prom_dispatch(PROM_R_PUTS, console, &cbuf, 1); + } while ((ret.u.retval & 1) == 0); +} + +static int saved_char = -1; + +int +prom_getchar() +{ + prom_return_t ret; + + if (saved_char != -1) { + int c = saved_char; + saved_char = -1; + return c; + } + + for (;;) { + ret.bits = prom_dispatch(PROM_R_GETC, console); + if (ret.u.status == 0 || ret.u.status == 1) + return (ret.u.retval); + } +} + +int +prom_poll() +{ + prom_return_t ret; + + if (saved_char != -1) + return 1; + + ret.bits = prom_dispatch(PROM_R_GETC, console); + if (ret.u.status == 0 || ret.u.status == 1) { + saved_char = ret.u.retval; + return 1; + } + + return 0; +} + +int +prom_getenv(id, buf, len) + int id, len; + char *buf; +{ + prom_return_t ret; + + ret.bits = prom_dispatch(PROM_R_GETENV, id, buf, len-1); + if (ret.u.status & 0x4) + ret.u.retval = 0; + buf[ret.u.retval] = '\0'; + + return (ret.u.retval); +} + +int +prom_open(dev, len) + char *dev; + int len; +{ + prom_return_t ret; + + ret.bits = prom_dispatch(PROM_R_OPEN, dev, len); + if (ret.u.status & 0x4) + return (-1); + else + return (ret.u.retval); +} diff --git a/sys/boot/alpha/libalpha/prom_disp.S b/sys/boot/alpha/libalpha/prom_disp.S new file mode 100644 index 0000000..6d5e087 --- /dev/null +++ b/sys/boot/alpha/libalpha/prom_disp.S @@ -0,0 +1,118 @@ +/* + * $Id$ + * From: $NetBSD: prom_disp.S,v 1.2 1997/04/06 08:41:00 cgd Exp $ + */ + +/* + * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University. + * All rights reserved. + * + * Author: Chris G. Demetriou + * + * Permission to use, copy, modify and distribute this software and + * its documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND + * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ + +#ifndef _LOCORE +#define ASSEMBLER +#include <machine/asm.h> +#include <machine/prom.h> +#include <machine/rpb.h> +#endif + + .globl prom_dispatch_v + .comm prom_dispatch_v,16 + + .text + .align 4 + +/* + * Dispatcher routine. Implements prom's calling machinery, saves our + * callee-saved registers as required by C. + */ +#define D_RA (7*8) +#define D_S0 (8*8) +#define D_S1 (9*8) +#define D_S2 (10*8) +#define D_S3 (11*8) +#define D_S4 (12*8) +#define D_S5 (13*8) +#define D_S6 (14*8) +#define DISPATCH_FRAME_SIZE (15*8) +#define DISPATCH_REGS IM_RA|IM_S0|IM_S1|IM_S2|IM_S3|IM_S4|IM_S5|IM_S6 + +NESTED(prom_dispatch, 5, DISPATCH_FRAME_SIZE, ra, DISPATCH_REGS, 0) + LDGP(pv) + + lda sp, -DISPATCH_FRAME_SIZE(sp) + stq ra, D_RA(sp) + stq s0, D_S0(sp) + stq s1, D_S1(sp) + stq s2, D_S2(sp) + stq s3, D_S3(sp) + stq s4, D_S4(sp) + stq s5, D_S5(sp) + stq s6, D_S6(sp) + + /* Lord have mercy because.. I would not. */ +/* #define STUPID_PROM_IS_32_BITS */ +#ifdef STUPID_PROM_IS_32_BITS + ldah s0, 0x2000(zero) /* hack for hack */ + lda s0, (0x2000-8)(s0) + + stq sp, 0(s0) + or s0, zero, sp +#endif /* STUPID_PROM_IS_32_BITS */ + + lda pv, prom_dispatch_v + ldq v0, 0(pv) /* routine */ + ldq pv, 8(pv) /* routine_arg */ + + jsr ra, (v0) + +#ifdef STUPID_PROM_IS_32_BITS + ldah s0, 0x2000(zero) /* hack for hack */ + lda s0, (0x2000-8)(s0) + + ldq sp, 0(s0) +#endif /* STUPID_PROM_IS_32_BITS */ + + ldq ra, D_RA(sp) + ldq s0, D_S0(sp) + ldq s1, D_S1(sp) + ldq s2, D_S2(sp) + ldq s3, D_S3(sp) + ldq s4, D_S4(sp) + ldq s5, D_S5(sp) + ldq s6, D_S6(sp) + lda sp, DISPATCH_FRAME_SIZE(sp) + RET +END(prom_dispatch) + +#undef D_RA +#undef D_S0 +#undef D_S1 +#undef D_S2 +#undef D_S3 +#undef D_S4 +#undef D_S5 +#undef D_S6 +#undef DISPATCH_FRAME_SIZE +#undef DISPATCH_REGS diff --git a/sys/boot/alpha/libalpha/prom_swpal.S b/sys/boot/alpha/libalpha/prom_swpal.S new file mode 100644 index 0000000..b4d3cac --- /dev/null +++ b/sys/boot/alpha/libalpha/prom_swpal.S @@ -0,0 +1,139 @@ +/* + * $Id$ + * From: $NetBSD: prom_swpal.S,v 1.2 1997/04/06 08:41:01 cgd Exp $ + */ + +/* + * Copyright (c) 1994, 1995 Carnegie-Mellon University. + * All rights reserved. + * + * Author: Keith Bostic + * + * Permission to use, copy, modify and distribute this software and + * its documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND + * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie the + * rights to redistribute these changes. + */ + +#define ASSEMBLER +#include <machine/asm.h> +#include <machine/prom.h> +#include <machine/rpb.h> + +/* Offsets from base of HWRPB. */ +#define RPB_SELFREF 0x00 +#define RPB_SLOTSIZE 0x98 +#define RPB_PERCPU_OFF 0xA0 + +/* Offsets in a boot PCB. */ +#define PCB_KSP 0x00 +#define PCB_PTBR 0x10 +#define PCB_ASN 0x1c +#define PCB_FEN 0x28 + +/* Pal values. */ +#define PAL_RESERVED 0 /* Reserved to Digital. */ +#define PAL_VMS 1 /* VMS */ +#define PAL_OSF 2 /* OSF */ + +/* + * PAL code switch routine. + */ +#define D_RA (7*8) +#define D_S0 (8*8) +#define D_S1 (9*8) +#define D_S2 (10*8) +#define D_S3 (11*8) +#define D_S4 (12*8) +#define D_S5 (13*8) +#define PALSW_FRAME_SIZE (14*8) +#define PALSW_REGS IM_RA|IM_S0|IM_S1|IM_S2|IM_S3|IM_S4|IM_S5 + + .comm ptbr_save,8 + + .text + .align 4 + +NESTED(switch_palcode, 0, PALSW_FRAME_SIZE, ra, PALSW_REGS, 0) + LDGP(pv) +/* ldgp gp, 0(pv)*/ + + lda sp, -PALSW_FRAME_SIZE(sp) + stq ra, D_RA(sp) + stq s0, D_S0(sp) + stq s1, D_S1(sp) + stq s2, D_S2(sp) + stq s3, D_S3(sp) + stq s4, D_S4(sp) + stq s5, D_S5(sp) + + stq pv, 0(sp) + stq gp, 8(sp) + + ldiq s0, HWRPB_ADDR /* s0 HWRPB_ADDR */ + ldq s1, RPB_SLOTSIZE(s0) + call_pal PAL_VMS_mfpr_whami + mulq s1, v0, s1 /* s1 per_cpu offset from base */ + ldq s2, RPB_PERCPU_OFF(s0) + addq s0, s2, s2 + addq s2, s1, s2 /* s2 PCB (virtual) */ + + call_pal PAL_VMS_mfpr_ptbr + stq v0, PCB_PTBR(s2) + stq v0, ptbr_save /* save PTBR for the kernel */ + stl zero, PCB_ASN(s2) + stq zero, PCB_FEN(s2) + stq sp, PCB_KSP(s2) + + ldq t0, RPB_SELFREF(s0) /* HWRBP base (physical) */ + ldq t1, RPB_PERCPU_OFF(s0) + addq t0, t1, t0 + addq t0, s1, t0 /* PCB base (phys) */ + stq t0, 16(sp) + + call_pal PAL_VMS_mfpr_vptb + mov v0, a3 + ldiq a0, PAL_OSF + lda a1, contin + ldq a2, 16(sp) + + call_pal PAL_swppal /* a0, a1, a2, a3 */ + +contin: ldq pv, 0(sp) + ldq gp, 8(sp) + + ldq ra, D_RA(sp) + ldq s0, D_S0(sp) + ldq s1, D_S1(sp) + ldq s2, D_S2(sp) + ldq s3, D_S3(sp) + ldq s4, D_S4(sp) + ldq s5, D_S5(sp) + lda sp, PALSW_FRAME_SIZE(sp) + RET +END(switch_palcode) + +#undef D_RA +#undef D_S0 +#undef D_S1 +#undef D_S2 +#undef D_S3 +#undef D_S4 +#undef D_S5 +#undef PALSW_FRAME_SIZE +#undef PALSW_REGS diff --git a/sys/boot/alpha/libalpha/reboot.c b/sys/boot/alpha/libalpha/reboot.c new file mode 100644 index 0000000..35750ec --- /dev/null +++ b/sys/boot/alpha/libalpha/reboot.c @@ -0,0 +1,48 @@ +/*- + * Copyright (c) 1998 Doug Rabson + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id$ + */ + +#include <stand.h> +#include <machine/rpb.h> + +void +reboot(void) +{ + struct rpb *hwrpb = (struct rpb *)HWRPB_ADDR; + struct pcs *pcs = LOCATE_PCS(hwrpb, hwrpb->rpb_primary_cpu_id); + pcs->pcs_flags |= PCS_HALT_WARM_BOOT; + alpha_pal_halt(); +} + +void +exit(int code) +{ + struct rpb *hwrpb = (struct rpb *)HWRPB_ADDR; + struct pcs *pcs = LOCATE_PCS(hwrpb, hwrpb->rpb_primary_cpu_id); + pcs->pcs_flags |= PCS_HALT_STAY_HALTED; + alpha_pal_halt(); +} diff --git a/sys/boot/alpha/libalpha/srmdisk.c b/sys/boot/alpha/libalpha/srmdisk.c new file mode 100644 index 0000000..f7427bd --- /dev/null +++ b/sys/boot/alpha/libalpha/srmdisk.c @@ -0,0 +1,334 @@ +/*- + * Copyright (c) 1998 Michael Smith <msmith@freebsd.org> + * Copyright (c) 1998 Doug Rabson <dfr@freebsd.org> + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id$ + */ + +/* + * SRM disk device handling. + * + * Ideas and algorithms from: + * + * - NetBSD libi386/biosdisk.c + * - FreeBSD biosboot/disk.c + * + * XXX Todo: add bad144 support. + */ + +#include <stand.h> + +#include <sys/disklabel.h> +#include <sys/diskslice.h> + +#include <machine/stdarg.h> +#include <machine/prom.h> + +#include "libalpha.h" + +#define SRMDISK_SECSIZE 512 + +#define BUFSIZE (1 * SRMDISK_SECSIZE) +#define MAXBDDEV MAXDEV + +#ifdef DISK_DEBUG +# define D(x) x +#else +# define D(x) +#endif + +static int bd_init(void); +static int bd_strategy(void *devdata, int flag, daddr_t dblk, size_t size, void *buf, size_t *rsize); +static int bd_open(struct open_file *f, void *vdev); +static int bd_close(struct open_file *f); + +struct open_disk { + int od_fd; + int od_unit; /* our unit number */ + int od_boff; /* block offset from beginning of SRM disk */ + int od_flags; +#define BD_MODEMASK 0x3 +#define BD_MODEINT13 0x0 +#define BD_MODEEDD1 0x1 +#define BD_MODEEDD3 0x2 +#define BD_FLOPPY (1<<2) + u_char od_buf[BUFSIZE]; /* transfer buffer (do we want/need this?) */ +}; + +struct devsw srmdisk = { + "disk", + DEVT_DISK, + bd_init, + bd_strategy, + bd_open, + bd_close, + noioctl +}; + +/* + * List of SRM devices, translation from disk unit number to + * SRM unit number. + */ +static struct +{ + char bd_name[64]; + int bd_unit; /* SRM unit number */ + int bd_namelen; + int bd_flags; +} bdinfo [MAXBDDEV]; +static int nbdinfo = 0; + +/* + * Quiz SRM for disk devices, save a little info about them. + */ +static int +bd_init(void) +{ + prom_return_t ret; + char devname[64]; + + bdinfo[0].bd_unit = 0; /* XXX */ + bdinfo[0].bd_flags = 0; /* XXX */ + ret.bits = prom_getenv(PROM_E_BOOTED_DEV, + bdinfo[0].bd_name, sizeof(bdinfo[0].bd_name)); + bdinfo[0].bd_namelen = ret.u.retval; + nbdinfo++; + + return (0); +} + +/* + * Attempt to open the disk described by (dev) for use by (f). + * + * Note that the philosophy here is "give them exactly what + * they ask for". This is necessary because being too "smart" + * about what the user might want leads to complications. + * (eg. given no slice or partition value, with a disk that is + * sliced - are they after the first BSD slice, or the DOS + * slice before it?) + */ +static int +bd_open(struct open_file *f, void *vdev) +{ + struct alpha_devdesc *dev = vdev; + struct dos_partition *dptr; + struct open_disk *od; + struct disklabel *lp; + int sector, slice, i; + int error; + int unit; + prom_return_t ret; + + unit = dev->d_kind.srmdisk.unit; + if (unit >= nbdinfo) { + D(printf("attempt to open nonexistent disk\n")); + return(ENXIO); + } + + /* Call the prom to open the disk. */ + ret.bits = prom_open(bdinfo[unit].bd_name, bdinfo[unit].bd_namelen); + if (ret.u.status == 2) + return (ENXIO); + if (ret.u.status == 3) + return (EIO); + + od = (struct open_disk *) malloc(sizeof(struct open_disk)); + if (!od) { + D(printf("srmdiskopen: no memory\n")); + return (ENOMEM); + } + + /* Look up SRM unit number, intialise open_disk structure */ + od->od_fd = ret.u.retval; + od->od_unit = dev->d_kind.srmdisk.unit; + od->od_flags = bdinfo[od->od_unit].bd_flags; + od->od_boff = 0; + error = 0; + +#if 0 + /* Get geometry for this open (removable device may have changed) */ + if (set_geometry(&od->od_ll)) { + D(printf("bd_open: can't get geometry\n")); + error = ENXIO; + goto out; + } +#endif + + /* + * Following calculations attempt to determine the correct value + * for d->od_boff by looking for the slice and partition specified, + * or searching for reasonable defaults. + */ + +#if 0 + /* + * Find the slice in the DOS slice table. + */ + if (readsects(&od->od_ll, 0, 1, od->od_buf, 0)) { + D(printf("bd_open: error reading MBR\n")); + error = EIO; + goto out; + } + + /* + * Check the slice table magic. + */ + if ((od->od_buf[0x1fe] != 0xff) || (od->od_buf[0x1ff] != 0xaa)) { + /* If a slice number was explicitly supplied, this is an error */ + if (dev->d_kind.srmdisk.slice > 0) { + D(printf("bd_open: no slice table/MBR (no magic)\n")); + error = ENOENT; + goto out; + } + sector = 0; + goto unsliced; /* may be a floppy */ + } + dptr = (struct dos_partition *) & od->od_buf[DOSPARTOFF]; + + /* + * XXX No support here for 'extended' slices + */ + if (dev->d_kind.srmdisk.slice <= 0) { + /* + * Search for the first FreeBSD slice; this also works on "unsliced" + * disks, as they contain a "historically bogus" MBR. + */ + for (i = 0; i < NDOSPART; i++, dptr++) + if (dptr->dp_typ == DOSPTYP_386BSD) { + sector = dptr->dp_start; + break; + } + /* Did we find something? */ + if (sector == -1) { + error = ENOENT; + goto out; + } + } else { + /* + * Accept the supplied slice number unequivocally (we may be looking + * for a DOS partition) if we can handle it. + */ + if ((dev->d_kind.srmdisk.slice > NDOSPART) || (dev->d_kind.srmdisk.slice < 1)) { + error = ENOENT; + goto out; + } + dptr += (dev->d_kind.srmdisk.slice - 1); + sector = dptr->dp_start; + } + unsliced: + +#else + sector = 0; +#endif + /* + * Now we have the slice, look for the partition in the disklabel if we have + * a partition to start with. + */ + if (dev->d_kind.srmdisk.partition < 0) { + od->od_boff = sector; /* no partition, must be after the slice */ + } else { + if (bd_strategy(od, F_READ, sector + LABELSECTOR, 512, od->od_buf, 0)) { + D(printf("bd_open: error reading disklabel\n")); + error = EIO; + goto out; + } + lp = (struct disklabel *) (od->od_buf + LABELOFFSET); + if (lp->d_magic != DISKMAGIC) { + D(printf("bd_open: no disklabel\n")); + error = ENOENT; + goto out; + + } else if (dev->d_kind.srmdisk.partition >= lp->d_npartitions) { + + /* + * The partition supplied is out of bounds; this is fatal. + */ + D(printf("partition '%c' exceeds partitions in table (a-'%c')\n", + 'a' + dev->d_kind.srmdisk.partition, 'a' + lp->d_npartitions)); + error = EPART; + goto out; + + } else { + + /* + * Complain if the partition type is wrong and it shouldn't be, but + * regardless accept this partition. + */ + D(if ((lp->d_partitions[dev->d_kind.srmdisk.partition].p_fstype == FS_UNUSED) && + !(od->od_flags & BD_FLOPPY)) /* Floppies often have bogus fstype */ + printf("bd_open: warning, partition marked as unused\n");); + + od->od_boff = lp->d_partitions[dev->d_kind.srmdisk.partition].p_offset; + } + } + /* + * Save our context + */ + f->f_devdata = od; + + out: + if (error) + free(od); + return(error); +} + +static int +bd_close(struct open_file *f) +{ + struct open_disk *od = f->f_devdata; + + (void)prom_close(od->od_fd); + + free(od); + f->f_devdata = NULL; + return(0); +} + +static int +bd_strategy(void *devdata, int flag, daddr_t dblk, size_t size, void *buf, size_t *rsize) +{ + prom_return_t ret; + struct open_disk *od = (struct open_disk *)devdata; + + if (size % SRMDISK_SECSIZE) + panic("bd_strategy: I/O not block multiple"); + + if (flag != F_READ) + return(EROFS); + + if (rsize) + *rsize = 0; + + ret.bits = prom_read(od->od_fd, size, buf, dblk + od->od_boff); + if (ret.u.status) { + D(printf("read error\n")); + return (EIO); + } + + if (rsize) + *rsize = size; + return (0); +} + diff --git a/sys/boot/alpha/libalpha/srmnet.c b/sys/boot/alpha/libalpha/srmnet.c new file mode 100644 index 0000000..d15fa5f --- /dev/null +++ b/sys/boot/alpha/libalpha/srmnet.c @@ -0,0 +1,257 @@ +/* + * $Id$ + * From: $NetBSD: if_prom.c,v 1.10 1997/09/06 14:08:33 drochner Exp $ + */ + +/* + * Copyright (c) 1997 Christopher G. Demetriou. All rights reserved. + * Copyright (c) 1993 Adam Glass + * 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 Adam Glass. + * 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 Adam Glass ``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/types.h> + +#include <netinet/in.h> +#include <netinet/in_systm.h> + +#include <stand.h> +#include <net.h> +#include <netif.h> +#include <machine/prom.h> +#include "bbinfo.h" + +int prom_probe(); +int prom_match(); +void prom_init(); +int prom_get(); +int prom_put(); +void prom_end(); + +extern struct netif_stats prom_stats[]; + +struct netif_dif prom_ifs[] = { +/* dif_unit dif_nsel dif_stats dif_private */ + { 0, 1, &prom_stats[0], 0, }, +}; + +struct netif_stats prom_stats[NENTS(prom_ifs)]; + +struct netbbinfo netbbinfo = { + 0xfeedbabedeadbeef, /* magic number */ + 0, /* set */ + {0, 0, 0, 0, 0, 0}, /* ether address */ + 0, /* force */ + { 0, }, /* pad2 */ + 0, /* cksum */ + 0xfeedbeefdeadbabe, /* magic number */ +}; + +struct netif_driver srmnet = { + "prom", /* netif_bname */ + prom_match, /* netif_match */ + prom_probe, /* netif_probe */ + prom_init, /* netif_init */ + prom_get, /* netif_get */ + prom_put, /* netif_put */ + prom_end, /* netif_end */ + prom_ifs, /* netif_ifs */ + NENTS(prom_ifs) /* netif_nifs */ +}; + +int netfd = 0, broken_firmware; + +int +prom_match(nif, machdep_hint) + struct netif *nif; + void *machdep_hint; +{ + + return (1); +} + +int +prom_probe(nif, machdep_hint) + struct netif *nif; + void *machdep_hint; +{ + + return 0; +} + +int +prom_put(desc, pkt, len) + struct iodesc *desc; + void *pkt; + int len; +{ + + prom_write(netfd, len, pkt, 0); + + return len; +} + + +int +prom_get(desc, pkt, len, timeout) + struct iodesc *desc; + void *pkt; + int len; + time_t timeout; +{ + prom_return_t ret; + time_t t; + int cc; + char hate[2000]; + + t = getsecs(); + cc = 0; + while (((getsecs() - t) < timeout) && !cc) { + if (broken_firmware) + ret.bits = prom_read(netfd, 0, hate, 0); + else + ret.bits = prom_read(netfd, sizeof hate, hate, 0); + if (ret.u.status == 0) + cc = ret.u.retval; + } + if (broken_firmware) + cc = min(cc, len); + else + cc = len; + bcopy(hate, pkt, cc); + + return cc; +} + +extern char *strchr(); + +void +prom_init(desc, machdep_hint) + struct iodesc *desc; + void *machdep_hint; +{ + prom_return_t ret; + char devname[64]; + int devlen, i; + int netbbinfovalid; + char *enet_addr; + u_int64_t *qp, csum; + + broken_firmware = 0; + + csum = 0; + for (i = 0, qp = (u_int64_t *)&netbbinfo; + i < (sizeof netbbinfo / sizeof (u_int64_t)); i++, qp++) + csum += *qp; + netbbinfovalid = (csum == 0); + if (netbbinfovalid) + netbbinfovalid = netbbinfo.set; + + printf("netbbinfo "); + if (!netbbinfovalid) + printf("invalid\n"); + else + printf("valid: force = %d, ea = %s\n", netbbinfo.force, + ether_sprintf(netbbinfo.ether_addr)); + + ret.bits = prom_getenv(PROM_E_BOOTED_DEV, devname, sizeof(devname)); + devlen = ret.u.retval; + + /* Ethernet address is the 9th component of the booted_dev string. */ + enet_addr = devname; + for (i = 0; i < 8; i++) { + enet_addr = strchr(enet_addr, ' '); + if (enet_addr == NULL) { + printf("boot: boot device name does not contain ethernet address.\n"); + goto punt; + } + enet_addr++; + } + if (enet_addr != NULL) { + int hv, lv; + +#define dval(c) (((c) >= '0' && (c) <= '9') ? ((c) - '0') : \ + (((c) >= 'A' && (c) <= 'F') ? (10 + (c) - 'A') : \ + (((c) >= 'a' && (c) <= 'f') ? (10 + (c) - 'a') : -1))) + + for (i = 0; i < 6; i++) { + hv = dval(*enet_addr); enet_addr++; + lv = dval(*enet_addr); enet_addr++; + enet_addr++; + + if (hv == -1 || lv == -1) { + printf("boot: boot device name contains bogus ethernet address.\n"); + goto punt; + } + + desc->myea[i] = (hv << 4) | lv; + } +#undef dval + } + + if (netbbinfovalid && netbbinfo.force) { + printf("boot: using hard-coded ethernet address (forced).\n"); + bcopy(netbbinfo.ether_addr, desc->myea, sizeof desc->myea); + } + + gotit: + printf("boot: ethernet address: %s\n", ether_sprintf(desc->myea)); + + ret.bits = prom_open(devname, devlen + 1); + if (ret.u.status) { + printf("prom_init: open failed: %d\n", ret.u.status); + goto reallypunt; + } + netfd = ret.u.retval; + return; + + punt: + broken_firmware = 1; + if (netbbinfovalid) { + printf("boot: using hard-coded ethernet address.\n"); + bcopy(netbbinfo.ether_addr, desc->myea, sizeof desc->myea); + goto gotit; + } + + reallypunt: + printf("\n"); + printf("Boot device name was: \"%s\"\n", devname); + printf("\n"); + printf("Your firmware may be too old to network-boot NetBSD/Alpha,\n"); + printf("or you might have to hard-code an ethernet address into\n"); + printf("your network boot block with setnetbootinfo(8).\n"); + halt(); +} + +void +prom_end(nif) + struct netif *nif; +{ + prom_close(netfd); +} diff --git a/sys/boot/alpha/libalpha/start.S b/sys/boot/alpha/libalpha/start.S new file mode 100644 index 0000000..53063ab --- /dev/null +++ b/sys/boot/alpha/libalpha/start.S @@ -0,0 +1,85 @@ +/* + * $Id$ + * From: $NetBSD: start.S,v 1.4 1998/03/28 00:54:15 cgd Exp $ + */ + +/* + * Mach Operating System + * Copyright (c) 1992 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ + +#include <machine/asm.h> + +/* + * start -- + * Entry point for boot/standalone programs. + * + * Arguments: + * a0 long (first free physical page) + * + * This is where the prom comes to. Leaves all exception and interrupts + * to prom, runs off prom's stack too. No return values. + */ + .text + .set noreorder /* don't reorder instructions */ + +#define ENTRY_FRAME 32 + +NESTED(start, 1, ENTRY_FRAME, ra, 0, 0) + br pv,Lstartgp +Lstartgp: + LDGP(pv) + +#ifndef PRIMARY_BOOTBLOCK + lda sp,start /* start stack below text */ + lda sp,-ENTRY_FRAME(sp) +#endif + + lda a0,_edata + lda a1,_end + subq a1,a0,a1 + CALL(bzero) + + CALL(main) /* transfer to C */ + +XLEAF(_rtt, 0) +XLEAF(halt, 0) + call_pal PAL_halt /* halt if we ever return */ +END(start) + +/* + * Dummy routine for GCC2. + */ +LEAF(__main,0) + RET +END(__main) + +/* + * cpu_number + * Return the cpu number, using the whami instruction. + */ +LEAF(cpu_number, 0) + call_pal PAL_VMS_mfpr_whami + RET +END(cpu_number) diff --git a/sys/boot/alpha/libalpha/time.c b/sys/boot/alpha/libalpha/time.c new file mode 100644 index 0000000..7b87d2f --- /dev/null +++ b/sys/boot/alpha/libalpha/time.c @@ -0,0 +1,43 @@ +/*- + * Copyright (c) 1998 Doug Rabson + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $Id$ + */ + +#include <stand.h> + +/* + * Can't do this properly without putting PCI chipset drivers into the + * bootstrap :-( + */ + +time_t +time(time_t *tloc) +{ + int secs = getsecs(); + if (tloc) + *tloc = secs; + return secs; +} diff --git a/sys/boot/alpha/netboot/Makefile b/sys/boot/alpha/netboot/Makefile new file mode 100644 index 0000000..210a0f0 --- /dev/null +++ b/sys/boot/alpha/netboot/Makefile @@ -0,0 +1,72 @@ +# $NetBSD: Makefile,v 1.12 1998/02/19 14:18:36 drochner Exp $ + +BASE= netboot +PROG= ${BASE} +NOMAN= +NEWVERSWHAT= "SRM net boot" + +.PATH: ${.CURDIR}/../common + +# i386-specific bootstrap sources +SRCS+= main.c conf.c dev_net.c + +# Always add MI sources +.PATH: ${.CURDIR}/../../common +.include <${.CURDIR}/../../common/Makefile.inc> +CFLAGS+= -mno-fp-regs +CFLAGS+= -I${.CURDIR}/../../common -I${.CURDIR} +# Verbose ls causes extra heap usage +CFLAGS+= -DVERBOSE_LS + +CLEANFILES+= vers.c vers.o gensetdefs.o gensetdefs setdef0.o setdef1.o \ + setdefs.h start.o +CLEANFILES+= ${BASE} ${BASE}.sym ${BASE}.list + +CFLAGS+= -Wall + +# XXX fix to use "standard" versions +LIBSTANDDIR= /home/dfr/FreeBSD/alpha/src/lib/libstand +LIBSTAND= ${LIBSTANDDIR}/obj/libstand.a +CFLAGS+= -I${LIBSTANDDIR} +LIBALPHA= ${.CURDIR}/../libalpha/obj/libalpha.a +CFLAGS+= -I${.CURDIR}/.. +CRT= start.o +STRIP= + +all: ${BASE} + +vers.o: ${.CURDIR}/newvers.sh ${.CURDIR}/Makefile + sh ${.CURDIR}/newvers.sh ${.CURDIR}/version ${NEWVERSWHAT} + ${CC} -c vers.c + +${BASE}: ${BASE}.sym + objcopy -O binary ${BASE}.sym ${BASE} + +${BASE}.nosym: ${BASE}.sym + cp ${BASE}.sym ${BASE}.nosym + strip ${BASE}.nosym + +${BASE}.sym: ${OBJS} ${LIBSTAND} ${LIBALPHA} ${CRT} vers.o setdef0.o setdef1.o + ${LD} -o ${BASE}.sym -M -e start -N -Ttext ${PRIMARY_LOAD_ADDRESS} \ + ${CRT} setdef0.o ${OBJS} setdef1.o \ + vers.o ${LIBSTAND} ${LIBALPHA} ${LIBSTAND} >${.OBJDIR}/${BASE}.list + +start.o: ${.CURDIR}/../libalpha/start.S + ${CC} -c -DPRIMARY_BOOTBLOCK $< + +setdef0.o: setdefs.h + +setdef1.o: setdefs.h + +.include <bsd.prog.mk> + +setdefs.h: gensetdefs ${OBJS} + @echo Generating linker sets + @./gensetdefs ${OBJS} >setdefs.h + +gensetdefs: gensetdefs.o + ${CC} -static gensetdefs.o -o $@ + +gensetdefs.o: gensetdefs.c + ${CC} -c $< + diff --git a/sys/boot/alpha/netboot/conf.c b/sys/boot/alpha/netboot/conf.c new file mode 100644 index 0000000..d54a452 --- /dev/null +++ b/sys/boot/alpha/netboot/conf.c @@ -0,0 +1,89 @@ +/* + * $Id$ + * From: $NetBSD: conf.c,v 1.2 1997/03/22 09:03:29 thorpej Exp $ + */ + +/* + * Copyright (c) 1997 + * Matthias Drochner. 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 for the NetBSD Project + * by Matthias Drochner. + * 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 AUTHOR 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 <stand.h> +#include "libalpha/libalpha.h" +#include "dev_net.h" + +/* + * We could use linker sets for some or all of these, but + * then we would have to control what ended up linked into + * the bootstrap. So it's easier to conditionalise things + * here. + * + * XXX rename these arrays to be consistent and less namespace-hostile + */ + +/* Exported for libstand */ +struct devsw *devsw[] = { + &netdev, + NULL +}; + +struct fs_ops *file_system[] = { + &nfs_fsops, + &zipfs_fsops, + NULL +}; + +struct netif_driver *netif_drivers[] = { + &srmnet, + NULL, +}; + +/* Exported for alpha only */ +/* + * Sort formats so that those that can detect based on arguments + * rather than reading the file go first. + */ +struct module_format *module_formats[] = { + &alpha_elf, + NULL +}; + +/* + * Consoles + * + * We don't prototype these in libalpha.h because they require + * data structures from bootstrap.h as well. + */ +extern struct console promconsole; + +struct console *consoles[] = { + &promconsole, + NULL +}; diff --git a/sys/boot/alpha/netboot/netboot.list b/sys/boot/alpha/netboot/netboot.list new file mode 100644 index 0000000..97410e1 --- /dev/null +++ b/sys/boot/alpha/netboot/netboot.list @@ -0,0 +1,1177 @@ +Archive member included because of file (symbol) + +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) + conf.o (nfs_fsops) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootparam.o) + dev_net.o (bp_whoami) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rarp.o) + dev_net.o (rarp_getipaddress) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) + dev_net.o (bootp) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rpc.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) (rpc_port) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(stat.o) + ls.o (stat) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(dev.o) + dev_net.o (noioctl) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncpy.o) + boot.o (strncpy) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcat.o) + misc.o (strcat) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + commands.o (pager_open) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + ls.o (optind) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + commands.o (environ) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + boot.o (strtol) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strchr.o) + boot.o (strchr) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + commands.o (strerror) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strdup.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) (strdup) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(gets.o) + interp.o (ngets) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + conf.o (zipfs_fsops) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) + ls.o (read) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) (files) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(close.o) + interp.o (close) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(fstat.o) + ls.o (fstat) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nullfs.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) (null_write) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) (inflateEnd) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) (inflate_blocks_reset) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) (adler32) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strrchr.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) (strrchr) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcmp.o) + console.o (strcmp) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) (twiddle) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) (zcalloc) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) (inflate_trees_bits) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) (inflate_codes_new) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + main.o (setheap) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) (inflate_fast) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) (inflate_mask) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(net.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) (sendudp) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(in_cksum.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(net.o) (in_cksum) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(arp.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(net.o) (arpwhohas) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ntohl.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) (ntohl) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(htonl.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) (htonl) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ether.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rarp.o) (sendether) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ntohs.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootparam.o) (ntohs) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(htons.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) (htons) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcopy.o) + interp.o (bcopy) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcmp.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rarp.o) (bcmp) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rarp.o) (bcea) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(netif.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ether.o) (netif_get) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bzero.o) + start.o (bzero) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + main.o (printf) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__remqu.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) (__remqu) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divqu.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) (__divqu) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strlen.o) + boot.o (strlen) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcd.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) (hex2ascii_data) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(srmnet.o) + conf.o (srmnet) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(devicename.o) + main.o (alpha_getdev) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(alpha_module.o) + main.o (alpha_boot) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(time.o) + boot.o (time) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(delay.o) + main.o (delay) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(reboot.o) + main.o (reboot) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) + conf.o (alpha_elf) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(OSFpal.o) + main.o (OSFpal) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(getsecs.o) + /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) (getsecs) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(pal.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(delay.o) (alpha_rpcc) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom_swpal.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(OSFpal.o) (switch_palcode) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom.o) + conf.o (promconsole) +/mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom_disp.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom.o) (prom_dispatch_v) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(lseek.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) (lseek) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(closeall.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) (closeall) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncmp.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(devicename.o) (strncmp) +/home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcpy.o) + /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(devicename.o) (strcpy) + +Allocating common symbols +Common symbol size file + +servip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) +domainname 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +nameip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +hostnamelen 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +command_errmsg 0x8 commands.o +rpc_pmap_list 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rpc.o) +errno 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +bp_server_addr 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootparam.o) +ffp_save 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) +swapip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +rootip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +optarg 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) +rpc_xid 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rpc.o) +myip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +hostname 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +archsw 0x18 main.o +ssym 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) +console 0x4 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom.o) +command_errbuf 0x100 commands.o +currdev 0x18 main.o +dhcp_serverip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) +bootfile 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +ptbr_save 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) +gateip 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +sockets 0x140 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(netif.o) +files 0x180 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) +bp_server_port 0x2 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootparam.o) +prom_stats 0x1c /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(srmnet.o) +ifname 0x10 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +domainnamelen 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) +optreset 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) +rpc_pmap_num 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rpc.o) +broken_firmware 0x4 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(srmnet.o) +optopt 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) +prom_dispatch_v 0x10 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom_disp.o) +esym 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) + +Memory Configuration + +Name Origin Length +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +Address of section .text set to 0x20000000 +LOAD start.o +LOAD setdef0.o +LOAD main.o +LOAD conf.o +LOAD dev_net.o +LOAD boot.o +LOAD commands.o +LOAD console.o +LOAD devopen.o +LOAD interp.o +LOAD ls.o +LOAD misc.o +LOAD module.o +LOAD panic.o +LOAD setdef1.o +LOAD vers.o +LOAD /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a +LOAD /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a +LOAD /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a + 0x00000001200000b0 .=(0x120000000+SIZEOF_HEADERS) + +.interp + *(.interp) + +.hash + *(.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.text + *(.rel.text) + *(.rel.gnu.linkonce.t*) + +.rela.text + *(.rela.text) + *(.rela.gnu.linkonce.t*) + +.rel.data + *(.rel.data) + *(.rel.gnu.linkonce.d*) + +.rela.data 0x00000001200000b0 0x0 + *(.rela.data) + *(.rela.gnu.linkonce.d*) + +.rela.set.Xcommand_set + 0x00000001200000b0 0x0 + +.rel.rodata + *(.rel.rodata) + *(.rel.gnu.linkonce.r*) + +.rela.rodata + *(.rela.rodata) + *(.rela.gnu.linkonce.r*) + +.rel.got + *(.rel.got) + +.rela.got + *(.rela.got) + +.rel.ctors + *(.rel.ctors) + +.rela.ctors + *(.rela.ctors) + +.rel.dtors + *(.rel.dtors) + +.rela.dtors + *(.rela.dtors) + +.rel.init + *(.rel.init) + +.rela.init + *(.rela.init) + +.rel.fini + *(.rel.fini) + +.rela.fini + *(.rela.fini) + +.rel.bss + *(.rel.bss) + +.rela.bss + *(.rela.bss) + +.rel.plt + *(.rel.plt) + +.rela.plt + *(.rela.plt) + +.init + *(.init) + +.text 0x0000000020000000 0x12660 + *(.text) + .text 0x0000000020000000 0x48 start.o + 0x000000002000003c __main + 0x0000000020000038 _rtt + 0x0000000020000040 cpu_number + 0x0000000020000038 halt + 0x0000000020000000 start + *fill* 0x0000000020000048 0x18 1207895071 + .text 0x0000000020000060 0x3e0 main.o + 0x0000000020000060 memsize + 0x00000000200000c8 main + .text 0x0000000020000440 0x400 dev_net.o + .text 0x0000000020000840 0x580 boot.o + 0x0000000020000ae8 autoboot + .text 0x0000000020000dc0 0x3e0 commands.o + .text 0x00000000200011a0 0x480 console.o + 0x00000000200013f8 putchar + 0x00000000200011a0 cons_probe + 0x0000000020001368 ischar + 0x00000000200012a8 getchar + .text 0x0000000020001620 0xf0 devopen.o + 0x00000000200016d0 devclose + 0x0000000020001620 devopen + *fill* 0x0000000020001710 0x10 1207895071 + .text 0x0000000020001720 0x5c0 interp.o + 0x00000000200019e8 interact + 0x0000000020001b00 source + .text 0x0000000020001ce0 0x480 ls.o + .text 0x0000000020002160 0x140 misc.o + 0x0000000020002160 unargv + .text 0x00000000200022a0 0x3a0 module.o + 0x0000000020002578 mod_findmodule + 0x00000000200023d0 mod_load + .text 0x0000000020002640 0xf0 panic.o + 0x0000000020002640 panic + *fill* 0x0000000020002730 0x10 1207895071 + .text 0x0000000020002740 0xe20 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) + 0x0000000020002740 nfs_getrootfh + 0x0000000020002c00 nfs_readdata + 0x0000000020002dd0 nfs_open + 0x00000000200028d0 nfs_lookupfh + 0x0000000020002aa0 nfs_readlink + .text 0x0000000020003560 0x890 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootparam.o) + 0x0000000020003560 bp_whoami + 0x0000000020003848 bp_getfile + 0x0000000020003b08 xdr_string_decode + 0x0000000020003bd0 xdr_inaddr_encode + 0x0000000020003a60 xdr_string_encode + 0x0000000020003cb8 xdr_inaddr_decode + .text 0x0000000020003df0 0x420 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rarp.o) + 0x0000000020003df0 rarp_getipaddress + *fill* 0x0000000020004210 0x10 1207895071 + .text 0x0000000020004220 0x960 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) + 0x0000000020004220 bootp + .text 0x0000000020004b80 0x660 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rpc.o) + 0x0000000020004f18 rpc_fromaddr + 0x0000000020004f58 rpc_pmap_getcache + 0x0000000020004b80 rpc_call + 0x0000000020004ff8 rpc_pmap_putcache + .text 0x00000000200051e0 0x90 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(stat.o) + 0x00000000200051e0 stat + .text 0x0000000020005270 0x18 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(dev.o) + 0x0000000020005270 nodev + 0x0000000020005280 noioctl + 0x0000000020005278 nullsys + *fill* 0x0000000020005288 0x18 1207895071 + .text 0x00000000200052a0 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncpy.o) + 0x00000000200052a0 strncpy + .text 0x0000000020005340 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcat.o) + 0x0000000020005340 strcat + .text 0x00000000200053c0 0x380 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + 0x0000000020005468 pager_output + 0x0000000020005450 pager_close + 0x0000000020005618 pager_file + 0x00000000200053c0 pager_open + .text 0x0000000020005740 0x310 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + 0x0000000020005740 getopt + *fill* 0x0000000020005a50 0x10 1207895071 + .text 0x0000000020005a60 0x4a0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + 0x0000000020005dc8 unsetenv + 0x0000000020005ef0 env_nounset + 0x0000000020005cc0 getenv + 0x0000000020005d68 putenv + 0x0000000020005ee8 env_noset + 0x0000000020005d00 setenv + 0x0000000020005a60 env_getenv + 0x0000000020005ae0 env_setenv + .text 0x0000000020005f00 0x260 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + 0x0000000020005f00 strtol + .text 0x0000000020006160 0x60 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strchr.o) + 0x0000000020006160 strchr + .text 0x00000000200061c0 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + 0x00000000200061c0 strerror + .text 0x0000000020006260 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strdup.o) + 0x0000000020006260 strdup + .text 0x0000000020006300 0x340 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(gets.o) + 0x0000000020006530 fgetstr + 0x0000000020006300 ngets + .text 0x0000000020006640 0x8e0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + 0x0000000020006640 calloc + .text 0x0000000020006f20 0x150 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) + 0x0000000020006f20 read + *fill* 0x0000000020007070 0x10 1207895071 + .text 0x0000000020007080 0x220 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + 0x00000000200070c8 open + .text 0x00000000200072a0 0x130 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(close.o) + 0x00000000200072a0 close + .text 0x00000000200073d0 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(fstat.o) + 0x00000000200073d0 fstat + .text 0x0000000020007470 0xa8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nullfs.o) + 0x00000000200074b8 null_write + 0x00000000200074f8 null_stat + 0x0000000020007490 null_close + 0x0000000020007498 null_read + 0x0000000020007470 null_open + 0x00000000200074d8 null_seek + *fill* 0x0000000020007518 0x8 1207895071 + .text 0x0000000020007520 0xc00 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + 0x00000000200077d0 inflate + 0x00000000200080b0 inflateSyncPoint + 0x00000000200077a0 inflateInit_ + 0x0000000020007520 inflateReset + 0x0000000020007f18 inflateSync + 0x0000000020007e10 inflateSetDictionary + 0x00000000200075a0 inflateEnd + 0x0000000020007630 inflateInit2_ + .text 0x0000000020008120 0x1400 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + 0x0000000020009428 inflate_blocks_free + 0x0000000020008310 inflate_blocks + 0x0000000020008120 inflate_blocks_reset + 0x0000000020009510 inflate_blocks_sync_point + 0x00000000200094b0 inflate_set_dictionary + 0x00000000200081f0 inflate_blocks_new + .text 0x0000000020009520 0x240 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + 0x0000000020009520 adler32 + .text 0x0000000020009760 0x60 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strrchr.o) + 0x0000000020009760 strrchr + .text 0x00000000200097c0 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcmp.o) + 0x00000000200097c0 strcmp + .text 0x0000000020009860 0x70 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + 0x0000000020009860 twiddle + .text 0x00000000200098d0 0x98 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + 0x00000000200098d0 zlibVersion + 0x0000000020009938 zcfree + 0x00000000200098e0 zError + 0x0000000020009900 zcalloc + *fill* 0x0000000020009968 0x18 1207895071 + .text 0x0000000020009980 0xd40 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + 0x000000002000a3d8 inflate_trees_fixed + 0x000000002000a0b8 inflate_trees_bits + 0x000000002000a1e0 inflate_trees_dynamic + .text 0x000000002000a6c0 0xc40 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + 0x000000002000a6c0 inflate_codes_new + 0x000000002000a768 inflate_codes + 0x000000002000b2c0 inflate_codes_free + .text 0x000000002000b300 0x1e0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + 0x000000002000b300 setheap + 0x000000002000b328 malloc + 0x000000002000b4b8 sbrk + 0x000000002000b420 free + .text 0x000000002000b4e0 0x540 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + 0x000000002000b4e0 inflate_fast + .text 0x000000002000ba20 0x1e0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + 0x000000002000ba20 inflate_flush + .text 0x000000002000bc00 0xe00 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(net.o) + 0x000000002000c6e0 intoa + 0x000000002000c8a0 ip_convertaddr + 0x000000002000c518 inet_addr + 0x000000002000c358 sendrecv + 0x000000002000bc00 sendudp + 0x000000002000c6b0 inet_ntoa + 0x000000002000bf90 readudp + .text 0x000000002000ca00 0x120 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(in_cksum.o) + 0x000000002000ca00 in_cksum + .text 0x000000002000cb20 0x6c0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(arp.o) + 0x000000002000cfd0 arp_reply + 0x000000002000cb20 arpwhohas + .text 0x000000002000d1e0 0x2c /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ntohl.o) + 0x000000002000d1e0 ntohl + .text 0x000000002000d20c 0x2c /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(htonl.o) + 0x000000002000d20c htonl + *fill* 0x000000002000d238 0x8 1207895071 + .text 0x000000002000d240 0x2e0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ether.o) + 0x000000002000d460 ether_sprintf + 0x000000002000d240 sendether + 0x000000002000d358 readether + .text 0x000000002000d520 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ntohs.o) + 0x000000002000d520 ntohs + .text 0x000000002000d534 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(htons.o) + 0x000000002000d534 htons + .text 0x000000002000d548 0x25c /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcopy.o) + 0x000000002000d548 bcopy + *fill* 0x000000002000d7a4 0x1c 1207895071 + .text 0x000000002000d7c0 0x60 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcmp.o) + 0x000000002000d7c0 bcmp + .text 0x000000002000d820 0x8c0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(netif.o) + 0x000000002000dbb0 netif_probe + 0x000000002000df48 netif_open + 0x000000002000d8e0 netif_match + 0x000000002000dce8 netif_detach + 0x000000002000de38 netif_put + 0x000000002000dc30 netif_attach + 0x000000002000df08 socktodesc + 0x000000002000d910 netif_select + 0x000000002000dd58 netif_get + 0x000000002000d820 netif_init + 0x000000002000e070 netif_close + .text 0x000000002000e0e0 0xb0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bzero.o) + 0x000000002000e0e0 bzero + *fill* 0x000000002000e190 0x10 1207895071 + .text 0x000000002000e1a0 0x11c0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + 0x000000002000e1a0 printf + 0x000000002000e220 vprintf + 0x000000002000e260 sprintf + .text 0x000000002000f360 0xe4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__remqu.o) + 0x000000002000f360 __remqu + .text 0x000000002000f444 0xdc /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divqu.o) + 0x000000002000f444 __divqu + .text 0x000000002000f520 0x40 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strlen.o) + 0x000000002000f520 strlen + .text 0x000000002000f560 0xa70 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(srmnet.o) + 0x000000002000f650 prom_get + 0x000000002000f560 prom_match + 0x000000002000f598 prom_probe + 0x000000002000f810 prom_init + 0x000000002000f5d0 prom_put + 0x000000002000ff28 prom_end + .text 0x000000002000ffd0 0x8e0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(devicename.o) + 0x0000000020010638 alpha_fmtdev + 0x000000002000ffd0 alpha_getdev + 0x00000000200107e8 alpha_setcurrdev + .text 0x00000000200108b0 0x138 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(alpha_module.o) + 0x00000000200108b0 alpha_boot + 0x00000000200109b8 alpha_autoload + .text 0x00000000200109e8 0x68 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(time.o) + 0x00000000200109e8 time + .text 0x0000000020010a50 0xb0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(delay.o) + 0x0000000020010a50 delay + .text 0x0000000020010b00 0x120 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(reboot.o) + 0x0000000020010b00 reboot + 0x0000000020010b88 exit + .text 0x0000000020010c20 0xdd0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) + .text 0x00000000200119f0 0x120 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(OSFpal.o) + 0x00000000200119f0 OSFpal + .text 0x0000000020011b10 0x1c8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(getsecs.o) + 0x0000000020011b10 getsecs + .text 0x0000000020011cd8 0xcc /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(pal.o) + 0x0000000020011ce0 alpha_mb + 0x0000000020011d54 alpha_pal_tbi + 0x0000000020011d8c alpha_pal_wrmces + 0x0000000020011d94 alpha_pal_wrval + 0x0000000020011d84 alpha_pal_wrvptptr + 0x0000000020011d00 alpha_pal_imb + 0x0000000020011d74 alpha_pal_wripir + 0x0000000020011d7c alpha_pal_wrusp + 0x0000000020011d3c alpha_pal_rdval + 0x0000000020011d9c alpha_pal_swpctx + 0x0000000020011d08 alpha_pal_cflush + 0x0000000020011d4c _alpha_pal_swpipl + 0x0000000020011cd8 alpha_rpcc + 0x0000000020011cf0 alpha_amask + 0x0000000020011d18 alpha_pal_halt + 0x0000000020011d64 alpha_pal_wrent + 0x0000000020011d34 alpha_pal_rdusp + 0x0000000020011d2c alpha_pal_rdps + 0x0000000020011cf8 alpha_implver + 0x0000000020011d24 alpha_pal_rdmces + 0x0000000020011d44 alpha_pal_swpipl + 0x0000000020011d5c alpha_pal_whami + 0x0000000020011ce8 alpha_wmb + 0x0000000020011d10 alpha_pal_draina + 0x0000000020011d6c alpha_pal_wrfen + *fill* 0x0000000020011da4 0xc 1207895071 + .text 0x0000000020011db0 0xc0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom_swpal.o) + 0x0000000020011db0 switch_palcode + .text 0x0000000020011e70 0x4e8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom.o) + 0x0000000020011e70 init_prom_calls + 0x00000000200121e0 prom_getenv + 0x0000000020011f98 prom_putchar + 0x0000000020012040 prom_getchar + 0x00000000200122c0 prom_open + *fill* 0x0000000020012358 0x8 1207895071 + .text 0x0000000020012360 0x70 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom_disp.o) + 0x0000000020012360 prom_dispatch + .text 0x00000000200123d0 0xe0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(lseek.o) + 0x00000000200123d0 lseek + *fill* 0x00000000200124b0 0x10 1207895071 + .text 0x00000000200124c0 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(closeall.o) + 0x00000000200124c0 closeall + .text 0x0000000020012540 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncmp.o) + 0x0000000020012540 strncmp + .text 0x00000000200125e0 0x80 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcpy.o) + 0x00000000200125e0 strcpy + *(.gnu.warning) + *(.gnu.linkonce.t*) + 0x0000000020012660 _etext=. + 0x0000000020012660 PROVIDE (etext, .) + +.fini + *(.fini) + +.rodata 0x0000000020012660 0x1e88 + *(.rodata) + .rodata 0x0000000020012660 0x128 main.o + .rodata 0x0000000020012788 0x1f0 dev_net.o + .rodata 0x0000000020012978 0x188 boot.o + .rodata 0x0000000020012b00 0x168 commands.o + .rodata 0x0000000020012c68 0x30 console.o + .rodata 0x0000000020012c98 0xa0 interp.o + .rodata 0x0000000020012d38 0xa8 ls.o + .rodata 0x0000000020012de0 0x18 misc.o + .rodata 0x0000000020012df8 0xb8 module.o + .rodata 0x0000000020012eb0 0x28 panic.o + .rodata 0x0000000020012ed8 0x48 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) + .rodata 0x0000000020012f20 0x50 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootparam.o) + .rodata 0x0000000020012f70 0x38 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rarp.o) + .rodata 0x0000000020012fa8 0x70 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) + .rodata 0x0000000020013018 0x50 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rpc.o) + .rodata 0x0000000020013068 0xa8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .rodata 0x0000000020013110 0x48 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + .rodata 0x0000000020013158 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + .rodata 0x0000000020013160 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + .rodata 0x0000000020013168 0x2a0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + .rodata 0x0000000020013408 0xc0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + .rodata 0x00000000200134c8 0xb8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + .rodata 0x0000000020013580 0xf8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + .rodata 0x0000000020013678 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + .rodata 0x0000000020013680 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + .rodata 0x0000000020013688 0xa0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + .rodata 0x0000000020013728 0x318 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + 0x0000000020013728 inflate_copyright + .rodata 0x0000000020013a40 0x60 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + .rodata 0x0000000020013aa0 0x60 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + .rodata 0x0000000020013b00 0x38 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + .rodata 0x0000000020013b38 0x70 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(net.o) + .rodata 0x0000000020013ba8 0x48 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(arp.o) + .rodata 0x0000000020013bf0 0x168 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(netif.o) + .rodata 0x0000000020013d58 0x170 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + .rodata 0x0000000020013ec8 0x130 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcd.o) + 0x0000000020013fd0 hex2ascii_data + 0x0000000020013ec8 bcd2bin_data + 0x0000000020013f68 bin2bcd_data + .rodata 0x0000000020013ff8 0x250 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(srmnet.o) + .rodata 0x0000000020014248 0x40 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(devicename.o) + .rodata 0x0000000020014288 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(delay.o) + .rodata 0x0000000020014290 0x198 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) + .rodata 0x0000000020014428 0x98 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(OSFpal.o) + .rodata 0x00000000200144c0 0x8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(getsecs.o) + .rodata 0x00000000200144c8 0x20 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom.o) + *(.gnu.linkonce.r*) + +.rodata1 + *(.rodata1) + +.reginfo + *(.reginfo) + 0x00000000200144e8 .=. + +.data 0x00000000200144e8 0x810 + *(.data) + .data 0x00000000200144e8 0x48 main.o + .data 0x0000000020014530 0x58 conf.o + 0x0000000020014568 module_formats + 0x0000000020014558 netif_drivers + 0x0000000020014540 file_system + 0x0000000020014578 consoles + 0x0000000020014530 devsw + .data 0x0000000020014588 0x48 dev_net.o + 0x0000000020014590 netdev + 0x0000000020014588 debug + 0x00000000200145c8 try_bootp + .data 0x00000000200145d0 0x40 boot.o + .data 0x0000000020014610 0x90 commands.o + .data 0x00000000200146a0 0x18 interp.o + .data 0x00000000200146b8 0x28 ls.o + .data 0x00000000200146e0 0x40 module.o + 0x00000000200146e8 loaded_modules + .data 0x0000000020014720 0x68 vers.o + 0x0000000020014740 bootprog_rev + 0x0000000020014748 bootprog_date + 0x0000000020014768 bootprog_maker + 0x0000000020014720 bootprog_name + .data 0x0000000020014788 0x58 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) + 0x00000000200147c0 nfs_stat_types + 0x0000000020014788 nfs_fsops + .data 0x00000000200147e0 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) + .data 0x00000000200147e8 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rpc.o) + 0x00000000200147e8 rpc_port + *fill* 0x00000000200147ec 0x4 + .data 0x00000000200147f0 0x18 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .data 0x0000000020014808 0x10 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + 0x0000000020014808 opterr + 0x000000002001480c optind + .data 0x0000000020014818 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + 0x0000000020014818 environ + .data 0x0000000020014820 0x1d0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + .data 0x00000000200149f0 0x40 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + 0x00000000200149f0 zipfs_fsops + .data 0x0000000020014a30 0x50 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + 0x0000000020014a30 z_errmsg + .data 0x0000000020014a80 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + *fill* 0x0000000020014a84 0x4 + .data 0x0000000020014a88 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + 0x0000000020014a88 freelist + .data 0x0000000020014a90 0x44 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + 0x0000000020014a90 inflate_mask + .data 0x0000000020014ad4 0x64 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(arp.o) + 0x0000000020014b34 arp_num + 0x0000000020014ad4 arp_list + .data 0x0000000020014b38 0x18 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ether.o) + .data 0x0000000020014b50 0x90 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + 0x0000000020014b58 rootpath + 0x0000000020014bd8 netmask + 0x0000000020014b50 bcea + .data 0x0000000020014be0 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(netif.o) + 0x0000000020014be0 netif_debug + *fill* 0x0000000020014be4 0x4 + .data 0x0000000020014be8 0xb0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(srmnet.o) + 0x0000000020014c08 netbbinfo + 0x0000000020014c90 netfd + 0x0000000020014be8 prom_ifs + 0x0000000020014c48 srmnet + .data 0x0000000020014c98 0x18 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) + 0x0000000020014c98 alpha_elf + .data 0x0000000020014cb0 0x48 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom.o) + 0x0000000020014cb0 promconsole + *(.gnu.linkonce.d*) + +.set.Xcommand_set + 0x0000000020014cf8 0x88 + .set.Xcommand_set + 0x0000000020014cf8 0x8 setdef0.o + 0x0000000020014cf8 Xcommand_set + .set.Xcommand_set + 0x0000000020014d00 0x18 main.o + .set.Xcommand_set + 0x0000000020014d18 0x10 boot.o + .set.Xcommand_set + 0x0000000020014d28 0x30 commands.o + .set.Xcommand_set + 0x0000000020014d58 0x8 interp.o + .set.Xcommand_set + 0x0000000020014d60 0x8 ls.o + .set.Xcommand_set + 0x0000000020014d68 0x10 module.o + .set.Xcommand_set + 0x0000000020014d78 0x8 setdef1.o + +.data1 + *(.data1) + +.ctors + *(.ctors) + +.dtors + *(.dtors) + +.plt + *(.plt) + +.got 0x0000000020014d80 0xeb8 + *(.got.plt) + *(.got) + .got 0x0000000020014d80 0xeb8 start.o + +.dynamic + *(.dynamic) + +.sdata + *(.sdata) + 0x0000000020015c38 _edata=. + 0x0000000020015c38 PROVIDE (edata, .) + 0x0000000020015c38 __bss_start=. + +.sbss + *(.sbss) + *(.scommon) + +.bss 0x0000000020015c40 0x24f0 + *(.dynbss) + *(.bss) + .bss 0x0000000020015c40 0x4 dev_net.o + *fill* 0x0000000020015c44 0x4 + .bss 0x0000000020015c48 0xb0 interp.o + .bss 0x0000000020015cf8 0x78 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) + .bss 0x0000000020015d70 0x10 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) + .bss 0x0000000020015d80 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .bss 0x0000000020015d84 0x20 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + *fill* 0x0000000020015da4 0x4 + .bss 0x0000000020015da8 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + .bss 0x0000000020015db0 0x4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + *fill* 0x0000000020015db4 0x4 + .bss 0x0000000020015db8 0x1a98 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + .bss 0x0000000020017850 0x18 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + .bss 0x0000000020017868 0x11 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(net.o) + .bss 0x0000000020017879 0x12 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ether.o) + *fill* 0x000000002001788b 0x5 + .bss 0x0000000020017890 0x18 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(netif.o) + .bss 0x00000000200178a8 0x17 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + .bss 0x00000000200178bf 0x80 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(devicename.o) + *fill* 0x000000002001793f 0x1 + .bss 0x0000000020017940 0x100 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) + .bss 0x0000000020017a40 0x18 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(getsecs.o) + *(COMMON) + COMMON 0x0000000020017a58 0x30 main.o + 0x0000000020017a58 archsw + 0x0000000020017a70 currdev + *fill* 0x0000000020017a88 0x8 + COMMON 0x0000000020017a90 0x110 commands.o + 0x0000000020017a90 command_errmsg + 0x0000000020017aa0 command_errbuf + COMMON 0x0000000020017ba0 0x6 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootparam.o) + 0x0000000020017ba0 bp_server_addr + 0x0000000020017ba4 bp_server_port + *fill* 0x0000000020017ba6 0x2 + COMMON 0x0000000020017ba8 0x8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) + 0x0000000020017ba8 servip + 0x0000000020017bac dhcp_serverip + COMMON 0x0000000020017bb0 0x88 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rpc.o) + 0x0000000020017bb0 rpc_pmap_list + 0x0000000020017c30 rpc_xid + 0x0000000020017c34 rpc_pmap_num + COMMON 0x0000000020017c38 0x10 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + 0x0000000020017c38 optarg + 0x0000000020017c40 optreset + 0x0000000020017c44 optopt + COMMON 0x0000000020017c48 0x180 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + 0x0000000020017c48 files + *fill* 0x0000000020017dc8 0x8 + COMMON 0x0000000020017dd0 0x1c4 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + 0x0000000020017dd0 domainname + 0x0000000020017e50 nameip + 0x0000000020017e54 hostnamelen + 0x0000000020017e58 errno + 0x0000000020017e5c swapip + 0x0000000020017e60 rootip + 0x0000000020017e64 myip + 0x0000000020017e70 hostname + 0x0000000020017ef0 bootfile + 0x0000000020017f70 gateip + 0x0000000020017f80 ifname + 0x0000000020017f90 domainnamelen + *fill* 0x0000000020017f94 0x4 + COMMON 0x0000000020017f98 0x140 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(netif.o) + 0x0000000020017f98 sockets + COMMON 0x00000000200180d8 0x20 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(srmnet.o) + 0x00000000200180d8 prom_stats + 0x00000000200180f4 broken_firmware + COMMON 0x00000000200180f8 0x20 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) + 0x00000000200180f8 ffp_save + 0x0000000020018100 ssym + 0x0000000020018108 ptbr_save + 0x0000000020018110 esym + COMMON 0x0000000020018118 0x4 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom.o) + 0x0000000020018118 console + *fill* 0x000000002001811c 0x4 + COMMON 0x0000000020018120 0x10 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom_disp.o) + 0x0000000020018120 prom_dispatch_v + 0x0000000020018130 _end=. + 0x0000000020018130 PROVIDE (end, .) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x0000000000000000 0x5c8 + *(.comment) + .comment 0x0000000000000000 0x14 setdef0.o + .comment 0x0000000000000014 0x14 main.o + .comment 0x0000000000000028 0x14 conf.o + .comment 0x000000000000003c 0x14 dev_net.o + .comment 0x0000000000000050 0x14 boot.o + .comment 0x0000000000000064 0x14 commands.o + .comment 0x0000000000000078 0x14 console.o + .comment 0x000000000000008c 0x14 devopen.o + .comment 0x00000000000000a0 0x14 interp.o + .comment 0x00000000000000b4 0x14 ls.o + .comment 0x00000000000000c8 0x14 misc.o + .comment 0x00000000000000dc 0x14 module.o + .comment 0x00000000000000f0 0x14 panic.o + .comment 0x0000000000000104 0x14 setdef1.o + .comment 0x0000000000000118 0x14 vers.o + .comment 0x000000000000012c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) + .comment 0x0000000000000140 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootparam.o) + .comment 0x0000000000000154 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rarp.o) + .comment 0x0000000000000168 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) + .comment 0x000000000000017c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rpc.o) + .comment 0x0000000000000190 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(stat.o) + .comment 0x00000000000001a4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(dev.o) + .comment 0x00000000000001b8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncpy.o) + .comment 0x00000000000001cc 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcat.o) + .comment 0x00000000000001e0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .comment 0x00000000000001f4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + .comment 0x0000000000000208 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + .comment 0x000000000000021c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + .comment 0x0000000000000230 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strchr.o) + .comment 0x0000000000000244 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + .comment 0x0000000000000258 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strdup.o) + .comment 0x000000000000026c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(gets.o) + .comment 0x0000000000000280 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + .comment 0x0000000000000294 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) + .comment 0x00000000000002a8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + .comment 0x00000000000002bc 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(close.o) + .comment 0x00000000000002d0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(fstat.o) + .comment 0x00000000000002e4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nullfs.o) + .comment 0x00000000000002f8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + .comment 0x000000000000030c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + .comment 0x0000000000000320 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + .comment 0x0000000000000334 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strrchr.o) + .comment 0x0000000000000348 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcmp.o) + .comment 0x000000000000035c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + .comment 0x0000000000000370 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + .comment 0x0000000000000384 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + .comment 0x0000000000000398 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + .comment 0x00000000000003ac 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + .comment 0x00000000000003c0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + .comment 0x00000000000003d4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + .comment 0x00000000000003e8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(net.o) + .comment 0x00000000000003fc 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(in_cksum.o) + .comment 0x0000000000000410 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(arp.o) + .comment 0x0000000000000424 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ether.o) + .comment 0x0000000000000438 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcmp.o) + .comment 0x000000000000044c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + .comment 0x0000000000000460 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(netif.o) + .comment 0x0000000000000474 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + .comment 0x0000000000000488 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strlen.o) + .comment 0x000000000000049c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcd.o) + .comment 0x00000000000004b0 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(srmnet.o) + .comment 0x00000000000004c4 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(devicename.o) + .comment 0x00000000000004d8 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(alpha_module.o) + .comment 0x00000000000004ec 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(time.o) + .comment 0x0000000000000500 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(delay.o) + .comment 0x0000000000000514 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(reboot.o) + .comment 0x0000000000000528 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) + .comment 0x000000000000053c 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(OSFpal.o) + .comment 0x0000000000000550 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(getsecs.o) + .comment 0x0000000000000564 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom.o) + .comment 0x0000000000000578 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(lseek.o) + .comment 0x000000000000058c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(closeall.o) + .comment 0x00000000000005a0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncmp.o) + .comment 0x00000000000005b4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcpy.o) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges + *(.debug_aranges) + +.debug_pubnames + *(.debug_pubnames) + +.debug_info + *(.debug_info) + +.debug_abbrev + *(.debug_abbrev) + +.debug_line + *(.debug_line) + +.debug_frame + *(.debug_frame) + +.debug_str + *(.debug_str) + +.debug_loc + *(.debug_loc) + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) +OUTPUT(netboot.sym elf64-alpha) + +.mdebug 0x00000000000005c8 0x10ef0 + .mdebug 0x00000000000005c8 0x858 start.o + .mdebug 0x0000000000000e20 0x1e0 setdef0.o + .mdebug 0x0000000000001000 0xab8 main.o + .mdebug 0x0000000000001ab8 0x330 conf.o + .mdebug 0x0000000000001de8 0xa28 dev_net.o + .mdebug 0x0000000000002810 0x8c0 boot.o + .mdebug 0x00000000000030d0 0xb00 commands.o + .mdebug 0x0000000000003bd0 0x788 console.o + .mdebug 0x0000000000004358 0x3d0 devopen.o + .mdebug 0x0000000000004728 0x968 interp.o + .mdebug 0x0000000000005090 0x540 ls.o + .mdebug 0x00000000000055d0 0x330 misc.o + .mdebug 0x0000000000005900 0x790 module.o + .mdebug 0x0000000000006090 0x310 panic.o + .mdebug 0x00000000000063a0 0x1b8 setdef1.o + .mdebug 0x0000000000006558 0x248 vers.o + .mdebug 0x00000000000067a0 0xd00 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) + .mdebug 0x00000000000074a0 0xa40 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootparam.o) + .mdebug 0x0000000000007ee0 0x620 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rarp.o) + .mdebug 0x0000000000008500 0x960 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) + .mdebug 0x0000000000008e60 0x908 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rpc.o) + .mdebug 0x0000000000009768 0x308 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(stat.o) + .mdebug 0x0000000000009a70 0x418 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(dev.o) + .mdebug 0x0000000000009e88 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncpy.o) + .mdebug 0x000000000000a110 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcat.o) + .mdebug 0x000000000000a398 0x7a0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .mdebug 0x000000000000ab38 0x3d0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + .mdebug 0x000000000000af08 0xa30 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + .mdebug 0x000000000000b938 0x318 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + .mdebug 0x000000000000bc50 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strchr.o) + .mdebug 0x000000000000bed8 0x350 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + .mdebug 0x000000000000c228 0x318 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strdup.o) + .mdebug 0x000000000000c540 0x3e0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(gets.o) + .mdebug 0x000000000000c920 0xc28 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + .mdebug 0x000000000000d548 0x308 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) + .mdebug 0x000000000000d850 0x430 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + .mdebug 0x000000000000dc80 0x310 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(close.o) + .mdebug 0x000000000000df90 0x2f0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(fstat.o) + .mdebug 0x000000000000e280 0x720 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nullfs.o) + .mdebug 0x000000000000e9a0 0xac8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + .mdebug 0x000000000000f468 0x9a0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + .mdebug 0x000000000000fe08 0x2c0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + .mdebug 0x00000000000100c8 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strrchr.o) + .mdebug 0x0000000000010350 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcmp.o) + .mdebug 0x00000000000105d8 0x318 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + .mdebug 0x00000000000108f0 0x590 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + .mdebug 0x0000000000010e80 0x830 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + .mdebug 0x00000000000116b0 0x538 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + .mdebug 0x0000000000011be8 0x618 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + .mdebug 0x0000000000012200 0x2f8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + .mdebug 0x00000000000124f8 0x320 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + .mdebug 0x0000000000012818 0xad8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(net.o) + .mdebug 0x00000000000132f0 0x290 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(in_cksum.o) + .mdebug 0x0000000000013580 0x6f0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(arp.o) + .mdebug 0x0000000000013c70 0x888 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ntohl.o) + .mdebug 0x00000000000144f8 0x888 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(htonl.o) + .mdebug 0x0000000000014d80 0x5d8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ether.o) + .mdebug 0x0000000000015358 0x880 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ntohs.o) + .mdebug 0x0000000000015bd8 0x880 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(htons.o) + .mdebug 0x0000000000016458 0xbc0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcopy.o) + .mdebug 0x0000000000017018 0x278 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcmp.o) + .mdebug 0x0000000000017290 0x3a0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + .mdebug 0x0000000000017630 0xc98 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(netif.o) + .mdebug 0x00000000000182c8 0x828 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bzero.o) + .mdebug 0x0000000000018af0 0x6e0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + .mdebug 0x00000000000191d0 0x708 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__remqu.o) + .mdebug 0x00000000000198d8 0x700 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(__divqu.o) + .mdebug 0x0000000000019fd8 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strlen.o) + .mdebug 0x000000000001a260 0x228 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcd.o) + .mdebug 0x000000000001a488 0x9b0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(srmnet.o) + .mdebug 0x000000000001ae38 0x740 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(devicename.o) + .mdebug 0x000000000001b578 0x408 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(alpha_module.o) + .mdebug 0x000000000001b980 0x2d0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(time.o) + .mdebug 0x000000000001bc50 0x2d8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(delay.o) + .mdebug 0x000000000001bf28 0x3a0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(reboot.o) + .mdebug 0x000000000001c2c8 0x770 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) + .mdebug 0x000000000001ca38 0x320 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(OSFpal.o) + .mdebug 0x000000000001cd58 0x3b8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(getsecs.o) + .mdebug 0x000000000001d110 0x18b8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(pal.o) + .mdebug 0x000000000001e9c8 0xae0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom_swpal.o) + .mdebug 0x000000000001f4a8 0x9b8 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom.o) + .mdebug 0x000000000001fe60 0xaa0 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom_disp.o) + .mdebug 0x0000000000020900 0x2f0 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(lseek.o) + .mdebug 0x0000000000020bf0 0x2f8 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(closeall.o) + .mdebug 0x0000000000020ee8 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncmp.o) + .mdebug 0x0000000000021170 0x288 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcpy.o) + +.note 0x00000000000213f8 0x5c8 + .note 0x00000000000213f8 0x14 setdef0.o + .note 0x000000000002140c 0x14 main.o + .note 0x0000000000021420 0x14 conf.o + .note 0x0000000000021434 0x14 dev_net.o + .note 0x0000000000021448 0x14 boot.o + .note 0x000000000002145c 0x14 commands.o + .note 0x0000000000021470 0x14 console.o + .note 0x0000000000021484 0x14 devopen.o + .note 0x0000000000021498 0x14 interp.o + .note 0x00000000000214ac 0x14 ls.o + .note 0x00000000000214c0 0x14 misc.o + .note 0x00000000000214d4 0x14 module.o + .note 0x00000000000214e8 0x14 panic.o + .note 0x00000000000214fc 0x14 setdef1.o + .note 0x0000000000021510 0x14 vers.o + .note 0x0000000000021524 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nfs.o) + .note 0x0000000000021538 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootparam.o) + .note 0x000000000002154c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rarp.o) + .note 0x0000000000021560 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bootp.o) + .note 0x0000000000021574 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(rpc.o) + .note 0x0000000000021588 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(stat.o) + .note 0x000000000002159c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(dev.o) + .note 0x00000000000215b0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncpy.o) + .note 0x00000000000215c4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcat.o) + .note 0x00000000000215d8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(pager.o) + .note 0x00000000000215ec 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(getopt.o) + .note 0x0000000000021600 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(environment.o) + .note 0x0000000000021614 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strtol.o) + .note 0x0000000000021628 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strchr.o) + .note 0x000000000002163c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strerror.o) + .note 0x0000000000021650 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strdup.o) + .note 0x0000000000021664 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(gets.o) + .note 0x0000000000021678 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zipfs.o) + .note 0x000000000002168c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(read.o) + .note 0x00000000000216a0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(open.o) + .note 0x00000000000216b4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(close.o) + .note 0x00000000000216c8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(fstat.o) + .note 0x00000000000216dc 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(nullfs.o) + .note 0x00000000000216f0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inflate.o) + .note 0x0000000000021704 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infblock.o) + .note 0x0000000000021718 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(adler32.o) + .note 0x000000000002172c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strrchr.o) + .note 0x0000000000021740 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcmp.o) + .note 0x0000000000021754 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(twiddle.o) + .note 0x0000000000021768 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(zutil.o) + .note 0x000000000002177c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inftrees.o) + .note 0x0000000000021790 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infcodes.o) + .note 0x00000000000217a4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(alloc.o) + .note 0x00000000000217b8 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(inffast.o) + .note 0x00000000000217cc 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(infutil.o) + .note 0x00000000000217e0 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(net.o) + .note 0x00000000000217f4 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(in_cksum.o) + .note 0x0000000000021808 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(arp.o) + .note 0x000000000002181c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(ether.o) + .note 0x0000000000021830 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcmp.o) + .note 0x0000000000021844 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(globals.o) + .note 0x0000000000021858 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(netif.o) + .note 0x000000000002186c 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(printf.o) + .note 0x0000000000021880 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strlen.o) + .note 0x0000000000021894 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(bcd.o) + .note 0x00000000000218a8 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(srmnet.o) + .note 0x00000000000218bc 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(devicename.o) + .note 0x00000000000218d0 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(alpha_module.o) + .note 0x00000000000218e4 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(time.o) + .note 0x00000000000218f8 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(delay.o) + .note 0x000000000002190c 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(reboot.o) + .note 0x0000000000021920 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(elf_freebsd.o) + .note 0x0000000000021934 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(OSFpal.o) + .note 0x0000000000021948 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(getsecs.o) + .note 0x000000000002195c 0x14 /mnt/herring/b/dfr/FreeBSD/boot/newboot/alpha/netboot/../libalpha/obj/libalpha.a(prom.o) + .note 0x0000000000021970 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(lseek.o) + .note 0x0000000000021984 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(closeall.o) + .note 0x0000000000021998 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strncmp.o) + .note 0x00000000000219ac 0x14 /home/dfr/FreeBSD/alpha/src/lib/libstand/obj/libstand.a(strcpy.o) diff --git a/sys/boot/alpha/netboot/newvers.sh b/sys/boot/alpha/netboot/newvers.sh new file mode 100644 index 0000000..88cc010 --- /dev/null +++ b/sys/boot/alpha/netboot/newvers.sh @@ -0,0 +1,44 @@ +#!/bin/sh - +# +# $NetBSD: newvers.sh,v 1.1 1997/07/26 01:50:38 thorpej Exp $ +# +# Copyright (c) 1984, 1986, 1990, 1993 +# The Regents of the University of California. 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 the University of +# California, Berkeley and its contributors. +# 4. Neither the name of the University 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 REGENTS 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 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. +# +# @(#)newvers.sh 8.1 (Berkeley) 4/20/94 + +u=${USER-root} h=`hostname` t=`date` +r=`head -n 6 $1 | tail -n 1 | awk -F: ' { print $1 } '` + +echo "char bootprog_name[] = \"FreeBSD/alpha ${2}\";" > vers.c +echo "char bootprog_rev[] = \"${r}\";" >> vers.c +echo "char bootprog_date[] = \"${t}\";" >> vers.c +echo "char bootprog_maker[] = \"${u}@${h}\";" >> vers.c diff --git a/sys/boot/alpha/netboot/setdefs.h b/sys/boot/alpha/netboot/setdefs.h new file mode 100644 index 0000000..2320078 --- /dev/null +++ b/sys/boot/alpha/netboot/setdefs.h @@ -0,0 +1,2 @@ +/* $Id$ */ +DEFINE_SET(Xcommand_set, 15); diff --git a/sys/boot/alpha/netboot/vers.c b/sys/boot/alpha/netboot/vers.c new file mode 100644 index 0000000..89f3ea9 --- /dev/null +++ b/sys/boot/alpha/netboot/vers.c @@ -0,0 +1,4 @@ +char bootprog_name[] = "FreeBSD/alpha SRM net boot"; +char bootprog_rev[] = "0.1"; +char bootprog_date[] = "Mon Aug 17 10:38:31 BST 1998"; +char bootprog_maker[] = "dfr@salmon.nlsystems.com"; diff --git a/sys/boot/alpha/netboot/version b/sys/boot/alpha/netboot/version new file mode 100644 index 0000000..6346f50 --- /dev/null +++ b/sys/boot/alpha/netboot/version @@ -0,0 +1,7 @@ +$Id$ + +NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this +file is important. Make sure the current version number is on line 6. + +0.1: Initial i386 version, germinated from the NetBSD i386 + standalone, but enormously modified. |