From owner-freebsd-alpha Tue Aug 14 15:13: 3 2001 Delivered-To: freebsd-alpha@freebsd.org Received: from smtp1.xs4all.nl (smtp1.xs4all.nl [194.109.127.131]) by hub.freebsd.org (Postfix) with ESMTP id 180BB37B40C; Tue, 14 Aug 2001 15:12:44 -0700 (PDT) (envelope-from wkb@freebie.xs4all.nl) Received: from freebie.xs4all.nl (freebie.xs4all.nl [213.84.32.253]) by smtp1.xs4all.nl (8.9.3/8.9.3) with ESMTP id AAA29701; Wed, 15 Aug 2001 00:12:38 +0200 (CEST) Received: (from wkb@localhost) by freebie.xs4all.nl (8.11.4/8.11.4) id f7EMCbZ41199; Wed, 15 Aug 2001 00:12:37 +0200 (CEST) (envelope-from wkb) Date: Wed, 15 Aug 2001 00:12:37 +0200 From: Wilko Bulte To: Mike Smith Cc: Andrew Gallatin , freebsd-alpha@FreeBSD.ORG Subject: Re: AlphaServer 4100 boot/install problem Message-ID: <20010815001237.B41154@freebie.xs4all.nl> References: <20010813081521.A34999@freebie.xs4all.nl> <200108130623.f7D6Ns203390@mass.dis.org> <20010813192638.A36352@freebie.xs4all.nl> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <20010813192638.A36352@freebie.xs4all.nl>; from wkb@freebie.xs4all.nl on Mon, Aug 13, 2001 at 07:26:38PM +0200 X-OS: FreeBSD 4.3-STABLE X-PGP: finger wilko@freebsd.org Sender: owner-freebsd-alpha@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org On Mon, Aug 13, 2001 at 07:26:38PM +0200, Wilko Bulte wrote: > On Sun, Aug 12, 2001 at 11:23:54PM -0700, Mike Smith wrote: > > > > Please, try using 'more' in the loader to read a large (>8k) text > > > > document from somewhere; one of the loader's 4th files would do it. Make > > > > sure it looks right. > > > > > > OK, I tried: > > > > > > 'more' on src/checksum.md5 > > > > > > I don't see any anomalies in the display of more. > > > > Ok. Next step, put some diagnostics in > > sys/boot/common/load_elf.c:elf_loadfile(), every place that it returns > > Is this the correct function? I don't seem to have it. Might it be you > mean: > > /* > * Attempt to load the file (file) as an ELF module. It will be stored at > * (dest), and a pointer to a module structure describing the loaded object > * will be saved in (result). > */ > int > elf_loadmodule(char *filename, vm_offset_t dest, struct loaded_module > **result) In the meantime I ran a number of new experiments: - boot from floppy, using the same 'make release' as for the CD: Just Works - take the 4.3R cdboot and stick that on the CD instead of the one which was 'make released' out of 4.4-PRERELEASE source. This does not work as in: FreeBSD/alpha SRM CD9660 boot, Revision 0.1 (jkh@beast.freebsd.org, Mon Mar 20 21:08:56 GMT 2000) Memory: 65536 k > echo \007\007 > autoboot 10 Hit [Enter] to boot immediately, or any other key for command prompt. Booting [kernel]... can't load 'kernel' autoboot: no bootable kernel | Type '?' for a list of commands, 'help' for more detailed help. This experiment I ran because the only thing Matt MFC-ed was the multiple prom-open in cdboot. I was somehow expecting a cdboot dependency. It seems that assumption was false. So.. it looks like we can safely assume it is the loader alright. But only when started from CD/cdboot. I have put printf()s in elf_loadmodule like: /* * Open the image, read and validate the ELF header */ if (filename == NULL) /* can't handle nameless */ { printf ("elf_loadmodule: filename\n"); return(EFTYPE); } printf ("elf_loadmodule: filename= %s\n",filename); if ((fd = open(filename, O_RDONLY)) == -1) { printf ("elf_loadmodule: cannot open\n"); return(errno); } firstpage = malloc(PAGE_SIZE); if (firstpage == NULL) { printf ("elf_loadmodule: malloc\n"); return(ENOMEM); } firstlen = read(fd, firstpage, PAGE_SIZE); if (firstlen <= sizeof(ehdr)) { printf ("elf_loadmodule: readlen\n"); err = EFTYPE; /* could be EIO, but may be small file */ goto oerr; } /* Is it ELF? */ if (!IS_ELF(*ehdr)) { printf ("elf_loadmodule: iself\n"); err = EFTYPE; goto oerr; } if (ehdr->e_ident[EI_CLASS] != ELF_TARG_CLASS || /* Layout ? */ ehdr->e_ident[EI_DATA] != ELF_TARG_DATA || ehdr->e_ident[EI_VERSION] != EV_CURRENT || /* Version ? */ ehdr->e_version != EV_CURRENT || ehdr->e_machine != ELF_TARG_MACH) { /* Machine ? */ printf ("elf_loadmodule: eftype1\n"); err = EFTYPE; goto oerr; } /* * Check to see what sort of module we are. */ kmp = mod_findmodule(NULL, NULL); if (ehdr->e_type == ET_DYN) { /* Looks like a kld module */ if (kmp == NULL) { printf("elf_loadmodule: can't load module before kernel\n"); err = EPERM; goto oerr; } if (strcmp(elf_kerneltype, kmp->m_type)) { printf("elf_loadmodule: can't load module with kernel type '%s'\n", kmp->m_type); err = EPERM; goto oerr; } /* Looks OK, got ahead */ kernel = 0; /* Page-align the load address */ pad = (u_int)dest & PAGE_MASK; if (pad != 0) { dest += pad; } } else if (ehdr->e_type == ET_EXEC) { /* Looks like a kernel */ if (kmp != NULL) { printf("elf_loadmodule: kernel already loaded\n"); err = EPERM; goto oerr; } /* * Calculate destination address based on kernel entrypoint */ dest = (vm_offset_t) ehdr->e_entry; if (dest == 0) { printf("elf_loadmodule: not a kernel (maybe static binary?)\n"); err = EPERM; goto oerr; } kernel = 1; } else { But it does not seem to trigger a printf. So.. where to go from here? Suggestions welcomed. -- | / o / / _ Arnhem, The Netherlands email: wilko@FreeBSD.org |/|/ / / /( (_) Bulte To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-alpha" in the body of the message