diff options
author | Boris Popov <bp@FreeBSD.org> | 2000-05-01 17:41:25 +0000 |
---|---|---|
committer | Boris Popov <bp@FreeBSD.org> | 2000-05-01 17:41:25 +0000 |
commit | 801e789e01eae994cafa8952ee477207fa4b5b0c (patch) | |
tree | 0d7138009f72831c7771b09d4e84166fe54ee0a8 /sys/boot/arc | |
parent | db667a40a524ed6b14468d2335a8a99c01b65cba (diff) | |
download | src-801e789e01eae994cafa8952ee477207fa4b5b0c.tar.gz src-801e789e01eae994cafa8952ee477207fa4b5b0c.zip |
Update loader logic to distinguish modules vs. files.
Add support for module metadata. The old way of dependancy
handling will be supported for a while.
Reviewed by: peter
Notes
Notes:
svn path=/head/; revision=59854
Diffstat (limited to 'sys/boot/arc')
-rw-r--r-- | sys/boot/arc/lib/bootinfo.c | 32 | ||||
-rw-r--r-- | sys/boot/arc/lib/elf_freebsd.c | 18 | ||||
-rw-r--r-- | sys/boot/arc/loader/conf.c | 4 |
3 files changed, 27 insertions, 27 deletions
diff --git a/sys/boot/arc/lib/bootinfo.c b/sys/boot/arc/lib/bootinfo.c index 8b74e0d2c06e..f95e7e47ef40 100644 --- a/sys/boot/arc/lib/bootinfo.c +++ b/sys/boot/arc/lib/bootinfo.c @@ -121,17 +121,17 @@ bi_copyenv(vm_offset_t addr) vm_offset_t bi_copymodules(vm_offset_t addr) { - struct loaded_module *mp; - struct module_metadata *md; + struct preloaded_file *fp; + struct file_metadata *md; /* start with the first module on the list, should be the kernel */ - for (mp = mod_findmodule(NULL, NULL); mp != NULL; mp = mp->m_next) { + for (fp = file_findfile(NULL, NULL); fp != NULL; fp = fp->f_next) { - MOD_NAME(addr, mp->m_name); /* this field must come first */ - MOD_TYPE(addr, mp->m_type); - MOD_ADDR(addr, mp->m_addr); - MOD_SIZE(addr, mp->m_size); - for (md = mp->m_metadata; md != NULL; md = md->md_next) + MOD_NAME(addr, fp->f_name); /* this field must come first */ + MOD_TYPE(addr, fp->f_type); + MOD_ADDR(addr, fp->f_addr); + MOD_SIZE(addr, fp->f_size); + for (md = fp->f_metadata; md != NULL; md = md->md_next) if (!(md->md_type & MODINFOMD_NOCOPY)) MOD_METADATA(addr, md); } @@ -147,18 +147,18 @@ bi_copymodules(vm_offset_t addr) */ int bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save, - struct loaded_module *mp) + struct preloaded_file *fp) { - struct loaded_module *xp; + struct preloaded_file *xp; vm_offset_t addr, bootinfo_addr; u_int pad; vm_offset_t ssym, esym; - struct module_metadata *md; + struct file_metadata *md; ssym = esym = 0; - if ((md = mod_findmetadata(mp, MODINFOMD_SSYM)) != NULL) + if ((md = file_findmetadata(fp, MODINFOMD_SSYM)) != NULL) ssym = *((vm_offset_t *)&(md->md_data)); - if ((md = mod_findmetadata(mp, MODINFOMD_ESYM)) != NULL) + if ((md = file_findmetadata(fp, MODINFOMD_ESYM)) != NULL) esym = *((vm_offset_t *)&(md->md_data)); if (ssym == 0 || esym == 0) ssym = esym = 0; /* sanity */ @@ -168,9 +168,9 @@ bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save, /* find the last module in the chain */ addr = 0; - for (xp = mod_findmodule(NULL, NULL); xp != NULL; xp = xp->m_next) { - if (addr < (xp->m_addr + xp->m_size)) - addr = xp->m_addr + xp->m_size; + for (xp = file_findfile(NULL, NULL); xp != NULL; xp = xp->f_next) { + if (addr < (xp->f_addr + xp->f_size)) + addr = xp->f_addr + xp->f_size; } /* pad to a page boundary */ pad = (u_int)addr & PAGE_MASK; diff --git a/sys/boot/arc/lib/elf_freebsd.c b/sys/boot/arc/lib/elf_freebsd.c index 4e75820a88ca..994a78714bbf 100644 --- a/sys/boot/arc/lib/elf_freebsd.c +++ b/sys/boot/arc/lib/elf_freebsd.c @@ -90,37 +90,37 @@ #define _KERNEL -static int elf_exec(struct loaded_module *amp); +static int elf_exec(struct preloaded_file *amp); int bi_load(struct bootinfo_v1 *, vm_offset_t *, - struct loaded_module *); + struct preloaded_file *); -struct module_format alpha_elf = { elf_loadmodule, elf_exec }; +struct file_format alpha_elf = { elf_loadfile, elf_exec }; vm_offset_t ffp_save, ptbr_save; static int -elf_exec(struct loaded_module *mp) +elf_exec(struct preloaded_file *fp) { #if 0 static struct bootinfo_v1 bootinfo_v1; - struct module_metadata *md; + struct file_metadata *md; Elf_Ehdr *hdr; int err; - if ((md = mod_findmetadata(mp, MODINFOMD_ELFHDR)) == NULL) + if ((md = file_findmetadata(fp, MODINFOMD_ELFHDR)) == NULL) return(EFTYPE); /* XXX actually EFUCKUP */ hdr = (Elf_Ehdr *)&(md->md_data); /* XXX ffp_save does not appear to be used in the kernel.. */ bzero(&bootinfo_v1, sizeof(bootinfo_v1)); - err = bi_load(&bootinfo_v1, &ffp_save, mp); + err = bi_load(&bootinfo_v1, &ffp_save, fp); if (err) return(err); /* * Fill in the bootinfo for the kernel. */ - strncpy(bootinfo_v1.booted_kernel, mp->m_name, + strncpy(bootinfo_v1.booted_kernel, fp->f_name, sizeof(bootinfo_v1.booted_kernel)); prom_getenv(PROM_E_BOOTED_OSFLAGS, bootinfo_v1.boot_flags, sizeof(bootinfo_v1.boot_flags)); @@ -130,7 +130,7 @@ elf_exec(struct loaded_module *mp) bootinfo_v1.cnputc = NULL; bootinfo_v1.cnpollc = NULL; - printf("Entering %s at 0x%lx...\n", mp->m_name, hdr->e_entry); + printf("Entering %s at 0x%lx...\n", fp->f_name, hdr->e_entry); exit(0); closeall(); alpha_pal_imb(); diff --git a/sys/boot/arc/loader/conf.c b/sys/boot/arc/loader/conf.c index d40ea46fe06a..ba4000eb39cd 100644 --- a/sys/boot/arc/loader/conf.c +++ b/sys/boot/arc/loader/conf.c @@ -64,9 +64,9 @@ struct fs_ops *file_system[] = { * Sort formats so that those that can detect based on arguments * rather than reading the file go first. */ -extern struct module_format alpha_elf; +extern struct file_format alpha_elf; -struct module_format *module_formats[] = { +struct file_format *file_formats[] = { &alpha_elf, NULL }; |