diff options
author | benno <benno@FreeBSD.org> | 2002-07-10 12:13:16 +0000 |
---|---|---|
committer | benno <benno@FreeBSD.org> | 2002-07-10 12:13:16 +0000 |
commit | 80bd743152032a69abfede51ebcf19172fa80457 (patch) | |
tree | edaa406b29d70fe65005d510350b4db195f82a8e /sys/boot/ofw | |
parent | c04f2a4cddd9c20c6ade603b2184d9589561ed90 (diff) | |
download | FreeBSD-src-80bd743152032a69abfede51ebcf19172fa80457.zip FreeBSD-src-80bd743152032a69abfede51ebcf19172fa80457.tar.gz |
Add support for passing metadata.
Diffstat (limited to 'sys/boot/ofw')
-rw-r--r-- | sys/boot/ofw/libofw/elf_freebsd.c | 60 |
1 files changed, 16 insertions, 44 deletions
diff --git a/sys/boot/ofw/libofw/elf_freebsd.c b/sys/boot/ofw/libofw/elf_freebsd.c index 99f7c53..e82a28d 100644 --- a/sys/boot/ofw/libofw/elf_freebsd.c +++ b/sys/boot/ofw/libofw/elf_freebsd.c @@ -29,9 +29,7 @@ #include <sys/param.h> #include <sys/linker.h> -#if 0 -#include <machine/bootinfo.h> -#endif +#include <machine/metadata.h> #include <machine/elf.h> #include <stand.h> @@ -65,51 +63,25 @@ ofw_elf_loadfile(char *filename, vm_offset_t dest, int ofw_elf_exec(struct preloaded_file *fp) { - struct file_metadata *md; - Elf_Ehdr *ehdr; - vm_offset_t entry, bootinfop; - int boothowto, err, bootdev; -#if 0 - struct bootinfo *bi; -#endif - vm_offset_t ssym, esym; - - if ((md = file_findmetadata(fp, MODINFOMD_ELFHDR)) == NULL) { - return(EFTYPE); /* XXX actually EFUCKUP */ + struct file_metadata *fmp; + vm_offset_t mdp; + Elf_Ehdr *e; + int error; + + if ((fmp = file_findmetadata(fp, MODINFOMD_ELFHDR)) == NULL) { + return(EFTYPE); } - ehdr = (Elf_Ehdr *)&(md->md_data); - -#if 0 - if ((err = bi_load(fp->f_args, &boothowto, &bootdev, &bootinfop)) != 0) - return(err); -#endif - entry = ehdr->e_entry & 0xffffff; - - ssym = esym = 0; - if ((md = file_findmetadata(fp, MODINFOMD_SSYM)) != NULL) - ssym = *((vm_offset_t *)&(md->md_data)); - if ((md = file_findmetadata(fp, MODINFOMD_ESYM)) != NULL) - esym = *((vm_offset_t *)&(md->md_data)); - if (ssym == 0 || esym == 0) - ssym = esym = 0; /* sanity */ -#if 0 - bi = (struct bootinfo *)PTOV(bootinfop); - bi->bi_symtab = ssym; - bi->bi_esymtab = esym; -#endif - -/* -#ifdef DEBUG -*/ - printf("Start @ 0x%lx ...\n", entry); -/* -#endif -*/ + e = (Elf_Ehdr *)&fmp->md_data; + + if ((error = md_load(fp->f_args, &mdp)) != 0) + return (error); + + printf("Kernel entry at 0x%lx ...\n", e->e_entry); dev_cleanup(); ofw_release_heap(); -/* OF_chain(0, 0, entry, bootinfop, sizeof(struct bootinfo));*/ - OF_chain((void *)reloc, end - (char *)reloc, (void *)entry, NULL, 0); + OF_chain((void *)reloc, end - (char *)reloc, (void *)e->e_entry, + (void *)mdp, sizeof(mdp)); panic("exec returned"); } |